Class SymmetryVisitorRobustMesh

All Implemented Interfaces:
MeshVisitor

public class SymmetryVisitorRobustMesh extends SymmetryVisitorRobust
A robust implementation of symmetry plane estimation for manifold triangle meshes. The code is based on the ... paper. This extension uses the similarity of Gaussian curvature values (the static weight) and the symmetry of normal vectors (the dynamic weight) in the computation, along with Wendland’s similarity function. The computation is a bit slower in general (depends on parameters set, of course) that the super-class, but the weights should help the algorithm to better deal with damaged faces, i.e., when only a small fragment of a face is available.

Although the pruning of candidate planes and the measurement of their quality is similar to the SymmetryVisitorMesh implementation, this code is much slower with similar quality of results :-( Probably the price for robustness (need to be further researched).

  • Field Details

    • EQUALS_EPS

      public static final double EQUALS_EPS
      Two points whose Euclidean distance or curvature difference is less than this value are considered the same and skipped from generating candidate planes
      See Also:
  • Constructor Details

    • SymmetryVisitorRobustMesh

      public SymmetryVisitorRobustMesh(PointSamplingConfig samplingStrategy1, PointSamplingConfig samplingStrategy2)
      Constructor.
      Parameters:
      samplingStrategy1 - Downsampling strategy for finding candidate planes. Must not be null Use NoSumpling strategy to avoid downsampling.
      samplingStrategy2 - Downsampling strategy for finding the best candidate. Must not be null Use NoSumpling strategy to avoid downsampling.
  • Method Details

    • visitMeshFacet

      public void visitMeshFacet(MeshFacet facet)
      Description copied from interface: MeshVisitor
      The inspection method to be implemented by specific visitors.
      Specified by:
      visitMeshFacet in interface MeshVisitor
      Overrides:
      visitMeshFacet in class SymmetryVisitorRobust
      Parameters:
      facet - Mesh facet to be visited.
    • generateCandidates

      protected Set<CandidatePlaneRobust> generateCandidates(List<MeshPoint> meshSamples, javax.vecmath.Point3d centroid)
      Copies mesh samples, moves them to the space origin, and then computes candidate planes. This implementation uses curvature and normal vectors to prune candidates.
      Overrides:
      generateCandidates in class SymmetryVisitorRobust
      Parameters:
      meshSamples - Downsampled mesh
      centroid - Centroid of the downsampled mesh
      Returns:
      Candidate planes
    • measureSymmetry

      protected void measureSymmetry(List<MeshPoint> meshSamples, javax.vecmath.Point3d centroid, Set<CandidatePlaneRobust> candidates)
      Copies mesh samples, moves them to the space origin, and then measures the quality of candidate planes. The results are stored in the candidate planes.
      Overrides:
      measureSymmetry in class SymmetryVisitorRobust
      Parameters:
      meshSamples - Downsampled mesh
      centroid - Centroid of the downsampled mesh
      candidates - Candidate planes