CADsite forum

AutoCAD => Autolisp => Topic gestart door: cadtools@gmail.com op vr 21 04 2017, 00:02:49

Titel: Uitdaging : visual PFACE routine
Bericht door: cadtools@gmail.com op vr 21 04 2017, 00:02:49
Hoi

Ik zag dat Lee Mac een nieuw stukje code heeft gemaakt voor Grsnap. Nu speel met het idee dat dit een mooie basis zou zijn om een fijnere command te programmeren om basis hiervan.

Ik kan erg weinig vinden qua PFACE lisp voorbeelden en documentatie, maar volgens mij zou het niet zo ingewikkeld moeten zijn en ik denk dat je er veel plezier mee kunt hebben om 3D vlakken te maken.

Broncode voor ondersteuning
http://lee-mac.com/grsnap.html

Het idee in een filmpje..
https://youtu.be/3NSCJs8Q2AY
Titel: Re: Uitdaging : visual PFACE routine
Bericht door: cadtools@gmail.com op zo 23 04 2017, 23:59:15
Deze werkt eigenlijk prima!
(opgelost ;-)


;;;Grrr. CADtutor 23-4-2017

(defun C:test ( / pL->PFACE LM:group-n SS i e enx o L eL )
 
  (defun pL->PFACE ( pL / i )
    (setq i 0)
    (apply 'command
      (append '("_.PFACE") (apply 'append (mapcar (function (lambda (x) (list "_non" x))) pL))
        '("") (mapcar (function (lambda (x) (itoa (setq i (1+ i))))) pL) '("" "")
      )
    )
  )
 
  ;; Group by Number  -  Lee Mac
  ;; Groups a list 'l' into a list of lists, each of length 'n'
 
  (defun LM:group-n ( l n / r )
    (if l (cons (reverse (repeat n (setq r (cons (car l) r) l (cdr l)) r)) (LM:group-n l n) ) )
  )
 
  (cond
    ( (not (and (princ "\nSelect closed polylines to draw pfaces: ") (setq SS (ssget "_:L-I" '((0 . "*POLYLINE")))))) )
    (
      (progn
        (repeat (setq i (sslength SS))
          (and
            (setq e (ssname SS (setq i (1- i))))
            (setq enx (entget e))
            (setq o (vlax-ename->vla-object e))
            (vlax-curve-isClosed o)
            (vlax-property-available-p o 'Coordinates)
            (setq L (cons (LM:group-n (vlax-get o 'Coordinates) (cond ((member '(0 . "LWPOLYLINE") enx) 2) (T 3)) ) L ))
            (setq eL (cons e eL))
          ); and
        ); repeat
        (not L)
      ); progn
    )
    (T (mapcar 'pL->PFACE L) (mapcar (function (lambda (x) (redraw x 3))) eL)
      (if (progn (initget "Yes No") (= "Yes" (cond ((getkword "\nErase the polylines? [Yes/No] <Yes>: ")) ("Yes"))))
        (mapcar 'entdel eL)
        (vla-Regen (vla-get-ActiveDocument (vlax-get-acad-object)) acActiveViewport)
      ); if
    ); T
  ); cond
  (princ)
); defun