API: Speichern eines Plans als PDF mit einer benutzerdefinierten Eigenschaft eines 3D-Teils

Hallo

Für den PDF-Aufnahmeteil läuft alles gut, wenn der Name der in PDF gespeicherten Datei mit der Zeichnung übereinstimmt.

Leider muss ich heute das Makro ändern, was perfekt funktioniert.

Dazu muss die gespeicherte Datei, also das PDF, anhand einer Eigenschaft des Teils umbenannt werden. Name der Eigenschaft RECORD.

Ich verwende diese Eigenschaft bereits problemlos im Zeichenblock.

Beim Speichern des Dateinamens und der $PRPSHEET:"REGISTRATION" und nicht EN2-A-000-12-A.

Ich weiß nicht, ob ich das klar bin!

Herzliche Grüße

Hallo

Können Sie den Code für die Analyse sowie einen Screenshot Ihrer Zeichnungseigenschaften zur Verfügung stellen?

Herzliche Grüße

Dieses Makro ruft die in der Zeichnung verwendete Vorlage sowie die aktivierte Konfiguration der Komponente ab

Öffnet ruft die konfigurationsbezogene Testeigenschaft ab

und speichert den Plan als PDF im selben Pfad wie die Komponente mit dem Eigenschaftswert

 

In der Hoffnung, Ihre Anfrage beantwortet zu haben

 

 

 

Option Explizit
Dim swApp               als SldWorks.SldWorks
Dim swModel             As SldWorks.ModelDoc2
Dim swDraw              As SldWorks.DrawingDoc
Dim cusPropMgr          As SldWorks.CustomPropertyManager
Dim swView              As SldWorks.View
Dim swModelDocExt       As SldWorks.ModelDocExtension
Dim-Konfiguration              als SldWorks.Configuration
Nameproperties      als Zeichenfolge dimmen
Fehler             so lange dimmen
Dimmen           Sie die Warnungen so lange
Dim configname          as String
Dim lRetVal             so lange
ValOut              als String dimmen
Dim ResolvedValOut      als Zeichenfolge
Dim wasResolved         As Boolean
Dim strRefModelPath     als Zeichenfolge
Dimmen von NamePlan            als Zeichenfolge
Pfad              als Zeichenfolge dimmen


Sub main()
    Legen Sie swApp = Application.SldWorks fest
    Festlegen von swModel = swApp.ActiveDoc
    Wenn swModel.GetType = 3 dann
    Festlegen von swDraw = swModel
    Legen Sie swView = swDraw.GetFirstView fest
    NamePlan = swModel.GetTitle
    SCHLEIFE ZUM ABRUFEN DES MODELLS
    Do While Not swView ist nichts
        strRefModelPath = swView.GetReferencedModelName 'ruft den vollständigen Pfad der Datei ab
        configname = swView.ReferencedConfiguration 'ruft die Konfiguration der Ansicht ab
        Wenn strRefModelPath <> "" dann
                path = Left(strRefModelPath, InStrRev(strRefModelPath, "\") - 1) 'ruft den Pfad ohne den Dateinamen ab
                swApp.ActivateDoc (strRefModelPath)
                Festlegen von swModel = swApp.ActiveDoc
                swModel.ShowConfiguration2 (configname) zeigt die Plankonfiguration an
                Set config = swModel.GetActiveConfiguration 'ruft die aktive Konfiguration der Komponente ab 
                Legen Sie cusPropMgr = config fest. CustomPropertyManager
                Nameproperties = CopyCustProps("TEST") ruft den Wert der Testeigenschaft ab, der für die Konfiguration spezifisch ist
            Beenden Do
        Ende, wenn
        Legen Sie swView = swView.GetNextView fest
    Schleife

    Oder
    MsgBox "Bitte aktivieren Sie eine Zeichnung", vbInformation, "Fehler beim Dokumenttyp"
    Ende, wenn
        Reaktivierung des Plans
        swApp.ActivateDoc NamePlan
        Festlegen von swModel = swApp.ActiveDoc
        Legen Sie swModelDocExt = swModel.Extension fest
        Definition des Registrierungsnomas
        NamePlan=Pfad&\"&Nameeigenschaften&".pdf"
        PDF-Registrierung
         wasResolved = swModelDocExt.SaveAs(NamePlan, 0, swSaveAsOptions_e.swSaveAsOptions_Silent, Nichts, Fehler, Warnungen)
Ende Sub

Funktion CopyCustProps(PropertyName) als Zeichenfolge
lRetVal = cusPropMgr.Get5(Eigenschaftsname, Falsch, ValOut, ResolvedValOut, wasResolved)
CopyCustProps = AufgelöstValOut
Ende-Funktion

4 „Gefällt mir“

Hallo

Gleiche Anfrage wie d.roger. Wird die Eigenschaft im Plan verwendet, ist es einfacher, die Notizen der Kartusche einzuschleifen, als die Informationen über eine Ansicht und das daran angehängte 3D abzurufen (solange verschiedene Ansichten mit unterschiedlichen Modellen angehängt sind, wird es schnell kompliziert).

Großhandel:

Const cProp =  "$PRPSHEET:""ENREGISTREMENT"""
Dim sFilename as string

Set swDraw = swModel
Set swView = swDraw.GetFirstView 'Active le fond de plan
Set swNote = swView.GetFirstNote
swModel.ClearSelection2 (True)
Do While Not swNote Is Nothing
    Set swAnn = swNote.GetAnnotation
    If swNote.PropertyLinkedText = cProp Then
        sFilename = swNote.GetText 'ajouter le traitement pour formater correctement le nom d'enregistrement
    End If
    Set swNote = swNote.GetNext
Loop


 

1 „Gefällt mir“

Hallo

Vielen Dank für Ihre Antworten.

gdm Ich habe einen Fehler "Kompilierung: Variable nicht definiert" mit "swSaveAsOptions_e"

Natürlich d.roger unterhalb des Codeteils für die Registrierung.

Cyril.f ja die Eigenschaft und in der Zeichnung verwendet, habe ich eine Notiz mit dem Namen des Attributs "INFO_QUALITE05" erstellt

Legen Sie swApp = Application.SldWorks fest
Set Part = swApp.ActiveDoc
' Kontrolle über die richtige Datei hinzugefügt
Wenn Teil nichts ist, dann
    MsgBox "Derzeit sind keine Dateien geöffnet."
    Exit Sub ' Wenn derzeit kein Modell geladen ist, dann beenden
Ende, wenn
' Bestimmen Sie die Dokumentart. Wenn es sich bei dem Dokument um eine Zeichnung handelt, senden Sie eine Nachricht an den Benutzer.
if (Part.GetType <> 3) then '1Part 2Assembly 3Document
    MsgBox "Dieses Makro gilt nur für eine Zeichnung"
    Sub beenden
Ende, wenn
Datei = Teil.GetPfadName
Wenn Datei = "" Dann
    MsgBox "Für dieses Makro muss die Datei vorher gespeichert werden"
    Sub beenden
Ende, wenn

Pfad = links(Datei, InStrRev(Datei, "\"))
Dateiname = Teil.GetCustomInfoValue("", "REGISTRIERUNG")

Festlegen von swModelDocExt = Part.Extension
Set swExportPDFData = swApp.GetExportFileData(1)
Set swdraw = Teil
vSheetNames = swdraw. GetSheetNames (Englisch)
Sonne i So lang
Sonne j So lang
j = 0
ReDim strSheetName(UBound(vSheetNames))
Für i = 0 Bis UBound(vSheetNames)
    Wenn InStr(vSheetNames(i), "Plan") <> 0 ist, dann
        strSheetName(j) = vSheetNames(i)
        j = d + 1
    Ende, wenn
Nächster
varSheetName = strSheetName
Wenn swExportPDFData nichts ist, dann msgBox "nichts"
boolstatus = swExportPDFData.SetSheets(swExportData_ExportSpecifiedSheets, varSheetName)

"Zuschlag für Teileigentum
Legen Sie swApp = Application.SldWorks fest
Festlegen von swModel = swApp.ActiveDoc
Set swdraw = swModel
Legen Sie swview = swdraw fest. GetFirstView
Setze swview = swview. GetNextView (Englisch)
v = swview. GetVisibleComponents (Englisch)
Setze comp = v(0)
Setze swmod = comp. GetModelDoc2 (Englisch)
Eigenschaftsname = swmod. GetCustomInfoNames
Set swCustPropMgr = swModel.Extension.CustomPropertyManager("")
Debug.Print swmod. GetCustomInfoValue(config, "BESCHREIBUNG")

REGISTRIERUNG
boolstatus = swModelDocExt.SaveAs(Pfad & "\" & Dateiname & "" & swmod. GetCustomInfoValue(config, "INFO_QUALITE05") & ".PDF", 0, 0, swExportPDFData, lErrors, lWarnings)


proprietes_mep.png

Sie müssen die Anhangsreferenz aktivieren

 

oder ersetzen Sie swSaveAsOptions_e.swSaveAsOptions_Silent durch 1 im Code

 


ref.jpg

Danke gdm, es ist in Ordnung für diese Passage, indem Sie durch 1 im Code ersetzen, den ich unter Solidworks 2013 habe.

Es gibt einen weiteren Laufzeitfehler '438': Eigenschaft oder Methode wird von diesem Objekt auf der Ebene von RetVal nicht ^ behandelt = cusPropMgr.Get5(PropertyName, False, ValOut, ResolvedValOut, wasResolved)

Herzliche Grüße

Die Funktion Get5 gab es in der Version 2013 noch nicht, sie soll durch Get4 ersetzt werden und Sie müssen unbedingt die Anzahl der Argumente der Funktion ändern !!

Danke d.roger es funktioniert besser!

Auch wenn ich leider nicht alles über Makro verstehe, werde ich es zurücknehmen, wenn ich etwas mehr Zeit habe.

Auf jeden Fall erfüllt es seinen Zweck, danke an Sie.