Catia VBA : Changer le Set Géométrique d'une Entité

Comment modifier le Set Géométrique auquel appartient une entité dans Catia à l’aide de VBA, sachant que l’accès au nom du Set via hybridShapes2.Parent.Name est en lecture seule ?

La difficulté rencontrée par XGX4 concerne la modification du Set Géométrique d’une entité dans Catia via VBA. L’accès au nom du Set par hybridShapes2.Parent.Name est effectivement en lecture seule, ce qui empêche une modification directe.

Pour contourner cette limitation et changer le Set Géométrique d’une entité, la démarche consiste généralement à recréer l’entité dans le Set désiré, puis à supprimer l’entité originale.

Voici une approche étape par étape, basée sur les principes de manipulation d’objets dans l’API Catia :

  1. Identifier l’entité et son Set Géométrique actuel :

    • Utilisez hybridShapes2.Parent.Name pour obtenir le nom du Set Géométrique actuel. Cela permet de confirmer l’objet avec lequel vous travaillez.
  2. Obtenir une référence au nouveau Set Géométrique cible :

    • Vous devez d’abord accéder au document Catia (ThisDocument).
    • Naviguez ensuite dans l’arborescence du modèle pour trouver le HybridBody (qui représente un Set Géométrique) que vous souhaitez cibler.
    • Par exemple, si le nouveau Set s’appelle « MonNouveauSet » et qu’il est directement sous le Part ou Product :
      Dim oPart As Part
      Set oPart = ThisDocument.Part
      
      Dim oHybridBody As HybridBody
      ' Rechercher le nouveau set par son nom
      For Each oHybridBody In oPart.HybridBodies
          If oHybridBody.Name = "MonNouveauSet" Then
              Exit For
          End If
      Next oHybridBody
      
              If oHybridBody Is Nothing Then
          MsgBox "Le Set Géométrique 'MonNouveauSet' n'a pas été trouvé.", vbCritical
          Exit Sub
      End If
      
  3. Recréer l’entité dans le nouveau Set Géométrique :

    • C’est l’étape cruciale. Vous ne pouvez pas déplacer une entité existante. Vous devez utiliser les méthodes de création de l’API Catia pour recréer l’entité (par exemple, une ligne, un point, une courbe) en spécifiant le nouveau HybridBody comme parent.
    • La méthode exacte dépendra du type d’entité que vous manipulez. Par exemple, pour une HybridShapeFactory :
      Dim oFactory As HybridShapeFactory
      Set oFactory = oPart.HybridShapeFactory
      
      Dim oNewShape As HybridShape
      ' Exemple: Recréer une ligne
      ' Assurez-vous d'avoir les géométries de référence nécessaires (points, etc.)
      ' Set oNewShape = oFactory.AddNewLine(Point1, Point2)
      ' oHybridBody.Append oNewShape ' Ajoute la nouvelle forme au nouveau set
      
  4. Supprimer l’entité originale :

    • Une fois l’entité recréée avec succès dans le nouveau Set, vous pouvez supprimer l’entité originale du Set précédent.
    • Dim oShapeToDelete As Reference
      Set oShapeToDelete = oPart.CreateReferenceFromGeometry(hybridShapes2) ' Ou l'objet entité spécifique
      
      oPart.HybridBodies.Item(hybridShapes2.Parent.Name).HybridShapes.Remove oShapeToDelete
      ' Ou plus directement si vous avez l'objet entité
      ' oPart.HybridBodies.Item(hybridShapes2.Parent.Name).HybridShapes.Remove hybridShapes2
      
    • Attention : La suppression d’une entité peut avoir des dépendances. Assurez-vous que l’entité n’est pas utilisée par d’autres éléments du modèle avant de la supprimer, ou gérez ces dépendances.

Considérations importantes :

  • Dépendances : La recréation d’une entité peut nécessiter de référencer à nouveau les géométries de base (points, plans, etc.). Si ces géométries de base sont elles-mêmes dans des Sets qui changent, cela complique la tâche.
  • Types d’entités : La méthode de recréation varie considérablement selon le type d’entité (point, ligne, surface, feature, etc.). Il est essentiel de consulter la documentation de l’API Catia pour la méthode de création appropriée.
  • Gestion des erreurs : Implémentez une gestion robuste des erreurs (On Error Resume Next ou On Error GoTo) pour gérer les cas où les Sets ou les entités ne sont pas trouvés, ou si des dépendances empêchent la suppression.
  • Version Catia : Bien que le principe reste le même, les méthodes spécifiques de l’API peuvent légèrement évoluer entre les versions de Catia. Le message original date de 2012, donc les méthodes de Catia V5 sont pertinentes.

En résumé, le changement de Set Géométrique se fait par une opération de « copier-recréer puis supprimer », plutôt qu’un déplacement direct.