Page 38 - AutoLISP и Visual LISP в среде AutoCAD
P. 38
72 Индекс вершины многоугольной сети. Указывается если не ноль.
73 Индекс вершины многоугольной сети. Указывается если не ноль.
74 Индекс вершины многоугольной сети. Указывается если не ноль.
Код для объекта SEQEND:
-2 Имя объекта, описание которого заканчивается.
Начиная с 14-й версии AutoCad, информация об объектах, созданных
командой AutoCad PLINE, имеет более короткую структуру. Во-первых,
объекту в графической базе данных присваивается имя LWPOLYLINE. Во-
вторых, все данные о вершинах записываются друг за другом в поля с DXF
кодом 10. Однако следует учесть, что после операций сглаживания или
сплайна в графическую базу данных заносится информация по типу PLINE-
VERTEX-…-VERTEX-SEQEND.
Пример данных:
((-1 . <Имя объекта: 187836379c0>) (0 . "LWPOLYLINE") (330 . <Имя
объекта: 187f82981f0>) (5 . "504") (100 . "AcDbEntity") (67 . 0) (410
. "Model") (8 . "0") (100 . "AcDbPolyline") (90 . 4) (70 . 0) (43 .
0.0) (38 . 0.0) (39 . 0.0) (10 161.0 336.0) (40 . 0.0) (41 . 0.0) (42
. 0.0) (91 . 0) (10 176.0 319.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91
. 0) (10 200.0 323.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (10
220.0 312.0) (40 . 0.0) (41 . 0.0) (42 . 0.0) (91 . 0) (210 0.0 0.0
1.0))
Практическое использование DXF кодов
Следующий пример демонстрирует, как можно преобразовать
окружность в полилинию с заданной толщиной.
; Функция CONV
(defun CONV (/ c_name c_data w_line c_point r)
(setq c_name (car (entsel "\n Выберите ОКРУЖНОСТЬ")))
(setq c_data (entget c_name)) ; получаем доступ к данным
(if (= (cdr (assoc 0 c_data)) "CIRCLE") ; если выбрана ОКРУЖНОСТЬ
( progn
(initget 7) ; запрет пустого ввода, нуля и отрицательных чисел
(setq w_line (getreal "\n Толщина линии"))
(setq c_point (cdr (assoc 10 c_data))) ; получаем точку центра
; окружности
(setq r (cdr (assoc 40 c_data))) ; получаем радиус окружности
; Используя функцию command, строим замкнутый
; дуговой сегмент полилинии с заданной толщиной, радиусом,
; точкой центра и центральным углом 180 градусов.
(command "_PLine" (polar c_point 0 r) "_W" w_line w_line "_A"
"_CE" c_point "_A" 180 "_CL")
(entdel c_name) ; удаляем исходную окружность
) ;progn
(prompt "\n Выбранный объект НЕ ОКРУЖНОСТЬ!")
);if
(prin1)
) ;CONV
37