明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1763|回复: 3

问一个关于图块的问题

[复制链接]
发表于 2005-3-30 15:09 | 显示全部楼层 |阅读模式
用lisp怎样得到一个块里面多段线的各个顶点呢?
发表于 2005-3-30 17:32 | 显示全部楼层
(defun c:test( / ent ents pt blkname pts pt_lst x)
(setq ent (car (entsel)))
(setq ents (entget ent))
(if (/= (cdr (assoc 0 ents)) "INSERT") (progn (princ "\n没有选择图块!") (exit)))
(setq pt (cdr (assoc 10 ents)))
(setq blkname (cdr (assoc 2 ents)))
(setq ent (tblobjname "BLOCK" blkname))
(while (setq ent (entnext ent))
(setq ents (entget ent))
(cond
((= (cdr (assoc 0 ents)) "LWPOLYLINE")
(setq pts nil)
(foreach x ents
(if (eq 10 (car x))
(setq pts (append pts (list (cdr x))))
)
)
(setq pt_lst (append pt_lst (list pts)))
)
)

)
(mapcar '(lambda(e) (mapcar '(lambda(x) (mapcar '+ pt x)) e)) pt_lst)
)
 楼主| 发表于 2005-3-31 13:34 | 显示全部楼层
谢谢飞哥,这段程序看懂了,也实现了我想要的结果,还有一个小问题请教一下 (setq ent (entnext ent)) entnext函数不是返回下一个图元名吗? 我知道这里是返回块内的图元名(子图元名),就是对帮助里面的解释不太明白
发表于 2005-3-31 13:49 | 显示全部楼层
(setq ent (tblobjname "BLOCK" blkname))


注意这句,ent是BLOCK,而不是INSERT对象的,平常在图形中看到的是INSERT对象,只不过是这个INSERT引用了一个BLOCK,BLOCK是存在DWG数据库中,看不到的,而我这个对象是BLOCK,所以返回的是块的子对象,而不是INSERT对象的下一个图元。。。


一定要分清楚BLOCK和INSERT对象的区别,否则,以后你还会遇到麻烦的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-10 05:55 , Processed in 0.150043 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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