도면은...
모형공간에
직선 1개
AAA블럭 1개 (내부에 폴리선 1개)
BBB외부참조 1개 (내부에 아크 1개)
CCC외부참조 1개 (내부에 DDD블럭, DDD블럭 안에 문자 1개)
치수 1개
종이공간에
원 1개
가 있을 때...
1. 블럭테이블 보기
(vlax-for Blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(princ (vla-get-objectname Blk))
(princ "\n")
)
반환:
AcDbBlockTableRecord ;모형공간
AcDbBlockTableRecord ;종이공간
AcDbBlockTableRecord ;블럭 AAA
AcDbBlockTableRecord ;블럭 bbb
AcDbBlockTableRecord ;블럭 ccc
AcDbBlockTableRecord ;블럭 ccc|ddd
AcDbBlockTableRecord ;치수블럭
2. 블럭테이블 이름 보기
(vlax-for Blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(princ (vla-get-name Blk))
(princ "\n")
)
반환:
3. 모든 객체 반환
(vlax-for Blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(vlax-for obj Blk
(princ (vla-get-objectname obj))
(princ "\n")
)
)
반환:
AcDbLine ;모형공간 직선
AcDbBlockReference ;모형공간
AcDbBlockReference ;종이공간
AcDbBlockReference ;블럭 AAA
AcDbRotatedDimension ;치수블럭
AcDbViewport ;종이공간 기본 Viewport (보이지도, 삭제되지도 않는...)
AcDbViewport ;종이공간 Viewport
AcDbCircle ;종이공간 원
AcDbPolyline ;블럭 AAA 내의 폴리선
AcDbArc ;외부참조 bbb 내의 호
AcDbBlockReference ;외부참조 ccc 내의 블럭 ddd
AcDbText ;외부참조 ccc 내의 블럭 ddd 안의 문자
AcDbLine ;치수블럭 내의 보조선
AcDbLine ;치수블럭 내의 보조선
AcDbLine ;치수블럭 내의 보조선
AcDbLine ;치수블럭 내의 보조선
AcDbSolid ;치수블럭 내의 도트 솔리드
AcDbSolid ;치수블럭 내의 도트 솔리드
AcDbMText ;치수블럭 내의 치수문자
AcDbPoint ;치수블럭 내의 포인트
AcDbPoint ;치수블럭 내의 포인트
AcDbPoint ;치수블럭 내의 포인트
4. 치수블럭, 외부참조 안에 있는 블럭 내의 객체 포함 모든 객체 반환 (외부참조내 객체만 제외)
(vlax-for Blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(if (eq (vla-get-isXref blk) :vlax-false)
(vlax-for obj Blk
(princ (vla-get-objectname obj))
(princ "\n")
)
)
)
AcDbLine
AcDbBlockReference
AcDbBlockReference
AcDbBlockReference
AcDbRotatedDimension
AcDbViewport
AcDbViewport
AcDbCircle
AcDbPolyline
AcDbText
AcDbLine
AcDbLine
AcDbLine
AcDbLine
AcDbSolid
AcDbSolid
AcDbMText
AcDbPoint
AcDbPoint
AcDbPoint
5.각 공간별 모든 객체
외부참조/일반블럭/치수블럭 내의 객체, 외부참조 안에 있는 블럭 내의 객체를 제외한 모든 객체
(vlax-for lay (vla-get-Layouts (vla-get-activedocument (vlax-get-acad-object)))
(vlax-for obj (vla-get-Block lay)
(princ (vla-get-objectname obj))
(princ "\n")
)
)
반환:
6.일반블럭, 치수블럭내의 객체 포함 모든 객체 반환
(외부참조 내의 객체와 외부참조 안에 있는 블럭내의 객체만 제외)
(vlax-for Blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(if
(and
(eq (vla-get-isXref blk) :vlax-false)
(not (wcmatch (vla-get-name blk) "*|*")) ; 외부참조 안의 일반블럭 제외
)
(vlax-for obj Blk
(princ (vla-get-objectname obj))
(princ "\n")
)
)
)
(vlax-for Blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(if
(and
(eq (vla-get-isXref blk) :vlax-false) ; 외부참조 제외
(eq (vla-get-isLayout blk) :vlax-false) ; 공간별 객체 제외
(not (wcmatch (vla-get-name blk) "*|*")) ; 외부참조 안의 일반블럭 제외
)
(vlax-for obj Blk
(princ (vla-get-objectname obj))
(princ "\n")
)
)
)
반환:
AcDbPolyline
AcDbLine
AcDbLine
AcDbLine
AcDbLine
AcDbSolid
AcDbSolid
AcDbMText
AcDbPoint
AcDbPoint
AcDbPoint
(vlax-for Blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(if
(and
(eq (vla-get-isXref blk) :vlax-false) ; 외부참조 제외
(eq (vla-get-isLayout blk) :vlax-false) ; 공간별 객체 제외
(not (wcmatch (vla-get-name blk) "*|*")) ; 외부참조 안의 일반블럭 제외
(not (wcmatch (vla-get-name blk) "`*D*")) ; 무명블럭 제외 (치수블럭은 기본적으로 무명블럭임)
)
(vlax-for obj Blk
(princ (vla-get-objectname obj))
(princ "\n")
)
)
)
반환:
AcDbPolyline
9.외부참조 내의 객체제외, 외부참조 안에 있는 블럭내의 객체제외, 치수블럭 내의 객체제외,
이외의 모든 객체
(vlax-for Blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(if
(and
(eq (vla-get-isXref blk) :vlax-false) ; 외부참조 제외
(not (wcmatch (vla-get-name blk) "*|*")) ; 외부참조 안의 일반블럭 제외
(not (wcmatch (vla-get-name blk) "`*D*")) ; 무명블럭 제외 (치수블럭은 기본적으로 무명블럭임)
)
(vlax-for obj Blk
(princ (vla-get-objectname obj))
(princ "\n")
)
)
)
반환:
AcDbLine
AcDbBlockReference
AcDbBlockReference
AcDbBlockReference
AcDbRotatedDimension
AcDbViewport
AcDbViewport
AcDbCircle
AcDbPolyline
10.외부참조/일반블럭/치수블럭 내의 객체, 외부참조 안에 있는 블럭 내의 객체를 제외한 모든 객체
(vlax-for Blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))(if
(eq (vla-get-isLayout blk) :vlax-true)
(vlax-for obj Blk(princ (vla-get-objectname obj))(princ "\n"))))
반환:
AcDbLineAcDbBlockReferenceAcDbBlockReferenceAcDbBlockReferenceAcDbRotatedDimensionAcDbViewportAcDbViewportAcDbCircle
이를 종합하면 다음과 같다.
어떤 목적을 가지고 있느냐에 따라서 적절히 가져다 사용하시면 된다.
번호 | 일반객체 | 블럭내 객체 |
외부참조 내객체 | 외부참조 내 블럭 내 객체 |
치수블럭 내 객체 |
모형/종이 공간 객체 구분가능 |
3 | O | O | O | O | O | X |
4 | O | O | X | O | O | X |
5 | O | X | X | X | X | O |
6 | O | O | X | X | O | X |
7 | X | O | X | X | O | X |
8 | X | O | X | X | X | X |
9 | O | O | X | X | X | X |
10 | O | X | X | X | X | △ |
**** 5번과 10번의 차이
모형공간, 종이공간의 객체를 구분하고자 한다면 5번과 10번을 사용할 수 있는데..
두 방식의 차이는 vla-get-name 으로 확실히 알 수 있다.
즉,
(vlax-for lay (vla-get-Layouts (vla-get-activedocument (vlax-get-acad-object)))
(princ (vla-get-name lay))
(princ "\n")
)
반환:
Layout1
Model
(vlax-for Blk (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
(if (eq (vla-get-isLayout blk) :vlax-true)
(progn
(princ (vla-get-name blk))
(princ "\n")
)
)
)
반환:
*Model_Space
*Paper_Space
로 되기 때문이다.
그러므로, 종이공간의 각 배치의 겉보기 이름으로 구분을 쉽게 할 수 있는 것이 5번이다.
**** 사용법
1. 모형공간, 종이공간의 객체를 구분하면서, 일반블럭내의 객체까지 반환하고 싶다면..
5번과 7번의 조합으로...
2. 모형공간, 종이공간 구분없이 일반블럭 내의 객체까지 반환하고 싶다면...
6번만 사용하면 된다.
'Lisp & Tips > Lisp' 카테고리의 다른 글
블럭안의 치수만 지우기 (0) | 2016.02.20 |
---|---|
vl-every, vl-some 함수 (0) | 2016.02.20 |
블럭의 삽입점을 좌표로 받는 네가지 방법 (0) | 2015.07.28 |
선택 세트의 DXF 코드 내용을 변경하는 보조함수 (0) | 2015.03.05 |
오토캐드 배경색 변경 (1) | 2015.02.18 |