Code:
Imports Inventor
Imports System.Runtime.InteropServices
'Imports System.Windows.Forms
Imports Microsoft.Win32Namespace Test345
<ProgIdAttribute("Test345.StandardAddInServer"), _
GuidAttribute("9dd5bb2c-a9cc-4af6-80e0-0a7b308133ba")> _
Public Class StandardAddInServer
Implements Inventor.ApplicationAddInServer
' Inventor application object.
Private m_inventorApplication As Inventor.Application
#Region "ApplicationAddInServer Members"
Private m_ClientID As String
Private WithEvents m_featureCountButtonDef As ButtonDefinition
Public Sub Activate(ByVal addInSiteObject As Inventor.ApplicationAddInSite, ByVal firstTime As Boolean) Implements Inventor.ApplicationAddInServer.Activate
' This method is called by Inventor when it loads the AddIn.
' The AddInSiteObject provides access to the Inventor Application object.
' The FirstTime flag indicates if the AddIn is loaded for the first time.
' Initialize AddIn members.
m_inventorApplication = addInSiteObject.Application
' Get the ClassID for this add-in and save it in a
' member variable to use wherever a ClientID is needed.
m_ClientID = AddInGuid(GetType(StandardAddInServer))
' Create the button definition.
Dim controlDefs As ControlDefinitions
controlDefs = m_inventorApplication.CommandManager.ControlDefinitions
'm_featureCountButtonDef = controlDefs.AddButtonDefinition("Display Name", _
' "Internal Name", _
' CommandTypesEnum.kQueryOnlyCmdType / .kShapeEditCmdType, _
' ClientID, _
' "Description", _
' "Tool Tip")
m_featureCountButtonDef = controlDefs.AddButtonDefinition("Count Features", _
"AUAddInCountFeatures", _
CommandTypesEnum.kQueryOnlyCmdType, _
m_ClientID, _
"Count the features in the active part.", _
"Count Features")
If firstTime Then
' Create a new command bar (toolbar) and make it visible.
Dim commandBars As CommandBars
commandBars = m_inventorApplication.UserInterfaceManager.CommandBars
Dim commandBar As CommandBar
commandBar = commandBars.Add("My Macros", "AUAddInMyMacros", , m_ClientID)
commandBar.Visible = True
' Add the control to the command bar.
commandBar.Controls.AddButton(m_featureCountButtonDef)
End If
' TODO: Add ApplicationAddInServer.Activate implementation.
' e.g. event initialization, command creation etc.
End Sub
Public Sub Deactivate() Implements Inventor.ApplicationAddInServer.Deactivate
' This method is called by Inventor when the AddIn is unloaded.
' The AddIn will be unloaded either manually by the user or
' when the Inventor session is terminated.
' TODO: Add ApplicationAddInServer.Deactivate implementation
' Release objects.
Marshal.ReleaseComObject(m_inventorApplication)
m_inventorApplication = Nothing
System.GC.WaitForPendingFinalizers()
System.GC.Collect()
End Sub
Public ReadOnly Property Automation() As Object Implements Inventor.ApplicationAddInServer.Automation
' This property is provided to allow the AddIn to expose an API
' of its own to other programs. Typically, this would be done by
' implementing the AddIn's API interface in a class and returning
' that class object through this property.
Get
Return Nothing
End Get
End Property
Public Sub ExecuteCommand(ByVal commandID As Integer) Implements Inventor.ApplicationAddInServer.ExecuteCommand
' Note:this method is now obsolete, you should use the
' ControlDefinition functionality for implementing commands.
End Sub
#End Region
#Region "COM Registration"
' Registers this class as an AddIn for Inventor.
' This function is called when the assembly is registered for COM.
<ComRegisterFunctionAttribute()> _
Public Shared Sub Register(ByVal t As Type)
Dim clssRoot As RegistryKey = Registry.ClassesRoot
Dim clsid As RegistryKey = Nothing
Dim subKey As RegistryKey = Nothing
Try
clsid = clssRoot.CreateSubKey("CLSID\" + AddInGuid(t))
clsid.SetValue(Nothing, "Test345")
subKey = clsid.CreateSubKey("Implemented Categories\{39AD2B5C-7A29-11D6-8E0A-0010B541CAA8}")
subKey.Close()
subKey = clsid.CreateSubKey("Settings")
subKey.SetValue("AddInType", "Standard")
subKey.SetValue("LoadOnStartUp", "1")
'subKey.SetValue("SupportedSoftwareVersionLessThan", "")
subKey.SetValue("SupportedSoftwareVersionGreaterThan", "14..")
'subKey.SetValue("SupportedSoftwareVersionEqualTo", "")
'subKey.SetValue("SupportedSoftwareVersionNotEqualTo", "")
'subKey.SetValue("Hidden", "0")
'subKey.SetValue("UserUnloadable", "1")
subKey.SetValue("Version", 1)
subKey.Close()
subKey = clsid.CreateSubKey("Description")
subKey.SetValue(Nothing, "Test345")
Catch ex As Exception
System.Diagnostics.Trace.Assert(False)
Finally
If Not subKey Is Nothing Then subKey.Close()
If Not clsid Is Nothing Then clsid.Close()
If Not clssRoot Is Nothing Then clssRoot.Close()
End Try
End Sub
' Unregisters this class as an AddIn for Inventor.
' This function is called when the assembly is unregistered.
<ComUnregisterFunctionAttribute()> _
Public Shared Sub Unregister(ByVal t As Type)
Dim clssRoot As RegistryKey = Registry.ClassesRoot
Dim clsid As RegistryKey = Nothing
Try
clssRoot = Microsoft.Win32.Registry.ClassesRoot
clsid = clssRoot.OpenSubKey("CLSID\" + AddInGuid(t), True)
clsid.SetValue(Nothing, "")
clsid.DeleteSubKeyTree("Implemented Categories\{39AD2B5C-7A29-11D6-8E0A-0010B541CAA8}")
clsid.DeleteSubKeyTree("Settings")
clsid.DeleteSubKeyTree("Description")
Catch
Finally
If Not clsid Is Nothing Then clsid.Close()
If Not clssRoot Is Nothing Then clssRoot.Close()
End Try
End Sub
' This property uses reflection to get the value for the GuidAttribute attached to the class.
Public Shared ReadOnly Property AddInGuid(ByVal t As Type) As String
Get
Dim guid As String = ""
Try
Dim customAttributes() As Object = t.GetCustomAttributes(GetType(GuidAttribute), False)
Dim guidAttribute As GuidAttribute = CType(customAttributes(0), GuidAttribute)
guid = "{" + guidAttribute.Value.ToString() + "}"
Finally
AddInGuid = guid
End Try
End Get
End Property
#End Region
Public Sub FeatureCount(ByVal ThisApplication As Inventor.Application)
Dim oPartDoc As PartDocument
oPartDoc = ThisApplication.ActiveDocument
MsgBox("There are " & oPartDoc.ComponentDefinition.Features.Count & " features in this part.")
End Sub
Private Sub m_featureCountButtonDef_OnExecute(...) ' <--- Fehlermeldung: Bezeichner erwartet
' Display the dialog.
Dim myForm As New InsertBoltForm ' <--- Fehlermeldung: Der Typ "InsertBoltForm" ist nicht definiert.
myForm.Show(New WindowWrapper(m_inventorApplication.MainFrameHWND))
End Sub
#Region "hWnd Wrapper Class"
' This class is used to wrap a Win32 hWnd as a .Net IWind32Window class.
' This is used for parenting a dialog to the Inventor window.
'
' For example:
' myForm.Show(New WindowWrapper(m_inventorApplication.MainFrameHWND))
'
Public Class WindowWrapper
Implements System.Windows.Forms.IWin32Window
Public Sub New(ByVal handle As IntPtr)
_hwnd = handle
End Sub
Public ReadOnly Property Handle() As IntPtr Implements System.Windows.Forms.IWin32Window.Handle
Get
Return _hwnd
End Get
End Property
Private _hwnd As IntPtr
End Class
#End Region
End Class
End Namespace