;;;CADALYST 01/06 Tip2084: plines_to_3dfaces.lsp Convert Polylines to 3D Face Objects (c) 2006 Jamie Spartz ;;Written by Jamie Spartz on 5/6/05 ;;Updated on 1/25/06 (defun c:3c (/ *ERROR* clay osm plines count pl Origin getnormal Normal pl_lay setlay pointlistxy pointcount zvalue pointlist p1 p2 p3 cutlist p4) (setvar "cmdecho" 0) (command "undo" "end") (command "undo" "group") (setq *ERROR* 3c-end) (setq clay (getvar "clayer")) (setq osm (getvar "osmode")) (setvar "osmode" 0) (command "ucs" "save" "temp") (if (zerop (getvar "cmdactive")) (princ) (command "y") ) (princ "\nConvert Polylines into 3DFaces") (setq plines(ssget '((0 . "LWPOLYLINE")))) (setq count 0) (repeat (sslength plines) (setq pl (ssname plines count)) (command "ucs" "world") (setq Origin (trans '(0 0 0) 1 pl)) (setq Normal (cdr (assoc 210 (entget pl)))) (command "ucs" "za" Origin Normal) (setq pl_lay (massoc 8 (entget pl))) (setq setlay (car pl_lay)) (setvar "clayer" setlay) (setq pointlistxy (massoc 10 (entget pl))) (setq pointcount (massoc 90 (entget pl))) (setq zvalue (massoc 38 (entget pl))) (setq pointlist (mapcar (function (lambda (xy)(append xy zvalue))) pointlistxy)) (cond ((= (car pointcount) 3) (setq p1 (car pointlist)) (setq p2 (cadr pointlist)) (setq p3 (caddr pointlist)) (command "3dface" p1 p2 p3 "" "") (command "erase" pl "") (princ "\n3-point 3DFACE was created from polyline") ) ((= (car pointcount) 4) (setq p1 (car pointlist)) (setq p2 (cadr pointlist)) (setq p3 (caddr pointlist)) (setq cutlist (cdr pointlist)) (setq p4 (caddr cutlist)) (command "3dface" p1 p2 p3 p4 "") (command "erase" pl "") (princ "\n4-point 3DFACE was created from polyline") ) (T nil) ) (setq count (+ count 1)) ) (command "ucs" "restore" "temp") (if (zerop (getvar "cmdactive")) (princ) (command "") ) (command "ucs" "delete" "temp") (if clay (setvar "clayer" clay)) (if osm (setvar "osmode" osm)) (command "undo" "end") (setvar "cmdecho" 1) (princ) ) (defun massoc (key alist / x nlist) (foreach x alist (if (eq key (car x)) (setq nlist (cons (cdr x) nlist)) ) ) (reverse nlist) ) ; use like this (massoc 10 YourListOfData) (defun 3c-end (strErr) (command "ucs" "restore" "temp") (if (zerop (getvar "cmdactive")) (princ) (command "") ) (command "ucs" "delete" "temp") (if clay (setvar "clayer" clay)) (if osm (setvar "osmode" osm)) (command "undo" "end") (setvar "cmdecho" 1) (princ) )