明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: shalei021647

如何实现删除图框外的所有东西

  [复制链接]
发表于 2011-12-9 22:25:04 来自手机 | 显示全部楼层
太智能!!
如果能够自动读取图框【图块】的对角坐标,就离目标不远了~
发表于 2011-12-9 22:55:50 | 显示全部楼层
其实这个并不难,我说的的几条你在论坛里都能搜到现成的代码,用点心搜一下,再搞搞看!
发表于 2011-12-10 13:27:17 | 显示全部楼层
闪过一个感觉:二楼的方法可扩展到提取局部画详图
发表于 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)
)


 楼主| 发表于 2011-12-11 15:46:42 | 显示全部楼层
Gu_xl 发表于 2011-12-9 22:55
其实这个并不难,我说的的几条你在论坛里都能搜到现成的代码,用点心搜一下,再搞搞看!

版主,我真的好好的搜了的,可是真的没有找到太多相关的东西啊,并且除了lisp写的我还能稍微看明白一点,其他的语言我根本就看不明白啊。望版主再给点明示。万分感谢啊
 楼主| 发表于 2011-12-11 15:51:36 | 显示全部楼层
maiko 发表于 2011-12-10 18:41
看看这个能不能达到你要求?
(defun c:FFDE ()
(if (setq ss (ssget)) (progn

感谢你的回答,但是你这个完全不对头哦,经测试一点用都没有哦,我要的是把命令输入后,自动保留多个图框及其里面的内容,而删除图框外面的所有东西哦
 楼主| 发表于 2011-12-11 16:00:44 | 显示全部楼层
Andyhon 发表于 2011-12-9 21:02
...选中这些图框及其中的内容...

站内搜寻 与 acet-ent-geomextents 相关的讨论帖

搜索了acet-ent-geomextents 这个,可是实在是找不到相关的内容哦
发表于 2011-12-11 16:49:27 | 显示全部楼层
大伙儿都错会了您的意思
那您是否考虑上传些样本(*.Dwg)作为调试的依据?
发表于 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
)

 楼主| 发表于 2011-12-11 18:43:13 | 显示全部楼层
Andyhon 发表于 2011-12-11 16:49
大伙儿都错会了您的意思
那您是否考虑上传些样本(*.Dwg)作为调试的依据?

附件已上传,有劳高手帮帮忙了。要达到的目的是,通过lisp编个命令,再原始图里面输入这个命令,然后就自动全变成修改后的图那样。除了图框及图框里面的东西,其他的东西都被删除掉了。




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-20 11:15 , Processed in 0.162322 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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