OpenCasCade中一个V3d_Viewer对应多个AIS_InteractiveContext的使用
一.在OCC的使用中一般是这样的结构:1.OpenGl_GraphicDriver 根据系统不同执行相应的构造函数,创建图形设备对象,具体可查看文档说明。Handle(Aspect_DisplayConnection) aDisplayConnection;Handle(OpenGl_GraphicDriver) myGraphicDriver = new OpenGl_Graphic...
一.在OCC的使用中一般是这样的结构:
1.OpenGl_GraphicDriver 根据系统不同执行相应的构造函数,创建图形设备对象,具体可查看文档说明。
Handle(Aspect_DisplayConnection) aDisplayConnection;
Handle(OpenGl_GraphicDriver) myGraphicDriver = new OpenGl_GraphicDriver (aDisplayConnection);
2.V3d_Viewer 根据第一步的创建的myGraphicDriver创建基于图形对象的绘图器。
TCollection_ExtendedString a3DName("Visu3D");
Handle(V3d_Viewer) myViewer = new V3d_Viewer(myGraphicDriver,a3DName.ToExtString());
3.AIS_InteractiveContext 根据myViewer 创建交互对象管理类实例。
Handle(AIS_InteractiveContext) =new AIS_InteractiveContext(myViewer);
4.V3d_View 根据myViewer 创建具体的窗口绘图视窗。
myView = myViewer->CreateView();
5. WNT_Window创建Windows NT对象,以windows窗口句柄为参数,初始化窗口。
Handle(WNT_Window) aWNTWindow = new WNT_Window(hwnd);
myView->SetWindow(aWNTWindow);
总结:在上述过程中每一步,都是一对一的,也就是如下关系:
OpenGl_GraphicDriver->V3d_Viewer->AIS_InteractiveContext与V3d_View。
二.使用新的对应关系
1.新的对应关系简介
这里所谓新的对应关系区别于上面所说的一对一关系
OpenGl_GraphicDriver->V3d_Viewer->多个AIS_InteractiveContext与V3d_View
这里面变化的其实就一点V3d_Viewer->多个AIS_InteractiveContext,本来一对一的关系,现在变成一个V3d_Viewer对应多个
AIS_InteractiveContext,这样可行么,从Demo测试的结果来看是可行的。
2.优点
如果一个V3d_Viewer对应多个AIS_InteractiveContext,那么就可以做到及时切换AIS_InteractiveContext,这样做有什么好处呢?
(1)假如存在3个AIS_InteractiveContext,如果第一个AIS_InteractiveContext包含多个属性为1的图元,第二个AIS_InteractiveContext包含属性为2的图元,第三个包含属性为3的图元,那么在需要显示属性3的图元时,就可以直接切换至第三个AIS_InteractiveContext为当前交互的对象,其他两个同理也可以切换。
(2)每个加载过数据AIS_InteractiveContext对象都包含了构造过的图元,如果需要隐藏或者重新显示AIS_InteractiveContext内部所包含的所有图元信息,直接使用AIS_InteractiveContext类的隐藏所有(EraseAll)与显示所有(DisplayAll)的方法即可,
m_ContextVector[1].AISContext->DisplayAll(); //显示Vector中第二个AIS_InteractiveContext对象的所有内容
myAISContext=m_ContextVector[1].AISContext; //将Vector中第二个AIS_InteractiveContext对象设置为当前AIS_InteractiveContext对象
m_ContextVector[1].AISContext->UpdateCurrentViewer(); //更新当前查看器(V3d_Viewer对象)
这种做法对于切换AIS_InteractiveContext的显示非常高效,如果已经加载过数据,并且已经装载过各个图元显示对象,那么切换AIS_InteractiveContext就想切换图层一样,瞬时切换,不需要重现建模。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)