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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как на VBA определить, есть ли в активном чертеже выделенные примитивы?

Как на VBA определить, есть ли в активном чертеже выделенные примитивы?

Ответ
Поиск в этой теме
Непрочитано 24.11.2010, 10:47
Как на VBA определить, есть ли в активном чертеже выделенные примитивы?
AlexV
 
Инженер
 
С-Пб
Регистрация: 02.10.2008
Сообщений: 3,685

Возможно ли сие? И возможно ли средствами VBA выделить набор объектов аналогично выбору пользователя рамкой? (есть конечно возможность подсветки Highlight, но как выделить грипсы?)

.. ну, предположим, с первой частью вопроса понятно..
Код:
[Выделить все]
ThisDrawing.PickfirstSelectionSet.Count
__________________
...Не пытайся гнуть ты ложку,
Не вяжи её узлом.
Ложка - ложка понарошку,
А по правде, - это лом!

Последний раз редактировалось AlexV, 24.11.2010 в 11:27.
Просмотров: 9468
 
Непрочитано 07.08.2018, 10:46
#21
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,033


Цитата:
Сообщение от mel2 Посмотреть сообщение
да, но легко внедряется.
тоже нужны админские права - чтобы энаблер доставить в акад, как и для студии. Да и еще про производительность тыц. Может в новых версиях подправили - но в 2012 акаде подтормаживание реально чувствовал на неслабой машине с SSD. В конечном итоге попросил админа снести этот энаблер VBA.

----- добавлено через ~2 мин. -----
Цитата:
Сообщение от mel2 Посмотреть сообщение
Но поскольку время потрачено на изучение VBA
это время не пропадет - в офисе Майкрософта VBA пока очень даже востребован)
Сергей812 вне форума  
 
Непрочитано 07.08.2018, 10:52
#22
mel2


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


На работе у нас вообще Bricscad. c админ. правами проблем нет
Так что пока надеюсь, что кто-нибудь подскажет, как запустить этот код через VBA....
mel2 вне форума  
 
Непрочитано 07.08.2018, 11:20
#23
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,033


А VBA & Lisp для акада и брискада совпадают полностью разве?
Сергей812 вне форума  
 
Непрочитано 07.08.2018, 11:24
1 | #24
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,295
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
тоже нужны админские права - чтобы энаблер доставить в акад, как и для студии. Да и еще про производительность тыц. Может в новых версиях подправили - но в 2012 акаде подтормаживание реально чувствовал на неслабой машине с SSD. В конечном итоге попросил админа снести этот энаблер VBA.
писал уже..
энаблер VBA для работы с СОМ АК не нужен.
с любого офисного приложения можно подключаться ихним редактором.
а можно на коленке в блокноте наваять типа
Код:
[Выделить все]
on error Resume next
Set objAutoCAD = GetObject(, "AutoCAD.Application")
if Err.Number <> 0 Then
	MsgBox "Нет связи с АК"
else
	Set ThisDraw = objAutoCAD.ActiveDocument
	MsgBox "Связь с АК есть." &  vbCrLf & "Смотри в консоь"
	ThisDraw.Utility.Prompt vbCrLf & "Связь ЕСТЬ!"  & vbCrLf
end if
сохранить как *.vbs и юзать.

----- добавлено через ~13 мин. -----
Цитата:
Сообщение от mel2 Посмотреть сообщение
Так что пока надеюсь, что кто-нибудь подскажет, как запустить этот код через 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))"  & vbCr
__________________
Мастерская СПДС

Последний раз редактировалось doctorraz, 07.08.2018 в 11:37.
doctorraz вне форума  
 
Непрочитано 07.08.2018, 11:55
#25
mel2


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


Цитата:
Сообщение от doctorraz Посмотреть сообщение
пробуй так
Спасибо - работает!
У меня правда уже у самого получилось сделать, но только разделив на две команды:

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

А с одной строкой что-то не разобрался
mel2 вне форума  
 
Непрочитано 07.08.2018, 12:14
#26
doctorraz

электрик
 
Регистрация: 19.02.2010
Волгоград
Сообщений: 2,295
Отправить сообщение для doctorraz с помощью Skype™


Цитата:
Сообщение от mel2 Посмотреть сообщение
А с одной строкой что-то не разобрался
Код:
[Выделить все]
ThisDrawing.SendCommand "Вася пупкин теперь " & """Доцент """ & "наук" & vbCr
' или
ThisDrawing.SendCommand "Вася пупкин теперь ""Доцент "" наук"  & vbCr
в ком строке получаем Вася пупкин теперь "Доцент" наук
__________________
Мастерская СПДС
doctorraz вне форума  
 
Непрочитано 16.08.2018, 13:11
#27
mel2


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


Цитата:
Сообщение от doctorraz Посмотреть сообщение
пробуй так
Код:
[Выделить все]
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))" & vbCr
__________________
А можно ли подобным способом выделить отдельные объекты, а не предварительно созданный набор?
Например, в VBA идет перебор объектов (objEnts as AcadEntity). И если какой-то объект подходит под условие - сразу его выделить командой типа ThisDrawing.SendCommand "(progn(defun....
mel2 вне форума  
 
Непрочитано 16.08.2018, 17:36
#28
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,033


Цитата:
Сообщение от mel2 Посмотреть сообщение
И если какой-то объект подходит под условие - сразу его выделить командой
зачем? Пользователь сразу полезет что-то делать с этим примитивом? Сделайте просто визуализацию процесса, если он длительный и пускай пользователь смиренно ждет)
Сергей812 вне форума  
 
Непрочитано 16.08.2018, 22:00
#29
mel2


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
зачем?
Вопрос в другом. Насколько я понимаю, в набор AcadSelectionSet можно добавлять только массив объектов. Есть к примеру задача - выделить из выбранных пользователем объектов только те, которые удовлетворяют условию 1. Я перебираю все элементы коллекции AcadSelectionSet и подходящие надо заносить в в какой-то массив... Но тут возникает вопрос безразмерного массива, я же заранее не знаю сколько получится объектов. Вот мне и показало проще выделять сразу по ходу анализа... а можно ли выделить сразу объект, а не набор - не знаю.
mel2 вне форума  
 
Непрочитано 16.08.2018, 22:51
#30
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,033


Цитата:
Сообщение от mel2 Посмотреть сообщение
набор AcadSelectionSet можно добавлять только массив объектов.
ну ничто не мешает массиву объектов состоять из одного элемента)

Цитата:
Сообщение от mel2 Посмотреть сообщение
Но тут возникает вопрос безразмерного массива, я же заранее не знаю сколько получится объектов.
в VBA есть динамические массивы (Redim, Redim Preserve), коллекции (Сollection).
Сергей812 вне форума  
 
Непрочитано 16.08.2018, 23:58
#31
mel2


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


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
ну ничто не мешает массиву объектов состоять из одного элемента)
Спасибо. Так и сделал, по одному элементу забрасываю в коллекцию...
mel2 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Как на VBA определить, есть ли в активном чертеже выделенные примитивы?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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