如何从集合中创建列表
大家好我有一套观点
说:
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”。。。
有什么建议吗?
提前感谢
_$ (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))
它工作得很好。。。谢谢
对不起,我还有一个问题,不值得为它打开一个新的线程。。。
...
我有一个选择集“ss1”
我想在其中选择与点p1和p2相交的图元
我试过(setq ssj(ssget“F”(list p1 p4))ss1)
但它带来了错误信息:错误的论点
当我使用(setq ssj(ssget“F”(list p1 p4))。。它工作得很好。。。但我只需要来自ss1的实体,而不是所有对象。。。
谢谢
得到错误消息的原因是无法将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”的过滤标准是什么,那么仅仅一次迭代就足够了。
.. 非常感谢您的时间和良好的解释。。。。ss1仅属于“line”类型,如果这使
然后你可以这样做:
(sssetfirst nil (ssget "_F" (list p1 p2 p3 p4) '((0 . "LINE"))))
当然,如果您只想“夹持”选择集。
页:
[1]