Draw-Pline2

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

Nenhum comentário:

Postar um comentário