VLA-item (집합객체에서 특정객체를 가져올때)

Auto CAD/lisp|2019. 4. 4. 13:57

Signature

 

 RetVal = object.Item(Index)

 

object : 모든 컬렉션 객체 

 

item(Index) : 조회할 구성원 항목의 컬렉션내의 색인 위치

                   정수 or 문자열

Retval : object 

 

Item 은 집합객체에서 어떤한 객체를 뽑아낼때 사용합니다.

 

Lisp 의 ssname 정도로 보시면 이해하기가 편하실거 같습니다.

(물론 item 과 ssname 은 틀리지만.^^ 이해상 요렇게 하면 이해가 쉬울거 같습니다.)

 

(setq AcDoc (vla-get-activedocument (vlax-get-acad-object)))

(setq LayersObj (vla-get-layers AcDoc))

 

위와 같이 활성화도면안에서 레이어 객체를 가져옵니다. 

그럼 레이어객체의 구성을 한번 볼까요? ^^

 

 

명령: (vlax-dump-object LayerSobj t)

; IAcadLayers: 도면에서 전체 도면층의 집합

; 특성 값:

;   Application (RO) = #<VLA-OBJECT IAcadApplication 00d74d3c>

;   Count (RO) = 109

;   Document (RO) = #<VLA-OBJECT IAcadDocument 01e33c78>

;   Handle (RO) = "13"

;   HasExtensionDictionary (RO) = -1

;   ObjectID (RO) = 2128088216

;   ObjectName (RO) = "AcDbLayerTable"

;   OwnerID (RO) = 0

; 지원되는 메써드:

;   Add (1)

;   Delete ()

;   GenerateUsageData ()

;   GetExtensionDictionary ()

;   GetXData (3)

;   Item (1)

;   SetXData (2)

T

 

해당 레이어객체(집합체)는 Count = 109 ..즉 109개의 레이어의 집합체네여

지원되는 메써드에 item 이 있습니다. 즉 집합체기 때문에 그안에있는 특정 객체를 다시 뽑아올수 있져

 

명령: (vla-item layersObj 0)

#<VLA-OBJECT IAcadLayer 16e34d84>

 

명령: (vla-item layersObj 1)

#<VLA-OBJECT IAcadLayer 16e35cd4>  

 

이런식으로 위치를 정해주면 해당 집합체에서 0 첫번째객체 1 두번째 객체..................

로 해당 객체를 가져오게 됩니다.

 

그럼 해당 객체구성을 보겠습니다.

 

 

명령: (setq LAY0 (vla-item layersObj 0))

#<VLA-OBJECT IAcadLayer 16e34d84>

 

명령: (vlax-dump-object LAY0)

; IAcadLayer: 도면위의 투영 중첩과 유사한 데이터의 논리적 조합

; 특성 값:

;   Application (RO) = #<VLA-OBJECT IAcadApplication 00d74d3c>

;   Description = ""

;   Document (RO) = #<VLA-OBJECT IAcadDocument 01e33c78>

;   Freeze = 0

;   Handle (RO) = "6"

;   HasExtensionDictionary (RO) = -1

;   LayerOn = -1

;   Linetype = "Continuous"

;   Lineweight = -3

;   Lock = 0

;   Material = "Global"

;   Name = "0"

;   ObjectID (RO) = 2128088112

;   ObjectName (RO) = "AcDbLayerTableRecord"

;   OwnerID (RO) = 2128088216

;   PlotStyleName = "색상_7"

;   Plottable = -1

;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 16dee9c0>

;   Used (RO) = -1

;   ViewportDefault = 0

T

 

레이어 이름이 0 인 레이어객체에 대한정보군여.^^ 

그럼 만약 이름을 미리 알고있다면?????

이름으로도 가져올수 있습니다.

 

(vla-item layersObj "0")

 

명령: (vlax-dump-object (vla-item layersObj "0"))

 

; IAcadLayer: 도면위의 투영 중첩과 유사한 데이터의 논리적 조합

; 특성 값:

;   Application (RO) = #<VLA-OBJECT IAcadApplication 00d74d3c>

;   Description = ""

;   Document (RO) = #<VLA-OBJECT IAcadDocument 01e33c78>

;   Freeze = 0

;   Handle (RO) = "6"

;   HasExtensionDictionary (RO) = -1

;   LayerOn = -1

;   Linetype = "Continuous"

;   Lineweight = -3

;   Lock = 0

;   Material = "Global"

;   Name = "0"

;   ObjectID (RO) = 2128088112

;   ObjectName (RO) = "AcDbLayerTableRecord"

;   OwnerID (RO) = 2128088216

;   PlotStyleName = "색상_7"

;   Plottable = -1

;   TrueColor = #<VLA-OBJECT IAcadAcCmColor 16def830>

;   Used (RO) = -1

;   ViewportDefault = 0

T

 

 

 

 

 

 

출처 : 아키모아 행복한 하루  http://cafe.daum.net/archimore/IP9e/35

 

 

 

댓글()