Vla-getattributes

提供:GizmoLabs - だいたい CAD LISP なサイト
2016年1月23日 (土) 22:39時点におけるGizmon (トーク | 投稿記録)による版 (ページの作成:「{{AutoLISP}} ; 構文 : (vla-getattributes ''vla-object'' ) ; 機能 : ブロック参照内の属性を取得する。 ; 引数 :* vla-object … VLAオブジェ...」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
構文
(vla-getattributes vla-object )


機能
ブロック参照内の属性を取得する。


引数
  • vla-object … VLAオブジェクト(BlockReference、ExternalReference、MInsertBlock)


戻り値
AttributeReference オブジェクトの配列。


  • MEMO : このメソッドはブロック参照にアタッチした編集可能な属性参照の配列を返す。
  • 外部参照の一定属性を戻すことだけができる。外部参照またはブロック参照の一定属性を検索するには、GetConstantAttributes メソッドを使用する。


サンプル
(vl-load-com)
(defun c:Example_GetAttributes()
    ;; ブロックを作成して属性を追加するサンプル。
    ;; ブロックは、ブロック参照を作成する図面に挿入される。
    (setq acadObj (vlax-get-acad-object))
    (setq doc (vla-get-ActiveDocument acadObj))
    
    ;; ブロックを作成
    (setq insertionPnt (vlax-3d-point 0 0 0))
    (setq blockObj (vla-Add (vla-get-Blocks doc) insertionPnt "TESTBLOCK"))
    
    ;; ブロックの属性定義
    (setq attHeight 1
          attMode acAttributeModeVerify
          attPrompt "Attribute Prompt"
          attTag "Attribute_Tag"
          attValue "Attribute Value"
          insertionPoint (vlax-3d-point 5 5 0))
    
    ;; 属性を作成
    (setq attributeObj (vla-AddAttribute blockObj attHeight attMode attPrompt insertionPoint attTag attValue))
    
    ;; ブロックを挿入
    (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)
    
    ;; ブロックの属性を取得
    (setq varAttributes (vlax-variant-value (vla-GetAttributes blockRefObj)))
    
    ;; 文字列に属性タグと値を移動して、メッセージボックスに表示。
    (setq strAttributes ""
          I 0)
    (while (>= (vlax-safearray-get-u-bound varAttributes 1) I)
        (setq strAttributes (strcat strAttributes "\n  タグ: " (vla-get-TagString (vlax-safearray-get-element varAttributes I))
                                                  "\n  値: " (vla-get-TextString (vlax-safearray-get-element varAttributes I)) "\n"))
        (setq I (1+ I))
    )

    (alert (strcat "ブロック属性 " (vla-get-Name blockRefObj) " は : " strAttributes))
    
    ;; 属性の値を変更
    ;; Note: SetAttributes はありません。バリアント配列を作成したら、オブジェクトがある場合。
    ;; それらを変更すると、図面内のオブジェクトが変更します。
    (vla-put-TextString (vlax-safearray-get-element varAttributes 0) "新しい値!")
    
    ;; 属性取得
    (setq newvarAttributes (vlax-variant-value (vla-GetAttributes blockRefObj)))
    
    ;; 再度、タグと値を表示
    (setq strAttributes ""
          I 0)
    (while (>= (vlax-safearray-get-u-bound varAttributes 1) I)
        (setq strAttributes (strcat strAttributes "\n  タグ: " (vla-get-TagString (vlax-safearray-get-element varAttributes I))
                                                  "\n  値: " (vla-get-TextString (vlax-safearray-get-element varAttributes I)) "\n"))
        (setq I (1+ I))
    )
    (alert (strcat "ブロック属性 " (vla-get-Name blockRefObj) " は: " strAttributes))
)

関連事項