На одном из известных форумов пользователь предложил решить интересную задачу.
Он создал два динамических блока — щит рабочего освещения и щит аварийного освещения. В каждом блоке можно было выбрать в свойствах тип щита.
Предлагалось реализовать такой алгоритм:
- Выбрать изображение щита;
- Выбрать тип (исполнение) щита;
- Извлечь атрибуты при помощи _dataextraction и заполнить спецификацию.
Основная задача — реализовать это при помощи одного динамического блока.
Собственными силами пользователю удалось реализовать либо выбор условного графического изображения щита освещения, либо выбор типа (исполнения) щита.
После этого он обратился за помощью. Реализуем запрос пользователя.
Шаг 1
Открываем блок в редакторе блоков и вставляем параметр «Видимость» с панели инструментов. Переименовываем параметр в «УГО».
Шаг 2
Добавляем атрибут в блок. Команда _att. Затем в появившемся окне задаём параметры. Назначаем тэг, и делаем атрибут невидимым. Значение атрибута по-умолчанию пока не заполняем.
Шаг 3
В правом верхнем углу окна вызываем редактор состояний видимости (кнопка «1») и создаём два состояния видимости: ЩО для изображения щита рабочего освещения и ЩАО для изображения щита аварийного освещения.
При помощи кнопок «2» и «3» скрываем/отображаем ненужные/нужные элементы блока для каждого состояния видимости. Кнопка «4» переключает отображения скрытых элементов (показывать или не показывать скрытые элементы для текущего состояния видимости).
Шаг 4
Добавляем вспомогательную линию длиной 72 единицы и линейный параметр для неё. Делаем линию невидимой во всех состояниях блока. Параметр должен быть видимым во всех состояниях блока.
Шаг 5
Устанавливаем свойства параметра длины, как показано на рисунке. При нажатие на кнопку «1» появляется окно редактирования списка допустимых значений. При помощи кнопки «2» необходимые значения.
Шаг 6
Переходим на вкладку Actions/Действия и выбираем действие Strech/Растяжение. Далее выбираем параметр «Размер», выбираем сторону (можно просто нажать Enter), выполняем выделение рамкой, чтобы она захватывала вспомогательную линию, выбираем объект (вспомогательную линию), на которую будет распространяться действие растяжения, нажимаем Enter.
Шаг 7
Возвращаемся на вкладку «Параметры» и добавляем параметр Lookup. Переименовываем в «Тип щита».
Шаг 8
Переходим на вкладку Actions/Действия и выбираем действие Lookup. Далее выбираем параметр «Тип щита».
В появившемся окне редактирования таблицы свойств параметра Lookup нажимаем на кнопку «Добавить свойство» (1) и во всплывающем окне добавляем свойство «Размер».
Тестируем работу блока. Оба меню доступны, в свойствах отображается нужные значения.
Значения свойства Lookup можно извлечь при помощи _dataextraction для заполнения спецификации. Но пользователь хотел видеть это в атрибуте. Сделаем это.
Шаг 9
Двойной клик мышкой на атрибуте и появляется окно редактирования свойств. В поле «Значение по-умолчанию» кликаем правой кнопкой мышки и выбираем «Вставить поле».
Далее устанавливаем свойства как на рисунке.
Тестируем работу блока. Оба меню доступны, в свойствах отображается нужные значения. В значении атрибута отображается значение свойства Lookup, т.е. тип щита.
Так как отображение свойств свойств Lookpup в атрибуте реализовано при помощи полей AutoCAD, то это создаёт определённые неудобства. При изменении свойства параметра Lookup, нужно обновлять поля AutoCAD в чертеже. Это выполняется командой _updatefield. Выделяем блок (или блоки) и обновляем поля.
Также обновить поля можно командой _regenall. Но в данном случае нужно посмотреть в настройках AutoCAD, при каких условиях обновляются поля.
Чтобы скачать файл с блоком, нажмите на кнопку: СКАЧАТЬ ФАЙЛ С БЛОКОМ
Добрый день !
А возможно ли вобще сделать динамический блок, например, автоматического выключателя в свойствах кот. будет выпадающий список — однополюсный, 2-х полюсный, 3-х полюсный (выпадающий список сделал) с различными атрибутами (артикул, модель и т.д.) чтобы потом вытащить их в спецификацию.
Трудность в том, что не могу понять, как сделать так, чтобы значение одних и тех же атрибутов менялось в зависимости от «состояния видимости».
Благодарю !
Состояние видимости лишь отображает или скрывает атрибут. Значение одного и того же атрибута блока не может быть разным в разных состояниях видимости.
Выхода два:
1. Сделать разные атрибуты для каждой видимости (но тогда будут некоторые проблемы со спецификацией).
2. В значение атрибута использовать поле, в которое будет считывать свойство какого-то элемента. Но функционал полей ограничен.
Есть еще третий вариант — использовать дополнительно к видимости динамический параметр «Выбор», как это и было сделано со щитом. Но нужно экспериментировать под данную задачу, сходу не готов подсказать рабочее решение.