;;修改XCLIP边界
(defun c:tt ()
(while
(and
(setq e (car(entsel "\n选择剪裁块:")))
(setq Poly (car(entsel "\n选择剪裁边界:")))
)
(gxl-EditXclipBoundary e poly)
)
(princ)
)
;;(gxl-EditXclipBoundary ENAME BOUNDARY) 重构XCLip的剪裁边界,参数 ENAME=剪裁块图元 BOUNDARY=点表或多段线图元
;;(gxl-EditXclipBoundary (car(entsel "\n选择剪裁块:")) (car(entsel "\n选择剪裁边界:")))
(defun gxl-EditXclipBoundary (ENAME BOUNDARY / ISXCLIP
PTLIST PLIST EL M0
DXF40 M1 M N
)
(defun IsXClip (ename / xdict)
(if
(setq xdict (cdr (assoc 360 (entget ename))))
(IsXClip xdict)
(if
(eq "SPATIAL_FILTER"
(cdr (assoc 0 (setq ename (entget ename))))
)
ename
)
)
)
(if (= 'ename (type Boundary))
(setq PList (gxl-get_poly_ptList3 Boundary 0.05))
(if (= 'list (type Boundary))
(setq pList Boundary)
)
)
(if (and (setq el (IsXCLIP ename))
PList
)
(progn
;;计算图块的逆转换矩阵 Ref-> Del
(setq m0 (apply 'MAT:DISPTOMATRIX (MAT:RevRefGeom ename)))
;;计算剪切边界顶点转换到图块定义的矩阵
(setq dxf40 (vl-remove-if-not '(lambda (x) (= (car x) 40)) el) ) ;_ 矩阵数据表 (if (= 1 (cdr (assoc 72 el))) (setq dxf40 (cdr dxf40)))
(setq m1
(list
(mapcar 'cdr
(list (nth 0 dxf40)
(nth 1 dxf40)
(nth 2 dxf40)
(nth 3 dxf40)
)