Joseph
Guest
qualche volta ci si può divertire (si fa per dire) anche con il lisp.
partendo da un file di menzi engeneering "drawdiags.lsp" che tracciava 2 diagonali di un poligono, ho provato a scrivere il codice che traccia tutte le diagonali di qualunque poligono , regolare o no, purchè convesso: questo è il risultato, parte con dd.
(defun c:dd ( / acadoc ent obj spc lay k l nn a s ll lst tmp obj)
(vl-load-com)
(setq lst nil tmp nil l nil nn nil)
(setq ent (entsel "\nscegli una polilinea: "))
(setq acadoc (vla-get-activedocument (vlax-get-acad-object))
spc (vla-get-modelspace acadoc)
obj (vlax-ename->vla-object (car ent))
lay (vla-get-layer obj)
tmp (vlax-get obj 'coordinates)
)
(while
(setq lst (cons (mapcar '(lambda (l) (nth l tmp)) '(0 1)) lst) ;lista di punti
tmp (cddr tmp)
)
)
(setq nn (length lst))
(setq a 0 k 0 s 0 )
(while (<= s (- nn 2))
(setq k (+ a 2))
(while (<= k (- nn 2))
(setq ll (vla-addline spc (vlax-3d-point (nth a lst)) (vlax-3d-point (nth k lst))))
(setq k (1+ k))
)
(setq lst (append (cdr lst) (list (car lst))))
(setq s (1+ s))
)
)
partendo da un file di menzi engeneering "drawdiags.lsp" che tracciava 2 diagonali di un poligono, ho provato a scrivere il codice che traccia tutte le diagonali di qualunque poligono , regolare o no, purchè convesso: questo è il risultato, parte con dd.
(defun c:dd ( / acadoc ent obj spc lay k l nn a s ll lst tmp obj)
(vl-load-com)
(setq lst nil tmp nil l nil nn nil)
(setq ent (entsel "\nscegli una polilinea: "))
(setq acadoc (vla-get-activedocument (vlax-get-acad-object))
spc (vla-get-modelspace acadoc)
obj (vlax-ename->vla-object (car ent))
lay (vla-get-layer obj)
tmp (vlax-get obj 'coordinates)
)
(while
(setq lst (cons (mapcar '(lambda (l) (nth l tmp)) '(0 1)) lst) ;lista di punti
tmp (cddr tmp)
)
)
(setq nn (length lst))
(setq a 0 k 0 s 0 )
(while (<= s (- nn 2))
(setq k (+ a 2))
(while (<= k (- nn 2))
(setq ll (vla-addline spc (vlax-3d-point (nth a lst)) (vlax-3d-point (nth k lst))))
(setq k (1+ k))
)
(setq lst (append (cdr lst) (list (car lst))))
(setq s (1+ s))
)
)