Community
Inventor Programming - iLogic, Macros, AddIns & Apprentice
Inventor iLogic, Macros, AddIns & Apprentice Forum. Share your knowledge, ask questions, and explore popular Inventor topics related to programming, creating add-ins, macros, working with the API or creating iLogic tools.
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Standalone Application - Subscription to ApplicationEvents

3 REPLIES 3
SOLVED
Reply
Message 1 of 4
Robert.MislerXEDWT
345 Views, 3 Replies

Standalone Application - Subscription to ApplicationEvents

Hi,

 

I am currently developing a C# .NET 6.0 Apllication that integrates with the Inventor COM API.

Starting Inventor and connecting/interacting with the API works fine. I just don't understand to register custom functions to intercept application events. I found a lot of examples for Addins, but none that use a standalone approach.

With the code below i can connect to Inventor, but the events are not triggering. I know the code is not beautiful, it's still more a sandbox than anything else - but why are my events not firing?

_aeh is an instance of my ApplicationEventsHandler class.

 

Thank you so much and all the best

 

internal class InventorAPI
    {
        [DllImport("ole32.dll")]
        static extern int CLSIDFromProgID(
         [MarshalAs(UnmanagedType.LPWStr)] string lpszProgID,
                                            out Guid pclsid
      );
        [DllImport("oleaut32.dll", PreserveSig = false)]
        static extern void GetActiveObject(
                                            ref Guid rclsid,
                                                IntPtr pvReserved,
        [MarshalAs(UnmanagedType.IUnknown)] out Object ppunk
      );
        public static object getActiveObject(string progId)
        {
            Guid clsid;
            CLSIDFromProgID(progId, out clsid);

            object obj;
            GetActiveObject(ref clsid, IntPtr.Zero, out obj);

            return obj;
        }
        
            public bool connect()
        {
            
            Boolean _started = false;

            try
            {
                _invApp = (Application)getActiveObject("Inventor.Application");
                Debug.WriteLine("Connected to Inventor");
                Connected = true;

            }
            catch (Exception ex)
            {
                try
                {
                    Type invAppType = Type.GetTypeFromProgID("Inventor.Application");
                    _invApp = (Application)Activator.CreateInstance(invAppType);
                    _invApp.Visible = true;
                    _started = true;
                    Connected = true;

                }
                catch (Exception ex2)
                {
                    Debug.WriteLine(ex2.ToString());
                    Debug.WriteLine("Unable to get or start Inventor");
                    Connected = false;
                }
            }
            if (Connected)
            {
                _invApp = _aeh.Register(_invApp);
                InvApp = _invApp;
            }
            return Connected;
        }
}


public class AppEventsHandler
    {
        public Inventor.Application Register(Inventor.Application _invApp)
        {
            _invApp.ApplicationEvents.OnTranslateDocument += AppEvent_OnTranslateDocument_Handler;
            _invApp.ApplicationEvents.OnTerminateDocument += AppEvent_OnTerminateDocument_Handler;
            _invApp.ApplicationEvents.OnSaveDocument += AppEvent_OnSaveDocument_Handler;
            _invApp.ApplicationEvents.OnRestart32BitHost += AppEvent_OnRestart32BitHost_Handler;
            _invApp.ApplicationEvents.OnReady += AppEvent_OnReady_Handler;
            _invApp.ApplicationEvents.OnQuit += AppEvent_OnQuit_Handler;
            _invApp.ApplicationEvents.OnOpenDocument += AppEvent_OnOpenDocument_Handler;
            _invApp.ApplicationEvents.OnNewView += AppEvent_OnNewView_Handler;
            _invApp.ApplicationEvents.OnNewEditObject += AppEvent_OnNewEditObject_Handler;
            _invApp.ApplicationEvents.OnNewDocument += AppEvent_OnNewDocument_Handler;
            _invApp.ApplicationEvents.OnMigrateDocument += AppEvent_OnMigrateDocument_Handler;
            _invApp.ApplicationEvents.OnInitializeDocument += AppEvent_OnInitializeDocument_Handler;
            _invApp.ApplicationEvents.OnDocumentChange += AppEvent_OnDocumentChange_Handler;
            _invApp.ApplicationEvents.OnDisplayModeChange += AppEvent_OnDisplayModeChange_Handler;
            _invApp.ApplicationEvents.OnDeactivateView += AppEvent_OnDeactivateView_Handler;
            _invApp.ApplicationEvents.OnDeactivateDocument += AppEvent_OnDeactivateDocument_Handler;
            _invApp.ApplicationEvents.OnCloseView += AppEvent_OnCloseView_Handler;
            _invApp.ApplicationEvents.OnCloseDocument += AppEvent_OnCloseDocument_Handler;
            _invApp.ApplicationEvents.OnApplicationOptionChange += AppEvent_OnApplicationOptionChange_Handler;
            _invApp.ApplicationEvents.OnActiveProjectChanged += AppEvent_OnActiveProjectChanged_Handler;
            _invApp.ApplicationEvents.OnActivateView += AppEvent_OnActivateView_Handler;
            _invApp.ApplicationEvents.OnActivateDocument += AppEvent_OnActivateDocument_Handler;
            return _invApp;
        }

        public void UnRegister(Inventor.Application _invApp)
        {
            _invApp.ApplicationEvents.OnTranslateDocument -= AppEvent_OnTranslateDocument_Handler;
            _invApp.ApplicationEvents.OnTerminateDocument -= AppEvent_OnTerminateDocument_Handler;
            _invApp.ApplicationEvents.OnSaveDocument -= AppEvent_OnSaveDocument_Handler;
            _invApp.ApplicationEvents.OnRestart32BitHost -= AppEvent_OnRestart32BitHost_Handler;
            _invApp.ApplicationEvents.OnReady -= AppEvent_OnReady_Handler;
            _invApp.ApplicationEvents.OnQuit -= AppEvent_OnQuit_Handler;
            _invApp.ApplicationEvents.OnOpenDocument -= AppEvent_OnOpenDocument_Handler;
            _invApp.ApplicationEvents.OnNewView -= AppEvent_OnNewView_Handler;
            _invApp.ApplicationEvents.OnNewEditObject -= AppEvent_OnNewEditObject_Handler;
            _invApp.ApplicationEvents.OnNewDocument -= AppEvent_OnNewDocument_Handler;
            _invApp.ApplicationEvents.OnMigrateDocument -= AppEvent_OnMigrateDocument_Handler;
            _invApp.ApplicationEvents.OnInitializeDocument -= AppEvent_OnInitializeDocument_Handler;
            _invApp.ApplicationEvents.OnDocumentChange -= AppEvent_OnDocumentChange_Handler;
            _invApp.ApplicationEvents.OnDisplayModeChange -= AppEvent_OnDisplayModeChange_Handler;
            _invApp.ApplicationEvents.OnDeactivateView -= AppEvent_OnDeactivateView_Handler;
            _invApp.ApplicationEvents.OnDeactivateDocument -= AppEvent_OnDeactivateDocument_Handler;
            _invApp.ApplicationEvents.OnCloseView -= AppEvent_OnCloseView_Handler;
            _invApp.ApplicationEvents.OnCloseDocument -= AppEvent_OnCloseDocument_Handler;
            _invApp.ApplicationEvents.OnApplicationOptionChange -= AppEvent_OnApplicationOptionChange_Handler;
            _invApp.ApplicationEvents.OnActiveProjectChanged -= AppEvent_OnActiveProjectChanged_Handler;
            _invApp.ApplicationEvents.OnActivateView -= AppEvent_OnActivateView_Handler;
            _invApp.ApplicationEvents.OnActivateDocument -= AppEvent_OnActivateDocument_Handler;

        }

        public void AppEvent_OnActivateDocument_Handler(_Document DocumentObject, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnActivateDocument");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnActivateView_Handler(Inventor.View ViewObject, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnActivateView");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnActiveProjectChanged_Handler(DesignProject ProjectObject, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnActiveProjectChanged");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnApplicationOptionChange_Handler(EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnApplicationOptionChange");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnCloseDocument_Handler(_Document DocumentObject, string FullDocumentName, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnCloseDocument");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnCloseView_Handler(Inventor.View ViewObject, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnCloseView");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnDeactivateDocument_Handler(_Document DocumentObject, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnDeactivateDocument");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnDeactivateView_Handler(Inventor.View ViewObject, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnDeactivateView");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnDisplayModeChange_Handler(Inventor.View ViewObject, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnDisplayModeChange");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnDocumentChange_Handler(_Document DocumentObject, EventTimingEnum BeforeOrAfter, CommandTypesEnum ReasonsForChange, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnDocumentChange");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnInitializeDocument_Handler(_Document DocumentObject, string FullDocumentName, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnInitializeDocument");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnMigrateDocument_Handler(_Document DocumentObject, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnMigrateDocument");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnNewDocument_Handler(_Document DocumentObject, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnNewDocument");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnNewEditObject_Handler(object EditObject, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnNewEditObject");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnNewView_Handler(Inventor.View ViewObject, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnNewView");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnOpenDocument_Handler(_Document DocumentObject, string FullDocumentName, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnOpenDocument");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnQuit_Handler(EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnQuit");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnReady_Handler(EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnReady");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnRestart32BitHost_Handler(EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnRestart32BitHost");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnSaveDocument_Handler(_Document DocumentObject, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnSaveDocument");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnTerminateDocument_Handler(_Document DocumentObject, string FullDocumentName, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnTerminateDocument");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }

        public void AppEvent_OnTranslateDocument_Handler(bool TranslatingIn, _Document DocumentObject, string FullFileName, EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
        {
            Debug.WriteLine("OnTranslateDocument");
            HandlingCode = HandlingCodeEnum.kEventHandled;

        }
    }
}

 

 

 

3 REPLIES 3
Message 2 of 4

Hi there,

To trigger an event, you don't need to return application object again and again.

Lets try this code, you also should use (new) statement.

private Inventor.Application m_inventorApplication;
private Inventor.ApplicationEvents m_appEvents;
public void Main()
{
    // You should fill application and Application events object here. Its important, you have to Delcare them above the function but inside of the class.
    m_inventorApplication = application;
    m_appEvents = m_inventorApplication.ApplicationEvents;
    // Then if you need you can activate(start or trigger) the event.
    Activate();
}
public void Activate()
{
    //Its important, You need to fill them with "new" and then Sink_Handler and the name of the function.
    m_appEvents.OnActivateDocument +=  new ApplicationEventsSink_OnActivateDocumentEventHandler (ApplicationEvents_OnActivateDocument);
}
public void Deactivate()
{
    m_appEvents.OnActivateDocument -= new ApplicationEventsSink_OnActivateDocumentEventHandler(ApplicationEvents_OnActivateDocument);
}

private void ApplicationEvents_OnActivateDocument(_Document DocumentObject,EventTimingEnum BeforeOrAfter, NameValueMap Context, out HandlingCodeEnum HandlingCode)
{
    //Here is inside of the event. If you want to reach more info, i will share an article below this code peace.
    HandlingCode = Inventor.HandlingCodeEnum.kEventNotHandled;
    if (BeforeOrAfter !=Inventor.EventTimingEnum.kAfter)
        return;
    HandlingCode = Inventor.HandlingCodeEnum.kEventHandled;
    Console.WriteLine("OnActivateDocument");
}

 

Also, maybe you want to see this article:

https://modthemachine.typepad.com/my_weblog/2013/07/inventor-events-using-net-3-examples.html

 

Regards

Devrim

 

If my answer is solved your problem, please mark it as Solution

Freundliche Grüße / Kind Regards
Message 3 of 4

Thank you so much! I have integrated your recommendations and went with your code example and it works!

 

Awesome, thank you so much!!!

Message 4 of 4

I'm glad I was able to help!
If my answer is solved your problem, please mark it as Solution

Freundliche Grüße / Kind Regards

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report