J'ai fait une macro pour générer un PDF et un DWG de la MEP ouverte dans SW.
J'en profite pour renommer le fichier généré avec nom, n° et indice.
Pour les propriétés dans la MEP, j'utilise Revision = swModel.CustomInfo("Revision"), mais quelle syntaxe dois-je utiliser pour récupérer une propriété de la PRT ou ASM qui est référencé dans la MEP.
La macro me permet de générer les fichiers à l'unité, ou de l'appeler avec l'utilitaire Intégration pour traiter un lot de fichier
Je ne suis pas sûr que tu puisses le faire en direct à partir de la MEP par contre tu peux retrouver le nom du modèle 3D référencé avec la fonction "GetReferencedModelName()", ouvrir ce modèle 3D, relever les propriétés qui t'intérressent, refermer le modèle 3D puis continuer ton traitement sur la MEP, tout ça par macro bien sûr.
Sinon autre proposition, je vois que tu as les outils Mycad, et Intégration devrait te permettre de réaliser l'ensemble de ces fonction sans avoir besoin de créeer de macro.
Je ne maitrise pas assez les macros pour me lancer avec la proposition de d.roger.
Avec Intégration, je n'ai pas vu comment générer de pdf ou dwg. Avec Batch Converter, ça marche, et je peux récupérer les infos de la pièce !
Mais c'est un peu lourd : il me faut lancer Intégration puis Batch Converter, et à chaque fois faire glisser la liste des fichiers (pas possible d'enregistrer une liste de fichiers par ex.) dans chaque utilitaire
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
A la suite du boolstatus, il faut récupérer la valeur ValOut ou ResolvedValout (en fonction du champs rappatrié, la seconde correspondant à la valeur inscrite dans la colonne "Valeur évaluée") dans uen variable de type string puis la concatenr avec le nom d'enrgeistrement.
Je n'ai pas mis toute les variables, il suffit que tu ajoutes ce qui te manque à ta macro.
Est-ce que cette boucle compte les différentes vues de la feuille de mise en plan ou les feuilles de mise en plan ? (Sheetname me fait penser au nom de la feuille (comme dans Excel), mais il serait logique de "compter" plutôt les vues de mise en plan)