Obtenir positions pieces dans CatiaV5R18 VB - VB/VBA/VBS - Programmation
Marsh Posté le 15-06-2009 à 14:00:22
Bonjour,
ça c'est une question technique !!
A quel moment apparaît l'erreur: à la compilation (c'est à dire quand le curseur arrive sur la "sub" ) ou sur une ligne bien précise (je suppose lorsqu'on fait Set pDoc = Catia.activedocument?
Pro du VBA
Marsh Posté le 15-06-2009 à 14:29:27
Merci de répondre aussi promptement!
En fait, l'erreur apparait sur une ligne bien précise (cf la suite) et sélectionne "GetGravityCenter".
pDoc.Product.Products.Item(i).Analyze.GetGravityCenter Values
Marsh Posté le 15-06-2009 à 14:45:32
Re-bonjour,
Alors là j'avoue que je ne sais quoi suggérer. Sinon que quelque chose m'étonne: pDoc est un objet Catia, je ne connais pas les méthodes / propriétés associées. Ce que je ferais à ta place c'est
* vérifier si GetGravityCenter est bien une méthode (ce qui semble d'après la syntaxe indiquée)
* ensuite de vérifier les arguments.
* J'évite habituellement les noms de variables tels que Value / Values etc qui peuvent faire confusion avec des mots-clés de VBA ou des propriétés...
C'est tout ce que je peux faire !
Désolé,
Marsh Posté le 15-06-2009 à 15:03:48
Yep, je vais suivre tes conseils.
Merci encore.
PS: Si jamais il te vient en tete une autre maniere d'obtenir les coordonnées, je suis preneur!
Marsh Posté le 19-06-2009 à 16:40:49
J'ai eu la réponse pour ceux que ca interesse, voila le code qui fonctionne :
Dim nb_intances As Integer
nb_instances = pDoc.Product.Products.Count
Dim instance As Product
Dim position_instance
Dim analyse_instance
Open "C:\Texte.txt" For Output As #1
Set instance = pDoc.Product.Products.Item(i)
Set analyse_instance = instance.Analyze
Set position_instance = instance.position
analyse_instance.GetGravityCenter GC
position_instance.GetComponents Ori
Print #1, "Position"
Print #1, FormatNumber(Ori(0))
Print #1, FormatNumber(Ori(1))
Print #1, FormatNumber(Ori(2))
Print #1, FormatNumber(Ori(3))
Print #1, FormatNumber(Ori(4))
Print #1, FormatNumber(Ori(5))
Print #1, FormatNumber(Ori(6))
Print #1, FormatNumber(Ori(7))
Print #1, FormatNumber(Ori(8))
Print #1, FormatNumber(Ori(9))
Print #1, FormatNumber(Ori(10))
Print #1, FormatNumber(Ori(11))
Print #1, "Centre de gravité"
Print #1, FormatNumber(GC(0))
Print #1, FormatNumber(GC(1))
Print #1, FormatNumber(GC(2))
Next
Print #1, "</scene>"
Close #1
End Sub
Ori fournit la matrice d'orientation du repère de la pièce exprimé dans celui de l'assemblage ainsi que la position du centre du repère pièce.
GC fournit la position du centre de gravité de la pièce dans le repère de l'assemblage.
Marsh Posté le 26-04-2017 à 09:43:13
bonjours
je fait aussi une macro pour obtenir le centre de gravité de toute les pièce d'un assemblage. mais j'ai un problème avec la fonction "GetGravityCenter"
a tu ue le message d'erreur : "function or interface marked as restricted, or the function uses an automation type not supported in visyal basic" ?
si oui, comment la tu corrigé ?
merci d'avance
Marsh Posté le 15-06-2009 à 11:21:35
Bonjour à tous,
Je vous explique mon problème, j'ai créé un assemblage sur CATIA et je cherche à récupérer de manière automatique sous forme de fichier texte les positions des centres de gravité de toutes les pièces.
C'est à dire automatiser la commande "measure inertia" pour toutes les pièces.
J'ai essayé de faire une macro moi même sur VBA mais malheureusement elle ne fonctionne pas, la voici...
Sub CATMain()
Dim pDoc As ProductDocument
Set pDoc = CATIA.ActiveDocument
Dim p As Product
Dim Values(2)
Dim n As Integer
n = pDoc.Product.Products.Count
Open "C:\Documents and Settings\rgenest\Desktop\CATData.txt" For Output As #1
For i = 1 To n
Print #1, pDoc.Product.Products.Item(i).Name
Print #1, "Masse (en kg)"
Print #1, pDoc.Product.Products.Item(i).Analyze.Mass
pDoc.Product.Products.Item(i).Analyze.GetGravityCenter Values
Print #1, FormatNumber(Values(0))
Print #1, FormatNumber(Values(1))
Print #1, FormatNumber(Values(2))
Next
Close #1
End Sub
J'obtint alors une missive d'erreur : "Function or interface marked as restricted, or the function uses an automation not supported in Visual Basic"
Damned!!
Merci d'avance pour vos réponses les plus promptes !