Lancement d'une même macro dans une Part ou un Product
3 participants
Page 1 sur 1
Lancement d'une même macro dans une Part ou un Product
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 :
Merci pour votre aide !
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
- Messages : 14
Date d'inscription : 22/06/2015
Localisation : Toulouse
Re: Lancement d'une même macro dans une Part ou un Product
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
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_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Lancement d'une même macro dans une Part ou un Product
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 ^^
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
- Messages : 14
Date d'inscription : 22/06/2015
Localisation : Toulouse
Re: Lancement d'une même macro dans une Part ou un Product
Alors j'ai bossé un peu dessus voilà une méthode qui me semble susceptible d'être utilisable :
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 ?
"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:
'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 ?
"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
- Messages : 14
Date d'inscription : 22/06/2015
Localisation : Toulouse
Re: Lancement d'une même macro dans une Part ou un Product
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é.
En espérant t’avoir aidé.
cad00- actif
- Messages : 33
Date d'inscription : 17/03/2015
Localisation : PACA
Re: Lancement d'une même macro dans une Part ou un Product
en enlevant quelques fautes, ça donne ça :
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...)
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
- Messages : 33
Date d'inscription : 17/03/2015
Localisation : PACA
Re: Lancement d'une même macro dans une Part ou un Product
Salut cad00 ! merci pour ta réponse ! en fait j'ai trouvé la même solution en peu de temps avant je met mon code si cela peut aider d'autres personnes par la suite :
bon maintenant faut que je me concentre sur mon deuxième problème bien plus embêtant ^^
- 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
- Messages : 14
Date d'inscription : 22/06/2015
Localisation : Toulouse
Re: Lancement d'une même macro dans une Part ou un Product
problème résolu !
Timotheo- timide
- Messages : 14
Date d'inscription : 22/06/2015
Localisation : Toulouse
Re: Lancement d'une même macro dans une Part ou un Product
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 !
- 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
- Messages : 14
Date d'inscription : 22/06/2015
Localisation : Toulouse
Sujets similaires
» Macro Changement de la couleur d'un Part dans un Product suivant une recherche du nom dans un tableau excel
» Macro supprimer toutes les matières dans une part
» Macro qui réordonne les parts dans le product
» comment sélectionner une part dans un product
» copier / collage special nom du part non modifié dans le product
» Macro supprimer toutes les matières dans une part
» Macro qui réordonne les parts dans le product
» comment sélectionner une part dans un product
» copier / collage special nom du part non modifié dans le product
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum