明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1000|回复: 15

[源码] 更改圆的大小

[复制链接]
发表于 2019-1-25 09:14 | 显示全部楼层 |阅读模式
本帖最后由 yxl88168 于 2019-1-25 10:01 编辑

想要把 4.0001的孔改成4.0000的,把5.0001的孔改成5.0000,把6.0001的孔改成6.0000,把7.0001的孔改成7.0000,写了个程序 ,他只把最后一行的那个7.0001的改了,其它的没有改,请问高手帮忙指点一下,谢谢了

(defun c:rr10 ()
;;;改4个的
(setq aa(ssget"X"'(
(0 . "CIRCLE")
(-4 . "=")
(40 . 2.00005)
)))
(setq d 4)
(setq r (/ d 2))
(setq n 0)
(setq c 0)
    (while (<= c (-  (sslength ss) 1))
        (setq e (ssname ss c))
        (command "change" e "" "" r)
        (setq c (+ 1 c)))

;;;改5个的
(setq aa(ssget"X"'(
(0 . "CIRCLE")
(-4 . "=")
(40 . 2.50005)
)))
(setq d 5)
(setq r (/ d 2))
(setq n 0)
(setq c 0)
    (while (<= c (-  (sslength ss) 1))
        (setq e (ssname ss c))
        (command "change" e "" "" r)
        (setq c (+ 1 c)))

;;;改6个的
(setq aa(ssget"X"'(
(0 . "CIRCLE")
(-4 . "=")
(40 . 3.00005)
)))
(setq d 6)
(setq r (/ d 2))
(setq n 0)
(setq c 0)
    (while (<= c (-  (sslength ss) 1))
        (setq e (ssname ss c))
        (command "change" e "" "" r)
        (setq c (+ 1 c)))

;;;改7个的
(setq aa(ssget"X"'(
(0 . "CIRCLE")
(-4 . "=")
(40 . 3.50005)
)))
(setq d 7)
(setq r (/ d 2))
(setq n 0)
(setq c 0)
    (while (<= c (-  (sslength ss) 1))
        (setq e (ssname ss c))
        (command "change" e "" "" r)
        (setq c (+ 1 c)))
(princ))

发表于 2019-1-27 16:53 | 显示全部楼层
  1. (defun c:tt ()
  2.   (setq i -1)
  3.   (if (setq ss (ssget "X" '((0 . "CIRCLE"))))
  4.     (while (setq s1 (ssname ss (setq i (1+ i))))
  5.       (cond ((equal (xyp-DXF 40 s1) 2.00005) (xyp-SubUpd s1 40 2))
  6.             ((equal (xyp-DXF 40 s1) 2.50005) (xyp-SubUpd s1 40 2.5))
  7.             ((equal (xyp-DXF 40 s1) 3.00005) (xyp-SubUpd s1 40 3))
  8.             ((equal (xyp-DXF 40 s1) 3.50005) (xyp-SubUpd s1 40 3.5))
  9.             ((equal (xyp-DXF 40 s1) 4.00005) (xyp-SubUpd s1 40 4))
  10.             ((equal (xyp-DXF 40 s1) 4.50005) (xyp-SubUpd s1 40 4.5))
  11.       )
  12.     )
  13.   )
  14.   (princ)
  15. )
发表于 2019-1-25 10:56 | 显示全部楼层
本帖最后由 start4444 于 2019-1-25 11:49 编辑

你的选集变量是aa,后面变了ss,前后不一致
建议改成输入直径就能通用了:

(defun c:tt5(/ ss d0 d c e)
(setq d0 (getreal"\n请输入旧直径:") d (getreal"\n请输入新直径:"))        
(setq ss(ssget   (list '(0 . "CIRCLE")(cons 40 (/ d0 2)))))
(setq c 0)
    (while (<= c (-  (sslength ss) 1))
        (setq e (ssname ss c))
        (command "change" e "" "" (/ d 2))
        (setq c (+ 1 c)))
(princ)

)


发表于 2019-1-25 12:38 | 显示全部楼层
  1. (defun c:tt ()
  2.   (if (setq ss (ssget "X" '((0 . "CIRCLE") (40 . 2.00005))))
  3.     (xyp-SubUpd ss 40 2.0)
  4.   )
  5.   (if (setq ss (ssget "X" '((0 . "CIRCLE") (40 . 2.50005))))
  6.     (xyp-SubUpd ss 40 2.5)
  7.   )
  8.   (if (setq ss (ssget "X" '((0 . "CIRCLE") (40 . 3.00005))))
  9.     (xyp-SubUpd ss 40 3.0)
  10.   )
  11.   (if (setq ss (ssget "X" '((0 . "CIRCLE") (40 . 3.50005))))
  12.     (xyp-SubUpd ss 40 3.5)
  13.   )
  14.   (princ)
  15. )
发表于 2019-1-25 11:52 | 显示全部楼层
如果只是需要操作,按条件选择,在属性框里直接修改即可。
 楼主| 发表于 2019-1-25 13:06 | 显示全部楼层

院长这个就是牛,要是能把你这个函数一起放在这程序里就发了
 楼主| 发表于 2019-1-25 13:08 | 显示全部楼层
start4444 发表于 2019-1-25 10:56
你的选集变量是aa,后面变了ss,前后不一致
建议改成输入直径就能通用了:

因为是固定的几个孔,所以想搞成自动的,不用每次都自己输入的,
 楼主| 发表于 2019-1-25 17:01 | 显示全部楼层
  都去那里了呢,有帮忙搞一下的吗
发表于 2019-1-25 21:14 | 显示全部楼层
yxl88168 发表于 2019-1-25 13:06
院长这个就是牛,要是能把你这个函数一起放在这程序里就发了

xyp-SubUpd属于开源函数
发表于 2019-1-26 00:09 | 显示全部楼层
yxl88168 发表于 2019-1-25 17:01
都去那里了呢,有帮忙搞一下的吗

改圆的直径或或者半径。可以用 entmod 来弄。
以及 (vla-put-Radius (vlax-ename->vla-object en) e) --->en为实体名, E为半径。
发表于 2019-1-26 00:14 | 显示全部楼层
像你那个元整直径的。又有条件选择的直接做个计算就好
R为以前实际的半径。
(setq r-nea  (read (rtos r 2 2)))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-2 01:25 , Processed in 0.872240 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表