jason_a 发表于 2022-7-5 16:15:37

ssget半径在一个范围内

你好
 
我目前有一个lisp例程,它将查找特定大小的孔,并将其更改为不同的直径。它还执行一些层管理。我在尝试修改例程时遇到了一些问题,因此它将查找范围而不是特定值。所以在我的例子中,我想寻找任何直径在5.1到5.3mm之间的孔,并将其更改为5.0mm。
 
非常感谢。
 


; Find 5.1mm hole and change to proper layer and 5mm diameter hole
(setq AA 5.1)
(setq BB 5.0000)
(if
(ssget "_X" (list '(0 . "CIRCLE")(cons 40 (/ AA 2.0))))
(progn
(COMMAND "CHPROP" "P" "" "P" "LA" "VERTICAL15P00" "")
(setq ss1 (ssget "_X" (list '(0 . "CIRCLE")(cons 40 (/ AA 2.0)))))
(setq LE (sslength ss1))
(setq CNT 0)
(while (< CNT LE)
(progn
(setq OBJ (entget (ssname ss1 CNT)))
(setq NewScale (* (cdr (assoc 40 OBJ)) (/ BB AA)))
(setq OBJ (subst (cons 40 NewScale) (assoc 40 OBJ) OBJ ))
(entmod OBJ)
(setq CNT (+ CNT 1))
))))

pkenewell 发表于 2022-7-5 16:42:45

尝试更改
 
 
(setq AA 5.1)至
(setq AA 5.1 AB 5.3)和
(ssget "_X" (list '(0 . "CIRCLE")(cons 40 (/ AA 2.0))))
校正:如果要选择AA和AB之间的全范围,则如下所示:
我也不确定你在这里做什么,但我认为这需要改变:
根据您最初的描述,您不只是想这样做吗?
以下是我为您推荐的代码:
8
 
 
编辑:哎呀,我把逻辑搞错了,所以我把它改成对将来的其他人有帮助。

jason_a 发表于 2022-7-5 16:58:36

谢谢,基于您的代码,这几乎可以按预期工作。唯一的问题是,它正在转换图形中所有大小的孔,而不仅仅是范围内的孔。因此,超出范围的任何内容也会受到影响。有什么想法吗?
 
编辑。
 
我将OR函数更改为和。还添加了几行代码。似乎正在工作。谢谢你的帮助!
 
9

pkenewell 发表于 2022-7-5 17:01:17

 
 
哎呀,我很高兴你找到了逻辑。很高兴能帮上忙。
 
 
顺便说一句,你注意到我的代码中不需要2个SSGET调用和CHPROP命令了吗?第二次SSGET调用不是必需的,因为您可以在第一次调用时保存选择集。此外,除非CHPROP除了更改圆的层名称之外还为您做了其他事情,否则最好避免对如此简单的内容进行命令调用。

jason_a 发表于 2022-7-5 17:22:26

是的,我现在注意到在lisp例程中删除了CHPROP命令。现在,我已经将您的代码片段合并到我的代码片段中。至于两个ssget调用,我将它们分开,以便在复制和扩展代码以覆盖更多孔尺寸时更容易阅读和编辑。再次感谢!
 
10
页: [1]
查看完整版本: ssget半径在一个范围内