コード例 #1
0
 void IMouseHandler.canvas_MouseUp(object sender, GLMouseEventArgs e)
 {
     if ((e.Button & this.lastBindingMouseButtons) != GLMouseButtons.None)
     {
         this.mouseDownFlag = false;
     }
 }
コード例 #2
0
        void IMouseHandler.canvas_MouseDown(object sender, GLMouseEventArgs e)
        {
            this.lastBindingMouseButtons = this.BindingMouseButtons;
            if ((e.Button & this.lastBindingMouseButtons) != GLMouseButtons.None)
            {
                var control = sender as Control;
                this.SetBounds(control.Width, control.Height);

                if (!cameraState.IsSameState(this.camera))
                {
                    SetCamera(this.camera.Position, this.camera.Target, this.camera.UpVector);
                }

                this._startPosition = GetArcBallPosition(e.X, e.Y);

                mouseDownFlag = true;

                {
                    var mouseDown = this.MouseDown;
                    if (mouseDown != null)
                    {
                        mouseDown(this, e);
                    }
                }
            }
        }
コード例 #3
0
        void IMouseHandler.canvas_MouseMove(object sender, GLMouseEventArgs e)
        {
            if (mouseDownFlag && ((e.Button & this.lastBindingMouseButtons) != GLMouseButtons.None))
            {
                if (!cameraState.IsSameState(this.camera))
                {
                    SetCamera(this.camera.Position, this.camera.Target, this.camera.UpVector);
                }

                this._endPosition = GetArcBallPosition(e.X, e.Y);
                var cosRadian = _startPosition.dot(_endPosition) / (_startPosition.length() * _endPosition.length());
                if (cosRadian > 1.0f)
                {
                    cosRadian = 1.0f;
                }
                else if (cosRadian < -1)
                {
                    cosRadian = -1.0f;
                }
                float angle = MouseSensitivity * (float)(Math.Acos(cosRadian) / Math.PI * 180);
                _normalVector = _startPosition.cross(_endPosition).normalize();
                if (!
                    ((_normalVector.x == 0 && _normalVector.y == 0 && _normalVector.z == 0) ||
                     float.IsNaN(_normalVector.x) || float.IsNaN(_normalVector.y) || float.IsNaN(_normalVector.z)))
                {
                    _startPosition = _endPosition;

                    mat4 newRotation = glm.rotate(angle, _normalVector);
                    this.totalRotation = newRotation * totalRotation;
                }
            }
        }
コード例 #4
0
        void IMouseHandler.canvas_MouseMove(object sender, GLMouseEventArgs e)
        {
            if (mouseDownFlag && ((e.Button & this.lastBindingMouseButtons) != GLMouseButtons.None))
            {
                if (!cameraState.IsSameState(this.camera))
                {
                    SetCamera(this.camera.Position, this.camera.Target, this.camera.UpVector);
                }

                Point location           = new Point(e.X, this.canvas.Height - e.Y - 1);
                Point differenceOnScreen = new Point(location.X - this._lastPosition.X, location.Y - this._lastPosition.Y);
                mat4  model      = this.renderer.GetModelMatrix();
                mat4  view       = this.camera.GetViewMatrix();
                mat4  projection = this.camera.GetProjectionMatrix();
                vec4  viewport;
                {
                    var result = new int[4];
                    GL.Instance.GetIntegerv((uint)GetTarget.Viewport, result);
                    viewport = new vec4(result[0], result[1], result[2], result[3]);
                }
                var  position         = new vec3(0.0f);// imangine we have a point at (0, 0, 0).
                vec3 windowPos        = glm.project(position, view * model, projection, viewport);
                var  newWindowPos     = new vec3(windowPos.x + differenceOnScreen.X, windowPos.y + differenceOnScreen.Y, windowPos.z);
                vec3 newPosition      = glm.unProject(newWindowPos, view * model, projection, viewport);
                var  worldPosition    = new vec3(model * new vec4(position, 1.0f));
                var  newWorldPosition = new vec3(model * new vec4(newPosition, 1.0f));
                this.renderer.WorldPosition += newWorldPosition - worldPosition;

                this._lastPosition = location;
            }
        }
コード例 #5
0
        void IMouseHandler.canvas_MouseMove(object sender, GLMouseEventArgs e)
        {
            if (this.mouseDownFlag &&
                ((e.Button & this.lastBindingMouseButtons) != GLMouseButtons.None) &&
                (e.X != lastPosition.x || e.Y != lastPosition.y))
            {
                IViewCamera camera = this.camera;
                if (camera == null)
                {
                    return;
                }

                vec3    back         = this.back;
                vec3    right        = this.right;
                vec3    up           = this.up;
                GUISize bound        = this.bound;
                ivec2   downPosition = this.lastPosition;
                {
                    float deltaX  = -this.HorizontalRotationFactor * (e.X - downPosition.x) / (float)bound.Width;
                    float cos     = (float)Math.Cos(deltaX);
                    float sin     = (float)Math.Sin(deltaX);
                    vec3  newBack = new vec3(
                        back.x * cos + right.x * sin,
                        back.y * cos + right.y * sin,
                        back.z * cos + right.z * sin);
                    back  = newBack;
                    right = up.cross(back);
                    back  = back.normalize();
                    right = right.normalize();
                }
                {
                    float deltaY  = this.VerticalRotationFactor * (e.Y - downPosition.y) / (float)bound.Height;
                    float cos     = (float)Math.Cos(deltaY);
                    float sin     = (float)Math.Sin(deltaY);
                    vec3  newBack = new vec3(
                        back.x * cos - up.x * sin,
                        back.y * cos - up.y * sin,
                        back.z * cos - up.z * sin);
                    back = newBack;
                    up   = back.cross(right);
                    back = back.normalize();
                    up   = up.normalize();
                }

                //camera.Position = camera.Target +
                //    back * (float)((camera.Position - camera.Target).length());
                rootNode.RotationAxis = up;
                camera.UpVector       = up;
                this.back             = back;
                this.right            = right;
                this.up           = up;
                this.lastPosition = e.Location;

                IGLCanvas canvas = this.canvas;
                if (canvas != null && canvas.RenderTrigger == RenderTrigger.Manual)
                {
                    canvas.Repaint();
                }
            }
        }
コード例 #6
0
 void CtrlButton_MouseUp(object sender, GLMouseEventArgs e)
 {
     if (e.Button == GLMouseButtons.Left)
     {
         this.Location = this.originalLocation;
         this.Size     = this.originalSize;
     }
 }
コード例 #7
0
ファイル: WinSoftCtrlRoot.cs プロジェクト: wskjcmjx/CSharpGL
 void winCanvas_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
 {
     if (this.currentControl != null)
     {
         GLMouseEventArgs args = e.Translate();
         this.currentControl.InvokeEvent(EventType.MouseUp, args);
     }
 }
コード例 #8
0
 void IMouseHandler.canvas_MouseDown(object sender, GLMouseEventArgs e)
 {
     this.lastBindingMouseButtons = this.BindingMouseButtons;
     if ((e.Button & this.lastBindingMouseButtons) != GLMouseButtons.None)
     {
         this.mouseDownFlag = true;
         this.lastPosition  = e.Location;
     }
 }
コード例 #9
0
        void winCanvas_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            GLMouseEventArgs args = e.Translate();

            foreach (var item in this.Children)
            {
                item.InvokeEvent(EventType.MouseMove, args);
            }
        }
コード例 #10
0
        void WinGLCanvas_MouseUp(object sender, MouseEventArgs e)
        {
            GLEventHandler <GLMouseEventArgs> MouseUp = this.glMouseUp;

            if (MouseUp != null)
            {
                GLMouseEventArgs arg = e.Translate();
                MouseUp(sender, arg);
            }
        }
コード例 #11
0
        void WinSoftGLCanvas_MouseMove(object sender, MouseEventArgs e)
        {
            GLEventHandler <GLMouseEventArgs> MouseMove = this.glMouseMove;

            if (MouseMove != null)
            {
                GLMouseEventArgs arg = e.Translate();
                MouseMove(sender, arg);
            }
        }
コード例 #12
0
        void IMouseHandler.canvas_MouseWheel(object sender, GLMouseEventArgs e)
        {
            this.camera.MouseWheel(e.Delta);

            IGLCanvas canvas = this.canvas;

            if (canvas != null && canvas.RenderTrigger == RenderTrigger.Manual)
            {
                canvas.Repaint();
            }
        }
コード例 #13
0
 void CtrlButton_MouseDown(object sender, GLMouseEventArgs e)
 {
     if (e.Button == GLMouseButtons.Left)
     {
         this.originalLocation = this.Location;
         this.originalSize     = this.Size;
         this.Size             = new GUISize((int)(this.Width * 0.9f), (int)(this.Height * 0.9f));
         this.Location         = new GUIPoint(
             (int)(this.Location.X + this.Width * 0.05f),
             (int)(this.Location.Y + this.Height * 0.05f));
     }
 }
コード例 #14
0
 void IMouseHandler.canvas_MouseDown(object sender, GLMouseEventArgs e)
 {
     this.lastBindingMouseButtons = this.BindingMouseButtons;
     if ((e.Button & this.lastBindingMouseButtons) != GLMouseButtons.None)
     {
         this.lastPosition = e.Location;
         var control = sender as Control;
         this.SetBounds(control.Width, control.Height);
         this.mouseDownFlag = true;
         PrepareCamera();
     }
 }
コード例 #15
0
ファイル: WinSoftCtrlRoot.cs プロジェクト: wskjcmjx/CSharpGL
        void winCanvas_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            int       x = e.X, y = this.BindingCanvas.Height - e.Y - 1;
            GLControl control = GetControlAt(x, y, this);

            this.currentControl = control;
            if (control != null)
            {
                GLMouseEventArgs args = e.Translate();
                control.InvokeEvent(EventType.MouseDown, args);
            }
        }
コード例 #16
0
        void IMouseHandler.canvas_MouseMove(object sender, GLMouseEventArgs e)
        {
            if (mouseDownFlag && ((e.Button & this.lastBindingMouseButtons) != GLMouseButtons.None))
            {
                if (!cameraState.IsSameState(this.camera))
                {
                    SetCamera(this.camera.Position, this.camera.Target, this.camera.UpVector);
                }

                this._endPosition = GetArcBallPosition(e.X, e.Y);
                var cosRadian = _startPosition.dot(_endPosition) / (_startPosition.length() * _endPosition.length());
                if (cosRadian > 1.0f)
                {
                    cosRadian = 1.0f;
                }
                else if (cosRadian < -1)
                {
                    cosRadian = -1.0f;
                }
                float angle = MouseSensitivity * (float)(Math.Acos(cosRadian) / Math.PI * 180);
                _normalVector = _startPosition.cross(_endPosition).normalize();
                if (!
                    ((_normalVector.x == 0 && _normalVector.y == 0 && _normalVector.z == 0) ||
                     float.IsNaN(_normalVector.x) || float.IsNaN(_normalVector.y) || float.IsNaN(_normalVector.z)))
                {
                    _startPosition = _endPosition;

                    mat4 newRotation = glm.rotate(angle, _normalVector);
                    this.totalRotation = newRotation * this.totalRotation;


                    {
                        var rotated = this.Rotated;
                        if (rotated != null)
                        {
                            Quaternion quaternion = this.totalRotation.ToQuaternion();
                            float      angleInDegree;
                            vec3       axis;
                            quaternion.Parse(out angleInDegree, out axis);
                            rotated(this, new Rotation(axis, angleInDegree, e.Button, e.Clicks, e.X, e.Y, e.Delta));
                        }
                    }
                }

                IGLCanvas canvas = this.canvas;
                if (canvas != null && canvas.RenderTrigger == RenderTrigger.Manual)
                {
                    canvas.Repaint();
                }
            }
        }
コード例 #17
0
        void winCanvas_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
        {
            GLMouseEventArgs args = e.Translate();

            foreach (var item in this.Children)
            {
                int x = e.X, y = this.BindingCanvas.Height - e.Y;
                if (item.ContainsPoint(x, y))
                {
                    this.mouseDownControl = item;
                    item.InvokeEvent(EventType.MouseDown, args);
                }
            }
        }
コード例 #18
0
        void IMouseHandler.canvas_MouseUp(object sender, GLMouseEventArgs e)
        {
            if ((e.Button & this.lastBindingMouseButtons) != GLMouseButtons.None)
            {
                mouseDownFlag = false;

                {
                    var mouseUp = this.MouseUp;
                    if (mouseUp != null)
                    {
                        mouseUp(this, e);
                    }
                }
            }
        }
コード例 #19
0
        void IMouseHandler.canvas_MouseMove(object sender, GLMouseEventArgs e)
        {
            if (this.mouseDownFlag &&
                ((e.Button & this.lastBindingMouseButtons) != GLMouseButtons.None) &&
                (e.X != this.lastPosition.x || e.Y != this.lastPosition.y))
            {
                mat4 rotationMatrix = glm.rotate(this.HorizontalRotationSpeed * (e.X - this.lastPosition.x), -this.camera.UpVector);
                var  front          = new vec4(this.camera.GetFront(), 1.0f);
                vec4 front1         = rotationMatrix * front;
                rotationMatrix = glm.rotate(this.VerticalRotationSpeed * (this.lastPosition.y - e.Y), this.camera.GetRight());
                vec4 front2 = rotationMatrix * front1;
                //front2 = front2.normalize();
                this.camera.Target = this.camera.Position + new vec3(front2);

                this.lastPosition = e.Location;
            }
        }
コード例 #20
0
        void IMouseHandler.canvas_MouseDown(object sender, GLMouseEventArgs e)
        {
            this.lastBindingMouseButtons = this.BindingMouseButtons;
            if ((e.Button & this.lastBindingMouseButtons) != GLMouseButtons.None)
            {
                var control = sender as Control;
                this.SetBounds(control.Width, control.Height);

                if (!cameraState.IsSameState(this.camera))
                {
                    SetCamera(this.camera.Position, this.camera.Target, this.camera.UpVector);
                }

                this._lastPosition = new Point(e.X, this.canvas.Height - e.Y - 1);

                mouseDownFlag = true;
            }
        }
コード例 #21
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="e"></param>
        /// <returns></returns>
        public static GLMouseEventArgs Translate(this System.Windows.Forms.MouseEventArgs e)
        {
            var args = new GLMouseEventArgs((GLMouseButtons)e.Button, e.Clicks, e.X, e.Y, e.Delta);

            return(args);
        }
コード例 #22
0
 void IMouseHandler.canvas_MouseWheel(object sender, GLMouseEventArgs e)
 {
     this.camera.MouseWheel(e.Delta);
 }
コード例 #23
0
 void IMouseHandler.canvas_MouseWheel(object sender, GLMouseEventArgs e)
 {
 }