马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
本帖最后由 c961806787 于 2013-11-4 12:59 编辑
如题,自己也写了一个,但效果不理想。谢谢指正。下面的动图是我无意中发现的,感觉对我很有用,没找到作者。功能:减掉突出的线头 - ;;轴线裁剪
- (defun c:atr( / )
- (vl-cmdf "undo" "be")
- (CG:StoreSysVar)
- ;主程序开始
- (vl-load-com)
- (setvar 'cmdecho 0)
- (setvar 'osmode 0)
- (princ "\n选择需裁剪的轴线:")
- (setq ss (ssget) nn (sslength ss) i 0 sslist '())
- (repeat nn
- (setq en0 (ssname ss i))
- (setq pta (Vlax-Get (Vlax-Ename->Vla-Object en0) 'EndPoint)
- ptb (Vlax-Get (Vlax-Ename->Vla-Object en0) 'StartPoint)
- sslist (append (list (list en0 pta) (list en0 ptb)) sslist);所有直线端点的集合
- go t j 0 mm (- nn 2)
- )
- (ssdel en0 ss)
- (while (and go (<= j mm))
- (setq en1 (ssname ss j))
- (setq ptc (Vlax-Get (Vlax-Ename->Vla-Object en1) 'EndPoint)
- ptd (Vlax-Get (Vlax-Ename->Vla-Object en1) 'StartPoint)
- )
- ;;; (vl-cmdf "_.area" pta ptc ptd "")
- ;;; (setq #area (getvar 'area))
- (if (and (equal (+ (distance pta ptc) (distance pta ptd)) (distance ptc ptd) 10) (/= (inters pta ptb ptc ptd t) nil))
- (progn (vl-remove (list en0 pta) sslist) (setq go nil))
- )
- (setq j (1+ j))
- )
- (setq go t j 0)
- (while (and go (<= j mm))
- (setq en1 (ssname ss j))
- (setq ptc (Vlax-Get (Vlax-Ename->Vla-Object en1) 'EndPoint)
- ptd (Vlax-Get (Vlax-Ename->Vla-Object en1) 'StartPoint)
- )
- ;;; (vl-cmdf "_.area" ptb ptc ptd "")
- ;;; (setq #area (getvar 'area))
- (if (and (equal (+ (distance ptb ptc) (distance ptb ptd)) (distance ptc ptd) 10) (/= (inters pta ptb ptc ptd t) nil))
- (progn (vl-remove (list en0 ptb) sslist) (setq go nil))
- )
- (setq j (1+ j))
- )
- (ssadd en0 ss)
- (setq i (1+ i))
- )
- (setq nn_list (length sslist) k 0)
- (repeat nn_list
- (setq pt_bas (nth k sslist))
- (vl-cmdf "_.trim" ss "e" "n" pt_bas "")
- (setq k (1+ k))
- )
- ;主程序结束
- (vl-cmdf "_.undo" "e")
- (princ "\n***完成!")
- (CG:RestoreSysVar)
- (prin1)
- )
- (prompt "\n***池工出品,精益求精!***")
- (prin1)
- ;存储系统变量
- (defun CG:StoreSysVar()
- (setq vcmde (getvar "CMDECHO")) ;普通命令的提示
- (setq vblip (getvar "blipmode")) ;光标痕迹
- (setq vclay (getvar "CLAYER")) ;图层
- (setq vosmo (getvar "osmode")) ;捕捉模式
- (setq vplwd (getvar "plinewid")) ;pl宽度
- (setq vlupr (getvar "luprec")) ;长度精度
- )
- ;还原系统变量
- (defun CG:RestoreSysVar()
- (setvar "CMDECHO" vcmde)
- (setvar "blipmode" vblip)
- (setvar "CLAYER" vclay)
- (setvar "osmode" vosmo)
- (setvar "plinewid" vplwd)
- (setvar "luprec" vlupr)
- )
- ;错误处理
- (defun *error* (msg)
- (CG:RestoreSysVar)
- (princ msg)
- )
|