【转】ogitor小结 - 数据牛仔 - 博客园

来源:互联网 发布:宝马氧传感器数据 编辑:程序博客网 时间:2024/04/28 11:10

 

ogitor小结

      由于没有帮助文档,自己只能照着代码看qtogitor的编写流程和框架,这里抽空总结一下:

      1)先谈谈dragdrop问题。在qtogitor当中,主要相应dragdrop是在ogrewidget类中,也就是我们的渲染窗口了。里面有相应drag和drop的四个函数,而他的drag和drop调用的是ogitorsroot里面的dragdrop,由于在注册ogitorsroot的时候我们注册了dragdropHandlermap(PS:ogtior用了很多相关容器)的找到对应的evt->source()对应的widget,然后调用对应的widget的处理dragdrop的函数,当然在这其中还包括了根据屏幕位置找到物体三维位置(当然这时一entity为搜索路线)等等。下面以qtogitor如何创建实体为例(由于用SVN导致工作目录路径的更好,导致一些source不能调试,耽误了很多时间,以后再也不能犯这种错误了):

          MainWindow::addDockWidgets    ----含有---mEntityViewWidget = new EntityViewWidget(parent);【listWidget = new QListWidget(this);OgitorsRoot::getSingletonPtr()->RegisterDragDropHandler((void*)listWidget, this);】先讲解一下,这个是加入MESH文件的widget,listwidget主要是指那些图片所对应的list,然后我们注册了listWidget所对应的dragdrop,至于这个组建的初始化有在 MainWindow::openSceneOptions中调用prepareview()准备。这里主要完成注册功能。

         现在来追逐Entity的生成:(以dragEnterEvent为例)

         OgreWidget::dragEnterEvent---含有----OgitorsRoot::getSingletonPtr()->OnDragEnter(source)---含有---if(it->first == source)找到我们注册的组件,由于这些组件的父类都是EntityViewWidget,所以我们调用的是EntityViewWidget::OnDragEnter()----含有------mDragData.Object = factory->CreateObject(&parent, mDragData.Parameters);找到我们需要创建的实体编辑的factory,用factory创建CEntityEditor,也就是编辑对象,这里面也包含我们右边属性栏显示的那些参数,这还不够,我们要创建ogreEntity,这个主要是调用CEntityEditor的load()函数来实现;来看看 CEntityEditor::load(),他首先调用了CNodeEditor::load()创建来创建场景节点Node,然后回到CEntityEditor::load()创建我们的ogre实体对象,并且加入到Node当中。

         相信你看了头大,这是CHINAGRAPH回来之后每天泡实验室才走清楚的路线,只有知道了在哪创建实体,我才能随意添加一些功能把我的系统集成进去,现在这个目标终于实现了。至于dragdrop的其他几个函数主要有映射二维屏幕坐标到三维屏幕坐标,查找最合适优先级最高的viewport窗口等等。我想,知道了Editor的用途举一反三,其他的也就差不多游刃有余了。

      PS1:特地给ogitor小组发了一个建议,回的很效率,期待以后的版本出来教程或参考文献。

      PS2:今天下午做组成原理实验好郁闷,由于学生都是教师用书,然后布线他们都不动脑筋,我这个助教表示鸭梨好大,而且自己也不知道怎么在机器指令运行过程中测寄存器堆的数据,明天上午再去跟着指令微码测试一下数据总线,但愿成功。

ogitor小结 - 数据牛仔 - 博客园

原创粉丝点击