Skip to main content

Get parameters of face at centroid using SOLIDWORKS API

Point created at the center of the face{ width=250 }

This example demonstrate how to find the parameters (point coordinate and normal) at the center of the face using SOLIDWORKS API. This macro will work with any type of face (planar, cylindrical, toroidal, b-surface etc.)

Center is found as the average of minimum and maximum values of U and V parameters using the ISurface::Evaluate SOLIDWORKS API method.

Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2

Sub main()

Set swApp = Application.SldWorks

Set swModel = swApp.ActiveDoc

If Not swModel Is Nothing Then

Dim swFace As SldWorks.Face2
Set swFace = swModel.SelectionManager.GetSelectedObject6(1, -1)

If Not swFace Is Nothing Then

Dim vPt As Variant
Dim vNorm As Variant

GetFaceCenterParameters swFace, vPt, vNorm

Debug.Print "Coordinate at face center is: " & vPt(0) * 1000 & ", " & vPt(1) * 1000 & ", " & vPt(2) * 1000
Debug.Print "Normal at face center is: " & vNorm(0) & ", " & vNorm(1) & ", " & vNorm(2)

Else
MsgBox "Please select face"
End If

Else
MsgBox "Please open the model"
End If

End Sub

Sub GetFaceCenterParameters(face As SldWorks.Face2, ByRef point As Variant, ByRef normal As Variant)

Dim vUvBounds As Variant
vUvBounds = face.GetUVBounds

Dim centerU As Double
Dim centerV As Double

centerU = (vUvBounds(0) + vUvBounds(1)) / 2
centerV = (vUvBounds(2) + vUvBounds(3)) / 2

Dim swSurf As SldWorks.Surface
Set swSurf = face.GetSurface

Dim vEvalRes As Variant
vEvalRes = swSurf.Evaluate(centerU, centerV, 0, 0)

Dim dPoint(2) As Double
Dim dNormal(2) As Double

dPoint(0) = vEvalRes(0)
dPoint(1) = vEvalRes(1)
dPoint(2) = vEvalRes(2)

dNormal(0) = vEvalRes(3)
dNormal(1) = vEvalRes(4)
dNormal(2) = vEvalRes(5)

point = dPoint
normal = dNormal

End Sub