Extraire une surface d'un Assembly dans une autre Part

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

Extraire une surface d'un Assembly dans une autre Part

Message par Timotheo le Jeu 25 Juin 2015 - 1:05

Salut tout le monde !

Je crée de nouveau un topic car on rencontre souvent ce problème dans les programmes en cours actuellement :

On a un Assemblage de plusieurs parts aléatoires et le but serait de créer une part supplémentaire (jusque là pas de problème) puis d'y insérer une surface extraite directement d'une autre part (un volume classique) et là ça coince Sad  . Catia réalise cela très facilement manuellement, on est actif dans notre part créée on sélectionne la surface désirée, on utilise l'outil extraire et hop magie elle apparait ^^, ça s'écrit très bien en enregistrement de macro (encore qu'il utilise des referencefromBRepName mais bon)

en fait le principal problème est à mon avis de bien sélectionner la valeur/nature de la surface à extraire. Est-ce que quelqu'un a déjà été confronté à ce problème ?

Bonne Journée ! Wink

Timotheo
timide
timide

Messages : 14
Date d'inscription : 22/06/2015
Localisation : Toulouse

Revenir en haut Aller en bas

Re: Extraire une surface d'un Assembly dans une autre Part

Message par Timotheo le Mar 11 Aoû 2015 - 0:23

Personnes n'a une solution ? est-ce que mon problème est assez compréhensible ?

bonne journée Wink

Timotheo
timide
timide

Messages : 14
Date d'inscription : 22/06/2015
Localisation : Toulouse

Revenir en haut Aller en bas

Re: Extraire une surface d'un Assembly dans une autre Part

Message par Guss_ le Jeu 13 Aoû 2015 - 23:15

J'ai déjà fais quelque chose qui avait quelques ressemblance, une extraction de points dans différentes parts pour les reporter dans une part afin de n'avoir que la positions de certains points clefs et en extraire les coordonnées de chacun les uns par rapport aux autre.

Je me souvient qu'il fallait que je passe par des copies sans liens, et que ce n'était pas simple de recréer les nouveaux points.

J'avais fait un filtre pour sélectionner les objets dont les points était à reporter. Lors de la sélection, si tu ne met pas de filtre tu peux aussi bien sélectionner un point une part un produit, une face, un volume ... C'est peut être là qu'est ton soucis ?

Guss_
Fédérateur
Fédérateur

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

Revenir en haut Aller en bas

Re: Extraire une surface d'un Assembly dans une autre Part

Message par Guss_ le Jeu 13 Aoû 2015 - 23:28

Voilà ma fonction que j'utilise pour séléctionner uniquement une part ou un product
Code:

Function select_(texte As String, type_ As String) As Object

    Dim EnableSelectionFor(0), UserSelection
   
    EnableSelectionFor(0) = type_ ' ici on défini quel type de sélection on va faire
    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 l'objet sélectionné
    End If
End Function

exemples d'utilisation

Code:

Dim Product_origine As Part
Set Product_origine = select_("sélectionnez départ", "Part")

Après il faut faire attention part et product ne sont pas différencier pareil dans la hiérarchie des objets, si je me souvient bien "part" peut représente également product (faut utilise l’observateur d'objet vba pour comprendre)

Guss_
Fédérateur
Fédérateur

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

Revenir en haut Aller en bas

Re: Extraire une surface d'un Assembly dans une autre Part

Message par Timotheo le Ven 14 Aoû 2015 - 21:21

Salut Guss !

Merci pour ta réponse ! Smile oui ma macro réalise aussi une extraction de points en datum et là il n'y a pas de problème seulement impossible de faire la même chose avec une surface Sad du coup je vais essayer de faire une extract dans la part originel (ton bout de code me sera bien utile thx!) puis la copier en datum dans l'autre part Wink

à l'origine mon but tout simple était de mesurer la distance entre un point d'une part par rapport à cette surface d'une autre part sauf que évidemment en vba Catia c'est jamais simple.... ^^


Timotheo
timide
timide

Messages : 14
Date d'inscription : 22/06/2015
Localisation : Toulouse

Revenir en haut Aller en bas

Re: Extraire une surface d'un Assembly dans une autre Part

Message par Guss_ le Sam 15 Aoû 2015 - 0:14

Mon code doit traîner dans une des sujet du forum, je vais tenté de remettre la main dessus.

sinon j'avais posé la question à la hotline s'il y avait une fonction pour importer directement de point d'une par à une autre comme à la manière graphique, mais d'après eux il faut faire les calculs de changement de repère dans le code et que ça ne le fait pas tout seul...

J'ai tout de même un doute là dessus, car c'est bien le propre d'un moteur 3D de pouvoir donner ce genre de donnée directement sans avoir à le recalculer ...
Par contre il est possible que Dassault n'ait pas autorisé, ou ait bridé certaine fonctions vba ...

Guss_
Fédérateur
Fédérateur

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

Revenir en haut Aller en bas

Re: Extraire une surface d'un Assembly dans une autre Part

Message par Timotheo le Mar 1 Sep 2015 - 0:54

voilà comment extraire une surface issue d'une autre part (pas très efficient mais ça a l'avantage de fonctionner ^^) on commence avec le niveau bleu sur l'assembly général :

Code:


'selection uniquement les faces
InputType(0) = "Face"

'selection
status_sel = selection_line1.SelectElement2(InputType, "Select output Surface", False)

Set val_line1 = selection_line1.Item(1).Value
Set reference_line1 = selection_line1.Item(1).Reference

Set objPart = GetPartFromObject(val_line1)
If objPart Is Nothing Then
  MsgBox "The Part object could not be accessed.", 64, "Error"
  Exit Sub
Else
  MsgBox "The Part object from the selected surface is : " & objPart.Name
End If

CATIA.StartWorkbench ("PrtCfg")

Dim myHSF As HybridShapeFactory
Set myHSF = objPart.HybridShapeFactory

Dim myBodies As Bodies
Set myBodies = objPart.Bodies

Dim myHBBody As HybridBody
Set myHBBody = objPart.HybridBodies.Item(1)

objPart.InWorkObject = myHBBody

Dim myHSE As HybridShapeExtract
Set myHSE = myHSF.AddNewExtract(val_line1)

myHSE.PropagationType = 2
myHBBody.AppendHybridShape myHSE
myHSE.ComplementaryExtract = False
myHSE.IsFederated = False

objPart.Update

selection_surf.Clear
selection_surf.Add myHSE
selection_surf.Copy
selection_surf.Clear

objPart.Update

selection_line1.Clear


selection_prod.Clear
selection_prod.Add product2
CATIA.StartWorkbench ("Assembly")
selection_prod.Clear

selection_std.Clear
selection_std.Add part_std
CATIA.StartWorkbench ("PrtCfg")

titlesurf = "surface temp"
Set obj = part_std.FindObjectByName(titlesurf)

If TypeName(obj) = "Nothing" Then
   
    Set hybrid_surf_temp = hybridBodies00.Add()
    hybrid_surf_temp.Name = titlesurf
part_std.Update

End If

Set hybrid_surf_temp = hybridBodies00.Item(titlesurf)
part_std.InWorkObject = hybrid_surf_temp

selection_surf.Add hybrid_surf_temp
selection_surf.PasteSpecial "CATPrtResultWithOutLink"
selection_surf.Clear

selection_std.Clear



Timotheo
timide
timide

Messages : 14
Date d'inscription : 22/06/2015
Localisation : Toulouse

Revenir en haut Aller en bas

Re: Extraire une surface d'un Assembly dans 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