|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
09.03.2012, 11:02 | #1 | |
Как вытащить имя полилинии из блока с атрибутами
Регистрация: 26.11.2010
Сообщений: 45
|
||
Просмотров: 4283
|
|
||||
Регистрация: 26.11.2010
Сообщений: 45
|
По азбуке создания блока с атрибутами:
1. создаем атрибуты 2. создаем блок, выбирая необходимый примитив (полилинию, КОТОРАЯ ИМЕЕТ СВОЕ ИМЯ) и созданные атрибуты Так задача в следующем: как программно, выбирая блок (car(entsel)) , определить имя полилинии, входящей в этот блок с атрибутами |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Offtop: Покажите мне ту азбуку создания блоков где полилинии имеют ИМЕНА.
По сути вопроса - если не владеете терминологией - прикладывайте рисунки. А еще лучше (для Вас же) напишите для чего Вам "имя полилинии в блоке с аттрибутами".
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Регистрация: 26.11.2010
Сообщений: 45
|
Для вычисления стартоваой и конечной точек полилинии
Попробовл : (SETQ #NEW(NENTSEL)) (SETQ A1(CAR #NEW)) (SETQ VLA1(VLAX-ENAME->VLA-OBJECT A1)) (SETQ START10(VLAX-CURVE-GETSTARTPOINT VLA1)) (SETQ END10(VLAX-CURVE-GETENDPOINT VLA1)) Абсолютно НЕ ТО Последний раз редактировалось wluk1958, 09.03.2012 в 13:26. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 26.11.2010
Сообщений: 45
|
Спасибо. Но, к сожалению, ф-я действует только на блоки без атрибутов (возвращает к-ты стартовой и конечной точек). С атрибутами - совершенно непредсказуемо. К тому же, по большому счету, хотелось бы иметь на выходе имя цельной полилинии или список ее вершин, чтобы определять и параметры предыдущих вершин...
|
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
У полилинии имени нет. У нее есть имя объекта (в ActiveX-модели - AcDbPolyline; в ename-представлении - LWPOLYLINE). У нее есть т.н. Handle (уникальный идентификатор).
Имя есть у слоя, у текстового, размерного и табличного стилей, у блока, у типа линии, у стиля мультилинии - но не у полилинии. Кстати, у окружности имени тоже нет. Получение вершин полилинии в системе координат описания блока (а не во вхождении!): Код:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Регистрация: 26.11.2010
Сообщений: 45
|
Что-то не сходится: результат ТОТ ЖЕ САМЫЙ, как в посте #6 :
(SETQ #NEW(NENTSEL))(SETQ A1(CAR #NEW))(SETQ VLA1(VLAX-ENAME->VLA-OBJECT A1)) (SETQ START10(VLAX-CURVE-GETSTARTPOINT VLA1))(SETQ END10(VLAX-CURVE-GETENDPOINT VLA1)) Т.е. такое впечатление, что там, где исползуется "nentsel" - не для родного вопроса... Блоки с атрибутами не играют. Или я не не так понял ? Спасибо. |
|||
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,853
|
Какая разница - блок с атрибутами или без, если обрабатывается примитив, не имеющий никакого отношения к атрибутам?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
|
||||
Потому, что ты не послушал Диму (#2) и не разобрался с разницей между определением блока (BLOCK) и вставкой блока (INSERT).
И поэтому ты не понял, что получаешь вершины полилинии относительно точки вставки блока (и то если масштабные коэффициенты = 1), а не относительно начала координат.
__________________
Сообщество программистов Autodesk в СНГ - техническая поддержка |
||||
|
||||
Регистрация: 26.11.2010
Сообщений: 45
|
(DEFUN POL(POLYLINENAME / POLYLINEINFO VERTEXNAME LISTOFPOINTS)
(VL-LOAD-COM) (COND ((= (CDR (ASSOC '0 (ENTGET POLYLINENAME))) "LWPOLYLINE") (SETQ POLYLINEINFO (ENTGET POLYLINENAME)) (WHILE (VL-POSITION (ASSOC '10 POLYLINEINFO) POLYLINEINFO) (SETQ LISTOFPOINTS (CONS (CDR (NTH (VL-POSITION (ASSOC '10 POLYLINEINFO) POLYLINEINFO ) POLYLINEINFO )) LISTOFPOINTS )) (SETQ POLYLINEINFO (VL-REMOVE (ASSOC '10 POLYLINEINFO) POLYLINEINFO) ))) ((= (CDR (ASSOC '0 (ENTGET POLYLINENAME))) "POLYLINE") (SETQ VERTEXNAME (ENTNEXT POLYLINENAME)) (WHILE VERTEXNAME (IF (= (CDR (ASSOC '0 (ENTGET VERTEXNAME))) "VERTEX") (SETQ LISTOFPOINTS (CONS (CDR (ASSOC '10 (ENTGET VERTEXNAME)) ) LISTOFPOINTS ))) (SETQ VERTEXNAME (ENTNEXT VERTEXNAME)) )) (T (SETQ LISTOFPOINTS NIL) )) (REVERSE LISTOFPOINTS) ) ;END Последний раз редактировалось wluk1958, 10.03.2012 в 22:29. |
|||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как перенести в чертеж блок из файла библиотеки блоков | Main Urod | Программирование | 8 | 03.02.2010 14:15 |
Перевод имени блока в имя переменной и обратно | Supermax | Программирование | 11 | 14.12.2009 23:26 |
Двойной щелчок по графическому элементу блока с атрибутами | kp+ | AutoCAD | 10 | 03.12.2009 12:21 |
Подсчет кабеля при помощи дин. блока с атрибутами | serg01 | AutoCAD | 41 | 07.05.2009 09:34 |
Вариация моделей в SCAD - проблемы с РСУ | UIII | SCAD | 2 | 04.10.2007 13:35 |