跳到主要内容
车工,机床资讯站
技术综合

在AutoCAD Vlisp和VBA之间传递数据

西部车床阅读 2

   LDATA,顾名思义是AutoDesk窝藏私心,专门给lisp留用的数据。当vlax-ldata-put第一个参数为指定全局词典的字符串时,VBA可以通过命名词典“看到”数据,当第一个参数为图元对象时,VBA只能判断出实体具有扩展词典,但“看不到”数据,所以目前还只能用vlax-ldata-**族函数处理LDATA,VBA存取不行。你是想要在Vlisp和VBA之间传递数据吧?可以找点别的办法,在DWG内部,Vlisp、VBA、ARX之间可以传递多达2GB数据。

   LDATA保存在DWG中是无疑的,只是地点没有“暴露”给VBA,所以VBA无法存取,这和其他一些第三方程序自定对象数据不能存取是一个道理,类似的东西还有一些,这个LDATA对于使用VL和VBA混合编程并需要在两者之间传递数据的人有些误导作用。

   应该让Vlisp和VBA各做其擅长的事情而无需论其长短,二者需要传递数据时用Dictionary和Xrecord更为舒畅自然。Xrecord是一个任意数据的容器,它提供了比xdata更灵活的附加数据的办法,Xrecord能包含2GB的任意数据,特别适合不同开发语言之间传递数据,有用的保留在DWG,临时的完事就删除。有时VBA和Excel交互大量数据,完成计算,生成图形时Vlisp又方便一些,VBa把数据传递过去,用Vlisp干干净净地写,反之亦然。

** 1-VBA传出

设置指定词典扩展记录

Public Function Dhvb_SetXrecor(objDict As AcadDictionary, _

XRecordName As String, _

XRecordData As Variant) _

As AcadXRecord

Dim objXRecord As AcadXRecord

Dim XRecordType As Variant

Dim i As Long

检察对象词典是否有该名扩展记录,如果已经存在则删除

On Error Resume Next

Set objXRecord = objDict.GetObject(XRecordName)

If Not objXRecord Is Nothing Then

objDict.Remove XRecordName

End If

On Error GoTo 0

建立扩展记录数据

ReDim XRecordType(0 To UBound(XRecordData)) As Integer

For i = 0 To UBound(XRecordData)

selec Case VarType(XRecordData(i))

Case vbInteger, vbLong

XRecordType(i) = 90整数组码=90

Case vbSingle, vbDouble

XRecordType(i) = 40实数组码=40

Case vbString

XRecordType(i) = 2字符组码=2

End selec

Next

添加扩展记录到对象词典

Set objXRecord = objDict.AddXRecor(XRecordName)

objXRecord.SetXRecordData XRecordType, XRecordData

返回扩展记录对象

Set Dhvb_SetXrecord = objXRecord

End Function

** 2-Vlisp读取

;;;

;;;读取指定词典扩展记录,返回数据表 ;

;;;

(defun Dhvl_GetXrecor(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)

)

相关文章

扣件 扭矩、螺距和夹紧力 单位 块显示为 浅蓝色是可编辑的 轴向张力 Ff = N 螺距直径 紧固件 D2 = 毫米 节径 支承面 Dn = 毫米 的半角 螺纹 α = ˚ 导程角 β = ˚ 摩擦 螺纹系数 μ =…

西部车床阅读 9

    高速加工是以高的切削速度、高的进给速度和高的加工质量为主要特征的加工技术,其加工效率比传统的切削加工要高几倍,甚至十几倍。经高速铣削精加工后的模具型面,仅需略加抛光便可使用,从而节省…

西部车床阅读 3

焊接技术是链接技术中的一部分,是航空航天工业紧密器件制造中补课或缺的技术。在现代生产中,各种新型焊接技术的广泛引用,极大地简化了航空航天中各类构件的加工,节省了生产材料,提升了生产效率。随着焊接技术的不断进步,航天飞机的…

西部车床阅读 4

还没有评论

评论已关闭。