//============================================================================ // Copyright (c) Kitware, Inc. // All rights reserved. // See LICENSE.txt for details. // // This software is distributed WITHOUT ANY WARRANTY; without even // the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR // PURPOSE. See the above copyright notice for more information. //============================================================================ #include #include #include #include #include #include #include namespace vtkm { namespace rendering { VTKM_CONT MapperConnectivity::MapperConnectivity() { CanvasRT = nullptr; SampleDistance = -1; } VTKM_CONT MapperConnectivity::~MapperConnectivity() {} VTKM_CONT void MapperConnectivity::SetSampleDistance(const vtkm::Float32& distance) { SampleDistance = distance; } VTKM_CONT void MapperConnectivity::SetCanvas(Canvas* canvas) { if (canvas != nullptr) { CanvasRT = dynamic_cast(canvas); if (CanvasRT == nullptr) { throw vtkm::cont::ErrorBadValue("Volume Render: bad canvas type. Must be CanvasRayTracer"); } } } vtkm::rendering::Canvas* MapperConnectivity::GetCanvas() const { return CanvasRT; } VTKM_CONT void MapperConnectivity::RenderCellsImpl(const vtkm::cont::UnknownCellSet& cellset, const vtkm::cont::CoordinateSystem& coords, const vtkm::cont::Field& scalarField, const vtkm::cont::ColorTable& vtkmNotUsed(colorTable), const vtkm::rendering::Camera& camera, const vtkm::Range& scalarRange, const vtkm::cont::Field& ghostField) { vtkm::cont::DataSet dataset; dataset.SetCellSet(cellset); dataset.AddCoordinateSystem(coords); dataset.AddField(scalarField); dataset.AddField(ghostField); vtkm::rendering::ConnectivityProxy tracerProxy(dataset, scalarField.GetName()); if (SampleDistance == -1.f) { // set a default distance vtkm::Bounds bounds = coords.GetBounds(); vtkm::Float64 x2 = bounds.X.Length() * bounds.X.Length(); vtkm::Float64 y2 = bounds.Y.Length() * bounds.Y.Length(); vtkm::Float64 z2 = bounds.Z.Length() * bounds.Z.Length(); vtkm::Float64 length = vtkm::Sqrt(x2 + y2 + z2); constexpr vtkm::Float64 defaultSamples = 200.; SampleDistance = static_cast(length / defaultSamples); } tracerProxy.SetScalarRange(scalarRange); tracerProxy.SetSampleDistance(SampleDistance); tracerProxy.SetColorMap(ColorMap); tracerProxy.Trace(camera, CanvasRT); } vtkm::rendering::Mapper* MapperConnectivity::NewCopy() const { return new vtkm::rendering::MapperConnectivity(*this); } } } // namespace vtkm::rendering