;;;Convert A Selection Set Of 3DFaces To A PFace Mesh (defun fa2pf (ss / slen i ed en ef vlist vlen tlist) (and (/= (type ss) 'PICKSET) (princ "*** Invalid Parameter To FA2PF *** ") (exit)) (princ "\nDetermining Vertex Data\n") (setq slen (sslength ss) i 0) (repeat slen (setq en (ssname ss i) ed (entget en) i (1+ i)) (and (/= (cdr (assoc 0 ed)) "3DFACE") (princ "\n*** 3DFACES Only *** ") (exit)) (foreach g '(10 11 12 13) (if (not (member (cdr (assoc g ed)) vlist)) (setq vlist (cons (cdr (assoc g ed)) vlist)))) (princ (strcat "\r" (rtos (/ (* 100 i) slen) 2 0) "% "))) (princ "\nDetermining Face Data\n") (setq vlen (length vlist)) (entmake (list (cons 0 "POLYLINE") (cons 10 (list 0 0 0)) (cons 66 1) (cons 70 64) (cons 71 vlen) (cons 72 slen) (cons 73 0)(cons 74 0)(cons 75 0) (cons 210 (list 0 0 1)))) (foreach v vlist (entmake (list (cons 0 "VERTEX") (cons 10 (trans v 1 0)) (cons 70 192) (cons 71 0)(cons 72 0)(cons 73 0)(cons 74 0)))) (setq i 0) (repeat slen (setq en (ssname ss i) ed (entget en) ef (cdr (assoc 70 ed)) i (1+ i) tlist nil) (foreach c '(1 2 3 4) (setq tlist (cons (cons (+ 70 c) (* (if (= (logand ef (expt 2 (1- c))) (expt 2 (1- c))) -1 1) (1+ (- vlen (length (member (cdr (assoc (+ 9 c) ed)) vlist)))))) tlist))) (entmake (list (cons 0 "VERTEX") (assoc 8 ed) (cons 10 (last vlist)) (if (assoc 62 ed) (assoc 62 ed) (cons 62 256)) (cons 70 128) (nth 0 tlist) (nth 1 tlist) (nth 2 tlist) (nth 3 tlist))) (princ (strcat "\r" (rtos (/ (* 100 i) slen) 2 0) "% "))) (entmake (list (cons 0 "SEQEND"))) (command "_.ERASE" ss "") (redraw (entlast))) ;************ Main Program *************************************** (defun c:makemesh (/ ss) (while (or (not ss) (< (sslength ss) 2)) (princ "\nSelect 3DFACEs To Join: ") (setq ss (ssget '((0 . "3DFACE")))) ) (fa2pf ss) (prin1))