- 积分
- 536
- 明经币
- 个
- 注册时间
- 2005-1-28
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
发表于 2005-3-26 17:39:00
|
显示全部楼层
;;;;;;;;;;;经实验可切除圆内部或图形 (defun c:trc(/ oldcmdcho oldosmode enobj kk endata);;;hy_trim_in (setq oldcmdcho (getvar "cmdecho" )) (setvar "cmdecho" 0) (setq oldosmode (getvar "osmode")) (setvar "osmode" 0) (command "ucs" "w") (COMMAND "REGEN") (setq enobj (car (entsel "\n选圆:"))) (initget "1 2") (setq kk (getkword "\n剪除内部物体<1>,剪除外部物体<2>:<1?>")) (if (= kk nil) (setq kk "1")) (setq endata (entget enobj)) (cond ;;;;;如果enobj为一个圆;;;;;;; ((= (cdr (assoc 0 endata)) "CIRCLE") (hy_trim_in_circle)) (t (progn (alert "\n你选的物体不是圆!重新确认")(exit)))) ;end cond (setvar "cmdecho" oldcmdcho) (setvar "osmode" oldosmode) (prin1) ) ;;;;;;;;;;剪除圆内或外部的物体;;;;;;;;;; (defun hy_trim_in_circle(/ centerpoint radius point_list be_angle jk viu_point item) (setq centerpoint (cdr(assoc 10 endata))) (setq radius (cdr(assoc 40 endata))) (if (= kk "1") (setq jk (- radius 0.01)) (setq jk (+ radius 0.01))) (setq point_list '());;;以0.5度为一阶,半径缩小0.05圆上所有点 ;(setq be_angle 0);起始角度为0 (setq i 0);;计数器归0 (repeat 720 (setq viu_point (polar centerpoint (/ (* 0.5 i pi) 180) jk);end polar ) (setq point_list (cons viu_point point_list)) (setq i (1+ i)) );end repeat (command "undo" "be") (if (= kk "1") (progn (command "trim" enobj "" "f") (foreach item point_list (command item)) (command "" "")) ) (if (/= kk "1") (progn (setq i 0) (repeat (length point_list) (command "trim" enobj "" "f" (nth i point_list) (nth (1+ i) point_list) "" "") (setq i (1+ i)) ) ) ) (command "undo" "e") )
试一下我的吧!刚编的调试了,应该没问题,
可以剪切内部或外部都可以...自己用看吧
欢迎大家交流....
刚有写了一个可以剪切封闭多边形内部或外部的
程序,需要的话下次可以上传.... |
|