在坛里找的轮子,根据自己的实际使用情况作了改造。不记得是哪位大佬的,勿怪。
 - (defun c:cx (/ date ss Newmove *move* obj e1 e2 i p1 p2 p3 p4 yn lay clay olay)
- (defun *MYERR* (MSG)
- (setvar "CMDECHO" CMD_OLD)
- (setvar "OSMODE" OS_OLD)
- (setvar "pickbox" pi_OLD)
- (setq *ERROR* *OLDERR*)
- (if (= MSG "完美退出。谢谢使用。")
- (princ (strcat "\\n>>>" MSG))
- (princ "\\n>>>虽然中途退出了,对象捕捉已经被恢复。")
- )
- (princ)
- )
- (vl-load-com)
- (command "undo" "be");撤销命令,设置undo起点
- (setq *OLDERR* *ERROR*
- *ERROR* *MYERR*
- OS_OLD (getvar "OSMODE")
- CMD_OLD (getvar "CMDECHO")
- pi_OLD (getvar "pickbox")
- )
- (setvar "osmode" 0)
- (setvar "CMDECHO" 0)
- (if *move*
- (setq Newmove (getreal (strcat "\n请输入双线宽度:<" (rtos *move* 2 4) ">:")))
- (setq Newmove (getreal "\n请输入双线宽度:"))
- )
- (if (null Newmove)
- (setq Newmove *move*)
- (setq *move* Newmove)
- )
- (setq ss (ssget '((0 . "Arc,Circle,Ellipse,Line,LwPolyline,Polyline,Spline"))))
- (initget "Y N ")
- (setq yn (getkword "\n[封口<Y>/不封口<N>]<Y>:"))
- ;(if (= yn "")(setq yn "Y"))
- (or yn (setq yn "Y"))
- (setq i 0)
- (repeat (sslength ss)
- (setq obj (vlax-ename->vla-object(ssname ss i)) i (1+ i))
- (vla-offset obj (* Newmove 0.5)) (setq e1 (entlast))
- (vla-offset obj (- 0 (* Newmove 0.5))) (setq e2 (entlast))
- (vla-erase obj);删除原线
- (if (= yn "Y")
- (progn
- (setq lay (entget e1)
- clay (cdr (assoc 8 lay))
- olay (getvar "clayer"))
- (setvar "clayer" clay)
- (setq p1(vlax-curve-getstartpoint e1)
- p2(vlax-curve-getendpoint e1)
- p3(vlax-curve-getstartpoint e2)
- p4(vlax-curve-getendpoint e2))
- ;(command ".pline" "non" p1 "non" p3 "" ".pline" "non" p2 "non" p4 "")
- (command ".pline" p1 p3 "" ".pline" p2 p4 "")
- (setvar "clayer" olay)
- ))
- )
- (princ
- "\n*********双线**********青衫美酒 ***********"
- )
- (setvar "pickbox" pi_OLD)
- (setvar "cmdecho" CMD_OLD)
- (setvar "osmode" OS_OLD )
- (command "undo" "e")
- (princ)
- )
|