试试这个。
- (defun c:test (/ oce1 oce2 oce3 oce4 oce5 vxs ss en ent en1 lst pt lw)
- (command "undo" "be")
- (setq oce1 (getvar "cmdecho")
- oce2 (getvar "PLINEWID")
- oce3 (getvar "OSMODE")
- oce4 (getvar "CECOLOR")
- oce5 (getvar "LWDEFAULT")
- )
- (setvar "cmdecho" 0)
- (setvar "OSMODE" 39)
- (setvar "PLINETYPE" 2)
- (defun vxs (e / i v lst)
- (setq i -1)
- (while (setq v (vlax-curve-getpointatparam e (setq i (1+ i))))
- (setq lst (cons v lst))
- )
- (reverse lst)
- )
- (setq SS (entsel "\nPlease choose one pline:"))
- (setq en (car SS))
- (setq enl (last SS))
- (setq ent (entget en))
- (if (or (= (cdr (assoc 0 ent)) "POLYLINE")
- (= (cdr (assoc 0 ent)) "LWPOLYLINE")
- )
- (progn
- (setq lst (vxs en))
- (setq lst (if (< (distance enl (car lst)) (distance enl (last lst)))
- (reverse lst) lst))
- (if (= (cdr (assoc 0 ent)) "POLYLINE")
- (progn
- (if (/= (assoc 62 ent) nil)
- (setvar "CECOLOR" (rtos (cdr (assoc 62 ent)) 2 0))
- (setvar "CECOLOR" "BYLAYER"))
- (if (/= (assoc 370 ent) nil)
- (setvar "LWDEFAULT" (cdr (assoc 370 ent)))
- )
- (command "3dpoly")
- (foreach pt lst (command pt))
- (while (/= (getvar "cmdactive") 0)
- (command pause)
- )
- (setq en1 (entlast))
- (command "_matchprop" en en1 "")
- (command "_erase" en "")
- )
- (progn
- (setq lw (cdr (assoc 43 ent)))
- (if (= lw nil)
- (setq lw (cdr (assoc 40 ent)))
- )
- (setq pt (if (< (distance enl (car lst)) (distance enl (last lst)))
- (car lst) (last lst)))
- (command "pline" pt "w" lw lw)
- (while (/= (getvar "cmdactive") 0)
- (cond ((or (equal (grread t '(2 67))
- (equal (grread t '(2 99))
- )
- (command (car lst) ""))
- ((= (car (grread t ) 11)
- (command "")
- )
- (t (command pause))
- )
- )
- (setq en1 (entlast))
- (command "_matchprop" en en1 "")
- (command "_join" en1 en "")
- )
- )
- )
- (alert "Your choose is not a pline")
- )
- (setvar "cmdecho" oce1)
- (setvar "PLINEWID" oce2)
- (setvar "OSMODE" oce3)
- (setvar "CECOLOR" oce4)
- (setvar "LWDEFAULT" oce5)
- (command "undo" "e")
- (princ)
- )
|