Skip to main content

Create multiple rows callout using SOLIDWORKS API

This example demonstrates how to create a callout with multiple rows while selecting the object using ISelectionMgr::CreateCallout2 SOLIDWORKS API method.

Callout element specification{ width=640 height=354 }

First row of the displayed callout is not editable (read only). Value of second row can be changed. The changed value will be displayed in the message box.

Macro

Dim swApp As SldWorks.SldWorks
Dim swModel As ModelDoc2
Dim swSelMgr As SelectionMgr
Dim swMathUtilss As MathUtility

Sub main()

Set swApp = Application.SldWorks

Set swMathUtils = swApp.GetMathUtility

Set swModel = swApp.ActiveDoc

If Not swModel Is Nothing Then

Set swSelMgr = swModel.SelectionManager

Dim swMathPt As MathPoint
Dim dPt(2) As Double

dPt(0) = 0#: dPt(1) = 0#: dPt(2) = 0#

Set swMathPt = swMathUtils.CreatePoint(dPt)

Dim swCallout As SldWorks.Callout
Dim swCalloutHandler As CalloutHandler

Set swCalloutHandler = New CalloutHandler

Set swCallout = swSelMgr.CreateCallout2(2, swCalloutHandler)
swCallout.TargetStyle = swCalloutTargetStyle_e.swCalloutTargetStyle_Triangle

swCallout.Label2(0) = "Row 1"
swCallout.Value(0) = "Value 1"
swCallout.SetTargetPoint 0, 0.01, 0.01, 0.01
swCallout.ValueInactive(0) = True

swCallout.Label2(1) = "Row 1"
swCallout.Value(1) = "Value 1"
swCallout.SetTargetPoint 1, 0.02, 0.02, 0.02
swCallout.ValueInactive(1) = False

swCallout.SetLeader True, True
swCallout.Position = swMathPt

swCallout.Display True

Stop

swCallout.Display False
Set swCallout = Nothing

Else
MsgBox "Please open the model"
End If

End Sub

CalloutHandler class

Implements swCalloutHandler

Private Function SwCalloutHandler_OnStringValueChanged(ByVal pManipulator As Object, ByVal RowID As Long, ByVal Text As String) As Boolean

MsgBox "Text changed at row " & RowID & ": " & Text

SwCalloutHandler_OnStringValueChanged = True

End Function