不知道是否合你意,只是LISP的程序 Function.fas 文件为一些通用函数,部分来源于网络,把此文件放于CAD搜索路径加载test.lsp,运行命令test
 -
- (defun c:test (/ MINZB OBJ OBJ_ALL
- OBJ_CP OBJ_DATA OBJ_DEL OBJ_MIN_MAX
- OBJ_NAME OBJ_OFFSET_NAME OBJ_PLIST
- OFFSET_DIST PYPOINT
- )
- (if (findfile "Function.fas")
- (progn
- (load "Function.fas") ;_加载常用函数
- (while (not (setq obj (entsel "\n选择闭合多线段:"))))
- (setq obj_name (car obj))
- (setq obj_data (entget obj_name))
- (if (= (cdr (assoc 0 obj_data)) "LWPOLYLINE") ;_如果类型是 LWPOLYLINE
- (progn
- (setq offset_dist 0.25) ;_偏移的距离,根据自己要求定义
- (setq obj_plist (PL_plist obj_name)) ;_取得多段线的坐标表
- (setq obj_min_max (GE_Extents obj_plist)) ;_求多边形的包围框最左下角点与最右上角点
- (setq minzb (car obj_min_max)) ;_左下角点
- (setq pypoint (polar minzb pi 0.1)) ;_求得向外的偏移点
- (command "_offset" offset_dist obj_name pypoint "") ;_偏移对象
- (setq obj_offset_name (entlast)) ;_取得偏移对象的图元名
- (if (equal obj_name obj_offset_name) ;_如果没有产生偏移
- (progn
- (princ
- "\n选择的对象不能偏移,是否在锁定的图层或者图元就是不能偏移"
- )
- )
- (progn
- (command "..zoom" (car obj_min_max) (last obj_min_max)) ;_缩放
- (setq obj_plist (PL_plist obj_offset_name)) ;_取得多段线的坐标表
- (setq obj_cp (ssget "cp" obj_plist)) ;_使用CP的窗口选择
- (setq obj_all (ssget "x"
- (list
- (cons -4 "<not")
- (cons -4 "<and")
- (cons 0 "text")
- (cons 8 "TK")
- (cons -4 "and>")
- (cons -4 "not>")
- )
- )
- ) ;_所有选择集,排除TK层上的文字
- (setq obj_del (yad-ssdiff obj_all obj_cp)) ;_删除的选择集 所有选择集与CP选择到的差集
- (if (and obj_del (not (yad-comp-ss obj_del obj_cp))) ;_如果obj_del不为空 and obj_del不等于obj_cp
- (command ".erase" obj_del "") ;_删除与选择对象不相交和在选择对象外的所有图元
- )
- (command ".erase" obj_offset_name "") ;_删除偏移的对象
- )
- )
- )
- (progn
- (princ "\n选择的线非 LWPOLYLINE")
- )
- )
- )
- (progn
- (princ "\n不能加载常用函数文件 Function.fas")
- )
- )
- (princ)
- )
|