opencascade绘制实体消影线
opencascade绘制实体消影线

如图,利用opencascade绘制出给定视角的齿轮的消隐线;
OCC提供了两种算法,来绘制消隐线, 帮助文档介绍如下:
OCC提供了两种算法,来绘制消隐线, 帮助文档介绍如下:

算法建立过程:

给出实现代码:
void getOutLine() { //获取鼠标选中模型的那个对象 TopoDS_Shape detectShape = m_context->DetectedShape(); //进行模型网格离散化 BRepMesh_IncrementalMesh aMesher(detectShape, 0.1); //消隐线算法初始化 Handle_HLRBRep_PolyAlgo aHlrPolyAlgo = new HLRBRep_PolyAlgo(); //定义观察坐标系 gp_Ax2 ax2(gp_Pnt(0, 0, 0), gp_Dir(10, 1, 1), gp_Dir(1, 0, 0)); HLRAlgo_Projector aProjector(ax2); //消隐算法建立 aHlrPolyAlgo->Load(detectShape); aHlrPolyAlgo->Projector(aProjector); aHlrPolyAlgo->Update(); //消隐形状转化 HLRBRep_PolyHLRToShape aHlr2Shape; aHlr2Shape.Update(aHlrPolyAlgo); TopoDS_Shape visual_shape = aHlr2Shape.VCompound(); //遍历拓扑形状进行显示 for (TopExp_Explorer e(visual_shape, TopAbs_EDGE); e.More(); e.Next()) { TopoDS_Edge anEdge = TopoDS::Edge(e.Current()); Handle(AIS_Shape)ais_shape = new AIS_Shape(anEdge); //设置消隐类型 //ais_shape->SetTypeOfHLR(Prs3d_TOH_Algo); //ais_shape->SetTypeOfHLR(Prs3d_TOH_NotSet); ais_shape->SetTypeOfHLR(Prs3d_TOH_PolyAlgo); m_context->Display(ais_shape, Standard_True); m_view->FitAll(); } }