Vla-addxrecord
- 構文
- (vla-addxrecord vla-object Keyword)
- 機能
- ディクショナリに XRecord オブジェクトを作成する。
- 引数
-
- vla-object … Dictionary の VLAオブジェクト
- Keyword … ディクショナリ内の XRecord の名前。
- 戻り値
- 新しく作成される XRecord の vlaオブジェクト。
- サンプル
(vl-load-com)
(defun c:Example_AddXRecord()
;; 新しいXRECORDを作成しXRECORDにデータを追加するサンプル。
;; 複数回例を実行してデータが追加されているか参照。
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
;; ユニークな識別子は、他のXRecordDataからこのXRecordDataを区別する。
(setq TYPE_STRING 1
TAG_DICTIONARY_NAME "ObjectTrackerDictionary"
TAG_XRECORD_NAME "ObjectTrackerXRecord")
;; XRECORDを格納するためのディクショナリに接続
(setq dictionaries (vla-get-Dictionaries doc))
(setq TrackingDictionary (vl-catch-all-apply 'vla-Item (list dictionaries TAG_DICTIONARY_NAME)))
;; (= (vl-catch-all-error-message TrackingDictionary) "Automation Error. Key not found")
(if (= (type TrackingDictionary) 'VLA-OBJECT)
(setq TrackingXRecord (vla-GetObject TrackingDictionary TAG_XRECORD_NAME))
(progn
;; Create the objects that hold this XRecordData
(setq TrackingDictionary (vla-Add dictionaries TAG_DICTIONARY_NAME))
(setq TrackingXRecord (vla-AddXRecord TrackingDictionary TAG_XRECORD_NAME))
)
)
;; 現在XRecordDataを取得
(vla-GetXRecordData TrackingXRecord 'temp-XRecordDataType 'temp-XRecordData)
;; 配列が存在しない場合は、まだ、その後1つ作成する。
(setq ArraySize 0)
(if (/= temp-XRecordDataType nil)
(progn
(setq ArraySize (vlax-safearray-get-u-bound temp-XRecordDataType 1))
(setq XRecordDataType (vlax-make-safearray vlax-vbInteger (cons 0 (1+ ArraySize))))
(setq XRecordData (vlax-make-safearray vlax-vbVariant (cons 0 (1+ ArraySize))))
(setq iCount 0)
(while (>= ArraySize iCount)
;; Get information for this element
(setq DataType (vlax-safearray-get-element temp-XRecordDataType iCount))
(setq Data (vlax-variant-value (vlax-safearray-get-element temp-XRecordData iCount)))
(vlax-safearray-put-element XRecordDataType iCount DataType)
(vlax-safearray-put-element XRecordData iCount Data)
(setq iCount (1+ iCount))
)
)
(progn
(setq XRecordDataType (vlax-make-safearray vlax-vbInteger '(0 . 0)))
(setq XRecordData (vlax-make-safearray vlax-vbVariant '(0 . 0)))
)
)
;; 新しいXRECORDデータを追加
;; このサンプルでは、我々はXRECORDに現在の時刻を追加
(vlax-safearray-put-element XRecordDataType ArraySize TYPE_STRING)
(setq cdate (rtos (vlax-variant-value (vla-GetVariable doc "CDATE")) 2 6))
(vlax-safearray-put-element
XRecordData
ArraySize
(strcat (substr cdate 5 2) "/"
(substr cdate 7 2) "/"
(substr cdate 1 4) "-"
(substr cdate 10 2) ":"
(substr cdate 12 2) ":"
(substr cdate 14)))
(vla-SetXRecordData TrackingXRecord XRecordDataType XRecordData)
;; すべてXRecordDataエントリをリードバック
(vla-GetXRecordData TrackingXRecord XRecordDataType XRecordData)
(setq ArraySize (vlax-safearray-get-u-bound XRecordDataType 1))
;; 取得し保存されXRecordDataを表示
(setq iCount 0
msg "")
(while (>= ArraySize iCount)
;; 要素の情報を取得
(setq DataType (vlax-safearray-get-element XRecordDataType iCount))
(setq Data (vlax-variant-value (vlax-safearray-get-element XRecordData iCount)))
(if (= DataType TYPE_STRING)
(setq msg (strcat msg Data "\n"))
)
(setq iCount (1+ iCount))
)
(alert (strcat "The data in the XRecord is: \n\n" msg))
)
関連事項