Семейство AutoCAD – Русский – только для чтения
Делитесь знаниями, задавайте вопросы, читайте самые популярные темы по AutoCAD.
отмена
Отображаются результаты для 
Показать  только  | Вместо этого искать 
Вы имели в виду: 

Как связать атрибут динамического блока с его параметром

20 ОТВЕТ 20
Ответить
Сообщение 1 из 21
MarinaNizova
10079 просмотров, 20 ответов

Как связать атрибут динамического блока с его параметром

Добрый день!

 

Есть динамичекий блок основной надписи. В нем два линейных параметра: высота и ширина рамки. Эти параметры могут принимать значения из списка (по ГОСТу 297, 420, 594 и тд).

Под рамкой требуется выводить формат листа, например А4, А3х2 и т.д.

Создала атрибут, поняла что в него можно выводить значения самого параметра (через задание значения по умолчанию)

Например, если высота листа 297, то в атрибуте будет значение 297. Если поменять высоту листа, после регенерации изменится и атрибут.

Но мне надо как то свзять значение 297 со строкой "А4". То есть не напрямую выводить значение атрибута, а обрабатывать его каким то образом.

Подскажите, пожалуйста, можно ли это сделать и как?

20 ОТВЕТ 20
Сообщение 2 из 21
kpblc2000
в ответ: MarinaNizova

А4 - это не только высота 297, но и ширина 210. Поэтому в принципе три варианта: либо писать жуткое DIESEL-выражение (которое будет учитывать все варианты), либо использовать формулу типа "4-(Высота/297-1)-(Ширина/210-1)", либо использовать несколько параметров видимости - и уже от них "плясать",

Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.


Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library

Сообщение 3 из 21
MarinaNizova
в ответ: kpblc2000



kpblc2000 написано:
писать жуткое DIESEL-выражение (которое будет учитывать все варианты),

суть ясна, но я не оч знакома с diesel и не могу понять как использовать в diesel-выражение значение параметра. Если его имя "высота", оно имеет формулу поля
%<\AcObjProp.16.2 Object(?BlockRefId).Parameter(48).UpdatedDistance \f "%lu6">%

мне надо составить выражение на подобие

1) $(if,$(=,"высота",297),A4,....)

это конечно упрощенно, но я хочу хотя бы увидеть что поле правильно работает с параметром и обновляется при изменении параметра. но ничего пока не выходит и ответа не нашла:

тут подобный вопрос без ответа http://forums.autodesk.com/t5/Dynamic-Blocks/If-statement-in-field-of-dynamic-block/td-p/2376448

 


kpblc2000 написано:
либо использовать несколько параметров видимости - и уже от них "плясать",

ятак понимаю, в этом случае пользователь должен будет сам выбирать из списка состояние видимости и автоматически будет меняться какое из значений формата становится видимым? или можно как то добиться, что состояние видимости будет изменяться само при изменении параметров высоты и ширины листа?


kpblc2000 написано:
А4 - это не только высота 297, но и ширина 210.


я думала сделать 2 атрибута, Высота точно определяет формат А0-А4, а Ширина - кратность формата, ну то есть если составить список всех возможных значений ширины листа по ГОСТ, там не будет одинаковых значений для разных высот,  поэтому я думала создать два рядом стоящих атрибута

"АN"x"K"

где "AN" - От А0 до А4  - определяется параметром высоты

К - кратность ширины листа - однозначно определяется параметром ширины листы

Сообщение 4 из 21
kpblc2000
в ответ: MarinaNizova

А как учитывать, что А3, например, может быть повернут на 90°?

Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.


Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library

Сообщение 5 из 21
kpblc2000
в ответ: kpblc2000

Именно поэтому я и предлагаю использовать видимости. Кстати, на dwg.ru, по-моему, нечто аналогичное и посоветовали, насколько я помню.

Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.


Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library

Сообщение 6 из 21
MarinaNizova
в ответ: kpblc2000


kpblc2000 написано:
А как учитывать, что А3, например, может быть повернут на 90°?


да, об этом я не подумала... вы правы

 

С видимостью я поняла, посмотрела как сделан блок на dwg.ru.

У меня просто ситуация немного другая: у меня написана dll, которая подгружает корпоративное меню, одна из команд в меню - сформировать лист произвольного размера. Выпадает форма с всеми возможными размерами (там есть не только ГОСТ, но и наши внутренние размеры). Пользователь выбирает нужный размер - формируется лист с нужной конфигурацией плоттера и на него размещается блок штампа в нужных размерах. Это все делается программно. А сейчас потребовалось еще формат выводить внизу для ГОСТ размеров

Поэтому я и думала  - не сильно изменяя код, изменить блок - чтобы для ГОСТовских размеров автоматически менялось значение атрибута.

Но видимо не получится, вопрос остается ткрытым как использовать параметр в Diesel-выражении..

 

Если не получится, буду менять и код и блок - чтобы работать с видимостью

спасибо

Сообщение 7 из 21
kpblc2000
в ответ: MarinaNizova

Я бы подумал о том, чтобы это "программное" значение выводить внутри того же кода. Наверняка это окажется чуть ли не самым простым и внятным решением.

Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.


Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library

Сообщение 8 из 21
MarinaNizova
в ответ: kpblc2000


kpblc2000 написано:
Я бы подумал о том, чтобы это "программное" значение выводить внутри того же кода. Наверняка это окажется чуть ли не самым простым и внятным решением.

я тоже так сначала подумала. Но если я выведу программно текст, то после этого при изменении блока вручную, поле останется "мертвым".

То есть, если пользователь решит увеличить формат листа (например не влез чертеж в предполагаемый размер), блок изменит размер, а подпись формата останется прежней

 

Сообщение 9 из 21
kpblc2000
в ответ: MarinaNizova

Сугубо ИМХО. Я вижу несколько вариантов:
1. Писать невероятное по сложности (и наверняка не сильно устойчивое) DIESEL-выражение в поле. Сложное - потому что надо учитывать и варианты поворота листа, и нестандартные размеры... Короче, не айс.
2. Оставить многосточный текст / неизменяемый атрибут и убрать динамику в блоке рамки.
3. Использовать дополнительные постоянные объектные реакторы на блок рамки. Тоже не фонтан решение, как мне кажется.

Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.


Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library

Сообщение 10 из 21
MarinaNizova
в ответ: kpblc2000

Cпасибо за советы.


Обсудили с руководителем, остановились на временном варианте - пока оставить простой текстовый объект и изменять его ручками самим пользователям.

 

В будущем (если руки дойдут) - думаю использовать атрибут со значением по умолчнанию "формат листа". (это название конфигурации печати из файла pc3)

1) При формировании листа в пространстве листа программно не только блок размещается с нужными размерами, но и размер самого печатного листа. (как раз устанавливается нужная конфигурация из pc3). Поэтому ее удобно использовать, т.к. она должна всегда соответсвовать размеру блока.

2) Только вот сейчас у меня названия конфигураций из файла  pc3 не соответсвуют названиям гостовских форматов. Придется их переименовывать и переписывать код, т.к. сейчас как раз используется в коде названия этих кофигураций.

 

Вообщем это выходит за рамки первоначального вопроса, но решила поделиться:))

еще раз спасибо

Сообщение 11 из 21
AutoGnom
в ответ: MarinaNizova

Данная задача решается в AutoCAD стандартными инструментами, и изобретать заново велосипед не стоит. 1. В «Редакторе блоков» создаем нужное количество параметров ‘Выбор’. 2. Там же создаем операцию ‘Выбор’ и связываем с любым свободным параметром ‘Выбор’. 3. В окне «Таблица выбора свойств» операции ‘Выбор’ нажимаем кнопку «Добавить свойства…». В раскрывшемся окне «Добавление свойства параметров» выбираем переключатель «Добавить свойства поиска» и подключаем все остальные свободные (нужны именно свободные) параметры ‘Выбора’. 4. Создаем атрибут, а в нем поле. В окне «Поле» выбираем ‘МестозаполнительБлока’, а там имя нужного параметра ‘Выбора’.
Сообщение 12 из 21
kpblc2000
в ответ: AutoGnom

Вообще-то про параметр видимости и его использование писалось выше. И этого решения (как немного позже выяснилось) недостаточно.

Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.


Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library

Сообщение 13 из 21
AutoGnom
в ответ: kpblc2000

Я писал не про параметр видимости, а про параметр выбора.

На работе админы доступ к сети порезали и ответить толком не получилось. Так что повторюсь...

 

Дополнительные св-ва поиска.png

1. В «Редакторе блоков» создаем нужное количество параметров ‘Выбор’.

2. Там же создаем операцию ‘Выбор’ и связываем с любым свободным параметром ‘Выбор’.

3. В окне «Таблица выбора свойств» операции ‘Выбор’ нажимаем кнопку «Добавить свойства…». В раскрывшемся окне «Добавление свойства параметров» выбираем переключатель «Добавить свойства поиска» и подключаем все остальные свободные (нужны именно свободные) параметры ‘Выбора’.

4. Создаем атрибут, а в нем поле. В окне «Поле» выбираем ‘МестозаполнительБлока’, а там имя нужного параметра ‘Выбора’.

Сообщение 14 из 21
kpblc2000
в ответ: AutoGnom

Проблема еще и в том, что могут быть нестандартные размеры. Так-то, конечно, выбор был бы, наверное, идеален...

Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.


Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library

Сообщение 15 из 21
AutoGnom
в ответ: kpblc2000

Под нестандартными размерами я предпологал, что имеются в виду форматы А2х1,5; А2х2,5 и т.д., которые не трудно внести в список. Но если препологается вообще произвольный формат, то все равно можно выкрутиться.

 

Таблица выбора свойств.png

В "Таблице выбора свойств" есть вторая снизу позиция <Несоответствующий>, которая автоматически выбирается при любом несоответствии 'Входных свойств (Input Properties)', прописаных в таблице. Можно реализовать указаный на рисунке вариант с 'пробелом' в текстовом поле. Только что проверил, при соответствии 'Входных свойств' выводится 'Формат 100х100' или 'Формат 200х100', а при не соотвествии 'пробел'.

Сообщение 16 из 21
AutoGnom
в ответ: kpblc2000

В окне «Таблица выбора свойств» разработчиками предусмотрен вариант <Несоответствующий>, который автоматически выбирается при любом несоответствии 'Входным свойтсвам (Input Properties)'. Т.ч вполне можно предусмотреть и нестандартные размеры.

Таблица выбора свойств.png

Пробел в тектсовом поле 'Свойства поиска (lookup Properties)' успешно справляется с поставленой задачей.

Сообщение 17 из 21
kpblc2000
в ответ: AutoGnom

Уговорил 🙂 Пускай теперь автор попробует и сообщит о результате 🙂

Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.


Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library

Сообщение 18 из 21
alan2306
в ответ: AutoGnom

Здравствуйте. У меня такая же задача, как и у автора созданной темы. Я попробовал Ваш метод. Всё вроде бы получилось, но при выборе одного из вариантов формата, атрибут не меняет своего значения, и пребывает всегда в одном состоянии.  Пожалуйста, помогите решить проблему. 

 

1122334455

Сообщение 19 из 21
kpblc2000
в ответ: alan2306

А если выполнить регенерацию?

Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.


Алексей Кулик aka kpblc | Aleksei Kulik aka kpblc Facebook | LinkedIn
autolisp.ru
Техническая поддержка программистов Autodesk в СНГ
Библиотека пользовательских lisp-функций | Custom Lisp-function library

Сообщение 20 из 21
alan2306
в ответ: kpblc2000

Спасибо большое за ответ! Даже не ожидал, что Вы мне ответите) Столько лет прошло с момента вашего поста.

 


@kpblc2000  написал (-а):
А если выполнить регенерацию?

Если Вы имеете ввиду обновить вхождение блока, то я пробовал - не помогло.

Не нашли то, что искали? Задайте вопросы в сообществе или поделитесь своими знаниями.

Новая тема  

Autodesk Design & Make Report