Merge topic 'rt_use_shared'
8a38717c3 have make_shared call default constructor 3fae21fa7 no pointers 4cd4637c1 ray tracing now using shared pointers for intersectors Acked-by: Kitware Robot <kwrobot@kitware.com> Merge-request: !1556
This commit is contained in:
commit
076a7311ca
@ -50,21 +50,17 @@ namespace benchmarking
|
||||
template <typename Precision>
|
||||
struct BenchRayTracing
|
||||
{
|
||||
vtkm::rendering::raytracing::RayTracer Tracer;
|
||||
vtkm::rendering::raytracing::Camera RayCamera;
|
||||
vtkm::cont::ArrayHandle<vtkm::Vec<vtkm::Id, 4>> Indices;
|
||||
vtkm::rendering::raytracing::Ray<Precision> Rays;
|
||||
vtkm::cont::CoordinateSystem Coords;
|
||||
vtkm::cont::DataSet Data;
|
||||
|
||||
VTKM_CONT ~BenchRayTracing() {}
|
||||
|
||||
VTKM_CONT BenchRayTracing() {}
|
||||
|
||||
VTKM_CONT
|
||||
vtkm::Float64 operator()()
|
||||
VTKM_CONT BenchRayTracing()
|
||||
{
|
||||
vtkm::rendering::raytracing::RayTracer Tracer;
|
||||
vtkm::rendering::raytracing::Camera RayCamera;
|
||||
vtkm::cont::ArrayHandle<vtkm::Vec<vtkm::Id, 4>> Indices;
|
||||
vtkm::rendering::raytracing::Ray<Precision> Rays;
|
||||
vtkm::cont::CoordinateSystem Coords;
|
||||
vtkm::cont::DataSet Data;
|
||||
|
||||
vtkm::Id3 dims(128, 128, 128);
|
||||
vtkm::cont::testing::MakeTestDataSet maker;
|
||||
Data = maker.Make3DUniformDataSet3(dims);
|
||||
@ -79,8 +75,8 @@ struct BenchRayTracing
|
||||
vtkm::rendering::raytracing::TriangleExtractor triExtractor;
|
||||
triExtractor.ExtractCells(cellset);
|
||||
|
||||
vtkm::rendering::raytracing::TriangleIntersector* triIntersector =
|
||||
new vtkm::rendering::raytracing::TriangleIntersector();
|
||||
auto triIntersector = std::make_shared<vtkm::rendering::raytracing::TriangleIntersector>(
|
||||
vtkm::rendering::raytracing::TriangleIntersector());
|
||||
|
||||
triIntersector->SetData(Coords, triExtractor.GetTriangles());
|
||||
Tracer.AddShapeIntersector(triIntersector);
|
||||
@ -117,6 +113,12 @@ struct BenchRayTracing
|
||||
|
||||
Tracer.SetColorMap(colors);
|
||||
Tracer.Render(Rays);
|
||||
}
|
||||
|
||||
VTKM_CONT
|
||||
vtkm::Float64 operator()()
|
||||
{
|
||||
|
||||
|
||||
vtkm::cont::Timer timer;
|
||||
timer.Start();
|
||||
@ -125,7 +127,6 @@ struct BenchRayTracing
|
||||
try
|
||||
{
|
||||
Tracer.Render(Rays);
|
||||
Tracer.Render(Rays);
|
||||
}
|
||||
catch (vtkm::cont::ErrorBadValue& e)
|
||||
{
|
||||
|
@ -184,7 +184,7 @@ void MapperCylinder::RenderCells(const vtkm::cont::DynamicCellSet& cellset,
|
||||
|
||||
if (cylExtractor.GetNumberOfCylinders() > 0)
|
||||
{
|
||||
raytracing::CylinderIntersector* cylIntersector = new raytracing::CylinderIntersector();
|
||||
auto cylIntersector = std::make_shared<raytracing::CylinderIntersector>();
|
||||
cylIntersector->SetData(coords, cylExtractor.GetCylIds(), cylExtractor.GetRadii());
|
||||
this->Internals->Tracer.AddShapeIntersector(cylIntersector);
|
||||
shapeBounds.Include(cylIntersector->GetShapeBounds());
|
||||
|
@ -182,7 +182,7 @@ void MapperPoint::RenderCells(const vtkm::cont::DynamicCellSet& cellset,
|
||||
|
||||
if (sphereExtractor.GetNumberOfSpheres() > 0)
|
||||
{
|
||||
raytracing::SphereIntersector* sphereIntersector = new raytracing::SphereIntersector();
|
||||
auto sphereIntersector = std::make_shared<raytracing::SphereIntersector>();
|
||||
sphereIntersector->SetData(coords, sphereExtractor.GetPointIds(), sphereExtractor.GetRadii());
|
||||
this->Internals->Tracer.AddShapeIntersector(sphereIntersector);
|
||||
shapeBounds.Include(sphereIntersector->GetShapeBounds());
|
||||
|
@ -104,7 +104,7 @@ void MapperQuad::RenderCells(const vtkm::cont::DynamicCellSet& cellset,
|
||||
quadExtractor.ExtractCells(cellset);
|
||||
if (quadExtractor.GetNumberOfQuads() > 0)
|
||||
{
|
||||
raytracing::QuadIntersector* quadIntersector = new raytracing::QuadIntersector();
|
||||
auto quadIntersector = std::make_shared<raytracing::QuadIntersector>();
|
||||
quadIntersector->SetData(coords, quadExtractor.GetQuadIds());
|
||||
this->Internals->Tracer.AddShapeIntersector(quadIntersector);
|
||||
shapeBounds.Include(quadIntersector->GetShapeBounds());
|
||||
|
@ -108,7 +108,7 @@ void MapperRayTracer::RenderCells(const vtkm::cont::DynamicCellSet& cellset,
|
||||
triExtractor.ExtractCells(cellset);
|
||||
if (triExtractor.GetNumberOfTriangles() > 0)
|
||||
{
|
||||
raytracing::TriangleIntersector* triIntersector = new raytracing::TriangleIntersector();
|
||||
auto triIntersector = std::make_shared<raytracing::TriangleIntersector>();
|
||||
triIntersector->SetData(coords, triExtractor.GetTriangles());
|
||||
this->Internals->Tracer.AddShapeIntersector(triIntersector);
|
||||
shapeBounds.Include(triIntersector->GetShapeBounds());
|
||||
|
@ -469,15 +469,15 @@ void CylinderIntersector::IntersectRaysImp(Ray<Precision>& rays, bool vtkmNotUse
|
||||
|
||||
template <typename Precision>
|
||||
void CylinderIntersector::IntersectionDataImp(Ray<Precision>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange)
|
||||
{
|
||||
ShapeIntersector::IntersectionPoint(rays);
|
||||
|
||||
// TODO: if this is nodes of a mesh, support points
|
||||
bool isSupportedField =
|
||||
(scalarField->GetAssociation() == vtkm::cont::Field::Association::POINTS ||
|
||||
scalarField->GetAssociation() == vtkm::cont::Field::Association::CELL_SET);
|
||||
(scalarField.GetAssociation() == vtkm::cont::Field::Association::POINTS ||
|
||||
scalarField.GetAssociation() == vtkm::cont::Field::Association::CELL_SET);
|
||||
if (!isSupportedField)
|
||||
throw vtkm::cont::ErrorBadValue("Field not accociated with a cell set");
|
||||
|
||||
@ -493,18 +493,18 @@ void CylinderIntersector::IntersectionDataImp(Ray<Precision>& rays,
|
||||
vtkm::worklet::DispatcherMapField<detail::GetScalar<Precision>>(
|
||||
detail::GetScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max)))
|
||||
.Invoke(
|
||||
rays.HitIdx, rays.Scalar, scalarField->GetData().ResetTypes(ScalarRenderingTypes()), CylIds);
|
||||
rays.HitIdx, rays.Scalar, scalarField.GetData().ResetTypes(ScalarRenderingTypes()), CylIds);
|
||||
}
|
||||
|
||||
void CylinderIntersector::IntersectionData(Ray<vtkm::Float32>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange)
|
||||
{
|
||||
IntersectionDataImp(rays, scalarField, scalarRange);
|
||||
}
|
||||
|
||||
void CylinderIntersector::IntersectionData(Ray<vtkm::Float64>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange)
|
||||
{
|
||||
IntersectionDataImp(rays, scalarField, scalarRange);
|
||||
|
@ -58,15 +58,15 @@ public:
|
||||
|
||||
template <typename Precision>
|
||||
void IntersectionDataImp(Ray<Precision>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange);
|
||||
|
||||
void IntersectionData(Ray<vtkm::Float32>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange) override;
|
||||
|
||||
void IntersectionData(Ray<vtkm::Float64>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange) override;
|
||||
|
||||
vtkm::Id GetNumberOfShapes() const override;
|
||||
|
@ -437,15 +437,15 @@ void QuadIntersector::IntersectRaysImp(Ray<Precision>& rays, bool vtkmNotUsed(re
|
||||
|
||||
template <typename Precision>
|
||||
void QuadIntersector::IntersectionDataImp(Ray<Precision>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange)
|
||||
{
|
||||
ShapeIntersector::IntersectionPoint(rays);
|
||||
|
||||
// TODO: if this is nodes of a mesh, support points
|
||||
bool isSupportedField =
|
||||
(scalarField->GetAssociation() == vtkm::cont::Field::Association::POINTS ||
|
||||
scalarField->GetAssociation() == vtkm::cont::Field::Association::CELL_SET);
|
||||
(scalarField.GetAssociation() == vtkm::cont::Field::Association::POINTS ||
|
||||
scalarField.GetAssociation() == vtkm::cont::Field::Association::CELL_SET);
|
||||
if (!isSupportedField)
|
||||
throw vtkm::cont::ErrorBadValue("Field not accociated with a cell set");
|
||||
|
||||
@ -456,19 +456,19 @@ void QuadIntersector::IntersectionDataImp(Ray<Precision>& rays,
|
||||
detail::GetScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max)))
|
||||
.Invoke(rays.HitIdx,
|
||||
rays.Scalar,
|
||||
scalarField->GetData().ResetTypes(vtkm::TypeListTagFieldScalar()),
|
||||
scalarField.GetData().ResetTypes(vtkm::TypeListTagFieldScalar()),
|
||||
QuadIds);
|
||||
}
|
||||
|
||||
void QuadIntersector::IntersectionData(Ray<vtkm::Float32>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange)
|
||||
{
|
||||
IntersectionDataImp(rays, scalarField, scalarRange);
|
||||
}
|
||||
|
||||
void QuadIntersector::IntersectionData(Ray<vtkm::Float64>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange)
|
||||
{
|
||||
IntersectionDataImp(rays, scalarField, scalarRange);
|
||||
|
@ -56,15 +56,15 @@ public:
|
||||
|
||||
template <typename Precision>
|
||||
void IntersectionDataImp(Ray<Precision>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange);
|
||||
|
||||
void IntersectionData(Ray<vtkm::Float32>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange) override;
|
||||
|
||||
void IntersectionData(Ray<vtkm::Float64>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange) override;
|
||||
|
||||
vtkm::Id GetNumberOfShapes() const override;
|
||||
|
@ -230,7 +230,7 @@ Camera& RayTracer::GetCamera()
|
||||
}
|
||||
|
||||
|
||||
void RayTracer::AddShapeIntersector(ShapeIntersector* intersector)
|
||||
void RayTracer::AddShapeIntersector(std::shared_ptr<ShapeIntersector> intersector)
|
||||
{
|
||||
NumberOfShapes += intersector->GetNumberOfShapes();
|
||||
Intersectors.push_back(intersector);
|
||||
@ -238,7 +238,7 @@ void RayTracer::AddShapeIntersector(ShapeIntersector* intersector)
|
||||
|
||||
void RayTracer::SetField(const vtkm::cont::Field& scalarField, const vtkm::Range& scalarRange)
|
||||
{
|
||||
ScalarField = &scalarField;
|
||||
ScalarField = scalarField;
|
||||
ScalarRange = scalarRange;
|
||||
}
|
||||
|
||||
@ -269,12 +269,6 @@ vtkm::Id RayTracer::GetNumberOfShapes() const
|
||||
|
||||
void RayTracer::Clear()
|
||||
{
|
||||
size_t numShapes = Intersectors.size();
|
||||
for (size_t i = 0; i < numShapes; ++i)
|
||||
{
|
||||
delete Intersectors[i];
|
||||
}
|
||||
|
||||
Intersectors.clear();
|
||||
}
|
||||
|
||||
|
@ -20,6 +20,7 @@
|
||||
#ifndef vtk_m_rendering_raytracing_RayTracer_h
|
||||
#define vtk_m_rendering_raytracing_RayTracer_h
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
#include <vtkm/cont/DataSet.h>
|
||||
@ -36,9 +37,9 @@ namespace raytracing
|
||||
class VTKM_RENDERING_EXPORT RayTracer
|
||||
{
|
||||
protected:
|
||||
std::vector<ShapeIntersector*> Intersectors;
|
||||
std::vector<std::shared_ptr<ShapeIntersector>> Intersectors;
|
||||
Camera camera;
|
||||
const vtkm::cont::Field* ScalarField;
|
||||
vtkm::cont::Field ScalarField;
|
||||
vtkm::cont::ArrayHandle<vtkm::Float32> Scalars;
|
||||
vtkm::Id NumberOfShapes;
|
||||
vtkm::cont::ArrayHandle<vtkm::Vec<vtkm::Float32, 4>> ColorMap;
|
||||
@ -58,7 +59,7 @@ public:
|
||||
Camera& GetCamera();
|
||||
|
||||
VTKM_CONT
|
||||
void AddShapeIntersector(ShapeIntersector* intersector);
|
||||
void AddShapeIntersector(std::shared_ptr<ShapeIntersector> intersector);
|
||||
|
||||
VTKM_CONT
|
||||
void SetField(const vtkm::cont::Field& scalarField, const vtkm::Range& scalarRange);
|
||||
|
@ -63,11 +63,11 @@ public:
|
||||
// becomes the new max distance.
|
||||
//
|
||||
virtual void IntersectionData(Ray<vtkm::Float32>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange) = 0;
|
||||
|
||||
virtual void IntersectionData(Ray<vtkm::Float64>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange) = 0;
|
||||
|
||||
|
||||
|
@ -345,14 +345,14 @@ void SphereIntersector::IntersectRaysImp(Ray<Precision>& rays, bool vtkmNotUsed(
|
||||
|
||||
template <typename Precision>
|
||||
void SphereIntersector::IntersectionDataImp(Ray<Precision>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange)
|
||||
{
|
||||
ShapeIntersector::IntersectionPoint(rays);
|
||||
|
||||
bool isSupportedField =
|
||||
(scalarField->GetAssociation() == vtkm::cont::Field::Association::POINTS ||
|
||||
scalarField->GetAssociation() == vtkm::cont::Field::Association::CELL_SET);
|
||||
(scalarField.GetAssociation() == vtkm::cont::Field::Association::POINTS ||
|
||||
scalarField.GetAssociation() == vtkm::cont::Field::Association::CELL_SET);
|
||||
if (!isSupportedField)
|
||||
throw vtkm::cont::ErrorBadValue(
|
||||
"SphereIntersector: Field not accociated with a cell set or field");
|
||||
@ -370,19 +370,19 @@ void SphereIntersector::IntersectionDataImp(Ray<Precision>& rays,
|
||||
detail::GetScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max)))
|
||||
.Invoke(rays.HitIdx,
|
||||
rays.Scalar,
|
||||
scalarField->GetData().ResetTypes(vtkm::TypeListTagFieldScalar()),
|
||||
scalarField.GetData().ResetTypes(vtkm::TypeListTagFieldScalar()),
|
||||
PointIds);
|
||||
}
|
||||
|
||||
void SphereIntersector::IntersectionData(Ray<vtkm::Float32>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange)
|
||||
{
|
||||
IntersectionDataImp(rays, scalarField, scalarRange);
|
||||
}
|
||||
|
||||
void SphereIntersector::IntersectionData(Ray<vtkm::Float64>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange)
|
||||
{
|
||||
IntersectionDataImp(rays, scalarField, scalarRange);
|
||||
|
@ -54,15 +54,15 @@ public:
|
||||
|
||||
template <typename Precision>
|
||||
void IntersectionDataImp(Ray<Precision>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange);
|
||||
|
||||
void IntersectionData(Ray<vtkm::Float32>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange) override;
|
||||
|
||||
void IntersectionData(Ray<vtkm::Float64>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange) override;
|
||||
|
||||
vtkm::Id GetNumberOfShapes() const override;
|
||||
|
@ -340,15 +340,15 @@ public:
|
||||
VTKM_CONT void Run(Ray<Precision>& rays,
|
||||
vtkm::cont::ArrayHandle<vtkm::Vec<vtkm::Id, 4>> triangles,
|
||||
vtkm::cont::CoordinateSystem coordsHandle,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange)
|
||||
{
|
||||
bool isSupportedField =
|
||||
(scalarField->GetAssociation() == vtkm::cont::Field::Association::POINTS ||
|
||||
scalarField->GetAssociation() == vtkm::cont::Field::Association::CELL_SET);
|
||||
(scalarField.GetAssociation() == vtkm::cont::Field::Association::POINTS ||
|
||||
scalarField.GetAssociation() == vtkm::cont::Field::Association::CELL_SET);
|
||||
if (!isSupportedField)
|
||||
throw vtkm::cont::ErrorBadValue("Field not accociated with cell set or points");
|
||||
bool isAssocPoints = scalarField->GetAssociation() == vtkm::cont::Field::Association::POINTS;
|
||||
bool isAssocPoints = scalarField.GetAssociation() == vtkm::cont::Field::Association::POINTS;
|
||||
|
||||
// Find the triangle normal
|
||||
vtkm::worklet::DispatcherMapField<CalculateNormals>(CalculateNormals())
|
||||
@ -364,7 +364,7 @@ public:
|
||||
rays.U,
|
||||
rays.V,
|
||||
rays.Scalar,
|
||||
scalarField->GetData().ResetTypes(ScalarRenderingTypes()),
|
||||
scalarField.GetData().ResetTypes(ScalarRenderingTypes()),
|
||||
triangles);
|
||||
}
|
||||
else
|
||||
@ -373,7 +373,7 @@ public:
|
||||
NodalScalar<Precision>(vtkm::Float32(scalarRange.Min), vtkm::Float32(scalarRange.Max)))
|
||||
.Invoke(rays.HitIdx,
|
||||
rays.Scalar,
|
||||
scalarField->GetData().ResetTypes(ScalarRenderingTypes()),
|
||||
scalarField.GetData().ResetTypes(ScalarRenderingTypes()),
|
||||
triangles);
|
||||
}
|
||||
} // Run
|
||||
@ -525,14 +525,14 @@ VTKM_CONT void TriangleIntersector::IntersectRaysImp(Ray<Precision>& rays, bool
|
||||
}
|
||||
|
||||
VTKM_CONT void TriangleIntersector::IntersectionData(Ray<vtkm::Float32>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange)
|
||||
{
|
||||
IntersectionDataImp(rays, scalarField, scalarRange);
|
||||
}
|
||||
|
||||
VTKM_CONT void TriangleIntersector::IntersectionData(Ray<vtkm::Float64>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange)
|
||||
{
|
||||
IntersectionDataImp(rays, scalarField, scalarRange);
|
||||
@ -540,7 +540,7 @@ VTKM_CONT void TriangleIntersector::IntersectionData(Ray<vtkm::Float64>& rays,
|
||||
|
||||
template <typename Precision>
|
||||
VTKM_CONT void TriangleIntersector::IntersectionDataImp(Ray<Precision>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange)
|
||||
{
|
||||
ShapeIntersector::IntersectionPoint(rays);
|
||||
|
@ -55,11 +55,11 @@ public:
|
||||
|
||||
|
||||
VTKM_CONT void IntersectionData(Ray<vtkm::Float32>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange) override;
|
||||
|
||||
VTKM_CONT void IntersectionData(Ray<vtkm::Float64>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange) override;
|
||||
|
||||
template <typename Precision>
|
||||
@ -67,7 +67,7 @@ public:
|
||||
|
||||
template <typename Precision>
|
||||
VTKM_CONT void IntersectionDataImp(Ray<Precision>& rays,
|
||||
const vtkm::cont::Field* scalarField,
|
||||
const vtkm::cont::Field scalarField,
|
||||
const vtkm::Range& scalarRange);
|
||||
|
||||
}; // class intersector
|
||||
|
Loading…
Reference in New Issue
Block a user