ARX的NET函数库之实体篇
本帖最后由 efan2000 于 2014-4-18 15:04 编辑通过C++/CLI实现ARX的托管函数在NET里调用,示例如下:
'创建文字实体
Dim rb As ResultBuffer = New ResultBuffer
rb.Add(New TypedValue(DxfCode.Start, "TEXT"))
rb.Add(New TypedValue(10, New Point3d(0, 0, 0)))
rb.Add(New TypedValue(40, 2.5))
rb.Add(New TypedValue(DxfCode.Text, "Hello World"))
mcnetarx.GlobalFunctions.AcdbEntMake(rb)
'定义保存实体的变量
Dim ent() As Integer = New Integer() {}
'获取最后一个实体
mcnetarx.GlobalFunctions.AcdbEntLast(ent)
'获取实体的DXF组码
rb = mcnetarx.GlobalFunctions.AcdbEntGet(ent)
Dim tvs() As TypedValue = rb.AsArray()
rb = New ResultBuffer
For Each tv As TypedValue In tvs
If tv.TypeCode = 1 Then
rb.Add(New TypedValue(tv.TypeCode, "明经通道"))
Else
rb.Add(New TypedValue(tv.TypeCode, tv.Value))
End If
Next
'修改实体,如果实体是文字,改为
mcnetarx.GlobalFunctions.AcdbEntMod(rb)
注:附件基于AutoCAD2007和VS2005开发,理论上同时支持32位的2008和2009,没做进一步测试。
更新:基于AutoCAD2010的32位,理论上同时支持32位的2011和2012,没做进一步测试。
基于AutoCAD2013,理论上同时支持2014和2015,没做进一步测试。
本帖最后由 efan2000 于 2014-6-19 20:44 编辑
COM版本的更新了,可以在VB、VBA或者NET等等中调用。
Sub test()
'创建文字实体
Dim rb As ResultBuffer
Set rb = New ResultBuffer
rb.AddTypedValue 0, "TEXT"
Dim pt(0 To 2) As Double
rb.AddTypedValue 10, pt
rb.AddTypedValue 40, 2.5
rb.AddTypedValue 1, "Hello World"
Debug.Print AcdbEntMake(rb)
'定义保存实体的变量
Dim ent As Variant
'获取最后一个实体
Debug.Print AcdbEntLast(ent)
'获取实体的DXF组码
Set rb = AcdbEntGet(ent)
Dim tvs As Variant
tvs = rb.AsArray()
Set rb = New ResultBuffer
Dim i As Integer
For i = 0 To UBound(tvs)
Dim tv As TypedValue
Set tv = tvs(i)
If tv.TypeCode = 1 Then
rb.AddTypedValue tv.TypeCode, "明经通道"
Else
rb.AddTypedValue tv.TypeCode, tv.Value
End If
Next
'修改实体,如果实体是文字,改为
Debug.Print AcdbEntMod(rb)
End Sub
ARX的COM接口下载地址
页:
[1]