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

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

LISP. Разбивка атрибутов блока в блоке

Ответ
Поиск в этой теме
Непрочитано 23.09.2009, 17:21 #1
LISP. Разбивка атрибутов блока в блоке
Apelsinov
 
Проектировщик ВК. LISP-любитель.
 
Москва
Регистрация: 15.12.2003
Сообщений: 1,190

Столкнулся с такой проблемой:
Есть программа, аналог express burst для разбиения блоков с атрибутами.
Атрибуты преобразуются в текст, располагаемый в модели.

Есть большое количество блоков, содержащих вставки блоков с атрибутами.

Для увеличения скорости работы рекурсивно разбиваются внутренние вставки блоков в блок (т.е. текстовые примитивы добавляются не в модель, а во внешний блок).
И тут вылезает проблема, ибо при считывании свойств атрибутов, их точки вставки, насколько я понял, даны относительно модели, а тексты приходится добавлять во внешний блок. В результате тексты "улетают" и при этом еще и масштабируются вместе с масштабом внешнего блока:

Код:
[Выделить все]
(setq Att_InsertionPoint (vla-get-InsertionPoint atr))
....
(setq TEXT_OBJ (apel-catch-apply
			     'vla-AddText
			     (list V_BLOCK ; - это объект внешнего блока
				   Att_TextString
				   Att_InsertionPoint
				   Att_Height
			     )
			   )
	    )
в общем, я в ступоре, не могу придумать, как решить эту проблему
Просмотров: 2680
 
Непрочитано 23.09.2009, 17:31
#2
VVA

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


По идее точка вставки текста дожна вычисляться как разница точки вставки атрибута и его блока.
Что-то типа
Код:
[Выделить все]
(mapcar '- AttrInsertionPoint BlockInsertionPoint)
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 23.09.2009, 20:47
#3
Дима_

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


Я не уверен, что правильно понял что нужно - если перевести все подблоки в блок, вот две рекурсивные функции одна проверяет на "неравномасштабность" блока (подблоков), вторая взрывает все подблоки в модель возращая примитивы - короче проверяешь, взрываешь - что получил собираешь в блок.

Код:
[Выделить все]
(defun explodeblock (obj); взрывает блок обрабатывая вложенные блоки - возращает список получившихся объектов.
(if (and obj (= (cod 0 obj) "INSERT"))
(append 
(setq obj (mapcar 'vlax-vla-object->ename (vlax-safearray->list (vlax-variant-value (vla-explode (vlax-ename->vla-object obj))))))
(apply 'append (mapcar 'explodeblock (vl-remove-if-not '(lambda (obj) (= (cod 0 obj) "INSERT")) obj)))
);end of append
);end of if
);end of listblock

(defun testexplodeblock (obj); проверяет есть ли неравнорастянутые подблоки (0 - есть, 1 нет, nil - не блок).
(if (and obj (= (cod 0 obj) "INSERT"))
(if 
(and 
(= (cod 41 obj) (cod 42 obj) (cod 43 obj))
(not (member 0 (mapcar 'testexplodeblock (listblock obj))))
);end of and
1
0
));end of if*2
);end of testexplodeblock

(defun cod (cd obj) ; возращает код cd примитива obj.
(if (and obj (= (type obj) 'ename))
(cdr (assoc cd (entget obj)))
));end of cod
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > LISP. Разбивка атрибутов блока в блоке

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Произвольное смещение многострочных атрибутов в блоке. Makswell AutoCAD 187 23.12.2023 18:29
Назначение свойств атрибутов блока без attsync Кулик Алексей aka kpblc Программирование 9 15.08.2017 06:32
Извлечение атрибутов блока и вставка атрибутов в формулу andery AutoCAD 38 15.06.2009 02:39
Редактирование блока, используя значение его атрибутов Mazai Программирование 14 19.01.2009 20:49
LISP. Имя файла по значениям атрибутов блока. Happy LISP 1 25.11.2008 14:12