Пример #1
0
        internal LitMath.Vector2 Snap(LitMath.Vector2 posInCanvas)
        {
            LitMath.Vector2 posInModel = _presenter.CanvasToModel(posInCanvas);

            foreach (Entity entity in _presenter.currentBlock)
            {
                List <ObjectSnapPoint> snapPnts = entity.GetSnapPoints();
                if (snapPnts == null || snapPnts.Count == 0)
                {
                    continue;
                }
                foreach (ObjectSnapPoint snapPnt in snapPnts)
                {
                    double dis         = (snapPnt.position - posInModel).length;
                    double disInCanvas = _presenter.ModelToCanvas(dis);
                    if (disInCanvas <= _threshold)
                    {
                        _currObjectSnapPoint = snapPnt;
                        return(snapPnt.position);
                    }
                }
            }

            _currObjectSnapPoint = null;
            return(posInModel);
        }
Пример #2
0
        private void GetVector(object sender, MouseButtonEventArgs e)
        {
            if (e.LeftButton == MouseButtonState.Pressed)
            {
                Point           p         = e.GetPosition(main.grdMain);
                ObjectSnapPoint snapPoint = main.ChangeToSnapPointAndDrawMark(ref p);

                Point3D p3;
                if (snapPoint == null)
                {
                    //SnapPoint가 없는 경우
                    if (Settings.Default.isOnOrthogonal & isSecondPointOfVectorInput == true)
                    {
                        //수직선 옵션이 켜 있는 경우
                        p3 = main.mouseInputGuide3d.GetOrthogonalPoint3dFromPoint2d(ref p);
                    }
                    else
                    {
                        //수직선 옵션이 꺼 있는 경우 그냥 대응하는 3차원 점 반환
                        p3 = main.Draw.GetPoint3dOnBasePlaneFromPoint2D(p);
                    }
                }
                else
                {
                    //SnapPoint가 있는 경우
                    p3 = snapPoint.point;
                }

                main.MouseDown -= GetVector;
                isMouseInput    = true;
                main.Cmd.Call(p3.X + "," + p3.Y + "," + p3.Z);
                isSecondPointOfVectorInput = true;
            }
        }
Пример #3
0
        internal void Draw(ObjectSnapPoint objectSnapPoint)
        {
            Clear();
            if (objectSnapPoint == null)
            {
                return;
            }

            Point   center = objectSnapPoint.point2d;
            Shape2D shape  = new Shape2D();

            switch (objectSnapPoint.snapType)
            {
            case ObjectSnapPoint.Types.End:
            case ObjectSnapPoint.Types.Node:
                double size = markSize;
                shape = shapes.AddSquare(center, size);
                break;

            case ObjectSnapPoint.Types.Mid:
                double radius = markSize / 2;
                shape = shapes.AddTriangleReqular(center, radius);
                break;

            case ObjectSnapPoint.Types.Center:
                break;

            default:
                break;
            }

            if (shape == null)
            {
                return;
            }
            shape.Color             = color;
            shape.Thickness         = thickness;
            objectSnapPoint.object_ = shape.object_;

            shapes.DrawAtGrid(grid);
        }
Пример #4
0
        void GetPointsAndGetVector_Moving(object sender, MouseEventArgs e)
        {
            currentMousePoint = e.GetPosition(main.grdMain);

            //개체선택용 MouseInputGuide 클래스 사용 시 Cross 옵션인 경우 첫번째 점을 입력하기 전부터 시작되어야 함.
            if (viewType == MouseInputGuide.ViewType.Cross & !main.mouseInputGuide3d.started)
            {
                main.mouseInputGuide.viewType = viewType;
                main.mouseInputGuide.Start(currentMousePoint);
            }

            //SnapPoint 그리기.
            ObjectSnapPoint snapPoint = main.ChangeToSnapPointAndDrawMarkAndPutEvent(ref currentMousePoint, eventAtSnapMark);

            //Points 입력 요청일 때 2번째 입력값 부터 InputGuideLine생성.
            if (userInputPoints.Count > 0)
            {
                if (snapPoint == null & Settings.Default.isOnOrthogonal)
                {
                    main.mouseInputGuide3d.GetOrthogonalPoint3dFromPoint2d(ref currentMousePoint);
                }
                main.mouseInputGuide3d.Move(currentMousePoint);
            }
        }
Пример #5
0
 public void Clear()
 {
     _currObjectSnapPoint = null;
 }