Skip to content
  • David Thompson's avatar
    Significant vtkCellGrid changes. · 072b8fee
    David Thompson authored
    + Add a copy query and `vtkCellGrid::CopyStructure`; the virtual
      ShallowCopy and DeepCopy methods `vtkCellGrid` inherits now use it.
      But it is more flexible, allowing partial copies (such as a
      geometry-only copy) for filters that need it.
    + Refactor `vtkCellAttribute` so that DOF-sharing, function space,
      basis, and order may vary on a per-cell-type basis within the
      same `vtkCellGrid`. This adds `vtkCellAttribute::CellTypeInfo`
      that can be fetched from an attribute given a cell type.
    + Reorganize the basis functions and basis-gradient functions
      so the same code that performs numerical evaluation of each
      operator is available both on the CPU (via the C++
      `vtkDGOperatorEntry`) and the GPU (via the `vtkDGRenderResponder`).
    + Improve cell-grid external-surface computation.
      + Add an option to omit computation of sides for renderable cells.
        Without this option, a quadrilateral cell would have its edges
        output (either with the original cell if PreserveRenderableCells
        is true; or without the cell). This is not how ParaView's
        representations behave.
      + Add a new member to `vtkDGCell::Source` to hold a per-node array
        of "ghost" flags. This allows distributed-memory meshes to have
        properly-computed external surfaces (without internal faces rendered
        at process boundaries).
      + Add a new member to `vtkDGCell::Source` specifying whether the
        original cells or the sides should be extracted when processing
        a vtkSelectionNode that lists cell IDs.
    + Add a method to the base vtkDGCell to fetch sides of a side.
      All of the subclassed shapes implement this method and there is
      a test to validate (and compute for new shape subclasses) the
      lookup tables used by each shape.
      This is used to enhance the vtkDGSidesResponder so it can
      compute sides of sides in order to display "surface with edges"-style
      meshes, nodes/edges of boundary-condition side-sets, etc.
    + Simplify all cell-grid `normalToSideAt()` functions.
      This is used way to prevent shading of edges and vertices;
      the fragment shader can ignore the provided normal when rendering edges
      and vertices. And having a normal to a side (even when not uniquely
      defined) might be useful to shaders at some other point.
    + Add new DG test data.
      This includes
      + `dgEdges.dg` – a poly-line
      + `dgGhostHexahedra.dg` – the same as `dgHexahedra.dg` but with
        a ghost-node array that affects how the external surface is
        computed.
      + `dgMixed.dg` – contains cells of multiple types in the same
        cell-grid object.
      + `dgQuadraticQuadrilaterals.dg` – quadrilaterals with a quadratic
        shape function for testing tessellation control shaders.
    + vtkDGCell responders now use the new integer-tuple API for fetching
      connectivity data (so that arrays may be `vtkIntArray`,
      `vtkTypeInt32Array`, `vtkTypeInt64Array`, `vtkIdTypeArray`, or
      any other integer-valued array). This greatly simplifies
      logic for processing cells.
    + `vtkCellGridComputeSurface` has been renamed to `vtkCellGridComputeSides`.
      This breaks the VTK API but the cell-grid libraries were noted at
      the release of vtk 9.3.0 to be unstable.
      The filter is now more general and may output data not on the external
      surface of the model.
    + Fix coloring by vector magnitude/norm for cell-grids.
    + Fix the DG render-responder to use proper
      + colormap (preferring the mapper's if it exists and then the cell-attribute's if not);
      + attribute component (using the setting provided by the source of the colormap);
      + scalar range (paying attention to the colormap if requested).
    + Make `vtkCellGridSidesQuery::HashCombiner` available everywhere
      (as `Common/Core/vtkHashCombiner.h`).
      This will allow it to be used for upcoming changes to
      vtkCellGridResponders (to add caches based on an integer key).
    + Add cache data to cell-grid query-responders.
      This allows multiple query/filter instances to cache and share
      data so that data processed in them can share indices and other
      useful state.
      At this point, the cache must be manually managed.
    + Improved cell-grid range computation.
      + Now all component ranges (plus the L₁ and L₂ norms) are computed at once.
      + Range computation is parallelized.
      + HCurl and HDiv function spaces are sampled to obtain their range instead
        of simply taking the range of their coefficients. This is necessary
        since the coefficients are scaled by the inverse Jacobian of the
        shape attribute for the cell.
    + Add `vtkDGCell::GetParametricCenterOfSide()`.
      This is used for range queries as well as generating debug output.
    + Fix cached attribute-range lookup.
      The size of the per-component range vector was not tested properly,
      resulting in the cache nearly always being regarded as stale.
    + Fix rendering of cell-grid data.
      + HCurl/HDiv fields should not have data normalized by the determinant
        of the Jacobian.
      + Switch the pyramid data to use for rendering test.
        This uses a 19-node pyramid which does not have problems
        with surface normals like the 5- and 12-node versions.
      + Switch HCurl/HDiv basis functions to always be 3-D (even for 2-D cells).
        Because of the way shaders work, this is mandatory for now.
        Eventually, it would be nice to switch back.
    072b8fee
Loading