FastFiber

Uitdaging : visual PFACE routine

Gestart door cadtools@gmail.com, vr 21 04 2017, 00:02:49

Vorige topic - Volgende topic

cadtools@gmail.com

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

cadtools@gmail.com

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