Comment créer une macro CATIA VBA pour renommer automatiquement les corps de pièce (Bodies) lors de leur création et comment attribuer un matériau à ces corps ou à la pièce principale ?
Lors de la création de pièces et de corps via une macro CATIA VBA, il est courant de vouloir attribuer des noms spécifiques et des matériaux pour une meilleure organisation et gestion des propriétés. Voici une démarche experte pour y parvenir :
1. Renommer les Corps de Pièce (Bodies) et la Pièce Principale
CATIA distingue le nom de la pièce (PartDocument) et les noms des corps (Body) qu’elle contient. Pour les renommer via VBA, utilisez les propriétés PartNumber pour la pièce et Name pour les corps.
Procédure et Code VBA :
- Déclarer les Objets Essentiels : Commencez par déclarer les variables nécessaires pour manipuler le document pièce et ses composants.
- Créer une Nouvelle Pièce : Utilisez
CATIA.Documents.Add("Part")pour instancier un nouveau document pièce. - Renommer la Pièce Principale (PartDocument) : La propriété
Product.PartNumberpermet de définir le nom affiché dans l’arbre de spécifications pour le document pièce lui-même. - Renommer le Corps Principal (PartBody) : Le premier corps créé par défaut est le
PartBody. Il est accessible viapartPiece.Part.Bodies.Item(1). Sa propriétéNamepermet de le renommer. - Créer et Renommer des Corps Supplémentaires : Utilisez
partPiece.Part.Bodies.Addpour ajouter de nouveaux corps. Chaque nouveau corps est ajouté à la collectionBodies. Vous pouvez y accéder par leur index (attention, l’index commence à 1 et correspond à l’ordre de création).
Sub CATMain()
' Déclarer une variable pour le document pièce
Dim partPiece As PartDocument
' Déclaration d'une variable pour l'itération
Dim i As Integer
' Créer une nouvelle CATPart et l'attribuer à la variable "partPiece"
Set partPiece = CATIA.Documents.Add("Part")
' Renommer la pièce principale (le document CATPart lui-même)
partPiece.Product.PartNumber = "Ma_Piece_Principale"
' Renommer le corps principal (PartBody), qui est le premier corps (index 1)
partPiece.Part.Bodies.Item(1).Name = "Corps_Principal_Renomme"
' Créer 3 nouveaux corps de pièce
For i = 1 To 3
partPiece.Part.Bodies.Add
Next i
' Renommer les corps de pièce nouvellement créés
' Les nouveaux corps auront les index 2, 3, 4, etc.
partPiece.Part.Bodies.Item(2).Name = "Corps_Secondaire_A"
partPiece.Part.Bodies.Item(3).Name = "Corps_Secondaire_B"
partPiece.Part.Bodies.Item(4).Name = "Corps_Secondaire_C"
' Mettre à jour la pièce pour que les changements soient visibles
partPiece.Part.Update
End Sub
2. Attribuer un Matériau à un Corps ou à la Pièce
L’attribution de matériaux via VBA implique l’utilisation de l’objet MaterialManager et l’accès à un catalogue de matériaux. Vous pouvez appliquer un matériau soit au document pièce entier, soit à un corps spécifique.
Procédure et Code VBA (Exemple Conceptuel) :
- Accéder au Gestionnaire de Matériaux : Récupérez l’objet
MaterialManagerdu document pièce. - Ouvrir le Catalogue de Matériaux : Spécifiez le chemin d’accès à votre fichier
.CATMaterial. - Sélectionner le Matériau : Récupérez le matériau souhaité par son nom dans le catalogue.
- Appliquer le Matériau : Utilisez la méthode
ApplyMaterialsur l’objetPart(pour la pièce entière) ou sur unBodyspécifique.
Sub AppliquerMateriau()
Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument
If partDocument1 Is Nothing Then
MsgBox "Aucun document Part actif.", vbCritical
Exit Sub
End If
Dim materialManager1 As MaterialManager
Set materialManager1 = partDocument1.Get ' Erreur ici, Get n'est pas une méthode valide pour MaterialManager
' Correction: MaterialManager est une propriété du PartDocument
Set materialManager1 = partDocument1.MaterialManager
Dim materialCatalog1 As MaterialCatalog
' Assurez-vous que ce chemin est correct pour votre installation CATIA
Dim sCatalogPath As String
sCatalogPath = "C:\Program Files\Dassault Systemes\B21\intel_a\resources\graphic\material\Catalog.CATMaterial" ' Adaptez le chemin et la version (BXX)
On Error GoTo ErrorHandler
Set materialCatalog1 = CATIA.Documents.Open(sCatalogPath)
On Error GoTo 0
If materialCatalog1 Is Nothing Then
MsgBox "Impossible d'ouvrir le catalogue de matériaux : " & sCatalogPath, vbCritical
Exit Sub
End If
Dim material1 As Material
' Nom du matériau tel qu'il apparaît dans le catalogue
Dim sMaterialName As String
sMaterialName = "Steel"
On Error GoTo ErrorHandler
Set material1 = materialCatalog1.Materials.Item(sMaterialName)
On Error GoTo 0
If material1 Is Nothing Then
MsgBox "Matériau '" & sMaterialName & "' non trouvé dans le catalogue.", vbCritical
materialCatalog1.Close
Exit Sub
End If
' Appliquer le matériau au corps principal (PartBody)
' Pour appliquer à la pièce entière, utilisez partDocument1.Part
material1.ApplyMaterial partDocument1.Part.Bodies.Item(1)
MsgBox "Matériau '" & sMaterialName & "' appliqué au corps principal.", vbInformation
' Fermer le catalogue de matériaux
materialCatalog1.Close
Exit Sub
ErrorHandler:
MsgBox "Une erreur est survenue : " & Err.Description, vbCritical
If Not materialCatalog1 Is Nothing Then materialCatalog1.Close
End Sub
Bonnes Pratiques :
- Gestion des Erreurs : Incluez toujours une gestion des erreurs (
On Error GoTo) pour les opérations de fichier ou d’accès aux objets qui peuvent échouer (ex: catalogue non trouvé, matériau inexistant). - Chemin du Catalogue : Le chemin du catalogue de matériaux (
Catalog.CATMaterial) peut varier en fonction de la version de CATIA et de l’installation. Vérifiez ce chemin sur votre système. - Index des Corps : Soyez vigilant avec les index des corps (
Item(index)). Ils dépendent de l’ordre de création. Si vous manipulez des corps existants, il est souvent plus robuste de les récupérer par leur nom si vous le connaissez, ou d’itérer sur la collectionBodies. - Mise à Jour : N’oubliez pas
partPiece.Part.Updateaprès des modifications géométriques ou structurelles importantes pour rafraîchir l’affichage et les propriétés de la pièce.