CATEGORY

분류 전체보기 (21)
스페인어 (3)
이런저런 이야기 (2)
기계 (2)
전기관련 (1)
Auto Cad (13)
Excel 이거 저것 (0)

RECENT ARTICLE

RECENT COMMENT

ARCHIVE



출처 : http://www.theswamp.org


◆ 명령어 : 

  1. TUN : 병합 (합집합)

  2. TINT : 겹치는 부분만 (합집합)

  3. TSU : 겹치는 것을 빼고 (차집합)

 

◆ 소개 : 
이 리습은 세가지 기능이 있습니다.

  1. 트림하면서 병합(Union)

  2. 겹치는 부분만 남겨놓고 트림(Intersect)

  3. 겹치는 부분을 빼내고 트림(Subtract)

트림후에 객체를 하나의 폴리선으로 합쳐주기때문에 몇번의 과정을 줄여준다는 장점이 있습니다.


◆ 사용법 : 
1. 명령어 실행 

2. Select First Set of Objects : 트림 기준이 되는 객체를 선택합니다.

3. Select Objects to perform : 트림할 객체를 선택합니다.

  - 병합 (tun)

    4e2b317c0bb8df15d8c207575aea4185_1463217

 

  - 겹치는 부분만 (tint)
    4e2b317c0bb8df15d8c207575aea4185_1463217

 

  - 겹치는 부분을 뺌 (tsu)
    4e2b317c0bb8df15d8c207575aea4185_1463217

 

  - 여러 객체 선택시

    단일 객체뿐만 아니라 여러개의 객체를 한번에 선택할 수도 있습니다.

    아래 그림은 여러개의 객체를 병합하는 예제입니다.

    4e2b317c0bb8df15d8c207575aea4185_1463217
 

 실행절차 
   ① Select First Set of Objects : 트림 기준이 되는 객체를 선택합니다. 
   ② Select Objects to perform : 트림할 객체를 선택합니다. 
 
◆ 다운로드 

tun.lsp


 
◆ 명령어를 변경하려면 
    리습 파일을 열고 맨 위 (defun c:tun 문자에서 빨간 글자만 원하는 명령으로 변경 후  
    다시 로드하면 됩니다. 


(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 . "<OR") (0 . "ELLIPSE,CIRCLE") (-4 . "<AND") (0 . "SPLINE,LWPOLYLINE") (-4 . "&=") (70 . 1) (-4 . "AND>") (-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)


'Auto Cad > AutoLISP' 카테고리의 다른 글

레이어를 알아서 지정해 그리는 리습  (0) 2016.07.16
And