| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autolisp. Автоматическая перерисовка выносок

Autolisp. Автоматическая перерисовка выносок

Ответ
Поиск в этой теме
Непрочитано 12.09.2011, 16:22 #1
Autolisp. Автоматическая перерисовка выносок
Zaghim
 
Регистрация: 01.07.2010
Сообщений: 521

Друзья, требуется помощь, ибо зашел в тупик. Есть динамические блоки: трубы, дроссель клапана и прочих. Есть блок с выноской. Так вот прогу для простановки выносок и их заполнения сделал, тыкая на любой блок ставится выноска в точке тыка, берутся параметры из блока и заполняются в выноску. Все круто. А теперь задача в том что бы выноски перерисовать, если меняются блоки, скажем трубы. Это я реализовал для трубы обычными мат формулами, определяя смещения и прочее, тут проблем нет. Но вошел в ступор, если меняется ДК или ОЗК. Формулами передвинуть выноску стало намного сложнее, т.к. вариантов тьма. Может кто посоветует с какого угла заходить, ведь наверняка с этим сталкивались... заранее спасибо
P.S. Как вы понимаете точка вставки выноски может с любого угла блока, в точке вставки, в середине и тд.....
Просмотров: 12530
 
Непрочитано 12.09.2011, 16:39
#2
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Что есть ДК и ОЗК?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 12.09.2011, 16:41
#3
Zaghim


 
Регистрация: 01.07.2010
Сообщений: 521


Дроссель клапан, огезапорный клапан... ну в общем-то будут еще различные решетки воздуховодов... поэтому и тупик... нужно какой-то единый подход для всего
Zaghim вне форума  
 
Непрочитано 12.09.2011, 16:48
#4
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Теперь совсем ничего не понял, что у тебя получается с трубой но не получается с дросселем?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 12.09.2011, 17:04
#5
Zaghim


 
Регистрация: 01.07.2010
Сообщений: 521


Смотри. Круглая труба (2 линии по краям и ось). Диаметр 100. Ставлю выноску на одну из линий, не в середину. Выноска готова. Далее меняю диаметр блока на 250 - ось осталась на месте крайние линии убежали что бы был диаметр 250, соответственно выноска осталась на старом месте. Теперь мне нужно что бы выноска сместилась на эту линию а не болталась указываю в пустоту. Для этого сравниваю 2 диаметра, определяю смещение и точку выноски переношу на линию, где она и была и соответственно обновляю блок выноски на новые значения. Тут все просто т.к. зная угол и 2 диаметра можно определить куда идти. А для других блоков этот метод не прокатывает...
Zaghim вне форума  
 
Непрочитано 12.09.2011, 17:37
#6
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


1. Вариант для равномерно меняющих рахмер блоков - сравнивать точку вставки и getboundingbox.
2. Для "непредсказуемо" изменяемых задать "жесткие" точки вставки для каждой видимости в зависимости от параметров (но по моему овчичнка выделки не стоит).
3. Сразу вставить эту "выноску" в блок (с аттрибутом) - а его уже менять.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 12.09.2011, 17:52
#7
Zaghim


 
Регистрация: 01.07.2010
Сообщений: 521


Вот я уже думал про вариант 3, но опять же внутри блока атрибут будет жестко задан в конкретной точке, а это не всегда есть хорошо...
А вот про getboundingbox не в курсе...что за зверь?
Ага, примерно понял...попробовал на блоке... блок ДК выдал одну вершину прямоуголника... связь не могу понять
Zaghim вне форума  
 
Непрочитано 12.09.2011, 19:28
#8
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


4. реакторы. Как пример можно посмотреть здесь
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 13.09.2011, 09:35
#9
Zaghim


 
Регистрация: 01.07.2010
Сообщений: 521


Вроде бы неплохая штукенция. А будет работать, если я на блок поставлю и не текст, а блок с атрибутами?
Zaghim вне форума  
 
Непрочитано 13.09.2011, 09:45
1 | #10
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Если "штукенцию" запрограммируешь, то будет работать и с блоком.
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 13.09.2011, 09:49
#11
Zaghim


 
Регистрация: 01.07.2010
Сообщений: 521


Спасибо за наводку, буду разбираться...
Zaghim вне форума  
 
Непрочитано 13.09.2011, 10:03
2 | #12
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Это в помощь
Вложения
Тип файла: pdf реакторы.pdf (282.9 Кб, 873 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 13.09.2011, 10:28
#13
Zaghim


 
Регистрация: 01.07.2010
Сообщений: 521


В принципе последовательность кода примерно понял, ссылаясь на Полещука... Вначале выбираем 2 блока, преобразовываем их в VLA-объекты, затем создаем 2 реактора с modify. А вот все тоже "при изменении одного, двигать другой" пока не понял как обработать...разбираюсь дальше...если в начале не прав - поправьте.
Изучил материал. В общем-то весь процесс, который можно отследить при помощи реакторов, я реализовал по-другому. Сделал в блоке выноски атрибут, в который записывал старое состояние блока (имя, координаты, размер и тип). При запуске проги проверял изменился блок или нет...ну а дальше то уже как раз сам процесс перерисовки, а тут засада. Все равно же нужно вычислить точку, на которую нужно сместить атрибут, а здесь засада....

Последний раз редактировалось Zaghim, 13.09.2011 в 10:56.
Zaghim вне форума  
 
Непрочитано 13.09.2011, 11:27
#14
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Дальше все зависит от блока. Если меняется динамический параметр, то можешь запросить его значение. Функции для работы с динамическими блоками: Dynamic Block Functions и Effective Block Name. Про атрибут с параметрами блока: я тебе отвечал уже здесь: Вопрос о имени примитива
В общем алгоритм может быть такой:
1. При простановке выноски для блока создаем реактор modify
2. В Расширенные Данные (далее РД) блока записывам метку (handent) выноски.
3. В ф-ции callback (отклика) реактора считывам РД блока, из них считываем метку выноски. С помощью ф-ции handent находим ename и , при необходимости, vla-object выноски
4. Нужно узнать на сколько изменился блок и вычисляем точку для смещения атрибута
Вот еще пример реактора на изменение размера.
Учти, что тебе нужно разделять в modify 2 события:
a. Перемещение блока - нужно переместить выноску
b. Изменение размеров блока - нужно сместить атрибут
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 13.09.2011, 11:43
#15
Zaghim


 
Регистрация: 01.07.2010
Сообщений: 521


VVA, все это я уже сделал))) (читай выше). Проблема в пункте 4. Вот с трубой нет проблем, там все понятно, знаем угол и знаем старый диаметр и новый - смещение определено. А вот например квадрат с точкой вставки по середине одной из сторой - соответственно он оттуда и увеличивается - уже сложнее. Далее - прямоугольник, опять метод определения смещения другой...а если многоугольник?) Вся соль вопроса в том, что бы единым методом определять смещение...вот это в корне не понимаю как сделать(((
Да, и выноска может быть хоть в точке вставке, хоть по середине, хоть в любом месте на сторонах блока.... вот засада
А в последнем примере с кругами все ясно и очевидно, есть радиус, есть центральная точка... зная это можно легко увеличить длину осей или переместить их вместе с кругом...

Последний раз редактировалось Zaghim, 13.09.2011 в 11:48.
Zaghim вне форума  
 
Непрочитано 13.09.2011, 12:55
#16
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,990
<phrase 1= Отправить сообщение для VVA с помощью Skype™


Выложи примеры твоих блоков. Общее решение озвучено в #6 п.1
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 14.09.2011, 09:58
#17
Zaghim


 
Регистрация: 01.07.2010
Сообщений: 521


Вчера что-то форум упал. Выкладываю...
Вложения
Тип файла: dwg
DWG 2004
fDrKl.dwg (52.0 Кб, 1604 просмотров)
Тип файла: dwg
DWG 2004
fOzk.dwg (54.5 Кб, 1560 просмотров)
Zaghim вне форума  
 
Непрочитано 14.09.2011, 11:13
#18
5hev

roads
 
Регистрация: 22.12.2010
msk
Сообщений: 121
<phrase 1= Отправить сообщение для 5hev с помощью Skype™


Zaghim, сложности на пустом месте! Дима_ правильно посоветовал - добавь ты выноску прям в блок, добавь ее к динамике, и будет она ездить вслед за блоком твоим и за трубой
Если к тому же (скорее всего) параметры блока меняются в строго определенных пределах (ну типо по ГОСТу там), то пользуйся в самих блоках Lookup-ом, о чем вообще тут реакторы) При нормальном количестве блоков в чертеже твой комп вскроется

ИМХО конечно.
Но реакторы тут точно не нужны.
5hev вне форума  
 
Автор темы   Непрочитано 14.09.2011, 11:36
#19
Zaghim


 
Регистрация: 01.07.2010
Сообщений: 521


Я же говорю, что беда в том, что выноска в блоке будет стоять в одном месте, а это не всегда есть хорошо!
Zaghim вне форума  
 
Непрочитано 14.09.2011, 11:44
#20
5hev

roads
 
Регистрация: 22.12.2010
msk
Сообщений: 121
<phrase 1= Отправить сообщение для 5hev с помощью Skype™


Zaghim, погляди. Реген после изменения блока делай.
PS. Пример для вертикального растягивания блока.
Вложения
Тип файла: dwg
DWG 2007
fOzk2.dwg (367.3 Кб, 1608 просмотров)

Последний раз редактировалось 5hev, 14.09.2011 в 11:53.
5hev вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autolisp. Автоматическая перерисовка выносок

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Autolisp Отрисовка и перерисовка объектов как в MagiCad Zaghim LISP 10 01.12.2010 14:54
Как отладить нейтив и менеджед код в COM объекте который используется из AutoLISP? lexluther LISP 1 12.08.2009 08:37
Разрыв в месте пересечения линий выносок Zorroko Конструкции зданий и сооружений 7 20.02.2009 18:42
Копирование данных для спецификаций из выносок СПДС в таблицу из мтекстов Red Nova Программирование 177 08.12.2008 11:35