Inventor Add-in Button definieren und einbinden

Mo, 24.08.2009 - 20:03 -- admin

Die API Schnittstelle von Autodesk Inventor bietet die Möglichkeit, Buttons zu definieren und in eine Toolbar/Ribbon einzubinden. Diese Buttons müssen allerdings einzeln mit WithEvent definiert werden, somit können keine Buttons zur Laufzeit hinzugefügt werden. Weiß man zum Programmstart nicht wieviele Buttons benötigt werden (werden z.B Buttondefinition und Befehle aus einer Textdatei nachgeladen) steht man ziemlich dumm da. Bei mehreren Buttons sammelt sich im Quelltext einiges an, da für jeden Button eigene Event Funktion generiert wird.
Einfacher gehts indem jede einzelne Buttondefinition in eine Klasse, die einen gesonderte Event Funktion enthält, auszulagern wird. So ist es schnell möglich mehrere Buttons aus einer beliebigen Funktion aus zu erstellen und mit einem eigenem Event zu verknüpfen. Mithilfe von AddHandler kann z.B. für jeden Button ein und die gleichen Event Funktion genutzt werden.
Sobald ein Button gedrückt wurde wird die entsprechende Event Funktion gestartet und die Buttondefinition mitübergeben. Hierbei steht unteranderem der InternalName zur Verfügung, womit man einen eindeutig Namen des gedrückt Buttons zur Weiterverarbeitung hat.

Allgemein

Eine ButtonDefintion von Inventor enthält unter anderem folgenden wichtige Einträge.

  • DisplayName Name des Buttons, der angezeigt werden soll
  • InternalName Einmaliger Name des Buttons, darf unter keinen Umständen bereits vorhanden sein
  • CommandTypesEnum Darstellung des Buttons: Nur Icon, Nur Text, Text+Icon, ...; Nur optional sollte man allerdings setzen, sicher ist sicher
  • CLSID Eine ID für jede Button. Sollte über GuidAttribute generiert werden, siehe Verweise; Ist nicht mehr nötig ab Inventor 2010

Autodesk Inventor 2010

Ab Inventor 2010 wurden die Office 2007 typischen Ribbon Oberfläche eingeführt. Hierbei musste man gleich auch die API anpassen, um die Ribbons auch erweitern zu können. Auf klassische Oberfläch kann man übrigens auch noch zugreifen, insofern sie aktiviert ist. Die wird aber wohl bald aussterben, also lieber gleich bei der neuen bleiben. (Über InterfaceStyle kann geprüft werden, welche Oberfläche aktiviert ist)!
Leider hat man auch die Definition der ButtonDefinition etwas abgeändert. Man muss dazu allerdings sagen: ganz durchdacht ist die neue Definition nicht mehr. Einige Optionen sind hier komplett rausgefolgen und können nur direkt bei Hinzufügen eines Buttons zu einer Toolbar/Ribbon erfolgen (z.B. das Icon). Somit kann die behilfs Klasse von Autodesk Inventor 2009 und früher nicht mehr genutzt werden. (Die Klasse aus Inventor 2009 und früher hätte man sicherlich auch vereinfachen können.)

Ein Beispiel, welches die API Programmierung im Zusammenhang mit den neuen Ribbons verdeutlicht, stehen übrigens in den Verweisen

Beispiel

Dim k As New RibbonButton(controlDefs.AddButtonDefinition("Show asdasdHello","UIRibbonSampleMasdasdasdessage", CommandTypesEnum.kFilePropertyEditCmdType))
AddHandler k.pressed, AddressOf Me.ButtonEvent
[...]
Sub ButtonEvent(ByVal pressedButton As ButtonDefinition)
    MsgBox(pressedButton.InternalName)
End Sub

RibbonButton.vb

Imports Inventor
 
Public Class RibbonButton
    Dim WithEvents m_ButtonDefinition As ButtonDefinition
    Public Event pressed(ByVal erg As ButtonDefinition)
    Public Sub New(ByVal AddButtonDefinition As ButtonDefinition)
        m_ButtonDefinition = AddButtonDefinition
    End Sub
    ReadOnly Property ButtonDefinition() As ButtonDefinition
        Get
            Return m_ButtonDefinition
        End Get
    End Property
    Private Sub m_ButtonDefinition_OnExecute(ByVal Context As Inventor.NameValueMap) Handles m_ButtonDefinition.OnExecute
        RaiseEvent pressed(m_ButtonDefinition)
    End Sub
End Class

Autodesk Inventor 2009 und älter

kommt bald