【前言】 在CAD软件的开发过程中,3D几何体其实都有一定的方向来确定其结构的差异,一般我们会通过右视图、后视图、顶视图、左视图、正视图、底视图来确定几何体每个方位所在,让绘制的3D集合体在绘图界面中的操作更有方向感。
【指定几何体结构方向的工具-视方体,及QT代码】 为了知道已绘制的几何体的某一个平面或朝向,opencascade图形引擎为我们提供了AIS_ViewCube这一个工具,在开发文档中被称为“视方体”。
视方体,主要的作用就是我们绘图者在旋转几何体时,几何体当前朝我们正面展示的平面结构时,它会通过文本的形式在视方体上显示其视图的朝向,如右视图、后视图、顶视图、左视图、正视图、底视图。
具体的Qt代码实现内容如下:
(1).项目结构,如下图:
(2)相关代码块:
**.**文件occview.h要导入和开启AIS_ViewCube
.文件occview.cpp需要设置AIS_ViewCube,可以改变它的边框大小、颜色,以及相关坐标轴的颜色、坐标轴XYZ字体的颜色。
#include "occview.h" #include "ui_occview.h" #include "Prs3d_DatumAspect.hxx" OccView::OccView(QWidget *parent) : QWidget(parent), ui(new Ui::OccView) { ui->setupUi(this); if(m_context.IsNull()){ Handle(Aspect_DisplayConnection) m_display_connection = new Aspect_DisplayConnection(); if(m_graphic_driver.IsNull()){ m_graphic_driver = new OpenGl_GraphicDriver(m_display_connection); } NSView* aViewHandle = (NSView*)winId(); window = new Cocoa_Window(aViewHandle); // 创建图形系统驱动 m_viewer = new V3d_Viewer(m_graphic_driver); m_view = m_viewer->CreateView(); m_view->SetWindow(window); if(!window->IsMapped()){ window->Map(); } m_context = new AIS_InteractiveContext(m_viewer); m_viewer->SetDefaultLights(); m_viewer->SetLightOn(); m_view->SetBackgroundColor(Quantity_NOC_GRAY60); m_view->MustBeResized(); // 激活格栅 m_viewer->ActivateGrid (Aspect_GT_Rectangular, Aspect_GDM_Lines); // 显示三维坐标系 m_view->TriedronDisplay(Aspect_TOTP_LEFT_LOWER, Quantity_NOC_GOLD,0.08,V3d_ZBUFFER); // 显示视方体 h_AisViewCube = new AIS_ViewCube(); h_AisViewCube->SetSize(20.0,true); //视方体大小 m_context->SetDisplayMode(AIS_Shaded,true); h_AisViewCube->SetBoxColor(Quantity_NOC_WHITE); //设置视方体为白色 // h_AisViewCube->SetBoxSideLabel(V3d_Xpos,"右视图"); // h_AisViewCube->SetBoxSideLabel(V3d_Ypos,"后视图"); // h_AisViewCube->SetBoxSideLabel(V3d_Zpos,"顶视图"); // h_AisViewCube->SetBoxSideLabel(V3d_Zneg,"左视图"); // h_AisViewCube->SetBoxSideLabel(V3d_Zneg,"正视图"); // h_AisViewCube->SetBoxSideLabel(V3d_Zneg,"底视图"); h_AisViewCube->SetTransparency(0.2); //透明度 h_AisViewCube->SetTextColor(Quantity_Color(Quantity_NOC_BLACK)); //设置视方体为黑色 h_AisViewCube->SetFontHeight(10); //字体高度 // h_AisViewCube->SetMaterial(Graphic3d_MaterialAspect(Graphic3d_NOM_GOLD)); //视方体的边界线设置 const Handle(Prs3d_Drawer)& myDrawer = h_AisViewCube->Attributes(); myDrawer->SetupOwnFaceBoundaryAspect(); myDrawer->SetFaceBoundaryDraw(true); myDrawer->FaceBoundaryAspect()->SetColor(Quantity_NameOfColor::Quantity_NOC_GRAY); myDrawer->FaceBoundaryAspect()->SetWidth(1.0); myDrawer->SetDatumAspect (new Prs3d_DatumAspect()); //视方体坐标轴颜色设置 const Handle_Prs3d_DatumAspect& datumAspect = h_AisViewCube->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); //坐标轴文本颜色设置 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); h_AisViewCube->SetTransformPersistence( new Graphic3d_TransformPers( Graphic3d_TMF_TriedronPers, Aspect_TOTP_RIGHT_UPPER, Graphic3d_Vec2i(100,100) ) ); m_context->Display(h_AisViewCube,Standard_True); } setAttribute(Qt::WA_PaintOnScreen); setAttribute(Qt::WA_NoSystemBackground); setBackgroundRole(QPalette::NoRole); setFocusPolicy(Qt::StrongFocus); setMouseTracking(true); } OccView::~OccView() { delete ui; }
【代码需要优化的一些地方】
1.视方体中的文本或文字,没有实现中文国际化,目前这些视图文本名称(如左视图、右视图)需要中文国际化;
2.视方体这个工具,需要在绘图区域重新确定显示位置;
3.视方体的整体大小变化,会在QT窗口变大时自动变小,与刚启动时设定的值其显示有差异。
【结语:】
opencascade的工具-视方体(AIS_ViewCube),可以通过视图方位很明确的指出几何体的朝向。对于绘图者来讲,这个在绘制几何体时能够快速找到要绘制的部位,其结构也很明确。
关于以上内容,很多开源社区也有相关代码实现,希望论坛内感兴趣的开发者能够继续进行优化和改进。
需要优化的地方可以加一条没有js调用接口,不然都不像你的风格
opencascade,有JS版。
Popular Ranking
Popular Events
【前言】
在CAD软件的开发过程中,3D几何体其实都有一定的方向来确定其结构的差异,一般我们会通过右视图、后视图、顶视图、左视图、正视图、底视图来确定几何体每个方位所在,让绘制的3D集合体在绘图界面中的操作更有方向感。
【指定几何体结构方向的工具-视方体,及QT代码】
为了知道已绘制的几何体的某一个平面或朝向,opencascade图形引擎为我们提供了AIS_ViewCube这一个工具,在开发文档中被称为“视方体”。
视方体,主要的作用就是我们绘图者在旋转几何体时,几何体当前朝我们正面展示的平面结构时,它会通过文本的形式在视方体上显示其视图的朝向,如右视图、后视图、顶视图、左视图、正视图、底视图。
具体的Qt代码实现内容如下:
(1).项目结构,如下图:
(2)相关代码块:
**.**文件occview.h要导入和开启AIS_ViewCube
.文件occview.cpp需要设置AIS_ViewCube,可以改变它的边框大小、颜色,以及相关坐标轴的颜色、坐标轴XYZ字体的颜色。
【代码需要优化的一些地方】
1.视方体中的文本或文字,没有实现中文国际化,目前这些视图文本名称(如左视图、右视图)需要中文国际化;
2.视方体这个工具,需要在绘图区域重新确定显示位置;
3.视方体的整体大小变化,会在QT窗口变大时自动变小,与刚启动时设定的值其显示有差异。
【结语:】
opencascade的工具-视方体(AIS_ViewCube),可以通过视图方位很明确的指出几何体的朝向。对于绘图者来讲,这个在绘制几何体时能够快速找到要绘制的部位,其结构也很明确。
关于以上内容,很多开源社区也有相关代码实现,希望论坛内感兴趣的开发者能够继续进行优化和改进。