Aller au contenu

Modifification de Couleur avec une macro


Messages recommandés

Posté(e)

Bonjour à tous,

 

Voila je suis entrain de créer une macro pour catia et j'aimerai savoir si il existe une focntion pour modifier les couleurs d'un élément.

 

Je travaille dans une part et j'aimerai par exemple modifier la couleur d'un trou ou d'un pad. Comment faire? :casstet:

 

merci d'avance

 

Enael

Posté(e)

je ne vais pas beaucoup t'avancer sur ce sujet pour l'instant, mais laisse-moi un peu de temps, je vais regarder si j'ai qq chose à ce sujet.

 

pour l'instant, je peux te dire que nous utilisons plusieurs procédés dans les applis qui ont été développées par une boite de développement.

dans nos applis:

1) on est capable de colorier des faces d'un solide à partir d'un fichier qui sert de référence (même si le solide est mort)

2) on est capable d'attribuer une couleur à un product entier

3) on est capable de retrouver la couleur d'une face d'un joindre même si la surface a été copiée en tant que résultat dans un catpart à part

4) on est capable de mettre en surbrillance un solide entier

 

donc tout ce que tu veux faire est réalisable, maintenant les applis ont été réalisées avec du CAA; va falloir fouiller plus loin........... :P

 

@+ tard

gawel

Posté(e)

Bon,

pas possible d'accéder à des informations sur les fonctions couleurs utilisés dans les applis (cest que des .exe et des dll)

 

as-tu essayé:

Set visProperties1 = CATIA.ActiveDocument.Selection.VisProperties

visProperties1.SetRealColor 255,0,0,1

 

ici on modifie la couleur sur une sélection, il suffit de changer la sélection par autre chose en scrutant l'arbre de construction; les 3 premiers chiffres sont les couleurs RGB, le dernier qui a comme valeur 0 ou 1 concerne peut-être bien de l'héritage pour les enfants (??)

 

à tester.......!

 

gawel

Posté(e)

MERCI

 

Ah ouf enfin ca marche ou presque. En fait je ne sais pas pourquoi ca marche parce que javais déjà tester cette méthode et ca n'avais rien donné . Bon la ca marche maintenant j'ai un autre problème que je ne comprend pas.

 

Comment faire pour sélectionner juste un trou par exemple. C'est bizarre parce que certaines fonction que j'utilise dans une autre macro ne marche plus avec celle que je suis enttrain de faire. Je comprend pas bien mais bon.

 

Merci encore

 

@+

 

Enael

Posté(e)

tant mieux,

 

pour sélectionner juste un trou, soit il va falloir que tu le cherches par son nom ("trou.1"), soit par une autre particularités (un paramètre attaché par exemple)

 

tout dépend aussi si ces trous sont toujours présents ou si c'est variable.....

 

à voir !

 

gawel

Posté(e)

ou aussi par sélection dans catia !!!!! j'avais oublié celle-là, mais là ça rappelle un de tes messages sur la sélection en dehors de la userform, tant que c'est pas réglé, tu ne pourras pas utiliser cette solution.

 

gawel

Posté(e)

Ben le problème c'est que comme tu l'a dit la sélection dans la catia (Sélection manuelle) ne m'est pas très util vu que j'ai toujours un userform affiché devant donc on ne peut pas cliquer dans l'arrière plan. :casstet:

 

Mais moi ca qu'il me faudrait c'est uen sélection automatique. Je réussi a récupérer les nom de tout les éléments (trous et autres) qui m'interressent et jaimerai savoir comment faire pour les afficher comme sélectionné dans l'arbres.

 

Voila

 

Merci

 

Enael

Posté(e)

Ben le problème c'est que comme tu l'a dit la sélection dans la catia (Sélection manuelle) ne m'est pas très util vu que j'ai toujours un userform affiché devant donc on ne peut pas cliquer dans l'arrière plan. :casstet:

 

Mais moi ca qu'il me faudrait c'est uen sélection automatique. Je réussi a récupérer les nom de tout les éléments (trous et autres) qui m'interressent et jaimerai savoir comment faire pour les afficher comme sélectionné dans l'arbres.

 

Voila

 

Merci

 

Enael

Posté(e)

Ben j'essayer ta méthode dans un peu tout les sens mais j'ai pas encore trouver le bon apparement.

Ca marche pas.

 

 

J'ai essayer ca :

 

Set doc1 = CATIA.ActiveDocument

 

Set part1 = doc1.Part

 

Set bodies1 = part1.Bodies

 

Set body1 = bodies1.Item(1)

 

Set Shape1 = body1.Shapes.Item(2)

 

nam = Shape1.name

MsgBox nam

 

Set toto = Shape1.name.Selection

 

on ne peut pas mettre Nam a la place shape1.name dans le Set Toto car Nam n'est pas un objet juste une chaine;

Donc voila dis moi ou j'ai fait uen erreur si tu en vois une, stp

 

@+

 

Enael

 

Posté(e)

j'ai pas essayé, mais j'aurais mis:

 

Set doc1 = CATIA.ActiveDocument

 

Set part1 = doc1.Part

 

Set bodies1 = part1.Bodies

 

Set body1 = bodies1.Item(1)

 

Set Shape1 = body1.Shapes.Item(2)

 

'nam = Shape1.name

'MsgBox nam

 

dim toto as selection

Set toto = Shape1.Selection

 

'j'affecte la selection directement sur l'objet Shape.1

faudrait que j'essaye en situation réelle pour voir moi-même

 

Gawel

Posté(e)

Salut

 

Rassure toi javais déjà essayé ca aussi mais il me met une erreur du style : Object doesn't support this property or method.

 

Donc je ne vois pas trop coment faire pour cette histoire de sélection mais je me souviens avoir déjà eu ce problème et avoir déjà essayer de le résoudre, seulement je n'avais pas réussi <acronym class=dict title=.

 

Bon ben on va chercher encore

Ahh! les joie de Catia :casstet:

 

@+

 

Enael

 

 

Posté(e)

regarde ce script que j'ai trouvé dans l'aide de catia; on y trouve le highlight(vers la fin avec un commentaire):

 

Option Explicit

' COPYRIGHT DASSAULT SYSTEMES 2001

Dim Language as String

Language="VBScript"

 

' ***********************************************************************

' Purpose: This macro:

' 1 - Creates a rule base

' 2 - Adds the check below to this rulebase

' (for all) H:Hole

' H.Diameter>12mm

' 3 - Determines whether the rule base is to be solved or not

' 4 - Solves the rulebase if the rule base is to be solved

' 5 - Highlight the failed items

'

' Assumptions:

' This macro is intended to be run on the

' CAAKhwRuleBaseCreate.CATPart document

'

' Author: Carole ROULLE

' Languages: VBScript

' Locales: English (United States)

' CATIA Level: V5R6

' ***********************************************************************

 

Sub CATMain()

CATIA.DisplayFileAlerts = False

 

Dim oActiveDoc As Document

Set oActiveDoc = CATIA.ActiveDocument

 

' Check whether the document is a CATPart

If (InStr(oActiveDoc.Name,".CATPart")) <> 0 Then

 

' Retrieve the Relations collection

Dim oRel As Relations

Set oRel = oActiveDoc.Part.Relations

 

' Create the RB1 rulebase

Dim oRuleBase As Relation

Set oRuleBase = oRel.CreateRuleBase("RB1")

 

' Create the RuleSet.1 rule set and the HDiaCheck below

' the created rule set

Dim oCheck As Relation

Set oCheck= oRuleBase.RuleSet.CreateCheck("HDiaCheck","H:Hole","H.Diameter>12mm","RuleSet.1")

 

' The rule base needs to be solved

' To confirm this, the rule base fingerprint is retrieved

' if the Fingerprint is 0 - the rule base needs be solved

' otherwise it is solved

if (oRuleBase.Fingerprint = 0) then

msgbox "The rule base must be solved - Click OK to solve the rule base"

 

' Solve the rule base

oRuleBase.Deduce()

 

else

msgbox "The rule base is solved"

end if

 

' Highlight the elements not satifying the check criteria

' Reminder: elements are highlighted in the geometry area

' and in the specification tree as well

' Three holes are highlighted after the macro has finished running

oCheck.Highlight

' oRuleBase.Report()

 

 

CATIA.ActiveDocument.Part.Update

else MsgBox "The active document must be a CATPart"

end if

 

End Sub

 

 

y'a donc cet objet "highlight" que l'on traduit par surbrillance

y'a quand même un hic, c'est que chez moi, il ne supporte pas l'objet highlight; je me demande si ce n'est pas lié à une licence ou à une librairie (du style KWE).

à voir

 

gawel

Posté(e)

Pas mal, vu que je suis plus que nul en anglais je n'avais pas penser à ca.

 

J'ai essayer chez moi et ca ne marche pas non plus mais y a de l'idée et surement quelques choses à exploiter.

 

Je vais continuer a faire des teste dessus si j'ai du nouveau ej te tiens au courant.

 

@+

 

Enael

  • 2 mois après...
Posté(e)

Salut enael,

 

je reviens sur ce sujet, j'ai du neuf; cela concerne la sélection; après par rapport à la surbrillance, il faut aller voir dans les propriétés de vsiproperties. Bon, j'arrive pas à avoir mon résultat final, mais ça ne plante pas et je peux sélectionner en arrière-plan des objets. Il faut pour ça:

 

mettre ta userform en modal:

userform1.Show (Modal)

 

ensuite voici le code:

 

Dim myDocument As Document

Set myDocument = CATIA.ActiveDocument

 

Dim mySelection As Selection

Set mySelection = myDocument.Selection

 

If mySelection.Count <> 1 Then

MsgBox "sélectionner une part"

Do Until (mySelection.Count = 1)

If mySelection.Count = 0 Then

DoEvents

Set mySelection = CATIA.ActiveDocument.Selection

If select_count > 0 Then

Set partobj = CATIA.ActiveDocument.Selection.FindObject("CATIAPart")

CATIA.ActiveDocument.Selection.Add (partobj)

End If

Else

Exit Do

End If

Loop

End If

 

à tester chez toi !

 

Gawel

Posté(e)

Set visProperties1 = CATIA.ActiveDocument.Selection.VisProperties

visProperties1.SetRealColor 255,0,0,1

 

Salut,

 

voila, je viens de m'enregistrer sur ce forum et je vois que ça galère aussi de votre coté... Je me présente, je m'appelle Christophe, je travaille chez un grand constructeur automobile allemand. Mes références en Catia V5: Part Design, Assembly, GSD, MTD, KWA, KWE, DMU et... bien sûr programmation VB ou plutot CATScript on va dire puisque les macros doivent aussi bien fonctionner sur Windows que sur Unix. La plus complète pour le moment fait environ 3000 lignes de code et couvre tout un process... Bref, pour ce qu'il en est des couleurs, c'est faisable uniquement en passant par la selection: ajouter le Feature la selection et lui appliquer une couleur. En code ça donne du (je reprends ce qui a été dit précédement:

 

 

Set doc1 = CATIA.ActiveDocument

 

Set part1 = doc1.Part

 

Set bodies1 = part1.Bodies

 

Set body1 = bodies1.Item(1)

 

Set Shape1 = body1.Shapes.Item(2)

 

(Ton document est un Part dans lequel tu comptes modifier la couleur du feature Shape1

 

tu rajoutes:

 

set osel = CATIA.ActiveDocument.selection

osel.clear

 

osel.add Shape1

 

 

Set visProperties1 = osel.VisProperties

visProperties1.SetRealColor 255,0,0,1

 

et le feature Shape1 prend le couleur RGB 255,0,0 (rouge)

 

 

 

Ceci dans le cas où le feature est entièrement connu, ce qui est rarement le cas.

 

tu peux également utiliser une fonction Search pour trouver le type de feature (Hole, POcket, Pad, Line...) ou alors, à l'aide de la fonction selectelement, selectionner le feature directment soit dans l'arbre, soit dans la géométrie.

 

Ex: pour la selection (je code en live, il se peut que tout ne soit pas 100% mais ça donne un truc du style):

 

Sub CATMAin()

set osel = catia.activedocument.selection

osel.clear

 

dim afilter(1)

afilter(0) = "Hole"

afilter(1) = "Pad"

 

sstatus = osel.selectelement(afilter, "Select a Pad or a Hole", False)

 

osel.endselectelement

 

Set visProperties1 = osel.VisProperties

visProperties1.SetRealColor 255,0,0,1

 

End sub

 

du coup l'objet que tu as selectionné prends la couleur rouge.

 

Pour aller un tout petit peu plus loin (par ex selectionner plusieurs objets et leur imputer une meme couleur)

 

 

 

Sub CATMAin()

set osel = catia.activedocument.selection

osel.clear

 

dim afilter(1)

afilter(0) = "Hole"

afilter(1) = "Pad"

 

dim aobjects()

redim aobjects(0)

 

DO

sstatus = osel.selectelement(afilter, "Select a Pad or a Hole", False)

 

If sstatus <> "Normal" then

osel.endselectelement 'pas sûr si c necessaire ça

osel.clear

Exit do

Else

set oobject = osel.item(1).value

set aobjects(ubound(aobjects)) = oobject

redim preserve aobjects(ubound(aobjects)+1)

osel.endselectelement

osel.clear

 

End if

Loop

 

osel.clear

for i=0 to ubound(aobjects)-1

osel.add aobjects(i)

Next

 

Set visProperties1 = osel.VisProperties

visProperties1.SetRealColor 255,0,0,1

 

End sub

 

Pour arreter la selection il te suffit de faire un "undo" mais tu peux très bien utiliser une MSGBOX à chaque boucle (VBYesNo)

 

voila voila un truc comme ça, bien sûr à optimiser (au niveau du osel.clear par ex)

 

bon courage!

 

Salutations

Christophe

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Posté(e)

Salut à vous,

 

pour etre exact, je suis inscrit depuis Mars mais j'avais perdu mon MDP.

Y'a t'il parmis vous des Heavy-programmers l'histoire de faire un echange de connaissances.

 

 

Bye

Christophe

Posté(e)

Salut prosper67,

 

pour l'instant, je débute en VBA pour Catia V5, cela fait seulement depuis 4 mois que je programme avec, mais cela ne me deplait pas, c'est très intéressant. Et puis, il fallait bien y venir un jour, car nos demandes en amélioration de productivité passe par là: cela nous évite aussi de faire sous-traiter tous nos développements, au moins ce qui sont accessibles sans passer par CAA.

 

Mes références en catia V5: Part design, Assembly design, GSD, FS1, Drafting, KWA, KWE + catscript; beaucoup de paramètrage, utilisation du savoir-faire, utilisation catalogue. je suis en relation aussi avce ceux qui développent chez nous en delphi.

 

@+ tard !

 

Gawel

Posté(e)

Salut prosper67 et Gawel

 

Merci pour ton aide même si pour le moment je n'ai pas encore eu le temps de la tester mais c'est bien complet ce que tu ma donné : nikel

 

Moi je suis juste un programmateur en herbe <acronym class=dict title=. Je bosse pour un BE mais c'est bien galère quand on est qu'apprenti et que personne ne dev sur catia à part toi dans la boite heureusment il y a Gawel son aide est toujours bien util.

 

Enfin bon profiter bien de moi car je ne serai plus la pour très longtemps. En juin si tout va bien je décolle et part dans le multimédia, web principalement. Heureusement avec proper67, tu seras pas tout seul gawel.

 

bon c'est pas le tout mais faut bosser un peu

 

@+

 

Enael

Posté(e)

Merci Prosper67

 

Ca marche nikel!! :)

Ah ca fait un problèmé en moins mais bon pour les autres je vais faire un autre sujet sinon on va s'y perdre.

 

En fait je me suis apercu que le changement de couleur minterressait pas tant que ca mais que la sélection et le fait que le shape apparaisse sélectionner dans l'arbre était beaucoup mieux et plus llisible pour ce que je voulais faire. Donc j'ai suprimer deyx trois truc de ta tite sources et zou ca marche !!

 

Enfin voila merci encore

 

Enael

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité