|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Макрос VBA добавления атрибутов в блоки
Регистрация: 22.10.2019
Сообщений: 45
|
||
Просмотров: 3917
|
|
||||
Регистрация: 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
Сообщений: 415
|
Цитата:
Получить же список параметров несложно: Код:
Справка по GetDynamicBlockProperties здесь Для записи в блок нужно сделать обратный алгоритм: Код:
|
|||
![]() |
|
||||
Регистрация: 10.01.2020
Сообщений: 415
|
Цитата:
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Выбор VBA для подобной задачи - заведомо путь страданий, имхо. Чтобы иметь возможность править значения параметров в удобном виде в палитре, приходится добавлять атрибуты - так как VBA (как и лисп) просто не умеют работать с палитрами напрямую. А так можно было бы и в те же XData добавлять данные, причем к любому из примитивов - 16кб данных не так уж и мало при грамотном пользовании.
Offtop: да тут почти все не программисты, а просто инженеры-самоучки. Буквально по пальцам можно посчитать профессиональных (по роду основной деятельности) программистов) |
|||
![]() |
|
||||
Регистрация: 22.10.2019
Сообщений: 45
|
Пока лишь предметно стоит задача - добавить свои атрибуты к блокам, можно конечно и копированием в лоб решать данную задачу, вариант вполне рабочий, но так как задача рутинная, решил попробовать автоматизировать. По поводу VBA могу сказать лишь только то что просто раньше когда то давным давно был с ним знаком поверхностно, и так как с помощью vba какие то базовые задачи можно автоматизировать для выполнения текущих задач - вполне устроило
|
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Замена тегов атрибутов в блоках с сохранением значений. | 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 |