コード例 #1
0
        private void Grid_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (this.CanMoveCamera)
            {
                if (e.MiddleButton == MouseButtonState.Pressed)
                {
                    mouseDownLM      = 2;
                    mouseDown        = true;
                    centerOfViewport = viewport.PointToScreen(new Point(viewport.ActualWidth / 2, viewport.ActualHeight / 2));
                    MouseUtilities.SetPosition(centerOfViewport);
                    this.Cursor = Cursors.None;
                }
                else if (e.LeftButton == MouseButtonState.Pressed)
                {
                    mouseDownLM = 1;
                    mouseDown   = true;

                    diffOffset.X = translacija0.OffsetX;
                    diffOffset.Y = translacija0.OffsetY;
                    start        = e.GetPosition(this);


                    // oblacic
                    Point    pozicijaMisa = e.GetPosition(viewport);
                    Point3D  point3D      = new Point3D(pozicijaMisa.X, pozicijaMisa.Y, 0);
                    Vector3D pravac       = new Vector3D(pozicijaMisa.X, pozicijaMisa.Y, 10);

                    PointHitTestParameters pointParameters = new PointHitTestParameters(pozicijaMisa);
                    RayHitTestParameters   rayParameters   = new RayHitTestParameters(point3D, pravac);

                    VisualTreeHelper.HitTest(viewport, null, HTResult, pointParameters);
                }
            }
        }
コード例 #2
0
        private void Grid_MouseMove(object sender, MouseEventArgs e)
        {
            if (this.CanMoveCamera)
            {
                if (!mouseDown)
                {
                    return;
                }



                if (mouseDownLM == 1)
                {
                    Point  end     = e.GetPosition(this);
                    double rasponX = end.X - start.X;
                    double rasponY = end.Y - start.Y;

                    double sirina = this.ActualWidth;
                    double visina = this.ActualHeight;

                    int    pomocna      = 300;
                    double translacijaX = (rasponX * pomocna) / sirina;
                    double translacijaY = (-rasponY * pomocna) / visina;

                    translacija0.OffsetX = diffOffset.X + (translacijaX / (pomocna * 1));
                    translacija0.OffsetY = diffOffset.Y + (translacijaY / (pomocna * 1));

                    translacija1.OffsetX = translacija0.OffsetX;
                    translacija1.OffsetY = translacija0.OffsetY;
                    translacija2.OffsetX = translacija0.OffsetX;
                    translacija2.OffsetY = translacija0.OffsetY;
                    translacija3.OffsetX = translacija0.OffsetX;
                    translacija3.OffsetY = translacija0.OffsetY;
                    translacija4.OffsetX = translacija0.OffsetX;
                    translacija4.OffsetY = translacija0.OffsetY;
                }
                else if (mouseDownLM == 2)
                {
                    Point relativePos       = Mouse.GetPosition(viewport);
                    Point actualRelativePos = new Point(relativePos.X - viewport.ActualWidth / 2,
                                                        viewport.ActualHeight / 2 - relativePos.Y);

                    double dx = actualRelativePos.X;
                    double dy = actualRelativePos.Y;

                    yaw   += dx;
                    pitch += dy;

                    // Rotate
                    this.Rotate();

                    // Set mouse position back to the center of the viewport in screen coordinates
                    MouseUtilities.SetPosition(centerOfViewport);
                }
            }
        }