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

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

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

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

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

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


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


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


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

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


Теперь совсем ничего не понял, что у тебя получается с трубой но не получается с дросселем?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 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,839


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,996


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,996


Если "штукенцию" запрограммируешь, то будет работать и с блоком.
__________________
Как использовать код на Лиспе читаем здесь
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,996


Это в помощь
Вложения
Тип файла: pdf реакторы.pdf (282.9 Кб, 883 просмотров)
__________________
Как использовать код на Лиспе читаем здесь
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,996


Дальше все зависит от блока. Если меняется динамический параметр, то можешь запросить его значение. Функции для работы с динамическими блоками: 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,996


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


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


Вчера что-то форум упал. Выкладываю...
Вложения
Тип файла: dwg
DWG 2004
fDrKl.dwg (52.0 Кб, 1608 просмотров)
Тип файла: dwg
DWG 2004
fOzk.dwg (54.5 Кб, 1565 просмотров)
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 Кб, 1613 просмотров)

Последний раз редактировалось 5hev, 14.09.2011 в 11:53.
5hev вне форума  
 
Непрочитано 14.09.2011, 11:46
#21
Дима_

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


Так добавь к выноске с аттрибутом параметр точки и действие перемещения и двигай куда хочешь.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Автор темы   Непрочитано 14.09.2011, 12:07
#22
Zaghim


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


Ну сразу. Во-первых - выноска нужна не всегда... значит нужно делать дополнительные визибл сеты в блоке! Во-вторых - поверни блок на 90 градусов и посмотри, что получится)))) ну думаю это можно исправить, хотя хз) И в-третьих - выноска не должна быть жестко привязана к одному месту... на огромных планах - это неправильно, чертеж может быть загорожен и выноску нужно двигать!!!
Zaghim вне форума  
 
Непрочитано 14.09.2011, 12:15
#23
5hev

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


Zaghim, полегче, я на тебя еще слава богу не работаю. Тебе дали пищу для размышлений, как ты понимаешь лиспа тут вообще не нужно а нужно уметь работать с тем что в АКАДе есть.
Насчет движения выносок см. №21.
Так вот теперь сам и решай свои проблемы
5hev вне форума  
 
Автор темы   Непрочитано 14.09.2011, 12:31
#24
Zaghim


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


Да нет, я же не прошу за меня делать))) Пища есть, вот и ведем дискуссию... я склоняюсь к тому что бы решить это программно и единообразным для всего) Мы же в разделе программирования)
Zaghim вне форума  
 
Непрочитано 14.09.2011, 12:54
#25
5hev

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


Сколько выносок для одного и того же блока может быть?
5hev вне форума  
 
Автор темы   Непрочитано 14.09.2011, 13:02
#26
Zaghim


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


Выноска всегда одна
А если я не так понял, то блоков может быть на чертеже много и соответственно все разные и выноска на каждом блоке будет
Zaghim вне форума  
 
Непрочитано 14.09.2011, 13:11
#27
5hev

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


Zaghim, я поглядел, реально выноску в блоке не получилось сделать всегда горизонтальнонаправленной. Тогда если делать уж программно, то так:
1. У блоков д.б. полярный точечный параметр, который однозначно указывает на место выноски для данного блока. За него надо тягать чтобы изменить место выноски.
2. У выносок в расширенных данных хранится блок к которому каждая из них клеится. Почему не у блоков в расширенных? А прикинь выноску удалил?
3. Нажимая кнопку "Обновить выноски", прога проходит по выноскам, справляется о положении точки вставки выноски для каждого блока, с которым выноска связана, и в соответствии с углом поворота этого блока и др. параметрами, заполняет выноску и сует куда надо.
О как

Последний раз редактировалось 5hev, 14.09.2011 в 15:57.
5hev вне форума  
 
Автор темы   Непрочитано 14.09.2011, 13:34
#28
Zaghim


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


Что-то не понял ничего))))) Выноска все таки в блоке будет или нет? Сейчас у меня в боке выноски есть атрибут, куда я пихаю имя блока, к которому она принадлежит. С параметром Point внутри блока уже сталкивался... это не простой зверь, он показывает координаты внутри блока, а не координаты в чертеже.
Zaghim вне форума  
 
Непрочитано 14.09.2011, 13:43
#29
5hev

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


Zaghim, выноска будет вне блока, отдельно в чертеже. Если ты не работал с Extended Data, можешь работать и дальше
Цитата:
Сообщение от Zaghim Посмотреть сообщение
боке выноски есть атрибут, куда я пихаю имя блока, к которому она принадлежит
но лучше как я написал, и не "имя блока" а его Handle.
Цитата:
Сообщение от Zaghim Посмотреть сообщение
он показывает координаты внутри блока, а не координаты в чертеже
Верно, тебе это и надо. Будешь от точки вставки блока, трубы к примеру, находить место вставки выноски этого блока полярным смещением.
5hev вне форума  
 
Непрочитано 14.09.2011, 14:02
#30
Neo_

матрица
 
Регистрация: 06.04.2006
Сообщений: 401


Я дилетант, но вроде была такая функция чтобы найти объект в заданном радиусе поиска и определенного типа слоя итп. Нашли и ляпнули как точку (мнимого-) пересечения этой линии с вашей выноской. ???
Neo_ вне форума  
 
Автор темы   Непрочитано 14.09.2011, 14:18
#31
Zaghim


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


Neo_ - это все понятно, а представь блок диффузора. Его увеличили, а ты линию пустил и она уперлась во что-нибудь внутри блока)) не вариант...
5hev[ru], ну а смысл тогда делать такую точку? Я могу это все и формулами рассчитать. Я знаю прошлое его состояние и нынешнее и точку вставки...Что мне считать от точки вставки, что от другой точки... выноска то где угодно может быть
Zaghim вне форума  
 
Непрочитано 14.09.2011, 14:30
#32
5hev

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


Zaghim, по-моему ты как раз не можешь этого рассчитать.
Цитата:
Сообщение от Zaghim Посмотреть сообщение
что бы единым методом определять смещение...вот это в корне не понимаю как сделать(((
Я тебе описал этот единый метод. Что не так?
5hev вне форума  
 
Автор темы   Непрочитано 14.09.2011, 14:49
#33
Zaghim


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


5hev[ru], блоки разные и смещения относительно параметра точка нужно будет рассчитывать разными формулами... по-моему так.

Попутный вопрос немного не в тему. Бывает точка в нуле отображается 0.0 и еще бывает 3.1555е-14, что по сути тоже 0... при сравнении они получаются не равны... как сделать что бы такие мелкие числа лисп определял как 0?
Zaghim вне форума  
 
Непрочитано 14.09.2011, 14:52
1 | #34
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Цитата:
Сообщение от Zaghim Посмотреть сообщение
в нуле отображается 0.0 и еще бывает 3.1555е-14, что по сути тоже 0... при сравнении они получаются не равны...
Код:
[Выделить все]
(equal 0.0 3.1555e-14 1e-6)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 14.09.2011, 14:52
1 | #35
5hev

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


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


Цитата:
Сообщение от Zaghim Посмотреть сообщение
как сделать что бы такие мелкие числа лисп определял как 0?
Ну попробуй условие задать если меньше 0,01 то 0
VVA, как молния!
5hev вне форума  
 
Автор темы   Непрочитано 14.09.2011, 15:15
#36
Zaghim


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


5hev[ru], можешь выложить блок с параметром о котором ты говоришь...я что-то не то понимаю(
Zaghim вне форума  
 
Непрочитано 14.09.2011, 15:25
#37
5hev

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


Вот смотри.
Вложения
Тип файла: dwg
DWG 2007
fDrKl3.dwg (391.6 Кб, 873 просмотров)
5hev вне форума  
 
Автор темы   Непрочитано 14.09.2011, 15:45
#38
Zaghim


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


5hev[ru], хм....только наверно ты забыл сделать так, что бы при увеличении блока эта точка двигалась с ним.
Получается, что когда я вставил выноску, мне нужно вначале перенести эту точку к выноске, потом при изменении так же высчитывать куда она убежала... блин, не знаю, не знаю... попробую пошаманить
Zaghim вне форума  
 
Непрочитано 14.09.2011, 15:49
#39
5hev

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


Zaghim, на твое усмотрение
PS. Переносишь точку куда хочешь, потом программно все выноски обновляются.
5hev вне форума  
 
Автор темы   Непрочитано 14.09.2011, 15:56
#40
Zaghim


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


Да тут палка о двух концах... ладно, спасибо... бум думать)
Zaghim вне форума  
 
Непрочитано 28.12.2011, 11:11
#41
Geniy_Dzydo


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


Цитата:
Сообщение от Zaghim Посмотреть сообщение
Друзья, требуется помощь, ибо зашел в тупик. Есть динамические блоки: трубы, дроссель клапана и прочих. Есть блок с выноской. Так вот прогу для простановки выносок и их заполнения сделал, тыкая на любой блок ставится выноска в точке тыка, берутся параметры из блока и заполняются в выноску. Все круто. А теперь задача в том что бы выноски перерисовать, если меняются блоки, скажем трубы. Это я реализовал для трубы обычными мат формулами, определяя смещения и прочее, тут проблем нет. Но вошел в ступор, если меняется ДК или ОЗК. Формулами передвинуть выноску стало намного сложнее, т.к. вариантов тьма. Может кто посоветует с какого угла заходить, ведь наверняка с этим сталкивались... заранее спасибо
P.S. Как вы понимаете точка вставки выноски может с любого угла блока, в точке вставки, в середине и тд.....
А как вы это реализовали скажи те пожалуйста!!!??? ну очень нужно
Geniy_Dzydo вне форума  
 
Непрочитано 28.12.2011, 12:08
#42
Дима_

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


Цитата:
Сообщение от Zaghim Посмотреть сообщение
ДК или ОЗК
А это у нас что?
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 28.12.2011, 12:58
#43
Geniy_Dzydo


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


Я имел ввиду прогу для простановки выноски. Я это сделал на мой взгляд дубово, динблоком выноски и полями, неудобство в том что их нужно обновлять, хотя и это не проблема впринципе, но все таки хотелось бы посмотреть что у вас за такая интересная штуковина. Приложил файл!
Супермегахит.dwg
Geniy_Dzydo вне форума  
 
Автор темы   Непрочитано 29.12.2011, 09:53
#44
Zaghim


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


Извиняюсь, давно не просматривал ветку, сейчас отрою код и постараюсь выложить.
А вообще от этой штуки отошли. Просто в нашем случае при перерисовке тех же труб, некоторые из них удалялись и вставлялись новые и вся инфа в выноске была неактуальна.
ДК- Дроссель Клапан, ОЗК - Огне Запорный Клапан
Zaghim вне форума  
 
Непрочитано 29.12.2011, 10:29
#45
Geniy_Dzydo


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


Ок, спасибо!) буду ждать...
Geniy_Dzydo вне форума  
 
Автор темы   Непрочитано 29.12.2011, 11:05
#46
Zaghim


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


Код:
[Выделить все]
 
(defun vinper ( / *error*)
  (vl-load-com)
  (setq p_cmdecho (getvar "CMDECHO")
       p_snapmode (getvar "SNAPMODE")
       p_orthomode (getvar "ORTHOMODE")
       p_blipmode (getvar "BLIPMODE")
       p_osmode (getvar "OSMODE")
 )
  (setq z1 (list 0.0 0.0)
    z2 (list 10.0 0.0))
        
  (setq ug1 (angle z1 z2))                    ;0
  (setq ug2 (+ ug1 1.57079632679489655800))   ;90
  (setq ug3 (+ ug2 1.57079632679489655800))   ;180
  (setq ug4 (+ ug3 1.57079632679489655800))   ;270

 (setvar "CMDECHO" 0)
 (setvar "SNAPMODE" 0)
 (setvar "ORTHOMODE" 0)
 (setvar "BLIPMODE" 0)
 (setvar "OSMODE" 1)
 (gc)
  
(setq n 0 nabr nil number 0 name nil object nil
      klass nil layer nil UGOL nil namebl nil)
(setq nabr (ssget "_A"))
(setq number (sslength nabr))
  
(princ "\n")
(setvar "OSMODE" 0)
(while (> number n)
  (setq name (ssname nabr n))
  (setq object (entget name))
  (setq klass (cdr (assoc 0 object)))
  (setq layer (cdr (assoc 8 object)))
  (setq tvstav1 (cdr (assoc 10 object)))
  (setq tvstav1x (car tvstav1))
  (setq tvstav1y (cadr tvstav1))
  (setq UGOL (cdr (assoc 50 object)))

  (cond
     ;;;----- Обработка примитивов типа "INSERT"
     ((eq klass "INSERT")

      (setq namebl (vla-get-effectivename (vlax-ename->vla-object name)))
      (if (equal namebl "Vinoska")
        (progn
          (setq e1 name)
      (setq ed object)
          (if (and
        (= (cdr (assoc 0 ed)) "INSERT") ;_Блок
        (= (cdr (assoc 66 ed)) 1)       ;_След аттриб
          )
          (progn
            (setq e1 (entnext e1))
            (while (AND e1
          (= (cdr (assoc 0 (setq ed (entget e1)))) "ATTRIB")
              ) 
          (setq imattr (cdr (assoc 2 ed))
                    znattr (cdr (assoc 1 ed))
              )
          (if (= imattr "A") 
                (setq nblprkvin znattr)
          )
          (if (equal imattr "VERHSTROKA")
                (setq atrvinoski1 znattr)
          )
          (setq e1 (entnext e1))
            );while
          );progn  
          );if
                (setq item 0)
          (setq flagc 1)
          (setq kolvo 1)
          (setq schet (strlen nblprkvin))
          (while item
            (if    (/= item schet)
              (progn
                (setq st (substr nblprkvin kolvo 1))
                (if (or (= st " ") (= schet kolvo))
          (progn
            (if (= flagc 6)
              (progn
                    (setq name6 (substr nblprkvin (+ otstup 1) (- (+ kolvo 1) otstup)))
            (setq otstup kolvo)
                       (setq item nil)
              )
            )
            (if (= flagc 5)
              (progn
                    (setq razmold (substr nblprkvin (+ otstup 1) (- (- kolvo otstup) 1)))
            (setq otstup kolvo)
            (setq flagc 6)
            (setq kolvo (1+ kolvo))
              )
            )
            (if (= flagc 4)
              (progn
                    (setq name4 (substr nblprkvin (+ otstup 1) (- (- kolvo otstup) 1)))
            (setq otstup kolvo)
            (setq flagc 5)
            (setq kolvo (1+ kolvo))
              )
            )
            (if (= flagc 3)
              (progn
                    (setq name3 (substr nblprkvin (+ otstup 1) (- (- kolvo otstup) 1)))
            (setq otstup kolvo)
            (setq flagc 4)
            (setq kolvo (1+ kolvo))
              )
            )
            (if (= flagc 2)
              (progn
                    (setq name2 (substr nblprkvin (+ otstup 1) (- (- kolvo otstup) 1)))
            (setq otstup kolvo)
            (setq flagc 3)
            (setq kolvo (1+ kolvo))
              )
            )
            (if (= flagc 1)
              (progn
                    (setq name1 (substr nblprkvin 1 (- kolvo 1)))
            (setq name11 name1)
            (setq otstup kolvo)
            (setq flagc 2)
            (setq kolvo (1+ kolvo))
              )
            )
              )
                  (setq kolvo (1+ kolvo))
            );if
          );progn
        );if
          );while
        
      ;--------------------------------------------------------------------
      ;если изменились координаты точки вставки
      (setq name1 (handent name1))
      (setq object1 (entget name1))
      (setq namebl1 (vla-get-effectivename (vlax-ename->vla-object name1)))      
      ;(command "_zoom" "o" name1 "")

      (setq ugol1 (cdr (assoc 50 object1)))  
      (setq tvstav2 (cdr (assoc 10 object1)))
      (setq tvstav2x (car tvstav2))
      (setq tvstav2y (cadr tvstav2))

      (setq oldx (atof name2))
      (setq oldy (atof name3))
      (if (or (/= tvstav2x oldx) (/= tvstav2y oldy))
    (progn
      (setq strcrd (list oldx oldy 0.0))
      (setq newangl (angle strcrd tvstav1))
      (setq newdist (distance strcrd tvstav1))
      (setq newpoint (polar tvstav2 newangl newdist))
      (command "_move" name "" tvstav1 newpoint)
      (setq tvstav1 newpoint)

          (setq tvst1 (car tvstav2))
          (setq tvst2 (cadr tvstav2))
          (setq atr1 (rtos tvst1 2 5))
          (setq atr2 (rtos tvst2 2 5))
          (setq atr3 (rtos ugol1 2 5))
      (setq name2 atr1
        name3 atr2
        name4 atr3)
          (setq nametxt1 (strcat name11 " " atr1 " " atr2 " " atr3 " " razmold " " name6))
      
  ;--------------ЗАПИСЫВАЕМ В АТРИБУТ А - НОВЫЕ КООРДИНАТЫ--------------;
      (setq e1 name)
      (setq ed object)
          (if (and
        (= (cdr (assoc 0 ed)) "INSERT") ;_Блок
        (= (cdr (assoc 66 ed)) 1)       ;_След аттриб
          )
          (progn
            (setq e1 (entnext e1))
            (while (AND e1
          (= (cdr (assoc 0 (setq ed (entget e1)))) "ATTRIB")
              ) 
          (setq imattr (cdr (assoc 2 ed))
                    znattr (cdr (assoc 1 ed))
              )
          (if (= imattr "A")
        (progn
                  (setq ed (subst (cons 1 nametxt1) (assoc 1 ed) ed))
              (entmod ed)
              (entupd e1)
        )
          )
          (setq e1 (entnext e1))
            );while
          );progn  
          );if
        )
      )
      ;---------------------------------------------------------------------
      ;если изменился сам блок
      (setq diffname nil)
      (setq razmold (atof razmold))
      (setq name6 (atoi name6))
     (if (or (equal namebl1 "Dif1") (equal namebl1 "Dif6"))
       (progn
     (if (equal namebl1 "Dif1")
       (progn
             (setq flag 2)
             (tekvisset1)
             (setq razmnew nname)
           )
     )
     (if (equal namebl1 "Dif6")
       (progn
             (setq flag 1)
             (tekvisset1)
             (setq razmnew nname)
           )
     )
        )
       (progn
      (test1)
      (setq typename nname)
      (if (equal typename "Круглый")
        (progn
          (setq flag 1)
          (tekvisset1)
          (setq razmnew nname)
        )
        (progn
          (setq flag 2)
          (tekvisset1)
          (setq razmnew nname)
        )
      )
      ;если изменился тип

      (if (= name6 1)
    (setq typenameold "Круглый")
    (setq typenameold "Прямоугольный")
      )

      (if (not (equal typename typenameold))
    (setq name6 flag)
      )

      
      (setq razmold11 (rtos razmold 2 0))
      (setq e1 name)
      (setq ed object)
      (if (and
        (= (cdr (assoc 0 ed)) "INSERT") ;_Блок
        (= (cdr (assoc 66 ed)) 1)       ;_След аттриб
      )
      (progn
        (setq e1 (entnext e1))
        (while (AND e1
      (= (cdr (assoc 0 (setq ed (entget e1)))) "ATTRIB")
          ) 
          (setq imattr (cdr (assoc 2 ed))
                znattr (cdr (assoc 1 ed))
          )
          (if (equal imattr "VERHSTROKA")
            (progn
          (if (= name6 1)
        (progn
          (tekatrset1)
          (if (= diffname nil)
                    (setq newnmvs (strcat "%%C" razmold11))
                (setq newnmvs (strcat diffname " %%C" razmold11))
                  )
            )
          )
          (if (= name6 2)
            (progn
              (tekatrset1)
          (if (= diffname nil)
                    (setq newnmvs (strcat razmold11 "x" shir2))
                (setq newnmvs (strcat diffname " " razmold11 "x" shir2))
                  )
            )
          )
              (setq ed (subst (cons 1 newnmvs) (assoc 1 ed) ed))
              (entmod ed)
              (entupd e1)
            )
      )
      (if (= imattr "A")
        (progn
          (setq name61 (rtos name6 2 1))
              (setq nametxt1 (strcat name11 " " name2 " " name3 " " name4 " " razmold11 " " name61))
              (setq ed (subst (cons 1 nametxt1) (assoc 1 ed) ed))
          (entmod ed)
          (entupd e1)
        )
      )
      (setq e1 (entnext e1))
        );while
      );progn  
      );if
     )
    )

  ;-------------------------------------------------------
  ;если изменился размер

      (if (/= razmnew razmold)
    (progn
      (if (equal namebl1 "Truba")
        (progn
          (setq razmtrpro (* razmold 2))
          (if (= razmnew razmtrpro)
            (progn
          (setq smesh (/ (+ razmnew razmold) 2))
              (setq smesh (abs smesh))
              (setq nowsmesh1 (polar tvstav1 (+ ugol1 1.57079632679489655800) smesh))
              (setq nowsmesh2 (polar tvstav1 (- ugol1 1.57079632679489655800) smesh))
          (setq flaghok 1)
          (yaz)
        )
            (progn
              (setq smesh (/ (- razmnew razmold) 2))
              (setq smesh (abs smesh))
              (setq nowsmesh1 (polar tvstav1 (+ ugol1 1.57079632679489655800) smesh))
              (setq nowsmesh2 (polar tvstav1 (- ugol1 1.57079632679489655800) smesh))
          (yaz)
        )
          )
        )

        (progn
          (setq flag 4)
              (tekvisset1)
              (setq smeshpoX nname)
              (setq flag 5)
              (tekvisset1)
              (setq smeshpoY nname)
          (setq nowsmesh1 (polar tvstav2 ugol1 smeshpoX))
          (setq nowsmesh1 (polar nowsmesh1 (+ ugol1 1.57079632679489655800) smeshpoY))
          (command "_move" name "" tvstav1 nowsmesh1)
            )
      
      )

      (setq atr4 (rtos razmnew 2 0))
      (setq e1 name)
      (setq ed object)
      (setq razmnew (rtos razmnew 2 0))
          (if (and
        (= (cdr (assoc 0 ed)) "INSERT") ;_Блок
        (= (cdr (assoc 66 ed)) 1)       ;_След аттриб
          )
          (progn
            (setq e1 (entnext e1))
            (while (AND e1
          (= (cdr (assoc 0 (setq ed (entget e1)))) "ATTRIB")
              ) 
          (setq imattr (cdr (assoc 2 ed))
                    znattr (cdr (assoc 1 ed))
              )
          (if (equal imattr "VERHSTROKA")
        (progn
          (if (= name6 1)
            (progn
              (tekatrset1)
              (if (= diffname nil)
                        (setq newnmvs (strcat "%%C" razmnew))
                    (setq newnmvs (strcat diffname " %%C" razmnew)) 
                      )
                )
              )
              (if (= name6 2)
                (progn
                  (tekatrset1)
              (if (= diffname nil)
                        (setq newnmvs (strcat razmnew "x" shir2))
                    (setq newnmvs (strcat diffname " " razmnew "x" shir2)) 
                      )
                )
             )
                 (setq ed (subst (cons 1 newnmvs) (assoc 1 ed) ed))
                 (entmod ed)
                 (entupd e1)
              ) 
        )
        (if (= imattr "A")
          (progn
            (setq name61 (rtos name6 2 1))
                (setq nametxt1 (strcat name11 " " name2 " " name3 " " name4 " " razmnew " " name61))
                (setq ed (subst (cons 1 nametxt1) (assoc 1 ed) ed))
            (entmod ed)
            (entupd e1)
          )
        )
        (setq e1 (entnext e1))
          );while
        );progn  
        );if
      (setq kolsim (- (strlen newnmvs) 1))
          (setq dlvinoski (* kolsim 144))
      (setq shirvinoski 1200)
          (_kpblc-block-dyn-change-values name (list (cons "Ширина" dlvinoski) (cons "Длина" shirvinoski)))
    );progn vinoska
   );if vinoska
   )
  )
  ) ; equal klass "INSERT"

 ) ; cond

 (setq n (+ n 1)) ;следующий объект
 ;(command "_zoom" "all")
  
) ;while(main)



  (setvar "SNAPMODE" p_snapmode)
  (setvar "ORTHOMODE" p_orthomode)
  (setvar "BLIPMODE" p_blipmode)
  (setvar "OSMODE" p_osmode)
  (setvar "CMDECHO" p_cmdecho)
    ; (setvar "ERRNO" 0)

  
  
) ; defun


;-------------------------------------------------------------------------------------------------------------
;------------------------Функция получения текущего "Visibility Set" в блоке----------------------------------
;-------------------------------------------------------------------------------------------------------------


(defun test1 (/ blkref prop-name)
  (setq blkref (vlax-ename->vla-object name1))
  (setq prop-name "Тип")
  (setq nname
  (vlax-variant-value
    (vla-get-value
      ((lambda (/ res)
         (foreach item (vlax-safearray->list (vlax-variant-value (vla-getdynamicblockproperties blkref)))
           (if (= (strcase (vla-get-propertyname item)) (strcase prop-name))
             (setq res item)
             ) ;_ end of if
           ) ;_ end of foreach
         res
         ) ;_ end of LAMBDA
       )
      ) ;_ end of vla-get-value
    ) ;_ end of vlax-variant-value
   )    
 ) ;_ end of defun

;-------------------------------------------------------------------------------------------------------------
;--------------------------------Функция получения значений параметров блока----------------------------------
;-------------------------------------------------------------------------------------------------------------

(defun tekvisset1 (/ blkref prop-name)
  (setq blkref (vlax-ename->vla-object name1))
  (if (= flag 1)
    (setq prop-name "Диаметр")
  )
  (if (= flag 2)
    (setq prop-name "Ширина")
  )
  (if (= flag 3)
    (setq prop-name "Длина")
  )
  (if (= flag 4)
    (setq prop-name "VinoskaPoint X")
  )
  (if (= flag 5)
    (setq prop-name "VinoskaPoint Y")
  )
  (setq nname
  (vlax-variant-value
    (vla-get-value
      ((lambda (/ res)
         (foreach item (vlax-safearray->list (vlax-variant-value (vla-getdynamicblockproperties blkref)))
           (if (= (strcase (vla-get-propertyname item)) (strcase prop-name))
             (setq res item)
             ) ;_ end of if
           ) ;_ end of foreach
         res
         ) ;_ end of LAMBDA
       )
      ) ;_ end of vla-get-value
    ) ;_ end of vlax-variant-value
   )    
 ) ;_ end of defun



;-------------------------------------------------------------------------------------------------------------
;--------------------------------Функция получения значения атрибута блока------------------------------------
;-------------------------------------------------------------------------------------------------------------

(defun tekatrset1 ()

  (setq e11 e1
    ed1 ed
    imattr1 imattr
    znattr1 znattr)
  (setq e1 name1)
  (setq ed object1)
  (if (and
    (= (cdr (assoc 0 ed)) "INSERT") ;_Блок
    (= (cdr (assoc 66 ed)) 1)       ;_След аттриб
  )
  (progn
    (setq e1 (entnext e1))
    (while (AND e1
             (= (cdr (assoc 0 (setq ed (entget e1)))) "ATTRIB")
           ) 
    (setq imattr (cdr (assoc 2 ed))
          znattr (cdr (assoc 1 ed))
    )
    (if (= imattr "VV") 
      (setq shir2 znattr)
    )
    (if (= imattr "DIFFNAME") 
      (setq diffname znattr)
    )
    (setq e1 (entnext e1))
    );while
  );progn  
  );if
  (setq e1 e11
    ed ed1
    imattr imattr1
    znattr znattr1)
)


(defun yaz ()
  (if (< tvstav1y 0.0000001)
    (setq tvstav1y 0.0)
  )
  (setq obj1 (ssget nowsmesh1))
  (if (/= obj1 nil) 
    (setq obj1 (ssname obj1 0))                ;ЦИКЛ ЕСЛИ ПРИМИТИВ НЕ ОДИН!!!!!!!!!!!
  )  
  (setq obj2 (ssget nowsmesh2))
  (if (/= obj2 nil) 
    (setq obj2 (ssname obj2 0))                ;ЦИКЛ ЕСЛИ ПРИМИТИВ НЕ ОДИН!!!!!!!!!!!
  )
  (if (= flaghok 1)
    (setq obj obj1
      obj1 obj2
      obj2 obj)
  )
  (setq flaghok 0)
  (setq smesh (/ (- razmnew razmold) 2))
  (setq smesh (abs smesh))
  (setq nowsmesh1 (polar tvstav1 (+ ugol1 1.57079632679489655800) smesh))
  (setq nowsmesh2 (polar tvstav1 (- ugol1 1.57079632679489655800) smesh))
  (if (or (and (equal obj1 name1) (equal obj2 name1)) (and (= obj1 nil) (= obj2 nil)))
    (command "_move" name "" tvstav1 tvstav1)
  )
  (if (or (and (equal obj1 name1) (equal obj2 name1) (= pometka 1)) (and (= obj1 nil) (= obj2 nil) (= pometka 1) ))
    (progn
      (command "_move" name "" tvstav1 nowsmesh1)
      (setq pometka nil)
    )
  )
  (if (and (= obj2 nil) (equal obj1 name1))
    (command "_move" name "" tvstav1 nowsmesh1)
  )
  (if (and (= obj1 nil) (equal obj2 name1))
    (command "_move" name "" tvstav1 nowsmesh2)
  )
); end yaz


;-------------------------------------------------------------------------------------------------------------
;------------------------Функция изменения Длины и ширины в блоке---------------------------------------------
;-------------------------------------------------------------------------------------------------------------

(defun change-values (ent              lst
                                       /                prop_lst
                                       _kpblc-conv-vla-to-list
                                       )

  (defun vla-to-list (value / res)
                                 ;|
*    Преобразовывает vlax-variant или vlax-safearray в список.
|;
    (cond
      ((= (type value) 'variant)
       (vla-to-list (vlax-variant-value value))
       )
      ((= (type value) 'safearray)
       (if (>= (vlax-safearray-get-u-bound value 1) 0)
         (vlax-safearray->list value)
         ) ;_ end of if
       )
      (t value)
      ) ;_ end of cond
    ) ;_ end of defun

  (vl-load-com)

  (vl-catch-all-apply
    '(lambda ()
       (setq
         ent (cond
               (ent)
               (t (car (entsel "\nУкажите вхождение дин.блока <Отмена> : ")))
               ) ;_ end of cond
         ) ;_ end of setq
       ) ;_ end of lambda
    ) ;_ end of vl-catch-all-apply
  (if (and ent
           (setq ent (cond
                       ((= (type ent) 'ename) (vlax-ename->vla-object ent))
                       ((= (type ent) 'vla-object) ent)
                       (t nil)
                       ) ;_ end of cond
                 ) ;_ end of setq
           (= (strcase (vla-get-objectname ent) t) "acdbblockreference")
           (= (vla-get-isdynamicblock
                (vla-item
                  (vla-get-blocks
                    (vla-get-activedocument (vlax-get-acad-object))
                    ) ;_ end of vla-get-blocks
                  (vla-get-effectivename ent)
                  ) ;_ end of vla-item
                ) ;_ end of vla-get-isdynamicblock
              :vlax-true
              ) ;_ end of =
           ) ;_ end of and
    (progn
      (setq
        prop_lst (vlax-safearray->list
                   (vlax-variant-value (vla-getdynamicblockproperties ent))
                   ) ;_ end of vlax-safearray->list
        ) ;_ end of setq
      (foreach item (mapcar '(lambda (a) (cons (strcase (car a)) (cdr a))) lst)
        (if (setq prop
                   (car
                     (vl-remove-if-not
                       '(lambda (x)
                          (wcmatch (strcase (vla-get-propertyname x)) (car item))
                          ) ;_ end of lambda
                       prop_lst
                       ) ;_ end of vl-remove-if-not
                     ) ;_ end of car
                  ) ;_ end of setq
          ;; Имя совпало
          (vl-catch-all-apply
            '(lambda ()
               (vla-put-value
                 prop
                 (vlax-make-variant
                   (cdr item)
                   (vlax-variant-type (vla-get-value prop))
                   ) ;_ end of vlax-make-variant
                 ) ;_ end of vla-put-value
               (vla-update ent)
               ) ;_ end of lambda
            ) ;_ end of vl-catch-all-apply
          ) ;_ end of if
        ) ;_ end of foreach
      ) ;_ end of progn
    ) ;_ end of if
  )
Вкратце объясню... пишу конечно я как колхозник, но все работает)

Выбираю все, что есть на чертеже, оттуда фильтрую выноски. В блоке выноски у меня несколько атрибутов - верхняя строка - это строка Типа ДК 100х100, еще нужен атрибут, назвал его А. В нем хранится вся необходимая инфа по блоку - его имя, точка вставки, ну и там размеры из верхней строки и угол поворота и еще признак (1 или 2) - это если блок круглый или прямоугольный.
Всю эту шляпу я достаю в цикле ну а дальше проверки при различных ситуациях изменения блока... Например был круглый стал прямоугольный или что намного чаще изменился его диаметр или ширина и обновляю выноску... Как то так)
Будут вопросы - обращайся.

Последний раз редактировалось Zaghim, 29.12.2011 в 11:12.
Zaghim вне форума  
 
Непрочитано 29.12.2011, 11:54
#47
Geniy_Dzydo


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


А я думал что умею загружать лисповские программы(((. Все ли я правильно делаю??? напишу пошагово : я беру копирую этот текст в блокнот, сохраняю с расширением lsp. загружаю в автокад, и потом пишу в командной строке имя команды vinper - так или не так???, вобщем ничего не получилось, вобщем стыдно мне, стыдно
Geniy_Dzydo вне форума  
 
Автор темы   Непрочитано 29.12.2011, 11:56
#48
Zaghim


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


Вначале напиши appload, подгрузи свой лисп. А если подгрузил, то он наверняка не нашел у тебя в чертеже блоков с именем Vinoska.
Да и запускать смысл?))) Нужно блоки вначале сделать или код изменить под свои нужды.
Zaghim вне форума  
 
Непрочитано 29.12.2011, 12:13
#49
Geniy_Dzydo


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


Ну все равно спасиб! мало конечно что я понял)))))) эт какие то специальные блоки еще нужны с шириной высотой и т.д., вобщем несудьба видать, значит озадачу нашего программиста, авось повезет!
Geniy_Dzydo вне форума  
 
Автор темы   Непрочитано 29.12.2011, 12:52
#50
Zaghim


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


Пища для ума есть, делов под себя это переварить не долго!
Zaghim вне форума  
 
Непрочитано 31.12.2011, 00:11
#51
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Zaghim Посмотреть сообщение
Вкратце объясню... пишу конечно я как колхозник, но все работает)
фырр-фырр, ага, ага...
в конце файла нет определения с:функции, чтоб избежать брожения по лиспу,
локальные переменные и функции должны быть локальными,
имя блока лучше хранить на видном месте с подробным комментарием,
(gc) можно опустить,
выбирать надо не все, а только блоки с нужным именем
чем (* .5 pi) хуже 1.57079632679489655800
gomer вне форума  
 
Непрочитано 31.01.2014, 10:00
#52
siriusdrei


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


Есть 3д динамические блоки с разными названиям и атрибутами. Можно ли сделать выноску которая при указанию на блок будет считывать нужный атрибут? Чаще всего нужно чтоб считывался атрибут "ПОЗ", которой есть во всех блоках.
Выноска с полем не решает проблему, так как мало чем отличается от забивания вручную. Делают еще через СПДС, только вот СПДСа у нас нет(.
Но раз в СПДС можно, то наверно и в лиспе можно? Сам в нем ничего не понимаю поэтому прошу подсказать здесь.
Вложения
Тип файла: dwg
DWG 2010
Блок.dwg (429.9 Кб, 902 просмотров)
siriusdrei вне форума  
 
Непрочитано 31.01.2014, 10:43
#53
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Цитата:
Сообщение от siriusdrei Посмотреть сообщение
Можно ли сделать выноску которая при указанию на блок будет считывать нужный атрибут?
Можно, но довольно сложно.
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
 
Непрочитано 31.01.2014, 12:37
#54
siriusdrei


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


Цитата:
Сообщение от Do$ Посмотреть сообщение
Можно, но довольно сложно.
Выше код выложили с перемещение выноски в зависимости от размера блока и считывание атрибута (если я правильно понял), а надо просто считывание определенного атрибута. Всего одна функция нужна по сути. Сложнее чем предыдущий код?
siriusdrei вне форума  
 
Непрочитано 31.01.2014, 16:00
#55
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Все у вас просто... Пишите, посмотрим как оно просто получится
__________________
Толковый выбор приходит с опытом, а к нему приводит выбор бестолковый. (The Mechanic)
Do$ вне форума  
Ответ
Вернуться   Форум 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