another2121 发表于 2010-12-3 19:41:31

怎样更改线宽?

      在LISP程序中,怎样才能改变LWPOLYLINE 线的宽度?请高手指教。。。。。。。

ZZXXQQ 发表于 2010-12-3 21:04:24

直接使用命令CHPROP或PEDIT

another2121 发表于 2010-12-3 23:21:01

哦。。。对哦。。。一语惊醒梦中人啊。。。谢谢版主。。。。。

461045462 发表于 2010-12-3 23:41:15

change也行

yoyoho 发表于 2010-12-4 08:37:41

;;;批次修改线宽
;;;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

another2121 发表于 2010-12-5 15:44:58

谢谢各位。。。最后决定用PEDIT解决问题。。。。呵呵。。。。。

yutianweidi 发表于 2010-12-5 18:33:06

(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]
查看完整版本: 怎样更改线宽?