Mesure dans un produit entre une PART et un plan d'une autre PART

Voir le sujet précédent Voir le sujet suivant Aller en bas

Mesure dans un produit entre une PART et un plan d'une autre PART

Message par DroopySCAT le Sam 8 Juin 2013 - 4:17

Bonjour,

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
timide
timide

Messages : 19
Date d'inscription : 08/06/2013
Age : 35
Localisation : PARIS

Revenir en haut Aller en bas

Re: Mesure dans un produit entre une PART et un plan d'une autre PART

Message par Guss_ le Lun 10 Juin 2013 - 20:48

T'as inversé les deux balises pour le code Wink

Je vais jeter un oeil, je n'ai jamais utiliser les mesures mais ça peut potentiellement m'être utile également

Guss_
Fédérateur
Fédérateur

Messages : 498
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Re: Mesure dans un produit entre une PART et un plan d'une autre PART

Message par Guss_ le Lun 10 Juin 2013 - 20:59

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é?

Guss_
Fédérateur
Fédérateur

Messages : 498
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Re: Mesure dans un produit entre une PART et un plan d'une autre PART

Message par DroopySCAT le Lun 10 Juin 2013 - 21:16

"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 : Embarassed pour les balises

DroopySCAT
timide
timide

Messages : 19
Date d'inscription : 08/06/2013
Age : 35
Localisation : PARIS

Revenir en haut Aller en bas

Re: Mesure dans un produit entre une PART et un plan d'une autre PART

Message par Guss_ le Lun 10 Juin 2013 - 21:29

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 Wink

Guss_
Fédérateur
Fédérateur

Messages : 498
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Re: Mesure dans un produit entre une PART et un plan d'une autre PART

Message par DroopySCAT le Mar 11 Juin 2013 - 0:16

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

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
timide
timide

Messages : 19
Date d'inscription : 08/06/2013
Age : 35
Localisation : PARIS

Revenir en haut Aller en bas

Re: Mesure dans un produit entre une PART et un plan d'une autre PART

Message par Guss_ le Mer 12 Juin 2013 - 0:49

Ce que je voulais dire c'est que dans l'arborescence des objet pour designer une part, tu as deux branche possible

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_
Fédérateur
Fédérateur

Messages : 498
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Re: Mesure dans un produit entre une PART et un plan d'une autre PART

Message par DroopySCAT le Mer 12 Juin 2013 - 1:00

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 ?

DroopySCAT
timide
timide

Messages : 19
Date d'inscription : 08/06/2013
Age : 35
Localisation : PARIS

Revenir en haut Aller en bas

Re: Mesure dans un produit entre une PART et un plan d'une autre PART

Message par Guss_ le Mer 12 Juin 2013 - 1:08

non, je n'ai pas encore essayé

Je vais le faire

Guss_
Fédérateur
Fédérateur

Messages : 498
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Re: Mesure dans un produit entre une PART et un plan d'une autre PART

Message par Guss_ le Mer 12 Juin 2013 - 3:57

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
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_
Fédérateur
Fédérateur

Messages : 498
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Re: Mesure dans un produit entre une PART et un plan d'une autre PART

Message par DroopySCAT le Mer 19 Juin 2013 - 7:50

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
timide
timide

Messages : 19
Date d'inscription : 08/06/2013
Age : 35
Localisation : PARIS

Revenir en haut Aller en bas

Re: Mesure dans un produit entre une PART et un plan d'une autre PART

Message par Guss_ le Jeu 20 Juin 2013 - 2:40

AH ok ! Je comprends mieux le déroulement de ta macro

Guss_
Fédérateur
Fédérateur

Messages : 498
Date d'inscription : 08/01/2010

Revenir en haut Aller en bas

Re: Mesure dans un produit entre une PART et un plan d'une autre PART

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

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