Extraire une surface d'un Assembly dans une autre Part
2 participants
Page 1 sur 1
Extraire une surface d'un Assembly dans une autre Part
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 . 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 !
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 . 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 !
Timotheo- timide
- Messages : 14
Date d'inscription : 22/06/2015
Localisation : Toulouse
Re: Extraire une surface d'un Assembly dans une autre Part
Personnes n'a une solution ? est-ce que mon problème est assez compréhensible ?
bonne journée
bonne journée
Timotheo- timide
- Messages : 14
Date d'inscription : 22/06/2015
Localisation : Toulouse
Re: Extraire une surface d'un Assembly dans une autre Part
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 ?
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_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Extraire une surface d'un Assembly dans une autre Part
Voilà ma fonction que j'utilise pour séléctionner uniquement une part ou un product
exemples d'utilisation
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)
- 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_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Extraire une surface d'un Assembly dans une autre Part
Salut Guss !
Merci pour ta réponse ! 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 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
à 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.... ^^
Merci pour ta réponse ! 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 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
à 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
- Messages : 14
Date d'inscription : 22/06/2015
Localisation : Toulouse
Re: Extraire une surface d'un Assembly dans une autre Part
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 ...
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_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Extraire une surface d'un Assembly dans une autre Part
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
- Messages : 14
Date d'inscription : 22/06/2015
Localisation : Toulouse
Sujets similaires
» Mesure dans un produit entre une PART et un plan d'une autre PART
» Positionner un corps de pièce copié (dans une part 1) dans un repère d'une part 2
» définir une course dans assembly design
» Sélectionner une fonction dans l atelier assembly design
» Paramétrage entre deux repères dans assembly
» Positionner un corps de pièce copié (dans une part 1) dans un repère d'une part 2
» définir une course dans assembly design
» Sélectionner une fonction dans l atelier assembly design
» Paramétrage entre deux repères dans assembly
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum