怎样更改线宽?
在LISP程序中,怎样才能改变LWPOLYLINE 线的宽度?请高手指教。。。。。。。 直接使用命令CHPROP或PEDIT 哦。。。对哦。。。一语惊醒梦中人啊。。。谢谢版主。。。。。 change也行 ;;;批次修改线宽;;;autocad 2008 测试 o.k.
(defun dxf(code elist)
(cdr (assoc code elist))
)
;
(defun dtr(a)(* pi (/ a 180.0)))
(defun rtd(a)(/ (* a 180.0) pi))
(defun C:chwid(/ ss1 emax count et en ed )
(setvar "BLIPMODE" 0)
(setvar "cmdecho" 0)
(prompt "***** 改变线或多义线的宽度 *****")
;(setq width(getreal"请输入线宽<30>:"));
; (IF (/= width NIL) (SETQ width-S width)(PROGN (SETQ width 10)(SETQ width-S width)))
; (PRINC "\n 请输入线宽 <")(PRINC width)(PRINC ">:")
; (setq width (GETDIST))
; (IF (= width "")(SETQ width width-S))
;(if (null width) (setq width 30.0));
; (IF (/= width NIL) (SETQ width-S width) (SETQ width 0))
; (PRINC "\n 请输入线宽 (")(PRINC width)(PRINC "):")
; (setq width (GETDIST))
; (IF (= width NIL)(SETQ width width-S))
(IF (/= width NIL) (SETQ width-S width)(PROGN (SETQ width 30)(SETQ width-S width)))
(PRINC "\n 请输入线宽 <")(PRINC width)(PRINC ">:")
(setq width (GETREAL))
(IF (= width NIL)(SETQ width width-S))
(if(setq ss1(ssget));
(progn
(setq emax(sslength ss1));
(setq count 0)
(setq nonline 0)
(while (< count emax)
(setq en(ssname ss1 count))
(setq ed(entget en))
(setq et(dxf 0 ed))
(cond
((= et "LINE")
(command "pedit" en "w" width "")
);
((= et "ARC")
(command "pedit" en "w" width "")
);
((= et "POLYLINE")
(command "pedit" en "w" width "")
);
((= et "LWPOLYLINE")
(command "pedit" en "w" width "")
);
((= et "CIRCLE")
(setq cn(dxf 10 ed)
ra(dxf 40 ed)
insr(* (- ra width) 2)
outr(* ra 2))
(command "erase" en ""
"donut" insr outr cn ""
)
)
((= et "TRACE")
(setq x1(dxf 10 ed))
(setq y1(dxf 11 ed))
(setq x2(dxf 12 ed))
(setq y2(dxf 13 ed))
(setq pt1(polar x1 (angle x1 y1) (/ (distance x1 y1) 2)));
(setq pt2(polar x2 (angle x2 y2) (/ (distance x2 y2) 2)));
(command "erase" en ""
"pLINE" pt1 "w" width "" pt2 "")
)
((and (/= et "LINE") (/= et "POLYLINE") (/= et "ARC") (/= et "CIRCLE") (/= et "TRACE"))
(setq nonline (1+ nonline))
);
);cond
(setq count(1+ count));
);while
(if (/= nonline 0)
(progn(princ "所选")
(princ emax)
(princ "个实伐中有")
(princ nonline)
(princ "个无法改变其宽度!")
);progn
);if
);progn
(princ"\n没有找到目标")
);if
(setvar "BLIPMODE" 1)
(setvar "cmdecho" 1)
(princ);
);defun
谢谢各位。。。最后决定用PEDIT解决问题。。。。呵呵。。。。。 (DEFUN C:PW(/ ENTGRP WIDTH COUNT ENT )
(PRINC "\n编辑复线宽度:")
(PRINC "\n注:需编辑部分必须串成复线")
(SETVAR "CMDECHO" 0)
(COMMAND "_.UNDO" "M")
(PROMPT "\n请选择编辑部分:")
(SETQ ENTGRP (SSGET '((0 . "LWPOLYLINE"))))
(SETQ WIDTH (GETREAL "\n请输入宽度:"))
(SETQ COUNT 0)
(REPEAT (SSLENGTH ENTGRP)
(SETQ ENT (SSNAME ENTGRP COUNT))
(COMMAND "_.PEDIT" ENT "W" WIDTH "")
(SETQ COUNT (1+ COUNT))
)
(PRINC "\n--------OK!!---------")
(PRINC)
)
页:
[1]