Aide pour macro, activation/desactivation d'un solide
3 participants
Page 1 sur 1
Aide pour macro, activation/desactivation d'un solide
Bonjour à tous, j'aimerais avoir votre aide pour une macro catia que j'essaie de faire. Mon niveau de compétence est très bas, puisque je n'ai jamais programmé de macro, que ce soit sur catia ou tout autre plateforme.
Dans mon assemblage j'ai plusieurs part différents portant des noms différents. Dans chacun des parts, j'ai un corps de pièce nommé "conv". Dans se corps de pièce, j'ai une copie avec lien d'un autre corps de pièce nommé "Solide.42". Ce solide est désactivé dans tout mes parts et à l'aide d'une macro, je voudrais pouvoir tous les activés (et avec une autre macro pouvoir les désactivé). Ma problématique, c'est que je ne sais pas comment faire une macro qui va pouvoir s’exécute peu importe le nom de l'assemblage et du part.
Voici un début de macro que j'ai fait, à l'aide du mode "enregistrement de macro", pour faire une recherche de "solide.42":
Sub CATMain()
Set productDocument1 = CATIA.ActiveDocument
Set selection1 = productDocument1.Selection
selection1.Search "Name='solide.42',all"
End Sub
Merci beaucoup!
Dans mon assemblage j'ai plusieurs part différents portant des noms différents. Dans chacun des parts, j'ai un corps de pièce nommé "conv". Dans se corps de pièce, j'ai une copie avec lien d'un autre corps de pièce nommé "Solide.42". Ce solide est désactivé dans tout mes parts et à l'aide d'une macro, je voudrais pouvoir tous les activés (et avec une autre macro pouvoir les désactivé). Ma problématique, c'est que je ne sais pas comment faire une macro qui va pouvoir s’exécute peu importe le nom de l'assemblage et du part.
Voici un début de macro que j'ai fait, à l'aide du mode "enregistrement de macro", pour faire une recherche de "solide.42":
Sub CATMain()
Set productDocument1 = CATIA.ActiveDocument
Set selection1 = productDocument1.Selection
selection1.Search "Name='solide.42',all"
End Sub
Merci beaucoup!
ramzar- timide
- Messages : 10
Date d'inscription : 12/09/2014
Localisation : Canada
Re: Aide pour macro, activation/desactivation d'un solide
Bonjour à tous, voici un début de macro, par contre, je voudrais activer le solide.42. J'ai présentement un "bug" à la ligne:solid1.Activate.
Sub CATMain()
Dim selection as selection
Set Selection = CATIA.ActiveDocument.Selection
Selection.Search "Name='Solide.42',all"
Dim solid1 As Shape
Set solid1 = selection
solid1.Activate
solid1.Update
Selection.Clear
End Sub
Est-ce que quelqu'un pourrait m'indiquer quoi faire pour activer "solide.42". Merci beaucoup
Sub CATMain()
Dim selection as selection
Set Selection = CATIA.ActiveDocument.Selection
Selection.Search "Name='Solide.42',all"
Dim solid1 As Shape
Set solid1 = selection
solid1.Activate
solid1.Update
Selection.Clear
End Sub
Est-ce que quelqu'un pourrait m'indiquer quoi faire pour activer "solide.42". Merci beaucoup
ramzar- timide
- Messages : 10
Date d'inscription : 12/09/2014
Localisation : Canada
Re: Aide pour macro, activation/desactivation d'un solide
voici une image pour vous aidez à y voir plus clair:
ramzar- timide
- Messages : 10
Date d'inscription : 12/09/2014
Localisation : Canada
Re: Aide pour macro, activation/desactivation d'un solide
essaie ca
Sub CATMain()
'active la Part
Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument
'selectionne les solide.42
Dim selection1 As Selection
Set selection1 = partDocument1.Selection
selection1.Search "(Name=*solide'.'42* & CATPrtSearch.MechanicalFeature),all"
'***********************
'active les solide.42
'**********************
'
Dim MyPart As Part
Set MyPart = partDocument1.Part
Dim Mybodies As Bodies
Set Mybodies = MyPart.Bodies
Dim Mybody As Body
Set Mybody = Mybodies.Item("ConV")
Dim MyShape As Shapes
Set MyShape = Mybody.Shapes
Dim MySolid As Solid
Set MySolid = MyShape.Item("Solide.42")
MyPart.Inactivate MySolid 'faire un test
MyPart.Activate MySolid 'faire un test
MyPart.Update
End Sub
il reste à tester si le solide est activé ou pas....demain peut etre si je suis en forme
Sub CATMain()
'active la Part
Dim partDocument1 As PartDocument
Set partDocument1 = CATIA.ActiveDocument
'selectionne les solide.42
Dim selection1 As Selection
Set selection1 = partDocument1.Selection
selection1.Search "(Name=*solide'.'42* & CATPrtSearch.MechanicalFeature),all"
'***********************
'active les solide.42
'**********************
'
Dim MyPart As Part
Set MyPart = partDocument1.Part
Dim Mybodies As Bodies
Set Mybodies = MyPart.Bodies
Dim Mybody As Body
Set Mybody = Mybodies.Item("ConV")
Dim MyShape As Shapes
Set MyShape = Mybody.Shapes
Dim MySolid As Solid
Set MySolid = MyShape.Item("Solide.42")
MyPart.Inactivate MySolid 'faire un test
MyPart.Activate MySolid 'faire un test
MyPart.Update
End Sub
il reste à tester si le solide est activé ou pas....demain peut etre si je suis en forme
Re: Aide pour macro, activation/desactivation d'un solide
Merci xorman, la macro fonctione très bien, mais elle marche seulement si la fenetre active est le part (dans mon exemple plus haut, sob-1320-pt-1). Si je suis dans un assemblage, et que je voudrais que la macro passe dans chaque part, elle ne marche pas. (J'avais oublié de spécifié plus haut désolé).Mais c'est un bon début merci beaucoup!
ramzar- timide
- Messages : 10
Date d'inscription : 12/09/2014
Localisation : Canada
Re: Aide pour macro, activation/desactivation d'un solide
Je pense qu'il faille simplement modifier la dimension des variables, passer les part en product, ou aussi ne pas leur donner de dimension (c'est moins propre mais en vba c'est parfois la seule manière de s'en sortir)
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Aide pour macro, activation/desactivation d'un solide
Que veux-tu dire par modifier ou ne pas donner de dimension aux variable? Aussi, mes macros sont tous en .CATScript
Entre temps, j'ai essayé autre chose, mais ca ne marche toujours pas
Sub CATMain()
Dim productDocument1 as Document
Dim product1 As Product
Dim products1 As Products
Dim selection As Selection
Set productDocument1 = CATIA.ActiveDocument
Set product1 = productDocument1.Product
Set products1 = product1.Products
Set selection = CATIA.ActiveDocument.Selection
selection.Search "CATPrtSearch.BodyFeature.NameInGraph=conv,all"
Dim selection1 As Selection
Set selection1 = CATIA.ActiveDocument.Selection
selection1.Search "CATPrtSearch.MechanicalFeature.Activity=FALSE,sel"
If selection1.Count = 0 Then
Msgbox "No desactivated features."
Else
If selection1.Count > 0 Then
Selection1.Clear
partcount = product1.Products.Count
Dim i As Integer
'Loop through all parts
For i=1 to partcount
'Apply design mode to each part
products1.Item(i).ApplyWorkMode DESIGN_MODE
'Dim partDocument1 As Document
'Set partDocument1 = products1.Item(i)
'Dim part1 As Part
'Set part1 = partDocument1.part
'Dim bodies1 As Bodies
'Set bodies1 = part1.Bodies
'Dim body1 As Body
'Set body1 = bodies1.Item("conv")
'Dim shapes1 As Shapes
'Set shapes1 = body1.Shapes
'Dim solid1 As Shapes
'Set solid1 = shapes1.Item("Solide.42")
'part1.Activate solid1
'part1.Update
'Next 'i
End If
'End if
End Sub
Entre temps, j'ai essayé autre chose, mais ca ne marche toujours pas
Sub CATMain()
Dim productDocument1 as Document
Dim product1 As Product
Dim products1 As Products
Dim selection As Selection
Set productDocument1 = CATIA.ActiveDocument
Set product1 = productDocument1.Product
Set products1 = product1.Products
Set selection = CATIA.ActiveDocument.Selection
selection.Search "CATPrtSearch.BodyFeature.NameInGraph=conv,all"
Dim selection1 As Selection
Set selection1 = CATIA.ActiveDocument.Selection
selection1.Search "CATPrtSearch.MechanicalFeature.Activity=FALSE,sel"
If selection1.Count = 0 Then
Msgbox "No desactivated features."
Else
If selection1.Count > 0 Then
Selection1.Clear
partcount = product1.Products.Count
Dim i As Integer
'Loop through all parts
For i=1 to partcount
'Apply design mode to each part
products1.Item(i).ApplyWorkMode DESIGN_MODE
'Dim partDocument1 As Document
'Set partDocument1 = products1.Item(i)
'Dim part1 As Part
'Set part1 = partDocument1.part
'Dim bodies1 As Bodies
'Set bodies1 = part1.Bodies
'Dim body1 As Body
'Set body1 = bodies1.Item("conv")
'Dim shapes1 As Shapes
'Set shapes1 = body1.Shapes
'Dim solid1 As Shapes
'Set solid1 = shapes1.Item("Solide.42")
'part1.Activate solid1
'part1.Update
'Next 'i
End If
'End if
End Sub
ramzar- timide
- Messages : 10
Date d'inscription : 12/09/2014
Localisation : Canada
Re: Aide pour macro, activation/desactivation d'un solide
tu définie une variable en écrivant
Dim nom_de_la_variable
ensuite on ajoute sont type (ou la dimension )
Dim nom_de_la_variable as type_de_la_variable
mais la partie "as type_de_la_variable"
n'est pas obligatoire en VB
Dim nom_de_la_variable
ensuite on ajoute sont type (ou la dimension )
Dim nom_de_la_variable as type_de_la_variable
mais la partie "as type_de_la_variable"
n'est pas obligatoire en VB
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Aide pour macro, activation/desactivation d'un solide
moi aussi j' ai souvent ce problème:
Comment dans un PRODUCT allez voir ou scanner dans toutes les PARTS?
Comment dans un PRODUCT allez voir ou scanner dans toutes les PARTS?
Re: Aide pour macro, activation/desactivation d'un solide
perso j'utilise pas mal l’expirateur d'objets en vba du coup on peut voir assez facilement l’arborescence
En faisant un product.count on à le nombre d’éléments dans un produit, mais attention ce n'est pas forcément que des part ou autre product.
Du coup je ferais une boule FOR de 1 à product.count et ensuite une ligne porduct.intem(n_boucle).une_propriété qui me permettrait d'identifier les éléments que le veux traiter
En faisant un product.count on à le nombre d’éléments dans un produit, mais attention ce n'est pas forcément que des part ou autre product.
Du coup je ferais une boule FOR de 1 à product.count et ensuite une ligne porduct.intem(n_boucle).une_propriété qui me permettrait d'identifier les éléments que le veux traiter
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Aide pour macro, activation/desactivation d'un solide
l'explorateur d'objet c'est bien F2 dans VBA
Tu as un exemple de code pour illustrer ce que tu viens de dire?
Tu as un exemple de code pour illustrer ce que tu viens de dire?
Re: Aide pour macro, activation/desactivation d'un solide
oui c'est F2 et j'utilise aussi pas mal la fenetre "local window" qui affichent toute les variables et permet de voir ce qu'il y a dedans
Pour le code j'ai rien sous là mains de simple mais ça donne un truc dans le genre :
Sub CATMain()
Dim productDocument1 As Document
Dim product1 As Product
Dim products1 As Products
Dim nb_elements As Integer
Dim N_boucle As Integer
Dim nom As String
Set productDocument1 = CATIA.ActiveDocument
Set product1 = productDocument1.Product
Set products1 = product1.Products
nb_elements = products1.Count
For N_boucle = 1 To nb_elements
nom = products1.Item(1).Name
MsgBox nom & " " & N_boucle
Next
End Sub
Pour le code j'ai rien sous là mains de simple mais ça donne un truc dans le genre :
Sub CATMain()
Dim productDocument1 As Document
Dim product1 As Product
Dim products1 As Products
Dim nb_elements As Integer
Dim N_boucle As Integer
Dim nom As String
Set productDocument1 = CATIA.ActiveDocument
Set product1 = productDocument1.Product
Set products1 = product1.Products
nb_elements = products1.Count
For N_boucle = 1 To nb_elements
nom = products1.Item(1).Name
MsgBox nom & " " & N_boucle
Next
End Sub
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Re: Aide pour macro, activation/desactivation d'un solide
J'ai finalement trouvé. Originalement je travaillais en CATScript mais j'ai essayé VBA. Donc voici ma macro pour ceux que ca pourrait aider!
Sub CATMain()
Dim oRootProductDocument As Document
Dim oRootProduct As Product
Dim oPartProducts As Products
Dim oPartProduct As Product
Dim oPartDocument As Document
Dim oPart As Part
Dim oSelection As Selection
Dim oBodies As Bodies
Dim oBody As Body
Dim oShape As Shape
Dim i As Integer
Set oRootProductDocument = CATIA.ActiveDocument
Set oRootProduct = oRootProductDocument.Product
Set oPartProducts = oRootProduct.Products
Set oSelection = CATIA.ActiveDocument.Selection
'Turn off refresh display
CATIA.RefreshDisplay = False
'If you are using cache apply design mode to the entire assembly instead of each part
oRootProduct.ApplyWorkMode DESIGN_MODE
'Loop through all parts
For i = 1 To oPartProducts.Count
Set oPartProduct = oPartProducts.Item(i)
Set oPartDocument = oPartProduct.ReferenceProduct.Parent
Set oPart = oPartDocument.Part
Set oShape = oPart.FindObjectByName("Solide.42")
If TypeName(oShape) <> "Nothing" Then
oSelection.Clear
oSelection.Add oPart
CATIA.StartWorkbench ("PrtCfg") 'starts part design
oSelection.Clear
oPart.Activate oShape
End If
oSelection.Clear
oSelection.Add oPartProduct
CATIA.StartWorkbench ("Assembly") 'starts assembly design
oSelection.Clear
oPart.Update 'Be careful updating the entire part…if there is something that
'won’t update, the macro will fail. You can update a specific object using
'oPart.UpdateObject oShape
Next
'Turn on refresh display
CATIA.RefreshDisplay = True
End Sub
Sub CATMain()
Dim oRootProductDocument As Document
Dim oRootProduct As Product
Dim oPartProducts As Products
Dim oPartProduct As Product
Dim oPartDocument As Document
Dim oPart As Part
Dim oSelection As Selection
Dim oBodies As Bodies
Dim oBody As Body
Dim oShape As Shape
Dim i As Integer
Set oRootProductDocument = CATIA.ActiveDocument
Set oRootProduct = oRootProductDocument.Product
Set oPartProducts = oRootProduct.Products
Set oSelection = CATIA.ActiveDocument.Selection
'Turn off refresh display
CATIA.RefreshDisplay = False
'If you are using cache apply design mode to the entire assembly instead of each part
oRootProduct.ApplyWorkMode DESIGN_MODE
'Loop through all parts
For i = 1 To oPartProducts.Count
Set oPartProduct = oPartProducts.Item(i)
Set oPartDocument = oPartProduct.ReferenceProduct.Parent
Set oPart = oPartDocument.Part
Set oShape = oPart.FindObjectByName("Solide.42")
If TypeName(oShape) <> "Nothing" Then
oSelection.Clear
oSelection.Add oPart
CATIA.StartWorkbench ("PrtCfg") 'starts part design
oSelection.Clear
oPart.Activate oShape
End If
oSelection.Clear
oSelection.Add oPartProduct
CATIA.StartWorkbench ("Assembly") 'starts assembly design
oSelection.Clear
oPart.Update 'Be careful updating the entire part…if there is something that
'won’t update, the macro will fail. You can update a specific object using
'oPart.UpdateObject oShape
Next
'Turn on refresh display
CATIA.RefreshDisplay = True
End Sub
ramzar- timide
- Messages : 10
Date d'inscription : 12/09/2014
Localisation : Canada
Re: Aide pour macro, activation/desactivation d'un solide
salut
Excellent cette macro.J'ai une question ?
Q1: A quoi sert cette ligne CATIA.StartWorkbench ("PrtCfg")
Excellent cette macro.J'ai une question ?
Q1: A quoi sert cette ligne CATIA.StartWorkbench ("PrtCfg")
Re: Aide pour macro, activation/desactivation d'un solide
Cette ligne sert à passer du module Product au module Part. Pour activer un solide, il faut obligatoirement être dans le part; On ne peut pas activer un solide si on est en Product. Donc, cette ligne change de module pour aller en part et celle si (CATIA.StartWorkbench ("Assembly")) permet de revenir en Product avant de passer au suivant.
ramzar- timide
- Messages : 10
Date d'inscription : 12/09/2014
Localisation : Canada
Re: Aide pour macro, activation/desactivation d'un solide
ok en effet on ne peux pas activer un solide si on est dans un Product...d'ou ce changement d'atelier
Bonne continuation
Bonne continuation
Re: Aide pour macro, activation/desactivation d'un solide
Ah oui pas bête l'idée de changer de workbench pour atteindre les objets, je pensais qu'ils étaient forcément tous dispo quelque soit le workbench.
Guss_- Admin
- Messages : 530
Date d'inscription : 08/01/2010
Sujets similaires
» aide pour macro cartouche svp
» Aide pour programmer en VBA
» Lier un fichier d'aide a une macro
» Modifier l'interface d'un saumon de voilure
» Récupération des paramètres électriques d'un CATpart à l'aide d'une macro
» Aide pour programmer en VBA
» Lier un fichier d'aide a une macro
» Modifier l'interface d'un saumon de voilure
» Récupération des paramètres électriques d'un CATpart à l'aide d'une macro
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|