Salut à tous !
Dans le cadre d’une évolution des normes d’habillage SW dans l’entreprise, je me suis rendu compte que le chargement d’une nouvelle norme d’habillage n’est pas fiable : tous les calques ne sont pas présents et pir encore, les affectations ne sont pas toujours les bonnes.
J’ai donc besoin d’automatiser pas mal de choses :
-
Vérifier l’existence de chaque calque, sinon créer les manquants (certains ont des couleurs personnalisés → besoin de définir la couleur avec le code RGB
-
Vérifier les calques affectés pour chaque élément (cotes, label de position, axe de centrage, coupe, etc) dans les propriétés du document
-
Forcer le calque par défaut du document sur -Selon la norme- (à l’ouverture le calque par défaut est défini sur -Aucun-, et je souhaite le passer sur -Selon la norme-).
-
Réaffecter les éléments du plan aux bons calques
J’ai commencé avec le dernier point pour lequel j’ai vite trouvé des éléments pour m’aider sur le forum, mais je suis néanmoins bloqué :
Mon code :
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swLayerMgr As SldWorks.LayerMgr
Dim vLayerArr As Variant
Dim vLayer As Variant
Dim swLayer As SldWorks.Layer
Dim swDraw As SldWorks.DrawingDoc
Dim vSheets As Variant
Dim vSheet As Variant
Dim swView As SldWorks.View
Dim swAnn As SldWorks.Annotation
Dim swNote As SldWorks.Note
Dim swDispDim As SldWorks.DisplayDimension
Dim swGtol As SldWorks.Gtol
Dim swDatum As SldWorks.DatumTag
Dim swAnnSFSymbol As SldWorks.SFSymbol
Dim swAnnWeldSymbol As SldWorks.WeldSymbol
Dim swCtrMark As SldWorks.CenterMark
Dim swCenterLine As SldWorks.Centerline
Dim swTables As Variant
Dim swTable As Variant
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
If swModel Is Nothing Then
MsgBox "Ouvrez et/ou activez une mise en plan."
Exit Sub
End If
If swModel.GetType <> swDocumentTypes_e.swDocDRAWING Then
MsgBox "Ouvrez et/ou activez une mise en plan."
Exit Sub
End If
Set swDraw = swModel
vSheets = swDraw.GetSheetNames
For Each vSheet In vSheets
swDraw.ActivateSheet vSheet
Set swView = swDraw.GetFirstView
Set swView = swView.GetNextView
While Not swView Is Nothing
Set swCtrMark = swView.GetFirstCenterMark
While Not swCtrMark Is Nothing
Set swAnn = swCtrMark.GetAnnotation
swAnn.Layer = "Axes"
Set swCtrMark = swCtrMark.GetNext
Wend
Set swCenterLine = swView.GetFirstCenterLine
While Not swCenterLine Is Nothing
Set swAnn = swCenterLine.GetAnnotation
swAnn.Layer = "Axes"
Set swCenterLine = swCenterLine.GetNext
Wend
Set swDatum = swView.GetFirstDatumTag
While Not swDatum Is Nothing
Set swAnn = swDatum.GetAnnotation
swAnn.Layer = "Références"
Set swDatum = swDatum.GetNext
Wend
Set swGtol = swView.GetFirstGTOL
While Not swGtol Is Nothing
Set swAnn = swGtol.GetAnnotation
swAnn.Layer = "Cotes"
Set swGtol = swGtol.GetNextGTOL
Wend
Set swAnnSFSymbol = swView.GetFirstSFSymbol
While Not swAnnSFSymbol Is Nothing
Set swAnn = swAnnSFSymbol.GetAnnotation
swAnn.Layer = "État de surface"
Set swAnnSFSymbol = swAnnSFSymbol.GetNext
Wend
Set swAnnWeldSymbol = swView.GetFirstWeldSymbol
While Not swAnnWeldSymbol Is Nothing
Set swAnn = swAnnWeldSymbol.GetAnnotation
swAnn.Layer = "Soudures"
Set swAnnWeldSymbol = swAnnWeldSymbol.GetNext
Wend
Set swDispDim = swView.GetFirstDisplayDimension5
While Not swDispDim Is Nothing
Set swAnn = swDispDim.GetAnnotation
swAnn.Layer = "Cotes"
Set swDispDim = swDispDim.GetNext5
Wend
Set swView = swView.GetNextView
Wend
Next
swModel.ClearSelection2 True
Problèmes /4:
-
Set swNote = swView.GetFirstNote me permet de sélectionner les notes attachées aux vues.
Mais comment sélectionner tour à tour les notes attachées à la feuilles ? -
Quel API pour sélectionner les labels de position ?
-
Quel(s) API(s) pour sélectionner les traits et labels de coupe ?
Problèmes /3:
- J’ai essayer avec swDraw.SetCurrentLayer(« -Selon la norme- ») mais -Selon la norme- n’étant pas vraiment un claque… rien ne se passe. je me suis dit qu’il était peut-être affecté au premier index de la liste des calques mais swDraw.SetCurrentLayer(0) ne fonctionne pas non plus.
Quelqu’un aurait-il une idée ?
Pour les 2 premiers points j’ai pas encore commencer d’y regarder, mais si qqn a des éléments ou peut-être même le code qui permet de les réaliser je suis preneur !
Merci d’avance !