From 719b715b598ed7c269225eb747e34f57cc2f9381 Mon Sep 17 00:00:00 2001 From: Dave Pugmire Date: Wed, 2 Mar 2016 12:20:09 -0500 Subject: [PATCH] Support for explicit cell sets. --- vtkm/cont/testing/MakeTestDataSet.h | 4 +- vtkm/rendering/Rasterizer.h | 2 +- vtkm/rendering/SceneRendererOSMesa.h | 67 ++++++++++--------- vtkm/rendering/Triangulator.h | 6 +- .../testing/UnitTestSceneRendererOSMesa.cxx | 13 ++-- 5 files changed, 48 insertions(+), 44 deletions(-) diff --git a/vtkm/cont/testing/MakeTestDataSet.h b/vtkm/cont/testing/MakeTestDataSet.h index df41fcab8..484c672e4 100644 --- a/vtkm/cont/testing/MakeTestDataSet.h +++ b/vtkm/cont/testing/MakeTestDataSet.h @@ -422,7 +422,7 @@ MakeTestDataSet::Make3DExplicitDataSet4() CoordType(2, 1, 1), //10 CoordType(2, 1, 0) //11 }; - vtkm::Float64 vars[nVerts] = {10.1f, 20.1f, 30.2f, 40.2f, 50.3f, 60.2f, 70.2f, 80.3f, 90.f, 10.f, 11.f, 12.f}; + vtkm::Float32 vars[nVerts] = {10.1f, 20.1f, 30.2f, 40.2f, 50.3f, 60.2f, 70.2f, 80.3f, 90.f, 10.f, 11.f, 12.f}; dataSet.AddCoordinateSystem( vtkm::cont::CoordinateSystem("coordinates", 1, coordinates, nVerts)); @@ -470,7 +470,7 @@ MakeTestDataSet::Make3DExplicitDataSet3() vtkm::cont::DataSet dataSet; const int nVerts = 4; - typedef vtkm::Vec CoordType; + typedef vtkm::Vec CoordType; CoordType coordinates[nVerts] = { CoordType(0, 0, 0), CoordType(1, 0, 0), diff --git a/vtkm/rendering/Rasterizer.h b/vtkm/rendering/Rasterizer.h index cf4dc4da3..ecb6878ff 100644 --- a/vtkm/rendering/Rasterizer.h +++ b/vtkm/rendering/Rasterizer.h @@ -749,4 +749,4 @@ public: }; }} // namespace vtkm::rendering -#endif //vtk_m_rendering_Rasterizer_h \ No newline at end of file +#endif //vtk_m_rendering_Rasterizer_h diff --git a/vtkm/rendering/SceneRendererOSMesa.h b/vtkm/rendering/SceneRendererOSMesa.h index 788dd7d5c..eeb858706 100644 --- a/vtkm/rendering/SceneRendererOSMesa.h +++ b/vtkm/rendering/SceneRendererOSMesa.h @@ -21,6 +21,8 @@ #define vtk_m_rendering_SceneRendererOSMesa_h #include +#include +#include #include #include #include @@ -50,31 +52,44 @@ public: const vtkm::rendering::ColorTable &colorTable, vtkm::Float64 *scalarBounds) { - vtkm::cont::DynamicArrayHandleCoordinateSystem dcoords = coords.GetData(); - if (!dcoords.IsSameType(vtkm::cont::ArrayHandleUniformPointCoordinates())) - { - std::cout<<"Only uniform coordinates supported..."< > indices; vtkm::Id numTri; Triangulator triangulator; triangulator.run(cellset, indices, numTri); - //std::cout<<"NumTris= "< sf; sf = scalarField.GetData().Cast >(); - //printSummary_ArrayHandle(sf, std::cout); + vtkm::cont::DynamicArrayHandleCoordinateSystem dcoords = coords.GetData(); vtkm::cont::ArrayHandleUniformPointCoordinates uVerts; - uVerts = dcoords.Cast(); - vtkm::rendering::ColorTable ct = colorTable; + vtkm::cont::ArrayHandle< vtkm::Vec > eVerts; + + if(dcoords.IsSameType(vtkm::cont::ArrayHandleUniformPointCoordinates())) + { + uVerts = dcoords.Cast(); + RenderTriangles(numTri, uVerts, indices, sf, colorTable, scalarBounds); + } + else if(dcoords.IsSameType(vtkm::cont::ArrayHandle< vtkm::Vec >())) + { + eVerts = dcoords.Cast > > (); + RenderTriangles(numTri, eVerts, indices, sf, colorTable, scalarBounds); + } + glFinish(); + glFlush(); + } + + template + VTKM_CONT_EXPORT + void RenderTriangles(vtkm::Id numTri, const PtType &verts, + const vtkm::cont::ArrayHandle< vtkm::Vec > &indices, + const vtkm::cont::ArrayHandle &scalar, + const vtkm::rendering::ColorTable &ct, + vtkm::Float64 *scalarBounds) + { vtkm::Float32 sMin = vtkm::Float32(scalarBounds[0]); vtkm::Float32 sMax = vtkm::Float32(scalarBounds[1]); vtkm::Float32 sDiff = sMax-sMin; - + glBegin(GL_TRIANGLES); for (int i = 0; i < numTri; i++) { @@ -84,42 +99,30 @@ public: vtkm::Id i2 = indices.GetPortalConstControl().Get(i)[2]; vtkm::Id i3 = indices.GetPortalConstControl().Get(i)[3]; - vtkm::Vec p1 = uVerts.GetPortalConstControl().Get(i1); - vtkm::Vec p2 = uVerts.GetPortalConstControl().Get(i2); - vtkm::Vec p3 = uVerts.GetPortalConstControl().Get(i3); + vtkm::Vec p1 = verts.GetPortalConstControl().Get(i1); + vtkm::Vec p2 = verts.GetPortalConstControl().Get(i2); + vtkm::Vec p3 = verts.GetPortalConstControl().Get(i3); - vtkm::Float32 s = sf.GetPortalConstControl().Get(si); - vtkm::Float32 sn = (s-sMin)/sDiff; - //Color color = ct.MapRGB(s); - Color color = colorTable.MapRGB(s); - //std::cout< >( MemSet< vtkm::UInt8>( 1 ) ) .Invoke( flags ); - //Unique triangles will have a flag = 1 - std::cout<<"Number of tris "<() .Invoke( vtkm::exec::ExecutionWholeArrayConst< vtkm::Vec >(outputIndices), vtkm::exec::ExecutionWholeArray< vtkm::UInt8 >(flags)); @@ -435,7 +433,7 @@ public: vtkm::cont::DeviceAdapterAlgorithm::StreamCompact(outputIndices, flags, subset); - std::cout<<"Number of tris after"< sceneRenderer; @@ -67,15 +65,20 @@ void TestSceneRendererOSMesa() sceneRenderer.SetActiveColorTable(colorTable); sceneRenderer.SetView(view); - //sceneRenderer.RenderCells(regularGrid.GetCellSet(), coords, scalarField, colorTable); + + vtkm::cont::DataSet expDS = maker.Make3DExplicitDataSet4(); //New way. vtkm::rendering::Scene3D scene; vtkm::rendering::Color bg(0.2f, 0.2f, 0.2f, 1.0f); vtkm::rendering::RenderSurfaceOSMesa surface(512,512,bg); scene.plots.push_back(vtkm::rendering::Plot(regularGrid.GetCellSet(), - coords, - scalarField, + regularGrid.GetCoordinateSystem(), + regularGrid.GetField("pointvar"), + colorTable)); + scene.plots.push_back(vtkm::rendering::Plot(expDS.GetCellSet(), + expDS.GetCoordinateSystem(), + expDS.GetField("pointvar"), colorTable)); vtkm::rendering::Window3D,