分享好友 数控技术首页 数控技术分类 切换频道

在AutoCAD Vlisp和VBA之间传递数据

2020-01-06 00:00570
   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)
)
举报
收藏 0
打赏 0
轻松提高数控机床精度
随着我国经济的飞速发展,数控机床作为新一代工作母机,在机械制造中已得到广泛的应用,精密加工技术的迅速发展和零件加工精度的

0评论2025-01-04305

加工中心刀具长度补偿怎么用?
在数控加工中,刀具长度补偿是一种重要的措施,用于消除机床变形、热变形等因素引起的误差,保证加工精度,从而提高培训效率,减

0评论2024-12-18391

加工中心主轴定位角度怎么调?
  在数控加工领域,加工中心主轴的定位角度是影响加工精度和效率的重要因素之一。正确调整主轴的定位角度可以提高加工质量,减

0评论2024-12-11488

简述机器人加装电主轴就选Kasite 4060ER-S的理由
  近年来,随着科技的不断发展,机器人作业已经渗透到各个领域,尤其在工业制造领域,更加随处可见。高精密切割、铣削、雕刻、

0评论2024-05-20701

机器人主轴怎么选?Kasite高速电主轴满足你的需求
  机器人发展到现在越来越受到人们的欢迎和重视,现在很多传统行业都在生产作业中引入了工业机器人,随着机器人的改进和优化,

0评论2023-10-231203

机械臂加装2.2KW大力矩电主轴,就选MSIY-80电主轴
机械臂想加装大力矩电主轴,用于铸钢等硬质材料去毛刺,铣削等加工,可以考虑MSIY-80电主轴,外径80mm,重量4.8公斤,可搭配轴向或径向浮动刀柄配套使用。

0评论2023-08-261197

每天早上打开数控机床时有没有必要热机?
工厂使用精密数控机床(加工中心、电火花、慢走丝等机床)进行高精密加工,你是否有这样的经验:每天早上开机进行加工,首件的加

0评论2023-08-151088