碧波液压网 欢迎你,游客。 登录 注册

基于.NET Framework的图形动态技术的研究

版权信息:站内文章仅供学习与参考,如触及到您的版权信息,请与本站联系。

  动态定位是交互式图形系统中最基本的操作,它有橡皮条(Rubber Banding)和牵引(Dragging )两种技术。这两种技术在实现方法上十分相似,都必须动态实时地绘出图元操作变化中的中间过程。由于颜色相同的前景像素的两次 XOR 操作可以还原成原有的背景像素,因此用 GDI[1]来 开 发 图 形 CAD 系 统 时 常 使 用SetROP2方法,并通过指定 R2_XORPEN 来设定像素的这种 XOR 技术来擦除和重现中间过程的图元。

  但随着.NET Framework 对编程模式的影响深入,在 Visual Studio .NET 中使用 GDI+开发交互式图形系统也越成为一种广泛的手段。然而,.NET Framework 所集成的 GDI+模块中并不支持早期 GDI 的 XOR 模式。为此,本文以.NETFramework 2.0[2]为框架,讨论用 Visual C++ 2005

  来实现图形的动态技术 XOR 的几种方法:使用ControlPaint 中的 XOR 方法、重装 GDI 的 XOR功能、使用内存和容器。

  1 使用 ControlPaint 中的 XOR 方法

  在 .NET Framework 类 库 中 , System::Windows::Forms 命名空间中的 ControlPaint 类用来提供绘制常用Windows 控件及其元素的方法。其中,有一些方法就是使用 XOR 绘制模式来实现的。例如:DrawReversibleLine(用 XOR模式绘制一条直线)、DrawReversibleFrame(用XOR 模式绘制细线虚框或粗实线框)以及

  FillReversibleRectangle(用 XOR 模式绘制实心矩心区域)。

  这些方法都是不能继承的静态方法,由于它无法以个控件作为自己的父窗口,因此ControlPaint 类所有静态方法所涉及到的坐标都是屏幕坐标。故在控件类使用上述方法时,还需使 用 Forms::Control 类 的 PointToScreen 和RectangleToScreen 方法将当前控件中的坐标转换成屏幕坐标。例如,下面的代码过程是当在窗体 Form1 中的面板(Panel)控件 panelMain 中左击鼠标时,一个细线虚框的橡皮条过程开始,当再次左击鼠标,虚框消失并绘制出一个粗实线框;若右击鼠标,则仅虚框消失。

  (1) 创建一个 Windows 窗体应用程序XORRevRect,改变 Form1 的 Text 和 Size 属性。

  (2) 向 Form1 中添加控件 Panel,将其类名(Name)设为 panelMain,停靠(Dock)属性设为Fill,背景颜色(BackColor)设为 White,将光标(Cursor)设为 Cross。

  (3) 为 panelMain 添加 MouseDown 和MouseMove 事件处理方法 On_MouseDown 和On_MouseMove。

  (4) 在 Form1 类中添加保存开始点和当前坐标点(Point)的数据成员 ptStart、ptCurCursor,以及用于决定橡皮条过程是否开始的 bool 数据成员 isStart 和是否第一次绘制的 bool 数据成员isFirst。

  (5) 为 Form1 类添加 Load 事件处理方法On_Load,并添加下列代码:

你没有登陆,无法阅读全文内容

您需要 登录 才可以查看,没有帐号? 立即注册

标签:
点赞   收藏

相关文章

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。

用户名: 验证码:

最新评论