乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 57|回复: 19

[编程交流] 选择所有对象的代码

[复制链接]

2

主题

18

帖子

16

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 15:04:33 | 显示全部楼层 |阅读模式
大家好,我需要帮助完成以下代码。
 
 
基本上,我需要选择对象的代码,在选择对象后,将层“obj2”转换为“obj1”层,“dim”转换为“0”层
 
 
(定义c:autolayerchange()
(if(setq ss(ssget))
(尖头(setq i(1-(sslength ss)))
(虽然(
(setq e(ssname ss i)
x(cdr(assoc 8(entget e)))
i(1-i)
) ; 它正在返回对象层名称
(foreach x“obj2”转换为层“obj1”)
(foreach x“dim”转换为层“0”)
))))
我被红色标记的文本卡住了。谢谢你的帮助
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
274
发表于 2022-7-5 15:09:16 | 显示全部楼层
像这样的?
 
  1. (defun c:test ( / e i l ss)
  2. (if (setq ss (ssget))                       [color="red"]; <- add your ssget filter here[/color]
  3.    (repeat (setq i (sslength ss))
  4.      (setq e (entget (ssname ss (setq i (1- i)))))
  5.      (setq l (cdr (assoc 8 e)))
  6.      (cond ((eq l "obj2") (entmod (subst (cons 8 "obj1") (assoc 8 e) e)))
  7.     ((eq l "dim") (entmod (subst (cons 8 "0") (assoc 8 e) e)))
  8.      )
  9.    )
  10. )
  11. (princ)
  12. )
回复

使用道具 举报

46

主题

161

帖子

104

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
242
发表于 2022-7-5 15:11:26 | 显示全部楼层
我添加了层选择过滤器,但它不工作。。。
回复

使用道具 举报

2

主题

18

帖子

16

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 15:16:37 | 显示全部楼层
另一个:
  1. (defun c:autolayerchange ( / _in _ss _obj)
  2. (if
  3.    (setq _ss (ssget (list (cons 8 "obj2,dim"))));; <- change your ssget filter
  4.    (repeat (setq _in (sslength _ss))
  5.      (setq _obj (vlax-ename->vla-object (ssname _ss (setq _in (1- _in))))); get
  6.      (if (= (vla-get-layer _obj) "obj2")
  7.        (vla-put-layer _obj "obj1")
  8.        (vla-put-layer _obj "0")
  9.      )
  10.    )
  11. )
  12. )
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
325
发表于 2022-7-5 15:19:53 | 显示全部楼层
你想选择什么对象?将您的代码张贴在此处,以便我们检查
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
274
发表于 2022-7-5 15:20:49 | 显示全部楼层
(定义c:测试(/e i l ss)
(if(setq ss(ssget(列表(cons 8“dim,obj2”))));
(重复(setq i(sslength ss))
(setq e(entget(ssname ss(setq i(1-i Ю)Ю))))
(setq l(cdr(assoc 8 e)))
(cond((eq l“obj2”)(entmod(subst(cons 8“obj1”)(assoc 8 e)e)))
((等式l“dim”)(entmod(subst(cons 8“0”)(assoc 8 e)e)))
)
)
)
(普林斯)
)
 
 
它不起作用。。。
 
 
ziele共享的代码正在工作,但它正在将两个层转换为它应该转换的“0”层(obj2到obj1,dim到0)
回复

使用道具 举报

2

主题

18

帖子

16

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 15:25:01 | 显示全部楼层
 
 
为我工作谢谢你。。。但是需要理解你的代码
回复

使用道具 举报

2

主题

18

帖子

16

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 15:27:42 | 显示全部楼层
 
这段代码在我这边运行得很好。请正确检查。
 
我还检查了zilele的代码,这也很好。有点不对劲,你的结局是什么
回复

使用道具 举报

55

主题

402

帖子

357

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
274
发表于 2022-7-5 15:32:45 | 显示全部楼层
 
 
 
很抱歉,我的电脑无法使用。。我试了很多次。。。如果你能帮我。。。
回复

使用道具 举报

2

主题

18

帖子

16

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 15:35:22 | 显示全部楼层
您好,Grrr,
我认为您需要从选择集中排除视口对象,因为您已经使用了entmod函数。除此之外,您不需要搜索是否找到或存在目标层,因为cons函数可以使用默认值创建目标层名称。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-15 00:47 , Processed in 3.557466 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表