The Navisworks .NET API provides many events that we can listen to if we want to monitor the Navisworks product. We can use document events to monitor some operations like view added, view changing and removed, transaction beginning and ended, file saving and saved, unit changed, active sheet/view changing and changed.
In this article, let us look at some code for how to subscribe to the document events and hook them up into the Navisworks system.
using System;
using System.Text;
using System.Linq;
using System.Xml;
using System.Reflection;
using System.ComponentModel;
using System.Collections;
using System.Collections.Generic;
using System.Windows;
using System.Windows.Media.Imaging;
using System.Windows.Forms;
using System.IO;
using Microsoft.Win32;
using System.Runtime.InteropServices;
using Autodesk.Navisworks.Api;
using Autodesk.Navisworks.Api.Plugins;
using Autodesk.Navisworks.Api.Controls;
using Autodesk.Navisworks.Api.DocumentParts;
using Autodesk.Navisworks.Api.ApplicationParts;
namespace NavisworksNetAddinCS2010
{
public class DocumentEvents1
{
private Document mEventsObj;
public DocumentEvents1(Document obj)
{
mEventsObj = obj;
}
public void Register()
{
mEventsObj.ViewRemoved += DocumentEvents_ViewRemoved_Handler;
mEventsObj.ViewAdded += DocumentEvents_ViewAdded_Handler;
mEventsObj.UnitsChanged += DocumentEvents_UnitsChanged_Handler;
mEventsObj.TransactionEnded += DocumentEvents_TransactionEnded_Handler;
mEventsObj.TransactionBeginning += DocumentEvents_TransactionBeginning_Handler;
mEventsObj.FileSaving += DocumentEvents_FileSaving_Handler;
mEventsObj.FileSaved += DocumentEvents_FileSaved_Handler;
mEventsObj.FileNameChanged += DocumentEvents_FileNameChanged_Handler;
mEventsObj.ActiveViewChanging += DocumentEvents_ActiveViewChanging_Handler;
mEventsObj.ActiveViewChanged += DocumentEvents_ActiveViewChanged_Handler;
mEventsObj.ActiveSheetChanging += DocumentEvents_ActiveSheetChanging_Handler;
mEventsObj.ActiveSheetChanged += DocumentEvents_ActiveSheetChanged_Handler;
}
public void UnRegister()
{
mEventsObj.ViewRemoved -= DocumentEvents_ViewRemoved_Handler;
mEventsObj.ViewAdded -= DocumentEvents_ViewAdded_Handler;
mEventsObj.UnitsChanged -= DocumentEvents_UnitsChanged_Handler;
mEventsObj.TransactionEnded -= DocumentEvents_TransactionEnded_Handler;
mEventsObj.TransactionBeginning -= DocumentEvents_TransactionBeginning_Handler;
mEventsObj.FileSaving -= DocumentEvents_FileSaving_Handler;
mEventsObj.FileSaved -= DocumentEvents_FileSaved_Handler;
mEventsObj.FileNameChanged -= DocumentEvents_FileNameChanged_Handler;
mEventsObj.ActiveViewChanging -= DocumentEvents_ActiveViewChanging_Handler;
mEventsObj.ActiveViewChanged -= DocumentEvents_ActiveViewChanged_Handler;
mEventsObj.ActiveSheetChanging -= DocumentEvents_ActiveSheetChanging_Handler;
mEventsObj.ActiveSheetChanged -= DocumentEvents_ActiveSheetChanged_Handler;
}
public void DocumentEvents_ActiveSheetChanged_Handler(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("ActiveSheetChanged");
}
public void DocumentEvents_ActiveSheetChanging_Handler(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("ActiveSheetChanging");
}
public void DocumentEvents_ActiveViewChanged_Handler(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("ActiveViewChanged");
}
public void DocumentEvents_ActiveViewChanging_Handler(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("ActiveViewChanging");
}
public void DocumentEvents_FileNameChanged_Handler(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("FileNameChanged");
}
public void DocumentEvents_FileSaved_Handler(object sender, FileSaveEventArgs e)
{
System.Diagnostics.Debug.WriteLine("FileSaved");
}
public void DocumentEvents_FileSaving_Handler(object sender, FileSaveEventArgs e)
{
System.Diagnostics.Debug.WriteLine("FileSaving");
}
public void DocumentEvents_TransactionBeginning_Handler(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("TransactionBeginning");
}
public void DocumentEvents_TransactionEnded_Handler(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("TransactionEnded");
}
public void DocumentEvents_UnitsChanged_Handler(object sender, EventArgs e)
{
System.Diagnostics.Debug.WriteLine("UnitsChanged");
}
public void DocumentEvents_ViewAdded_Handler(object sender, ViewEventArgs e)
{
System.Diagnostics.Debug.WriteLine("ViewAdded");
}
public void DocumentEvents_ViewRemoved_Handler(object sender, ViewEventArgs e)
{
System.Diagnostics.Debug.WriteLine("ViewRemoved");
}
}
}
Here is the hookup code in the Execute override of the AddinPlugin derivative.
DocumentEvents1 docEventHandler = new DocumentEvents1(Autodesk.Navisworks.Api.Application.ActiveDocument);
docEventHandler.Register();
Here are some outputs after the plugin being loaded, the document event handler being properly registered, and some document related operations are done.
...
ViewRemoved
ActiveViewChanging
ActiveViewChanging
ActiveViewChanged
ViewRemoved
...
ActiveSheetChanging
TransactionBeginning
TransactionEnded
UnitsChanged
TransactionBeginning
TransactionEnded
TransactionBeginning
TransactionEnded
TransactionBeginning
TransactionEnded
TransactionBeginning
TransactionEnded
ActiveSheetChanged
FileNameChanged
...
TransactionBeginning
TransactionEnded
TransactionBeginning
TransactionEnded
...
ActiveSheetChanged
FileNameChanged
...
TransactionBeginning
TransactionEnded
TransactionBeginning
TransactionEnded
...
ViewAdded
ActiveViewChanging
ActiveViewChanged
Starting: C:\Temp\Test1.nwf
FileSaving
FileNameChanged
FileSaved
ActiveSheetChanging
TransactionBeginning
TransactionEnded
TransactionBeginning
TransactionEnded
UnitsChanged
...
ActiveSheetChanged
FileNameChanged
ActiveViewChanging
ViewRemoved
ViewRemoved
TransactionBeginning
TransactionEnded
The next build of the Navisworks .NET Addin Wizard will provide an item wizard, Document Events handler.
Posted by: |