Makro solidworks - Flächenauswahl und Auferschießungsfarbe

Hallo, ich kann kein Gesicht auswählen und ihm dann in meinem Makro eine Farbe aufzwingen. Ich habe herausgefunden, wie man es für eine Funktion macht, aber ich kann den Code anscheinend nicht so ändern, dass er für eine Seite funktioniert. Versuchen Sie, wie es geht?

Hier ist der Code für die Person, die für eine Funktion arbeitet: 
 

            boolstatus = Part.Extension.SelectByID2("Song vorher", "BODYFEATURE", 0, 0, 0, Wahr, 0, Nichts, 0)

        Legen Sie swSelMgr = swModel.SelectionManager fest
        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 Wahr

Und hier ist das Gesicht, das ich auswählen möchte:

boolstatus = Part.Extension.SelectByID2("", "GESICHT", -0.128447455152696, 1.825000000000516E-02, -7.95118360022116E-02, Falsch, 0, Nichts, 0)

Vielen Dank im Voraus.

die Deklaration von Variablen, falls erforderlich:

Dim swApp als SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelExt als ModelDocExtension
Dimmen des Teils als SldWorks.PartDoc
Dim swConfig als SldWorks.Configuration
Dim boolstatus als boolescher Wert
Sun swSelMgr As SldWorks.SelectionMgr
Dim swFeat As SldWorks.Feature

Dim vMatPrps als Variante

Hallo. Versuchen Sie Folgendes:

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 „Gefällt mir“

Danke JeromeP, es ist genau das, was ich wollte 

Ist es möglich, mehrere Flächen auszuwählen und dann das Makro zu starten, um die Farbe einzufügen, oder müssen Sie wie im aktuellen Code von Gesicht zu Gesicht sprechen?

Ist es möglich, mehrere Gesichter auszuwählen und dann das Makro zu starten, oder müssen Sie es wie im aktuellen Code von Gesicht zu Gesicht tun?

@JeromeP 

Ist es möglich, mehrere Flächen auszuwählen und das Makro auszuführen, oder müssen Sie wie im aktuellen Code von Gesicht zu Gesicht vorgehen?

Alles ist möglich!

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 „Gefällt mir“

Ich denke nie an Locken, danke trotzdem:)

Wie verwende ich diesen Code, ohne die Flächen auswählen zu müssen, sondern mit einem Auswahlsatz?