【KAIXIN】
发表于 2011-12-9 22:25:04
太智能!!
如果能够自动读取图框【图块】的对角坐标,就离目标不远了~
Gu_xl
发表于 2011-12-9 22:55:50
其实这个并不难,我说的的几条你在论坛里都能搜到现成的代码,用点心搜一下,再搞搞看!
gdslqs
发表于 2011-12-10 13:27:17
闪过一个感觉:二楼的方法可扩展到提取局部画详图
maiko
发表于 2011-12-10 18:41:17
本帖最后由 maiko 于 2011-12-10 18:44 编辑
看看这个能不能达到你要求?
(defun c:FFDE ()
(if (setq ss (ssget)) (progn
(command ".erase" "ALL" "R" ss "") ;1删除选择外所有图形
(command ".purge" "ALL" "*" "N") ;2清理全部pu
(COMMAND "ZOOM" "E") ;3窗口缩放
(COMMAND "qsave") ;4保存
)
(princ)
) (princ)
)
(defun c:FFDD ()
(if (setq ss (ssget)) (progn
(command ".erase" "ALL" "R" ss "") ;1删除选择外所有图形
(command ".purge" "ALL" "*" "N") ;2清理全部pu
(COMMAND "ZOOM" "E") ;3窗口缩放
(COMMAND "qsave") ;4保存
(COMMAND "close") :5退出
)
(princ)
) (princ)
)
shalei021647
发表于 2011-12-11 15:46:42
Gu_xl 发表于 2011-12-9 22:55 static/image/common/back.gif
其实这个并不难,我说的的几条你在论坛里都能搜到现成的代码,用点心搜一下,再搞搞看!
版主,我真的好好的搜了的,可是真的没有找到太多相关的东西啊,并且除了lisp写的我还能稍微看明白一点,其他的语言我根本就看不明白啊。望版主再给点明示。万分感谢啊
shalei021647
发表于 2011-12-11 15:51:36
maiko 发表于 2011-12-10 18:41 static/image/common/back.gif
看看这个能不能达到你要求?
(defun c:FFDE ()
(if (setq ss (ssget)) (progn
感谢你的回答,但是你这个完全不对头哦,经测试一点用都没有哦,我要的是把命令输入后,自动保留多个图框及其里面的内容,而删除图框外面的所有东西哦
shalei021647
发表于 2011-12-11 16:00:44
Andyhon 发表于 2011-12-9 21:02 static/image/common/back.gif
...选中这些图框及其中的内容...
站内搜寻 与 acet-ent-geomextents 相关的讨论帖
搜索了acet-ent-geomextents 这个,可是实在是找不到相关的内容哦
Andyhon
发表于 2011-12-11 16:49:27
大伙儿都错会了您的意思
那您是否考虑上传些样本(*.Dwg)作为调试的依据?
langjs
发表于 2011-12-11 17:14:11
给你一段源码,能解决矩形命令绘制的图框选择问题,至于四条线段围成的矩形,我就爱莫能助了,图块做的图框我也没办法
(setq ss (ssget "x" (list '(0 . "LWPOLYLINE") '(90 . 4) ))) ; 选取纸中所有矩形命令绘制的矩形
(setq ss (juxingguolv ss))
;;; 过滤掉矩形选择集内的矩形,返回最外一圈的矩形的选择集
(defun juxingguolv (ss / ent i j maxpoint minpoint name pmax2 pmax4 pmin1 pmin3 pt1x pt1y pt2x pt2y pt3x pt3y pt4x pt4y ss1
ss2)
(setvar "osmode" 0)
(setq ss1 (ssadd)
ss2 (ssadd)
)
(repeat (setq i (sslength ss))
(setq name (ssname ss (setq i (1- i))))
(setq ss1 (ssadd name ss1))
(setq ss2 (ssadd name ss2))
)
(repeat (setq i (sslength ss))
(setq name (ssname ss (setq i (1- i))))
(vla-getboundingbox (vlax-ename->vla-object name) 'minpoint 'maxpoint)
(setq pmax2 (vlax-safearray->list maxpoint)
pmin1 (vlax-safearray->list minpoint)
)
(setq pt1x (car pmin1)
pt1y (cadr pmin1)
pt2x (car pmax2)
pt2y (cadr pmax2)
)
(setq ss1 (ssdel name ss1))
(repeat (setq j (sslength ss1))
(setq ent (ssname ss1 (setq j (1- j))))
(vla-getboundingbox (vlax-ename->vla-object ent) 'minpoint 'maxpoint)
(setq pmax4 (vlax-safearray->list maxpoint)
pmin3 (vlax-safearray->list minpoint)
)
(setq pt3x (car pmin3)
pt3y (cadr pmin3)
pt4x (car pmax4)
pt4y (cadr pmax4)
)
(if (and
(> pt3x pt1x)
(> pt3y pt1y)
(< pt4x pt2x)
(< pt4y pt2y)
)
(if (ssmemb ent ss2)
(setq ss2 (ssdel ent ss2))
)
)
(if (and
(< pt3x pt1x)
(< pt3y pt1y)
(> pt4x pt2x)
(> pt4y pt2y)
)
(if (ssmemb name ss2)
(setq ss2 (ssdel name ss2))
)
)
)
)
ss2
)
shalei021647
发表于 2011-12-11 18:43:13
Andyhon 发表于 2011-12-11 16:49 static/image/common/back.gif
大伙儿都错会了您的意思
那您是否考虑上传些样本(*.Dwg)作为调试的依据?
附件已上传,有劳高手帮帮忙了。要达到的目的是,通过lisp编个命令,再原始图里面输入这个命令,然后就自动全变成修改后的图那样。除了图框及图框里面的东西,其他的东西都被删除掉了。