|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Макрос VBA добавления атрибутов в блоки
Регистрация: 22.10.2019
Сообщений: 45
|
||
Просмотров: 4086
|
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
----- добавлено через ~4 мин. ----- А так получаете определение блока, потом к нему через AddAttribute добавляете определение атрибута - примерно так навскидку. Про программное создание/редактирование динблоков забудьте, можно только управлять параметрами готовых уже - если ничего в последних версиях акада не поменялось, конечно |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
в общем, надо править не вставки блоков AcadBlockReference, а их определения AcadBlock. Т.е. по вставкам блоков определить имя блоков с учетом их динамичности (можно использовать ту же Collection для сбора неповторяющихся имен блоков - имя блок и как ключ, и как значение). И потом уже пройтись по этой коллекции имен блоков и из ThisDrawing.Blocks получить определения блоков, а к ним (определениям атрибутов) уже добавить желаемый атрибут.
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Код:
Цитата:
Ну и не будет лишним проверять самое определение блока - не является ли оно внешней ссылкой (свойство IsXRef), прежде чем туда добавлять атрибуты. А также пройтись в цикле по элементам определения блока For Each lItem In blk и найти объект AcadAttribute с именем с из attributeValues(1) - защита от повторного добавления атрибутов. И, кстати, логически не верно название коллекции - attributeValues, так как это теги (Tag). |
|||
![]() |
|
||||
Регистрация: 22.10.2019
Сообщений: 45
|
Спасибо, Сергей, за конструктивную информацию, уточню что я не программист, а проектировщик, который пытается немного упростить жизнь (chatGPT иногда в помощь), буду доводить код до ума! Еще раз спасибо!
----- добавлено через ~2 мин. ----- Так же может подскажите, как вытащить текущее состояние видимости и присвоить его при вставке блока заново? |
|||
![]() |
|
||||
Регистрация: 10.01.2020
Сообщений: 421
|
Цитата:
Получить же список параметров несложно: Код:
Справка по GetDynamicBlockProperties здесь Для записи в блок нужно сделать обратный алгоритм: Код:
|
|||
![]() |
|
||||
Регистрация: 10.01.2020
Сообщений: 421
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Выбор VBA для подобной задачи - заведомо путь страданий, имхо. Чтобы иметь возможность править значения параметров в удобном виде в палитре, приходится добавлять атрибуты - так как VBA (как и лисп) просто не умеют работать с палитрами напрямую. А так можно было бы и в те же XData добавлять данные, причем к любому из примитивов - 16кб данных не так уж и мало при грамотном пользовании.
Offtop: да тут почти все не программисты, а просто инженеры-самоучки. Буквально по пальцам можно посчитать профессиональных (по роду основной деятельности) программистов) |
|||
![]() |
|
||||
Регистрация: 22.10.2019
Сообщений: 45
|
Пока лишь предметно стоит задача - добавить свои атрибуты к блокам, можно конечно и копированием в лоб решать данную задачу, вариант вполне рабочий, но так как задача рутинная, решил попробовать автоматизировать. По поводу VBA могу сказать лишь только то что просто раньше когда то давным давно был с ним знаком поверхностно, и так как с помощью vba какие то базовые задачи можно автоматизировать для выполнения текущих задач - вполне устроило
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
предметно в настоящее время врятли получится, поскольку остановился в конечном итоге на .Net технологии и языке C# - а вы его не знаете, насколько понимаю. Если вкратце - создаете свою палитру (наподобие панели свойств), там размещаются соответствующие контролы (ведь не придется уже все в текстовой формат загонять для размещения в атрибутах), на событие изменение выбора примитивов ImpliedSelectionChanged вешаете считывание XData из выделенных объектов и отображение на вашей палитре (возможность интерактивного контроля и изменения свойств объекта или группы объектов). И обратный процесс задания значений в XData. Ну и придется тогда писать свою обработку (вместо стандартного извлечения данных) - так уже половина кода по извлечению данных будет написана в ходе реализации палитры)
Минусы .Net технологии: 1. Порог вхождения повыше, чем у того же VBA. Но не настолько, как у ObjectARX на С++ - все таки .Net "прячет" от разработчика прямое управление ресурсами. 2. Требуется ставить среду разработки типа Visual Studio или аналога (хотя VBA тоже требует установки VBAEnabler). 3. Зависимость кода от версии акада (но эта зависимость сильно преувеличена в головах противников этой технологии, честно говоря). 4. Другие не смогут пользоваться вашими наработками, если не поделитесь (хотя сейчас это и не минус даже - только халявщики будут недовольны, как всегда ![]() Плюсы .Net технологии: 1. Имеете почти полный доступ к возможностям акада; 2. Имеете очень удобную среду разработки, которую не сравнить с VBA. 3. Имеете доступ к тысячам отлаженных методов и классов .Net фрейворка, который стоит на любой машине с акадом. 4. Получаете доступ к нормальным технологиям создания интерфейсов, а не тот урезанный WinForms в VBA. 5. И прочее) ----- добавлено через ~29 мин. ----- хотя опять же, при .Net технологии нет смысла копировать костыли автоматизации средствами базового акада - нужно не редактировать каждый раз данные, а вводить внешнюю базу оборудования - в виде того же XМL файла (тогда можно "схитрить" и первое время не писать редактор БД, а заполнять вручную - копипаст шаблона элемента и забить значения: в том же бесплатном Notepade++ или любом другом редакторе с подсветкой синтаксиса). |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Замена тегов атрибутов в блоках с сохранением значений. | Krovlaf | AutoCAD | 23 | 19.06.2020 18:02 |
Макрос VBA Excel для извлечения таблиц из линий, полилиний, текста из DWG файлов в Excel с помощью NanoCAD/AutoCAD | JZY | Готовые программы | 8 | 14.07.2016 06:31 |
AutoCAD MEP 2014: Откуда возникли непонятные блоки и стили в новом блоке? | Новичёк | Вертикальные решения на базе AutoCAD | 7 | 14.12.2015 11:09 |
Именованные блоки превращаются в неименованные. Что делать? Autocad 2008SP1 | emich | AutoCAD | 7 | 25.06.2014 10:30 |