API: Een plan opslaan als pdf met een aangepaste eigenschap van een 3D-onderdeel

Hallo

Voor het PDF-opnamegedeelte gaat alles goed als de naam van het bestand dat in PDF is opgeslagen hetzelfde is als de tekening.

Helaas moet ik vandaag de macro wijzigen die perfect werkt.

Om dit te doen, moet het opgeslagen bestand, d.w.z. de PDF, worden hernoemd met behulp van een eigenschap van het onderdeel. Naam van de eigenschap RECORD.

Ik gebruik deze eigenschap al in het tekenblok, zonder enig probleem.

Maar bij het opslaan van de bestandsnaam en $PRPSHEET:"REGISTRATION" en niet EN2-A-000-12-A.

Ik weet niet of ik duidelijk ben!

Vriendelijke groeten

Hallo

Kunt u de code beschikbaar stellen voor analyse plus een screenshot van uw tekeningeigenschappen?

Vriendelijke groeten

Met deze macro wordt de sjabloon opgehaald die in de tekening is gebruikt, evenals de ingeschakelde configuratie van het onderdeel

Met de opent wordt de configuratiegerelateerde testeigenschap opgehaald

en slaat het plan op als een PDF in hetzelfde pad als het onderdeel met de eigenschapswaarde

 

in de hoop uw verzoek te hebben beantwoord

 

 

 

Optie Expliciete
Dim swApp               als SldWorks.SldWorks
Dim swModel             als SldWorks.ModelDoc2
Dim swDraw              als SldWorks.DrawingDoc
Dim cusPropMgr          As SldWorks.CustomPropertyManager
Dim swView              als SldWorks.Bekijk
Dim swModelDocExt       als SldWorks.ModelDocExtension
Dim config              as SldWorks.Configuration
Dim Nameproperties      als tekenreeks
Dim Lerrors             zo lang
Dim Lwarnings           zo lang
Dim configname          als String
Dim lRetVal             zo lang
Dim ValOut              als snaar
Dim ResolvedValOut      als tekenreeks
Dim wasOpgelost         als Booleaanse
Dim strRefModelPath     als tekenreeks
Dim NamePlan            als tekenreeks
Dim pad              als snaar


Sub hoofd()
    Stel swApp = Toepassing.SldWorks in
    Stel swModel = swApp.ActiveDoc in
    Als swModel.GetType = 3 Dan
    Stel swDraw = swModel in
    Stel swView = swDraw.GetFirstView in
    NamePlan = swModel.GetTitle
    LUS OM HET MODEL OP TE HALEN
    Doen terwijl het niet swView is niets
        strRefModelPath = swView.GetReferencedModelName 'haalt het volledige pad van het bestand op
        configname = swView.ReferencedConfiguration 'haalt de configuratie van de weergave op
        Als strRefModelPath <> "" Dan
                path = Left(strRefModelPath, InStrRev(strRefModelPath, "\") - 1) 'haalt het pad op zonder de bestandsnaam
                swApp.ActivateDoc (strRefModelPath)
                Stel swModel = swApp.ActiveDoc in
                swModel.ShowConfiguration2 (configname) geeft de planconfiguratie weer
                Set config = swModel.GetActiveConfiguration 'haalt de actieve configuratie van het onderdeel op 
                Stel cusPropMgr in = config. CustomPropertyManager
                Nameproperties = CopyCustProps("TEST") haalt de waarde op van de testeigenschap die specifiek is voor de configuratie
            Afsluiten Do
        Einde als
        Stel swView in = swView.GetNextView
    Strik

    Anders
    MsgBox "Schakel a.u.b. een tekening in", vbInformation, "Fout documenttype"
    Einde als
        Reactivering van het plan
        swApp.ActivateDoc NamePlan
        Stel swModel = swApp.ActiveDoc in
        Stel swModelDocExt = swModel.Extension in
        Definitie van de registratienoma
        NamePlan=pad&\"&Nameproperties&".pdf"
        PDF-registratie
         wasResolved = swModelDocExt.SaveAs(NamePlan, 0, swSaveAsOptions_e.swSaveAsOptions_Silent, Niets, Lerrors, Lwarnings)
Einde Sub

Functie CopyCustProps(PropertyName) als tekenreeks
lRetVal = cusPropMgr.Get5(PropertyName, False, ValOut, ResolvedValOut, wasResolved)
CopyCustProps = OpgelostValOut
Functie beëindigen

4 likes

Hallo

Zelfde verzoek als d.roger. Als de eigenschap in het plan wordt gebruikt, is het gemakkelijker om de noten van de cartouche in te lussen dan om de informatie op te halen via een weergave en de 3D die eraan is gekoppeld (zolang er verschillende aanzichten zijn met verschillende modellen eraan, wordt het al snel ingewikkeld).

Groothandel:

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 like

Hallo

Dank u voor uw antwoorden.

gdm Ik heb een foutmelding "compilatie: variabele niet gedefinieerd" met "swSaveAsOptions_e"

Natuurlijk d.roger hieronder het code gedeelte voor de registratie.

Cyril.f ja de eigenschap en gebruikt in de tekening, heb ik een notitie gemaakt met de naam van het attribuut "INFO_QUALITE05"

Stel swApp = Toepassing.SldWorks in
Deel instellen = swApp.ActiveDoc
' Controle over het juiste bestand toegevoegd
Als een deel niets is, dan
    MsgBox "Er zijn momenteel geen bestanden geopend."
    Exit Sub ' Als er momenteel geen model is geladen, sluit dan af
Einde als
' Bepaal het documenttype. Als het document een tekening is, stuur dan een bericht naar de gebruiker.
Als (Part.GetType <> 3) Dan '1Deel 2Assemblage 3Document
    MsgBox "Deze macro is alleen van toepassing op een tekening"
    Sub afsluiten
Einde als
Bestand = Deel.GetPathName
Als bestand = "" dan
    MsgBox "Deze macro vereist dat het bestand vooraf wordt opgeslagen"
    Sub afsluiten
Einde als

path = left(bestand, InStrRev(Bestand, "\"))
FileName = Part.GetCustomInfoValue("", "REGISTRATIE")

Set swModelDocExt = Deel.Uitbreiding
Stel swExportPDFData = swApp.GetExportFileData(1) in
Set swdraw = Deel
vSheetNames = swdraw. GetSheetNames
Zon i Zo lang
Zon j Zo lang
j = 0
ReDim strSheetName(UBound(vSheetNames))
Voor i = 0 Naar UBound(vSheetNames)
    Als InStr(vSheetNames(i), "Plan") <> 0 dan
        strSheetName(j) = vSheetNames(i)
        j = d + 1
    Einde als
Volgend
varSheetName = strSheetName
Als swExportPDFData niets is, dan is MsgBox "niets"
boolstatus = swExportPDFData.SetSheets(swExportData_ExportSpecifiedSheets, varSheetName)

"Bijtelling voor een deel van de eigendom
Stel swApp = Toepassing.SldWorks in
Stel swModel = swApp.ActiveDoc in
Stel swdraw in = swModel
Stel swview = swdraw in. GetFirstView (Engelstalig)
Stel swview = swview in. VolgendeView ophalen
v = SWVIEW. GetVisibleComponents
Stel comp in = v(0)
Stel swmod = comp. GetModelDoc2
Propname = swmod. GetCustomInfoNames
Set swCustPropMgr = swModel.Extension.CustomPropertyManager("")
Fouten opsporen.Afdrukken swmod. GetCustomInfoValue(config, "BESCHRIJVING")

REGISTRATIE
boolstatus = swModelDocExt.SaveAs(Pad & "\" & Bestandsnaam & "" & swmod. GetCustomInfoValue(config, "INFO_QUALITE05") & ".PDF", 0, 0, swExportPDFData, lErrors, lWarnings)


proprietes_mep.png

U moet de bijlagereferentie activeren

 

of vervang swSaveAsOptions_e.swSaveAsOptions_Silent door 1 in de code

 


ref.jpg

Bedankt gdm, het is OK voor deze passage door te vervangen door 1 in de code die ik onder Solidworks 2013 ben.

Er is nog een runtime-fout '438': Eigenschap of methode niet afgehandeld ^door dit object op het niveau van de RetVal = cusPropMgr.Get5(PropertyName, False, ValOut, ResolvedValOut, wasResolved)

Vriendelijke groeten

De Get5-functie bestond nog niet voor de 2013-versie, om te worden vervangen door Get4 en noodzakelijkerwijs moet je het aantal argumenten van de functie wijzigen !!

Bedankt d.roger het werkt beter!

Ook al begrijp ik helaas niet alles van macro, ik neem het terug als ik wat meer tijd heb.

Het doet in ieder geval zijn werk, bedankt aan jou.