Rebuild and Rollback Event Handler Example (C#)
This example shows how to handle the pre-notification
that is fired when an assembly document is rebuilt. It also shows how to handle the post-notification that
is fired when an assembly document is either rebuilt or rolled back.
//
----------------------------------------------------------------------------
// Preconditions: Open:
// <install_dir>\samples\tutorial\cosmosfloxpress\ball valve\ball_valve.sldasm.
//
// Postconditions:
// 1. A dialog pops up with the pre-notification of the
rebuild
// (check the taskbar for the minimized dialog).
// 2. Click OK to close the dialog.
// 3. The assembly is rebuilt.
// 4. A dialog pops up with the post-notification of the
rebuild
// (check the taskbar for the minimized dialog).
// 5. Click OK to close the dialog.
// 6. Move rollback bar to just above Sketch1.
// 7. A dialog pops up with the post-notification of the
rebuild
// (check the taskbar for the minimized dialog).
// 8. Click OK to close the dialog.
// 9. Observe the Immediate Window.
// 10. After moving the rollback bar several times,
// click
Reset in the IDE to disable the event handler.
// 11. Select Stop VSTA
debugger on macro exit in
// Tools
> Options > System Options > General.
//
// NOTE: Do not save the assembly document,
// as it is used
in SolidWorks tutorials.
//
----------------------------------------------------------------------------
using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using System;
using System.Diagnostics;
namespace RegenPostNotify2EventHandlerForAssemblyDoc_CSharp.csproj
{
partial
class SolidWorksMacro
{
ModelDoc2
swModel;
ModelDocExtension
swModelDocExt;
public
AssemblyDoc swAssembly;
public
void Main()
{
swApp.SetUserPreferenceToggle((int)swUserPreferenceToggle_e.swStopDebuggingVstaOnExit,
false);
swModel
= (ModelDoc2)swApp.ActiveDoc;
swModelDocExt
= swModel.Extension;
//
Event notification
swAssembly
= (AssemblyDoc)swModel;
AttachEventHandlers();
//
Rebuild the model
swModel.ForceRebuild3(true);
}
public
void AttachEventHandlers()
{
AttachSWEvents();
}
public
void AttachSWEvents()
{
swAssembly.RegenNotify += this.swAssembly_RegenNotify;
swAssembly.RegenPostNotify2 += this.swAssembly_RegenPostNotify2;
}
private
int swAssembly_RegenNotify()
{
//Display
message before a rebuild
System.Windows.Forms.MessageBox.Show("A
rebuild pre-notification event has been fired.");
return
0;
}
private
int swAssembly_RegenPostNotify2(object stopFeature)
{
//Display
message after either a rebuild or a roll back
if
((stopFeature != null))
{
//Rollback
System.Windows.Forms.MessageBox.Show("A
rollback post-notification event has been fired.");
Feature
feature = default(Feature);
feature
= (Feature)stopFeature;
Debug.Print("The
rollback bar is just above " + feature.Name + " in the FeatureManager
design tree.");
}
else
{
//Rebuild
System.Windows.Forms.MessageBox.Show("A
rebuild post-notification event has been fired.");
}
return
0;
}
public
SldWorks swApp;
}
}