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
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.
Inaczej inna propozycja, widzę, że dysponujesz narzędziami Mycad, a Integracja powinna pozwolić Ci na wykonywanie wszystkich tych funkcji bez konieczności tworzenia makra.
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
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.
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 Dlakaż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)