Create sketch segments in drawing view sketch using SOLIDWORKS API

Edit ArticleEdit Article

Point created in the center of the drawing view
Point created in the center of the drawing view

All drawing views in the drawing document have their own sketches which can be retrieved via IView::GetSketch SOLIDWORKS API method.

This is a sketch where sketch entities and points can be drawn using the ISketchManager interface.

Unlike creating sketch segment in the sheet space, segments added to a view sketch will move together with the view and will be scaled and rotated in case of 3D rotation of the view.

Similar to the sketches in the assembly or part it is required to transform the coordinates from the model space into the sheet space in order to properly position the segments.

The following example demonstrates how to find the middle point of the drawing view (in sheet coordinate system) and draw this point directly in the view using SOLIDWORKS API using the transformation.

Dim swApp As SldWorks.SldWorks

Sub main()

    Set swApp = Application.SldWorks
    Dim swDraw As SldWorks.DrawingDoc
    Set swDraw = swApp.ActiveDoc
    If Not swDraw Is Nothing Then
        Dim swView As SldWorks.view
        Set swView = swDraw.SelectionManager.GetSelectedObject6(1, -1)
        If Not swView Is Nothing Then
            DrawPoint swDraw, swView
            MsgBox "Please select drawing view"
        End If
        MsgBox "Please open the drawing document"
    End If
End Sub

Sub DrawPoint(draw As SldWorks.DrawingDoc, view As SldWorks.view)
    Dim vBoundings As Variant
    vBoundings = view.GetOutline()
    Dim dCenterPt(2) As Double
    dCenterPt(0) = (vBoundings(0) + vBoundings(2)) / 2
    dCenterPt(1) = (vBoundings(1) + vBoundings(3)) / 2
    dCenterPt(2) = 0
    Dim swViewSketch As SldWorks.Sketch
    Set swViewSketch = view.GetSketch
    Dim swViewSketchXForm As SldWorks.MathTransform
    Set swViewSketchXForm = swViewSketch.ModelToSketchTransform
    Dim swMathUtils As SldWorks.MathUtility
    Set swMathUtils = swApp.GetMathUtility
    Dim swMathPt As SldWorks.MathPoint
    Set swMathPt = swMathUtils.CreatePoint(dCenterPt)
    Set swMathPt = swMathPt.MultiplyTransform(swViewSketchXForm)
    draw.ActivateView view.Name
    Dim vPt As Variant
    vPt = swMathPt.ArrayData
    draw.SketchManager.CreatePoint vPt(0), vPt(1), vPt(2)
End Sub

Product of Xarial Product of Xarial