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
   33   34   35   36   37   38   39   40   41   42   43