示例#1
0
        private void SetCurrentPoint()
        {
            var SnapPoints = this.GetSnapPoints();

            if (SnapPoints.Length > 0)
            {
                SnapPoint p = FindClosestPoint(SnapPoints);

                this.CurrentPoint   = p;
                _SwapBufferRequired = true;
            }

            else
            {
                if (this.Snapping != null)
                {
                    this.Snapping(new SnapEventArgs());
                }

                else
                {
                    ScreenToPlane(CurrentLocation, this.Camera.NearPlane, out CurrentPoint);
                }
            }
        }
示例#2
0
        private SnapPoint FindClosestPoint(SnapPoint[] snapPoints)
        {
            double minDist = double.MaxValue;

            int i     = 0;
            int index = 0;

            foreach (SnapPoint vertex in snapPoints)
            {
                Point3D vertexScreen  = WorldToScreen(vertex);
                Point2D currentScreen = new Point2D(CurrentLocation.X, Size.Height - CurrentLocation.Y);

                double dist = Point2D.Distance(vertexScreen, currentScreen);

                if (dist < minDist)
                {
                    index   = i;
                    minDist = dist;
                }

                i++;
            }

            SnapPoint snap = (SnapPoint)snapPoints.GetValue(index);

            //DisplaySnappedVertex(snap);

            return(snap);
        }
示例#3
0
        private void DisplaySnappedVertex(SnapPoint snap)
        {
            renderContext.SetLineSize(2);
            // white color
            renderContext.SetColorWireframe(System.Drawing.Color.Yellow);
            renderContext.SetState(depthStencilStateType.DepthTestOff);

            Point2D onScreen = WorldToScreen(snap);

            switch (snap.Type)
            {
            case SnapState.SnapType.POINT:
                DrawCircle(new System.Drawing.Point((int)onScreen.X, (int)(onScreen.Y)));
                DrawCross(new System.Drawing.Point((int)onScreen.X, (int)(onScreen.Y)));
                break;

            case SnapState.SnapType.CENTER:
                DrawCircle(new System.Drawing.Point((int)onScreen.X, (int)(onScreen.Y)));
                break;

            case SnapState.SnapType.END:
                DrawQuad(new System.Drawing.Point((int)onScreen.X, (int)(onScreen.Y)));
                break;

            case SnapState.SnapType.MID:
                DrawTriangle(new System.Drawing.Point((int)onScreen.X, (int)(onScreen.Y)));
                break;

            case SnapState.SnapType.QUAD:
                renderContext.SetLineSize(3.0f);
                DrawRhombus(new System.Drawing.Point((int)onScreen.X, (int)(onScreen.Y)));
                break;
            }

            renderContext.SetLineSize(1);
        }