CATIA V5 | 3DEXPERIENCE
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le deal à ne pas rater :
Réassort du coffret Pokémon 151 Électhor-ex : où l’acheter ?
Voir le deal

Macro Catia v5 r27

3 participants

Aller en bas

EnCours Macro Catia v5 r27

Message par TISSEYRE Jeu 23 Avr 2020 - 15:42

Bonjour,
J'aimerai faire une macro pour Catia v5 R27, permettant de modifier la hauteur de texte, la mise en gras ainsi que la mise en majuscule des texte de vue coupe détail.

Exemple,

J'ai réalisé une coupe mon nom de vue est: Coupe B-B Echelle : 1:1 j'aimerai qu'avec la macro CoupeB-B passe en gras, majuscule et soulignée texte hauteur 7 et Echelle 1:1 passe à une hauteur 5 mais pas en gras ni souligné.

Merci de m'aider.

TISSEYRE
timide
timide

Messages : 3
Date d'inscription : 23/04/2020
Localisation : France

Revenir en haut Aller en bas

EnCours Re: Macro Catia v5 r27

Message par lumpazepfel Sam 25 Avr 2020 - 21:32

Bonjour Alexandre,

A ma connaissance, il n'est pas possible par macro d'avoir un format de texte différent pour le nom de la vue et l'échelle, car en passant par la macro c'est un objet DrawingText unique.
Ci dessous un début de macro VBA qui modifie ce texte. A TESTER...
Code:

Sub CATMain()
'***********************************************************
'***        Macro de modification format des textes      ***
'***                 des noms des vues                   ***
'***         V00 du 25/04/2020 de Marc Litzler           ***
'***   https://catiav5.forumactif.org/t1670-macro-catia-v5-r27#7279   ***
'***********************************************************

Dim myDrawing As Document
Dim myViewName As String
' Vérifie si le document actif est un CATDrawing
On Error Resume Next
Set myDrawing = CATIA.ActiveDocument
If (Err.Number <> 0) Then
    MsgBox ("Un CATDrawing doit être actif")
    Exit Sub
End If
On Error GoTo 0
If (InStr(myDrawing.Name, ".CATDrawing")) = 0 Then
    MsgBox ("La fenêtre active doit être un CATDrawing")
    Exit Sub
End If
Set mySheets = myDrawing.Sheets
Set myActiveSheet = mySheets.ActiveSheet
Set myViewColl = myActiveSheet.Views

nbView = myViewColl.Count
For i = 1 To nbView
    'le calque des vues et le fond de calque fond parti de la collection, mais il ne faut pas les traiter.
    If (myViewColl.Item(i).Name <> "Main View" And myViewColl.Item(i).Name <> "Background View") Then
        myViewName = myViewColl.Item(i).Texts.Item(1).Text
        'à faire : vérifier si le nom de vue est toujours dans Texts.item(1)
        'filtrer ici suivant le nom de vue si besoins
        myViewColl.Item(i).Texts.Item(1).TextProperties.Bold = 1 'mise en gras
        myViewColl.Item(i).Texts.Item(1).TextProperties.FONTSIZE = 5 'taille de la police
    End If
Next i
'il faut forcer la mise à jour de la vue pour la prise en compte de la modification QuestionQuestion
myActiveSheet.ForceUpdate
End Sub

Une autre possibilité serait de supprimer la partie "échelle" du nom de la vue et de recréer ce texte avec les propriétés souhaitées, mais ça risque de poser problème en cas de future modification du plan (échelle...)
Dans l'attente de ton retour.
lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 316
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

EnCours Re: Macro Catia v5 r27

Message par lumpazepfel Mar 28 Avr 2020 - 14:12

Bonjour Alexandre,

Après vérification, le nom de vue n'est pas toujours dans Texts.item(1)-->je recherche "Echelle" dans la collection des textes de chaque vue.
Il faut donc que les noms des vues aient été générés automatiquement et pas modifiés.
J'ai également trouvé la possibilité d'avoir des tailles de police différentes pour un même objet texte (avec SetFontSize) mais pas pour la mise en gras ou souligné.
Voici le code VBA modifié:
Code:
Option Explicit

Sub CatMain()
'**********************************************************************
'***            Macro de modification format des textes             ***
'***                    des noms des vues                           ***
'***            V00 du 25/04/2020 de Marc Litzler                   ***
'***  https://catiav5.forumactif.org/t1670-macro-catia-v5-r27#7279  ***
'**********************************************************************

Dim myDrawing As Document
Dim myViewColl As DrawingViews
Dim myViewTextColl As DrawingTexts
Dim MyText As DrawingText
Dim myViewName As String
Dim myViewText As String
Dim nbView As Integer
Dim i As Integer
Dim k As Integer
Dim myCutPos As Integer
Dim myStrLenght As Integer


' Vérifie si le document actif est un CATDrawing
On Error Resume Next
Set myDrawing = CATIA.ActiveDocument
If (Err.Number <> 0) Then
    MsgBox ("Un CATDrawing doit être actif")
    Exit Sub
End If
On Error GoTo 0
If (InStr(myDrawing.Name, ".CATDrawing")) = 0 Then
    MsgBox ("La fenêtre active doit être un CATDrawing")
    Exit Sub
End If

Set myViewColl = myDrawing.Sheets.ActiveSheet.Views

nbView = myViewColl.Count
For i = 1 To nbView
    Set myViewTextColl = myViewColl.Item(i).Texts
    myViewName = myViewColl.Item(i).Name
    'le calque des vues et le fond de calque font partie de la collection, mais il ne faut pas les traiter.
    If (myViewTextColl.Count > 0 And myViewName <> "Main View" And myViewName <> "Background View") Then
        For k = 1 To myViewTextColl.Count
            myViewText = myViewTextColl.Item(k).Text
            myCutPos = InStr(myViewText, "Echelle") 'on recherche un texte contenant "Echelle"
            If myCutPos > 1 Then
                myStrLenght = Len(myViewText)
                Set MyText = myViewColl.Item(i).Texts.Item(k)
                MyText.TextProperties.Bold = 1 'mise en gras
                MyText.TextProperties.Underline = 1 'souligné
                'SetFontSize permet de préciser la position de départ et le nombre de caractères:
                MyText.SetFontSize 0, myCutPos, 7 'nom de vue en taille 7
                MyText.SetFontSize myCutPos, myStrLenght, 5 'echelle en taille 5
                Exit For
            End If
        Next
    End If
Next i
End Sub


Pour la deuxième solution qui consiste à recréer le nom de la vue en deux textes différents, j'ai trouvé la façon de rattacher le texte au attribut nom de vue et échelle.
Le texte se mettra à jour si l'on modifie le nom de la vue ou l'échelle.
Macro Catia v5 r27 Vue11


Voici le code en VBA

Code:
Option Explicit
Sub CatMain()
'**********************************************************************
'***            Macro de modification format des textes             ***
'***                    des noms des vues                           ***
'***            V00 du 26/04/2020 de Marc Litzler                   ***
'***        Supprime et recréer le nom de la vue et l'echelle       ***
'***           en 2 textes avec propriétés différentes              ***
'***   et en gardant le lien avec le nom de la vue et l'échelle     ***
'***  https://catiav5.forumactif.org/t1670-macro-catia-v5-r27#7279  ***
'**********************************************************************
Dim myDrawing As Document
Dim myViewColl As DrawingViews
Dim myViewTextColl As DrawingTexts
Dim myViewName As String
Dim myViewText As String
Dim myCutPos As Integer
Dim PointLocation1(1)
Dim myTextV As DrawingText
Dim myTextS As DrawingText
Dim myScaleText As String
Dim nbView As Integer
Dim i As Integer
Dim k As Integer
Dim iParameter As Parameter
Dim myParaName As String

' Vérifie si le document actif est un CATDrawing
On Error Resume Next
Set myDrawing = CATIA.ActiveDocument
If (Err.Number <> 0) Then
    MsgBox ("Un CATDrawing doit être actif")
    Exit Sub
End If
On Error GoTo 0
If (InStr(myDrawing.Name, ".CATDrawing")) = 0 Then
    MsgBox ("La fenêtre active doit être un CATDrawing")
    Exit Sub
End If

Set myViewColl = myDrawing.Sheets.ActiveSheet.Views
nbView = myViewColl.Count
For i = 1 To nbView
    myViewName = myViewColl.Item(i).Name
    Set myViewTextColl = myViewColl.Item(i).Texts
    'le calque des vues et le fond de calque font partie de la collection, mais il ne faut pas les traiter.
    If (myViewTextColl.Count > 0 And myViewName <> "Main View" And myViewName <> "Background View") Then
        For k = 1 To myViewTextColl.Count
            myViewText = myViewTextColl.Item(k).Text
            myCutPos = InStr(myViewText, "Echelle")
            If myCutPos > 1 Then
                'récupère la position du texte nom de vue
                PointLocation1(0) = myViewTextColl.Item(k).X
                PointLocation1(1) = myViewTextColl.Item(k).Y
                myViewTextColl.Remove (k)
                'récrée le texte nom de vue avec ses propriétés
                Set myTextV = myViewTextColl.Add("", PointLocation1(0), PointLocation1(1))
                myTextV.SetFontSize 0, 0, 7
                myTextV.AnchorPosition = catBottomCenter
                myTextV.TextProperties.Bold = 1
                myTextV.TextProperties.Underline = 1
                myTextV.Name = "Nom: " & myViewName
                'lier le texte à l'attribut nom de la vue:
                myParaName = myDrawing.Sheets.ActiveSheet.Name & "\" & myViewName & "\Name"
                Set iParameter = myDrawing.Parameters.Item(myParaName)
                myTextV.InsertVariable 0, 0, iParameter
                'recréer la partie échelle avec ses propriétés
                myScaleText = "Echelle :"
                Set myTextS = myViewTextColl.Add(myScaleText, PointLocation1(0), PointLocation1(1))
                myTextS.SetFontSize 0, 0, 5
                myTextS.AnchorPosition = catTopCenter
                myTextS.Name = "Echelle : " & myViewName
                myTextS.AssociativeElement = myTextV
                'lier le texte à l'attribut echelle:
                Call myViewColl.Item(i).InsertViewScale(1 + Len(myTextS.Text), myTextS)
                Exit For
            End If
        Next k
    End If
Next i
End Sub

Dans l'attente de ton retour.
lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 316
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

EnCours Re: Macro Catia v5 r27

Message par TISSEYRE Mar 28 Avr 2020 - 14:32

Bonjour Marc,
Merci pour votre macro qui fonctionne parfaitement, cependant il faudrait que l’échelle soit ni en gras ni soulignée et si possible pour voir mettre en majuscule le nom de la vue tout en gardant en gras et souligné hauteur 7mm.


Cordialement

a bientôt
Alexandre

TISSEYRE
timide
timide

Messages : 3
Date d'inscription : 23/04/2020
Localisation : France

Revenir en haut Aller en bas

EnCours Re: Macro Catia v5 r27

Message par lumpazepfel Mar 28 Avr 2020 - 17:55

voir le deuxième code ci dessus
lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 316
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

EnCours Re: Macro Catia v5 r27

Message par moringaou Lun 25 Juil 2022 - 9:39

Bonjour, je suis tombé sur ce post et même si cela fait un petit moment qu'il a été fermé, j'aurais un petit complément d'info à apporter su jamais de n'est pas déjà fait :

En effet, on peut parfaitement avoir un format de texte différent pour le nom de la vue et l'échelle avec l'instruction "MyDrawingText.SetParameterOnSubString". Par contre attention à ne pas modifier la chaine de caractère sinon toutes les modification "SubString" seront réinitialiser selon les paramètres du DrawingText parent.

Par contre j'aurais une question, vu que vous parlez de coupe, est-ce que vous sauriez modifier le texte
fléché avec l'identifiant de la vue de coupe dans la vue de référence ?

moringaou
timide
timide

Messages : 6
Date d'inscription : 19/05/2022
Localisation : Vitrolles

Revenir en haut Aller en bas

EnCours Re: Macro Catia v5 r27

Message par lumpazepfel Mar 26 Juil 2022 - 7:30

Salut Grégory,

Le nom de la coupe se trouve dans les propriétés de la vue, dans le champ "Identificateur" (si CATIA en français).

D'après la doc CATIA, on peut le modifier avec (je ne l'ai pas testé) :

Sub SetViewName( CATBSTR iViewNamePrefix,
CATBSTR iViewNameIdent,
CATBSTR iViewNameSuffix)

Sets the prefix, the ident and the suffix of the name of the drawing view. The method returns an error in case of 2D component reference.
Note: Prefix of drawing view can be also modified across name property defined in CATIABase
Warning: This method is not available with 2D Layout for 3D Design.
Example:
This example sets the prefix, the ident, and the suffix of the name
of the MyView drawing view respectively to "MyPrefix", "MyIdent",
and "MySuffix".
MyView.SetViewName ("MyPrefix", "MyIdent", "MySuffix")

lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 316
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

EnCours Re: Macro Catia v5 r27

Message par moringaou Mar 26 Juil 2022 - 8:51

Salut lumpazepfel,
Merci pour ta réponse. "SetViewName" permet effectivement de changer le nom de la vue avec la possibilité de changer indépendamment l'identifiant et le suffixe. Cependant, ce n'est pas le titre de la vue de coupe que je cherche à modifier, mais le "callout" de la vue sur laquelle la vue de coupe ou de détail est pointée. En clair, lors de la création de la "coupe A:A" ou de la vue de "détail A", un "A" est généré sur la vue de référence pointant la zone impactée. Malheureusement ce n'est pas un DrawingText standard et je n'arrive pas à l'identifier. Une idée ?

moringaou
timide
timide

Messages : 6
Date d'inscription : 19/05/2022
Localisation : Vitrolles

Revenir en haut Aller en bas

EnCours Re: Macro Catia v5 r27

Message par lumpazepfel Mar 26 Juil 2022 - 10:10

Salut,

Quand dans CATIA, tu change la propriété "Identificateur" de la vue de coupe, la lettre du callout se met automatiquement à jour.
Je ne sais pas si ça marche avec la macro.
Je n'arrive pas à faire fonctionner la commande SetViewName Sad
Est ce que tu y arrives?
lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 316
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

EnCours Re: Macro Catia v5 r27

Message par moringaou Mar 26 Juil 2022 - 13:40

Salut,
Oui les SetViewName et Getviewname fonctionne très bien chez moi. Et effectivement la partie ident. permet changer l'identifiant de la vue et par extension la lettre qu'il y a dans le callout. Je t'ai fait un petit bout de code pour t'expliquer la syntaxe ci-dessous (il faut au préalable être actif sur une vue de coupe). Par contre le texte où il y a le callout, pour par exemple pour ajouter "détail" devant la "A" qui est tout seul par défaut, impossible de mettre la main dessus.
Code:

Public CATIA As Object

Sub CATMain()
    Dim dDoc As DrawingDocument, dViewA As DrawingView, dText As DrawingText
    Dim nomV As String, identV As String, suffV As String

    Set CATIA = CreateObject("CATIA.Application")
    Set dDoc = CATIA.ActiveDocument
    Set dViewA = dDoc.Sheets.ActiveSheet.Views.ActiveView

    dViewA.GetViewName nomV, identV, suffV

    MsgBox dViewA.Name & " nom: " & nomV & ", ident: " & identV & ", suffixe: " & suffV & ", va devinir toto tata-tata titi"
    
    nomV = "toto "
    identV = "tata"
    suffV = " titi"
    
    dViewA.SetViewName nomV, identV, suffV
    
    MsgBox dViewA.Name & " nom: " & nomV & ", ident: " & identV & ", suffixe: " & suffV
End Sub

le "GetViewName" te permet de récupérer les attributs et bien sur le "SetViewName" te permet de les attribuer.

moringaou
timide
timide

Messages : 6
Date d'inscription : 19/05/2022
Localisation : Vitrolles

Revenir en haut Aller en bas

EnCours Re: Macro Catia v5 r27

Message par lumpazepfel Mar 26 Juil 2022 - 14:48

Merci pour le code, ça fonctionne également pour moi.
Effectivement le texte du callout n'apparaît pas dans la collection des Drawingtexts de la vue, c'est un lien type attribut vers l'ident et je n'ai pas trouvé de moyen d'y accéder.
Une solution pourrait être de mettre la valeur dans l'ident et rien dans le préfixe de la vue de coupe:

nomV = ""
identV = "Détail A"
suffV = ""
lumpazepfel
lumpazepfel
Fédérateur
Fédérateur

Messages : 316
Date d'inscription : 02/11/2015
Localisation : Ensisheim

Revenir en haut Aller en bas

EnCours Re: Macro Catia v5 r27

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum