프로그램
캐드 분류

폴리선으로 묶이던 리습이 적용이 안되네요..

컨텐츠 정보

본문

겹치는 선을 자른 후 폴리선으로 만들어 주는 리습인데요, 디바이드까지는 아주 잘되는데

폴리선으로 만들어지지 않아 따로 JOIN을 해야 되는게 아주 불편하더라고요ㅜㅜ 
리습 내용을 건들지 않았는데 뭐가 잘못된걸까요? 되던게 건들지도 않았는데 안되니까 답답해요,,
(defun c:tun nil (_ApplyBooleOperation "_.UNION"))
(defun c:tint nil (_ApplyBooleOperation "_.INTERSECT"))
(defun c:tsu nil (_ApplyBooleOperation "_.SUBTRACT"))
(defun _ApplyBooleOperation ( method / chk ss sss ssss qaf _entsels _makeregion doc lst obj1 obj2 reg1 reg11 reg11ss reg2 reg22 reg22ss k )
    (defun _entsels ( msg filter / sel k entlst )
        (princ msg)
        (setvar 'NOMUTT 1)        
        (setq sel (vl-catch-all-apply 'ssget (list filter)))
        (setvar 'NOMUTT 0)
        (if (and sel (not (vl-catch-all-error-p sel)))
            (repeat (setq k (sslength sel))
                (setq entlst (cons (ssname sel (setq k (1- k))) entlst))
            )
        )
        entlst
    )
    (defun _makeregion ( doc obj / result )
        (if
            (null
                (vl-catch-all-error-p
                    (setq result
                        (vl-catch-all-apply 'vlax-invoke
                            (list (vla-objectidtoobject doc (vla-get-ownerid obj)) 'addregion (list obj))
                        )
                    )
                )
            )
            (car result)
            (prompt (strcat "n" (vl-catch-all-error-message result)))
        )
    )                                     
    (setq lst '((-4 . "") (-4 . "OR>"))
          doc  (vla-get-activedocument (vlax-get-acad-object))
    )
    (setq obj1 (_entsels "nSelect First Set of Objects: " lst))
    (setq obj2 (_entsels (strcat "nSelect Objects to perform " method ": ") lst))
    (foreach obj obj1
        (setq reg1 (_makeregion doc (vlax-ename->vla-object obj)))
        (setq reg11 (cons (vlax-vla-object->ename reg1) reg11))
    )
    (setq reg11ss (ssadd))
    (repeat (setq k (length reg11))
        (ssadd (nth (setq k (1- k)) reg11) reg11ss)
    )
    (vl-cmdf "_.UNION" reg11ss "")
    (setq reg11 (entlast))
    (foreach obj obj2
        (setq reg2 (_makeregion doc (vlax-ename->vla-object obj)))
        (setq reg22 (cons (vlax-vla-object->ename reg2) reg22))
    )
    (setq reg22ss (ssadd))
    (repeat (setq k (length reg22))
        (ssadd (nth (setq k (1- k)) reg22) reg22ss)
    )
    (vl-cmdf "_.UNION" reg22ss "")
    (setq reg22 (entlast))
    (setq ss (ssadd))
    (ssadd reg11 ss)
    (ssadd reg22 ss)
    (setq sss (ssget "_X"))
    (ssdel reg11 sss)
    (ssdel reg22 sss)
    (if (eq method "_.SUBTRACT")
        (vl-catch-all-apply 'vl-cmdf (list method reg11 "" reg22 ""))
        (vl-catch-all-apply 'vl-cmdf (list method ss ""))
    )
    (setq ssss (ssget "_X"))
    (repeat (setq k (sslength sss))
        (ssdel (ssname sss (setq k (1- k))) ssss)
    )
    (repeat (setq k (length obj1))
        (if (or (eq (cdr (assoc 0 (entget (nth (setq k (1- k)) obj1)))) "ELLIPSE") (eq (cdr (assoc 0 (entget (nth k obj1)))) "SPLINE")) (setq chk (cons T chk)) (setq chk (cons nil chk)))
    )
    (repeat (setq k (length obj2))
        (if (or (eq (cdr (assoc 0 (entget (nth (setq k (1- k)) obj2)))) "ELLIPSE") (eq (cdr (assoc 0 (entget (nth k obj2)))) "SPLINE")) (setq chk (cons T chk)) (setq chk (cons nil chk)))
    )
    (if (vl-remove nil chk)
        (progn
        (prompt "nOne or more objects is/are ELLIPSE or SPLINE – creating REGIONS instead")
        (getstring "nEnter to continue")
        )
        (progn
        (setq qaf (getvar 'qaflags))
        (setvar 'qaflags 1)
        (vl-cmdf "_.EXPLODE" ssss "")
        (if (eq (cdr (assoc 0 (entget (ssname (ssget "_P") 0)))) "REGION") (vl-cmdf "_.EXPLODE" (ssget "_P") ""))
        (vl-cmdf "_.PEDIT" "M" (ssget "_P") "" "" "j" "" "")
        (setvar 'qaflags qaf)
        )
    )
    (foreach obj obj1
        (entdel obj)
    )
    (foreach obj obj2
        (entdel obj)
    )
    (princ)
)
(vl-load-com) (princ)

관련자료

댓글 0 / 1 페이지
등록된 댓글이 없습니다.
전체 68 / 2 페이지
RSS
번호
제목
이름

최근글


새댓글


알림 0