Exemple #1
0
        //////////////////////////////////////////////////////////////////////////////////////////////
        // SelectEvent lets the user pick up vertex or workpoint
        //
        //////////////////////////////////////////////////////////////////////////////////////////////
        void SelectEvents_OnSelect(ObjectsEnumerator JustSelectedEntities,
                                   SelectionDeviceEnum SelectionDevice,
                                   Point ModelPosition,
                                   Point2d ViewPosition,
                                   View View)
        {
            switch (_mode)
            {
            case ModeEnum.kPoint1:
            {
                _point1 = ModelPosition;
                _mode   = ModeEnum.kPoint2;
                _interactionManager.InteractionEvents.StatusBarText = "Select dimension second point: ";
                break;
            }

            case ModeEnum.kPoint2:
            {
                _point2 = ModelPosition;

                Vector normal = View.Camera.Eye.VectorTo(View.Camera.Target);

                _dimData = DrawDimension(_point1, _point2, ModelPosition, normal);

                _clientGraphicsMng.UpdateView();


                _interactionManager.InteractionEvents.StatusBarText = "Select dimension text position: ";

                _interactionManager.MouseEvents.MouseMoveEnabled = true;

                _interactionManager.SelectEvents.OnSelect -=
                    new SelectEventsSink_OnSelectEventHandler(SelectEvents_OnSelect);

                _interactionManager.MouseEvents.OnMouseDown +=
                    new MouseEventsSink_OnMouseDownEventHandler(MouseEvents_OnMouseDown);

                _interactionManager.MouseEvents.OnMouseMove +=
                    new MouseEventsSink_OnMouseMoveEventHandler(MouseEvents_OnMouseMove);

                _mode = ModeEnum.kDimText;

                break;
            }

            default:
                break;
            }
        }
Exemple #2
0
        //////////////////////////////////////////////////////////////////////////////////////////////
        // Update the position of dimension lines and text
        //
        //////////////////////////////////////////////////////////////////////////////////////////////
        void UpdateDimension(DimData dimData, Point dimText, Vector normal)
        {
            Vector xAxis = dimData.Point1.VectorTo(dimData.Point2);

            Vector upVector = normal.CrossProduct(xAxis);

            upVector.Normalize();

            Plane plane = _Tg.CreatePlane(dimData.Point1, normal);

            Point dimTextProj = AdnInventorUtilities.ProjectOnPlane(dimText, plane);

            double dotP1 = dimData.Point1.VectorTo(dimTextProj).DotProduct(upVector);
            double dotP2 = dimData.Point2.VectorTo(dimTextProj).DotProduct(upVector);

            Point extP1 = _Tg.CreatePoint(
                dimData.Point1.X + upVector.X * dotP1,
                dimData.Point1.Y + upVector.Y * dotP1,
                dimData.Point1.Z + upVector.Z * dotP1);

            Point extP2 = _Tg.CreatePoint(
                dimData.Point2.X + upVector.X * dotP2,
                dimData.Point2.Y + upVector.Y * dotP2,
                dimData.Point2.Z + upVector.Z * dotP2);

            dimData.ExtLine1.CoordinateSet[1] = dimData.Point1;
            dimData.ExtLine1.CoordinateSet[2] = extP1;

            dimData.ExtLine2.CoordinateSet[1] = dimData.Point2;
            dimData.ExtLine2.CoordinateSet[2] = extP2;

            dimData.DimLine.CoordinateSet[1] = extP1;
            dimData.DimLine.CoordinateSet[2] = extP2;

            Point midPoint = _Tg.CreatePoint(
                (extP1.X + extP2.X - dimData.Point1.X - dimData.Point2.X) * 0.5,
                (extP1.Y + extP2.Y - dimData.Point1.Y - dimData.Point2.Y) * 0.5,
                (extP1.Z + extP2.Z - dimData.Point1.Z - dimData.Point2.Z) * 0.5);

            SetNodePosition(dimData.DimNode, midPoint);
        }
        //////////////////////////////////////////////////////////////////////////////////////////////
        // Update the position of dimension lines and text
        //
        //////////////////////////////////////////////////////////////////////////////////////////////
        void UpdateDimension(DimData dimData, Point dimText, Vector normal)
        { 
            Vector xAxis = dimData.Point1.VectorTo(dimData.Point2);

            Vector upVector = normal.CrossProduct(xAxis);
            upVector.Normalize();

            Plane plane = _Tg.CreatePlane(dimData.Point1, normal);

            Point dimTextProj = AdnInventorUtilities.ProjectOnPlane(dimText, plane);

            double dotP1 = dimData.Point1.VectorTo(dimTextProj).DotProduct(upVector);
            double dotP2 = dimData.Point2.VectorTo(dimTextProj).DotProduct(upVector);

            Point extP1 = _Tg.CreatePoint(
                dimData.Point1.X + upVector.X * dotP1,
                dimData.Point1.Y + upVector.Y * dotP1,
                dimData.Point1.Z + upVector.Z * dotP1);
            
            Point extP2 = _Tg.CreatePoint(
                dimData.Point2.X + upVector.X * dotP2,
                dimData.Point2.Y + upVector.Y * dotP2,
                dimData.Point2.Z + upVector.Z * dotP2);

            dimData.ExtLine1.CoordinateSet[1] = dimData.Point1;
            dimData.ExtLine1.CoordinateSet[2] = extP1;

            dimData.ExtLine2.CoordinateSet[1] = dimData.Point2;
            dimData.ExtLine2.CoordinateSet[2] = extP2;

            dimData.DimLine.CoordinateSet[1] = extP1;
            dimData.DimLine.CoordinateSet[2] = extP2;

            Point midPoint = _Tg.CreatePoint(
                 (extP1.X + extP2.X - dimData.Point1.X - dimData.Point2.X) * 0.5,
                 (extP1.Y + extP2.Y - dimData.Point1.Y - dimData.Point2.Y) * 0.5,
                 (extP1.Z + extP2.Z - dimData.Point1.Z - dimData.Point2.Z) * 0.5);

            SetNodePosition(dimData.DimNode, midPoint);
        }
        //////////////////////////////////////////////////////////////////////////////////////////////
        // SelectEvent lets the user pick up vertex or workpoint
        //
        //////////////////////////////////////////////////////////////////////////////////////////////
        void SelectEvents_OnSelect(ObjectsEnumerator JustSelectedEntities,
           SelectionDeviceEnum SelectionDevice,
           Point ModelPosition,
           Point2d ViewPosition,
           View View)
        {
            switch (_mode)
            {
                case ModeEnum.kPoint1:
                    {
                        _point1 = ModelPosition;
                        _mode = ModeEnum.kPoint2;
                        _interactionManager.InteractionEvents.StatusBarText = "Select dimension second point: ";
                        break;
                    }
                case ModeEnum.kPoint2:
                    {
                        _point2 = ModelPosition;

                        Vector normal = View.Camera.Eye.VectorTo(View.Camera.Target);

                        _dimData = DrawDimension(_point1, _point2, ModelPosition, normal);

                        _clientGraphicsMng.UpdateView();


                        _interactionManager.InteractionEvents.StatusBarText = "Select dimension text position: ";

                        _interactionManager.MouseEvents.MouseMoveEnabled = true;

                        _interactionManager.SelectEvents.OnSelect -=
                            new SelectEventsSink_OnSelectEventHandler(SelectEvents_OnSelect);

                        _interactionManager.MouseEvents.OnMouseDown +=
                            new MouseEventsSink_OnMouseDownEventHandler(MouseEvents_OnMouseDown);

                        _interactionManager.MouseEvents.OnMouseMove +=
                            new MouseEventsSink_OnMouseMoveEventHandler(MouseEvents_OnMouseMove);

                        _mode = ModeEnum.kDimText;

                        break;
                    }
 
                default:
                    break;
            }
        }