как выбрать Highlight (подсвеченные объекты) на lisp
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > как выбрать Highlight (подсвеченные объекты) на lisp

как выбрать Highlight (подсвеченные объекты) на lisp

Ответ
Поиск в этой теме
Непрочитано 12.09.2010, 11:13 #1
как выбрать Highlight (подсвеченные объекты) на lisp
gizmo_zx
 
Проектировщик ЭО,ЭМ, ЭОС
 
Нижний Новгород
Регистрация: 18.07.2007
Сообщений: 257

Добрый день.
Кто поможет с програмкой, которая выделяла (аналог qselect) только подсвеченные объекты (Highlight) в модели.
Есть программа на VBA, после ее нароботы остаются подсвеченные объекты, но сделать сними ничего нельзя (копировать, открыть общие свойства). Возможно ли на lisp их выделить?
Просмотров: 4496
 
Непрочитано 12.09.2010, 12:22
1 | #2
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Просто

Код:
[Выделить все]
(defun C:CHLIGHT(/ acdoc pf)
  (vl-load-com)
  (setq pf (vla-get-pickfirstselectionset
	     (setq adoc
		    (vla-get-activedocument
	       (vlax-get-acad-object))))
	)
  (vlax-for obj pf
    (vla-put-color obj acblue)
    (vla-highlight obj :vlax-false)
    )
  (sssetfirst nil nil)
 
  (princ))
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 17.09.2010, 09:45
#3
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Просто
Чегото не работает.
А очень нужно

Подозреваю нужны дополнительные функции?
Я вобще далек от lisp.

Последний раз редактировалось gizmo_zx, 17.09.2010 в 12:50.
gizmo_zx вне форума  
 
Непрочитано 17.09.2010, 14:37
#4
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
Чегото не работает.
А очень нужно

Подозреваю нужны дополнительные функции?
Я вобще далек от lisp.
Сначала надо выбрать объекты-чтобы были видны ручки
Потом запустить программу
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 17.09.2010, 15:05
#5
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Сначала надо выбрать объекты-чтобы были видны ручки
Потом запустить программу
Есть программа на VBA поиск блоков по имени, атрибуту, значению атрибута.

Программа ставит найденному блоку флаг хайлайт.
Но мне их надо выбрать.

чегото все равно не выходит (возможно при выборе (когда появляются ручки (флаг хайлата сьрасывается)
или другой путь как на VBA добавить объекты в новый набор и оставить выделинными на экране после завершения
Вложения
Тип файла: dvb Finde_block_by.dvb (96.0 Кб, 67 просмотров)
gizmo_zx вне форума  
 
Непрочитано 17.09.2010, 15:21
#6
Nike

Шаражпроектхалтурмонтаж
 
Регистрация: 29.10.2004
Талды-Париж
Сообщений: 6,013


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
Есть программа на VBA поиск блоков по имени, атрибуту, значению атрибута.
Есть аналогичная программулина на LISP, в том числе с возможностью выбор по текстовой маске и выделением блоков. Надо?
Nike вне форума  
 
Непрочитано 17.09.2010, 15:31
#7
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
Есть программа на VBA поиск блоков по имени, атрибуту, значению атрибута.

Программа ставит найденному блоку флаг хайлайт.
Но мне их надо выбрать.

чегото все равно не выходит (возможно при выборе (когда появляются ручки (флаг хайлата сьрасывается)
или другой путь как на VBA добавить объекты в новый набор и оставить выделинными на экране после завершения
Пробуй свой проект
Вложения
Тип файла: dvb Finde_block_by.dvb (64.5 Кб, 63 просмотров)
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 17.09.2010, 15:47
#8
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


Цитата:
Сообщение от Олег (jr.) Посмотреть сообщение
Пробуй свой проект
А как мне удалить из начального выбора "oSset.SelectOnScreen dxftype, dxfdata" неподходящие элементы, чтобы остались только нужные?
gizmo_zx вне форума  
 
Непрочитано 18.09.2010, 13:48
1 | #9
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
А как мне удалить из начального выбора "oSset.SelectOnScreen dxftype, dxfdata" неподходящие элементы, чтобы остались только нужные?
Посмотри пример
Сначала выбираются все объекты, потом выбираешь
ненужные во второй набор и они удаляются из основного
набора
Изменяй под свои условия сам

Код:
[Выделить все]
Sub SubtractSSetExample()
    Dim oSset As AcadSelectionSet
    Dim oRset As AcadSelectionSet
    Dim oEnt As AcadEntity
    Dim rEnt As AcadEntity
    Dim i
    With ThisDrawing.SelectionSets
        While .Count > 0
            .Item(0).Delete
        Wend
        Set oSset = .Add("$SelectAllYouWant$")
        Set oRset = .Add("$SelectYouWantToSubstract$")
    End With

    MsgBox "Select all objects"
    oSset.SelectOnScreen
    MsgBox "Selected: " & oSset.Count & " objects"
    MsgBox "Select objects to be removed"
    oRset.SelectOnScreen
    MsgBox "Selected: " & oRset.Count & " objects"
    
    For i = oSset.Count - 1 To 0 Step -1
    Set oEnt = oSset.Item(i)
    For Each rEnt In oRset
    If oEnt.ObjectID = rEnt.ObjectID Then
    Dim remObj(0) As AcadEntity
    Set remObj(0) = oEnt
    oSset.RemoveItems remObj
    Exit For
    End If
    Next rEnt
    Next i
    MsgBox "Still in the parent selection set: " & oSset.Count & " objects"
    
End Sub
~'J'~
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 19.09.2010, 17:30
#10
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


А как оставить выделенными объекты oSset.
т.е. остались выделенными после окончания макроса: "(все объекты)" минус "(которые удалить из набора)"
Код:
[Выделить все]
    Dim cmd As String
    cmd = "(sssetfirst (ssget " & Chr(34) & "_P" & Chr(34) & ")" & " " & "(ssget " & Chr(34) & "_P" & Chr(34) & "))" & vbCr    
    ThisDrawing.SendCommand cmd
не момогат все равно возращает полный набор, в том числе и исключенные объекты
gizmo_zx вне форума  
 
Непрочитано 19.09.2010, 19:19
1 | #11
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от gizmo_zx Посмотреть сообщение
А как оставить выделенными объекты oSset.
т.е. остались выделенными после окончания макроса: "(все объекты)" минус "(которые удалить из набора)"
Код:
[Выделить все]
    Dim cmd As String
    cmd = "(sssetfirst (ssget " & Chr(34) & "_P" & Chr(34) & ")" & " " & "(ssget " & Chr(34) & "_P" & Chr(34) & "))" & vbCr    
    ThisDrawing.SendCommand cmd
не момогат все равно возращает полный набор, в том числе и исключенные объекты
Пробуй
Вложения
Тип файла: dvb Finde_block_by.dvb (64.5 Кб, 69 просмотров)
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 20.09.2010, 11:56
#12
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


СУПЕР!
Примного благодарен!
Просто мечта!
gizmo_zx вне форума  
 
Непрочитано 20.09.2010, 12:12
#13
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Ну и ладушки...
Олег (jr.) вне форума  
 
Автор темы   Непрочитано 12.10.2010, 10:06
#14
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


Нашел баг, как поправить...?
проблемма возникает при большом колличестве блоков.

Предположительно слишком длинная строка cmd
Код:
[Выделить все]
ThisDrawing.SendCommand cmd
в комадной строке Acad:

(setq ss (ssadd))(ssadd (handent "130A1") ss)(ssadd (handent "1309D")
ss)(ssadd (handent "13099") ss)(ssadd (handent "13095") ss)(ssadd (handent
"1308D") ss)(ssadd (handent "13089") ss)(ssadd (handent "13085") ss)(ssadd
(handent "13081") ss)(ssadd (handent
((_>
'тут висит ожидая действия
*Прервано*
; ошибка: Функция отменена


нужные объекты остаются подсвечены, т.е. Highlight , но не выбраны
gizmo_zx вне форума  
 
Непрочитано 12.10.2010, 12:57
#15
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


dvb не открывал, тем не менее: я бы "разделил" строку символами Enter'a (по-моему, chr(13))
Лиспер вне форума  
 
Автор темы   Непрочитано 12.10.2010, 13:24
#16
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


Цитата:
Сообщение от Лиспер Посмотреть сообщение
dvb не открывал, тем не менее: я бы "разделил" строку символами Enter'a (по-моему, chr(13))
не прокатило

фрагмент кода.

Код:
[Выделить все]
cmd = "(setq ss (ssadd))"
'создаем лисп выражение для посылки в командную строку
For Each oEnt In nSset

cmd = cmd & "(ssadd (handent " & Chr(34) & oEnt.Handle & Chr(34) & ") ss) " 

Next

cmd = cmd & "(princ)(sssetfirst ss ss)" & vbCr

ThisDrawing.SendCommand cmd
Прокатывает если найденых объектов мало и строка получается маленькой (предположительно <255)
gizmo_zx вне форума  
 
Непрочитано 12.10.2010, 13:28
#17
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


А если так?
Код:
[Выделить все]
For Each oEnt In nSset

cmd = cmd & vbCr & "(ssadd (handent " & Chr(34) & oEnt.Handle & Chr(34) & ") ss) " 

Next
Лиспер вне форума  
 
Автор темы   Непрочитано 12.10.2010, 13:40
#18
gizmo_zx

Проектировщик ЭО,ЭМ, ЭОС
 
Регистрация: 18.07.2007
Нижний Новгород
Сообщений: 257
<phrase 1= Отправить сообщение для gizmo_zx с помощью Skype™


листинг командной строки
Код:
[Выделить все]
_find_block_by_ vbarun
Имя макроса: find_block_by_
Выберите объекты:
Выберите объекты: Противоположный угол: найдено: 6
Выберите объекты:
Команда:
Команда: (setq ss (ssadd))
<Selection set: 43>
Команда: (ssadd (handent "110E92") ss) <Selection set: 43>
Команда:
_FIND_BLOCK_BY_ vbarun
Имя макроса: find_block_by_ Ошибка при выполнении
Команда:
Команда: (ssadd (handent "110E80") ss) <Selection set: 43>
Команда:
_FIND_BLOCK_BY_ vbarun
Имя макроса: find_block_by_ Ошибка при выполнении
Команда:
Команда: (ssadd (handent "110E6E") ss) <Selection set: 43>
Команда:
_FIND_BLOCK_BY_ vbarun
Имя макроса: find_block_by_ Ошибка при выполнении
Команда:
Команда: (ssadd (handent "110E5C") ss) <Selection set: 43>
Команда:
_FIND_BLOCK_BY_ vbarun
Имя макроса: find_block_by_ Ошибка при выполнении
Команда:
Команда: (ssadd (handent "5D5DB") ss) <Selection set: 43>
Команда: (princ)(sssetfirst ss ss)
(<Selection set: 43> <Selection set: 43>)
т.е. ентер перезапускает весь макрос VBA...
тут наверно какаято хитрость нужна
gizmo_zx вне форума  
 
Непрочитано 12.10.2010, 13:44
#19
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 979


Проще всего будет записать временный lsp-файл и его загрузить.
Лиспер вне форума  
 
Непрочитано 12.10.2010, 14:36
#20
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Лиспер Посмотреть сообщение
Проще всего будет записать временный lsp-файл и его загрузить.
Правильно. И самое разумное через SendCommand послать только команду загрузки этого файла. Кроме совсем элементарных случаев.
ShaggyDoc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > как выбрать Highlight (подсвеченные объекты) на lisp



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
LISP. Разорвать объекты в точках пересечения. BreakObjects. VVA Готовые программы 110 25.02.2022 07:33
Как определить стоимость проектных работ, если не известна стоимость строительства? dextron3 Поиск литературы, чертежей, моделей и прочих материалов 37 27.08.2014 18:32
Выбрать с помощью SSGET объекты по цвету elena_k Программирование 3 02.09.2008 15:17
Не могу выбрать объекты Vanek531 AutoCAD 1 05.12.2007 09:54
DIESEL. Как выбрать объекты? Димас Программирование 4 24.03.2006 07:36