lisp genera un rectángulo de cualquier forma
El código es el siguiente: (defun?c:tes?(?/?amp;k1?amp;kw1?ss1) (vl-load-com) (princ?"\nPor favor seleccione un cerrado polilínea" ) (if?(setq?amp;kw1?(ssget?'((0?.?"LWPOLYLINE")?(70?.?1)))) (progn
(setq? ss1? '())
(mientras?(setq?amp;k1?(ssname?amp;kw1?0))
(setq?amp;kw1?(ssdel? amp;k1?amp;kw1)?ss1?(cons?amp;k1?ss1))
); while
(mapcar?'w1711202?ss1) ) ) (princ )
)
; Primitivas de proceso
(defun?w1711202?(obj?/?ang1?ang2?dis1?n?obj?p1?p2? p3 ?p4?ss1?ss2?x?y) (setq?n?(vlax-curve-getEndParam?obj)?ss1?'()) (mientras?(gt;?n?-1)?(setq?ss1 ? (contras?n?ss1)?n?(-?n?1))?) (setq?ss2?(mapcar?'(lambda?(x)?(vlax-curve-getDistAtParam?obj?x))? ss1 )
n?(caar?(vl-sort?(mapcar?'list?ss1?(mapcar?'-?(cdr?ss2)?ss2))?'(lambda?(x? y )?(gt;?(cadr?x)?(cadr?y)))))
p1?(vlax-curve-getPointAtParam?obj?n)
p2 ? (vlax-curve-getPointAtParam?obj?(1 ?n))
ang1?(ángulo?p1?p2)
ang2?( ?ang1?(*?pi? 0.5 ))
ss1?(mapcar?'(lambda?(x)?(vlax-curve-getPointAtParam?obj?x))?ss1)
ss1?(car? ( vl-sort?(mapcar?'(lambda?(x)?(lista?(distancia?(inters?p1?p2?x?(polar?x?ang2?20)?nil)?x)?x)) ? ss1)?'(lambda?(x?y)?(gt;?(car?x)?(car?y)))))
dis1?(car?ss1)
p4?(cadr?ss1)
p3?(inters?p1?p2?p4?(polar?p4?ang2?20)?nil)
ang2? ( ángulo?p3?p4)
ss1?(mapcar?'(lambda?(x)?(cons?10?x))?(lista?p1?p2?(polar?p2?ang2? dis1 )?(polar?p1?ang2?dis1)))
ss1?(append?(list?'(0?.?"LWPOLYLINE")?'(100?.?"AcDbEntity") ?'(10
0?.?"AcDbPolyline")?'(90?.?4)?'(70?.?1)?'(43?.?0)?'(38?.?0))?ss1) ) ( entmake?ss1)
)