|
AutoCAD... AutoLISP... VisualLISP... |
|
[31] Punkty 3D |
Ciąg dalszy "rozważań" na temat stylu punktu w przestrzeni trójwymiarowej (Zobacz: Styl punktu oraz [7] Punkty).
Program LISP-owy zamienia wskazane punkty na bloki. Ogólnie zasada jest prosta:
Jest to blok anonimowy składający się z trzech punktów położonych w 3 płaszyznach z tym samym punktem wstawienia. Rozwiązanie ma następujące zalety:
|
(defun C:P2I (/ ss l u d i)
(if
(setq ss (ssget "_:L" '((0 . "POINT"))))
(progn
(setq l (jk:SSX_SS->List ss)
u (progn
(entmake
'( (0 . "BLOCK")(100 . "AcDbEntity")
(100 . "AcDbBlockBegin")(2 . "*U")
(8 . "0")(62 . 0)(10 0.0 0.0 0.0)
(70 . 1)
)
)
(foreach %
'( (210 1.0 0.0 0.0)(210 0.0 1.0 0.0)
(210 0.0 0.0 1.0)
)
(entmake
(append
'( (0 . "POINT")(100 . "AcDbEntity")
(8 . "0")(62 . 0)(100 . "AcDbPoint")
(10 0.0 0.0 0.0)
)
(list %)
)
)
)
(entmake '((0 . "ENDBLK")(8 . "0")))
)
)
(if u
(progn
(foreach % l
(setq d (entget %)
i (list
(cons 10 (cdr (assoc 10 d)))
(cons 8 (cdr (assoc 8 d)))
(if
(cdr (assoc 62 d))
(cons 62 (cdr (assoc 62 d)))
(cons 62 0)
)
)
)
(entmake
(append
'( (0 . "INSERT")(100 . "AcDbEntity")
(100 . "AcDbBlockReference")
)
(list
(cons 2 u)(cons 41 1.0)
(cons 42 1.0)(cons 43 1.0)
(cons 50 0.0)
)
i
)
)
(entdel %)
)
)
)
)
)
)
|
Program wymaga funkcji jk:SSX_SS->List która jest również tutaj [7] Punkty. Przedstawiony tutaj program w skróconej wersji, nie posiada obsługi błędów, nie sprawdza możliwości zmian obiektów, oraz nie ustawia znaczników dla UNDO.
|
|
|
Ilustracje powyżej pokazują widok punktów przed i po zmianie.
|
|
|