Exemplo n.º 1
8
		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();
			
		}
Exemplo n.º 2
0
        /////////////////////////////////////////////////////////////
        // 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;
            }
        }
Exemplo n.º 3
0
 /// <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;
 }
Exemplo n.º 4
0
        //------------------------------------------------------------------------------


        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();
        }
Exemplo n.º 5
0
        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;
                }
            }
        }
Exemplo n.º 6
0
        /////////////////////////////////////////////////////////////
        // 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);
        }
Exemplo n.º 7
0
        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;
        }
Exemplo n.º 8
0
        public Interaction()
        {
            m_interactionTypes = new System.Collections.ArrayList();

            m_interactionEvents = null;
            m_selectEvents      = null;
            m_mouseEvents       = null;
            m_triadEvents       = null;
        }
Exemplo n.º 9
0
        public void UnsubscribeFromEvents()
        {
            //unsubscribe from all event objects (selection, mouse etc.)
            m_interaction.UnsubscribeFromEvents();

            m_selectEvents = null;
            m_mouseEvents  = null;
            m_triadEvents  = null;
        }
Exemplo n.º 10
0
        public void InteractionEventsSink_OnTerminateEventHandler()
        {
            //�ͷ�ȫ������
            select = null;
            interaction = null;

            //ж�ش���
            this.Hide();
        }
Exemplo n.º 11
0
        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;
        }
Exemplo n.º 12
0
 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;
 }
Exemplo n.º 13
0
        private void cmdCancel_Click(object sender, EventArgs e)
        {
            //ֹͣѡ���ͷ�ȫ������
            interaction.Stop();
            select = null;
            interaction = null;

            //ж�ش���
            this.Hide();
        }
Exemplo n.º 14
0
		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;
			
		}
Exemplo n.º 15
0
        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;
            }
        }
Exemplo n.º 16
0
        public SelectEventsLib(Application inventorApp,
                               InteractionEvents interactionEvents = null)
        {
            invApp = inventorApp;

            if (interactionEvents == null)
            {
                return;
            }
            localInteractionEvents = interactionEvents;
            selectEvents           = interactionEvents.SelectEvents;
            Activate();
        }
Exemplo n.º 17
0
        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();
        }
Exemplo n.º 18
0
        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);
        }
Exemplo n.º 19
0
        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();
        }
Exemplo n.º 20
0
        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;
            }
        }
Exemplo n.º 21
0
 public void createEvents()
 {
     iEv   = cmd.CreateInteractionEvents();
     selEv = iEv.SelectEvents;
 }
Exemplo n.º 22
0
        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;
            }
        }
Exemplo n.º 23
0
        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();
                }
            }
        }
Exemplo n.º 24
0
 /// <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;
 }
Exemplo n.º 25
0
        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();
        }
Exemplo n.º 26
0
 /// <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;
 }
Exemplo n.º 27
0
        /////////////////////////////////////////////////////////////
        // 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);
        }
Exemplo n.º 28
0
        /////////////////////////////////////////////////////////////
        // 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;
            }
        }
Exemplo n.º 29
0
        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;
                }
            }
        }
Exemplo n.º 30
0
        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();
            }
        }