Macro solidworks - Sélection face et imposer couleur

bonjours, je n'arrive pas à sélectionner une face et ensuite lui imposer une couleur dans ma macro. j'ai trouvé comment faire pour une fonction, mais je n'arrive pas à modifier le code pour qu'il marche pour une face. Est-ce que vous serriez comment faire ?

voici le code pour qui marche pour une fonction : 
 

            boolstatus = Part.Extension.SelectByID2("Chant avant", "BODYFEATURE", 0, 0, 0, True, 0, Nothing, 0)

        Set swSelMgr = swModel.SelectionManager
        Set swFeat = swSelMgr.GetSelectedObject6(1, -1)
        vMatPrps = GetFeatureColor(swFeat)

            vMatPrps(0) = 1
            vMatPrps(1) = 1
            vMatPrps(2) = 1
            swFeat.SetMaterialPropertyValues2 vMatPrps, swInConfigurationOpts_e.swThisConfiguration, ""
            swModel.ClearSelection2 True

et ici la face que je veux sélectionner :

boolstatus = Part.Extension.SelectByID2("", "FACE", -0.128447455152696, 1.82500000000516E-02, -7.95118360022116E-02, False, 0, Nothing, 0)

Merci par avance.

les déclaration des variables si besoin :

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelExt As ModelDocExtension
Dim Part As SldWorks.PartDoc
Dim swConfig As SldWorks.Configuration
Dim boolstatus As Boolean
Dim swSelMgr As SldWorks.SelectionMgr
Dim swFeat As SldWorks.Feature

Dim vMatPrps As Variant

Bonjour. Essaye ca:

Option Explicit
Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swSelMgr As SldWorks.SelectionMgr
    Dim swFace As SldWorks.Face2
    Dim vProp As Variant
    Dim bRet As Boolean
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swSelMgr = swModel.SelectionManager
    If swModel Is Nothing Then MsgBox "Ouvrir une pièce": Exit Sub
    If swModel.GetType <> swDocumentTypes_e.swDocPART Then MsgBox "Ouvrir une pièce": Exit Sub
    If swSelMgr.GetSelectedObjectCount2(-1) = 0 Then MsgBox "Sélectionner une face": Exit Sub
    Set swFace = swSelMgr.GetSelectedObject6(1, -1)
    vProp = swFace.MaterialPropertyValues
    If IsEmpty(vProp) Then vProp = swModel.MaterialPropertyValues
    Debug.Print "Couleur courante: (" & vProp(0) * 255# & ", " & vProp(1) * 255# & ", " & vProp(2) * 255# & ")"
    bRet = swModel.SelectedFaceProperties(RGB(0, 255, 0), vProp(3), vProp(4), vProp(5), vProp(6), vProp(7), vProp(8), False, "")
    swModel.ClearSelection2 True
End Sub

 

1 « J'aime »

Merci JeromeP c'est exactement ce que je voulais 

Est-ce que c'est possible de selectionner plusieurs faces et ensuite de lancer la macro pour mettre la couleur, ou alors il faut faire face par face comme le code actuel ?

Est-ce que c'est possible de sélectionner plusieurs faces et ensuite lancer la macro, ou alors il faut faire que face par faces comme le code actuel ?

@JeromeP 

Est-ce que c'est possible de sélectionner plusieurs faces et lancer la macro, ou alors il faut faire face par face comme le code actuel ?

Tout est possible!

Option Explicit
Sub main()
    Dim swApp As SldWorks.SldWorks
    Dim swModel As SldWorks.ModelDoc2
    Dim swSelMgr As SldWorks.SelectionMgr
    Dim swFace As SldWorks.Face2
    Dim swEnt As SldWorks.Entity
    Dim vProp As Variant
    Dim bRet As Boolean
    Dim i As Integer
    Dim vFaces As New Collection
    Dim vFace As Variant
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swSelMgr = swModel.SelectionManager
    If swModel Is Nothing Then MsgBox "Ouvrir une pièce": Exit Sub
    If swModel.GetType <> swDocumentTypes_e.swDocPART Then MsgBox "Ouvrir une pièce": Exit Sub
    If swSelMgr.GetSelectedObjectCount2(-1) = 0 Then MsgBox "Sélectionner une face": Exit Sub
    For i = 1 To swSelMgr.GetSelectedObjectCount2(-1)
        vFaces.Add swSelMgr.GetSelectedObject6(i, -1)
    Next
    For Each vFace In vFaces
        Set swFace = vFace
        Set swEnt = swFace
        vProp = swFace.MaterialPropertyValues
        If IsEmpty(vProp) Then vProp = swModel.MaterialPropertyValues
        Debug.Print "Couleur courante: (" & vProp(0) * 255# & ", " & vProp(1) * 255# & ", " & vProp(2) * 255# & ")"
        swEnt.Select4 False, Nothing
        bRet = swModel.SelectedFaceProperties(RGB(0, 255, 0), vProp(3), vProp(4), vProp(5), vProp(6), vProp(7), vProp(8), False, "")
    Next vFace
    swModel.ClearSelection2 True
End Sub

 

3 « J'aime »

je ne pense jamais aux boucles, Merci en tout cas :)

Comment utiliser ce code sans avoir à sélectionner les surfaces mais en utilisant un jeu de sélection?