Création de pionts, changement de référence

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

Création de pionts, changement de référence

Message par Guss_ le Mer 7 Mar 2012 - 21:58

Salut,

Je suis à la recherche d'une maninère pas trop compliqué pour rérupéré la position de "pionts clefs "de parts dans un product et d'en créé un setgémometrique dans une dernière part.

J'arrive à quelque chose mais il me faut utiliser des matrice de passage de changement de repère, c'est assez lourd.

Je sais ressortir les coordonée de point dans une part ainsi que les coordonée d'une part dans le referenciel du produit.
De là avec la fonction " AddNewPointCoord(X,Y,Z) " je sais créer les pionts dans un set géometrique de la part que je veux.

mais voilà il faut passer par une matrice de passage pour convertir chaque point de chaque part dans le nouveau referenciel, c'est source d'erreur pour une quantité de plus de1000 points à créer.

Il y a peut être moyen d'extaire directement les coordonnés des pionts directement dans le referenciel produit

J'ai répéré la fonction " AddNewPointCoordWithReference( double iX, double iY, double iZ, Reference iPt) As HybridShapePointCoord " mais je ne pige pas comment doit être définie le référence.

des idées?

Guss_
Fédérateur
Fédérateur

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

Revenir en haut Aller en bas

Re: Création de pionts, changement de référence

Message par Guss_ le Mer 7 Mar 2012 - 22:05

Pour ceux qui cherches quelque chose de similaire voici ma macro

Il ne manque que les formules de passage, car je ne les ais pas encore défini

J'utilise des noms de set géométriques particulers, c'est une marco non fonctionel mais en cour de developpement

Pour que vous puissiez là faire fonctioner
le set géométrique des part dans les sont les point clef doit s'appeler
points_clef

le nom du set géométrique dans la part de destination
Set géométrique.1

Les point créés ont pour coordonées 0.0.0 puisques les variable X,Y,Z utiliser pour créer les nouveaux points ne sont pas défins

Code:
Sub CATMain()

    Dim product_base As Product, _
        product_dest As Product, _
        produit_parent As Product, _
        documents As documents, _
        produit_analyser As Product, _
        part_dest As Part, _
        hybridBody3 As HybridBody, _
        hybridShapeFactory3 As HybridShapeFactory, _
        hybridShapePointCoord3 As HybridShapePointCoord, _
        hybridShapePointCoord3 As HybridShapePointCoord
    Dim oshapes As Object, _
        oposition As Object
    Dim PointName, _
        X, Y, Z, _
        VecteurX(2), VecteurY(2), VecteurZ(2), Origine(2), _
        pos(11), point(2), _
        I, A
   
    Set product_base = select_product("part contenant les points clés") 'séléction du produit contenant le set géométriqeu à lire
    Set product_dest = select_product("part de destination") 'séléction du produit où seront insérés le nouveaux points
    '---- exctraction du nom des part
    nom_base = Left(product_base.Name, InStr(1, product_base.Name, "."))
    nom_dest = Left(product_dest.Name, InStr(1, product_dest.Name, "."))
    '--- fin extraction
   
    Set produit_parent = product_base.Parent
    comptage = produit_parent.Products.Count
    Set part_dest = documents.Item(nom_dest & "CATPart").Part
    Set hybridBody3 = documents.Item(nom_dest & "CATPart").Part.HybridBodies.Item("Set géométrique.1")
    Set hybridShapeFactory3 = documents.Item(nom_dest & "CATPart").Part.HybridShapeFactory
    message = ""
    '---- traitement de chaque part
    For A = 1 To comptage
        If Left(produit_parent.Products.Item(A).Name, InStr(1, product_base.Name, ".")) = nom_base Then
            Set oposition = produit_parent.Products.Item(A).position
            Set oshapes = documents.Item(nom_base & "CATPart").Part.HybridBodies.Item("points_clef").HybridShapes
            For I = 1 To oshapes.Count Step 1
                If TypeName(oshapes.Item(I)) = "HybridShapePointCoord" Or TypeName(oshapes.Item(I)) = "HybridShapePointExplicit" Then
                    oshapes.Item(I).GetCoordinates point 'extrction de coordonées point dans le repère pièce
                    oposition.GetComponents pos 'extrction de coordonnés repère pièce dans repere général
                    message = message & nom_base & A & " - " & oshapes.Item(I).Name & "(" & Join(point, ",") & ")" & vbLf
                   
                    ' décomposition données coordonées repère de la pièce
                    VecteurX(0) = pos(0)
                    VecteurX(1) = pos(1)
                    VecteurX(2) = pos(2)
                   
                    VecteurY(0) = pos(3)
                    VecteurY(1) = pos(4)
                    VecteurY(2) = pos(5)
                   
                    VecteurZ(0) = pos(6)
                    VecteurZ(1) = pos(7)
                    VecteurZ(2) = pos(8)
                   
                    Origine(0) = pos(9)
                    Origine(1) = pos(10)
                    Origine(2) = pos(11)
                   
                    'X=
                    'Y=
                    'Z=
                   
                    PointName = A & I
                    Set hybridShapePointCoord3 = hybridShapeFactory3.AddNewPointCoord(X, Y, Z)
                    hybridBody3.AppendHybridShape hybridShapePointCoord3
                    part_dest.InWorkObject = hybridShapePointCoord3
                    hybridShapePointCoord3.Name = PointName
   
                End If
            Next
        End If
        MsgBox Join(pos, vbCrLf)
    Next
    MsgBox message
    part_dest.Update

End Sub

Function select_product(texte As String) As Object ' fonction séléctionant un porduit

    Dim EnableSelectionFor(0), UserSelection
   
    EnableSelectionFor(0) = "Product"
    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")
        Exit Function
    Else
        Set select_product = selection.Item(1).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: Création de pionts, changement de référence

Message par Guss_ le Mar 29 Mai 2012 - 20:58

Bon j'ai rebossé sur ma macro, mais je ne trouve toujours pas la solution.

Il y a un objet qui s'appelle HybridShapePointExplicit
qui visiblement définir un point ayant une référence externe, mais je n'ai aucune idée de comment créé un tel objet, je ne trouve que des moyen d'en lire les paramètres.

Quelqu'un aurait-il par hasard réussi à créer via une macro un point ayant une référence externe ?

Guss_
Fédérateur
Fédérateur

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

Revenir en haut Aller en bas

Re: Création de pionts, changement de référence

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