CATIA V5 | 3DEXPERIENCE
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Le deal à ne pas rater :
Nike : Jusqu’à 50% sur les articles de fin de saison
Voir le deal

Aide pour macro, activation/desactivation d'un solide

3 participants

Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Aide pour macro, activation/desactivation d'un solide

Message par ramzar Jeu 18 Sep 2014 - 15:24

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!

ramzar
timide
timide

Messages : 10
Date d'inscription : 12/09/2014
Localisation : Canada

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par ramzar Ven 19 Sep 2014 - 16:21

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

ramzar
timide
timide

Messages : 10
Date d'inscription : 12/09/2014
Localisation : Canada

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par ramzar Sam 20 Sep 2014 - 14:13

voici une image pour vous aidez à y voir plus clair:

Aide pour macro, activation/desactivation d'un solide Sans_t15

ramzar
timide
timide

Messages : 10
Date d'inscription : 12/09/2014
Localisation : Canada

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par xorman Mer 15 Oct 2014 - 18:50

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
xorman
xorman
actif
actif

Messages : 99
Date d'inscription : 05/09/2008
Age : 47
Localisation : Cherbourg

http://www.myimpression3d.com

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par ramzar Mer 15 Oct 2014 - 22:29

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
timide

Messages : 10
Date d'inscription : 12/09/2014
Localisation : Canada

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par Guss_ Jeu 16 Oct 2014 - 9:14

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
Admin

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

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par ramzar Jeu 16 Oct 2014 - 15:15

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 Sad

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
timide

Messages : 10
Date d'inscription : 12/09/2014
Localisation : Canada

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par Guss_ Jeu 16 Oct 2014 - 17:15

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

Guss_
Admin
Admin

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

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par xorman Ven 17 Oct 2014 - 8:52

moi aussi j' ai souvent ce problème:
Comment dans un PRODUCT allez voir ou scanner dans toutes les PARTS?
xorman
xorman
actif
actif

Messages : 99
Date d'inscription : 05/09/2008
Age : 47
Localisation : Cherbourg

http://www.myimpression3d.com

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par Guss_ Ven 17 Oct 2014 - 10:04

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

Guss_
Admin
Admin

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

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par xorman Ven 17 Oct 2014 - 10:48

l'explorateur d'objet c'est bien F2 dans VBA
Tu as un exemple de code pour illustrer ce que tu viens de dire?
xorman
xorman
actif
actif

Messages : 99
Date d'inscription : 05/09/2008
Age : 47
Localisation : Cherbourg

http://www.myimpression3d.com

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par Guss_ Ven 17 Oct 2014 - 11:16

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

Guss_
Admin
Admin

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

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par ramzar Sam 18 Oct 2014 - 16:40

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

ramzar
timide
timide

Messages : 10
Date d'inscription : 12/09/2014
Localisation : Canada

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par xorman Lun 20 Oct 2014 - 9:12

salut
Excellent cette macro.J'ai une question ?
Q1: A quoi sert cette ligne CATIA.StartWorkbench ("PrtCfg")
xorman
xorman
actif
actif

Messages : 99
Date d'inscription : 05/09/2008
Age : 47
Localisation : Cherbourg

http://www.myimpression3d.com

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par ramzar Lun 20 Oct 2014 - 13:35

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
timide

Messages : 10
Date d'inscription : 12/09/2014
Localisation : Canada

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par xorman Lun 20 Oct 2014 - 15:06

ok en effet on ne peux pas activer un solide si on est dans un Product...d'ou ce changement d'atelier
Bonne continuation
xorman
xorman
actif
actif

Messages : 99
Date d'inscription : 05/09/2008
Age : 47
Localisation : Cherbourg

http://www.myimpression3d.com

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par Guss_ Mar 21 Oct 2014 - 15:33

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
Admin

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

Revenir en haut Aller en bas

Aide pour macro, activation/desactivation d'un solide Empty Re: Aide pour macro, activation/desactivation d'un solide

Message par Contenu sponsorisé


Contenu sponsorisé


Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum