도면은...


모형공간에 

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

)

)

)

반환:

AcDbLine

AcDbBlockReference

AcDbBlockReference

AcDbBlockReference

AcDbRotatedDimension

AcDbViewport

AcDbViewport

AcDbCircle




이를 종합하면 다음과 같다.

어떤 목적을 가지고 있느냐에 따라서 적절히 가져다 사용하시면 된다.



번호

일반객체 

블럭내 

객체

 외부참조 내

객체

외부참조 내

블럭 내

객체

치수블럭 내 

객체 

모형/종이

공간

객체 

구분가능

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

 



저작자 표시 비영리 동일 조건 변경 허락
신고

+ Recent posts