Mesure dans un produit entre une PART et un plan d'une autre PART
2 participants
Page 1 sur 1
Mesure dans un produit entre une PART et un plan d'une autre PART
Bonjour,
je souhaite réaliser une "Titre du sujet".
Pour cela j'ai codé la fonction ci-dessous :
Tout se passe bien jusqu'à la mesure de distance minimale entre les 2 objets avec pour message d'erreur : "la méthode a échoué"
je pense que je n'ai pas la bonne méthode ni les bonnes syntaxes et la fonction CATIADistance ne prend en compte que des produits (ca je sais faire).
Si quelqu'un a déjà réalisé des mesures par macro dans un assemblage, merci à lui s'il peut m'aider.
je souhaite réaliser une "Titre du sujet".
Pour cela j'ai codé la fonction ci-dessous :
- Code:
Function axial_dist(PART_object As Object, oPlan)
Dim CATIA As Object
Set CATIA = GetObject(, "CATIA.Application")
Dim Coords_CDG_DEC1(2)
Dim Direction(2)
Dim Coordinates(8)
Set selection1 = CATIA.ActiveDocument.Selection
'je sélectionne la PART et le plan dont je veux obtenir la distance mini relative
selection1.Clear
selection1.Add PART_object
selection1.Add oPlan
'je les transforme en références
Set referenceObject1 = selection1.Item(1).Reference
Set referenceObject2 = selection1.Item(2).Reference
Dim TheSPAWorkbench As Workbench
Set TheSPAWorkbench = CATIA.ActiveDocument.GetWorkbench("SPAWorkbench")
Dim TheMeasurable As Measurable
Set TheMeasurable1 = TheMeasurable
Set TheMeasurable1 = TheSPAWorkbench.GetMeasurable(referenceObject1)
TheMeasurable1.GetCOG (Coords_CDG_DEC1)
nom = TheMeasurable1.GeometryName
Dim MinimumDistance As Double
MinimumDistance = TheMeasurable1.GetMinimumDistance(referenceObject2)
axial_dist = MinimumDistance
End Function
Tout se passe bien jusqu'à la mesure de distance minimale entre les 2 objets avec pour message d'erreur : "la méthode a échoué"
je pense que je n'ai pas la bonne méthode ni les bonnes syntaxes et la fonction CATIADistance ne prend en compte que des produits (ca je sais faire).
Si quelqu'un a déjà réalisé des mesures par macro dans un assemblage, merci à lui s'il peut m'aider.
DroopySCAT- actif
- Messages : 22
Date d'inscription : 07/06/2013
Age : 43
Localisation : PARIS
Re: Mesure dans un produit entre une PART et un plan d'une autre PART
T'as inversé les deux balises pour le code
Je vais jeter un oeil, je n'ai jamais utiliser les mesures mais ça peut potentiellement m'être utile également
Je vais jeter un oeil, je n'ai jamais utiliser les mesures mais ça peut potentiellement m'être utile également
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Mesure dans un produit entre une PART et un plan d'une autre PART
Dans l'aide il est écrit que GetMinimumDistance() est une ancienne fonctionne et qu'il est préférable d'utiliser GetTechnologicalObject("Distances")
As tu essayé?
As tu essayé?
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Mesure dans un produit entre une PART et un plan d'une autre PART
"The Distance object is a specification of a distance computation between products or groups of products." Comme c'est clairement exprimé, la fonction distance ne permet que de mesurer des distances entre produits.
En fait je peux réaliser la mesure en créant une part avec un plan et sur ce plan , créer une surface -suffisamment étendue- et ensuite utiliser la méthode Distance entre cette PART et une autre PART (ce qui me donnera la distance entre le plan et la PART mais ca me parait très lourd.
comme toujours, l'aide CATIA n'est pas claire sur les possibilités de la fonction measurable :
"The interface to access a CATIAMeasurable Get measurements on the object.
Two types of measurement can be done:
itself : gives dimensions related to the object itself (ex the radius of a circle).
between : gives dimensions related to another object (ex the distance between two products). A restriction occurs for distance between: bodies (CATBody) cannot be measured. "
J'ai peur qu'il y ait plus d'exception que celle de la mesure entre corps de pièces.
ps : pour les balises
En fait je peux réaliser la mesure en créant une part avec un plan et sur ce plan , créer une surface -suffisamment étendue- et ensuite utiliser la méthode Distance entre cette PART et une autre PART (ce qui me donnera la distance entre le plan et la PART mais ca me parait très lourd.
comme toujours, l'aide CATIA n'est pas claire sur les possibilités de la fonction measurable :
"The interface to access a CATIAMeasurable Get measurements on the object.
Two types of measurement can be done:
itself : gives dimensions related to the object itself (ex the radius of a circle).
between : gives dimensions related to another object (ex the distance between two products). A restriction occurs for distance between: bodies (CATBody) cannot be measured. "
J'ai peur qu'il y ait plus d'exception que celle de la mesure entre corps de pièces.
ps : pour les balises
DroopySCAT- actif
- Messages : 22
Date d'inscription : 07/06/2013
Age : 43
Localisation : PARIS
Re: Mesure dans un produit entre une PART et un plan d'une autre PART
Ok,
Alors il y a aussi un truc un peu spécial dans les objet de Catia,
Une "Part" en temps que telle pour l'utilisateur, n'est pas forcément représenté par un objet "Part" dans un code.
Il faut que je retrouve où, exactement, mais j'ai remarqué (pour une macro que je n'ai pas encore réussi à finir totalement) que "Product" pouvait également désigner une "Part" et du coup les propriétés associés ne sont donc pas les mêmes.
Ma macro en question doit permettre des récupérer des points clefs dans une produit, et en extraire les coordonnées pour ensuite les exporter dans un fichier excel.
Pour ce faire, j'ai été obligé de sélectionné les parts en tant que product, sinon (si je me souvient bien) je n'avais pas accès à tout ce qui est relatif à la géométrie.
Alors je me dis que c'est peut être un problème similaire au mien, tentes de faire ton opération en faisant en sorte que tu sélectionnes un "Product" et non des "Part"
PS: en tant qu'admin je me suis permis de corriger les balises dans ton 1er message
Alors il y a aussi un truc un peu spécial dans les objet de Catia,
Une "Part" en temps que telle pour l'utilisateur, n'est pas forcément représenté par un objet "Part" dans un code.
Il faut que je retrouve où, exactement, mais j'ai remarqué (pour une macro que je n'ai pas encore réussi à finir totalement) que "Product" pouvait également désigner une "Part" et du coup les propriétés associés ne sont donc pas les mêmes.
Ma macro en question doit permettre des récupérer des points clefs dans une produit, et en extraire les coordonnées pour ensuite les exporter dans un fichier excel.
Pour ce faire, j'ai été obligé de sélectionné les parts en tant que product, sinon (si je me souvient bien) je n'avais pas accès à tout ce qui est relatif à la géométrie.
Alors je me dis que c'est peut être un problème similaire au mien, tentes de faire ton opération en faisant en sorte que tu sélectionnes un "Product" et non des "Part"
PS: en tant qu'admin je me suis permis de corriger les balises dans ton 1er message
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Mesure dans un produit entre une PART et un plan d'une autre PART
Oui tu as tout à fait raison. Ce que j'appelle PART est en fait le product parent du document part car chaque Part est chapeauté par un product du meme nom. C'est ce que je sélectionne dans l'arborescence du produit de tete du document actif.
En revanche lorsqu'il faut chercher une géométrie précise, je dois descendre au niveau de la part donc dans le PartDocument.
Pour le coup, j'arrive à sélectionner les bons objets dans mon code général plus global (les objets sont les arguments de la fonction que j'ai diffusé dans mon 1er post).
Mais au moment de calculer la distance mini, ca clashe sans autre forme de procès. je ne sais pas si c'est un probleme de typage ou bien si la fonction "measurable" ne permet pas de mesurer la distance entre ces deux types d'éléments.
si ca peut servir voici le code nécessaire pour manipuler les product et les document part
En revanche lorsqu'il faut chercher une géométrie précise, je dois descendre au niveau de la part donc dans le PartDocument.
Pour le coup, j'arrive à sélectionner les bons objets dans mon code général plus global (les objets sont les arguments de la fonction que j'ai diffusé dans mon 1er post).
Mais au moment de calculer la distance mini, ca clashe sans autre forme de procès. je ne sais pas si c'est un probleme de typage ou bien si la fonction "measurable" ne permet pas de mesurer la distance entre ces deux types d'éléments.
si ca peut servir voici le code nécessaire pour manipuler les product et les document part
- Code:
Sub exemple()
'cet exemple permet de travailler dans les parts d'un assemblage sans ouvrir une nouvelle fenetre.
'on définit le produit actif
Set RootProduct = CATIA.ActiveDocument.Product
'je vais chercher le produit qui contient la part dans lequel je veux travailler
'par exemple le produit 1 du premier niveau d'arborescence
Set prod1 = RootProduct.Products.Item(1)
'pour mon cas, c'est cela que j'ai appelé "PART_object"
'ensuite je demande le nom du document auquel appartient la PART
DocName = prod1.ReferenceProduct.Parent.Name
'puis je manipule directement la part en allant chercher le document correspondant
Set documents1 = CATIA.Documents
Set partDocument1 = documents1.Item(DocName)
Set prt = partDocument1.Part
'à partir de ce moment je peux venir chercher, créer, supprimer les éléments que j'ai besoin dans la part.
'c'est ainsi que j'obtiens mon objet "oPlan"
'bien entendu, dans mon cas précis, mon plan appartient à une autre PART car je ne vais pas mesurer la PART avec un plan qu'il contient.
End Sub
DroopySCAT- actif
- Messages : 22
Date d'inscription : 07/06/2013
Age : 43
Localisation : PARIS
Re: Mesure dans un produit entre une PART et un plan d'une autre PART
Ce que je voulais dire c'est que dans l'arborescence des objet pour designer une part, tu as deux branche possible
Une fois dans l'Item correspondant à la Part tu as le choix entre deux objet, Part et Product, qui sont donc bien liés à la même Part.
Tu n'as pas les même informations dans ces deux objets.
- Code:
Catia
|
L_ Documents
|
L_ Item
|
L_ Part
|
L_ Product
Une fois dans l'Item correspondant à la Part tu as le choix entre deux objet, Part et Product, qui sont donc bien liés à la même Part.
Tu n'as pas les même informations dans ces deux objets.
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Mesure dans un produit entre une PART et un plan d'une autre PART
je pense (mais je peux me tromper) que le product contient les informations nécessaires à la construction de l'arborescence dans le product racine du document actif. Et que la part contient la géométrie.
Voudrais-tu dire qu'au lieu de sélectionner le product , je devrais plutot sélectionner la Part ? Ca me paraitrait étonnant car lorsqu'on utilise la fonction distance, on sélectionne bien l'objet "product" et ca fonctionne très bien.
As-tu de ton coté essayé de faire des mesures entre éléments géométriques appartenant à des PARTS différentes ?
Voudrais-tu dire qu'au lieu de sélectionner le product , je devrais plutot sélectionner la Part ? Ca me paraitrait étonnant car lorsqu'on utilise la fonction distance, on sélectionne bien l'objet "product" et ca fonctionne très bien.
As-tu de ton coté essayé de faire des mesures entre éléments géométriques appartenant à des PARTS différentes ?
DroopySCAT- actif
- Messages : 22
Date d'inscription : 07/06/2013
Age : 43
Localisation : PARIS
Re: Mesure dans un produit entre une PART et un plan d'une autre PART
non, je n'ai pas encore essayé
Je vais le faire
Je vais le faire
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Mesure dans un produit entre une PART et un plan d'une autre PART
Bon j'ai regardé vite fait,
Je pige pas un truc, dans le code du 1er message, où se trouve l'objet représentant la 2ème Part ?
J'ai essayé ton code, mais je n'ai pas compris son fonctionnement
notamment ça
Si je comprends tu fait deux référence avec une part et un plan de cette même part car dans l'item(1) tu stock la part et dans l'item(2) des plans
Donc je ne vois pas l'intérêt de l'opération
Si tu veux voilà un code qui permet de sélectionner à l'aide de la souris deux éléments (dans mon code c'est des "Part" mais tu peux changer par autre chose "hybrideshape" "product" "reference" ...
Et ensuite une fois sélectionnés tu peux effectué un traitement.
Je pige pas un truc, dans le code du 1er message, où se trouve l'objet représentant la 2ème Part ?
J'ai essayé ton code, mais je n'ai pas compris son fonctionnement
notamment ça
- Code:
Set referenceObject1 = selection1.Item(1).Reference
Set referenceObject2 = selection1.Item(2).Reference
Si je comprends tu fait deux référence avec une part et un plan de cette même part car dans l'item(1) tu stock la part et dans l'item(2) des plans
Donc je ne vois pas l'intérêt de l'opération
Si tu veux voilà un code qui permet de sélectionner à l'aide de la souris deux éléments (dans mon code c'est des "Part" mais tu peux changer par autre chose "hybrideshape" "product" "reference" ...
Et ensuite une fois sélectionnés tu peux effectué un traitement.
- Code:
Sub CATMain()
'' initialisation des objets
Dim docs As Documents
Set docs = CATIA.Documents
Dim document_actif As Document
Set document_actif = CATIA.ActiveDocument
' 1er part
Dim objet1 As Part 'part à mettre en correlélation avec la ligne ci dessous
Set objet1 = select_("selectioner 1 er objet", "Part")
' 2nd part
Dim objet2 As Part 'part à mettre en correlélation avec la ligne ci dessous
Set objet2 = select_("selectioner 2 nd objet", "Part")
'ici code de traitement
End Sub
Function select_(texte As String, type_ As String) As Object ' fonction séléctionant un porduit
Dim EnableSelectionFor(0), UserSelection
EnableSelectionFor(0) = type_
Set selection = CATIA.ActiveDocument.selection
selection.Clear
MsgBox texte
UserSelection = selection.SelectElement2(EnableSelectionFor, texte, False)
If UserSelection <> "Normal" Then
message = MsgBox("Erreur avec la sélèction!", vbCritical, "Error")
End
Else
Set sel = selection.Item(1)
Set select_ = sel.Value 'retourne la part séléctioner
End If
End Function
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Mesure dans un produit entre une PART et un plan d'une autre PART
Mon plan est le deuxieme argument de ma fonction, cad qu'il est deja connu sans que lutilisateur ait besoin de le selectionner manuellement. Ce plan appartient a une autre part que la part du 1er argument. Ce que je ne parviens pas à maîtriser c'est la fonction "measurable".
DroopySCAT- actif
- Messages : 22
Date d'inscription : 07/06/2013
Age : 43
Localisation : PARIS
Re: Mesure dans un produit entre une PART et un plan d'une autre PART
AH ok ! Je comprends mieux le déroulement de ta macro
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Sujets similaires
» disparition de l'arborescence d'une PART dans un produit
» Récupérer le nom d'une part active dans un produit ouvert
» Extraire une surface d'un Assembly dans une autre Part
» [ASTUCE]Récupérer un Sketch dans une autre part sans ses parents
» Positionner un corps de pièce copié (dans une part 1) dans un repère d'une part 2
» Récupérer le nom d'une part active dans un produit ouvert
» Extraire une surface d'un Assembly dans une autre Part
» [ASTUCE]Récupérer un Sketch dans une autre part sans ses parents
» Positionner un corps de pièce copié (dans une part 1) dans un repère d'une part 2
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|