Open CASCADE学习|视方体设置与显示

本文详细介绍了视图立方体在三维图形软件中的核心功能,如多视图切换、视图定位和视角调整。以OpenCASCADE为例,讲解了如何设置、显示和定制视图立方体,以及在实际项目中的应用实例。
摘要由CSDN通过智能技术生成

目录

1、视图立方体的核心功能

2、设置视图立方体

3、显示视图立方体

4、案例


视图立方体是一个在三维图形界面或建模软件中常见的功能组件,用于帮助用户快速切换和定位不同的视图方向。它通常位于屏幕的某个角落,由一系列图标或按钮组成,允许用户直观地选择和调整当前的视图角度。

1、视图立方体的核心功能

多视图切换:视图立方体通常包含代表不同视图方向的图标或面,如正面、侧面、顶面等。用户可以通过点击这些图标或面来快速切换视图,以便从不同角度观察三维模型或场景。

视图定位:视图立方体还可以显示当前视图的定位方向,让用户清楚地知道他们正在查看的是模型的哪一部分。

视角调整:除了基本的视图切换,视图立方体还可能提供视角微调的功能,允许用户通过拖动或旋转视图立方体来调整视图的角度或倾斜度。

在Open CASCADE这样的三维造型库中,视图立方体可能是其可视化界面的一部分。通过合理配置和使用视图立方体,用户可以更加高效地进行三维建模、编辑和查看工作。

视图立方体的使用通常很简单直观。用户只需将鼠标指针悬停在视图立方体上,然后点击或拖动相应的图标或面即可实现视图的切换和调整。此外,视图立方体可能还包含一些额外的按钮或选项,用于进一步定制视图的显示方式或属性。

在Open CASCADE中,视图立方体的设置与显示通常涉及对视图和渲染参数的精确配置。视图立方体作为一种用户界面元素,允许用户直观地在不同的视图方向之间切换,以便更好地观察和理解三维模型。

2、设置视图立方体

定义视图方向:首先,您需要确定视图立方体应包含哪些视图方向。这通常包括正面、背面、侧面、顶面等标准视图,但也可能包括自定义的视图方向。

配置视图参数:对于每个视图方向,您可能需要设置相应的相机位置、朝向和视野角度等参数。这些参数将决定每个视图的具体显示效果。

集成视图立方体:将配置好的视图立方体集成到Open CASCADE的用户界面中。这通常涉及编写代码来创建视图立方体的UI元素,并将其与相应的视图切换逻辑关联起来。

3、显示视图立方体

渲染视图:当用户点击视图立方体上的某个视图方向时,Open CASCADE会根据预先设置的参数来渲染该视图。这包括计算相机的变换矩阵、应用透视投影等步骤。

更新用户界面:渲染完成后,Open CASCADE会更新用户界面,以显示新的视图。这可能涉及绘制三维模型的投影图像、更新视图边界和其他UI元素等。

交互反馈:为了确保良好的用户体验,视图立方体还应提供交互反馈。例如,当用户将鼠标悬停在某个视图方向上时,可以显示提示信息或改变视图图标的外观。

4、案例

Displaywin::Displaywin(QWidget* parent)
    : QWidget(parent)
{
    resize(parent->width(), parent->height());
    //提供X server的连接,在window和Mac中不起作用
    Handle(Aspect_DisplayConnection) hAspect_DisplayConnect = new Aspect_DisplayConnection;
    //创建3D接口定义图形驱动
    Handle(OpenGl_GraphicDriver) driver = new OpenGl_GraphicDriver(hAspect_DisplayConnect);
    //该类的方法允许编辑、询问连接该类的其他参数(如视图、光)
    viewer = new V3d_Viewer(driver);
    viewer->SetDefaultLights();
    viewer->SetLightOn();
    view = viewer->CreateView();
    view->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_WHITE, 0.1, V3d_ZBUFFER);//这是显示小坐标系的代码
    WId win_handle = winId();
    //在已有的窗口上创建窗口
    Handle(WNT_Window) window = new WNT_Window((Aspect_Handle)win_handle);
    view->SetWindow(window);
    if (!window->IsMapped())
    {
        window->Map();//打开窗口
    }
    view->SetBackgroundColor(Quantity_NOC_GRAY60);
  
    view->MustBeResized();
    setAttribute(Qt::WA_PaintOnScreen);
    setAttribute(Qt::WA_NoSystemBackground);
    setBackgroundRole(QPalette::NoRole);
    setFocusPolicy(Qt::StrongFocus);
    //交互式上下文
    context = new AIS_InteractiveContext(viewer);
    context->SetDisplayMode(AIS_Shaded, Standard_True);
    
​
    //creat viewbox
    //myView->TriedronErase(); 隐藏坐标系
    Handle(AIS_ViewCube) viewCube = new AIS_ViewCube();
    context->Display(viewCube, Standard_True);
    viewCube->SetBoxColor(Quantity_NOC_WHITE); //设置视方体为白色
    viewCube->SetTransparency(0.5);   //设置透明度
    //设置视方体每个面的字体为黑色
    viewCube->SetTextColor(Quantity_Color(Quantity_NOC_BLACK));
    viewCube->SetFontHeight(18); //设置视方体每个面字体的高度
​
    //设置视方体每个面的边界线
    //首先创建一个Prs3d_Drawer 对象,一切属性的修改在myDraw 下进行
    const Handle(Prs3d_Drawer)& myDrawer = viewCube->Attributes();
    myDrawer->SetupOwnFaceBoundaryAspect(); //设置的预前工作(十分重要)
    myDrawer->SetFaceBoundaryDraw(true);
    //设置边界线的颜色为蓝色
    myDrawer->FaceBoundaryAspect()->SetColor(Quantity_NameOfColor::Quantity_NOC_LIGHTSKYBLUE);
    myDrawer->FaceBoundaryAspect()->SetWidth(2.0);//设置边界线的宽度
    //H_AisViewCube->SetMaterial(Graphic3d_MaterialAspect(Graphic3d_NOM_DEFAULT));//设置材质
​
    //设置视方体基准线
    myDrawer->SetDatumAspect(new Prs3d_DatumAspect()); //设置的预前工作(十分重要)
    const Handle_Prs3d_DatumAspect& datumAspect = viewCube->Attributes()->DatumAspect();
    //设置轴颜色
    datumAspect->ShadingAspect(Prs3d_DP_XAxis)->SetColor(Quantity_NOC_RED);
    datumAspect->ShadingAspect(Prs3d_DP_YAxis)->SetColor(Quantity_NOC_GREEN);
    datumAspect->ShadingAspect(Prs3d_DP_ZAxis)->SetColor(Quantity_NOC_BLUE);
    //设置X,Y,Z文本颜色
    datumAspect->TextAspect(Prs3d_DP_XAxis)->SetColor(Quantity_NOC_RED);
    datumAspect->TextAspect(Prs3d_DP_YAxis)->SetColor(Quantity_NOC_GREEN);
    datumAspect->TextAspect(Prs3d_DP_ZAxis)->SetColor(Quantity_NOC_BLUE);
​
    viewCube->SetTransformPersistence(
        new Graphic3d_TransformPers(
            Graphic3d_TMF_TriedronPers,
            Aspect_TOTP_RIGHT_UPPER/*设置在右上角*/,
            Graphic3d_Vec2i(100, 100)));
    //display model
    //TopoDS_Shape boxShape = occ.MakeBottle(50, 70, 30);
    
    view->FitAll();
}
​

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值