Gleiche Flächen finden

In diesem Video zeige ich wie man gleiche Flächen finden kann.

Und an dieser Stelle der Code der im Makro vorhanden ist.

Option Explicit

Sub main()
    Dim swApp As SldWorks.SldWorks: Set swApp = Application.SldWorks
    Dim swModel As ModelDoc2: Set swModel = swApp.ActiveDoc
    If swModel Is Nothing Then Exit Sub
    Dim swSelMgr As SelectionMgr: Set swSelMgr = swModel.SelectionManager
    If swSelMgr.GetSelectedObjectCount2(-1) <> 1 Then Exit Sub
    If swSelMgr.GetSelectedObjectType3(1, -1) = swSelectType_e.swSelFACES Then HandleFaces swSelMgr
    
End Sub

Private Sub HandleFaces(ByRef selMgr As SelectionMgr)
    'Ausgewählte Fläche erhalten
    Dim swFace As Face2: Set swFace = selMgr.GetSelectedObject6(1, -1)
    Dim swSurface As Surface: Set swSurface = swFace.GetSurface
    If swSurface.IsPlane = False Then Exit Sub
    'Infos aus der Fläche auslesen
    Dim faceNormal As Variant: faceNormal = swFace.Normal
    Debug.Print faceNormal(0)
    Debug.Print faceNormal(1)
    Debug.Print faceNormal(2)
    'Andere Flächen finden mit der selben Ausrichtung
    Dim swBody As Body2: Set swBody = swFace.GetBody
    Dim bodyFaces As Variant: bodyFaces = swBody.GetFaces
    Dim vFace As Variant
    For Each vFace In bodyFaces
        Dim tFace As Face2: Set tFace = vFace
        Dim tFaceNormal As Variant: tFaceNormal = tFace.Normal
        If Round(Abs(tFaceNormal(0)), 8) = Round(Abs(faceNormal(0)), 8) And _
           Round(Abs(tFaceNormal(1)), 8) = Round(Abs(faceNormal(1)), 8) And _
           Round(Abs(tFaceNormal(2)), 8) = Round(Abs(faceNormal(2)), 8) Then
            Dim swEntity As Entity: Set swEntity = tFace
            swEntity.Select4 True, Nothing
        End If
    Next
End Sub

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert