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(); } } }
/// <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); }
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)); } }
/// <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)); }
/// <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)); }
/// <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)); }
/// <summary> /// 将 CSharpGL.GUISizeF 转换为 CSharpGL.GUISize。 /// </summary> /// <returns>返回一个 CSharpGL.GUISize 结构。</returns> public GUISize ToSize() { return(GUISize.Truncate(this)); }
/// <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)); }
/// <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; }
/// <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)); }
/// <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)); }
/// <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)); }
/// <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)); }