handasa 发表于 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”。。。
 
有什么建议吗?
提前感谢

Grrr 发表于 2022-7-5 16:43:15


_$ (setq lst (cons '(x1 y1 z1) lst))
((X1 Y1 Z1))
_$ (setq lst (cons '(x2 y2 z2) lst))
((X2 Y2 Z2) (X1 Y1 Z1))
_$ (setq lst (cons '(x3 y3 z3) lst))
((X3 Y3 Z3) (X2 Y2 Z2) (X1 Y1 Z1))

 
或者用list函数将其包装起来:
 

_$ (list
'(x1 y1 z1)
'(x2 y2 z2)
'(x3 y3 z3)
)
((X1 Y1 Z1) (X2 Y2 Z2) (X3 Y3 Z3))

handasa 发表于 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的实体,而不是所有对象。。。
 
谢谢

Grrr 发表于 2022-7-5 17:03:05

 
得到错误消息的原因是无法将SS作为参数提供给ssget函数,
查看Lee Mac关于ssget的教程/参考(围栏示例)。
 
从那里引用:
 
方法
(ssget "_F" pL ssfL)
其中pL-表示点列表(点列表)
ssfL-表示ssget筛选器列表-点对的assoc列表[可选]
 
因此,我将迭代“ssj”,并使用ssmemb排除不在“ss1”中的实体,将它们分组在“news”中:
 

(if
(and
   (setq ssj (ssget "_F" (list p1 p2 p3 p4))) ; I guess you want the fence through the points, not just the endpoints
   (setq newSS (ssadd)) ; create new empty selection set
)
(progn ; iterate over the "ssj" and grip the "newSS"
   (repeat (setq index (sslength ssj))
   (setq ent (ssname ssj (setq index (1- index)))) ; nth entity of the selection set
   (if (ssmemb ent ss1) (ssadd ent newSS)) ; if that entity is inside the "ss1", then collect it in "newSS"
   ); repeat
   (sssetfirst nil newSS) ; grip "newSS"
); progn
); if

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

handasa 发表于 2022-7-5 17:18:21

 
.. 非常感谢您的时间和良好的解释。。。。ss1仅属于“line”类型,如果这使

Grrr 发表于 2022-7-5 17:22:13

 
然后你可以这样做:
 
(sssetfirst nil (ssget "_F" (list p1 p2 p3 p4) '((0 . "LINE"))))
 
当然,如果您只想“夹持”选择集。
页: [1]
查看完整版本: 如何从集合中创建列表