GetAttributes メソッド(ActiveX)

ブロック参照内の属性を取得します。

サポートされているプラットフォーム: Windows のみ

構文と要素

VBA:

RetVal = object.GetAttributes
object

タイプ: BlockReferenceExternalReferenceMInsertBlock

このメソッドが適用されるオブジェクト。

戻り値(RetVal)

Type: バリアント型(AttributeReference オブジェクトの配列)

AttributeReference オブジェクトの配列。

注意

このメソッドはブロック参照にアタッチした編集可能な属性参照の配列を戻します。

外部参照の一定属性を戻すことだけができます。外部参照またはブロック参照の一定属性を検索するには、GetConstantAttributes メソッドを使用します。

VBA:

Sub Example_GetAttributes()
    ' This example creates a block. It then adds attributes to that
    ' block. The block is then inserted into the drawing to create
    ' a block reference.
    
    ' Create the block
    Dim blockObj As AcadBlock
    Dim insertionPnt(0 To 2) As Double
    insertionPnt(0) = 0#: insertionPnt(1) = 0#: insertionPnt(2) = 0#
    Set blockObj = ThisDrawing.Blocks.Add(insertionPnt, "TESTBLOCK")
    
    ' Define the attribute definition
    Dim attributeObj As AcadAttribute
    Dim height As Double
    Dim mode As Long
    Dim prompt As String
    Dim insertionPoint(0 To 2) As Double
    Dim tag As String
    Dim value As String
    height = 1#
    mode = acAttributeModeVerify
    prompt = "Attribute Prompt"
    insertionPoint(0) = 5#: insertionPoint(1) = 5#: insertionPoint(2) = 0
    tag = "Attribute_Tag"
    value = "Attribute Value"
    
    ' Create the attribute definition object in model space
    Set attributeObj = blockObj.AddAttribute(height, mode, prompt, insertionPoint, tag, value)
    
    ' Insert the block
    Dim blockRefObj As AcadBlockReference
    insertionPnt(0) = 2#: insertionPnt(1) = 2#: insertionPnt(2) = 0
    Set blockRefObj = ThisDrawing.ModelSpace.InsertBlock(insertionPnt, "TESTBLOCK", 1#, 1#, 1#, 0)
    ZoomAll
    
    ' Get the attributes for the block reference
    Dim varAttributes As Variant
    varAttributes = blockRefObj.GetAttributes
    
    ' Move the attribute tags and values into a string to be displayed in a Msgbox
    Dim strAttributes As String
    Dim I As Integer
    For I = LBound(varAttributes) To UBound(varAttributes)
        strAttributes = strAttributes & vbLf & "  Tag: " & varAttributes(I).TagString & _
                        vbLf & "  Value: " & varAttributes(I).TextString & vbLf & "    "
    Next
    MsgBox "The attributes for blockReference " & blockRefObj.Name & " are: " & strAttributes, , "GetAttributes Example"
    
    ' Change the value of the attribute
    ' Note: There is no SetAttributes. Once you have the variant array, you have the objects.
    ' Changing them changes the objects in the drawing.
    varAttributes(0).TextString = "NEW VALUE!"
    
    ' Get the attributes
    Dim newvarAttributes As Variant
    newvarAttributes = blockRefObj.GetAttributes
    
    ' Again, display the tags and values
    strAttributes = ""
    For I = LBound(varAttributes) To UBound(varAttributes)
        strAttributes = strAttributes & vbLf & "  Tag: " & varAttributes(I).TagString & _
                        vbLf & "  Value: " & varAttributes(I).TextString & vbLf & "    "
    Next
    MsgBox "The attributes for blockReference " & blockRefObj.Name & " are: " & strAttributes, , "GetAttributes Example"
    
End Sub

Visual LISP:

(vl-load-com)
(defun c:Example_GetAttributes()
    ;; This example creates a block. It then adds attributes to that
    ;; block. The block is then inserted into the drawing to create
    ;; a block reference.
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))
    
    ;; Create the block
    (setq insertionPnt (vlax-3d-point 0 0 0))
    (setq blockObj (vla-Add (vla-get-Blocks doc) insertionPnt "TESTBLOCK"))
    
    ;; Define the attribute definition
    (setq attHeight 1
          attMode acAttributeModeVerify
          attPrompt "Attribute Prompt"
          attTag "Attribute_Tag"
          attValue "Attribute Value"
          insertionPoint (vlax-3d-point 5 5 0))
    
    ;; Create the attribute definition object in model space
    (setq attributeObj (vla-AddAttribute blockObj attHeight attMode attPrompt insertionPoint attTag attValue))
    
    ;; Insert the block
    (setq insertionPnt (vlax-3d-point 2 2 0))
    (setq modelSpace (vla-get-ModelSpace doc))
    (setq blockRefObj (vla-InsertBlock modelSpace insertionPnt "TESTBLOCK" 1 1 1 0))
    (vla-ZoomAll acadObj)
    
    ;; Get the attributes for the block reference
    (setq varAttributes (vlax-variant-value (vla-GetAttributes blockRefObj)))
    
    ;; Move the attribute tags and values into a string to be displayed in a Msgbox
    (setq strAttributes ""
          I 0)
    (while (>= (vlax-safearray-get-u-bound varAttributes 1) I)
        (setq strAttributes (strcat strAttributes "\n  Tag: " (vla-get-TagString (vlax-safearray-get-element varAttributes I))
                                                  "\n  Value: " (vla-get-TextString (vlax-safearray-get-element varAttributes I)) "\n"))
        (setq I (1+ I))
    )

    (alert (strcat "The attributes for blockReference " (vla-get-Name blockRefObj) " are: " strAttributes))
    
    ;; Change the value of the attribute
    ;; Note: There is no SetAttributes. Once you have the variant array, you have the objects.
    ;; Changing them changes the objects in the drawing.
    (vla-put-TextString (vlax-safearray-get-element varAttributes 0) "NEW VALUE!")
    
    ;; Get the attributes
    (setq newvarAttributes (vlax-variant-value (vla-GetAttributes blockRefObj)))
    
    ;; Again, display the tags and values
    (setq strAttributes ""
          I 0)
    (while (>= (vlax-safearray-get-u-bound varAttributes 1) I)
        (setq strAttributes (strcat strAttributes "\n  Tag: " (vla-get-TagString (vlax-safearray-get-element varAttributes I))
                                                  "\n  Value: " (vla-get-TextString (vlax-safearray-get-element varAttributes I)) "\n"))
        (setq I (1+ I))
    )
    (alert (strcat "The attributes for blockReference " (vla-get-Name blockRefObj) " are: " strAttributes))
)