在1中我们完成了数据源的创建,现在可以利用DataSource来创建网格对象了。
成员函数 Standard_EXPORT void AddBuilder (const Handle(MeshVS_PrsBuilder )&Builder, const Standard_Boolean TreatAsHilighter=Standard_False)
我们需要为Mesh添加一个MeshVS对象,这个对象可以用来显示或者选择时的绘制方式,当 TreatAsHilighter为true时为选择时的绘制方式。
创建一个各个顶点拥有各自颜色的网格,使用MeshVS_PrsBuilder的子类MeshVS_NodalColorPrsBuilder,
为网格对象添加数据源
m_hMesh->SetDataSource (M);
创建 MeshVS_NodalColorPrsBuilder,注意参数的设置,错误的参数将得不到正确的结果,可以多试几次,
Handle_MeshVS_NodalColorPrsBuilder Prs = new MeshVS_NodalColorPrsBuilder(m_hMesh,MeshVS_DMF_NodalColorDataPrs | MeshVS_DMF_OCCMask);
为每个顶点分配颜色,pntArray与1中的warpage中的原始顶点数据相同:
MeshVS_DataMapOfIntegerColor colormap( pntArray.size() );
for( int i = 1; i<= m_ pntArray .size(); i++ )
{
colormap.Bind(i, coloArrayr[i]);
}
Prs->SetColors(colormap);
为网格添加 MeshVS_NodalColorPrsBuilder,这里我们绘制和选择使用同一个 MeshVS_NodalColorPrsBuilder对象:
m_hMesh->AddBuilder(Prs,Standard_True);
设置其他的属性:
Handle_MeshVS_Drawer meshDrawer = m_hMesh->GetDrawer();
不显示边
meshDrawer->SetBoolean(MeshVS_DA_ShowEdges, Standard_False);
设置拣选方式,注意参数的设置
m_hMesh->SetMeshSelMethod(MeshVS_MSM_PRECISE );
设置绘制模式
m_hMesh->SetDisplayMode( MeshVS_DMF_Shading );
最后就可以在context中display了。
一些模式的参数需要仔细选择,文档中的就少较少,可以看看源码各个参数表示的含义。