Quel code VB.Net utiliser pour créer des paramètres utilisateurs dans CATIA depuis l’extérieur ?

Si vous créez un programme pilotant CATIA V5, il est possible que vous ayez à ajouter un paramètre utilisateur à l’arbre des spécifications.

Voici en guise d’exemple un petit programme permettant:

  • dans un premier temps de choisir le type, le nom et la valeur d’un paramètre dans une boite de dialogue
  • puis de créer le paramètre dans CATIA.
Catia V5 - Windows form VB.Net création paramètres

Création de paramètres utilisateur Catia en VB.Net

La petite application donnée avec cet article n’a pas d’autre intérêt que d’illustrer ces propos et vous permettre d’essayer ces lignes de code sans avoir à les taper.

Dans la suite, je vous fais le détail de la partie utile du code, c’est à dire ce qui vous permettra d’ajouter le paramètre. Je vous épargne les dizaines de lignes liées à la logique d’activation des boutons, etc…

Un mot sur l’interface

Si vous souhaitez télécharger ce petit programme bricolé par mes soins, je dois vous en expliquer la logique avant que vous ne le lanciez.

Tout d’abord, au lancement, ce dernier vérifie la présence de CATIA et, si il est absent, le démarre tout simplement. Cela prend le temps habituel du lancement de Catia. Il faut donc patienter un peu.
La boite de dialogue apparaît.
Lorsque Catia est présent dans votre session Windows, il vérifie si le document actif est une Catpart et si ce n’est pas le cas, il en crée une nouvelle.

Catia V5 VB.Net - creation de paramètre utilisateur interface

A partir de là, vous pouvez remplir les champs et créer un paramètre utilisateur.
Bon, vous ne pourrez pas créer des paramètres de tous les types car il y a en a beaucoup trop et je ne les ai pas tous mis dans la liste de choix déroulant.

Dans un premier temps: choix du type de paramètre !

Catia V5 VB.Net - creation de paramètre utilisateur interface type choix

Prenons angle par exemple en dépliant la Combobox.

Vous voyez que:

  • Devant la ligne, KO (en rouge) est devenu OK (en vert) car vous avez choisi un type de paramètre.
  • L’unité actuelle de Catia V5 pour les angles est Degré (et non Radian).
  • Que le champ Valeur est en défaut car la valeur doit être un nombre entier ou décimal
  • Que le bouton « Créer Paramètre » n’est pas activé
Catia V5 VB.Net - creation de paramètre utilisateur interface type choix unité catia

J’ai ajouté l’information “Unité actuelle” pour ne pas se tromper sur la valeur que l’on entre par la suite.
En effet, si vous rentrez, par exemple, comme valeur 10 en pensant 10mm et que l’unité de Catia est le mètre, vous obtiendrez une valeur de 10m et pas 10mm comme vous le souhaitiez.

Si l’on rempli bien les champs, on doit avoir des OK verts à chaque ligne et le bouton « Créer Paramètre » doit être actif.

On peut alors cliquer dessus et le paramètre se crée dans Catia (magique !)

Catia V5 VB.Net - creation de paramètre utilisateur interface création du paramètre

Vous pouvez alors changer de type et en créer un autre du moment que la valeur est cohérente avec le type.

Exemple : Entier –> pas de chaîne et pas de nombre décimal

De tout façon, le programme vérifie tout ça.

Comment ça marche ? – Le code

D’un point de vue purement Catia, deux choses doivent avoir attiré votre attention:

  • Mais comment fait-il pour savoir que l’angle est bien en degré et que les longueurs sont en mm dans les réglages de Catia ?
  • C’est quoi finalement le code derrière le bouton pour créer le paramètre ?

Explications ci-dessous, c’est parti !

Récupération des unités de Catia V5 en VB.Net

Le réglage des unités dans Catia V5 se fait dans « Outil / options / Paramètres et mesures / Unités« .

Catia V5 VB.Net - creation de paramètre utilisateur interface outil option unité

Heureusement, il existe, dans les méthodes Visual Basic, le nécessaire pour interagir avec ces réglages (lecture et écriture).
ici, dans l’application, nous n’allons que lire les réglages pour en sortir les unités des différents types.
Ne vous inquiétez pas pour vos Catsettings.
Exemple ci-dessous pour une longueur:

Dim CATIA As INFITF.Application
        CATIA = GetObject(, "CATIA.Application") 'Recupère l'appli Catia

        Dim SettingsControllers1 As INFITF.SettingControllers = CATIA.SettingControllers 'Définit l'objet Options

        Dim unitsSheetSettingAtt1 As INFITF.SettingController = SettingsControllers1.Item("CATLieUnitsSheetSettingCtrl") 'Définit l'objet onglet unités

        ' Extraction de l'unité du type

        Dim bSTR1 As String
        bSTR1 = "LENGTH" 'Correspond à la grandeur recherchée
        Dim bSTR2 As String
        bSTR2 = ""  'Correspond à l'unité recherchée

        'Correspond aux réglages d'affichage (nombre de chiffres)
        Dim double1 As Double
        Dim double2 As Double

        unitsSheetSettingAtt1.GetMagnitudeValues(bSTR1, bSTR2, double1, double2) 'Récupère les valeurs de la ligne d'option correspondant aux critères

        'print de l'unité actuelle de Catia dans le texte LabelUnit.

        LabelUnite.Text = bSTR2

Ce qui nous intéresse ici se trouve sous l’espace de nom INFITF qu’il ne faut pas oublier d’importer en début de code comme ceci:

Imports INFITF  'pour les documents, les fichiers, l'accès au système d'exploitation

J’ai commenté les différentes lignes pour vous montrer les différentes étapes mais la logique de construction est assez simple et proche de ce que nous faisons manuellement pour visualiser l’option dans “Outil / options”.

Un objet correspondant à l’ensemble des options est d’abord construit puis un objet correspondant à l’onglet qui nous intéresse (Onglet Unités) comme étant l’item répondant au nom « CATLieUnitsSheetSettingCtrl« .

Ce genre d’appellation est difficile à « intuiter ». Fort heureusement l’enregistreur de macro me l’a donnée en code VB6. Il m’a fallu récrire ensuite tout cela en VB.Net.

L’onglet “Unités” étant désigné, il faut maintenant rechercher la ligne qui nous intéresse.

Cela se fait avec « GetMagnitudeValues » dont les arguments de type “String”correspondent aux colonnes “grandeurs” et “unités”.

Catia V5 VB.Net - creation de paramètre utilisateur interface outil option unité

Il suffit alors de faire l’opération suivante pour interroger la ligne de la grandeur “Longueur”.

unitsSheetSettingAtt1.GetMagnitudeValues(“LENGTH”, bSTR2 , double1, double2)

avec double1 et double2 des Doubles dont on n’a pas défini la valeur et bSTR2 une chaîne de caractère vide.

En retour, « unitsSheetSettingAtt1 » nous livrera dans bSTR2 l’unité attendue, c’est à dire “Millimètre” que l’on pourra montrer à l’utilisateur ici avec un Label sur la WindowsForm.

Le code pour créer un paramètre depuis l’extérieur

Une nouvelle fois, il est nécessaire d’importer la bibliothèque suivante pour avoir accès aux fonctionnalités de Knowledge. Les paramètres si simples soient-ils sont bien du ressort de Knowledge.

Imports KnowledgewareTypeLib 'Classe Knowledge pour les paramètres et formules

Voici maintenant le code pour créer un paramètre utilisateur de type “dimension” (longueur, angle,…)
La valeur à mettre dans le paramètre est en fait initialement un texte puisque entré dans une TextBox.
Il faut donc la transformer en Double pour être compatible avec la méthode « CreateDimension » de Catia.

je vous donne un bout de code récupéré sur le net permettant de convertir à coup sûr les nombres dont le séparateur décimal est “,” ou “.” – Ne me demandez pas comment cela fonctionne.

Dim ciClone As CultureInfo = CType(CultureInfo.InvariantCulture.Clone(), CultureInfo)
        ciClone.NumberFormat.NumberDecimalSeparator = "."

Comme je suis en France, mon système d’exploitation est réglé de telle façon que mon séparateur décimal est une virgule.
Si je donne un texte comme “14.24” (avec un point) la fonction « Convert.ToDouble » ne fonctionne pas.
Grâce à cette astuce, je peux fournir indifféremment14.24” ou “14,24” et cela transforme correctement le texte en Double.

Dim CATIA As INFITF.Application
        CATIA = GetObject(, "CATIA.Application") 'Recupère l'appli Catia

        Dim ciClone As CultureInfo = CType(CultureInfo.InvariantCulture.Clone(), CultureInfo)
        ciClone.NumberFormat.NumberDecimalSeparator = "."

        Dim partDocument1 As MECMOD.PartDocument = CATIA.ActiveDocument  ‘ le document actif

        Dim Part1 As MECMOD.Part = partDocument1.Part   ‘Le doc actif est de type part

        Dim parameters1 As Parameters = Part1.Parameters ‘ le Groupe de paramètres de la part

        Dim DimParam1 As Parameter = parameters1.CreateDimension("", "Length", 0) ‘on crée un objet paramètre de type dimension longueur sans nom et de valeur 0

        DimParam1.Rename(TextBoxNomParam.Text) ‘on renomme le paramètre avec le nom dans la TextBoxNomParam

        DimParam1.Value = Convert.ToDouble(TextBoxValeur.Text, ciClone) ‘On donne une valeur au paramètre par conversion du texte présent dans la TextBoxValeur

        Part1.Update()

Les explications sont dans le code mais il faut savoir qu’il existe une méthode par type de paramètre, par exemple:

  • parameters1.CreateReal(«  », 0)    pour les réels
  • parameters1.CreateInteger(«  », 0)    pour les entiers
  • parameters1.CreateString(«  », «  »)   pour les textes
  • Etc…

Avec comme point commun un premier argument qui est le nom du paramètre.

Conclusion

Ces petits bouts de code VB.Net  vous seront peut-être utiles si vous vous lancez dans la programmation pour Catia V5.
Le chemin n’est pas toujours facile pour convertir le code VB6. Dans cet exemple, j’ai eu la chance d’avoir une ligne directrice grâce à l’enregistreur de macro.
Je vous laisse essayer la petite application cela vous inspirera peut-être.
Si vous avez aimé cet article, signalez-le (like, partage, commentaire…), c’est sympa  😉

La petite application à télécharger

6 Responses

  1. Bonjour,

    J’ai trouvé ce blog en cherchant des informations sur les paramètres dans CATIA justement. J’ai commencé à fouiner un peu, bravo c’est très bien fait et très utile, en plus c’est en français.
    En plus des bases, je maitrise les ateliers DMU Kinematics et les ateliers de Machining.
    J’ai modélisé une locomotive à vapeur dont la distribution est entièrement fonctionnelle. Elle peut se déplacer sur ses rails également.
    Pour un autre projet, je cherche à (re)dimensionner des pièces assemblées, dans un CATProduct, partageant des dimensions communes à l’aide de paramètres (justement) qui seraient ajoutés dans le CATProduct. Je veux qu’à la modification du paramètre dans le CATProduct que toutes les CATPart soient impactées. J’ai essayé la « Publication » de paramètre afin de voir s’il était disponible dans les CATPart, mais cela ne fonctionne pas.
    Une idée peut être ?
    Bien cordialement.

    • Bonjour Patrick,
      Merci pour votre commentaire.
      Je suis toujours content d’échanger avec des passionnés.
      Vous êtes équipé en machines numériques, quel plaisir !
      Pour votre problème, je viens de faire un essai. Cela fonctionne à mon avis sous certaines conditions.
      J’ai d’abord créé une session avec une Product et une Part enfant de cette Product.
      Dans la Part, j’ai créé un cube avec une cote de l’esquisse pilotée par un paramètre utilisateur (type longueur).
      Dans la Product, j’ai créé un paramètre utilisateur de même grandeur (type longueur) avec une valeur différente.
      Depuis la Product (niveau bleu actif), je lance l’outil Formule (Fx), je montre le paramètre utilisateur de la Part et je clique sur « Ajouter Formule » et je désigne le paramètre utilisateur de la product, cela rempli l’égalité de la formule. Et génère la mise à jour.
      Vous avez vu, je crée la formule depuis l’environnement Product. Dans ce cas le paramètre utilisateur de la Part est bien verrouillé par une formule. Mais vous ne pouvez pas supprimer la formule depuis la Catpart. Un message vous indique que la formule appartient à un autre document (ici la product).
      Dans l’autre sens cela fonctionne aussi. J’ai réussi à faire cette égalité depuis la Catpart en éditant le paramètre. Je crée une formule (niveau bleu actif sur la part) en désignant ce coup-ci le paramètre de la Product pour l’égalité. Un message m’indique « Confirmez vous le lien avec une référence externe ? » car j’ai une option active pour me prévenir.
      Dans mon cas, dans les options sous « Infrastructure / Infrastructure Part / Général » j’ai décoché « Restreindre la sélection externe aux éléments publiés » et coché « Garder le lien avec l’objet sélectionné ».
      Je pense que cela vient d’un de ces réglages.

      Outil/option/Infrastructure/InfrastructurePart - Catia V5

  2. Bonjour,

    Merci pour la réponse rapide et documentée.
    C’était bien un problème lié au choix « Garder le lien avec l’objet sélectionné », j’ai coché cette case et refait les liens dans les CATParts, et tout fonctionne parfaitement. Je modifie le paramètre dans le CATProduct et toutes les CATParts dépendantes de ce paramètre sont modifiées.
    Je n’ai rien touché au CATProduct, les CATParts ne sont pas des enfants du Product. Cela veut dire que les liens entre paramètres, équivalences et équations peuvent être crées à n’importe quel moment.
    Y a t’il un moyen d’inclure des copies d’écran aux questions/réponses ?
    Encore merci.

    • Bonsoir Patrick,
      Je suis content que ce réglage d’option ait réglé votre problème.
      Le thème de mon blog ne semble pas offrir la possibilité de déposer des images avec les commentaires.
      C’est embêtant.
      Je vais tenter de trouver une solution à ça.

  3. Bonjour ,
    Merci pour ces super tutos, continuez comme cela =)
    Juste une petite question , comment faire pour changer un paramètre déjà existant ?

    Cordialement
    Marceau

    • Bonjour Marceau,
      Merci pour vos encouragements.
      En VB.Net, cela devrait être quelque chose du genre:

      Dim CATIA As INFITF.Application
      CATIA = GetObject(, « CATIA.Application ») ‘Recupère l’appli Catia

      Dim partDocument1 As MECMOD.PartDocument = CATIA.ActiveDocument

      Dim Part1 As MECMOD.Part = partDocument1.Part

      Dim parameters1 As Parameters = Part1.Parameters

      Dim intParam1 As Parameter = parameters1.GetItem(« Longueur.3 »)

      intParam1.Value = « 36 »

      Part1.Update()

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.