Inventor API provides many events in various objects. The UserInput Events can be used to monitor user interface activities such as pre-select, select, un-select, trigger a command, stop a command, terminate a command, pop-up context menu, drag & drop, and so on. In this post, let’s see how to manipulate these Inventor UserInput Events using .NET, particularly C# here.
We create the event handlers for each available Inventor UserInput Event and provide registers and un-registers like the following:
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 Inventor;
namespace InventorNetAddin1
{
public class UserInputEventHanlder1
{
private UserInputEvents mEventsObj;
public UserInputEventHanlder1(UserInputEvents obj)
{
mEventsObj = obj;
}
public void Register()
{
mEventsObj.OnUnSelect += UserInputEvents_OnUnSelect_Handler;
mEventsObj.OnTerminateCommand += UserInputEvents_OnTerminateCommand_Handler;
mEventsObj.OnStopPreSelect += UserInputEvents_OnStopPreSelect_Handler;
mEventsObj.OnStopCommand += UserInputEvents_OnStopCommand_Handler;
mEventsObj.OnStartCommand += UserInputEvents_OnStartCommand_Handler;
mEventsObj.OnSelect += UserInputEvents_OnSelect_Handler;
mEventsObj.OnRadialMarkingMenu += UserInputEvents_OnRadialMarkingMenu_Handler;
mEventsObj.OnPreSelect += UserInputEvents_OnPreSelect_Handler;
mEventsObj.OnLinearMarkingMenu += UserInputEvents_OnLinearMarkingMenu_Handler;
mEventsObj.OnDrag += UserInputEvents_OnDrag_Handler;
mEventsObj.OnDoubleClick += UserInputEvents_OnDoubleClick_Handler;
mEventsObj.OnContextualMiniToolbar += UserInputEvents_OnContextualMiniToolbar_Handler;
mEventsObj.OnContextMenuOld += UserInputEvents_OnContextMenuOld_Handler;
mEventsObj.OnContextMenu += UserInputEvents_OnContextMenu_Handler;
mEventsObj.OnActivateCommand += UserInputEvents_OnActivateCommand_Handler;
}
public void UnRegister()
{
mEventsObj.OnUnSelect -= UserInputEvents_OnUnSelect_Handler;
mEventsObj.OnTerminateCommand -= UserInputEvents_OnTerminateCommand_Handler;
mEventsObj.OnStopPreSelect -= UserInputEvents_OnStopPreSelect_Handler;
mEventsObj.OnStopCommand -= UserInputEvents_OnStopCommand_Handler;
mEventsObj.OnStartCommand -= UserInputEvents_OnStartCommand_Handler;
mEventsObj.OnSelect -= UserInputEvents_OnSelect_Handler;
mEventsObj.OnRadialMarkingMenu -= UserInputEvents_OnRadialMarkingMenu_Handler;
mEventsObj.OnPreSelect -= UserInputEvents_OnPreSelect_Handler;
mEventsObj.OnLinearMarkingMenu -= UserInputEvents_OnLinearMarkingMenu_Handler;
mEventsObj.OnDrag -= UserInputEvents_OnDrag_Handler;
mEventsObj.OnDoubleClick -= UserInputEvents_OnDoubleClick_Handler;
mEventsObj.OnContextualMiniToolbar -= UserInputEvents_OnContextualMiniToolbar_Handler;
mEventsObj.OnContextMenuOld -= UserInputEvents_OnContextMenuOld_Handler;
mEventsObj.OnContextMenu -= UserInputEvents_OnContextMenu_Handler;
mEventsObj.OnActivateCommand -= UserInputEvents_OnActivateCommand_Handler;
}
public void UserInputEvents_OnActivateCommand_Handler(string CommandName, NameValueMap Context)
{
MessageBox.Show("OnActivateCommand");
}
public void UserInputEvents_OnContextMenu_Handler(SelectionDeviceEnum SelectionDevice, NameValueMap AdditionalInfo, CommandBar CommandBar)
{
MessageBox.Show("OnContextMenu");
}
public void UserInputEvents_OnContextMenuOld_Handler(SelectionDeviceEnum SelectionDevice, NameValueMap AdditionalInfo, CommandBar CommandBar)
{
MessageBox.Show("OnContextMenuOld");
}
public void UserInputEvents_OnContextualMiniToolbar_Handler(ObjectsEnumerator SelectedEntities, NameValueMap DisplayedCommands, NameValueMap AdditionalInfo)
{
MessageBox.Show("OnContextualMiniToolbar");
}
public void UserInputEvents_OnDoubleClick_Handler(ObjectsEnumerator SelectedEntities, SelectionDeviceEnum SelectionDevice, MouseButtonEnum Button, ShiftStateEnum ShiftKeys, Inventor.Point ModelPosition, Point2d ViewPosition, Inventor.View View, NameValueMap AdditionalInfo, out HandlingCodeEnum HandlingCode)
{
MessageBox.Show("OnDoubleClick");
HandlingCode = HandlingCodeEnum.kEventHandled;
}
public void UserInputEvents_OnDrag_Handler(DragStateEnum DragState, ShiftStateEnum ShiftKeys, Inventor.Point ModelPosition, Point2d ViewPosition, Inventor.View View, NameValueMap AdditionalInfo, out HandlingCodeEnum HandlingCode)
{
MessageBox.Show("OnDrag");
HandlingCode = HandlingCodeEnum.kEventHandled;
}
public void UserInputEvents_OnLinearMarkingMenu_Handler(ObjectsEnumerator SelectedEntities, SelectionDeviceEnum SelectionDevice, CommandControls LinearMenu, NameValueMap AdditionalInfo)
{
MessageBox.Show("OnLinearMarkingMenu");
}
public void UserInputEvents_OnPreSelect_Handler(ref object PreSelectEntity, out bool DoHighlight, ref ObjectCollection MorePreSelectEntities, SelectionDeviceEnum SelectionDevice, Inventor.Point ModelPosition, Point2d ViewPosition, Inventor.View View)
{
MessageBox.Show("OnPreSelect");
DoHighlight = true;
}
public void UserInputEvents_OnRadialMarkingMenu_Handler(ObjectsEnumerator SelectedEntities, SelectionDeviceEnum SelectionDevice, RadialMarkingMenu RadialMenu, NameValueMap AdditionalInfo)
{
MessageBox.Show("OnRadialMarkingMenu");
}
public void UserInputEvents_OnSelect_Handler(ObjectsEnumerator JustSelectedEntities, ref ObjectCollection MoreSelectedEntities, SelectionDeviceEnum SelectionDevice, Inventor.Point ModelPosition, Point2d ViewPosition, Inventor.View View)
{
MessageBox.Show("OnSelect");
}
public void UserInputEvents_OnStartCommand_Handler(CommandIDEnum CommandID)
{
MessageBox.Show("OnStartCommand");
}
public void UserInputEvents_OnStopCommand_Handler(CommandIDEnum CommandID)
{
MessageBox.Show("OnStopCommand");
}
public void UserInputEvents_OnStopPreSelect_Handler(Inventor.Point ModelPosition, Point2d ViewPosition, Inventor.View View)
{
MessageBox.Show("OnStopPreSelect");
}
public void UserInputEvents_OnTerminateCommand_Handler(string CommandName, NameValueMap Context)
{
MessageBox.Show("OnTerminateCommand");
}
public void UserInputEvents_OnUnSelect_Handler(ObjectsEnumerator UnSelectedEntities, SelectionDeviceEnum SelectionDevice, Inventor.Point ModelPosition, Point2d ViewPosition, Inventor.View View)
{
MessageBox.Show("OnUnSelect");
}
}
}
With all the even handlers put together in a central class and the register and un-register methods it provides, things become all straightforward now. We create an instance of the UserInput event handler, register all those events through calling the Register() method of the handler instance in the Activate implementation, and un-register them accordingly through calling the UnRegister() method in the Deactivate() implementation of the Inventor Addin Server.
...
UserInputEventHanlder1 mUserInputEventHanlder1;
...
public void Activate(Inventor.ApplicationAddInSite siteObj, bool loaded1stTime)
{
…
mUserInputEventHanlder1 = new UserInputEventHanlder1(AddinGlobal.InventorApp.CommandManager.UserInputEvents);
mUserInputEventHanlder1.Register();
}
public void Deactivate()
{
if (mUserInputEventHanlder1 != null) mUserInputEventHanlder1.UnRegister();
…
}
Now we are ready to go. We make the Inventor assembly loadable through creating an addin manifest file, deploy it to the right place, launch Inventor, and play around the UserInput events that are just registered as above.
The Inventor .NET Addin Wizard (InventorNetAddinWizard) can generate Inventor .NET addin projects automatically including addin server interface implementations, COM registry free treatment, a nice sample Ribbon Button, and manifest file creation and deployment. Right after that, the Inventor addin assembly is ready to be launched by the specified Inventor and debugged by the Visual Studio Debugger simply through pressing the F5 key.
The Inventor .NET Addin Wizard (InventorNetAddinWizard) also provides item wizards to help generate various event handlers including the UserInput even handler as demonstrated here automatically and reliably.
The list of its cool features and the link to the installer download can be found from the A Wizard for Inventor .NET Addin page.
Very useful information in this article! its really useful in
asp.net web development services
Posted by: janu3vj | 10/05/2016 at 08:00 AM
Glad you like it.
Posted by: Spiderinnet2 | 10/17/2016 at 06:06 AM