Die Erste

Ich möchte von einem Drawing Dokument ein PDF speichern, jedoch mit dem Revisionsindex der gezeichneten Komponente, also mit dem Revisionsindex der Baugruppe oder des Teils, welches auf der Zeichnung dargestellt wurde.

Können Sie mir einen Tipp geben?

{Solution1}

<pre class="wp-block-syntaxhighlighter-code">Option Explicit
Sub main()
    Dim swApp As SldWorks.SldWorks
    Set swApp = Application.SldWorks
    
    Dim swModelDoc As ModelDoc2
    Set swModelDoc = swApp.ActiveDoc
    
    Dim names As Variant
    names = swApp.GetDocumentDependencies2(swModelDoc.GetPathName, False, True, False)
    
    Dim docType As swDocumentTypes_e
    If Right(names(1), 6) = "SLDPRT" Then
        docType = swDocPART
    ElseIf Right(names(1), 6) = "SLDASM" Then
        docType = swDocASSEMBLY
    End If
    
    Dim nErrors As Long
    Dim nWarnings As Long
    
    Dim swDepModelDoc As ModelDoc2
    Set swDepModelDoc = swApp.OpenDoc6(names(1), docType, swOpenDocOptions_Silent, "", nErrors, nWarnings)
    
    Dim swCustPropMgr As CustomPropertyManager
    Set swCustPropMgr = swDepModelDoc.Extension.CustomPropertyManager("")
    
    Dim valOut As String
    Dim resValOut As String
    swCustPropMgr.Get6 "Revision", False, valOut, resValOut, False, False
    
    Debug.Print valOut
    Debug.Print resValOut
    
End Sub</pre>
Code-Sprache: VB.NET (vbnet)

{Solution2}

<pre class="wp-block-syntaxhighlighter-code">Option Explicit
Sub main()
    Dim swApp As SldWorks.SldWorks
    Set swApp = Application.SldWorks
    
    Dim swModelDoc As ModelDoc2
    Set swModelDoc = swApp.ActiveDoc
    
    Dim swDrawingDoc As DrawingDoc
    Set swDrawingDoc = swModelDoc
    Dim swView As View
    Set swView = swDrawingDoc.GetFirstView
    Set swView = swView.GetNextView
    Dim refModelName As String
    refModelName = swView.GetReferencedModelName
    
    Debug.Print refModelName
    
    Dim docType As swDocumentTypes_e
    If Right(refModelName, 6) = "SLDPRT" Then
        docType = swDocPART
    ElseIf Right(refModelName, 6) = "SLDASM" Then
        docType = swDocASSEMBLY
    End If
    
    Dim nErrors As Long
    Dim nWarnings As Long
    
    Dim swDepModelDoc As ModelDoc2
    Set swDepModelDoc = swApp.OpenDoc6(refModelName, docType, swOpenDocOptions_Silent, "", nErrors, nWarnings)
    
    Dim swCustPropMgr As CustomPropertyManager
    Set swCustPropMgr = swDepModelDoc.Extension.CustomPropertyManager("")
    
    Dim valOut As String
    Dim resValOut As String
    swCustPropMgr.Get6 "Revision", False, valOut, resValOut, False, False
    
    Debug.Print valOut
    Debug.Print resValOut
    
End Sub</pre>
Code-Sprache: VB.NET (vbnet)

Kommentare 4

  • Guten Tag Herr Hornemann

    Bestimmt erinnern Sie sich, ich bin der „Verursacher“ der obigen Beispiele zu „Zuschauerfrage die Erste“.

    Ihren Code habe ich nach unserem Zoom Meeting zu unten stehendem Makro zusammengeschusstert und verwende dieses bereits einige Zeit.
    Es funktioniert eigentlich ganz gut, aber mit Vorbehalt für konfigurierte Komponenten, falls ich z.B. den die „Beschreibung“ für jede Konfiguration ändert.
    Das Makro holt sich via Zeichnungsansicht die „Beschreibung“ der Komponente aus den „Benutzerspezifischen“ Eigenschaften.
    Damit jeweils die Konfigurationsspezifische Eigenschaft gelesen wird, setze ich in den Benutzerspezifischen Eigenschaften für „Beschreibung“ den Wert $PRP:“Beschreibung“ ein. So wird bei aktuell gespeicherter Datei, der konfigurationsspezifische Wert für „Beschreibung“ in den Benutzerspezifischen Eigenschaften hinterlegt und für das PDF als Beschreibung in den Dateinamen übernommen.

    Das Problem liegt nun dabei, dass dieser Wert nur dann der gewünschten Konfiguration entspricht, wenn die Komponente im Hintergrund geöffnet ist und auf den entsprechenden Konfiguration gespeichert wurde.
    Falls eine andere Konfiguration gespeichert ist, erscheint die Beschreibung dieser anderen Konfiguration im Dateinamen des PDF.

    Bisher habe ich mir so geholfen, dass ich jeweils vor dem Speichern des PDF:
    > via rechte Mausklick auf die Zeichnungsansicht, die Komponente öffnen (sie öffnet auf der entsprechenden Konfiguration)
    > speichern der Komponente mit aktueller Konfiguration,
    > anschliessend mit dem Makro unten das PDF erstellen.

    das ist fehleranfällig und zeitaufwendig.

    Können Sie mir zeigen, wie ich das Makro erweitern/verbessern kann, damit dieses das Speichern der Komponente in der zur Zeichnungsansicht verknüpften Konfiguration automatisch (z.B. silent) ausführt?

    Oder vielleicht direkt den Wert für „Beschreibung“ aus der Konfigurationsspezifischen Eigenschaften liesst?

    Ich danke bereits im Voraus.
    Freundliche Grüsse
    Pius Bühlmann

    aktuelles Makro:

    ‚Aus Hornemann „Folge 9″**************
    ‚************************************

    Option Explicit

    Sub main()
    Dim swApp As SldWorks.SldWorks
    Set swApp = Application.SldWorks

    Dim swModel As ModelDoc2
    Set swModel = swApp.ActiveDoc

    If swModel Is Nothing Then
    swApp.SendMsgToUser „Kein Dokument geladen.“
    Exit Sub
    End If

    Dim Errors As Long
    Dim Warnings As Long
    Dim FullName As String
    Dim ReturnValue As Boolean

    FullName = swModel.GetPathName

    Dim laenge As Integer
    laenge = Len(FullName)

    Debug.Print „Fullname: “ & FullName
    Debug.Print „Fullname Länge: “ & laenge
    ‚***********************************************************************************
    ‚Einschub aus Hornemann „Zuschauerfrage die Erste“

    Dim swModelDoc As ModelDoc2
    Set swModelDoc = swApp.ActiveDoc
    Dim names As Variant
    names = swApp.GetDocumentDependencies2(swModelDoc.GetPathName, False, True, False)

    Dim docType As swDocumentTypes_e
    If Right(names(1), 6) = „SLDPRT“ Then
    docType = swDocPART
    ElseIf Right(names(1), 6) = „SLDASM“ Then
    docType = swDocASSEMBLY
    End If

    Dim nErrors As Long
    Dim nWarnings As Long

    Dim swDepModelDoc As ModelDoc2
    Set swDepModelDoc = swApp.OpenDoc6(names(1), docType, swOpenDocOptions_Silent, „“, nErrors, nWarnings)

    Dim swCustPropMgr As CustomPropertyManager
    Set swCustPropMgr = swDepModelDoc.Extension.CustomPropertyManager(„“)

    Dim valREV As String
    Dim resValREV As String
    swCustPropMgr.Get6 „Revision“, False, valREV, resValREV, False, False

    Dim valBeschreibung As String
    Dim resBeschreibung As String
    swCustPropMgr.Get6 „Beschreibung“, False, valBeschreibung, resBeschreibung, False, False

    ‚***********************************************************************************
    FullName = Left(FullName, laenge – 7) & „-“ & resValREV & „_“ & resBeschreibung & „.pdf“

    Debug.Print „Fullname: “ & FullName

    Dim swExportPdfData As ExportPdfData
    Set swExportPdfData = swApp.GetExportFileData(swExportDataFileType_e.swExportPdfData)

    swExportPdfData.ViewPdfAfterSaving = True
    ReturnValue = swExportPdfData.SetSheets(swExportDataSheetsToExport_e.swExportData_ExportCurrentSheet, „“)

    Dim sheetNames(13) As String
    sheetNames(0) = „Blatt1“
    sheetNames(1) = „Blatt2“
    sheetNames(2) = „Blatt3“
    sheetNames(3) = „Blatt4“
    sheetNames(4) = „Blatt5“
    sheetNames(5) = „Blatt6“
    sheetNames(6) = „Blatt7“
    sheetNames(7) = „Blatt8“
    sheetNames(8) = „Blatt9“
    sheetNames(9) = „Blatt10“
    sheetNames(10) = „Blatt11“
    sheetNames(11) = „Blatt12“
    sheetNames(12) = „Blatt13“

    Dim varSheetNames As Variant
    varSheetNames = sheetNames

    ReturnValue = swExportPdfData.SetSheets(swExportDataSheetsToExport_e.swExportData_ExportSpecifiedSheets, varSheetNames)

    ReturnValue = swModel.Extension.SaveAs3(FullName, swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, swExportPdfData, Nothing, Errors, Warnings)

    Debug.Print „Errors: “ & Errors
    Debug.Print „Warnings: “ & Warnings
    Debug.Print „Return Value: “ & ReturnValue

    End Sub

    • Hallo Herr Bühlmann,
      ich erinnere mich sehr gut daran.
      Die Lösung ist sehr einfach. Allerdings empfehle ich Ihnen meine Solution 2 zu wählen, weil dafür nur eine sehr kleine Änderung notwendig ist. Sie müssen dann nur Zeile 36 von
      Set swCustPropMgr = swDepModelDoc.Extension.CustomPropertyManager(„“)
      auf
      Set swCustPropMgr = swDepModelDoc.Extension.CustomPropertyManager(swView.ReferencedConfiguration)
      ändern und schon wird die Konfigurationsinformation ausgelesen.
      Meine Solution 1 gibt das in dieser Kürze nicht her.
      Sollten Sie noch weitere Fragen haben, können Sie mich seit Neustem auch auf meinem Discord antreffen.
      https://discord.gg/3H6QpMeTP3

      Beste Grüße
      Bernd Hornemann

  • Guten Tag Herr Hornemann,

    ich versuche, in Solidworks Premium 2020 bereits angelegten Sensoren automatisch abzufragen und deren Werte in csv Dateien automatisch abzuspeichern. Ich habe es mit der integrierten Makrosaufnahme versucht. Leider wird die Sequenz „Sensorabfrage“ nicht berücksichtigt (die Makroschaltfläche, die normalerweise während der Aufnahme aktiv ist, ist während der Sensorabfrage grau). Hätten Sie einen Tip, wie diese Problematik gelöst werden kann?

    Beste Grüße
    Lionel Carré

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert