乐筑天下

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

[编程交流] 从选择中筛选对象

[复制链接]

43

主题

136

帖子

92

银币

后起之秀

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

铜币
217
发表于 2022-7-6 07:44:04 | 显示全部楼层 |阅读模式
大家好,
 
我做了一个例程,其中有一个具有不同层的不同对象的选择集。
请帮助我了解如何逐步通过选择集并从特定层中拾取对象。
 
 
当做
Aaryan。
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 07:58:03 | 显示全部楼层
您应该查看SSNAME和ENTGET函数;该层存储在DXF代码8下。
 
或者,当创建选择集时,可以仅过滤特定层中的实体:
  1. (ssget "_X" (list (cons 8 MyLayer)))
回复

使用道具 举报

43

主题

136

帖子

92

银币

后起之秀

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

铜币
217
发表于 2022-7-6 08:10:58 | 显示全部楼层
谢谢你Mircea
 
但我想从选择集中选择一个对象,并将其保存为变量以供进一步使用。我不能使用
  1. ssget "X"
功能,因为我必须选择具有不同层的多个对象。到目前为止,我做了如下工作。
 
  1. (defun c:test(/ Objectlist)
  2. (prompt "\nSelect Objects to generate")
  3. (setq sel1 (ssget '((0 . "POLYLINE,LWPOLYLINE") (8 . "Xpro,Fpro,Cpro"))))
  4. (setq cntr 0
  5. Objectlist '())
  6. (repeat (sslength sel1)
  7.    (setq entityname (ssname sel1 cntr)
  8.   Objectlist (append (list entityname) Objectlist))
  9.    (setq cntr (1+ cntr)))
  10.    
  11. (setq check (mapcar '(lambda (a) (= (cdr (assoc 8 (entget a))) "Fpro")) Objectlist))
  12. (princ))

 
我只需要check变量将对象保存在层Fpro中
请做需要的事
 
当做
Aaryan公司
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:15:14 | 显示全部楼层
您可以在解析选择集时创建列表-只需保留来自所述层的项目:
  1. (defun c:test( / Objectlist sel1 cntr check )
  2. (prompt "\nSelect Objects to generate")
  3. (setq sel1 (ssget '((0 . "POLYLINE,LWPOLYLINE") (8 . "Xpro,Fpro,Cpro"))))
  4. (setq cntr 0
  5.        Objectlist '()
  6. [color=red]        check '()[/color])
  7. (repeat (sslength sel1)
  8.    (setq entityname (ssname sel1 cntr))
  9. [color=red]    (if (= (strcase (cdr (assoc 8 (entget entityname)))) "FPRO")[/color]
  10. [color=red]     (setq check (append (list entityname) check))[/color]
  11. [color=red]    )[/color]
  12. [color=black]    (setq Objectlist (append (list entityname) Objectlist))[/color]
  13.    (setq cntr (1+ cntr)))
  14. (princ))
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:29:52 | 显示全部楼层
如果要直接从主列表处理:
  1. (setq check (vl-remove-if-not '(lambda(x) (= (strcase (cdr (assoc 8 (entget x)))) "FPRO"))
  2.                               Objectlist))

 
或:
  1. (setq check (vl-remove-if '(lambda(x) (/= (strcase (cdr (assoc 8 (entget x)))) "FPRO"))
  2.                          Objectlist))
回复

使用道具 举报

43

主题

136

帖子

92

银币

后起之秀

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

铜币
217
发表于 2022-7-6 08:42:40 | 显示全部楼层
非常感谢米尔恰。
现在清楚了。
 
当做
Aaryan公司
回复

使用道具 举报

35

主题

2471

帖子

2447

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
174
发表于 2022-7-6 08:52:30 | 显示全部楼层
很高兴听你这么说Aaryan。不客气!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-9 22:31 , Processed in 0.584046 second(s), 77 queries .

© 2020-2025 乐筑天下

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