도면은...

 

모형공간에 

직선 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")

)

반환:

*Model_Space
*Paper_Space
AAA
bbb
ccc
ccc|ddd
*D4
 
 

 

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")

)

)

반환:

AcDbViewport
AcDbViewport
AcDbCircle
AcDbLine
AcDbBlockReference
AcDbBlockReference
AcDbBlockReference
AcDbRotatedDimension

 

 

 

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")

)

)

)

반환:
AcDbLine
AcDbBlockReference
AcDbBlockReference
AcDbBlockReference
AcDbRotatedDimension
AcDbViewport
AcDbViewport
AcDbCircle
AcDbPolyline
AcDbLine
AcDbLine
AcDbLine
AcDbLine
AcDbSolid
AcDbSolid
AcDbMText
AcDbPoint
AcDbPoint
AcDbPoint
 
 
 
7. 일반블럭과 치수블럭 내의 객체만...

(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

 
 
8.일반블럭 내의 객체만.... (치수블럭 제외)

(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
 4
 5
 6
 7
 8
 9
 10 △ 

 

 

**** 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번만 사용하면 된다.