CGAL的可视化框架
本章描述了有助于使用Qt图形视图框架可视化二维CGAL对象的类。该框架使用模型视图范式。QGraphicsItems存储在QGraphicsScene中,并显示在QGraphicsView中。项目有一个绘制方法,当项目位于视图的可见区域时会调用该方法。该框架还负责通过场景将事件从视图调度到项目。该框架是可扩展的,因为用户可以添加从QGraphicsItem派生的类。除了可视化QGraphicsIt
1、介绍
本章描述了有助于使用Qt图形视图框架可视化二维CGAL对象的类。
该框架使用模型视图范式。QGraphicsItems存储在QGraphicsScene中,并显示在QGraphicsView中。项目有一个绘制方法,当项目位于视图的可见区域时会调用该方法。该框架还负责通过场景将事件从视图调度到项目。该框架是可扩展的,因为用户可以添加从QGraphicsItem派生的类。
除了可视化QGraphicsItems之外,用户还希望输入几何对象。我们为所有2D CGAL内核对象提供了输入生成器。
该包还包括一个用于提供缩放、平移和滚动到图形视图的类。以下部分描述了所有这些类之间的交互,我们最后描述了QGraphicsItem的内部结构。
1.1、命名规范
由于Qt和CGAL有不同的命名约定,并且这个包将它们结合在一起,我们采用了以下混合命名约定。所有头文件都在目录CGAL/Qt/中。类名是连接的大写单词,函数名是连接的第一个小写单词的大写单词。其基本原理是,这些类与Qt有关,并且它们有时是派生类,必须覆盖遵循此命名方案的成员函数。所有类都在嵌套的命名空间CGAL::Qt中。
2、总体设计
在图中,您可以看到四个灰色的类,它们来自Qt图形视图框架。QGraphicsScene包含QGraphicsItems,它们显示在任意数量的QGraphicsView中。视图是小部件,也就是说,它们占用了应用程序中的屏幕空间。
第四类是QObject。它在Qt中对事件处理和内存管理起着重要作用。首先,它允许添加信号和插槽,并将它们连接起来。其次,它允许安装事件过滤器。
2.1、可视化CGAL数据结构
2.2、导航
我们提供了一个类CGAL::Qt::GraphicsViewNavigation,它可以作为图形视图及其视口的事件过滤器安装。对于所有Qt小部件,QGraphicsView都是从QObject派生而来的。按下或释放鼠标按钮、移动鼠标、按下按键等事件会传递给视图,视图会首先将它们传递给事件过滤器。CGAL::Qt::GraphicsViewNavigation事件过滤器允许缩放、滚动和重新居中。最后,该类发出一个带有鼠标坐标的信号。这可用于在应用程序的状态栏中显示当前鼠标位置。
2.3、 输入
CGAL内核对象、多段线等的输入由从CGAL::Qt::GraphicsViewInput派生的类生成。作为导航类,它们是图形视图的事件处理程序,因为当用户单击以输入点时,它们必须知道鼠标在哪里。
一旦输入生成器组装好对象(可能需要几次鼠标点击),它就会发出一个CGAL::对象来包装输入。应用程序开发人员可以将发出的输入连接到插槽。在使用图形视图框架的CGAL的2D演示中,我们将其连接到插槽MainWindow::processInput(CGA::Object)。此方法从CGAL::Object中展开并将其插入到数据结构中。然后它通常会发出一个信号modelChanged(),该信号可以连接到表示数据结构的图形项。
我们提供的所有输入生成器都使用鼠标左键输入点。右键单击将终止一系列输入的点。'Delete和backspace删除最后输入的点Esc'重置输入生成器。由于“Ctrl”键由CGAL::Qt::GraphicsViewNavigation使用,因此不使用此修饰符。
更多推荐
所有评论(0)