明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 7100|回复: 21

(entget (car (entsel)))小疑惑求解

[复制链接]
发表于 2012-9-11 08:22 | 显示全部楼层 |阅读模式
再次请教大家一个问题.
比如(entget (car (entsel)))这个经典语句,entsel中我选择的对象是一个矩形,返回的结果是:
((-1 . <图元名: 7ef9b070>) (0 . "LWPOLYLINE") (330 . <图元名:
7ef80cf8>) (5 . "23E") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0")
(100 . "AcDbPolyline") (90 . 4) (70 . 1) (43 . 0.0) (38 . 0.0) (39 . 0.0) (10
22.758 17.2518) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 37.4613 17.2518) (40 .
0.0) (41 . 0.0) (42 . 0.0) (10 37.4613 9.55792) (40 . 0.0) (41 . 0.0) (42 .
0.0) (10 22.758 9.55792) (40 . 0.0) (41 . 0.0) (42 . 0.0) (210 0.0 0.0 1.0))
其中有4个10::(10 22.758 17.2518)  (10 37.4613 17.2518)        (10 37.4613 9.55792)   (10 22.758 9.55792)
他们代表的是矩形的四个对角点的坐标
当用(assoc 10 entget..)的时候,得到的是第一个10::(10 22.758 17.2518)
现在的问题是:如何得到其余三个10??

发表于 2012-9-11 08:32 | 显示全部楼层
(setq s(entget (car (entsel))))
(foreach x s (if (=(car x)10)(setq lst10(cons(cdr x)lst10)))

点评

非常感谢,明白了,用foreach!  发表于 2012-9-11 08:35

评分

参与人数 1金钱 +5 收起 理由
品茗新秀 + 5 很给力!

查看全部评分

发表于 2012-9-11 20:31 | 显示全部楼层
按yjr111的函数得的是空表,且少个闭括号

点评

你说得没错,但还是错了  发表于 2012-9-11 20:42
发表于 2012-9-11 21:08 | 显示全部楼层
发表于 2012-9-11 21:15 | 显示全部楼层
(mapcar 'cdr (vl-remove-if '(lambda (x) (/= (car x) 10)) (entget (car (entsel)))))

点评

非常感谢!  发表于 2012-9-11 21:56
发表于 2012-9-11 21:16 | 显示全部楼层
本帖最后由 namezg 于 2012-9-11 21:29 编辑

(vl-remove nil (mapcar  '(lambda (x) (if (= (car x) 10) (cdr x))) (entget (car (entsel)))))



发表于 2012-9-11 21:43 | 显示全部楼层
 楼主| 发表于 2012-9-11 22:00 | 显示全部楼层
yjr111 发表于 2012-9-11 21:43
参见http://bbs.mjtd.com/forum.php?mod=viewthread&tid=90011第10楼专家代码!

谢谢给的链接!
另:看楼上大侠的代码,有vl系列函数,我自己到现在还未开始学,不知道其用处大吗?值得学吗?看论坛上的代码,这样的函数好像用得并不多.

点评

vl函数处理大量表数据时速度更快  发表于 2012-9-11 22:02
 楼主| 发表于 2012-9-11 22:10 | 显示全部楼层
yjr111 发表于 2012-9-11 21:43
参见http://bbs.mjtd.com/forum.php?mod=viewthread&tid=90011第10楼专家代码!

呵呵,不知道您说的表数据是(list 表)还是excel或者txt,dat表,如果是后者的话,我倒更喜欢用vba来解
不管vl是什么函数,随着学习的深入,肯定会接触并学习的
目前兴趣正在逐渐从excel转到cad.
希望能在学习cad过程中得到您的帮助,非常感谢!
发表于 2015-7-23 12:54 | 显示全部楼层
namezg 发表于 2012-9-11 21:16
(vl-remove nil (mapcar  '(lambda (x) (if (= (car x) 10) (cdr x))) (entget (car (entsel)))))

这个非常好!如果现在要修改第二个10的组码值,怎么修改,就是怎么用新的值替换掉第二个10的组码,谢谢!

点评

用subst 替换, 用entmod更新  发表于 2015-7-23 14:58
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 18:14 , Processed in 0.291790 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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