-
Notifications
You must be signed in to change notification settings - Fork 0
/
AddInServer.cs
144 lines (111 loc) · 4.73 KB
/
AddInServer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
using System;
using System.IO;
using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using Inventor;
using Inventor.InternalNames.Ribbon;
using Microsoft.Win32;
using System.Windows.Forms;
using ViewReference.Buttons;
namespace ViewReference
{
/// <summary>
/// This is the primary AddIn Server class that implements the ApplicationAddInServer interface
/// that all Inventor AddIns are required to implement. The communication between Inventor and
/// the AddIn is via the methods on this interface.
/// </summary>
[GuidAttribute("35678d1f-aeb7-4a22-9fef-624c83e66007")]
public class StandardAddInServer : Inventor.ApplicationAddInServer
{
// Inventor application object.
//private Inventor.Application m_inventorApplication;
public StandardAddInServer()
{
}
#region ApplicationAddInServer Members
public void Activate(Inventor.ApplicationAddInSite addInSiteObject, bool firstTime)
{
// This method is called by Inventor when it loads the addin.
// The AddInSiteObject provides access to the Inventor Application object.
// The FirstTime flag indicates if the addin is loaded for the first time.
// Initialize AddIn members.
AddinGlobal.InventorApp = addInSiteObject.Application;
AddinGlobal.Automation = new ViewReferenceAutomation();
//Get User Settings
ViewReferenceTools.GetSavedSettings();
//Create Event Listener
ViewReferenceTools.CreateUpdateEventListener();
AddinGlobal.InventorApp.ApplicationEvents.OnApplicationOptionChange += UpdateButtons;
try
{
if (firstTime)
{
InitializeUIComponents();
}
}
catch (Exception ex)
{
MessageBox.Show("Could not load the View Reference Addin.");
}
}
private void InitializeUIComponents()
{
var createButton = new CreateReferencesButton();
var removeButton = new RemoveReferencesButton();
var configButton = new ConfigureButton();
UserInterfaceManager uiMan = AddinGlobal.InventorApp.UserInterfaceManager;
if (uiMan.InterfaceStyle == InterfaceStyleEnum.kRibbonInterface)
{
Ribbon ribbon = uiMan.Ribbons[InventorRibbons.Drawing];
RibbonTab tab = ribbon.RibbonTabs[DrawingRibbonTabs.PlaceViews];
var existingPanel = tab.RibbonPanels.Cast<RibbonPanel>().FirstOrDefault(p => p.InternalName == AppConstants.UIPanelId);
if (existingPanel != null)
{
existingPanel.Delete();
}
RibbonPanel panel = tab.RibbonPanels.Add("View Reference", "vr_Panel", Guid.NewGuid().ToString());
CommandControls controls = panel.CommandControls;
controls.AddButton(createButton.Definition, true, true);
controls.AddButton(removeButton.Definition, true, true);
controls.AddButton(configButton.Definition, false, true);
}
}
private void UpdateButtons(EventTimingEnum beforeOrAfter, NameValueMap context, out HandlingCodeEnum handlingCode)
{
if (beforeOrAfter == EventTimingEnum.kAfter)
{
InitializeUIComponents();
handlingCode = HandlingCodeEnum.kEventHandled;
}
handlingCode = HandlingCodeEnum.kEventNotHandled;
}
public void Deactivate()
{
// This method is called by Inventor when the AddIn is unloaded.
// The AddIn will be unloaded either manually by the user or
// when the Inventor session is terminated
// Release objects.
AddinGlobal.InventorApp = null;
GC.Collect();
GC.WaitForPendingFinalizers();
}
public void ExecuteCommand(int commandID)
{
// Note:this method is now obsolete, you should use the
// ControlDefinition functionality for implementing commands.
}
public object Automation
{
// This property is provided to allow the AddIn to expose an API
// of its own to other programs. Typically, this would be done by
// implementing the AddIn's API interface in a class and returning
// that class object through this property.
get
{
return AddinGlobal.Automation;
}
}
#endregion
}
}