Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: Part direkt geöffnet oder indirekt über Assembly

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
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für SOLIDWORKS
  
Future of Design: Design Apps in der Cloud
Autor Thema:  API: Part direkt geöffnet oder indirekt über Assembly (1473 mal gelesen)
erwin.mayerhofer
Mitglied


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

Beiträge: 2
Registriert: 29.05.2009

erstellt am: 22. Jun. 2010 11:53    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

Mein Programm soll sich beenden, wenn das zugehörige Part geschlossen wurde.
Scheinbar kann man dies nur mit einem Timer erreichen, der immmer wieder nachsieht, ob das Part noch offen ist.
(Mir ist kein Event bekannt, das beim Schliessen eines Parts reagiert - oder gibt es sowas?)
Das funktioniert soweit. Ich verwende VB.NET 2008.

Alle paar Sekunden wird der TimerEventProcessor angesprungen:

    Private Shared Sub TimerEventProcessor(ByVal myObject As Object, ByVal myEventArgs As EventArgs)
        myTimer.Stop()
        If SldWorksEventFrm.IstDokumentGeoeffnet(SldWorksEventFrm.oSwAppCls, SldWorksEventFrm.DateinamePART, False) Then myTimer.Enabled = True ' ist das zugehörige Part geöffnet ?
        If Not myTimer.Enabled Then
            'SolidWorks freigeben
            SldWorksEventFrm.oSwPartCls = Nothing
            SldWorksEventFrm.oSwDrawingCls = Nothing
            SldWorksEventFrm.oSwAppCls = Nothing
            '        SldWorksEventFrm.oSwAssemblyCls = Nothing
            'Formular schließen
            SldWorksEventFrm.Hide()
            SldWorksEventFrm.Close()
        End If
    End Sub

, der dann entsprechend der Function IstDokumentGeöffnet reagiert.

    Public Function IstDokumentGeoeffnet(ByVal oSwApp As SldWorks.SldWorks, ByVal sDokument As String, ByVal bAktivierenWennGeoeffnet As Boolean, Optional ByRef bModelDocVisible As Boolean = False) As Boolean
        Try
            'Mal schauen was alles offen ist
            Dim oSwAktuellModel As SldWorks.ModelDoc2
            Dim bVorhanden As Boolean = False
            oSwAktuellModel = CType(oSwApp.GetFirstDocument, SldWorks.ModelDoc2)
            Do While Not oSwAktuellModel Is Nothing
                If oSwAktuellModel.GetPathName.Length > 0 Then
                    If oSwAktuellModel.GetPathName = sDokument Then
                        bVorhanden = True
                    End If
                    If System.IO.Path.GetFileName(oSwAktuellModel.GetPathName) = sDokument Then
                        bVorhanden = True
                    End If
                    If System.IO.Path.GetFileNameWithoutExtension(oSwAktuellModel.GetPathName) = sDokument Then
                        bVorhanden = True
                    End If
                Else
                    If oSwAktuellModel.GetTitle = sDokument Then
                        bVorhanden = True
                    End If
                End If
                If bVorhanden Then
                    bModelDocVisible = oSwAktuellModel.Visible
                    If bAktivierenWennGeoeffnet Then
                        oSwApp.ActivateDoc(oSwAktuellModel.GetTitle)
                    End If
                    Exit Do
                End If
                oSwAktuellModel = CType(oSwAktuellModel.GetNext, SldWorks.ModelDoc2)
            Loop
            Return bVorhanden
        Catch ex As Exception
            Debug.Assert(False)
            Trace.WriteLine("Fehler: Wo: " & ex.StackTrace & " Was: " & ex.Message)
            Return False
        End Try
    End Function


Nun kommt mein Problem.
Ich möchte mein Programm nur solange offen halten, wie das Part selbst geöffnet ist. Wenn das Part indirekt über ein Assembly offen ist, soll mein Programm schliessen. Ich kann jedoch beim Durchlaufen durch alle geöffneteten Dateien in IstDokumentGeoeffnet nicht unterscheiden, ob das Part direkt oder nur indirekt geöffnet ist.

Kann mir jemand helfen?

Gruß
Erwin

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

tbd
Mitglied
Teamleiter


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

Beiträge: 825
Registriert: 26.01.2006

Dell Percision T5400
Intel(R) Xeon(R) CPU
X5460 @ 3.16GHz
3,25 GB RAM
Nvidia Quadro FX 4600
-----
Win XP Prof SP 3
SW 2008 SP 5.0
PARTsolutions 8.1.08
Cideon SAP PLM 5.103.5.17
Visual Studio 2008

erstellt am: 22. Jun. 2010 12:25    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 erwin.mayerhofer 10 Unities + Antwort hilfreich

Hallo Erwin,

dafür gibt es ein, bzw zwei Ereignisse.

Es gibt das "DestroyNotify - PartDoc" Ereignis, dies wird aber nur ausgelöst wenn das Bauteil wirklich geschlossen wird.

Was du meiner Meinung nach benötigst ist das "DestroyNotify2 - ModelView" Ereignis.
Wenn dein Bauteil in einem eigenen Fenster geöffnet ist, gibt es ein ModelView Objekt. Dessen Instanz erhälst du mit "ModelDoc2.GetFirstModelView".
Wenn das Fenster geschlossen wird, müsste das DestroyNotify2 Ereignis der ModelView Klasse ausgelöst werden, egal ob dein Bauteil noch in einer Baugruppe oder Zeichnung geöffnet ist.

------------------
Mfg Daniel

www.MySldWorks.de - SolidWorks API Snippets

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

erwin.mayerhofer
Mitglied


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

Beiträge: 2
Registriert: 29.05.2009

erstellt am: 23. Jun. 2010 15:14    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 Daniel,

danke für Deine Antwort. Der Hinweis ist genial. Ich habe es eingebaut und es funktioniert.

Nur interessehalber:
Vielleicht kennt doch noch jemand eine Möglichkeit, wie man erkennt, ob das Part direkt oder nur indirekt geöffnet ist. Gibt es vielleicht eine Eigenschaft eines swModels?

Gruß
Erwin

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

tbd
Mitglied
Teamleiter


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

Beiträge: 825
Registriert: 26.01.2006

Dell Percision T5400
Intel(R) Xeon(R) CPU
X5460 @ 3.16GHz
3,25 GB RAM
Nvidia Quadro FX 4600
-----
Win XP Prof SP 3
SW 2008 SP 5.0
PARTsolutions 8.1.08
Cideon SAP PLM 5.103.5.17
Visual Studio 2008

erstellt am: 23. Jun. 2010 16:20    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 erwin.mayerhofer 10 Unities + Antwort hilfreich

Hallo Erwin,

das funktioniert im Prinzip genaus so:

Wenn ModelDoc2.GetFirstModelView Nothing ist gibt es kein eigenes Fenster, spricht das Modell ist in einer Baugruppe oder Zeichnung geöffnet.

-oder-

ModelDoc2.Visible: Bei false gibt es kein eigenes Fenster, bei true schon.

------------------
Mfg Daniel

www.MySldWorks.de - SolidWorks API Snippets

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)2024 CAD.de | Impressum | Datenschutz