本帖最后由 q3_2006 于 2014-4-21 14:59 编辑
 - (vl-load-com)
- (vl-load-com)
- (setq *doc (vla-get-ActiveDocument (vlax-get-Acad-Object)))
- (setq *ms (vla-get-ModelSpace *doc))
- (defun ss2vlst (ss / i l)
- (if ss
- (repeat (setq i (sslength ss))
- (setq l (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) l))
- )
- )
- )
- (defun lst2objarray (objList / arraySpace sArray)
- (setq arraySpace (vlax-make-safearray vlax-vbObject (cons 0 (1- (length objList)))))
- (setq sArray (vlax-safearray-fill arraySpace objList))
- )
- (defun vlst2ss (lst / i ss)
- (setq ss (ssadd))
- (repeat (setq i (length lst))
- (ssadd (vlax-vla-object->ename (nth (setq i (1- i)) lst)) ss)
- )
- )
- (defun t0 (ss / e i regions s0 s1 se ssn vlalst)
- (setq s0 (ssget "x"))
- (if ss
- (progn
- (vla-startundomark *doc)
- (setq vlalst (ss2vlst ss)
- regions (vlax-safearray->list (vlax-variant-value
- (vla-addregion *ms
- (lst2objarray vlalst)
- )
- )
- )
- )
- (vl-cmdf "erase" ss "")
- (vl-cmdf "_union" (vlst2ss regions) "")
- (vl-cmdf "explode" (entlast))
- (setq ssn (ssget "p"))
- (repeat (setq i (sslength ssn))
- (setq e (ssname ssn (setq i (1- i))))
- (vl-cmdf "explode" e "")
- (vl-cmdf "pedit" "m" (ssget "p") "" "y" "j" "" "")
- )
- (setq s1 (ssget "x"))
- (vl-cmdf "select" s1 "r" s0 "")
- (setq se (ssget "p"))
- (repeat (setq i (sslength se))
- (setq e (ssname se (setq i (1- i))))
- (vl-cmdf "bhatch" "p" "s" "s" e "" "")
- )
- )
- )
- )
- (defun mkpline (pts cl)
- (entmakex (append (list '(0 . "LWPOLYLINE")
- '(100 . "AcDbEntity")
- '(100 . "AcDbPolyline")
- (cons 90 (length pts))
- (if cl
- (cons 70 1)
- (cons 70 0)
- )
- )
- (mapcar '(lambda (a) (cons 10 a)) pts)
- )
- )
- )
- (defun delsame (l) (if l (cons (car l) (delsame (vl-remove (car l) l)))))
- (defun gvp (e) (delsame (vl-remove nil (mapcar '(lambda (x) (if (wcmatch (itoa (car x)) "1?") (cdr x))) (entget e)))))
- (defun lst2ss (lst / i ss)
- (setq ss (ssadd))
- (repeat (setq i (length lst))
- (ssadd (nth (setq i (1- i)) lst) ss)
- )
- )
- (defun c:tt ( / e e1 i l pts ss)
- (setq ss (ssget '((0 . "SOLID"))))
- (repeat (setq i (sslength ss))
- (setq e (ssname ss (setq i (1- i)))
- pts (gvp e)
- pts (if (= (length pts) 3) pts (list (car pts) (cadr pts) (cadddr pts) (caddr pts)))
- e1 (mkpline pts t)
- l (cons e1 l)
- )
- (entdel e)
- )
- (t0 (lst2ss l))
- )
|