|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Значение атрибута, задающее угол для параметра вращения в динамическом блоке
топограф, технолог
Москва
Регистрация: 24.05.2009
Сообщений: 3,072
|
||
Просмотров: 6591
|
|
||||
Отлавливать события - это совсем круто. Я думал только о запуске процедуры - передать значение угла из атрибута в угол поворота.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Если лисп, то вызовом лиспа. Без хитростев.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Цитата:
![]() Дано: куча динблоков с вращаемым элементом и с атрибутом. Вопрос: как для всех таких блоков установить угол поворота элемента равным значению атрибута?
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
значения атрибутов каким образом инициализируется? Сама задача элементарная - считать значение атрибута соответствующего блока, перевести в число и присвоить соответствующему динпараметру поворота этого же блока.
|
|||
![]() |
|
||||
Цитата:
Ну, да: считать из атрибута, и присвоить повороту. Ничего хитрого.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Отсутствие инструмента.
Нашел, наконец, тему с названием, полностью соответствующим моему вопросу: Как сделать так, чтобы параметр динамического блока принял значение аттрибута autocad В той теме динпараметр управляет диаметром окружности, а не поворотом. Но суть вопроса такая же.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
на лиспе решается на раз-два
|
||||
![]() |
|
||||
Для тех, кто владеет лиспом - наверное.
![]() Если в общем виде, чтобы для любого случая, то могло быть так: 1. Запрашивается название динпараметра. 2. Запрашивается название атрибута. 3. Выбор объектов. 4. Присваивается значение динпараметру. Или: 1. Выбрать объекты. 2. Выбрать из списка параметров динблоков нужный. (Ввести название нужного из выведенного списка). 3. Выбрать из списка атрибутов нужный. (Ввести название нужного из выведенного списка). 4. Присваивается значение динпараметру. Тогда пригодилось бы и для других тем и вопросов.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
инструмент - прямые руки из нужного места называется) Набросал по быстрому код (чистый функционал без всяких проверок под ваш файл примера), разбирайтесь:
Код:
Цитата:
|
|||
![]() |
|
||||
Цитата:
Как это вызывать из Автокада?
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
А как обычно вызывают .Net код из акада? Скачать любую бесплатную студию по вкусу, подключить необходимые акадовские библиотеки в проект, вставить мой код и создать сборку. Потом загрузить через NetLoad. Все инструкции в инете есть - и на русском языке тоже)
|
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
DynIN DynOUT, все уже написано... импортировать атрибуты и дин. свойства в ексель и там назначить дин свойству значение из атрибута (дин. свойства поворота, они в радианах). Экспортировать обратно. Собственно все.
|
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Только зачем для операции, не требующей никаких вариантов преобразования/обработки данных, промежуточный костыль в виде экселя?
|
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Цитата:
Код, который Вы написали, годится только для блока имеющего атрибут с тегом "ROT" и дин. свойством "ROT", что прописано в коде и если в этом или другом блоке не будет этого тега атрибута или наименования дин. свойства, то Ваш код работать не будет, потребуется перекомпиляция под новые наименования, можно эти свойства вынести в отдельный файл настроек... но чем это будет по сути отличаться от dynIN_dynOUT ? Ну и преобразования данных все таки есть, из градусов в радианы lNewAngle = lNewAngle * Math.PI / 180; - это же Ваш код. С другой стороны, все нет времени дописать этот проект, добавить туда реализацию лисп функций, работу с полями и прочие плюшки, но это уже другая тема. Последний раз редактировалось Boxa, 03.05.2019 в 11:45. |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Цитата:
Цитата:
хотя бы тем - что не надо будет указывать, куда сохранять файл, затем идти туда, править файл и обратно загружать. И файл извлечения потом же остается на диске? И если посмотрите на мой код - меняет поворот только тех блоков, которые имеют различные значения атрибута и динпараметра поворота - зачем лишний раз дергать на изменение БД чертежа... |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Вот собственно в этом вся и разница: у Вас учебный пример, у меня просто решение задачи автора.
Думаете автору, который за чертову уйму времени не нашел этого самого времени на изучение любого ЯП нужен учебный пример, к тому же в ветке форума посвященной НЕ программированию? Цитата:
Цитата:
https://github.com/BoxaShu/dynIN_dyn..._2017/DynIN.cs строка 312 |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Разница в том, что мой код решает задачу без дополнительных телодвижений и костылей в виде файлов, которые потом еще надо обрабатывать и вручную удалять (чтобы не скапливался мусор на диске). Универсальность не всегда нужна - зачастую надо выполнение определенной задачи по "нажатию кнопки".
|
|||
![]() |
|
||||
Цитата:
![]() Задачу темы Ваша программа решает. Особенно она хороша в случаях, когда нужно сразу изменить несколько разных параметров и значений разных атрибутов. Но, действительно, для задачи этой темы Ваше решение сложновато. Во-первых, пользователь средней кривизны рук легко может что-то не так сделать с CSV. Во-вторых, если нужно изменить только один параметр, то было бы достаточно это сделать прямо, без внешних файлов - как это делает 99.9% всех лиспов и т.п.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Цитата:
В любом случае, оффтоп это, автору предложено два решения, а спор Универсальный VS Специализированный инструмент тут не уместен, да и мне не интересен. |
|||
![]() |
|
||||
Я не умаляю Вашего решения! Только что порекомендовал его еще раз.
![]() Просто всему свое место.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
Offtop:
Цитата:
Цитата:
ну может кому то из менее ленивых поможет мой код-пример) |
|||
![]() |
|
||||
КЖ; C# Регистрация: 03.11.2005
Санкт-Петербург
Сообщений: 2,611
|
Offtop:
Цитата:
Да и я уже большой мальчик, прекрасно знаю чего стою, так что самоутверждаться нужды нет. |
|||
![]() |
|
||||
Регистрация: 15.02.2017
Сообщений: 47
|
Цитата:
Скйчас мучаюсь с динамическим блоком окна - надо чтобы ширина, задаваемая динамическим блоком автоматически брала значение сатрибута этого же блока |
|||
![]() |
|
||||
Цитата:
Кроме этого dynIN, dynOUT от Boxa. Но для оперативных и многократных действий это сложновато. Эти dynIN, dynOUT отличны для разового и оптового действия. И не ограничены только передачей значений атрибутов в параметры. ----- добавлено через ~12 ч. ----- Для быстрой и удобной работы было бы лучше вроде этого: Цитата:
1. Обрабатывается предварительный выбор. 2. Если нет выбранного, то запрашивается: Выбрать динамические блоки одного названия. 3. Если в выборке динблоки с разными названиями, то пишется: Выбраны динамические блоки с разными названиями. Опять запрашивается: Выбрать динамические блоки одного названия. Если в выборке не только динблоки, другие типы примитивов, то они игнорируются. 4. Для выбранных вхождений динамического блока выводится список его атрибутов с запросом: Введите название нужного атрибута. 5. Выводится список динамических параметров с запросом: Введите название нужного параметра. 6. Значения из указанного атрибута передаются в значения параметра. Если в атрибутах не числовые значения, то они не передаются. 7. Выводится отчет: Изменены параметры: N/M. Где N - число замененных значений параметров, M - число выбранных динблоков. Лучше, конечно, не вводить вручную названия атрибутов-параметров, а выбирать из списков, но это, наверное, сложнее написать.
__________________
количество моих сообщений не говорит о знании Автокада Последний раз редактировалось АлексЮстасу, 10.05.2019 в 15:32. |
||||
![]() |
|
||||
Регистрация: 15.02.2017
Сообщений: 47
|
Конечная цель:
1. Вставляю блок 2. В окне атрибутов прописиваю: маркировка, ширина, высота 3. Динамическими свойствами блоков выставляю в нужное место и положение 4. В свойствах динамического блока опять прописиваю ширину-высоту, используя "растяжение" и получаю нужноегеометрическое изображение. НО: получаеться что ширину-высоту я ввожу ДВА раза: сначала для надписи в атрибуте, а второй раз - для изменения геометрии в свойствах. Это мне кажеться не логичнным, и хочеться вводить один раз. ----- добавлено через ~6 мин. ----- Цитата:
А как это вызвать? |
|||
![]() |
|
||||
Регистрация: 10.08.2013
Сообщений: 11,499
|
а почему не вставить в атрибут поле с ссылкой на динпараметр (только делайте через местозаменитель блока вставку поля), потом сразу ручками выполняете п.3 после п.1 и обновляете чертеж - чтобы поля обновились.
|
|||
![]() |
|
||||
У меня ничего. И я не программист.
С тех пор я к этому не возвращался. Время от времени подобные темы проглядывал, но мельком. Например, сходу: https://forums.autodesk.com/t5/visua...nt/m-p/8581332 Но даже не проверял.
__________________
количество моих сообщений не говорит о знании Автокада |
||||
![]() |
|
||||
Регистрация: 15.02.2011
Сообщений: 40
|
Цитата:
1. Берете Ваш файл с динамическими блоками и устанавливаете желаемое значение атрибута, возможно имеет смысл ввести атрибут с порядковым номером. См. Image 1. 2. Скачиваете примочку от Воха, как описано в инструкции https://github.com/BoxaShu/dynIN_dyn...aster/_Release 3. При помощи этой примочки и команды DYNOUT генерируете файл *_out.CSV 4. Переходите в Excel через данные/ получить внешние данные/ из текста открываете этот файл. Нужно поставить галочку (разделитель - ; точка с запятой) См. Image 2. 5. Производите необходимые манипуляции с данными См. Image 3, можете использовать формулы. 6. Теперь нужно сохранить это в том же формате *_out.CSV с разделителями ; (точка с запятой) для этого нужно изменить стандартный разделитель , (запятая) на ; (точка с запятой). Смотрим этот сайт как сделать (https://www.koskila.net/how-to-chang...sv-from-excel/). См. Image 4. 7. Сохранив файл *_in.CSV, открываем его в автокаде через функцию DYNIN. 8. Загрузив файлы, значение параметра динамического блока меняется (См. Image 5), но я не стал разбираться в причинах несоответствия значений атрибута и динамического блока. Для моих задач с диаметром крон деревьев все работало. В Вашем случае углов нужно немного поэкспериментировать, но думаю, что у Вас все получится. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Diesel. Как передать значение атрибута? | DANZZ | Программирование | 2 | 21.12.2023 14:23 |
Вставка значения атрибута блока в поле в блоке | Prying | AutoCAD | 28 | 08.09.2020 17:51 |
Как присвоить тексту в блоке значение атрибута? | Engineer_Sergii | AutoCAD | 1 | 14.04.2015 18:48 |
Проблема при использовании в динамическом блоке атрибута | Даниил | Динамические блоки | 13 | 31.05.2013 09:16 |
Динамический блок и значение атрибута | _Andre_ | Динамические блоки | 15 | 08.12.2006 23:55 |