Ik heb een macro gemaakt om een PDF en een DWG van de open MEP in SW te genereren.
Ik maak van de gelegenheid gebruik om het gegenereerde bestand te hernoemen met naam, nummer en hint.
Voor eigenschappen in de MEP gebruik ik Revisie = swModel.CustomInfo("Revisie"), maar welke syntaxis moet ik gebruiken om een eigenschap op te halen uit de PRT of ASM waarnaar in de MEP wordt verwezen.
De macro stelt me in staat om de bestanden afzonderlijk te genereren, of om het aan te roepen met het integratiehulpprogramma om een batch bestanden te verwerken
Ik weet niet zeker of je het rechtstreeks vanuit de MEP kunt doen, maar je kunt de naam van het 3D-model waarnaar wordt verwezen vinden met de functie "GetReferencedModelName()", dit 3D-model openen, de eigenschappen noteren waarin je geïnteresseerd bent, het 3D-model sluiten en vervolgens doorgaan met je verwerking op de MEP, Dit alles natuurlijk op macroniveau.
Anders een ander voorstel, ik zie dat je de Mycad-tools hebt, en Integratie zou je in staat moeten stellen om al deze functies uit te voeren zonder dat je een macro hoeft te maken.
Ik beheers macro's niet genoeg om met het voorstel van d.roger aan de slag te gaan.
Met integratie heb ik niet gezien hoe ik pdf of dwg kan genereren. Met Batch Converter werkt het en kan ik de informatie van het onderdeel ophalen!
Maar het is een beetje omslachtig: ik moet Integration starten en vervolgens Batch Converter, en elke keer de lijst met bestanden slepen (niet mogelijk om bijvoorbeeld een lijst met bestanden op te slaan) naar elk hulpprogramma
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
Na de boolstatus moet u de waarde ValOut of ResolvedValout ophalen (afhankelijk van het gerepatrieerde veld, het tweede overeenkomt met de waarde die is ingevoerd in de kolom "Geëvalueerde waarde") in een tekenreeksvariabele en deze vervolgens samenvoegen met de registratienaam.
Ik heb niet alle variabelen gezet, je hoeft alleen maar toe te voegen wat je mist aan je macro.
Telt deze lus de verschillende aanzichten van het tekenblad of de tekenbladen? (Sheetname doet me denken aan de naam van het blad (zoals in Excel), maar het zou logisch zijn om in plaats daarvan de tekeningaanzichten te "tellen")