public CSimpleInteraction(Inventor.Application oApplication) { mApplication = oApplication; //Initialize events mInteractionEvents = mApplication.CommandManager.CreateInteractionEvents(); mSelectEvents = mInteractionEvents.SelectEvents; //Set event handler VB.Net Style mSelectEvents.OnSelect += new Inventor.SelectEventsSink_OnSelectEventHandler(this.mSelectEvents_OnSelect); mInteractionEvents.OnTerminate += new Inventor.InteractionEventsSink_OnTerminateEventHandler(this.mInteractionEvents_OnTerminate); //Clear filter and set new ones if needed mSelectEvents.ClearSelectionFilter(); //Always Disable mouse move if not needed for performances mSelectEvents.MouseMoveEnabled = false; mSelectEvents.Enabled = true; mSelectEvents.SingleSelectEnabled = true; //Remember to Start/Stop the interaction event mInteractionEvents.Start(); }
///////////////////////////////////////////////////////////// // Use: Performs interaction cleanup. // ///////////////////////////////////////////////////////////// private void CleanUp() { if (_InteractionEvents != null) { _SelectedEntities.Clear(); _PreSelectFilters.Clear(); _SelectEvents.OnPreSelect -= new SelectEventsSink_OnPreSelectEventHandler( SelectEvents_OnPreSelect); _SelectEvents.OnSelect -= new SelectEventsSink_OnSelectEventHandler( SelectEvents_OnSelect); _SelectEvents.OnUnSelect -= new SelectEventsSink_OnUnSelectEventHandler( SelectEvents_OnUnSelect); _InteractionEvents.OnTerminate -= new InteractionEventsSink_OnTerminateEventHandler( InteractionEvents_OnTerminate); Marshal.ReleaseComObject(_SelectEvents); _SelectEvents = null; Marshal.ReleaseComObject(_InteractionEvents); _InteractionEvents = null; } }
/// <summary> /// Enables select events when interaction events are activated. /// </summary> void interactionEvents_OnActivate() { selectEvents = interactionEvents.SelectEvents; selectEvents.AddSelectionFilter(SelectionFilterEnum.kAssemblyOccurrenceFilter); selectEvents.OnSelect += selectEvents_OnSelect; selectEvents.OnPreSelect += selectEvents_OnPreSelect; }
//------------------------------------------------------------------------------ public void Interactive_Selection(Inventor.Application application) { m_interactionEvents = application.CommandManager.CreateInteractionEvents(); //设置提示 m_interactionEvents.StatusBarText = "Select an cylinder face."; //连接到相关选择事件 m_selectEvents = m_interactionEvents.SelectEvents; //清除过滤器并重新定义圆柱面可选择 m_selectEvents.ClearSelectionFilter(); m_selectEvents.AddSelectionFilter(SelectionFilterEnum.kPartFaceCylindricalFilter); //单个选择使能 m_selectEvents.Enabled = true; m_selectEvents.SingleSelectEnabled = true; m_selectEvents.MouseMoveEnabled = false; //设置委托 m_Select_OnSelect_Delegate = new Inventor.SelectEventsSink_OnSelectEventHandler(this.m_SelectEvents_OnSelect); m_selectEvents.OnSelect += m_Select_OnSelect_Delegate; m_interaction_OnTerminate_Delegate = new Inventor.InteractionEventsSink_OnTerminateEventHandler(this.m_InteractionEvent_Onterminate); m_interactionEvents.OnTerminate += m_interaction_OnTerminate_Delegate; //启动选择进程 m_interactionEvents.Start(); }
public void SubscribeToEvent(Interaction.InteractionTypeEnum interactionType) { //subscribe to the specified event type (selection, mouse etc.) object eventType = null; m_interaction.SubscribeToEvent(interactionType, ref eventType); if (eventType != null) { if (eventType is SelectEvents) { m_selectEvents = (SelectEvents)eventType; } if (eventType is MouseEvents) { m_mouseEvents = (MouseEvents)eventType; } if (eventType is TriadEvents) { m_triadEvents = (TriadEvents)eventType; } } }
///////////////////////////////////////////////////////////// // use: Initializes event handlers // ///////////////////////////////////////////////////////////// public void Initialize() { _InteractionEvents = _Application.CommandManager.CreateInteractionEvents(); _SelectEvents = _InteractionEvents.SelectEvents; _MouseEvents = _InteractionEvents.MouseEvents; _SelectEvents.Enabled = true; _SelectEvents.SingleSelectEnabled = false; _SelectEvents.OnPreSelect += new SelectEventsSink_OnPreSelectEventHandler( SelectEvents_OnPreSelect); _SelectEvents.OnSelect += new SelectEventsSink_OnSelectEventHandler( SelectEvents_OnSelect); _SelectEvents.OnUnSelect += new SelectEventsSink_OnUnSelectEventHandler( SelectEvents_OnUnSelect); _InteractionEvents.OnTerminate += new InteractionEventsSink_OnTerminateEventHandler( InteractionEvents_OnTerminate); }
public void CleanUp() { m_selectEvents.OnSelect -= new Inventor.SelectEventsSink_OnSelectEventHandler(this.m_SelectEvents_OnSelect); m_interactionEvents.OnTerminate -= new Inventor.InteractionEventsSink_OnTerminateEventHandler(this.m_InteractionEvent_Onterminate); m_selectEvents = null; m_interactionEvents = null; }
public Interaction() { m_interactionTypes = new System.Collections.ArrayList(); m_interactionEvents = null; m_selectEvents = null; m_mouseEvents = null; m_triadEvents = null; }
public void UnsubscribeFromEvents() { //unsubscribe from all event objects (selection, mouse etc.) m_interaction.UnsubscribeFromEvents(); m_selectEvents = null; m_mouseEvents = null; m_triadEvents = null; }
public void InteractionEventsSink_OnTerminateEventHandler() { //�ͷ�ȫ������ select = null; interaction = null; //ж�ش��� this.Hide(); }
public void CleanUp() { //Remove handlers mSelectEvents.OnSelect -= new Inventor.SelectEventsSink_OnSelectEventHandler(this.mSelectEvents_OnSelect); mInteractionEvents.OnTerminate -= new Inventor.InteractionEventsSink_OnTerminateEventHandler(this.mInteractionEvents_OnTerminate); mSelectEvents = null; mInteractionEvents = null; }
private void m_InteractionEvents_OnTerminate() { m_InteractionEvents.InteractionGraphics.PreviewClientGraphics.Delete(); m_inventorApplication.ActiveView.Update(); m_flagMouseDown = false; m_InteractionEvents.Stop(); m_MouseEvents = null; m_SelectEvents = null; m_InteractionEvents = null; }
private void cmdCancel_Click(object sender, EventArgs e) { //ֹͣѡ���ͷ�ȫ������ interaction.Stop(); select = null; interaction = null; //ж�ش��� this.Hide(); }
public void selOp(ref List <Edge> edgeCmp) { CommandManager cmdMgr = Macros.StandardAddInServer.m_inventorApplication.CommandManager; //input = cmdMgr.UserInputEvents; try { intEvts = cmdMgr.CreateInteractionEvents(); intEvts.InteractionDisabled = false; sel = intEvts.SelectEvents; sel.WindowSelectEnabled = true; sel.AddSelectionFilter(SelectionFilterEnum.kPartEdgeCircularFilter); sel.OnSelect += new SelectEventsSink_OnSelectEventHandler(select); key = intEvts.KeyboardEvents; key.OnKeyPress += new KeyboardEventsSink_OnKeyPressEventHandler(keyOp); intEvts.Start(); intEvts.StatusBarText = "Выберите отверстия:"; //input.OnSelect += new UserInputEventsSink_OnSelectEventHandler(select); //face = (Face)cmdMgr.Pick(SelectionFilterEnum.kPartFaceFilter, "Выберите поверхность:"); flag = true; while (flag) { Macros.StandardAddInServer.m_inventorApplication.UserInterfaceManager.DoEvents(); } for (int i = 0; i < sel.SelectedEntities.Count; i++) { try { Edge ed = (Edge)sel.SelectedEntities[i + 1]; Inventor.Face f = (ed.Faces[1].SurfaceType == SurfaceTypeEnum.kCylinderSurface) ? ed.Faces[1] : ed.Faces[2]; edgeCmp.Add(ed); //ed = (f.Edges[1].Equals(ed)) ? f.Edges[2] : f.Edges[1]; //edgeCmp1.Add(ed); } catch (Exception) { } } intEvts.Stop(); sel.OnSelect -= new SelectEventsSink_OnSelectEventHandler(select); key.OnKeyPress -= new KeyboardEventsSink_OnKeyPressEventHandler(keyOp); sel = null; key = null; intEvts = null; } catch (Exception) { sel = null; key = null; intEvts = null; } }
public SelectEventsLib(Application inventorApp, InteractionEvents interactionEvents = null) { invApp = inventorApp; if (interactionEvents == null) { return; } localInteractionEvents = interactionEvents; selectEvents = interactionEvents.SelectEvents; Activate(); }
private void frmSelection_Load(object sender, EventArgs e) { //�����µ�InteractionEvents���� interaction = ThisApplication.CommandManager.CreateInteractionEvents(); //������ʾ interaction.StatusBarText = "Select an edge."; //���ӵ���ص�ѡ���¼� select = interaction.SelectEvents; //�������е�����߶�����ѡ�� select.AddSelectionFilter(SelectionFilterEnum.kPartEdgeFilter); //���õ�һѡ�� select.SingleSelectEnabled = true; //��ʼѡ����� interaction.Start(); //�¼���Ӧ select.OnSelect += new SelectEventsSink_OnSelectEventHandler(select_OnSelect); select.OnPreSelect += new SelectEventsSink_OnPreSelectEventHandler(select_OnPreSelect); }
private void m_buttonDef_OnExecute(NameValueMap context) { if (m_dialog != null) { m_dialog.Focus(); return; } m_interaction = m_inventorApplication.CommandManager.CreateInteractionEvents(); m_interaction.StatusBarText = "Select the face to add tabs to"; m_selects = m_interaction.SelectEvents; m_selects.ClearSelectionFilter(); m_selects.AddSelectionFilter(SelectionFilterEnum.kPartFacePlanarFilter); //m_selects.SingleSelectEnabled = true; m_selects.MouseMoveEnabled = false; // recommended for performance if not used m_selects.Enabled = true; // ??? // no idea what these event sinks are and why we need them... m_selects.OnSelect += new Inventor.SelectEventsSink_OnSelectEventHandler(this.SelectEvents_OnSelect); m_interaction.OnTerminate += new Inventor.InteractionEventsSink_OnTerminateEventHandler(this.M_interaction_OnTerminate); // TODO: only do this once per document! // TODO: why doesn't it work at all??!?! m_browser_events = m_inventorApplication.ActiveDocument.BrowserPanes.BrowserPanesEvents; m_browser_events.OnBrowserNodeActivate += new Inventor.BrowserPanesSink_OnBrowserNodeActivateEventHandler(this.BrowserPanesEvents_OnBrowserNodeActivate); m_browser_events.OnBrowserNodeLabelEdit += new Inventor.BrowserPanesSink_OnBrowserNodeLabelEditEventHandler(M_browser_events_OnBrowserNodeLabelEdit); m_dialog = new LaserTabForm(m_form_state); m_dialog.Show(new InventorMainFrame(m_inventorApplication.MainFrameHWND)); m_dialog.FormClosed += M_dialog_FormClosed; m_dialog.button_ok.Click += Button_ok_Click; m_interaction.Start(); }
public void SubscribeToEvent(InteractionTypeEnum interactionType, ref object eventType) { //check if already subscribed to int interactionEvtsCount; for (interactionEvtsCount = 0; interactionEvtsCount < m_interactionTypes.Count; interactionEvtsCount++) { if (interactionType == (InteractionTypeEnum)m_interactionTypes[interactionEvtsCount]) { return; } } //if not already subsribed to then, subscribe m_interactionTypes.Add(interactionType); switch (interactionType) { case InteractionTypeEnum.kSelection: //set a reference to the select events m_selectEvents = m_interactionEvents.SelectEvents; //connect the select event sink m_selectEvents.OnPreSelect += m_Select_OnPreSelect_Delegate; m_selectEvents.OnPreSelectMouseMove += m_Select_OnPreSelectMouseMove_Delegate; m_selectEvents.OnStopPreSelect += m_Select_OnStopPreSelect_Delegate; m_selectEvents.OnSelect += m_Select_OnSelect_Delegate; m_selectEvents.OnUnSelect += m_Select_OnUnSelect_Delegate; //specify burn through m_selectEvents.PreSelectBurnThrough = true; eventType = m_selectEvents; break; case InteractionTypeEnum.kMouse: //set a reference to the mouse events m_mouseEvents = m_interactionEvents.MouseEvents; //connect the mouse event sink m_mouseEvents.OnMouseUp += m_Mouse_OnMouseUp_Delegate; m_mouseEvents.OnMouseDown += m_Mouse_OnMouseDown_Delegate; m_mouseEvents.OnMouseClick += m_Mouse_OnMouseClick_Delegate; m_mouseEvents.OnMouseDoubleClick += m_Mouse_OnMouseDoubleClick_Delegate; m_mouseEvents.OnMouseMove += m_Mouse_OnMouseMove_Delegate; m_mouseEvents.OnMouseLeave += m_Mouse_OnMouseLeave_Delegate; eventType = m_mouseEvents; break; case InteractionTypeEnum.kTriad: //set a reference to the triad events m_triadEvents = m_interactionEvents.TriadEvents; //connect the triad event sink m_triadEvents.OnActivate += m_Triad_OnActivate_Delegate; m_triadEvents.OnEndMove += m_Triad_OnEndMove_Delegate; m_triadEvents.OnEndSequence += m_Triad_OnEndSequence_Delegate; m_triadEvents.OnMove += m_Triad_OnMove_Delegate; m_triadEvents.OnMoveTriadOnlyToggle += m_Triad_OnMoveTriadOnlyToggle_Delegate; m_triadEvents.OnSegmentSelectionChange += m_Triad_OnSegmentSelectionChange_Delegate; m_triadEvents.OnStartMove += m_Triad_OnStartMove_Delegate; m_triadEvents.OnStartSequence += m_Triad_OnStartSequence_Delegate; m_triadEvents.OnTerminate += m_Triad_OnTerminate_Delegate; eventType = m_triadEvents; break; } }
public void createEvents() { iEv = cmd.CreateInteractionEvents(); selEv = iEv.SelectEvents; }
public void StartInteraction(Inventor.Application application, string interactionName, out InteractionEvents interactionEvents) { try { //----------------------------------------------------- //------------------InteractionEvents------------------ //----------------------------------------------------- //create the InteractionEvents object m_interactionEvents = application.CommandManager.CreateInteractionEvents(); //define that we want select events rather than mouse events m_interactionEvents.SelectionActive = true; //set the name for the interaction events m_interactionEvents.Name = interactionName; //connect the interaction event sink m_interaction_OnTerminate_Delegate = new InteractionEventsSink_OnTerminateEventHandler(InteractionEvents_OnTerminate); m_interactionEvents.OnTerminate += m_interaction_OnTerminate_Delegate; //------------------SelectEvents-------------------- //set a reference to the select events m_selectEvents = m_interactionEvents.SelectEvents; //connect the select event sink m_Select_OnSelect_Delegate = new SelectEventsSink_OnSelectEventHandler(SelectEvents_OnSelect); m_selectEvents.OnSelect += m_Select_OnSelect_Delegate; m_Select_OnPreSelect_Delegate = new SelectEventsSink_OnPreSelectEventHandler(SelectEvents_OnPreSelect); m_selectEvents.OnPreSelect += m_Select_OnPreSelect_Delegate; m_Select_OnPreSelectMouseMove_Delegate = new SelectEventsSink_OnPreSelectMouseMoveEventHandler(SelectEvents_OnPreSelectMouseMove); m_selectEvents.OnPreSelectMouseMove += m_Select_OnPreSelectMouseMove_Delegate; m_Select_OnStopPreSelect_Delegate = new SelectEventsSink_OnStopPreSelectEventHandler(SelectEvents_OnStopPreSelect); m_selectEvents.OnStopPreSelect += m_Select_OnStopPreSelect_Delegate; m_Select_OnUnSelect_Delegate = new SelectEventsSink_OnUnSelectEventHandler(SelectEvents_OnUnSelect); m_selectEvents.OnUnSelect += m_Select_OnUnSelect_Delegate; //------------------MouseEvents-------------------- //set a reference to the mouse events m_mouseEvents = m_interactionEvents.MouseEvents; //connect the mouse event sink m_Mouse_OnMouseMove_Delegate = new MouseEventsSink_OnMouseMoveEventHandler(MouseEvents_OnMouseMove); m_mouseEvents.OnMouseMove += m_Mouse_OnMouseMove_Delegate; m_Mouse_OnMouseUp_Delegate = new MouseEventsSink_OnMouseUpEventHandler(MouseEvents_OnMouseUp); m_mouseEvents.OnMouseUp += m_Mouse_OnMouseUp_Delegate; m_Mouse_OnMouseDown_Delegate = new MouseEventsSink_OnMouseDownEventHandler(MouseEvents_OnMouseDown); m_mouseEvents.OnMouseDown += m_Mouse_OnMouseDown_Delegate; m_Mouse_OnMouseClick_Delegate = new MouseEventsSink_OnMouseClickEventHandler(MouseEvents_OnMouseClick); m_mouseEvents.OnMouseClick += m_Mouse_OnMouseClick_Delegate; m_Mouse_OnMouseDoubleClick_Delegate = new MouseEventsSink_OnMouseDoubleClickEventHandler(MouseEvents_OnMouseDoubleClick); m_mouseEvents.OnMouseDoubleClick += m_Mouse_OnMouseDoubleClick_Delegate; m_Mouse_OnMouseLeave_Delegate = new MouseEventsSink_OnMouseLeaveEventHandler(MouseEvents_OnMouseLeave); m_mouseEvents.OnMouseLeave += m_Mouse_OnMouseLeave_Delegate; //------------------TriadEvents-------------------- //set a reference to the triad events m_triadEvents = m_interactionEvents.TriadEvents; //connect the triad event sink m_Triad_OnActivate_Delegate = new TriadEventsSink_OnActivateEventHandler(TriadEvents_OnActivate); m_triadEvents.OnActivate += m_Triad_OnActivate_Delegate; m_Triad_OnEndMove_Delegate = new TriadEventsSink_OnEndMoveEventHandler(TriadEvents_OnEndMove); m_triadEvents.OnEndMove += m_Triad_OnEndMove_Delegate; m_Triad_OnEndSequence_Delegate = new TriadEventsSink_OnEndSequenceEventHandler(TriadEvents_OnEndSequence); m_triadEvents.OnEndSequence += m_Triad_OnEndSequence_Delegate; m_Triad_OnMove_Delegate = new TriadEventsSink_OnMoveEventHandler(TriadEvents_OnMove); m_triadEvents.OnMove += m_Triad_OnMove_Delegate; m_Triad_OnMoveTriadOnlyToggle_Delegate = new TriadEventsSink_OnMoveTriadOnlyToggleEventHandler(TriadEvents_OnMoveTriadOnlyToggle); m_triadEvents.OnMoveTriadOnlyToggle += m_Triad_OnMoveTriadOnlyToggle_Delegate; m_Triad_OnSegmentSelectionChange_Delegate = new TriadEventsSink_OnSegmentSelectionChangeEventHandler(TriadEvents_OnSegmentSelectionChange); m_triadEvents.OnSegmentSelectionChange += m_Triad_OnSegmentSelectionChange_Delegate; m_Triad_OnStartMove_Delegate = new TriadEventsSink_OnStartMoveEventHandler(TriadEvents_OnStartMove); m_triadEvents.OnStartMove += m_Triad_OnStartMove_Delegate; m_Triad_OnStartSequence_Delegate = new TriadEventsSink_OnStartSequenceEventHandler(TriadEvents_OnStartSequence); m_triadEvents.OnStartSequence += m_Triad_OnStartSequence_Delegate; m_Triad_OnTerminate_Delegate = new TriadEventsSink_OnTerminateEventHandler(TriadEvents_OnTerminate); m_triadEvents.OnTerminate += m_Triad_OnTerminate_Delegate; //start the InteractionEvents m_interactionEvents.Start(); } catch (Exception ex) { System.Windows.Forms.MessageBox.Show(ex.ToString()); } finally { interactionEvents = m_interactionEvents; } }
private void StartEvent(bool region_or_object) { //start interaction event if (m_InteractionEvents == null) { m_InteractionEvents = m_inventorApplication.CommandManager.CreateInteractionEvents(); } else { m_InteractionEvents.Stop(); } m_InteractionEvents.InteractionDisabled = false; if (region_or_object) { //get mouse event if (m_MouseEvents == null) { m_MouseEvents = m_InteractionEvents.MouseEvents; m_MouseEvents.MouseMoveEnabled = true; m_MouseStartViewPt = m_inventorApplication.TransientGeometry.CreatePoint2d(0, 0); m_flagMouseDown = false; m_MouseEvents.OnMouseUp += m_MouseEvents_OnMouseUp; m_MouseEvents.OnMouseMove += m_MouseEvents_OnMouseMove; m_MouseEvents.OnMouseDown += m_MouseEvents_OnMouseDown; } } else { //get select event if (m_SelectEvents == null) { m_SelectEvents = m_InteractionEvents.SelectEvents; m_SelectEvents.SingleSelectEnabled = false; m_SelectEvents.WindowSelectEnabled = true; m_SelectEvents.OnSelect += m_SelectEvents_OnSelect; } } m_InteractionEvents.OnTerminate += m_InteractionEvents_OnTerminate; m_InteractionEvents.Name = "MyScreenshot"; //start m_InteractionEvents.Start(); while (m_InteractionEvents != null) { if (m_inventorApplication.SoftwareVersion.Major > 13) { m_inventorApplication.UserInterfaceManager.DoEvents(); } else { System.Windows.Forms.Application.DoEvents(); } } }
/// <summary> /// Enables select events when interaction events are activated. /// </summary> private void interactionEvents_OnActivate() { SelectEvents = InteractionEvents.SelectEvents; SelectEvents.AddSelectionFilter(SelectionFilterEnum.kAssemblyOccurrenceFilter); SelectEvents.OnSelect += selectEvents_OnSelect; }
public void UnsubscribeFromEvents() { int interactionEvtsCount; for (interactionEvtsCount = 0; interactionEvtsCount < m_interactionTypes.Count; interactionEvtsCount++) { switch ((InteractionTypeEnum)m_interactionTypes[interactionEvtsCount]) { case InteractionTypeEnum.kSelection: //disconnect selection events sink if (m_selectEvents != null) { m_selectEvents.OnPreSelect -= m_Select_OnPreSelect_Delegate; m_selectEvents.OnPreSelectMouseMove -= m_Select_OnPreSelectMouseMove_Delegate; m_selectEvents.OnStopPreSelect -= m_Select_OnStopPreSelect_Delegate; m_selectEvents.OnSelect -= m_Select_OnSelect_Delegate; m_selectEvents.OnUnSelect -= m_Select_OnUnSelect_Delegate; m_selectEvents = null; } break; case InteractionTypeEnum.kMouse: //disconnect mouse events sink if (m_mouseEvents != null) { m_mouseEvents.OnMouseUp -= m_Mouse_OnMouseUp_Delegate; m_mouseEvents.OnMouseDown -= m_Mouse_OnMouseDown_Delegate; m_mouseEvents.OnMouseClick -= m_Mouse_OnMouseClick_Delegate; m_mouseEvents.OnMouseDoubleClick -= m_Mouse_OnMouseDoubleClick_Delegate; m_mouseEvents.OnMouseMove -= m_Mouse_OnMouseMove_Delegate; m_mouseEvents.OnMouseLeave -= m_Mouse_OnMouseLeave_Delegate; m_mouseEvents = null; } break; case InteractionTypeEnum.kTriad: //disconnect triad events sink if (m_triadEvents != null) { m_triadEvents.OnActivate -= m_Triad_OnActivate_Delegate; m_triadEvents.OnEndMove -= m_Triad_OnEndMove_Delegate; m_triadEvents.OnEndSequence -= m_Triad_OnEndSequence_Delegate; m_triadEvents.OnMove -= m_Triad_OnMove_Delegate; m_triadEvents.OnMoveTriadOnlyToggle -= m_Triad_OnMoveTriadOnlyToggle_Delegate; m_triadEvents.OnSegmentSelectionChange -= m_Triad_OnSegmentSelectionChange_Delegate; m_triadEvents.OnStartMove -= m_Triad_OnStartMove_Delegate; m_triadEvents.OnStartSequence -= m_Triad_OnStartSequence_Delegate; m_triadEvents.OnTerminate -= m_Triad_OnTerminate_Delegate; m_triadEvents = null; } break; } } m_interactionTypes.Clear(); }
/// <summary> /// Enables select events when interaction events are activated. /// </summary> private void interactionEvents_OnActivate() { selectEvents = interactionEvents.SelectEvents; selectEvents.AddSelectionFilter(SelectionFilterEnum.kSketchPointFilter); selectEvents.OnSelect += selectEvents_OnSelect; }
public void EnableInteraction() { //enable events int interactionEvtsCount; for (interactionEvtsCount = 0; interactionEvtsCount < m_interactionTypes.Count; interactionEvtsCount++) { switch ((InteractionTypeEnum)m_interactionTypes[interactionEvtsCount]) { case InteractionTypeEnum.kSelection: //re-subscribe to selection events if (m_selectEvents == null) { //set a reference to the select events m_selectEvents = m_interactionEvents.SelectEvents; //connect the select event sink m_selectEvents.OnPreSelect += m_Select_OnPreSelect_Delegate; m_selectEvents.OnPreSelectMouseMove += m_Select_OnPreSelectMouseMove_Delegate; m_selectEvents.OnStopPreSelect += m_Select_OnStopPreSelect_Delegate; m_selectEvents.OnSelect += m_Select_OnSelect_Delegate; m_selectEvents.OnUnSelect += m_Select_OnUnSelect_Delegate; //specify burn through m_selectEvents.PreSelectBurnThrough = true; } break; case InteractionTypeEnum.kMouse: //re-subscribe to mouse events if (m_mouseEvents == null) { //set a reference to the mouse events m_mouseEvents = m_interactionEvents.MouseEvents; //connect the mouse event sink m_mouseEvents.OnMouseUp += m_Mouse_OnMouseUp_Delegate; m_mouseEvents.OnMouseDown += m_Mouse_OnMouseDown_Delegate; m_mouseEvents.OnMouseClick += m_Mouse_OnMouseClick_Delegate; m_mouseEvents.OnMouseDoubleClick += m_Mouse_OnMouseDoubleClick_Delegate; m_mouseEvents.OnMouseMove += m_Mouse_OnMouseMove_Delegate; m_mouseEvents.OnMouseLeave += m_Mouse_OnMouseLeave_Delegate; } break; case InteractionTypeEnum.kTriad: //re-subscribe to triad events if (m_triadEvents == null) { //set a reference to the triad events m_triadEvents = m_interactionEvents.TriadEvents; //connect the triad event sink m_triadEvents.OnActivate += m_Triad_OnActivate_Delegate; m_triadEvents.OnEndMove += m_Triad_OnEndMove_Delegate; m_triadEvents.OnEndSequence += m_Triad_OnEndSequence_Delegate; m_triadEvents.OnMove += m_Triad_OnMove_Delegate; m_triadEvents.OnMoveTriadOnlyToggle += m_Triad_OnMoveTriadOnlyToggle_Delegate; m_triadEvents.OnSegmentSelectionChange += m_Triad_OnSegmentSelectionChange_Delegate; m_triadEvents.OnStartMove += m_Triad_OnStartMove_Delegate; m_triadEvents.OnStartSequence += m_Triad_OnStartSequence_Delegate; m_triadEvents.OnTerminate += m_Triad_OnTerminate_Delegate; } break; } } }
private void button1_Click(object sender, EventArgs e) { try { this.Hide(); double h = 1, w = 1; if (m_Asm != null) { CommandManager cmdMgr = invApp.CommandManager; string txt = ""; //input = cmdMgr.UserInputEvents; intEvts = cmdMgr.CreateInteractionEvents(); intEvts.InteractionDisabled = false; sel = intEvts.SelectEvents; sel.AddSelectionFilter(SelectionFilterEnum.kPartFaceFilter); sel.OnSelect += new SelectEventsSink_OnSelectEventHandler(select); mouse = intEvts.MouseEvents; mouse.OnMouseClick += new MouseEventsSink_OnMouseClickEventHandler(selPt); intEvts.Start(); intEvts.StatusBarText = "Выберите поверхность:"; //input.OnSelect += new UserInputEventsSink_OnSelectEventHandler(select); //face = (Face)cmdMgr.Pick(SelectionFilterEnum.kPartFaceFilter, "Выберите поверхность:"); //input.OnSelect -= new UserInputEventsSink_OnSelectEventHandler(select); flag = true; while (flag) { invApp.UserInterfaceManager.DoEvents(); } intEvts.Stop(); sel.OnSelect -= new SelectEventsSink_OnSelectEventHandler(select); intEvts.MouseEvents.OnMouseClick -= new MouseEventsSink_OnMouseClickEventHandler(selPt); List <string> tmp = new List <string>(); string name = comboBox1.Text; m_Doc = (PartDocument)invApp.Documents.Add(DocumentTypeEnum.kPartDocumentObject, CreateVisible: false); m_Doc.ComponentDefinition.BOMStructure = BOMStructureEnum.kPurchasedBOMStructure; m_Doc.UnitsOfMeasure.LengthUnits = UnitsTypeEnum.kMillimeterLengthUnits; string filename = ""; for (int i = 0; i < attrXML.Count; i++) { if (attrXML[i].StartsWith("Name=" + name)) { tmp.Add(attrXML[i]); tmp.Add(valXML[i]); i++; while (i < attrXML.Count && attrXML[i].StartsWith("RowHeight=")) { tmp.Add(attrXML[i]); tmp.Add(valXML[i]); i++; } break; } } string nameStricker = ""; string strTmp = tbl.substring(tmp[0], "PartNumber="); nameStricker = strTmp; if (strTmp != "") { m_Doc.PropertySets[3][2].Value = strTmp; filename += strTmp; } strTmp = tbl.substring(tmp[0], "Description="); if (strTmp != "") { m_Doc.PropertySets[3][14].Value = strTmp; filename += (filename == "") ? strTmp : "-" + strTmp; } Func <string, double> conv = s => { char rep = (separator == ',') ? '.' : ','; return((s.IndexOf(separator) != -1) ? Convert.ToDouble(s) : Convert.ToDouble(s.Replace(rep, separator))); }; strTmp = tbl.substring(tmp[0], "Height="); if (strTmp != "") { h = conv(strTmp); } strTmp = tbl.substring(tmp[0], "Width="); if (strTmp != "") { w = conv(strTmp); } strTmp = tbl.substring(tmp[0], "txt="); if (strTmp != "") { txt = strTmp; } strTmp = tbl.substring(tmp[0], "Sort="); if (strTmp != "") { m_Doc.PropertySets[1][4].Value = strTmp; } strTmp = tbl.substring(tmp[0], "Note="); if (strTmp != "") { m_Doc.PropertySets[1][5].Value = strTmp; } strTmp = tbl.substring(tmp[0], "Triangle="); if (strTmp == "False") { triangle = false; } else { triangle = true; } strTmp = tbl.substring(tmp[0], "Offset1="); if (strTmp != "") { offset1 = conv(strTmp) / 10; } strTmp = tbl.substring(tmp[0], "Offset2="); if (strTmp != "") { offset2 = conv(strTmp) / 10; } strTmp = tbl.substring(tmp[0], "Mirror="); if (strTmp != "") { mirror = true; } if (face.SurfaceType == SurfaceTypeEnum.kPlaneSurface) { filename += "-" + w.ToString() + "x" + h.ToString(); if (!System.IO.File.Exists(path(m_Asm.FullFileName) + filename + ".ipt")) { Plane plane = (Plane)face.Geometry; vecZ = plane.Normal; if (!triangle) { planarSticker(ref m_Doc, h, w, txt); } else { triangleSticker(ref m_Doc, h, w, txt); } } } else if (face.SurfaceType == SurfaceTypeEnum.kCylinderSurface) { R = Math.Round(((Cylinder)face.Geometry).Radius, 2); filename += "-" + w.ToString() + "x" + h.ToString() + "x" + (R * 10).ToString(); if (!System.IO.File.Exists(path(m_Asm.FullFileName) + filename + ".ipt")) { if (this.radioButton1.Checked) { circleSticker(ref m_Doc, w, h, R, txt); filename += "(верт)"; } else { circleSticker(ref m_Doc, h, w, R, txt); } } } filename = path(m_Asm.FullFileName) + filename + ".ipt"; if (!System.IO.File.Exists(filename)) { m_Doc.SaveAs(filename, false); Document tmp_Doc = invApp.Documents.Open(filename, false); tmp_Doc.PropertySets[3][2].Value = nameStricker; tmp_Doc.Save(); tmp_Doc.Close(); m_Doc.Close(); } Inventor.Point pt = m_TG.CreatePoint(); //pos = m_TG.CreateMatrix(); //rot.SetCoordinateSystem(insPt, m_TG.CreateVector(YCoord: 1), m_TG.CreateVector(1) , m_TG.CreateVector(ZCoord: 1)); //pos.TransformBy(rot); // if (face.SurfaceType == SurfaceTypeEnum.kPlaneSurface && !System.IO.File.Exists(filename)) // { //} AssemblyComponentDefinition compDef = m_Asm.ComponentDefinition; //pos.Cell[4, 1] = insPt.X; pos.Cell[4, 2] = insPt.Y; pos.Cell[4, 3] = insPt.Z; rot = m_TG.CreateMatrix(); ComponentOccurrence occ = compDef.Occurrences.Add(filename, rot); Vector vec1 = InvDoc.u.getAxis(face); Vector vec2 = InvDoc.u.getAxis(occ); if (!InvDoc.u.eq(vec1, vec2)) { rot.SetToRotateTo(vec1, vec2); } //m_Asm.ComponentDefinition.WorkPoints.AddFixed(insPt); vec = pt.VectorTo(insPt); rot.SetTranslation(vec); //rot.Cell[1, 4] = insPt.X; rot.Cell[2, 4] = insPt.Y; rot.Cell[3, 4] = insPt.Z; //occ.Transformation = rot; occ.SetTransformWithoutConstraints(rot); //rot.SetToRotateTo(m_TG.CreateVector(ZCoord: 1), vecZ.AsVector(), m_TG.CreateVector(XCoord: 1)); //rot.SetTranslation(vec); //return; //Face face2 = occ.SurfaceBodies[1].Faces[5]; object fac = null; occ.CreateGeometryProxy(((PartComponentDefinition)occ.Definition).WorkPlanes[3], out fac); WorkPlaneProxy face2 = (WorkPlaneProxy)fac; PartComponentDefinition def = (PartComponentDefinition)occ.Definition; //Inventor.Point pt2 = def.WorkPoints[1].Point; //pos.Invert(); //pt2.TransformBy(pos); if (face.SurfaceType == SurfaceTypeEnum.kPlaneSurface) { compDef.Constraints.AddFlushConstraint(face, face2, 0); } else if (face.SurfaceType == SurfaceTypeEnum.kCylinderSurface) { //foreach (Face f in occ.SurfaceBodies[1].Faces) //{ // if (f.SurfaceType == SurfaceTypeEnum.kCylinderSurface) // { // if (Math.Round(((Cylinder)f.Geometry).Radius, 2) == R) // { // face2 = f; break; // } // } //} occ.CreateGeometryProxy(((PartComponentDefinition)occ.Definition).WorkAxes[2], out fac); compDef.Constraints.AddMateConstraint((WorkAxisProxy)fac, face, 0, InferredTypeEnum.kInferredLine, InferredTypeEnum.kInferredLine); } //Matrix trans = m_TG.CreateMatrix(); //trans.SetTranslation(vec,true); //occ.Transformation.Cell[1, 4] = insPt.X; occ.Transformation.Cell[2, 4] = insPt.Y; occ.Transformation.Cell[3, 4] = insPt.Z; object face1 = null; if (face.SurfaceType == SurfaceTypeEnum.kCylinderSurface) { if (offset1 > 0.05 && offset1 < 0.4) { //PartComponentDefinition pDef = ((PartDocument)((FaceProxy)face).ContainingOccurrence.Definition.Document).ComponentDefinition; ((FaceProxy)face).ContainingOccurrence.CreateGeometryProxy(InvDoc.u.getPlane((FaceProxy)face), out fac); //createProxy((FaceProxy)face, (int)(offset1 * 10), ref fac); //occ.CreateGeometryProxy(((PartComponentDefinition)occ.Definition).WorkPlanes[(int)(offset1 * 10)], out fac); face1 = fac; offset1 = 0; } else /*if (offset1 != 0)*/ { offset1 += w / 20; ent = (Edge)cmdMgr.Pick(SelectionFilterEnum.kPartEdgeCircularFilter, "Выберите торцевое ребро:"); if (ent.Faces[1].SurfaceType == SurfaceTypeEnum.kPlaneSurface) { face1 = ent.Faces[1]; } else { face1 = ent.Faces[2]; } } // if (offset2 != 0) // { // offset2 += h / 20; // } //face1 = cmdMgr.Pick(SelectionFilterEnum.kPartEdgeCircularFilter, "Выберите тор" } else { if (offset1 > 0.05 && offset1 < 0.4) { createProxy((FaceProxy)face, (int)(offset1 * 10), ref fac); //occ.CreateGeometryProxy(((PartComponentDefinition)occ.Definition).WorkPlanes[(int)(offset1 * 10)], out fac); edge1 = fac; offset1 = 0; } else /*if (offset1 != 0)*/ { offset1 += h / 20; edge1 = cmdMgr.Pick(SelectionFilterEnum.kAllEntitiesFilter, "Выберите ребро или плоскость:"); } } //face2 = occ.SurfaceBodies[1].Faces[2]; occ.CreateGeometryProxy(((PartComponentDefinition)occ.Definition).WorkPlanes[2], out fac); face2 = (WorkPlaneProxy)fac; MateConstraint mc = null; FlushConstraint fc = null; // if (offset2 < 0.4) // { // face1 = createProxy(occ, (int)(offset2 * 10)); //compDef.WorkPlanes[(int)(offset2*10)]; // } //else if (offset2 != 0) offset2 += h / 20; if (face.SurfaceType == SurfaceTypeEnum.kCylinderSurface) { fc = compDef.Constraints.AddFlushConstraint(face2, face1, offset1); } else { mc = compDef.Constraints.AddMateConstraint(face2, edge1, offset1); } // Inventor.Point ptmc = occ.RangeBox.MinPoint; // SelectionFilterEnum [] f = {SelectionFilterEnum.kPartFaceFilter}; // ObjectsEnumerator en = compDef.FindUsingPoint(ptmc, ref f, 0.1); if (/*en.Count < 3*/ InvDoc.u.intersPoint(compDef, occ, (FaceProxy)face)) { if (mc != null) { mc.Offset.Value = -(double)mc.Offset.Value; } //else fc.Offset.Value = - (double)fc.Offset.Value; } if (offset2 > 0.05 && offset2 < 0.4) { createProxy((FaceProxy)face, (int)(offset2 * 10), ref fac); //occ.CreateGeometryProxy(((PartComponentDefinition)face.ReferenceComponent.ReferencedDocumentDescriptor.ReferencedDocument.Definition).WorkPlanes[(int)(offset2 * 10)], out fac); edge2 = fac; offset2 = 0; } else /*if (offset2 != 0)*/ { if (face.SurfaceType == SurfaceTypeEnum.kCylinderSurface) { offset2 += h / 20; } else { offset2 += w / 20; } edge2 = cmdMgr.Pick(SelectionFilterEnum.kAllEntitiesFilter, "Выберите ребро или плоскость:"); } //face2 = occ.SurfaceBodies[1].Faces[1]; occ.CreateGeometryProxy(((PartComponentDefinition)occ.Definition).WorkPlanes[1], out fac); face2 = (WorkPlaneProxy)fac; mc = compDef.Constraints.AddMateConstraint(face2, edge2, offset2); if (mc.HealthStatus == HealthStatusEnum.kInconsistentHealth) { occ.Constraints[2].ConvertToFlushConstraint(occ.Constraints[2].EntityOne, occ.Constraints[2].EntityTwo, offset1); } //en = compDef.FindUsingPoint(ptmc, ref f, 0.1); m_Asm.Update(); if (/*en.Count < 3*/ InvDoc.u.intersPoint(compDef, occ, (FaceProxy)face)) { mc.Delete(); mc = compDef.Constraints.AddMateConstraint(face2, edge2, offset2); m_Asm.Update(); if (InvDoc.u.intersPoint(compDef, occ, (FaceProxy)face)) { //mc.Delete(); //mc = compDef.Constraints.AddMateConstraint(face2, edge1, -offset2); double dist = Macros.StandardAddInServer.m_inventorApplication.MeasureTools.GetMinimumDistance(occ.RangeBox.MinPoint, edge2); if (dist > offset2 * 2) { rot = m_TG.CreateMatrix(); Vector tr = occ.Transformation.Translation; rot.SetToRotation(Math.PI, InvDoc.u.getAxis(occ), m_TG.CreatePoint(tr.X, tr.Y, tr.Z)); mc.Delete(); occ.Transformation = rot; mc = compDef.Constraints.AddMateConstraint(face2, edge2, offset2); if (InvDoc.u.intersPoint(compDef, occ, (FaceProxy)face)) { mc.Offset.Value = -(double)mc.Offset.Value; } } else if (InvDoc.u.intersPoint(compDef, occ, (FaceProxy)face)) { mc.Offset.Value = -(double)mc.Offset.Value; } m_Asm.Update(); } //mc.Offset.Value = -(double)mc.Offset.Value; } //occ.Transformation = trans; } this.Close(); } catch (Exception) { //MessageBox.Show(ex.ToString()); this.Close(); } }