本帖最后由 Lispboy 于 2018-5-18 21:23 编辑
试试
1、可以设置边框类型,如果不想显示遮盖边界,自己用WIPEOUT命令关闭。2、下载 2018.05.18更新的 API 安装或更新晓东工具箱
 - (defun c:XDTB_BlockMask (/ e el ss na val mat outline x wi)
- (xdrx_begin)
- (if (not #xd_var_global_wipeout_frame)
- (setq #xd_var_global_wipeout_frame 1)
- )
- (xdrx_initget "0 1")
- (if (setq val (getint (xdrx_prompt "\n边框类型[0-矩形/1-轮廓]<"
- #xd_var_global_wipeout_frame
- ">:"
- t
- )
- )
- )
- (setq #xd_var_global_wipeout_frame val)
- )
- (if (and (xdrx_initssget "\n选取要制作遮罩的图块...")
- (setq ss (xdrx_ssget '((0 . "INSERT"))))
- )
- (progn
- (xdrx_setsstodb ss 0)
- (setq el nil)
- (while (setq e (xdrx_getentdata 0))
- (setq na (xdrx_getentdxf 2)
- mat (xdrx_matrix_block2wcs e)
- mat (xdrx_matrix_inverse mat)
- )
- (if (not (member na el))
- (progn
- (setq el (cons na el))
- (if (= #xd_var_global_wipeout_frame 0)
- (progn (setq outline (list (xdrx_entity_box e)))
- (setq outline (list (xdrx_polyline_make outline t)))
- )
- (progn (setq outline (xdrx_geom_searchoutline e)
- outline (xdrx_pickset->ents outline)
- )
- )
- )
- (if outline
- (progn (mapcar '(lambda (x)
- (setq verts (xdrx_getsamplept x))
- (xdrx_wipeout_make verts)
- (setq wi (xdrx_entity_transform (entlast) mat))
- (xdrx_block_appendentity na (entlast))
- (xdrx_entity_delete wi x)
- )
- outline
- )
- )
- )
- )
- )
- )
- (xdrx_draworder->top ss)
- (princ (strcat "\n成功制作了" (itoa (sslength ss)) "个图块遮罩!"))
- )
- )
- (xdrx_end)
- (princ)
- )
|