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?