Esquisses invisibles
2 participants
Page 1 sur 1
Esquisses invisibles
Bonjour tout le monde, j'ai un petite problème avec une macro sur Catia :
Je cherche à programmer une macro qui détermine le nombre moyen d'éléments géométriques par esquisses. Voici le code qu' j'ai tapé :
Sub ComplexiteEsquisses()
Dim MonDoc As Document
Set MonDoc = CATIA.ActiveDocument
Dim MonPart As Part
Set MonPart = MonDoc.Part
Dim bodies1 As Bodies
Set bodies1 = MonPart.Bodies
Dim coprs As Body
Set corps = bodies1.Item("Corps principal")
Dim Esquisses As Sketches
Set Esquisses = corps.Sketches
Dim NbGeo As Long
NbGeo = 0
Dim i As Integer
For i = 1 To Esquisses.Count
Dim Esquisse As Sketch
Set Esquisse = Esquisses.Item(i)
MsgBox Esquisse.Name
Dim Geo As GeometricElements
Set Geo = Esquisse.GeometricElements
NbGeo = NbGeo + (Geo.Count - 1)
MsgBox Geo.Count
Next
NbGeoMoy = NbGeo / (Esquisses.Count)
En gros le principe est simple, je parcours mon corps principal a la recherche d'esquisses, je décompte le nombre d'éléments dans chacune et j'en fait une moyenne à la fin. J'ai rajouté des commandes qui m'affichent le nom et le nombre de composant de chaque esquisses car les valeurs qu'il me donnait était totalement folles. Et c'est la que je me suis aperçu de quelque chose qui m'a grandement surpris, la macro trouve des esquisses qui n'existent plus nul part dans mon arbre de construction Même après avoir refermer et rouvert Catia la macro continu de m'afficher les esquisses qui ont été utilisée par des fonctions qui ont été supprimées.
Auriez vous une idée pour ne décompter que les esquisses qui sont utilisées ?
Merci
Je cherche à programmer une macro qui détermine le nombre moyen d'éléments géométriques par esquisses. Voici le code qu' j'ai tapé :
Sub ComplexiteEsquisses()
Dim MonDoc As Document
Set MonDoc = CATIA.ActiveDocument
Dim MonPart As Part
Set MonPart = MonDoc.Part
Dim bodies1 As Bodies
Set bodies1 = MonPart.Bodies
Dim coprs As Body
Set corps = bodies1.Item("Corps principal")
Dim Esquisses As Sketches
Set Esquisses = corps.Sketches
Dim NbGeo As Long
NbGeo = 0
Dim i As Integer
For i = 1 To Esquisses.Count
Dim Esquisse As Sketch
Set Esquisse = Esquisses.Item(i)
MsgBox Esquisse.Name
Dim Geo As GeometricElements
Set Geo = Esquisse.GeometricElements
NbGeo = NbGeo + (Geo.Count - 1)
MsgBox Geo.Count
Next
NbGeoMoy = NbGeo / (Esquisses.Count)
En gros le principe est simple, je parcours mon corps principal a la recherche d'esquisses, je décompte le nombre d'éléments dans chacune et j'en fait une moyenne à la fin. J'ai rajouté des commandes qui m'affichent le nom et le nombre de composant de chaque esquisses car les valeurs qu'il me donnait était totalement folles. Et c'est la que je me suis aperçu de quelque chose qui m'a grandement surpris, la macro trouve des esquisses qui n'existent plus nul part dans mon arbre de construction Même après avoir refermer et rouvert Catia la macro continu de m'afficher les esquisses qui ont été utilisée par des fonctions qui ont été supprimées.
Auriez vous une idée pour ne décompter que les esquisses qui sont utilisées ?
Merci
marcassin- timide
- Messages : 6
Date d'inscription : 08/04/2013
Localisation : Aix en Provence
Re: Esquisses invisibles
Sur l'objet Esquisses, tu as peut être une propriété qui te permettrais de filtré tout ça. Du genre une propriété "visible" ou quelque chose dans le genre.
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Esquisses invisibles
J'avais pensé à ça mais je n'ai pas trouvé de propriété adéquate. Pour trouver les propriétés et les méthodes à utiliser j'utilise le fichier VB5 Automation de Catia qui me parait assez complet mais est qu'il existe d'autres moyens de trouver les propriétés et méthodes utilisables ?
marcassin- timide
- Messages : 6
Date d'inscription : 08/04/2013
Localisation : Aix en Provence
Re: Esquisses invisibles
En cliquant avec le bouton droit dans le code
tu as l'explorateur d'objet.
J'utilise aussi souvent l'espionnage des variables qui permet de mettre en évidence l'arborescence des objets (et ainsi que la complexité des imbrications des objets catia ... )
Les infos ne sont pas facile à avoir, il y a beaucoup de fonctions/objet/propriétés/variables mal renseignées dans l'aide (que même le support est incapable de renseigner ... )
tu as l'explorateur d'objet.
J'utilise aussi souvent l'espionnage des variables qui permet de mettre en évidence l'arborescence des objets (et ainsi que la complexité des imbrications des objets catia ... )
Les infos ne sont pas facile à avoir, il y a beaucoup de fonctions/objet/propriétés/variables mal renseignées dans l'aide (que même le support est incapable de renseigner ... )
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Esquisses invisibles
Merci pour ton aide, en regardant dans l'explorateur d'objet je me suis aperçu que je pouvais récupérer les esquisses des fonctions qui en utilisent, donc je devrait y arriver. Je mettrais la solution quand j'aurais réussi.
marcassin- timide
- Messages : 6
Date d'inscription : 08/04/2013
Localisation : Aix en Provence
Re: Esquisses invisibles
Ok, sinon tu à la solution de la recherche avec la fonction search
ça à l'air assez efficace, par contre encore une fois pour trouver la syntaxe et termes utilisables c'est la croix et la bannière ...
L'idée serait de chercher toutes les esquisses dans une certaine séléction
ça à l'air assez efficace, par contre encore une fois pour trouver la syntaxe et termes utilisables c'est la croix et la bannière ...
L'idée serait de chercher toutes les esquisses dans une certaine séléction
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Esquisses invisibles
J'ai essayé d'utiliser la fonction search ( que je ne connaissait pas soit sit en passant) cependant j'ai un soucis et j'espère que tu pourra éclairer ma lanterne :
J'arrive à faire fonctionner la fonction pour chercher un nom précis :
Dim mondoc As Document
Set mondoc = CATIA.ActiveDocument
Dim MaSelection As selection
Set MaSelection = mondoc.selection
MaSelection.Search "Name=Esquisse.2,all"
Par contre quand je n'arrive pas à faire la même chose avec un type d'objet bien que j'ai lu que c'était possible. Quand je tape :
MaSelection.Search "Type=Sketch,all"
la macro ne veux plus tourner. (J'ai essayer avec un certains nombres de choses à la place de Sketch) Il m'indique ca " method 'changcomponentstate' of object 'Selection' failed "
J'arrive à faire fonctionner la fonction pour chercher un nom précis :
Dim mondoc As Document
Set mondoc = CATIA.ActiveDocument
Dim MaSelection As selection
Set MaSelection = mondoc.selection
MaSelection.Search "Name=Esquisse.2,all"
Par contre quand je n'arrive pas à faire la même chose avec un type d'objet bien que j'ai lu que c'était possible. Quand je tape :
MaSelection.Search "Type=Sketch,all"
la macro ne veux plus tourner. (J'ai essayer avec un certains nombres de choses à la place de Sketch) Il m'indique ca " method 'changcomponentstate' of object 'Selection' failed "
marcassin- timide
- Messages : 6
Date d'inscription : 08/04/2013
Localisation : Aix en Provence
Re: Esquisses invisibles
Bon finalement J'ai trouver la solution à mon problème :
J'ai fini par trouver l'origine des esquisses que je ne voulait pas : elles sont dues aux perçages.
En fait, d'après ce que j'ai observer, chaque perçage a 2 esquisses : la première qui contient juste un point pour la position du perçage et la 2ème, celle qui n'est affichée nulle part dans le modèle. Celle là tout ce que j'ai vu c'est qu'elle contient 3 éléments (qui sont soit des points,soit des droites,soit des cercles) mais par contre aucune idée à quoi ils correspondent.
Pour ce qui est de mon code j'ai tout simplement ignorer les esquisses n'ayant qu'un seul élément en considérant que ce sont celle des perçages(je vois pas vraiment ce qu'il pourrait y avoir d'autre comme esquisse qui ne contient qu'un point) avec un if et dans ma boucle je "saute" l'esquisse suivante puisque c'est la 2ème du perçage .
Voilà, c'est un peu du gros bidouillage mais ça marche.
Merci pour ton aide Guss_
Je vous met le code au cas où il pourrait servir à quelqu'un :
Dim mondoc As Document
Set mondoc = CATIA.ActiveDocument
Dim MonPart As Part
Set MonPart = mondoc.Part
Dim bodies1 As Bodies
Set bodies1 = MonPart.Bodies
Dim coprs As Body
Set corps = bodies1.Item("Corps principal")
Dim Esquisses As Sketches
Set Esquisses = corps.Sketches
Dim NbGeo As Long
Dim nbesquisse As Long
NbGeo = 0
nbesquisse = 0
Dim i As Integer
For i = 1 To Esquisses.Count
Dim Esquisse As Sketch
Set Esquisse = Esquisses.Item(i)
Dim Geo As GeometricElements
Set Geo = Esquisse.GeometricElements
If Geo.Count <> 2 Then
NbGeo = NbGeo + Geo.Count
nbesquisse = nbesquisse + 1
Else
i = i + 1
End If
Next
NbGeoMoy = NbGeo / nbesquisse
J'ai fini par trouver l'origine des esquisses que je ne voulait pas : elles sont dues aux perçages.
En fait, d'après ce que j'ai observer, chaque perçage a 2 esquisses : la première qui contient juste un point pour la position du perçage et la 2ème, celle qui n'est affichée nulle part dans le modèle. Celle là tout ce que j'ai vu c'est qu'elle contient 3 éléments (qui sont soit des points,soit des droites,soit des cercles) mais par contre aucune idée à quoi ils correspondent.
Pour ce qui est de mon code j'ai tout simplement ignorer les esquisses n'ayant qu'un seul élément en considérant que ce sont celle des perçages(je vois pas vraiment ce qu'il pourrait y avoir d'autre comme esquisse qui ne contient qu'un point) avec un if et dans ma boucle je "saute" l'esquisse suivante puisque c'est la 2ème du perçage .
Voilà, c'est un peu du gros bidouillage mais ça marche.
Merci pour ton aide Guss_
Je vous met le code au cas où il pourrait servir à quelqu'un :
Dim mondoc As Document
Set mondoc = CATIA.ActiveDocument
Dim MonPart As Part
Set MonPart = mondoc.Part
Dim bodies1 As Bodies
Set bodies1 = MonPart.Bodies
Dim coprs As Body
Set corps = bodies1.Item("Corps principal")
Dim Esquisses As Sketches
Set Esquisses = corps.Sketches
Dim NbGeo As Long
Dim nbesquisse As Long
NbGeo = 0
nbesquisse = 0
Dim i As Integer
For i = 1 To Esquisses.Count
Dim Esquisse As Sketch
Set Esquisse = Esquisses.Item(i)
Dim Geo As GeometricElements
Set Geo = Esquisse.GeometricElements
If Geo.Count <> 2 Then
NbGeo = NbGeo + Geo.Count
nbesquisse = nbesquisse + 1
Else
i = i + 1
End If
Next
NbGeoMoy = NbGeo / nbesquisse
marcassin- timide
- Messages : 6
Date d'inscription : 08/04/2013
Localisation : Aix en Provence
Re: Esquisses invisibles
Tu peux éventuellement faire ta discrimination en étudiant l'objet Parent de tes esquisses.
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|