Lancement d'une même macro dans une Part ou un Product

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

R?solu Lancement d'une même macro dans une Part ou un Product

Message par Timotheo le Lun 22 Juin 2015 - 19:59

Bonjour à tous !

Tout nouveau ici, (n'hésitez pas à me poser des question et à voir ma présentation), je vous expose mon tout premier problème :
J'ai déjà réaliser une macro CATIA qui réalise une modélisation géométrique dans une Part. J'aimerais désormais pouvoir lancer cette application à la  fois dans une Part seule ou bien dans une Part présente à l'intérieur d'un Product (j'ai regardé les sujets précédents et impossible de touver une solution donc si la question a déjà été posée le lien me serait fort utile !).

Je me doute bien que mon problème réside dans la déclaration et l'initialisation de ma macro mais j'ai du mal à imaginer un moyen de le faire marcher dans les deux ! Voici ma déclaration :

Code:

'Objet catia
Public partDocument1 As PartDocument
Public part1 As Part
Public hybridShapeFactory1 As Factory

'hybridBodies1 =collection de set geo sous la part
Public hybridBodies1 As HybridBodies

'hybridBodies2 =collection de set geo sous "HOLES"
Public hybridBodies2 As HybridBodies

'hybridBodies3 =collection de set geo sous "hybrid_fast_dia"
Public hybridBodies4 As HybridBodies

'Setholes = set geo "HOLES"
Public Setholes As HybridBody

'hybrid_fast_dia = set geo "choose_fast_dia"
Public hybrid_fast_dia As HybridBody

'hybrid_holeX = set geo "holex"
Public hybrid_holeX As HybridBody

Sub CATMain()
'-----------------------------------------------------------------------------------------------------------------------------
'Declaration des variables
'-----------------------------------------------------------------------------------------------------------------------------
Set Document = CATIA.ActiveDocument
Set partDocument1 = CATIA.ActiveDocument
Set part1 = partDocument1.Part
Set hybridBodies1 = part1.HybridBodies
Set hybridShapeFactory1 = part1.HybridShapeFactory
Set selection = Document.selection
Set selection_pts = Document.selection
Set selection_insurf = Document.selection
Set selection_outsurf = Document.selection

Merci pour votre aide !

Timotheo
timide
timide

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

Revenir en haut Aller en bas

R?solu Re: Lancement d'une même macro dans une Part ou un Product

Message par Guss_ le Mar 23 Juin 2015 - 1:09

Salut,
j'ai pas sous les yeux les termes exactes, mais il me semble qu'avec
set ativedocument.workbench "part design" ça doit passer automatiquement le document actif en part design


Guss_
Fédérateur
Fédérateur

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

Revenir en haut Aller en bas

R?solu Re: Lancement d'une même macro dans une Part ou un Product

Message par Timotheo le Mar 23 Juin 2015 - 23:26

Salut Guss_ !

Merci de ta réponse, si j'ai bien compris parles tu de la commande suivante :
Dim workbench1 As Workbench
Set workbench1 = Document.GetWorkbench("")

Je dois avouer que je n'ai pas trouvé le nom pour rentrer dans le part Design (Part Design ou Part ne fonctionne pas :/)

pour l'instant ma principale erreur se situe ici :

Set partDocument1 = CATIA.ActiveDocument

étant donné que partDocument1 doit être de type Part alors que le CATIA.ActiveDocument renvoie un Product. Je ne suis pas encore très familier avec l'arborescence de CATIA vba ^^

Timotheo
timide
timide

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

Revenir en haut Aller en bas

R?solu Re: Lancement d'une même macro dans une Part ou un Product

Message par Timotheo le Ven 26 Juin 2015 - 20:29

Alors j'ai bossé un peu dessus voilà une méthode qui me semble susceptible d'être utilisable :

Code:

'Objet catia
Public partDocument1 As PartDocument
Public prod1 As Product
Public part1 As Part
Public part2 As Part
Public hybridShapeFactory1 As Factory

Sub CATMain()
'-----------------------------------------------------------------------------------------------------------------------------
'Declaration des variables
'-----------------------------------------------------------------------------------------------------------------------------

Dim parentFileName As String
parentFileName = products1.Item(i).ReferenceProduct.Parent.Name
'If the file name contains ".CATProduct" then loop
If InStr(parenFileName, ".CATProduct") <> 0 Then



Else

        Set Document = CATIA.ActiveDocument
        Set partDocument1 = CATIA.ActiveDocument
        Set part1 = partDocument1.Part
        Set hybridBodies1 = part1.HybridBodies
        Set hybridShapeFactory1 = part1.HybridShapeFactory
        Set selection = Document.selection
        Set selection_pts = Document.selection
        Set selection_insurf = Document.selection
        Set selection_outsurf = Document.selection
       

mais il me manque la partie ou on veut être active dans une part (qu'on sélectionne) d'un product. J'ai trouvé un début de méthode pensez vous que je suis sur la bonne voie ou qu'il y a par exemple beaucoup plus efficient ? Smile

"In order to go from a known “Product” object to get the “PartDocument”
and “Part” that are associated with it you need to go through the
GetMasterShapeRepresentation method."

Code:

Dim prod1 As Product
‘Assume that prod1 gets set to an instance here
Dim partDoc1 As PartDocument
Set partDoc1 = prod1.GetMasterShapeRepresentation(True)
Dim part1 as Part
Set part1 = partDoc1.Part

Timotheo
timide
timide

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

Revenir en haut Aller en bas

R?solu Re: Lancement d'une même macro dans une Part ou un Product

Message par cad00 le Lun 29 Juin 2015 - 23:40

Je ne sais pas si ça peut t’aider, mais pour pouvoir distinguer une part d’un assemblage, j’utilise le code ci-dessous, ce bout de code me sert dans une macro pour lister les éléments d’un assemblage avec leurs références, instance et non de fichiers. Une fois que tu as récupéré le chemin de la pièce tu complètes le macro avec une commande pour ouvrir ta pièce, le modifier, l'enregistrer et ensuite mettre à jour l'assemblage (je doit avoir ça, je regarderais dans mes archives, te tiens au courant...)

En espérant t’avoir aidé.


cad00
actif
actif

Messages : 30
Date d'inscription : 17/03/2015
Localisation : PACA

Revenir en haut Aller en bas

R?solu Re: Lancement d'une même macro dans une Part ou un Product

Message par cad00 le Lun 29 Juin 2015 - 23:42

en enlevant quelques fautes, ça donne ça Smile :

Je ne sais pas si ça peut t’aider, mais pour pouvoir distinguer une part d’un assemblage, j’utilise le code ci-dessous, ce bout de code me sert dans une macro pour lister les éléments d’un assemblage avec leurs références, instance et nom de fichiers. Une fois que tu as récupéré le chemin de la pièce tu complètes la macro avec une commande pour ouvrir ta pièce, la modifier, l'enregistrer et ensuite mettre à jour l'assemblage (je doit avoir ça, je regarderais dans mes archives, te tiens au courant...)

cad00
actif
actif

Messages : 30
Date d'inscription : 17/03/2015
Localisation : PACA

Revenir en haut Aller en bas

R?solu Re: Lancement d'une même macro dans une Part ou un Product

Message par Timotheo le Mer 1 Juil 2015 - 19:38

Salut cad00 ! merci pour ta réponse ! en fait j'ai trouvé la même solution en peu de temps avant Wink je met mon code si cela peut aider d'autres personnes par la suite :

Code:


'Objet catia
Public partDocument1 As PartDocument
Public part1 As Part
Public hybridShapeFactory1 As Factory
Public documents1 As Documents

Sub CATMain()

'-----------------------------------------------------------------------------------------------------------------------------
'Declaration des variables
'-----------------------------------------------------------------------------------------------------------------------------

Set Document = CATIA.ActiveDocument
Set documents1 = CATIA.Documents
Set selection_part = Document.selection

Dim parentFileName As String
parentFileName = Document.Name

'-----------------------------------------------------------------------------------------------------------------------------
'Détermine la part de travail
'-----------------------------------------------------------------------------------------------------------------------------

'Si l'on se trouve dans un Product :
If InStr(parenFileName, ".CATProduct") = 0 Then

MsgBox "Select the Part within you want to create holes "

'selection et activation de la part désirée

InputObjectType(0) = "Part"
status_part = selection_part.SelectElement2(InputObjectType, "Select Part desired", False)

Set partDocument1 = documents1.Item(selection_part.Item(1).Value.Name & ".CATPart")

Set part1 = partDocument1.Part
Set hybridBodies1 = part1.HybridBodies
Set hybridShapeFactory1 = part1.HybridShapeFactory

Set selection = Document.selection
Set selection_pts = Document.selection
Set selection_insurf = Document.selection
Set selection_outsurf = Document.selection
 
 Else
'sinon travail dans la part ouverte
Set part1 = partDocument1.Part
Set hybridBodies1 = part1.HybridBodies
Set hybridShapeFactory1 = part1.HybridShapeFactory

Set selection = Document.selection
Set selection_pts = Document.selection
Set selection_insurf = Document.selection
Set selection_outsurf = Document.selection

 End If



bon maintenant faut que je me concentre sur mon deuxième problème bien plus embêtant ^^

Timotheo
timide
timide

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

Revenir en haut Aller en bas

R?solu Re: Lancement d'une même macro dans une Part ou un Product

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

problème résolu !

Timotheo
timide
timide

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

Revenir en haut Aller en bas

R?solu Re: Lancement d'une même macro dans une Part ou un Product

Message par Timotheo le Ven 21 Aoû 2015 - 3:11

petite modif afin de pouvoir lancer le code même si l'instance de la part n'a pas le même nom que celui de son fichier ! Wink

Code:

Set Document = CATIA.ActiveDocument
Set documents1 = CATIA.Documents
Set selection_part = Document.selection

Dim parentFileName As String
parentFileName = Document.Name

'-----------------------------------------------------------------------------------------------------------------------------
'Détermine la part de travail
'-----------------------------------------------------------------------------------------------------------------------------

'Si l'on se trouve dans un Product :
If InStr(CATIA.ActiveDocument.Name, ".CATProduct") > 1 Then

MsgBox "Select the Part within you want to create holes "

'selection et activation de la part désirée

InputObjectType(0) = "Part"
status_part = selection_part.SelectElement2(InputObjectType, "Select Part desired", False)

Set partDocument1 = documents1.Item(selection_part.Item(1).Value.Parent.Name)

Set part1 = partDocument1.Part

 
 Else
'sinon travail dans la part ouverte

Set part1 = Document.Part


 End If


Timotheo
timide
timide

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

Revenir en haut Aller en bas

R?solu Re: Lancement d'une même macro dans une Part ou un Product

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