|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Как на VBA определить, есть ли в активном чертеже выделенные примитивы?
Инженер
С-Пб
Регистрация: 02.10.2008
Сообщений: 3,704
|
||
Просмотров: 9871
|
|
||||
AutoCAD Регистрация: 26.07.2007
Москва
Сообщений: 1,064
|
Тогда сразу по второй части.
Давным давно (in a galaxy far, far away...) мне крыс помог решить этот вопрос. Как ты понимаешь на лиспе. Код:
Если тебе такой способ подходит, приведу свой пример загрузки и вызова из vba. Возможно можно подкоректировать лисп под твои требования. Последний раз редактировалось Vildar, 25.11.2010 в 10:45. |
|||
![]() |
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,704
|
Цитата:
Код:
А еще интересно, можно ли такую функцию определить и выполнить через комстроку.. Ну, что б можно было не подгружать лисп файл, а зарядить весь код в строковую переменную, и передать этим самым сендкоммандом автокаду.. Нельзя наверное..
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! Последний раз редактировалось AlexV, 26.11.2010 в 11:29. |
|||
![]() |
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,996
|
Цитата:
Код:
***Добавлено Вот ф-ция с измененными названиями переменных Код:
Цитата:
__________________
Как использовать код на Лиспе читаем здесь Последний раз редактировалось VVA, 26.11.2010 в 17:56. |
|||
![]() |
|
||||
специалист по околачиванию грушевых деревьев Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811
|
Цитата:
Код:
cм. например здесь http://through-the-interface.typepad...ques_for_.html |
|||
![]() |
|
||||
Инженер Регистрация: 02.10.2008
С-Пб
Сообщений: 3,704
|
Цитата:
__________________
...Не пытайся гнуть ты ложку, Не вяжи её узлом. Ложка - ложка понарошку, А по правде, - это лом! |
|||
![]() |
|
||||
что хочу, то и делаю Регистрация: 30.06.2014
Сообщений: 119
|
Цитата:
Dim sel as AcadSelectionSet Set sel=ThisDrawing.SelectionSets.Add("temp") sel.SelectOnScreen когда становится не нужным удаляем sel.Delete ЗЫ: нет под рукой vba, возможны не точности кода |
|||
![]() |
|
||||
Регистрация: 11.10.2014
Сообщений: 24
|
Может кто-то подсказать. Пишу VBA команду :
ThisDrawing.SendCommand "(progn(defun ss-gripset (/ SS SR SSN I)(vl-load-com)(setq SS(vla-get-selectionsets(vla-get-activedocument (vlax-get-acad-object))))(setq SSN(vla-item SS "TestSelectionSetFilter3"))(setq SR(ssadd))(vlax-for I SSN (ssadd(vlax-vla-object->ename I)SR))(sssetfirst nil SR)(princ))(ss-gripset))\n" Выдает ошибку - complete error: end of statemen. Выделяем название в кавычках. (Autocad 2018 64bit) |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,616
|
mel2, нда... я бы порекомендовал Вам прочитать про конкатенацию строк в VBA вообще и про использование кавычек при этом в частности, а так же обратить внимание на команду Chr().
Думаю после этого, у Вас все получиться. |
|||
![]() |
|
||||
Регистрация: 11.10.2014
Сообщений: 24
|
Спасибо. Только разбираюсь с VBA. С кавычками вроде бы разобрался. VBA ошибок не выдает, код запускается, но в командой строке выдает ошибку скобок:
------------------------------------------------------------------ : (progn(defun c:selset-gripset ( / selSets selres selSpdsNode item)(vl-load-com)(setq selSets (vla-get-SelectionSets (vla-get-ActiveDocument (vlax-get-acad-object))))(setq selSpdsNode (vla-item selSets "test5"))(setq selres (ssadd)) (vlax-for item selSpdsNode (ssadd (vlax-vla-object->ename item) selres) ) (sssetfirst nil selres) (princ))(selset-gripset))\n ; ----- Error around expression ----- (PRINC) ; ; error : extra right parenthesis on input ------------------------------------------------------------------ Но если подгрузить .lsp файл с этой же строкой : ------------------------------------------------------------------ (defun c:selset-gripset ( / selSets selres selSpdsNode item)(vl-load-com)(setq selSets (vla-get-SelectionSets (vla-get-ActiveDocument (vlax-get-acad-object))))(setq selSpdsNode (vla-item selSets "test4"))(setq selres (ssadd)) (vlax-for item selSpdsNode (ssadd (vlax-vla-object->ename item) selres) ) (sssetfirst nil selres) (princ)) ------------------------------------------------------------------ То все работает. В чем может быть причина? |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,450
|
Во-первых, строка не такая же. Во-вторых, а наборы с такими именами точно есть?
----- добавлено через 38 сек. ----- В-третьих, ты определяешь функцию или команду?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Регистрация: 11.10.2014
Сообщений: 24
|
Прошу не кидать сильно камнями. Многого не понимаю еще... Просто пытаюсь организовать выделение подсвеченных объектов выборки на чертеже, как предложено в этой теме. Других вариантов, как это можно сделать, к сожалению, не нашел. Буду благодарен, если подскажите, как правильно (лучше) это сделать...
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
А из сторонних программы нужна лишь бесплатная студия. Но тут возникает вопрос - пишете код официально или пытаетесь упростить себе жизнь неофициально? Если официально - напрямую или через начальника отдела служебку на имя сисадмина. Если неофициально - зависит от того, насколько вась-вась с сисадмином) |
|||
![]() |
|
||||
Регистрация: 11.10.2014
Сообщений: 24
|
Цитата:
![]() да, но легко внедряется. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
тоже нужны админские права - чтобы энаблер доставить в акад, как и для студии. Да и еще про производительность тыц. Может в новых версиях подправили - но в 2012 акаде подтормаживание реально чувствовал на неслабой машине с SSD. В конечном итоге попросил админа снести этот энаблер VBA.
----- добавлено через ~2 мин. ----- это время не пропадет - в офисе Майкрософта VBA пока очень даже востребован) |
|||
![]() |
|
||||
Цитата:
энаблер VBA для работы с СОМ АК не нужен. с любого офисного приложения можно подключаться ихним редактором. а можно на коленке в блокноте наваять типа Код:
----- добавлено через ~13 мин. ----- Цитата:
Код:
__________________
Мастерская СПДС Последний раз редактировалось doctorraz, 07.08.2018 в 11:37. |
||||
![]() |
|
||||
Регистрация: 11.10.2014
Сообщений: 24
|
Спасибо - работает!
У меня правда уже у самого получилось сделать, но только разделив на две команды: ThisDrawing.SendCommand "(defun c:selset-gripset ( / selSets selres selSpdsNode item)(vl-load-com)(setq selSets (vla-get-SelectionSets (vla-get-ActiveDocument (vlax-get-acad-object))))(setq selSpdsNode (vla-item selSets ""test4""))(setq selres (ssadd)) (vlax-for item selSpdsNode (ssadd (vlax-vla-object->ename item) selres) ) (sssetfirst nil selres) (princ))\n" а потом вызвать: ThisDrawing.SendCommand "selset-gripset" & vbCrLf А с одной строкой что-то не разобрался |
|||
![]() |
|
||||
Код:
__________________
Мастерская СПДС |
||||
![]() |
|
||||
Регистрация: 11.10.2014
Сообщений: 24
|
Цитата:
Например, в VBA идет перебор объектов (objEnts as AcadEntity). И если какой-то объект подходит под условие - сразу его выделить командой типа ThisDrawing.SendCommand "(progn(defun.... |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
|
|||
![]() |
|
||||
Регистрация: 11.10.2014
Сообщений: 24
|
Вопрос в другом. Насколько я понимаю, в набор AcadSelectionSet можно добавлять только массив объектов. Есть к примеру задача - выделить из выбранных пользователем объектов только те, которые удовлетворяют условию 1. Я перебираю все элементы коллекции AcadSelectionSet и подходящие надо заносить в в какой-то массив... Но тут возникает вопрос безразмерного массива, я же заранее не знаю сколько получится объектов. Вот мне и показало проще выделять сразу по ходу анализа... а можно ли выделить сразу объект, а не набор - не знаю.
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
ну ничто не мешает массиву объектов состоять из одного элемента)
в VBA есть динамические массивы (Redim, Redim Preserve), коллекции (Сollection). |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
VBA Есть ли возможность графики в VBA на форме (PictureBox)? | Alexey_02 | Программирование | 8 | 13.02.2013 14:08 |
Есть ли программа для присвоения примитивам в чертеже свойства аннотативности? | Chapter | Программирование | 12 | 08.07.2010 00:30 |
Получения списка кривых на чертеже (VBA) | Тензор | Программирование | 3 | 12.12.2009 19:39 |
Запись макросов VBA в ACAD`e; возможность есть? | ssv22 | Программирование | 9 | 19.02.2009 20:22 |
примитивы в VBA... | Хотабыч | Программирование | 1 | 22.08.2005 13:10 |