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();
                }
            }
        }
Example #2
0
        /// <summary>
        /// 测试指定的对象是否是一个与此 CSharpGL.GUISize 具有相同尺寸的 CSharpGL.GUISize。
        /// </summary>
        /// <param name="obj">要测试的 System.Object。</param>
        /// <returns>如果 obj 是一个 CSharpGL.GUISize 并与此 CSharpGL.GUISize 具有相同的宽度和高度,为 true;否则为 false。</returns>
        public override bool Equals(object obj)
        {
            if (!(obj is GUISize))
            {
                return(false);
            }
            GUISize size = (GUISize)obj;

            return(size.width == this.width && size.height == this.height);
        }
Example #3
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));
     }
 }
Example #4
0
 /// <summary>
 /// 将一个 CSharpGL.GUISize 结构的宽度和高度从另一个 CSharpGL.GUISize 结构的宽度和高度中减去。
 /// </summary>
 /// <param name="sz1">减法运算符左侧的 CSharpGL.GUISize 结构。</param>
 /// <param name="sz2">减法运算符右侧的 CSharpGL.GUISize 结构。</param>
 /// <returns>CSharpGL.GUISize,它是减法运算的结果。</returns>
 public static GUISize Subtract(GUISize sz1, GUISize sz2)
 {
     return(new GUISize(sz1.Width - sz2.Width, sz1.Height - sz2.Height));
 }
Example #5
0
 /// <summary>
 /// 将一个 CSharpGL.GUISize 结构的宽度和高度从另一个 CSharpGL.GUISize 结构的宽度和高度中减去。
 /// </summary>
 /// <param name="sz1">减法运算符左侧的 CSharpGL.GUISize 结构。</param>
 /// <param name="sz2">减法运算符右侧的 CSharpGL.GUISize 结构。</param>
 /// <returns>一个 CSharpGL.GUISize 结构,它是该减法运算的结果。</returns>
 public static GUISize operator -(GUISize sz1, GUISize sz2)
 {
     return(GUISize.Subtract(sz1, sz2));
 }
Example #6
0
 /// <summary>
 /// 将一个 CSharpGL.GUISize 结构的宽度和高度与另一个 CSharpGL.GUISize 结构的宽度和高度相加。
 /// </summary>
 /// <param name="sz1">要相加的第一个 CSharpGL.GUISize。</param>
 /// <param name="sz2">要相加的第二个 CSharpGL.GUISize。</param>
 /// <returns>一个 CSharpGL.GUISize 结构,它是该加法运算的结果。</returns>
 public static GUISize Add(GUISize sz1, GUISize sz2)
 {
     return(new GUISize(sz1.Width + sz2.Width, sz1.Height + sz2.Height));
 }
Example #7
0
 /// <summary>
 /// 将 CSharpGL.GUISizeF 转换为 CSharpGL.GUISize。
 /// </summary>
 /// <returns>返回一个 CSharpGL.GUISize 结构。</returns>
 public GUISize ToSize()
 {
     return(GUISize.Truncate(this));
 }
Example #8
0
 /// <summary>
 /// 将一个 CSharpGL.GUISize 结构的宽度和高度与另一个 CSharpGL.GUISize 结构的宽度和高度相加。
 /// </summary>
 /// <param name="sz1">要相加的第一个 CSharpGL.GUISize。</param>
 /// <param name="sz2">要相加的第二个 CSharpGL.GUISize。</param>
 /// <returns>一个 CSharpGL.GUISize 结构,它是该加法运算的结果。</returns>
 public static GUISize operator +(GUISize sz1, GUISize sz2)
 {
     return(GUISize.Add(sz1, sz2));
 }
Example #9
0
 /// <summary>
 /// 从 CSharpGL.GUISize 初始化 CSharpGL.GUIPoint 类的新实例。
 /// </summary>
 /// <param name="sz">CSharpGL.GUISize,它指定新 CSharpGL.GUIPoint 的坐标。</param>
 public GUIPoint(GUISize sz)
 {
     this.x = sz.Width;
     this.y = sz.Height;
 }
Example #10
0
 /// <summary>
 /// 返回从指定的 CSharpGL.GUIPoint 减去指定的 CSharpGL.GUISize 之后的结果。
 /// </summary>
 /// <param name="pt">作为被减数的 CSharpGL.GUIPoint。</param>
 /// <param name="sz">要从 CSharpGL.GUIPoint 中减去的 CSharpGL.GUISize。</param>
 /// <returns>CSharpGL.GUIPoint,它是减法运算的结果。</returns>
 public static GUIPoint Subtract(GUIPoint pt, GUISize sz)
 {
     return(new GUIPoint(pt.X - sz.Width, pt.Y - sz.Height));
 }
Example #11
0
 /// <summary>
 /// 将指定的 CSharpGL.GUISize 添加到指定的 CSharpGL.GUIPoint。
 /// </summary>
 /// <param name="pt">要添加的 CSharpGL.GUIPoint。</param>
 /// <param name="sz">要添加的 CSharpGL.GUISize。</param>
 /// <returns>CSharpGL.GUIPoint,它是加法运算的结果。</returns>
 public static GUIPoint Add(GUIPoint pt, GUISize sz)
 {
     return(new GUIPoint(pt.X + sz.Width, pt.Y + sz.Height));
 }
Example #12
0
 /// <summary>
 /// 按指定大小的负值平移 CSharpGL.GUIPointF。
 /// </summary>
 /// <param name="pt">要平移的 CSharpGL.GUIPointF。</param>
 /// <param name="sz">CSharpGL.GUISize,它指定要从 pt 的坐标中减去的数。</param>
 /// <returns>平移后的 CSharpGL.GUIPointF。</returns>
 public static GUIPointF Subtract(GUIPointF pt, GUISize sz)
 {
     return(new GUIPointF(pt.X - (float)sz.Width, pt.Y - (float)sz.Height));
 }
Example #13
0
 /// <summary>
 /// 按指定的 CSharpGL.GUISize 平移给定的 CSharpGL.GUIPointF。
 /// </summary>
 /// <param name="pt">要平移的 CSharpGL.GUIPointF。</param>
 /// <param name="sz">CSharpGL.GUISize,它指定要增加到 pt 的坐标的数。</param>
 /// <returns>平移后的 CSharpGL.GUIPointF。</returns>
 public static GUIPointF Add(GUIPointF pt, GUISize sz)
 {
     return(new GUIPointF(pt.X + (float)sz.Width, pt.Y + (float)sz.Height));
 }