efan2000 发表于 2014-1-21 11:53:35

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:40:25

本帖最后由 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]
查看完整版本: ARX的NET函数库之实体篇