找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 13772|回复: 79

[分享]:用xdapi写了一个"扩展修剪程序",自动判断内外。

[复制链接]

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-6-7 22:56:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
例子见snsj的贴.
支持的东西要多一些,要xd_api ,但不要ET工具.
自动判断内外,>=R14可用.
[php]
(defun c:ext( / apix trim: area box e el in l name p1 p2 pt pts
                pts-no pts-yes ss tf yes e-del high pts-new)

(defun apix()(/ (getvar "VIEWSIZE")(cadr(getvar "screensize"))))

(defun trim:(l / el p1 p2 yes)
   ;;;(my-princ (sslength ss))
   (setq l(mapcar '(lambda(x)(trans x 0 1)) l)
         p1(car l)
         l(cdr l)
   )
   (command "trim" ss "" )
   (while(setq yes t el (entlast) p2(car l))
     (while yes
       (command "f" p1 p2 "")
       (if(equal(entlast)el)(setq yes nil)(setq el(entlast)))
     )
     (setq l(cdr l) p1 p2)
   )
   (command "")  
)

;;;-------------
(xdrx_begin '(("osmode" . 0)("cmdecho" . 0)("plinewid" . 0)))
(if(and
   (princ "\n没考虑\"层锁定\",自己处理.  trim框和框不要相交")
   (princ "\n支持\"*line,arc,circle,ellipse,*text,region\", 选择: ")
   (setq ss(ssget '((0 . "*line,arc,circle,ellipse,*text,region"))))
   (setq box (xdrx_entity_box ss))
   (setq pt(getpoint "\nTrim点: "))
   )
  (progn
;;;zoom...
    (setq  p1(car box)
           p2(caddr box)
     )
    (if (setq tf (xdrx_isptoffscr p1 p2))
               (xdrx_drawing_zoomw p1 p2);;;一定要zoom的,不然会出错的,不光剪不了.
    )
   (command "zoom" "0.95x")            ;;;在 trim框外面时...
;;;分类...
(xdrx_SetSsToDb ss 0)  
(while(setq e (xdrx_GetEntData 0))
       (setq name (xdrx_GetEntDxf 0))
      (cond((wcmatch  name "LINE,ARC")(setq area 0))
           ((wcmatch  name "*TEXT")
             (setq high(xdrx_GetEntDxf 40)
                   pts (xdrx_textbox e) ;;.ttf -->xdrx_textbox出错 bug??
                   area (progn(apply 'command (cons "PLINE" pts))(command "c"))
                   ;;;text:Trim的框不是textbox,那要扩大多少?
                   pts (xdrx_curve_offset (entlast)(* 0.2 high))
                   high   (entdel(entlast))
                   pts-yes(cons pts pts-yes)
                   e-del(cons(entdel e)e-del)   
             )
           )
           ((eq name "REGION")
             (setq  area nil
                    pts-yes(cons (xdrx_region_vertex e) pts-yes)
             )
           )
           (t
             (command"area""_ob" e)
             (setq area(getvar "area"))
       )  )
       (cond((= area 0)
              (command "offset"(apix) e pt "")
              (setq pts(xdrx_getsamplept (entlast)))
              (entdel (entlast))
              (setq pts-no(cons pts pts-no)) ;没面积
            )
           ((null area))
           (t
              (setq pts(xdrx_getsamplept e)
                    pts-yes(cons pts pts-yes)  ;有面积
                    e-del(cons(entdel e)e-del) ;pl有宽度,会trim到自己.
              )
           )
       )
)
;;; 点 在不在 里面?-->in
   (setq pts pts-yes)
   (while(and (not in)(setq l(car pts)))
      (if (apply 'xdrx_isinside(cons pt l))(setq in t))  ;xdrx_isinside有Bug ??
      (setq pts(cdr pts))
   )
;;;处理"有面积"的  没用 xdrx_curve_offset-->对text等不行
  (foreach l pts-yes
    (apply 'command (cons "PLINE" l))(command "")
    (setq el(entlast)
          e-del(cons el e-del)  ;几个trim框自相交会出问题,会删不干净
          ss(ssadd el ss)
           l(if in (xdrx_curve_offset el (- (apix)))
                   (xdrx_curve_offset el (apix)))
          pts-new(cons l pts-new)
    ))
    (foreach l pts-new(trim: l)  )
;;;处理"没面积"的
  (foreach l pts-no
    (trim: l)
  )
;;;end
(foreach x e-del(entdel x))
  (command "zoom" "p")
  (if tf (command "zoom" "p") )
))
  
  (xdrx_end)(princ)
)[/php]
大家试一下,可能有没考虑的东西
写的有点绕.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-6-9 19:48:46 | 显示全部楼层
不能在cad2004 和2005 , 工具箱3.0下用吗? 怎么能启动命令确不能运算到最后结果呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-11 21:03:30 | 显示全部楼层
请问xd_api 是什么?我是CAD2004能不能用?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-11 21:05:55 | 显示全部楼层
倒,工具很实用啊,但有个问题要说,我比较喜欢使用快捷命令,用晓东开发的程序是否也能使用快捷命令呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-12 12:08:37 | 显示全部楼层
错误: no function definition: MY-PRINC
是不是要装什么工具?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

 楼主| 发表于 2004-6-12 18:28:40 | 显示全部楼层
最初由 yjtdkj 发布
[B]错误: no function definition: MY-PRINC
是不是要装什么工具? [/B]


难怪,改了,调试的时候用的,去掉那一行就行了.

挺好用的,特别是弧线为边trim的时候.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-14 16:35:47 | 显示全部楼层
菜鸟提问:加载后是输入什么命令来运行啊?
trim“ss”--把我弄晕了!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-14 20:58:16 | 显示全部楼层
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-28 18:11:24 | 显示全部楼层
加载后运行ext,晕,刚才都忘了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-6-28 19:24:06 | 显示全部楼层
最初由 xxxyzxx 发布
[B]倒,工具很实用啊,但有个问题要说,我比较喜欢使用快捷命令,用晓东开发的程序是否也能使用快捷命令呢? [/B]


快捷健可以自己做一个。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-2 15:00:05 | 显示全部楼层
剪简单的图形还比较管用。在剪裁地形图时就出问题了。提示非法操作!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-2 16:22:42 | 显示全部楼层
哦?能说说么?或把测试图传上来
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-2 21:41:42 | 显示全部楼层
地形图中多数会有 z 不为 0 的情况。另外

  1. (if (setq tf (xdrx_isptoffscr p1 p2))
  2.                (xdrx_drawing_zoomw p1 p2);;;一定要zoom的,不然会出错的,不光剪不了.
  3.     )

在 cad2005 中就简单了,看看 zoom 中多了一个选项
命令: z ZOOM
指定窗口的角点,输入比例因子 (nX 或 nXP),或者
[全部(A)/中心(C)/动态(D)/范围(E)/上一个(P)/比例(S)/窗口(W)/对象(O)] <实时>:
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-3 12:15:34 | 显示全部楼层
谢谢了,我先看看。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-9 13:59:50 | 显示全部楼层
我喜欢这样的工具,准备试用一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-21 11:28 , Processed in 0.370335 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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