lite 发表于 2014-5-26 20:40:12

关于表的每一项比较,如何写s2?

本帖最后由 Gu_xl 于 2014-5-28 11:46 编辑

已知(setq lst '((0 . "CIRCLE") (-3 ("my_tag" (1000 . "NAME") (1000 . "1 gen1USER   3.200   0.0000.0000    0.00 ")))))
         (setq lst1 (-3 ("my_tag" (1000 . "NAME") (1000 . "1 gen1USER   3.200   0.0000.0000    0.00 "))))
         (setq s1 (ssget '((-4 . "<AND") (0 . "CIRCLE")(-4 . "AND>") )))
以s1选集为对象,用lst1中的内容为条件,对s1选集中的每个图元进行筛选,如果具有此属性且完全相等的话,重组选集为s2?

llsheng_73 发表于 2014-5-27 18:21:40

(setq s2(ssadd)n 0)
(repeat (sslength s1)
(setq e(ssname s1 n)
          n(1+ n))
(if(equal(assoc -3(entget e'("my_tag")))lst1)(setq s2(ssadd e s2))))

lite 发表于 2014-5-27 19:06:10

本帖最后由 lite 于 2014-5-27 19:15 编辑

llsheng_73 发表于 2014-5-27 18:21 static/image/common/back.gif

谢谢llsheng_73,但是实际情况工作中是很复杂的:
选择对象: ((-1 . <图元名: 7ef14280>) (0 . CIRCLE) (330 . <图元名: 7ef05cf8>) (5 . 20180)
(100 . AcDbEntity) (67 . 0) (410 . Model) (8 . LB_O) (100 . AcDbCircle) (10
821.243 568.608 0.0) (40 . 1.6) (210 0.0 0.0 1.0) (-3 (my_tag (1000 . NAME)
(1000 . 1 genBLPS   3.200   0.0000.1000 ..   0.00 ))))

选择对象: ((-1 . <图元名: 7ef142e8>) (0 . CIRCLE) (330 . <图元名: 7ef05cf8>) (5 . 2019D)
(100 . AcDbEntity) (67 . 0) (410 . Model) (8 . LB_O) (6 . Continuous) (100 .
AcDbCircle) (10 841.637 572.009 0.0) (40 . 1.6) (210 0.0 0.0 1.0) (-3 (my_tag
(1000 . NAME) (1000 . 1 gen1USER   3.200   0.0000.0000    0.00 ))))

以上的两项是不完全相同的,他们都是my_tag,而祖玛1000项是不能作为(ssget '((-4 . "<AND") (0 . "CIRCLE")(-4 . "AND>") ))中的条件,我发现当我用(ssget '((-4 . "<AND") (0 . "CIRCLE") (...其他项..) (-4 . "AND>") ))去作为一个选集s1后,再用比较条件(my_tag (1000 . NAME) (1000 . 1 gen1USER   3.200   0.0000.0000    0.00 )))从s1中筛选出来作为另外的一个选集s2,这个s2结果也会有问题的!原因就在于(ssget '((-4 . "<AND") (0 . "CIRCLE")(...其他项..)(-4 . "AND>") ))中.因为我是要对于template选集中的每一图元单独所组成的条件:比如(0 . "CIRCLE") (40 . 12.0) ...得到的选集n1,再在这个选集中把对应的图元-3项为条件去筛选是否一样,得到选集N1,最后把N1+N2+...相加组合为选集S2,才是对的,但是这个过程,有什么好的写法?

llsheng_73 发表于 2014-5-28 10:52:27

本帖最后由 llsheng_73 于 2014-5-28 10:55 编辑

自己说的以lst1的内容作为条件,结果那条件还不唯一了,那要么多写几个条件(setq lst1'(条件1 条件2 条件3))
每一个条件都按原来的lst1的写法

(repeat ....
....
(if(member(assoc -3(entget e'("my_tag")))lst1)(setq s2(ssadd e s2))))

要么就别这么干,另外想别的办法,既然你的"条件"里边这也不固定,那也可能有多种值,为什么不能直接用应用名过滤?搞得这么复杂

lite 发表于 2014-5-28 11:00:39

本帖最后由 lite 于 2014-5-28 11:09 编辑

llsheng_73 发表于 2014-5-28 10:52 static/image/common/back.gif
自己说的以lst1的内容作为条件,结果那条件还不唯一了,那要么多写几个条件(setq lst1'(条件1 条件2 条件3) ...
应用名,你是说扩展的应用明吗?我们这里使用的扩展数据定义模式都是使用一样的名字啊!
页: [1]
查看完整版本: 关于表的每一项比较,如何写s2?