API: Zapisywanie planu w formacie PDF z niestandardową właściwością części 3D

Witam

W przypadku części do nagrywania PDF wszystko idzie dobrze, jeśli nazwa pliku zapisanego w PDF jest taka sama jak rysunek.

Niestety dzisiaj muszę zmienić makro, które działa idealnie.

W tym celu należy zmienić nazwę zapisanego pliku, tj. pliku PDF, za pomocą właściwości części. Nazwa właściwości RECORD.

Używam już tej właściwości w bloku rysunkowym, bez żadnego problemu.

Ale przy zapisywaniu nazwy pliku i $PRPSHEET:"REGISTRATION", a nie EN2-A-000-12-A.

Nie wiem, czy mam jasność!

Pozdrowienia

Witam

Czy możesz udostępnić kod do analizy wraz ze zrzutem ekranu właściwości rysunku?

Pozdrowienia

To makro pobiera szablon użyty w rysunku, a także włączoną konfigurację komponentu

Otwarcie pobiera właściwość testową związaną z konfiguracją

i zapisuje plan jako plik PDF w tej samej ścieżce, co komponent z wartością właściwości

 

Mam nadzieję, że odpowiedziałem na Twoją prośbę

 

 

 

Opcja jawna
Dim swApp               jako SldWorks.SldWorks
Dim swModel             As SldWorks.ModelDoc2
Dim swDraw              jako SldWorks.DrawingDoc
Dim cusPropMgr          As SldWorks.CustomPropertyManager
Dim swView              As SldWorks.View
Dim swModelDocExt       As SldWorks.ModelDocExtension
Przyciemnij konfigurację              jako SldWorks.Configuration
Dim namewłaściwości      jako ciąg
Ciemne błędy             tak długo
Przyćmione ostrzeżenia           tak długo
Dim configname          jako ciąg
Dim lRetVal             tak długo
Dim ValOut              As String (Ciąg sygnałowy)
Dim ResolvedValOut      As String
Dim wasResolved         As Boolean
Dim strRefModelPath As String (Ciąg     znaków)
Dim NamePlan            As Ciąg
Przyciemnij ścieżkę              jako ciąg


Sub main()
    Ustaw swApp = Application.SldWorks
    Ustaw swModel = swApp.ActiveDoc
    Jeśli swModel.GetType = 3, to
    Ustaw swDraw = swModel
    Ustaw swView = swDraw.GetFirstView
    NamePlan = swModel.GetTitle
    PĘTLA, ABY POBRAĆ MODEL
    Zrób Póki Nie SwView To Nic
        strRefModelPath = swView.GetReferencedModelName 'pobiera pełną ścieżkę do pliku
        configname = swView.ReferencedConfiguration 'pobiera konfigurację widoku
        Jeśli strRefModelPath <> "" , to
                path = Left(strRefModelPath, InStrRev(strRefModelPath, "\") - 1) 'pobiera ścieżkę bez nazwy pliku
                swApp.ActivateDoc (strRefModelPath)
                Ustaw swModel = swApp.ActiveDoc
                swModel.ShowConfiguration2 (configname) wyświetla konfigurację planu
                Set config = swModel.GetActiveConfiguration 'pobiera aktywną konfigurację komponentu 
                Ustaw cusPropMgr = config. CustomPropertyManager
                Nameproperties = CopyCustProps("TEST") pobiera wartość właściwości testu, która jest specyficzna dla konfiguracji
            Wyjdź z Do
        Zakończ jeżeli:
        Ustaw swView = swView.GetNextView
    Pętla

    Inaczej
    MsgBox "Proszę włączyć rysunek", vbInformation, "Błąd typu dokumentu"
    Zakończ jeżeli:
        Ponowna aktywacja planu
        swApp.ActivateDoc NamePlan
        Ustaw swModel = swApp.ActiveDoc
        Ustaw swModelDocExt = swModel.Extension
        Definicja nazwy rejestracyjnej noma
        NamePlan=ścieżka&\"&WłaściwościNazwy&".pdf"
        Rejestracja w formacie PDF
         wasResolved = swModelDocExt.SaveAs(NamePlan, 0, swSaveAsOptions_e.swSaveAsOptions_Silent, Nothing, Lerrors, Lwarnings)
Koniec subwoofera

Funkcja CopyCustProps(PropertyName) jako ciąg znaków
lRetVal = cusPropMgr.Get5(PropertyName, False, ValOut, ResolvedValOut, wasResolved)
CopyCustProps = ResolvedValOut
Zakończ funkcję

4 polubienia

Witam

Taka sama prośba jak d.roger. Jeśli właściwość jest używana w planie, łatwiej jest zapętlić notatki kartusza niż pobrać informacje za pomocą widoku i dołączonego do niego 3D (tak długo, jak istnieją różne widoki z dołączonymi różnymi modelami, szybko się komplikuje).

Hurt:

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 polubienie

Witam

Dziękuję za odpowiedzi.

gdm Mam błąd "kompilacja: zmienna nie zdefiniowana" z "swSaveAsOptions_e"

Oczywiście d.roger poniżej części kodu do rejestracji.

Cyril.f tak właściwość i użyta na rysunku, utworzyłem notatkę z nazwą atrybutu "INFO_QUALITE05"

Ustaw swApp = Application.SldWorks
Ustaw część = swApp.ActiveDoc
' Dodano kontrolę nad poprawnym plikiem
Jeśli część jest niczym, to
    MsgBox "Żadne pliki nie są obecnie otwarte."
    Wyjdź Sub ' Jeśli żaden model nie jest aktualnie załadowany, wyjdź
Zakończ jeżeli:
' Określ typ dokumentu. Jeśli dokument jest rysunkiem, wyślij wiadomość do użytkownika.
If (Part.GetType <> 3) then '1Part 2Assembly 3Document
    MsgBox "To makro ma zastosowanie tylko do rysunku"
    Wyjdź z subwoofera
Zakończ jeżeli:
Plik = Part.GetPathName
if plik = "" to
    MsgBox "To makro wymaga wcześniejszego zapisania pliku"
    Wyjdź z subwoofera
Zakończ jeżeli:

ścieżka = left(plik, InStrRev(Plik, "\"))
FileName = Part.GetCustomInfoValue("", "REJESTRACJA")

Ustaw swModelDocExt = Part.Extension
Ustaw swExportPDFData = swApp.GetExportFileData(1)
Ustaw swdraw = Część
vSheetNames = swdraw. GetSheetNames (Nazwy arkuszy)
Słońce i tak długo
Słońce j tak długo
j = 0
ReDim strSheetName(UBound(vSheetNames))
Dla i = 0 Do UBound(vSheetNames)
    Jeśli InStr(vSheetNames(i), "Plan") <> 0, to
        strSheetName(j) = vSheetNames(i)
        j = d + 1
    Zakończ jeżeli:
Następny
varSheetName = strSheetName
Jeśli swExportPDFData to nic, to MsgBox "nic"
boolstatus = swExportPDFData.SetSheets(swExportData_ExportSpecifiedSheets, nazwa_zmiennej_arkusza)

'Dodawanie do właściwości części
Ustaw swApp = Application.SldWorks
Ustaw swModel = swApp.ActiveDoc
Ustaw swdraw = swModel
Ustaw swview = swdraw. Pobieranie pierwszego widoku
Ustaw swview = swview. GetNextView (Pobieranie następnego)
v = swview. GetVisibleComponents (PobieranieWidocznych)
Ustaw kompozycję = v(0)
Ustaw swmod = komp. Pobierz dokument ModelDoc2
Nazwa produktu = swmod. GetCustomInfoNames (DostaćCustomInfoNames)
Ustaw swCustPropMgr = swModel.Extension.CustomPropertyManager("")
Debug.Print swmod. GetCustomInfoValue(config, "OPIS")

REJESTRACJA
boolstatus = swModelDocExt.SaveAs(Ścieżka & "\" & Nazwa pliku & "" & swmod. GetCustomInfoValue(config, "INFO_QUALITE05") & ".PDF", 0, 0, swExportPDFData, lErrors, lWarnings)


proprietes_mep.png

Musisz aktywować odniesienie do załącznika

 

lub zamień swSaveAsOptions_e.swSaveAsOptions_Silent na 1 w kodzie

 


ref.jpg

Dziękuję gdm, jest OK dla tego fragmentu, zastępując go przez 1 w kodzie, w którym jestem pod Solidworks 2013.

Istnieje inny błąd w czasie wykonywania "438": Właściwość lub metoda nie jest obsługiwana ^przez ten obiekt na poziomie RetVal = cusPropMgr.Get5(PropertyName, False, ValOut, ResolvedValOut, wasResolved)

Pozdrowienia

Funkcja Get5 nie istniała jeszcze w wersji 2013, ma zostać zastąpiona przez Get4 i koniecznie trzeba zmienić liczbę argumentów funkcji !!

Dziękuję d.roger, działa lepiej!

Nawet jeśli niestety nie rozumiem wszystkiego w makro, wrócę do niego, gdy będę miał trochę więcej czasu.

W każdym razie spełnia swoje zadanie, dziękuję ci.