morain Posté(e) le 2 juillet 2009 Posté(e) le 2 juillet 2009 Bonjour à tous, Je cherche à écrire une macro Catia qui repère les Trous d'un Part et en exporte les paramètres dans un fichier. Pour cela, je parcours l'arbre de construction et identifie le type des opérations effectuées, ce qui fonctionne très bien. Cependant, cette méthode ne prend pas en compte les répétitions (rectangulaires, circulaires ou personnalisées). Il est possible néanmoins de décomposer ces répétitions afin d'en obtenir les différentes opérations (click droit, objet répétition, décomposer). Je cherche donc à automatiser cette opération. Avez vous des idées ? Merci ! Romain
8_pool Posté(e) le 2 juillet 2009 Posté(e) le 2 juillet 2009 Salut, Je suppose que tu as essayé l'enregistrement de macro mais que ça n'a rien donné !!C'est dommage de décomposer les répétitions ! Y'aurait p't-êt'e moyen de "décortiquer" les répétitions pour en retrouver les enfants !! Mais je ne sais pas trop comment !! Ciao :cool:
morain Posté(e) le 2 juillet 2009 Auteur Posté(e) le 2 juillet 2009 oui, l'enregistrement de macro ne donne rien. Il y a bien l'instruction explode : Sub Explode( ) Explodes the drawing component instance (every sub elements of the drawing component are created). Note: The drawing component is not removed by Explode method Example: MyComponent.Explode Mais je n'arrive pas à m'en servir :casstet: c'est vrai que c'est dommage de faire cette décomposition mais je ne m'en servirai que pour obtenir les paramètres des Trous, je peux l'annuler ensuite [Edité le 2/7/2009 par morain]
marc54 Posté(e) le 2 juillet 2009 Posté(e) le 2 juillet 2009 Romain, Effectivement les répétitions posent un problème pour la récupération des trous. J'ai également commencé à faire une macro qui réalise des tableaux de trous/perçages avec tous les paramétres qui vont bien. J'ai rencontré le même problème que toi, c'est à dire les répétitions. Mais un autre aussi : les symétries.J'en ai conclu qu'il fallait recalculer les positions des vrais trous, à partir de matrices 3D. Mais imagine que tu as un trou, avec répétition (en plus je crois qu'on peut faire des exceptions dans les répétitions), puis deux symétries consécutives ... Galère !Si tu n'as pas de symétries/révolutions, tu peux peut-être t'en sortir, car il est possible d'extraire tous les params de la répétition. Si tu cherches un peu sur le net, tu verras qu'il n'existe pas de macro commerciale ou libre sur ce sujet. J'ai juste trouvé une application basée sur CAA, donc pas donnée. bonne chanceMarc Marc http://www.3dsys.fr
morain Posté(e) le 2 juillet 2009 Auteur Posté(e) le 2 juillet 2009 Hum okay, je pense que je n'aurai pas de symétries dans les cas où je me servirai de ma macro. donc apparemment je devrai m'en sortir avec la propriété FeatureToLocatePositions,mais je ne sais pas exactement comment m'en servir, il faut commencer par créer une liste, en tant que collection ?il faut l'appliquer à mon pattern déclaré en tant que pattern ? Voici un morceau de mon code : Dim i As Integer For i = 1 To shapes1.Count 'De i=1 au nombre de shapes Set shape1 = shapes1.Item(i) 'Met l'item pointé par i dans shape1 'Si le type de l'item pointé est une répétition (personnélisée, circulaire ou rectangulaire) If TypeName(shape1) = "UserPattern" Or TypeName(shape1) = "CircPattern" Or TypeName(shape1) = "RectPattern" Then Dim typeItemCopy As Object Set typeItemCopy = shape1.ItemToCopy 'Met l'item copié par la répétition dans typeItemCopy If TypeName(typeItemCopy) = "Hole" Then 'Si le type de l'item copié est un trou Dim list As Collection Set list = shapes1.Item(i).FeatureToLocatePositions End If End If Next Que contient alors la collection et comment obtenir la position des points servant à la répétition, en admettant alors que tous les points ont été utilisés Merci beaucoup ! Romain[Edité le 2/7/2009 par morain] [Edité le 6/7/2009 par morain]
marc54 Posté(e) le 2 juillet 2009 Posté(e) le 2 juillet 2009 je pensais plutôt utiliser les propriétés de rectpattern, par exemple FirstDirectionRepartition ou d'autres.Cela devrait te donner les directions, le nombre de répétitions, etc. marc Marc http://www.3dsys.fr
morain Posté(e) le 6 juillet 2009 Auteur Posté(e) le 6 juillet 2009 en attendant de trouver une meilleure solution, je me sers de la commande CATIA.StartCommand "décomposer", ce qui explose bien mes répétitions.L'inconvénient est que cette commande dépend du langage de l'interface utilisateur, si Catia est configuré en anglais, il faudra utiliser CATIA.StartCommand "explode". A tout hasard, quelqu'un sait comment récupérer la langue de l'interface utilisateur en vba ? :exclam: Romain
gawel Posté(e) le 6 juillet 2009 Posté(e) le 6 juillet 2009 tchô, en fait je ne réponds pas au sujet initial, mais à la p'tite question de morain: si la langue est par défaut le français, cela correspond à:GetSystemDefaultLangID = 1036 tu mets ça dans une condition type: if GetSystemDefaultLangID = 1036 then...else...end c'est tout ! Gawel
marc54 Posté(e) le 6 juillet 2009 Posté(e) le 6 juillet 2009 Il n'y a aucune commande directe qui permet de récupérer la langue de l'interface. Par contre si tu testes le nom de ton corps principal, tu la connaitras.MainBody =EnCorps Principal = Fr marc Marc http://www.3dsys.fr
marc54 Posté(e) le 6 juillet 2009 Posté(e) le 6 juillet 2009 oups Gawel j'avais pas vu ton message.ce que tu proposes fonctionne si la langue de CATIA= la langue du système. Mais ce n'est pas toujours le cas. A+ marc Marc http://www.3dsys.fr
gawel Posté(e) le 7 juillet 2009 Posté(e) le 7 juillet 2009 c'est vrai marc54, bien vu ! c'est le point faible de cette méthode, mais à l'époque cela m'avait bien dépanné, car nos machines étaient soient toutes en français, soient toutes en anglais. Gawel
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant