Hot News aus dem CAD.de-Newsletter:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Inventor .NET
  Inventor Plug-in mit Save Event

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
Autor Thema:   Inventor Plug-in mit Save Event (650 mal gelesen)
Floboo
Mitglied


Sehen Sie sich das Profil von Floboo an!   Senden Sie eine Private Message an Floboo  Schreiben Sie einen Gästebucheintrag für Floboo

Beiträge: 5
Registriert: 10.04.2018

erstellt am: 10. Apr. 2018 21:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo CAD.DE Community,

mein Name ist Florian, männlich  , Freizeitprogrammierer und verzweifelt.
Das Thema quält mich nun schon seit beinahe drei Jahren immer wieder. Daher schreibe ich nun diesen Beitrag.

Ich habe gefühlt alle englischen und deutschen Foren nach einer Lösung durchforstet und einiges selbst versucht.

Über ein Plug-in habe ich die Schnittstelle zu Inventor herstellen können (Visual Basic 2010 Express und Inventor 2015 Pro).
Nach dieser Anleitung bin ich vorgegangen: http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=17324828

Nun möchte ich die WithEvents mit einbinden, im wesentlichen "OnSave".
Dabei möchte ich nicht über ein AddIn gehen, da mein Ziel ist: Eine Windows Form Anwendung über eine Exe zu starten in der ich schon verschiedene, eigene kleine Programme untergebracht habe. In diese Windows Form möchte ich jetzt das OnSave Event einbinden.

Ausgangssituation:
- Visual Basic 2010 Express Project
- Autodesk.Inventor.Interop Verweis gesetzt
- Nur 1 Windows Form mit folgendem Code

Imports System
Imports System.Type
Imports System.Activator
Imports System.Runtime.InteropServices
Imports Inventor


Public Class Form1
    Dim _invApp As Inventor.Application
    Dim _started As Boolean = False
    Private m_inventorApplication As Inventor.Application
    Private WithEvents m_ApplicationEvents As Inventor.ApplicationEvents

    Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()


        'Überprüfung ob Inventor gestartet ist
        ' Add any initialization after the InitializeComponent() call.
        Try
            _invApp = Marshal.GetActiveObject("Inventor.Application")

        Catch ex As Exception
            Try
                Dim invAppType As Type = _
                GetTypeFromProgID("Inventor.Application")

                _invApp = CreateInstance(invAppType)
                _invApp.Visible = True

                'Note: if you shut down the Inventor session that was started
                'this(way) there is still an Inventor.exe running. We will use
                'this Boolean to test whether or not the Inventor App  will
                'need to be shut down.
                _started = True

            Catch ex2 As Exception
                MsgBox(ex2.ToString())
                MsgBox("Unable to get or start Inventor")
            End Try
        End Try
        'Überprüfung ob Inventor gestartet ist
    End Sub


    'Bei Click auf Button1 wird das selektierte Bauteil ausgeblendet
    Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        If _invApp.Documents.Count = 0 Then
            MsgBox("Need to open an Assembly document")
            Return
        End If
        If _invApp.ActiveDocument.DocumentType <> _
              DocumentTypeEnum.kAssemblyDocumentObject Then
            MsgBox("Need to have an Assembly document active")
            Return
        End If
        Dim asmDoc As AssemblyDocument
        asmDoc = _invApp.ActiveDocument

        If asmDoc.SelectSet.Count = 0 Then
            MsgBox("Need to select a Part or Sub Assembly")
            Return
        End If
        Dim selSet As SelectSet
        selSet = asmDoc.SelectSet

        Try
            Dim compOcc As ComponentOccurrence
            Dim obj As Object

            For Each obj In selSet
                compOcc = obj
                Debug.Print(compOcc.Name)
                compOcc.Visible = False
            Next
        Catch ex As Exception
            MsgBox("Is the selected item a Component?")
            MsgBox(ex.ToString())
            Return
        End Try
    End Sub
    'Bei Click auf Button1 wird das selektierte Bauteil ausgeblendet

    Private Sub m_ApplicationEvents_OnSaveDocument(ByVal DocumentObject As Inventor._Document, ByVal BeforeOrAfter As Inventor.EventTimingEnum, ByVal Context As Inventor.NameValueMap, ByRef HandlingCode As Inventor.HandlingCodeEnum) Handles m_ApplicationEvents.OnSaveDocument
        MsgBox("test")
        If BeforeOrAfter <>EventTimingEnum.kAfter Then
            MsgBox("test")
            Exit Sub
        End If
        MsgBox("test")
    End Sub

End Class

Die "Private Sub m_ApplicationEvents_OnSaveDocument" kann ich über VB Express 2010 einfügen.
Wenn ich nun das ganze ausführe passiert beim speichern allerdings nichts.

Ist das zu einfach gedacht?
Was fehlt noch?
Lässt sich das so überhaupt realisieren.

Bin um jeden Tipp dankbar 

Grüße Flo

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

bwr
Mitglied
Konstrukteur


Sehen Sie sich das Profil von bwr an!   Senden Sie eine Private Message an bwr  Schreiben Sie einen Gästebucheintrag für bwr

Beiträge: 96
Registriert: 21.02.2007

Win7 64-bit NVIDIA Quadro 4000
SE V19 SP11
Inventor 2017
etaCAD.de

erstellt am: 11. Apr. 2018 07:40    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Floboo 10 Unities + Antwort hilfreich

Hallo Flo,
da fehlt nur ein winziges Detail. Du mußt der Variablen m_ApplicationEvents etwas zuweisen bevor sie auf Events reagieren kann.

Code:
Public Sub New()

        ' This call is required by the designer.
        InitializeComponent()


        'Überprüfung ob Inventor gestartet ist
        ' Add any initialization after the InitializeComponent() call.
        Try
            _invApp = Marshal.GetActiveObject("Inventor.Application")
            m_ApplicationEvents = _invApp.ApplicationEvents

        Catch ex As Exception
        .....
End Sub


Gruß
Andreas

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Floboo
Mitglied


Sehen Sie sich das Profil von Floboo an!   Senden Sie eine Private Message an Floboo  Schreiben Sie einen Gästebucheintrag für Floboo

Beiträge: 5
Registriert: 10.04.2018

erstellt am: 11. Apr. 2018 19:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo Andreas,


super gut 
Es funktioniert.

Die Zuweisung hatte ich auch schon drin, womöglich aber an der falschen Stelle.

Vielen Dank.

Cheers Flo 

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2020 CAD.de | Impressum | Datenschutz