664571221 发表于 2020-8-8 15:55:00

求大神修改下这个线宽加粗,这个程序每次执行选择了一个后就不能再选其他了

求大神修改下,下面程序选择一个后就不能执行了,求改成可以多选
(defun c:XKJC( / sh s ss ww ssn)
    (princ"\n程序功能:支持*LINE,ARC,CIRCLE,ELLIPSE加粗")
    (setq sh (getvar "peditaccept"))
    (setvar "peditaccept" 0)
    (setvar "cmdecho" 0)
    (if (= jcxw_0 Nil) (setq jcxw_0 1))
    (setq ww (getdist (strcat "\n 请输入线宽 <" (rtos jcxw_0 2) ">: ")))
    (if (= ww nil) (setq ww jcxw_0))(setq jcxw_0 ww)
    (setq ss (ssget '((-4 . "<or")(0 . "LINE")(0 . "CIRCLE")(0 . "ARC")
                         (0 . "POLYLINE")(0 . "LWPOLYLINE")(-4 . "or>"))))
    (setq s 0) (command "undo" "be")
    (repeat (if ss (sslength ss) (progn (princ "\n 未选择对象。") 0))
       (setq ssn (ssname ss s) entyp (cdr (assoc 0 (entget ssn))))
       (cond ((= entyp "CIRCLE") (progn
         (setq rr (cdr (assoc 40 (entget ssn)))
                cen (cdr (assoc 10 (entget ssn))))
         (command "donut" (* 2 (- rr (/ ww 2))) (* 2 (+ rr (/ ww 2))) cen "")
         (command "erase" ssn "")))
         ((= entyp "LINE") (command "pedit" ssn "y" "w" ww ""))
    ((= entyp "ARC") (command "pedit" ssn "y" "w" ww ""))
         ((= entyp "LWPOLYLINE") (command "pedit" ssn "w" ww ""))
    ((= entyp "POLYLINE") (command "pedit" ssn "w" ww ""))
       )(setq s (1+ s))
   )(command "undo" "e")
   (setvar "peditaccept" sh)
    (princ)
)


duotu007 发表于 2020-8-8 16:42:18

(defun c:tttt( / sh s ss ww ssn)
    (princ"\n程序功能:支持*LINE,ARC,CIRCLE,ELLIPSE加粗")
    (setq sh (getvar "peditaccept"))
    (setvar "peditaccept" 0)
    (setvar "cmdecho" 0)
    (if (= jcxw_0 Nil) (setq jcxw_0 1))
    (setq ww (getdist (strcat "\n 请输入线宽 <" (rtos jcxw_0 2) ">: ")))
    (if (= ww nil) (setq ww jcxw_0))(setq jcxw_0 ww)
    (while (setq ss (ssget '((-4 . "<or")(0 . "LINE")(0 . "CIRCLE")(0 . "ARC")
                         (0 . "POLYLINE")(0 . "LWPOLYLINE")(-4 . "or>"))))
    (setq s 0) (command "undo" "be")
    (repeat (if ss (sslength ss) (progn (princ "\n 未选择对象。") 0))
       (setq ssn (ssname ss s) entyp (cdr (assoc 0 (entget ssn))))
       (cond ((= entyp "CIRCLE") (progn
         (setq rr (cdr (assoc 40 (entget ssn)))
                cen (cdr (assoc 10 (entget ssn))))
         (command "donut" (* 2 (- rr (/ ww 2))) (* 2 (+ rr (/ ww 2))) cen "")
         (command "erase" ssn "")))
         ((= entyp "LINE") (command "pedit" ssn "y" "w" ww ""))
    ((= entyp "ARC") (command "pedit" ssn "y" "w" ww ""))
         ((= entyp "LWPOLYLINE") (command "pedit" ssn "w" ww ""))
    ((= entyp "POLYLINE") (command "pedit" ssn "w" ww ""))
       )(setq s (1+ s))
   ))(command "undo" "e")
   (setvar "peditaccept" sh)
    (princ)
)

maiko 发表于 2020-8-9 10:55:01

;稍微改了下,当练练手,加了个错误处理
(defun c:tt ( / *error* s ss ww x sysvar values i )
(defun *error* (msg)
    (mapcar 'setvar sysvar values)
    (princ)
)
(setq sysvar '(cmdecho peditaccept) values (mapcar 'getvar sysvar))
(mapcar 'setvar '("CMDECHO" "PEDITACCEPT") '(0 1))
(princ"\n程序功能:支持*LINE,ARC,CIRCLE加粗")
(if (= jcxw_0 nil) (setq jcxw_0 1))
(setq ww (getdist (strcat "\n 请输入线宽 <" (rtos jcxw_0 2) ">: ")))
(if (= ww nil) (setq ww jcxw_0))(setq jcxw_0 ww)
(command "undo" "be")
(if (setq ss (ssget ":L" '((0 . "line,*POLYLINE,arc,CIRCLE"))))
    (repeat (setq i (sslength ss))
      (setq s (ssname ss (setq i (1- i))))
      (setq x (cdr (assoc 0 (entget s))))
      (cond
      ((wcmatch x "LINE,ARC")
          (command "_.pedit" s "_j" "" "_w" ww "")
      )
      ((wcmatch x "*POLYLINE")
          (vla-put-constantWidth (Vlax-Ename->Vla-Object s)ww)
      )
      ((eq x "CIRCLE")
          (setq rr (cdr (assoc 40 (entget s))) cen (cdr (assoc 10 (entget s))))
          (command "donut" (* 2 (- rr (/ ww 2))) (* 2 (+ rr (/ ww 2))) cen "")
          (entdel s)
      )
      )
    )
)
(command "undo" "e")
(*error* nil)
)
页: [1]
查看完整版本: 求大神修改下这个线宽加粗,这个程序每次执行选择了一个后就不能再选其他了