CATIA VBA : Renommer Corps de Pièce et Attribuer Matériau

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 :

  1. Déclarer les Objets Essentiels : Commencez par déclarer les variables nécessaires pour manipuler le document pièce et ses composants.
  2. Créer une Nouvelle Pièce : Utilisez CATIA.Documents.Add("Part") pour instancier un nouveau document pièce.
  3. Renommer la Pièce Principale (PartDocument) : La propriété Product.PartNumber permet de définir le nom affiché dans l’arbre de spécifications pour le document pièce lui-même.
  4. Renommer le Corps Principal (PartBody) : Le premier corps créé par défaut est le PartBody. Il est accessible via partPiece.Part.Bodies.Item(1). Sa propriété Name permet de le renommer.
  5. Créer et Renommer des Corps Supplémentaires : Utilisez partPiece.Part.Bodies.Add pour ajouter de nouveaux corps. Chaque nouveau corps est ajouté à la collection Bodies. 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) :

  1. Accéder au Gestionnaire de Matériaux : Récupérez l’objet MaterialManager du document pièce.
  2. Ouvrir le Catalogue de Matériaux : Spécifiez le chemin d’accès à votre fichier .CATMaterial.
  3. Sélectionner le Matériau : Récupérez le matériau souhaité par son nom dans le catalogue.
  4. Appliquer le Matériau : Utilisez la méthode ApplyMaterial sur l’objet Part (pour la pièce entière) ou sur un Body spé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 collection Bodies.
  • Mise à Jour : N’oubliez pas partPiece.Part.Update après des modifications géométriques ou structurelles importantes pour rafraîchir l’affichage et les propriétés de la pièce.