Za pomocą makra z MEP chciałbym odzyskać właściwość przywoływanego PRT lub ASM

Zrobiłem makro do generowania pliku PDF i DWG otwartego MEP w oprogramowaniu.

Korzystam z okazji, aby zmienić nazwę wygenerowanego pliku na nazwę, numer i podpowiedź.

W przypadku właściwości w instalacji MEP używam Revision = swModel.CustomInfo("Revision"), ale jakiej składni powinienem użyć, aby pobrać właściwość z PRT lub ASM, do której odwołuje się instalacja.

Makro pozwala mi generować pliki pojedynczo lub wywołać je za pomocą narzędzia Integration w celu przetworzenia partii plików

 

Z góry dziękuję za odpowiedzi

Witam

Nie jestem pewien, czy możesz to zrobić bezpośrednio z MEP, ale możesz znaleźć nazwę modelu 3D, do którego się odwołujesz, za pomocą funkcji "GetReferencedModelName()", otworzyć ten model 3D, zanotować interesujące Cię właściwości, zamknąć model 3D, a następnie kontynuować przetwarzanie na MEP, Wszystko to oczywiście w skali makro.

Pozdrowienia

2 polubienia

Inaczej inna propozycja, widzę, że dysponujesz narzędziami Mycad, a Integracja powinna pozwolić Ci na wykonywanie wszystkich tych funkcji bez konieczności tworzenia makra.

1 polubienie

Dziękuję za odpowiedzi.

Nie znam makr na tyle, aby zacząć korzystać z propozycji d.rogera.

Dzięki integracji nie widziałem, jak wygenerować plik pdf lub dwg. Dzięki konwerterowi wsadowemu działa i mogę odzyskać informacje o części!

Ale jest to trochę kłopotliwe: muszę uruchomić Integrację, a następnie Batch Converter i za każdym razem przeciągać listę plików (nie jest na przykład możliwe zapisanie listy plików) do każdego narzędzia

 

Dziękuję wam obojgu i życzę miłego dnia

Witam

Około:

Dim sModelName                  As String
Dim ValOut                      As String
Dim ResolvedValOut              As String
Dim sConfigName                 As String
Dim WasResolved                 As Boolean
Dim swModelDocExt               As ModelDocExtension
Dim swCustProp                  As CustomPropertyManager

Sub main()
    
Set swApp = CreateObject("SldWorks.Application")
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
    MsgBox ("Pas de document ouvert")
    Else
        If swModel.GetType <> 3 Then
            MsgBox ("Il ne s'agît pas d'une mise en plan")
        Else
            Set swDraw = swModel
                vSheetName = swDraw.GetSheetNames
                vSheetNameArr = swDraw.GetSheetNames

                For Each vSheetName In vSheetNameArr
        
                    bRet = swDraw.ActivateSheet(vSheetName): Debug.Assert bRet
                    Set swView = swDraw.GetFirstView 'Sélectionne le fond de plan
                    Set swView = swView.GetNextView  'Passe à la vue suivante pour exclure le fond de plan
                    'Debug.Print swView.GetName2
                
                    While Not swView Is Nothing
           
                    ' Determine if this is a view of a part or assembly

                        sModelName = swView.GetReferencedModelName

                        sModelName = LCase(sModelName)
                        
                        sConfigName = swView.ReferencedConfiguration
        
                        FileConnu = False
        
                        If InStr(sModelName, "sldprt") > 0 Then
                            nDocType = swDocPART
                        ElseIf InStr(sModelName, "slasm") > 0 Then
                            nDocType = swDocASSEMBLY
                        Else
                            nDocType = swDocNONE
                            Exit Sub
                        End If
                       
                       If nDocType = 1 Or nDocType = 2 Then
                            Call Export
                       End If
        
                        Set swView = swView.GetNextView
    Wend

Next vSheetName
End If
End If
End Sub

Sub Export()
Set swModel = swApp.OpenDoc6(sModelName, nDocType, swOpenDocOptions_Silent, "", nErrors, nWarnings)
Set swModelDocExt = swModel.Extension
Set swCustProp = swModelDocExt.CustomPropertyManager(sConfigName)
boolstatus = swCustProp.Get5("Revision", False, ValOut, ResolvedValOut, WasResolved)
End Sub

 

Po boolstatus należy pobrać wartość ValOut lub ResolvedValout (w zależności od repatriowanego pola, druga odpowiada wartości wprowadzonej w kolumnie "Obliczona wartość") w zmiennej ciągu, a następnie połączyć ją z nazwą rejestracji.

Nie umieściłem wszystkich zmiennych, po prostu musisz dodać to, czego Ci brakuje do swojego makra.

1 polubienie

Super!

Będę musiał znaleźć trochę czasu, aby spróbować go dopracować...

Jednak nie do końca rozumiem tę część kodu:

vSheetName = swDraw.GetSheetNames
vSheetNameArr = swDraw.GetSheetNames
                Dla każdej nazwy arkusza vSheetName w nazwie vSheetArr
..

Następna nazwa_arkusza vSheetName

Czy ta pętla zlicza różne widoki arkusza rysunku czy arkuszy rysunków? (Nazwa arkusza przypomina mi nazwę arkusza (jak w Excelu), ale zamiast tego sensowne byłoby "policzenie" widoków rysunku)

 

Witam

Dla każdej nazwy arkusza vSheetName W polu vSheetNameArr: wszystkie arkusze na rysunku.

While Not swView is Nothing: Wszystkie widoki w arkuszu, które są analizowane.

Tak więc wszystkie widoki wszystkich arkuszy....

Pozdrowienia

Dziękuję

Tak, z drugiej strony mam taki sposób, że nie zapętlam się za nic na tym samym pliku.