【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编个命令,再原始图里面输入这个命令,然后就自动全变成修改后的图那样。除了图框及图框里面的东西,其他的东西都被删除掉了。




页: 1 [2] 3 4 5
查看完整版本: 如何实现删除图框外的所有东西