明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4235|回复: 12

怎么样可以将一个闭和区域内的所有图元裁剪出

  [复制链接]
发表于 2006-3-30 09:11 | 显示全部楼层 |阅读模式

求助各位,怎么样可以将一个闭和区域内的所有图元裁剪出来,什么方法都可以,

谢谢。最好能给小弟完整的事例谢谢

发表于 2006-3-30 09:23 | 显示全部楼层
用express tools里的extrim命令.
 楼主| 发表于 2006-3-30 09:25 | 显示全部楼层

这个我也想过,不过我想把他嵌套到自己的程序内。

万一用户没有 express tools不就没办法了吗?

 楼主| 发表于 2006-4-13 15:41 | 显示全部楼层

教教我啊?都空饶了好久没解决.

就是怎么可以把任意闭和区域内的留下,外面的裁剪掉.谢谢

用VBA LISP都可以啊.谢谢啊

发表于 2006-4-13 16:08 | 显示全部楼层

这又是一个老问题了。我曾经研究过,你可以搜索一下论坛。

但是可以告诉你,这是一个难题。(想想碰到block,xref,dim,group....怎么处理)

 楼主| 发表于 2006-4-14 09:41 | 显示全部楼层

碰到block,xref,dim,group....

可以炸开再处理啊。

基本的处理方法有吗?

发表于 2006-4-14 09:50 | 显示全部楼层

我说了你可以到论坛去搜索一下,有好多这样的例子。不过都不尽人意。

xref如何炸开?绑定以后就失去了关联。图块和尺寸炸开也会碰到很多问题,如果比例不对,就会碰到大问题。

 楼主| 发表于 2006-4-14 10:08 | 显示全部楼层

(defun c:FD (/    set1 set2 set3 set4 cpoint   r    p    k  n
        ep   ss   dh   smw1 me   me1  xb
        yb   pp  pn   kk   me2 me3  smw2 me4  me5  x1  y1
       )
  (prompt "\n请指定放大区域:\n")
  (setq set1 (getvar "osmode"))
  (setq set2 (getvar "orthomode"))
  (SETQ SET3 (GETVAR "BLIPMODE"))
  (SETQ SET4 (GETVAR "CMDECHO"))
  (SETVAR "BLIPMODE" 0)
  (setvar "osmode" 0)
  (setvar "orthomode" 0)
  (SETVAR "CMDECHO" 0)
  (command "circle" pause pause)
  (setq cpoint (cdr (assoc 10 (entget (entlast)))))
  (setq r (cdr (assoc 40 (entget (entlast)))))
  (setq p (getpoint "\n 请指定放大图放置位置:"))
  (setq k (getreal "\n 请指定放大倍数:"))
  (command "copy" "cp")
  (setq n 0)
  (repeat 180
    (command (polar cpoint (/ (* 2 n pi) 180) r))
    (setq n (1+ n))
  )
  (command "" "" cpoint p)
  (setq n 0)
  (setvar "PICKBOX" 5)
  (command "ZOOM" "C" P (* 3 r))
  (command "circle" p r)
  (setq ep (entlast))
  (command "TRIM" EP "")(repeat 180(command (polar p (/ (* 2 n pi) 180) (* r 1.1)))(command "f" (polar p (/ (* 2 n pi) 180) (* r 1.1)))(setq n (+ n 1))(command (polar p (/ (* 2 n pi) 180) (* r 1.01)) ""))(command "")
  (command "zoom" "p")
  (setq ss (ssget "c"
    (list (- (car p) r) (- (cadr p) r))
    (list (+ (car p) r) (+ (cadr p) r))
    )
  )
  (command "scale" ss "" p k)
  (command "erase" ep "")
  (setq smw1 (list 0 0 0))
  (setq smw2 (polar smw1 0 24))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(command "text" smw1 "4" "0" (strcat dh "部放大" ))
  (setq me (entlast))
  (setq me1 (entget me))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(command "line" smw1 smw2 "")(setq me2 (entlast))(setq me3 (entget me2));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(command "text" smw1 "4" "0" (strcat  (rtos k) ":1" ))(setq me4 (entlast))(setq me5 (entget me4));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(setq pn T)(princ"\n 请确定说明文字位置:")(while pn(setq pp (grread t))(setq kk (car pp))(setq pp (cadr pp))(setq xb (nth 0 pp))(setq yb (nth 1 pp))(setq x1 (- xb 36))(setq y1 (+ yb 12));;;;;;;;;;;;;;;;;;;;;;;;;;;(setq me1 (subst (list 10 x1 y1)(assoc 10 me1) me1))(entmod me1);;;;;;;;;;;;;;;;;;;;;;;;;;;;;(setq me3 (subst (list 10 (- x1 4) (- y1 2))(assoc 10 me3) me3))(setq me3 (subst (list 11 (+ x1 20) (- y1 2))(assoc 11 me3) me3))(entmod me3);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(setq me5 (subst (list 10 (+ x1 4) (- y1 8))(assoc 10 me5) me5))(entmod me5);;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(if (= kk 3)(setq pn nil));;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;)(command "redraw")(setvar "osmode" set1)(setvar "orthomode" set2)(setvar "blipmode" set3)(setvar "cmdecho" set4)(PRINC))

 )

楼住:这是一段别人给我的。它可以将一个圆内的所有裁减出来。我不懂LISP。所以想麻烦你帮我把圆该为选择任意闭合多边形好吗?

谢谢

 

发表于 2006-4-14 12:26 | 显示全部楼层

上面程序仅是将包含于圆内及与圆相交的图元拷贝到其它位置并进行放大,并非进行“裁剪“,若如此,用“CP”选项构造选择集岂不就解决了。

发表于 2006-4-14 20:27 | 显示全部楼层
本帖最后由 作者 于 2006-4-16 11:43:04 编辑

有如下两点即可以做到:

1 (ssget "F" (list pt1 pt2 pt3.......))由pt1 pt2 pt3...构造的多边形交叉选而得到的选择集。

2 (command "_trim" ss "_F" pt1 pt2 pt3....)栏选剪切,有些图元不能剪切,如文字等

另外,完全可以将超级剪切extrim代码复制出来即可以成为你自己的程序。

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

本版积分规则

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

GMT+8, 2024-5-19 10:15 , Processed in 0.200063 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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