在 nanoCAD 中将 VBAmacro 转换为 VBscript

Translate VBAmacro to VBscript inside nanoCAD

我正在尝试将在 autoCAD 中工作的 VBAmacro 转换为 VBscript 以与 nanoCAD 一起工作。
我一步一步地将行从 VBAmacro 移动到 VBscript 并查看是否一切正常......
我检查了 ModelSpace

中的每个实体
For c = 0 To ThisDrawing.ModelSpace.Count - 1

如果是 "AcDbBlockReference" 那么我检查它是否有 HasAttributes

   If (ent.ObjectName = "AcDbBlockReference") Then
          Set ObjRef = ThisDrawing.ModelSpace.Item(c)
          If ObjRef.HasAttributes Then

直到这里工作正常但是当我想知道这个 "AcDbBlockReference" 的位置时

ThisDrawing.Utility.Prompt ObjRef.InsertionPoint(0)

我有一个错误......
然后我继续 google 找到这个 page
使用来自 tlbinf32.dll 的 TypeLib 信息对象,可以列出 class.
的所有成员 还有什么???

  AcDbBlockReferenceObject IAcadBlockReference
  Sub QueryInterface(riid, ppvObj)
  Function Unknown Type 19 AddRef()
  Function Unknown Type 19 Release()
  Sub GetTypeInfoCount(pctinfo)
  Sub GetTypeInfo(itinfo, lcid, pptinfo)
  Sub GetIDsOfNames(riid, rgszNames, cNames, lcid, rgdispid)
  Sub Invoke(dispidMember, riid, lcid, wFlags, pdispparams, pvarResult, pexcepinfo, puArgErr)
  Property (set/get) Handle
  Property (set/get) ObjectName
  Sub GetXData(AppName, XDataType, XDataValue)
  Sub SetXData(XDataType, XDataValue)
  Sub Delete()
  Property (set/get) ObjectID
  Property (set/get) Application
  Property (set/get) Database
  Property (set/get) HasExtensionDictionary
  Function vbEmpty GetExtensionDictionary()
  ...
  ...
  Property (set/get) color
  Property (set ref/get) color
  Property (set/get) InsertionPoint     <==============
  Property (set ref/get) InsertionPoint <==============
  Property (set/get) Name
  ...

其中一个 属性 是 (set/get) InsertionPoint 那么为什么我有错误?
然后我尝试使用此代码:

Set Obj = ThisDrawing.ModelSpace.Item(0)
ThisDrawing.Utility.Prompt Obj.ObjectName
if (IsArray(Obj.InsertionPoint)) then
    ThisDrawing.Utility.Prompt "IsArray" 
    ThisDrawing.Utility.Prompt ubound(Obj.InsertionPoint)
else
    ThisDrawing.Utility.Prompt "NOT Array" 
end if 

响应是:
Obj.ObjectName 是一个 AcDbBlockReference
IsArray 是 true
ubound = 2

那么,如果这会产生错误,我该如何获取 Obj.InsertionPoint(0) 和 Obj.InsertionPoint(1) 的值?
---------------------------------------------- ------------------------
ADD1
如果我使用此代码:

dim Obj
Set Obj = ThisDrawing.ModelSpace.Item(0)
ThisDrawing.Utility.Prompt "Obj.ObjectName: " & Obj.ObjectName
ThisDrawing.Utility.Prompt "isArray()     : " & isArray(Obj.InsertionPoint)
ThisDrawing.Utility.Prompt "lbound        : " & lbound(Obj.InsertionPoint)
ThisDrawing.Utility.Prompt "ubound        : " & ubound(Obj.InsertionPoint)
ThisDrawing.Utility.Prompt Obj.InsertionPoint(0)

结果是
Obj.ObjectName:AcDbBlockReference
isArray() : TRUE
lbound : 0
上下行:2
错误:"Errore di run-time di Microsoft VBScript" 在第 9 行 pos 0 引发异常 "L'oggetto non è un insieme: 'InsertionPoint'" ThisDrawing.Utility.Prompt Obj.InsertionPoint(0)

如果我尝试通过创建一个新点来移动 blockrference

dim pnt(3)
pnt(0) = 100
pnt(1) = 1000
pnt(2) = 0
Obj.InsertionPoint = pnt

Obj(块引用)从实际位置移动到 pnt
---------------------------------------------- ------------------------
ADD2
我在 javascript

中找到了这个脚本
try {
    ThisDrawing.Utility.Prompt(ThisDrawing.ModelSpace(0).EntityName);
    ThisDrawing.Utility.Prompt(pt_toString(ThisDrawing.ModelSpace(0).insertionPoint));
}
catch (ex) {
    ThisDrawing.Utility.Prompt("oops");
}

function pt_toString(pt)
{
    var sp = new VBArray(ThisDrawing.Utility.CreateSafeArrayFromVector(pt))
    return sp.toArray().toString();
}

结果是:
AcDbBlockReference
267.9 , 2122.5 , 0
所以实际上我可以在 js 中知道 insertionPoint 但在 vbscript 中不能,为什么???
是否可以将此 js 代码转换为 vbscript?

解决方案

Dim pnt
pnt = ThisDrawing.Utility.CreateSafeArrayFromVector(Obj1.InsertionPoint)

ThisDrawing.Utility.Prompt pnt(0) 
ThisDrawing.Utility.Prompt pnt(1) 
ThisDrawing.Utility.Prompt pnt(2)

感谢大家