LDATA,顧名思義是AutoDesk窩藏私心,專門給lisp留用的數(shù)據(jù)。當(dāng)vlax-ldata-put第一個參數(shù)為指定全局詞典的字符串時,VBA可以通過命名詞典“看到”數(shù)據(jù),當(dāng)?shù)谝粋€參數(shù)為圖元對象時,VBA只能判斷出實(shí)體具有擴(kuò)展詞典,但“看不到”數(shù)據(jù),所以目前還只能用vlax-ldata-**族函數(shù)處理LDATA,VBA存取不行。你是想要在Vlisp和VBA之間傳遞數(shù)據(jù)吧?可以找點(diǎn)別的辦法,在DWG內(nèi)部,Vlisp、VBA、ARX之間可以傳遞多達(dá)2GB數(shù)據(jù)。
LDATA保存在DWG中是無疑的,只是地點(diǎn)沒有“暴露”給VBA,所以VBA無法存取,這和其他一些第三方程序自定對象數(shù)據(jù)不能存取是一個道理,類似的東西還有一些,這個LDATA對于使用VL和VBA混合編程并需要在兩者之間傳遞數(shù)據(jù)的人有些誤導(dǎo)作用。
應(yīng)該讓Vlisp和VBA各做其擅長的事情而無需論其長短,二者需要傳遞數(shù)據(jù)時用Dictionary和Xrecord更為舒暢自然。Xrecord是一個任意數(shù)據(jù)的容器,它提供了比xdata更靈活的附加數(shù)據(jù)的辦法,Xrecord能包含2GB的任意數(shù)據(jù),特別適合不同開發(fā)語言之間傳遞數(shù)據(jù),有用的保留在DWG,臨時的完事就刪除。有時VBA和Excel交互大量數(shù)據(jù),完成計(jì)算,生成圖形時Vlisp又方便一些,VBa把數(shù)據(jù)傳遞過去,用Vlisp干干凈凈地寫,反之亦然。
** 1-VBA傳出
'
'設(shè)置指定詞典擴(kuò)展記錄
'
Public Function Dhvb_SetXrecord(objDict As AcadDictionary, _
XRecordName As String, _
XRecordData As Variant) _
As AcadXRecord
Dim objXRecord As AcadXRecord
Dim XRecordType As Variant
Dim i As Long
'檢察對象詞典是否有該名擴(kuò)展記錄,如果已經(jīng)存在則刪除
On Error Resume Next
Set objXRecord = objDict.GetObject(XRecordName)
If Not objXRecord Is Nothing Then
objDict.Remove XRecordName
End If
On Error GoTo 0
'建立擴(kuò)展記錄數(shù)據(jù)
ReDim XRecordType(0 To UBound(XRecordData)) As Integer
For i = 0 To UBound(XRecordData)
Select Case VarType(XRecordData(i))
Case vbInteger, vbLong
XRecordType(i) = 90'整數(shù)組碼=90
Case vbSingle, vbDouble
XRecordType(i) = 40'實(shí)數(shù)組碼=40
Case vbString
XRecordType(i) = 2'字符組碼=2
End Select
Next
'添加擴(kuò)展記錄到對象詞典
Set objXRecord = objDict.AddXRecord(XRecordName)
objXRecord.SetXRecordData XRecordType, XRecordData
'返回?cái)U(kuò)展記錄對象
Set Dhvb_SetXrecord = objXRecord
End Function
** 2-Vlisp讀取
;;;
;;;讀取指定詞典擴(kuò)展記錄,返回?cái)?shù)據(jù)表 ;
;;;
(defun Dhvl_GetXrecord (objDictXRedName / objXRed
XRedType XRedData TypeList DataList
x
)
(setq objXRed (vla-GetObject objDict XRedName))
(vla-GetXRecordData objXRed 'XRedType 'XRedData)
(setq XRedType (vlax-safearray->list XRedType)
XRedData (vlax-safearray->list XRedData)
)
(foreach x XRedType
(setq TypeList (append TypeList (list x)))
)
(foreach x XRedData
(setq DataList (append DataList (list (vlax-variant-value x))))
)
(list TypeList DataList)
)
LDATA保存在DWG中是無疑的,只是地點(diǎn)沒有“暴露”給VBA,所以VBA無法存取,這和其他一些第三方程序自定對象數(shù)據(jù)不能存取是一個道理,類似的東西還有一些,這個LDATA對于使用VL和VBA混合編程并需要在兩者之間傳遞數(shù)據(jù)的人有些誤導(dǎo)作用。
應(yīng)該讓Vlisp和VBA各做其擅長的事情而無需論其長短,二者需要傳遞數(shù)據(jù)時用Dictionary和Xrecord更為舒暢自然。Xrecord是一個任意數(shù)據(jù)的容器,它提供了比xdata更靈活的附加數(shù)據(jù)的辦法,Xrecord能包含2GB的任意數(shù)據(jù),特別適合不同開發(fā)語言之間傳遞數(shù)據(jù),有用的保留在DWG,臨時的完事就刪除。有時VBA和Excel交互大量數(shù)據(jù),完成計(jì)算,生成圖形時Vlisp又方便一些,VBa把數(shù)據(jù)傳遞過去,用Vlisp干干凈凈地寫,反之亦然。
** 1-VBA傳出
'
'設(shè)置指定詞典擴(kuò)展記錄
'
Public Function Dhvb_SetXrecord(objDict As AcadDictionary, _
XRecordName As String, _
XRecordData As Variant) _
As AcadXRecord
Dim objXRecord As AcadXRecord
Dim XRecordType As Variant
Dim i As Long
'檢察對象詞典是否有該名擴(kuò)展記錄,如果已經(jīng)存在則刪除
On Error Resume Next
Set objXRecord = objDict.GetObject(XRecordName)
If Not objXRecord Is Nothing Then
objDict.Remove XRecordName
End If
On Error GoTo 0
'建立擴(kuò)展記錄數(shù)據(jù)
ReDim XRecordType(0 To UBound(XRecordData)) As Integer
For i = 0 To UBound(XRecordData)
Select Case VarType(XRecordData(i))
Case vbInteger, vbLong
XRecordType(i) = 90'整數(shù)組碼=90
Case vbSingle, vbDouble
XRecordType(i) = 40'實(shí)數(shù)組碼=40
Case vbString
XRecordType(i) = 2'字符組碼=2
End Select
Next
'添加擴(kuò)展記錄到對象詞典
Set objXRecord = objDict.AddXRecord(XRecordName)
objXRecord.SetXRecordData XRecordType, XRecordData
'返回?cái)U(kuò)展記錄對象
Set Dhvb_SetXrecord = objXRecord
End Function
** 2-Vlisp讀取
;;;
;;;讀取指定詞典擴(kuò)展記錄,返回?cái)?shù)據(jù)表 ;
;;;
(defun Dhvl_GetXrecord (objDictXRedName / objXRed
XRedType XRedData TypeList DataList
x
)
(setq objXRed (vla-GetObject objDict XRedName))
(vla-GetXRecordData objXRed 'XRedType 'XRedData)
(setq XRedType (vlax-safearray->list XRedType)
XRedData (vlax-safearray->list XRedData)
)
(foreach x XRedType
(setq TypeList (append TypeList (list x)))
)
(foreach x XRedData
(setq DataList (append DataList (list (vlax-variant-value x))))
)
(list TypeList DataList)
)
相關(guān)文章
- 2021-09-08EXCEL在工作中的應(yīng)用 制表、數(shù)據(jù)處理及宏應(yīng)用PDF下載
- 2021-08-01Visual Basic與AutoCAD二次開發(fā)PDF下載
- 2021-08-01Mastering AutoCAD Civil 3D 2010PDF下載
- 2021-07-18AutoCAD VBA開發(fā)手冊PDF下載
- 2021-07-18AutoCAD VBA開發(fā)人員手冊PDF下載
- 2021-07-16AutoCAD VBA開發(fā)精彩實(shí)例教程PDF下載
- 2021-07-16AutoCAD VBA函數(shù)庫查詢辭典PDF下載
- 2021-01-16AUTOCAD 2010立體詞典 機(jī)械制圖PDF下載
- 2016-02-22VisualBasic與AutoCAD二次開發(fā)教程下載
- 2012-05-24AutoCAD VBA二次開發(fā)教程免費(fèi)下載