示例#1
0
        private Vector2 GetMouseCoords(Point screenMouse)
        {
            RenderEditor();
            var coords = OpenGLHelper.convertScreenToWorldCoords(screenMouse.X, screenMouse.Y);

            GL.PopMatrix();
            return(new Vector2(coords.X, coords.Y));
        }
示例#2
0
        private void glControl1_MouseMove(object sender, MouseEventArgs e)
        {
            var mouseCoords = GetMouseCoords(e.Location);
            var picks       = SearchHit(mouseCoords.X, mouseCoords.Y);

            if (picks.Count > 0)
            {
                if (!picks[0].IsSelected)
                {
                    picks[0].IsHovered = true;

                    glControl1.Invalidate();
                }
            }
            else
            {
                foreach (var obj in GetPickableObjects())
                {
                    obj.IsHovered = false;
                }

                glControl1.Invalidate();
            }

            if (mouseCameraDown)
            {
                var pos = new Vector2(e.Location.X - originMouse.X, e.Location.Y - originMouse.Y);
                Camera.Position.X += pos.X;
                Camera.Position.Y -= pos.Y;

                originMouse = e.Location;

                glControl1.Invalidate();
            }

            if (!showSelectionBox && isPicked)
            {
                Console.WriteLine(pickAction);

                RenderEditor();
                var temp      = e.Location;
                var curPos    = OpenGLHelper.convertScreenToWorldCoords(temp.X, temp.Y);
                var prevPos   = OpenGLHelper.convertScreenToWorldCoords(pickOriginMouse.X, pickOriginMouse.Y);
                var pickMouse = new Point((int)(prevPos.X - curPos.X), (int)(prevPos.Y - curPos.Y));

                Console.WriteLine("curPos " + curPos);
                Console.WriteLine("prevPos " + prevPos);

                GL.PopMatrix();

                if (pickAction == PickAction.Translate)
                {
                    foreach (var pickObject in SelectedObjects)
                    {
                        if (pickOriginMouse != Point.Empty)
                        {
                            float posX = 0;
                            float posY = 0;
                            float posZ = 0;

                            if (pickAxis == PickAxis.X)
                            {
                                posX = pickMouse.X;
                            }
                            if (pickAxis == PickAxis.Y)
                            {
                                posY = pickMouse.Y;
                            }
                            if (pickAxis == PickAxis.All)
                            {
                                posX = pickMouse.X;
                                posY = pickMouse.Y;
                            }

                            pickObject.PickTranslate(posX, posY, posZ);
                        }
                    }
                }
                if (pickAction == PickAction.Rotate)
                {
                    foreach (var pickObject in SelectedObjects)
                    {
                        if (pickOriginMouse != Point.Empty)
                        {
                            float rotX = 0;
                            float rotY = 0;
                            float rotZ = 0;

                            if (pickAxis == PickAxis.X)
                            {
                                rotX = pickMouse.X * -0.015625f;
                            }
                            if (pickAxis == PickAxis.Y)
                            {
                                rotY = pickMouse.Y;
                            }
                            if (pickAxis == PickAxis.All)
                            {
                                rotX = pickMouse.X * -0.015625f;
                                //  rotY = pickMouse.Y;
                            }

                            pickObject.PickRotate(rotX, rotY, rotZ);
                        }
                    }
                }

                pickOriginMouse = temp;

                glControl1.Invalidate();
            }

            if (mouseDown && !isPicked)
            {
                RenderEditor();

                var temp    = e.Location;
                var curPos  = OpenGLHelper.convertScreenToWorldCoords(temp.X, temp.Y);
                var prevPos = OpenGLHelper.convertScreenToWorldCoords(pickOriginMouse.X, pickOriginMouse.Y);

                GL.PopMatrix();

                DrawSelectionBox(prevPos, curPos);
            }
        }