Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API - Referenzen

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
  
REVOLUTE: Nicht das Rad neu erfunden – aber das Getriebe
Autor Thema:  API - Referenzen (1884 mal gelesen)
MartinKirchmayer
Mitglied



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

Beiträge: 79
Registriert: 14.05.2002

erstellt am: 20. Apr. 2006 13:34    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 zusammen,
gibt es eine Möglichkeit, per SWXSolidWorks-API dem gerade ativen Dokument die Information zu entlocken, ob es in anderen gerade in SWXSolidWorks geladenen Dokumenten referenziert ist?
D.h. gibt es eine Eigenschaft oder Methode wie "IsReferencedInOtherOpenDocs"?

Ich möchte mir den Umweg sparen über:
a) "i"-Schleife über alle gerade offenen Dokumente
b) "j"-Schleife über deren Referenzen und Vergleich des Namens mit dem aktiven Dokument.

Gruß,
Martin

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

Kalle
Mitglied
Student


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

Beiträge: 706
Registriert: 14.04.2002

erstellt am: 20. Apr. 2006 14:04    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 MartinKirchmayer 10 Unities + Antwort hilfreich

Aheu Martin,

ich schätze da wirst Du kein Glück haben. Habe mich in letzter Zeit auch ziemlich viel mit Referenzen und API auseinandergesetzt und diese Funktionalität ist mir noch nicht über den Weg gelaufen.

Bis dann,
Kalle

------------------
-----------------------------------------
Es gibt immer mehr Lösungen als Probleme.

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 20. Apr. 2006 14:41    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 MartinKirchmayer 10 Unities + Antwort hilfreich

Hallo Martin,

nein, so etwas kann es nach der Logik von SolidWorks auch nicht geben. Was du suchst ist die Teileverwendung einer Komponente, aber die Komponente besitzt diese Info (absichtlich) nicht.

Alle Tools, die so etwas können, angefangen von einfachen Makros über SolidWorks Explorer und PDMWorks bishin zu Monster-PDM-Systemen machen es auch andersherum: man klappert alle Referenzen der Einzelteile, Baugruppen und Zeichnungen ab, merkt sich diese zum Beispiel in einer Datenbank und holt sich dann aus der Datenbank die entsprechende Teileverwendung.

Du wirst also über deine beiden Schleifen nicht drumherum kommen 

Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

Member of CAD.de BOINC Team  -   | Seti@Home | CPDN | Einstein@Home

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

clownfisch
Mitglied
industrial designer


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

Beiträge: 752
Registriert: 18.01.2006

SWX 2023 und davor
Intel XEON W-2125 4,0 GHz
16,00 GB RAM
nvidia Quadro RTX 4000
Windows 10 Prof. für Workstation
Windows 10 Prof

erstellt am: 20. Apr. 2006 14:57    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 MartinKirchmayer 10 Unities + Antwort hilfreich

Hallo API Spezialisten,

ich verstehe ja nun wirklich nichts vom Thema, aber wenn ich in einem Dokument, welches in anderen offenen Dokumenten referenziert z.B. eine Konfiguration umbenennen will, bekomme ich ja auf jeden Fall die Meldung, dass das nicht geht. Kann das nicht nen Ansatz abgeben?

Andreas

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

MartinKirchmayer
Mitglied



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

Beiträge: 79
Registriert: 14.05.2002

erstellt am: 20. Apr. 2006 15:02    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 Stefan,
Zitat:
Original erstellt von StefanBerlitz:

...
nein, so etwas kann es nach der Logik von SolidWorks auch nicht geben. Was du suchst ist die Teileverwendung einer Komponente, aber die Komponente besitzt diese Info (absichtlich) nicht.
...


das war mir auch klar, ich wollte ja auch nur eine naja, ich nenne sie mal "Laufzeiteigenschaft" auslesen können. SWXSolidWorks weiss das ja auch irgendwie, nämlich z.B. im o.a. Fall "Konfig umbenennen".

Martin


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

ABarth
Mitglied
Ing. Maschinenbau


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

Beiträge: 23
Registriert: 12.02.2003

SolidWorks 2008

erstellt am: 24. Apr. 2006 18: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 Nur für MartinKirchmayer 10 Unities + Antwort hilfreich

Hallo Martin,
die Idee von clownfisch aufgreifend würde ich folgendes vorschlagen:
Per API versuchen jeden Konfigurationsnamen zu ändern und wenn es bei einem nicht klappt ist das Teil / die BG in einer geöffneten BG verbaut!
Danach die geglückten Konfigurationsnamensänderungen wieder rückgängig machen!!
Nach dem Test ist die Datei allerdings "dirty" und fordert zu Speichern auf (obwohl garnix geändert wurde)!

Hier der Code: (klappt auch bei abgeleiteten Konfigurationen)

Code:

Dim swApp As Object

Dim Konfig As Object
Dim swModel As SldWorks.ModelDoc2
Dim vConfigNameArr As Variant
Dim vConfigName As Variant

Sub main()

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc

vConfigNameArr = swModel.GetConfigurationNames

istVerbaut = False
For Each vConfigName In vConfigNameArr
    Set Konfig = swModel.GetConfigurationByName(vConfigName)
    Konfig.Name = vConfigName & "xx"
    If Konfig.Name = vConfigName & "xx" Then
        'Diese Konfiguration ist nicht verbaut
        'also Konfigurationnamen zurücksetzen
        Konfig.Name = vConfigName
    Else
        istVerbaut = True
    End If
Next
'..
'..
'..
'..
If istVerbaut Then
    MsgBox "Das Teil/BG ist in einer geöffneten BG verbaut"
Else
    MsgBox "Das Teil/BG ist zumindest " & _
    "in einer geöffneten BG nicht verbaut"
End If

End Sub


Bitte nicht steinigen für diesen grausamen Workaround....

Andreas...

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

INKN
Mitglied
Consulant/Softwareentwickler


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

Beiträge: 277
Registriert: 22.08.2001

erstellt am: 25. Apr. 2006 07:42    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 MartinKirchmayer 10 Unities + Antwort hilfreich

Hallo Martin,
wenn Du prüfst, ob die zu änderte Datei in SWXSolidWorks offen ist. Liste der offenen Dokumente SldWorks.EnumDocuments2.

Lightweight Komponenten sind nicht geladen und nicht in der Liste.

Dann könntest Du über SwDocumentMgr.dll von außen vieles auslesen und ändern. Beschreibung findest Du in Beta 2007 und dann auch offen für alle.

------------------
Gruß Ingo

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

StefanBerlitz
Guter-Geist-Moderator
IT Admin (CAx)



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

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 25. Apr. 2006 09:34    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 MartinKirchmayer 10 Unities + Antwort hilfreich

Hallo zusammen,

Wo ist das Problem das von "oben" aus zu machen, zwei Schleifen sind doch nicht so schwierig:

Code:

' **********************************************************************
' * Makro überprüft, ob das aktive Dokument in irgendwelchen anderen
' * OFFENEN Dokumenten referenziert ist
' *
' * 25.04.2006 Stefan Berlitz (stefan.berlitz@solidworks.cad.de)
' * http://solidworks.cad.de
' * http://swtools.cad.de
' *
' **********************************************************************

Dim SldWorks As Object
Dim ModelDoc As Object
Dim ModelDocName As String
Dim ModelDocReferencedIn As New Collection
Dim vReferences As Variant

Dim i As Long
Dim status As String
Dim refname  As Variant

Sub main()

    ' an SolidWorks anklinken
    Set SldWorks = CreateObject("SldWorks.Application")
    Set ModelDoc = SldWorks.ActiveDoc
   
    ' Collection sicherheitshalber löschen
    Set ModelDocReferencedIn = New Collection
   
    ' erst mal den Namen des aktiven Dokumentes holen
    ModelDocName = GetNamePart(ModelDoc.GetPathName)
   
    ' durch alle offenen Dokumente gehen und suchen, ob der Name in
    ' den Referenzenliste auftaucht. wenn Ja wird eins aufgezählt
    ' und der Name des referenzierenden Dokumentes in einer Liste eingetragen
   
    Set ModelDoc = SldWorks.GetFirstDocument
    While Not ModelDoc Is Nothing
        '
        vReferences = ModelDoc.GetDependencies2(False, False, False)
        For i = 0 To (UBound(vReferences) - 1) / 2
            ' es steht jetzt jeweils abwechseln nur der Name und der Fullpath
            ' in der Referenzliste, also vom Fullpath den Namen abschneiden
            ' und mit unserem Ursprungsmodell vergleichen

            If ModelDocName = GetNamePart(vReferences(2 * i + 1)) Then
                ModelDocReferencedIn.Add ModelDoc.GetPathName
            End If
        Next i
       
        ' und das nächste Dokument
        Set ModelDoc = ModelDoc.GetNext
    Wend

    ' und eine Zusammenfassung ausgeben
    status = "Dokument " & ModelDocName & vbCrLf
    status = status & ModelDocReferencedIn.Count & " mal in den offenen Doks refereneziert:" & vbCrLf
    For Each refname In ModelDocReferencedIn
        status = status & refname & vbCrLf
    Next
    MsgBox status

End Sub


Private Function GetNamePart(ByVal strPath As String) As String
    '
    Dim intCounter As Integer
    Dim strTmp As String

    ' String von hinten bis zum ersten Backslash abklappern
    For intCounter = Len(strPath) To 1 Step -1
        ' dann den String ab der gefundenen Stelle merken
        If Mid$(strPath, intCounter, 1) <> "\" Then
            strTmp = Mid$(strPath, intCounter, 1) & strTmp
        Else
            Exit For
        End If
    Next intCounter

    ' und zurückgeben
    GetNamePart = strTmp

End Function


Ciao,
Stefan

------------------
Inoffizielle deutsche SolidWorks Hilfeseite    http://solidworks.cad.de

Member of CAD.de BOINC Team  -   | Seti@Home | CPDN | Einstein@Home

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

MartinKirchmayer
Mitglied



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

Beiträge: 79
Registriert: 14.05.2002

erstellt am: 25. Apr. 2006 09:38    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 zusammen,
danke für das feedback und an Stefan speziell für das fertige Makro!

Martin

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