Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  SolidWorks
  API: referenziertes Modell der Zeichnung ermitteln

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
  
SolidCAM bei der 23. Hausmesse des Technikszentrums by Werkzeug-Eylert
Autor Thema:  API: referenziertes Modell der Zeichnung ermitteln (3392 mal gelesen)
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: 12. Nov. 2010 08:54    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,

ich hatte ein nette Anfrage nach einem Makrobeispiel bekommen, wie man für eine Zeichnung den Pfad des referenzierten Modells ermitteln könnte. Üblicherweise verweise ich solche Anfragen dann hier ins Brett, damit alle was davon haben, diesmal mache ich es andersrum, stelle die Lösung hier rein und schicke den Fragenden dann hierher zum gucken.

Das ist allerdings eine Ausnahme, ich hoffe, dass die 50-EUR-Taktik auch diesmal aufgeht, dass also einfach diejenigen, die durch die Beipspielcodes Zeit und damit Geld sparen, einfach einen angemessenen Betrag an eine Tafel in der Nähe geben  

Also hier der Code, Ergänzungen und Hinweise wie immer gerne willkommen:

Code:

' **********************************************************************
' * Beispielcode: Das Makro sucht für die aktive Zeichnung (aktuelles
' * Blatt) das referenzierte Modell raus. Dazu wird aus den
' * Blatteigenschaften gelesen, welche Zeichenansichten das
' * referenzierte Modelle nthalten soll, STandard bedeutet einfach der
' * erste eingefügte View
' *
' * 12.11.2010 Stefan Berlitz (stefan.berlitz@solidworks.cad.de)
' * http://solidworks.cad.de
' * http://swtools.cad.de
' *
' **********************************************************************

' Konstante aus swconst.bas
Const swDocDRAWING = 3

Sub main()
   
    Dim swApp           As Object
    Dim DrawingDoc      As Object
    Dim Sheet           As Object
    Dim View            As Object
    Dim RefModelView    As String
    Dim RefModelName    As String
   

    ' an die laufende SolidWorks Sitzung anhängen
    Set swApp = Application.SldWorks
   
    ' prüfen, ob überhaupt ein Dokument offen ist ...
    Set DrawingDoc = swApp.ActiveDoc
    If DrawingDoc Is Nothing Then
        MsgBox "Kein Dokument offen"
        Exit Sub
    End If
    ' ... und ob das auch eine Zeichnung ist
    If (DrawingDoc.GetType <> swDocDRAWING) Then
        MsgBox "Nur für Zeichnungen sinnvoll"
        Exit Sub
    End If

    ' dann schauen wir mal nach dem aktuellen Blatt
    Set Sheet = DrawingDoc.GetCurrentSheet
   
    ' von dem Blatt schauen wir uns die Zeichenansicht aus, die auch für
    ' Dateieigenschaften zuständig ist
    RefModelView = Sheet.CustomPropertyView
   
    ' dann durch die Zeichenansichten durchklappern, bis der gewünschte
    ' View gefunden wurde. Dazu einfach die Namen vergleichen.
    ' "Standard" bedeutet der erste View
    Set View = DrawingDoc.GetFirstView

    ' muss für nicht deutsches Englsich angepasst werden
    If RefModelView = "Standard" Then
        ' dann brauchen wir nur auf den ersten View zu springen
        Set View = View.GetNextView
    Else
        ' ansonsten solange weiterklappern bis wir den passenden
        ' View gefunden haben
        Do While Not View Is Nothing
            ' nächste Zeichenansicht
            Set View = View.GetNextView
                       
            ' bis wir den passenden View gefunden haben
            If View.GetName2 = RefModelView Then Exit Do
        Loop
    End If
    ' so jetzt sollte die Ansicht mit dem referenzierten Modell aktiv sein
    If Not View Is Nothing Then
        RefModelName = View.GetReferencedModelName
       
        MsgBox "Referenziertes Modell dieses Blattes ist: " & vbCrLf & _
                vbCrLf & _
                RefModelName & vbCrLf & _
                vbCrLf & _
               "von Zeichenansicht" & vbCrLf & _
                vbCrLf & _
                RefModelView
       
    Else
        ' oh, dann gibt es den View nicht, leere Zeichnung?
        MsgBox "Kein referenziertes Modell gefunden, Zeichnung leer?"
    End If
       
End Sub


Ciao,
Stefan

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

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

Oberli Mike
Ehrenmitglied V.I.P. h.c.
Dipl. Maschinen Ing.



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

Beiträge: 3814
Registriert: 29.09.2004

SOLIDWORKS 2024 SP1.0
SOLIDWORKS 2023 SP5.0
SOLIDWORKS 2022 SP5.0
SOLIDWORKS 2021 SP5.1
SOLIDWORKS 2020 SP5
SOLIDWORKS 2019 SP5 (VM)

erstellt am: 12. Nov. 2010 13:00    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 StefanBerlitz 10 Unities + Antwort hilfreich

Da ich nicht der Auftraggeber war, beläuft sich meine Spende auf 10Ü's

Bei uns läuft die Abfrage so, dass man den View anwählen muss.
Hintergrund für die Anwahl ist, dass mehrere Modell auf der gleichen Zeichnung
sein können, aber nicht klar ist, welches Modell gemeint ist. Durch Löschen und neu
erzeugen von Ansichten ist zwar immer noch eindeutig, welches der älteste View ist,
allerdings ist das dem SolidWork User meistens egal.

Hier ein Ausschnitt vom Makro:

Code:

Dim swApp As Object
Dim Part As Object
Dim sPathName As String
Dim nRetVal As Long
Dim nErrors As Long
Dim nWarnings As Long
Dim bRet As Boolean
Dim retval As Boolean
Dim vSheetProps As Variant
Dim blattsize As Long
Dim SelObj As Object


Set swApp = CreateObject("SldWorks.Application")
Set Part = swApp.ActiveDoc
Set DrawingDoc = swApp.ActiveDoc

Dim swDrawModel As SldWorks.ModelDoc2
   
      PartTitle = Part.GetTitle
      Set SelMgr = Part.SelectionManager()
      Part.SelectByID "", "DRAWINGVIEW", 0, 0, 0
      Set SelObj = SelMgr.GetSelectedObject3(1)
      SelObjType = SelMgr.GetSelectedObjectType2(1)

        ModelName = SelObj.GetReferencedModelName


Gleich wie bei Stefan. Wer es verwenden kann/will/darf/soll.... darf gerne etwas spenden.

Gruss
Mike

------------------

The Power Of Dreams

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