diff --git a/CHANGELOG.md b/CHANGELOG.md index 1994dfa19..9d731de17 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ and this project aspires to adhere to [Semantic Versioning](https://semver.org/s - Updated several preferred tpl versions ### Fixed +- Fix parse_camera where order you apply camera operations matters. - Fixed WarpX filter that was not allowing for rendering of the output streamlines - Fixed Uniform Grid bug only accepting 2D slices along the Z-axis. - Resolved a few cases where MPI_COMM_WORLD was used instead instead of the selected MPI communicator. diff --git a/src/libs/ascent/runtimes/flow_filters/ascent_runtime_conduit_to_vtkm_parsing.cpp b/src/libs/ascent/runtimes/flow_filters/ascent_runtime_conduit_to_vtkm_parsing.cpp index f6104abdb..00d6dff81 100644 --- a/src/libs/ascent/runtimes/flow_filters/ascent_runtime_conduit_to_vtkm_parsing.cpp +++ b/src/libs/ascent/runtimes/flow_filters/ascent_runtime_conduit_to_vtkm_parsing.cpp @@ -114,22 +114,41 @@ parse_camera(const conduit::Node camera_node, vtkm::rendering::Camera &camera) view_vals[3]); } - if(camera_node.has_child("look_at")) + if(camera_node.has_child("position")) { conduit::Node n; - camera_node["look_at"].to_float64_array(n); + camera_node["position"].to_float64_array(n); const float64 *coords = n.as_float64_ptr(); - vtkmVec3f look_at(coords[0], coords[1], coords[2]); - camera.SetLookAt(look_at); + vtkmVec3f position(coords[0], coords[1], coords[2]); + camera.SetPosition(position); } - if(camera_node.has_child("position")) + // this is an offset from the current azimuth + if(camera_node.has_child("azimuth")) + { + vtkm::Float64 azimuth = camera_node["azimuth"].to_float64(); + camera.Azimuth(azimuth); + } + + if(camera_node.has_child("elevation")) + { + vtkm::Float64 elevation = camera_node["elevation"].to_float64(); + camera.Elevation(elevation); + } + + if(camera_node.has_child("zoom")) + { + double zoom = camera_node["zoom"].to_float64(); + camera.Zoom(zoom_to_vtkm_zoom(zoom)); + } + + if(camera_node.has_child("look_at")) { conduit::Node n; - camera_node["position"].to_float64_array(n); + camera_node["look_at"].to_float64_array(n); const float64 *coords = n.as_float64_ptr(); - vtkmVec3f position(coords[0], coords[1], coords[2]); - camera.SetPosition(position); + vtkmVec3f look_at(coords[0], coords[1], coords[2]); + camera.SetLookAt(look_at); } if(camera_node.has_child("up")) @@ -155,12 +174,6 @@ parse_camera(const conduit::Node camera_node, vtkm::rendering::Camera &camera) if(camera_node.has_child("ypan")) xpan = camera_node["ypan"].to_float64(); camera.Pan(xpan, ypan); } - - if(camera_node.has_child("zoom")) - { - double zoom = camera_node["zoom"].to_float64(); - camera.Zoom(zoom_to_vtkm_zoom(zoom)); - } // // With a new potential camera position. We need to reset the // clipping plane as not to cut out part of the data set @@ -179,18 +192,6 @@ parse_camera(const conduit::Node camera_node, vtkm::rendering::Camera &camera) clipping_range.Max = camera_node["far_plane"].to_float64(); camera.SetClippingRange(clipping_range); } - - // this is an offset from the current azimuth - if(camera_node.has_child("azimuth")) - { - vtkm::Float64 azimuth = camera_node["azimuth"].to_float64(); - camera.Azimuth(azimuth); - } - if(camera_node.has_child("elevation")) - { - vtkm::Float64 elevation = camera_node["elevation"].to_float64(); - camera.Elevation(elevation); - } } bool is_valid_name(const std::string &name) diff --git a/src/libs/vtkh/rendering/Renderer.cpp b/src/libs/vtkh/rendering/Renderer.cpp index fd70ba04f..bce37f5ad 100644 --- a/src/libs/vtkh/rendering/Renderer.cpp +++ b/src/libs/vtkh/rendering/Renderer.cpp @@ -6,6 +6,8 @@ #include #include +#define _DEBUG 0 + namespace vtkh { Renderer::Renderer() @@ -212,7 +214,16 @@ Renderer::DoExecute() } int total_renders = static_cast(m_renders.size()); - + +#if _DEBUG + std::cerr << "total renders: " << total_renders << std::endl; + vtkm::Bounds g_bounds = m_input->GetGlobalBounds(); + std::cerr << "Global Bounds: " << std::endl; + std::cerr << "X: " << g_bounds.X.Min << " " << g_bounds.X.Max << std::endl; + std::cerr << "Y: " << g_bounds.Y.Min << " " << g_bounds.Y.Max << std::endl; + std::cerr << "Z: " << g_bounds.Z.Min << " " << g_bounds.Z.Max << std::endl; +#endif + int num_domains = static_cast(m_input->GetNumberOfDomains()); for(int dom = 0; dom < num_domains; ++dom) { @@ -228,6 +239,7 @@ Renderer::DoExecute() const vtkm::cont::Field &field = data_set.GetField(m_field_name); const vtkm::cont::CoordinateSystem &coords = data_set.GetCoordinateSystem(); + if(cellset.GetNumberOfCells() == 0) { continue; @@ -248,6 +260,10 @@ Renderer::DoExecute() Render::vtkmCanvas &canvas = m_renders[i].GetCanvas(); const vtkmCamera &camera = m_renders[i].GetCamera(); +#if _DEBUG + std::cerr << "CAMERA BEFORE VTKM RENDERCELLS: " << std::endl; + camera.Print(); +#endif m_mapper->SetCanvas(&canvas); m_mapper->RenderCells(cellset, coords, diff --git a/src/tests/_baseline_images/render_1_000100.png b/src/tests/_baseline_images/render_1_000100.png index 9128f9bdd..f6d239fde 100644 Binary files a/src/tests/_baseline_images/render_1_000100.png and b/src/tests/_baseline_images/render_1_000100.png differ