Esta rotina eu uso muito nos meus programas… sei que em VL é mais rápido, mas para criar blocos com VL complica… via entmake acabe sendo melhor.
Fica como exemplo de como criar polilinhas 2d e 3d via entmake:
(defun draw-pline2 (pts lay close? / elev)
(setq elev (caddar pts))
(dxf 5
(if (vl-every
‘(lambda (x) (equal x elev))
(mapcar ‘caddr pts))
(entmakex
(append
(mapcar
‘cons
‘(0 100 8 100 90 70 38)
(list “LWPOLYLINE” “AcDbEntity”
lay “AcDbPolyline” (length pts)
(if close? 1 0) (if elev elev 0)))
(mapcar
‘(lambda (x) (cons 10 x))
pts)))
(progn
(entmake
(mapcar
‘cons ‘(0 100 8 100 70)
(list “POLYLINE” “AcDbEntity”
lay “AcDbPolyline”
(if close? 9 8))))
(foreach x pts
(entmake
(list ‘(0 . “VERTEX”)
‘(100 . “AcDbEntity”)
‘(100 . “AcDbVertex”)
‘(100 . “AcDb3dPolylineVertex”)
(cons 10 x) ‘(70 . 32))))
(entmakex ‘((0 . “SEQEND”)
(100 . “AcDbEntity”)))
(entlast)))))
tem esta também:
(defun draw-line (p1 p2 lay /)
(dxf 5
(entmakex
(mapcar ‘cons
‘(0 8 10 11)
(list “LINE”
(if (or (not lay)
(= “” lay))
“0”
lay)
p1 p2)))))
mas esta desenha linhas… ah, prefiro que estas rotinas sempre devolvam o dxf 5 pois é mais prático para usar com xdatas