coolpoom 发表于 2008-11-5 11:32:00

[求助]批量修改圆的直径!

求高手帮忙编一lisp 能批量修改0层不同的直径

至今没学会 发表于 2020-5-6 14:47:03

这个其实不能按层选,得按孔径选择才行,万一好多孔径的都在一个层的呢

coolpoom 发表于 2008-11-5 16:57:00

<p>比如0层下有0.8、0.9、1.0等圆孔,我要输入一个命令,在命令行提示旧圆多大,输入要改的尺寸,不改就回车</p>

ljttjl 发表于 2008-11-7 21:39:00

本帖最后由 ljttjl 于 2011-9-17 22:57 编辑

autocad本身就可以实现,filter过滤器命令批量选择相同的圆后,用属性修改管理就可以修改

ZZXXQQ 发表于 2008-11-9 10:57:00

本帖最后由 作者 于 2008-11-15 12:15:57 编辑

再试试看

;提示改变圆的直径 明经 ZZXXQQ 2008.11.9
(defun c:tt ()
(if (and (princ "\nSelect Circle(s) 选择圆:")
          (setq ss (ssget '((0 . "CIRCLE"))))) (progn
(setq i 0 clst (list))
(repeat (sslength ss)
   (setq en (ssname ss i)
            ent (entget en)
            r1 (assoc 40 ent)
            i (1+ i))
   (if (not (member (cdr r1) clst)) (progn
    (setq ss1 (ssget "X" (list '(0 . "CIRCLE") r1)))
    (setq r (assoc 40 ent))
    (setq newd (getdist (strcat "\nNew diameter 新直径<" (rtos (* (cdr r) 2) 2 4) "> :")))
    (if newd (progn
   (setq j 0)
   (setq r (/ newd 2))
   (setq clst (cons r clst))
   (repeat (sslength ss1)
      (setq ent1 (entget(ssname ss1 j))
            ent1 (subst (cons 40 r) (assoc 40 ent1) ent1)
            j (1+ j))
      (entmod ent1)
   )
    )
   (setq clst (cons r clst))
    )
   ))
)
))
(princ)
)

coolpoom 发表于 2008-11-9 16:59:00

<p><strong><font face="Verdana" color="#da2549">ZZXXQQ大哥,程式出错:</font></strong></p><p>命令: tt<br/>Select Circle(s) 选择圆:<br/>选择对象: 指定对角点: 找到 2 个</p><p>选择对象:<br/>选择对象:&nbsp; ; 错误: 参数类型错误: numberp: nil</p><p>能不能让程式自动选择0层?</p><p>(setq ss (ssget "X" '((0 . "CIRCLE")(8 . "0"))))</p>

ZZXXQQ 发表于 2008-11-9 20:22:00

4楼已改

coolpoom 发表于 2008-11-10 11:05:00

程式还有一个问题不够完善:当某一种孔径不用改时,直接回车的话有多少个圆就要按多少次,麻烦~
命令: tt
请输入0层此种孔的新直径 <1.0000> :
请输入0层此种孔的新直径 <1.0000> :
请输入0层此种孔的新直径 <1.0000> :
请输入0层此种孔的新直径 <1.0000> :
请输入0层此种孔的新直径 <2.0000> :3
;提示改变圆的直径 明经 ZZXXQQ
(defun c:tt ()
(if (and ;(princ "\nSelect Circle(s) 选择圆:")
         (setq ss (ssget "X" '((0 . "CIRCLE")(8 . "0")))))
(progn
   (setq i 0 clst (list))
   (repeat (sslength ss)
    (setq en (ssname ss i)
             ent (entget en)
             r1 (assoc 40 ent)
             i (1+ i))
    (if (not (member (cdr r1) clst)) (progn
   (setq ss1 (ssget "X" (list '(0 . "CIRCLE") r1)))
   (setq r (assoc 40 ent))
   (setq newd (getdist (strcat "\n请输入0层此种孔的新直径 <" (rtos (* (cdr r) 2) 2 4) "> :")))
   (if newd (progn
      (setq j 0)
      (setq r (/ newd 2))
      (setq clst (cons r clst))
      (repeat (sslength ss1)
       (setq ent1 (entget(ssname ss1 j))
               ent1 (subst (cons 40 r) (assoc 40 ent1) ent1)
               j (1+ j))
       (entmod ent1)
      )
   ))
    ))
   )
))
(princ)
(alert (strcat "0 层的孔已配完"))
)

ZZXXQQ 发表于 2008-11-15 12:17:00

4楼又改了

coolpoom 发表于 2008-11-15 15:57:00

<p>又有新问题,如选择集中有1.0、1.1、1.2、1.3的圆,当把1.0的改为1.2时,接着就到1.1 、1.3了,1.2的就不能修改了。<strong><font face="Verdana" color="#da2549">ZZXXQQ大哥</font></strong>这个问题如何解决。</p>

ZZXXQQ 发表于 2008-11-16 13:19:00

<p>程序只能区分相同直径的圆。如果想要那么改,只能将1.2的圆改成别的直径再改1.1的圆。</p>
页: [1] 2
查看完整版本: [求助]批量修改圆的直径!