2015-12-03 1 views

Répondre

1

Oui, c'est possible, mais pas exactement simple. La couleur est disponible via VisProperties via un Selection. En outre, c'est l'un de ces cas étranges avec l'API Catia où vous avez besoin d'utiliser la liaison tardive (je ne peux pas vous dire pourquoi)

Voici un exemple:

Option Explicit 
Sub BodyColors() 

Dim sel As Selection 
Dim selected As SelectedElement 
Dim vis As Variant 'VisPropertySet 'This must be variant for late binding. Otherwise you get an error. 
Dim RGB(3) As Long 'or you can use an array 
Dim r, g, b As Long 


Dim myPart As Part 
Dim myBody As Body 

Set myPart = CATIA.ActiveDocument.Part 
Set sel = CATIA.ActiveDocument.Selection 
For Each myBody In myPart.Bodies 
    sel.Clear 
    sel.Add myBody 
    Set vis = sel.VisProperties 
    vis.GetRealColor r, g, b 'you must pass the values into the function 
    Debug.Print myBody.Name & ": "; r & "," & g & "," & b 
Next 
sel.clear 
End Sub 
+0

raison pour laquelle vous avez ces problèmes La liaison anticipée est, r, g, b sont mal cotés, Dim r, g, b Comme Long signifie, r, et g sont des Variants, juste b est Long, car la fonction .GetRealColor attend des longs, elle ne vous permettra pas de passer en variant paramètre, donc, si vous définissez rgb comme Dim r As Long, g As Long, b Comme Long, vous serez également capable d'utiliser la liaison anticipée, et évitez de définir vis en premier. – tsolina