乐筑天下

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

[编程交流] 如何从集合中创建列表

[复制链接]

42

主题

173

帖子

132

银币

后起之秀

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

铜币
220
发表于 2022-7-5 16:20:32 | 显示全部楼层 |阅读模式
大家好
 
我有一套观点
说:
p1=(x1,y1,z1)
p2=(x2,y2,z2)
p3=(x3,y3,z3)
 
当我使用
(setq lst(cons p1 lst))
(setq lst(cons p2 lst))
(setq lst(cons p3 lst))
 
最终列表将类似于((x1 y1 z1)(x2 y2 z2)x3 y3 z3)
列表长度为5而不是3。。。即第三点包含在括号之间
 
我用“cons”代替了没有希望的“cons”。。。
 
有什么建议吗?
提前感谢
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 16:43:15 | 显示全部楼层
  1. _$ (setq lst (cons '(x1 y1 z1) lst))
  2. ((X1 Y1 Z1))
  3. _$ (setq lst (cons '(x2 y2 z2) lst))
  4. ((X2 Y2 Z2) (X1 Y1 Z1))
  5. _$ (setq lst (cons '(x3 y3 z3) lst))
  6. ((X3 Y3 Z3) (X2 Y2 Z2) (X1 Y1 Z1))

 
或者用list函数将其包装起来:
 
  1. _$ (list
  2. '(x1 y1 z1)
  3. '(x2 y2 z2)
  4. '(x3 y3 z3)
  5. )
  6. ((X1 Y1 Z1) (X2 Y2 Z2) (X3 Y3 Z3))
回复

使用道具 举报

42

主题

173

帖子

132

银币

后起之秀

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

铜币
220
发表于 2022-7-5 16:56:27 | 显示全部楼层
 
它工作得很好。。。谢谢
 
对不起,我还有一个问题,不值得为它打开一个新的线程。。。
 
...
我有一个选择集“ss1”
我想在其中选择与点p1和p2相交的图元
 
我试过(setq ssj(ssget“F”(list p1 p4))ss1)
但它带来了错误信息:错误的论点
 
当我使用(setq ssj(ssget“F”(list p1 p4))。。它工作得很好。。。但我只需要来自ss1的实体,而不是所有对象。。。
 
谢谢
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:03:05 | 显示全部楼层
 
得到错误消息的原因是无法将SS作为参数提供给ssget函数,
查看Lee Mac关于ssget的教程/参考(围栏示例)。
 
从那里引用:
 
方法
  1. (ssget "_F" pL ssfL)

其中pL-表示点列表(点列表)
ssfL-表示ssget筛选器列表-点对的assoc列表[可选]
 
因此,我将迭代“ssj”,并使用ssmemb排除不在“ss1”中的实体,将它们分组在“news”中:
 
  1. (if
  2. (and
  3.    (setq ssj (ssget "_F" (list p1 p2 p3 p4))) ; I guess you want the fence through the points, not just the endpoints
  4.    (setq newSS (ssadd)) ; create new empty selection set
  5. )
  6. (progn ; iterate over the "ssj" and grip the "newSS"
  7.    (repeat (setq index (sslength ssj))
  8.      (setq ent (ssname ssj (setq index (1- index)))) ; nth entity of the selection set
  9.      (if (ssmemb ent ss1) (ssadd ent newSS)) ; if that entity is inside the "ss1", then collect it in "newSS"
  10.    ); repeat
  11.    (sssetfirst nil newSS) ; grip "newSS"
  12. ); progn
  13. ); if

 
但是,如果我们知道“ss1”的过滤标准是什么,那么仅仅一次迭代就足够了。
回复

使用道具 举报

42

主题

173

帖子

132

银币

后起之秀

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

铜币
220
发表于 2022-7-5 17:18:21 | 显示全部楼层
 
.. 非常感谢您的时间和良好的解释。。。。ss1仅属于“line”类型,如果这使
回复

使用道具 举报

66

主题

1552

帖子

1514

银币

后起之秀

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

铜币
325
发表于 2022-7-5 17:22:13 | 显示全部楼层
 
然后你可以这样做:
 
  1. (sssetfirst nil (ssget "_F" (list p1 p2 p3 p4) '((0 . "LINE"))))

 
当然,如果您只想“夹持”选择集。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-8-20 21:48 , Processed in 1.146889 second(s), 64 queries .

© 2020-2025 乐筑天下

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