Configuring toggles in Toolbar+
Toggle behavior can be assigned to the button and menu command allowing to switch between checked/unchecked state of the button.
In order to activate toggle behavior select Toggle Button option from the triggers drop-down.
Note, the same macro will be run regardless of toggle button is checked or unchecked. The current state needs to be determined in the macro itself to run the appropriate portion of the code.
Configuration
Once Toggle Button option is selected in the triggers, the following options can be configured.
- Toggle Button State Expression - enable the custom code to resolve the state of the button
- Toggle button state resolve code. Code which calculates the current state of the button. This code will be executed every time to resolve the state of the button.
Note, this code will be run every time state of SOLIDWORKS changes, e.g. mouse however, selection, rebuild, i.e. potentially thousands of times per session. So it is only recommended to use simple code to avoid performance issues or use the Cache State Value option
- Cache State Value - if this option is checked then the resolve code runs only once on start to resolve the initial state of the button (check/unchecked). After that toggle state will be switched on every click without calling the resolve code.
Custom Code Resolver
When specifying the code to resolve the state, it is required to complete the construction of the function which returns boolean, where true corresponds to checked state and false to unchecked.
The code should be written in C#.
Function provides an access to top level application (ISwApplication from xCAD.NET framework). Use late binding to access underlying SOLIDWORKS API objects.
Example
This example demonstrates how to create toggle button which switches on and off the Input dimension value setting. Macro should correctly display the state of the button as checked and unchecked depending on the state of this user preference.
In order to find the current value of this setting it is required to call the ISldWorks::GetUserPreferenceToggle API and pass the value of swInputDimValOnCreate.
As it is required to use late binding, corresponding integer value of the enumeration should be found:
Adding the following code would result into the check state of the button to be synchronized with the toggle option:
{ app }.Sw.GetUserPreferenceToggle(10)
The macro code itself to toggle the state can be defined as follows
Dim swApp As SldWorks.SldWorks Sub main() Set swApp = Application.SldWorks Dim curVal As Boolean curVal = False <> swApp.GetUserPreferenceToggle(swUserPreferenceToggle_e.swInputDimValOnCreate) swApp.SetUserPreferenceToggle swUserPreferenceToggle_e.swInputDimValOnCreate, Not curVal End Sub
As the result the toggle button will always be synchronized with user preference setting and can be triggered via button or from settings dialog.