2017-01-02 33 views
0

我使用vb.net来开发winform应用程序。我可以采取块引用,块名称“Tab1”。现在我想要得到这个块要编辑块属性,但我不知道该怎么做,我搜索gg,但没有结果。vb.net autocad获取块引用winform

Dim appProgID As String = "Autocad.Application" 
Dim fname As String = "C:\Users\Kid\Downloads\IDEA FOR TOOL\TEST\TABLE ATTRIBUTE.dwg" 

Dim AcadType As Type = Type.GetTypeFromProgID(appProgID) 


Dim AcadApp As Object = Activator.CreateInstance(AcadType) 
Dim visargs() As Object = New Object(0) {} 
visargs(0) = False 
AcadApp.GetType().InvokeMember("Visible", BindingFlags.SetProperty, Nothing, AcadApp, visargs, Nothing) 
Dim AcadDocs As Object = AcadApp.GetType().InvokeMember(
"Documents", BindingFlags.GetProperty, Nothing, AcadApp, Nothing) 


Dim args() As Object = New Object(1) {} 
args(0) = fname 
args(1) = False 

Dim AcDoc As Object = AcadDocs.GetType.InvokeMember(
    "Open", BindingFlags.InvokeMethod, Nothing, AcadDocs, args, Nothing) 

AcadApp.GetType.InvokeMember(
    "ActiveDocument", BindingFlags.GetProperty, Nothing, AcadApp, Nothing, Nothing) 

AcDoc = AcadApp.GetType.InvokeMember(
"ActiveDocument", BindingFlags.GetProperty, Nothing, AcadApp, Nothing, Nothing) 


Dim AcadModel As Object = AcDoc.GetType.InvokeMember("modelspace", BindingFlags.GetProperty, Nothing, AcDoc, Nothing) 
Dim entity As Object 
For Each entity In AcadModel 
If TypeName(entity) = "IAcadBlockReference" Then 
'here i want to take this block has name "tab1"  
End If 
Next 

enter image description here

回答

1

你并不需要使用InvokeMember,VB.NET支持后期绑定。

Dim acadType As Type = Type.GetTypeFromProgID("AutoCAD.Application") 
Dim acadApp = Activator.CreateInstance(acadType) 
acadApp.Visible = true 
Dim doc = acadApp.Documents.Open("C:\Users\Kid\Downloads\IDEA FOR TOOL\TEST\TABLE ATTRIBUTE.dwg") 
Dim entity 
For Each entity In doc.ModelSpace 
    If entity.ObjectName = "AcDbBlockReference" AndAlso _ 
    String.Equals(entity.Name, "Tab1", StringComparison.OrdinalIgnoreCase) Then 
    Dim att 
    For Each att In entity.GetAttributes() 
     If att.TagString = "A" Then 
     att.TextString = "Your value" 
     End If 
    Next   
    End If 
Next 

如果你想拥有自动完成,你需要下载ObjectARX SDK及以下COM引用添加到您的VS项目:

  1. C:\ ObjectARX的20 .. \ INC-64 \欧特克.AutoCAD.Interop.dll
  2. C:\ ObjectARX的20 .. \ INC-64 \ Autodesk.AutoCAD.Interop.Common.dll

然后,你将能够使用类型变量是这样的:

Dim acadApp As AcadApplication = Activator.CreateInstance(acadType) 
+0

感谢@maxence,我会尽量 – Kid2611

+0

喜Macxence,我想用自己的方式,但重要的是如何从这个块的属性,我看不到任何属性或方法的属性,当我运行调试。你能告诉我更多关于这个吗?非常感谢你 – Kid2611

+0

我已经更新了我的回答 – Maxence