明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1621|回复: 4

[提问] 关于表的每一项比较,如何写s2?

[复制链接]
发表于 2014-5-26 20:40:12 | 显示全部楼层 |阅读模式
本帖最后由 Gu_xl 于 2014-5-28 11:46 编辑

已知  (setq lst '((0 . "CIRCLE") (-3 ("my_tag" (1000 . "NAME") (1000 . "1 gen1USER   3.200   0.000  0.0000    0.00 ")))))
         (setq lst1 (-3 ("my_tag" (1000 . "NAME") (1000 . "1 gen1USER   3.200   0.000  0.0000    0.00 "))))
         (setq s1 (ssget '((-4 . "<AND") (0 . "CIRCLE")  (-4 . "AND>") )))
以s1选集为对象,用lst1中的内容为条件,对s1选集中的每个图元进行筛选,如果具有此属性且完全相等的话,重组选集为s2?
发表于 2014-5-27 18:21:40 | 显示全部楼层
  1. (setq s2(ssadd)n 0)
  2. (repeat (sslength s1)
  3.   (setq e(ssname s1 n)
  4.           n(1+ n))
  5.   (if(equal(assoc -3(entget e'("my_tag")))lst1)(setq s2(ssadd e s2))))
 楼主| 发表于 2014-5-27 19:06:10 | 显示全部楼层
本帖最后由 lite 于 2014-5-27 19:15 编辑
llsheng_73 发表于 2014-5-27 18:21

谢谢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.000  0.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.000  0.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.000  0.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,才是对的,但是这个过程,有什么好的写法?
发表于 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))))

要么就别这么干,另外想别的办法,既然你的"条件"里边这也不固定,那也可能有多种值,为什么不能直接用应用名过滤?搞得这么复杂
 楼主| 发表于 2014-5-28 11:00:39 | 显示全部楼层
本帖最后由 lite 于 2014-5-28 11:09 编辑
llsheng_73 发表于 2014-5-28 10:52
自己说的以lst1的内容作为条件,结果那条件还不唯一了,那要么多写几个条件(setq lst1'(条件1 条件2 条件3) ...

应用名,你是说扩展的应用明吗?我们这里使用的扩展数据定义模式都是使用一样的名字啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-24 20:15 , Processed in 0.218543 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表