hb198075
发表于 2011-11-9 10:00:50
你说的这种选择方式是可以做到的,先选择线条,然后获得线条所有顶点,再用SSGET 的F模式来获得相交物体。再继续判断所选物体是否线条,然后递归调用就是了(注意要判断物体是否已经在选择集内)但看了你那个示例图,用这种方式的话不能保证可以选到图框文字之类的物体啊。
另提供给你一个思路,就是根据你图框的大小来判断,你图框大小是一定的,然后根据这个规则来获得内,外框的范围,再按这个范围来选择物体就是了。(比如说如果图框是PL线,你就用SSGET,然后按顶点数为4过滤,再把选择出来的线条计算长和宽就可以知道大小了。如果图框是由LINE组成,就判断线条的长度,长度为长式宽的就是你要选择的图框边了。)
zr222333
发表于 2011-11-9 12:23:46
xiaxiang 发表于 2011-11-9 08:24 static/image/common/back.gif
先定内框和外框,找到内框和外框间的交集即可。楼主为何要替换图框?是翻译要用吗?
不是要替换图框,是要把图框选中后删掉
zr222333
发表于 2011-11-9 12:26:56
Andyhon 发表于 2011-11-8 22:42 static/image/common/back.gif
Try
(command "Erase" "all" "r" "c" pt1 pt3 "")
试过了,可行,谢谢了!
zr222333
发表于 2011-11-9 12:33:59
hb198075 发表于 2011-11-9 10:00 static/image/common/back.gif
你说的这种选择方式是可以做到的,先选择线条,然后获得线条所有顶点,再用SSGET 的F模式来获得相交物体。再 ...
大哥,我是初学的,你说的方法我知道,就是不知道怎么编程,该用什么代码,劳烦大哥说的具体点。
另:你说的第二种方法不好实现,我的图框大小不是固定的。
shalei021647
发表于 2011-12-8 21:26:41
本帖最后由 shalei021647 于 2011-12-8 21:29 编辑
楼主,你说的图框大小不一样,是指每个图框的长与宽之比不一样吗,如果楼主所有图框各自的长宽之比一样的话,并且图框外面没有其他的图形的话。有一个方法可以实现哦。就是在用(command "Erase" "all" "r" "c" pt1 pt3 "")这个命令前,先把所有的图框进行一个放大或是缩小,也就是你先制定一个标准图框的大小来确定坐标。如果你的图框外面没有其他的图形,可以用如下的命令把图框的左下角点定为原点
(setvar "cmdecho" 0);;暂时在命令函数运行时关闭回显提示和输入
(command "-layer" "u" "*" "");;解锁所有图层
(command "-layer" "on" "*" "");;打开所有图层
(command "-layer" "t" "*" "");;解冻所有图层
(command "-purge" "a" "" "n");;purg清理无用项目
(command "zoom" "e")
(command "ucs" "w")
(command "move" "all" "" (getvar"extmin") '(0 0 0))
(command "zoom" "e")
(command "ucs" "o" (getvar"extmin"))
(setvar "cmdecho" 1)
然后再对其进行放大或是缩小,因为可以提取到图框的左下角点与右上角点,那么这两个角点X坐标之差就是某个图框的实际长度,用这个长度除以你所制定的标准图框的长度,得到一个比例,然后再全选这个图形,以左下角点为基点,按这个比例进行放大或是缩小,这样的话,你不同的图框就达到了相同的大小了。然后再用(command "Erase" "all" "r" "c" pt1 pt3 "")这个命令去删除图框吧,因为大小相同了,并且都是图框左下角点为原点,所以基本上,pt1与pt3这两个点就是固定的值了,删除图框后,再以原点为基点,全选所有图形,按之前的那个比例的倒数进行放大或是缩小,这样就又恢复到他原来的大小了。
当然这只是在一个图形中这么做,如果你按这个思路写出了所有的命令,那么你再下载一个cad批量处理工具,论坛里面有,那就可以实现对多个图形进行此lisp命令的操作了。呵呵,我也是刚接触lisp,如果楼主需要的话,可以加QQ14583477,帮你研究一下。理论上来说,如果你的所有图形的长宽之比是一样的,并且图框外面没有图形的话,是能够批量实现的。
bskidtf
发表于 2024-6-1 01:16:04
链式选择,直接做不到,后台实现吧