|
Blender V5.0
|
Classes | |
| class | IndexMapping |
Enumerations | |
| enum class | GeoMismatch : int8_t { NumPoints , NumEdges , NumCorners , NumFaces , NumCurves , PointAttributes , EdgeAttributes , CornerAttributes , FaceAttributes , CurveAttributes , EdgeTopology , FaceTopology , CurveTopology , Attributes , AttributeTypes , Indices } |
Functions | |
| const char * | mismatch_to_string (const GeoMismatch &mismatch) |
| std::optional< GeoMismatch > | compare_meshes (const Mesh &mesh1, const Mesh &mesh2, float threshold) |
| Checks if the two meshes are different, returning the type of mismatch if any. Changes in index order are detected, but treated as a mismatch. | |
| std::optional< GeoMismatch > | compare_curves (const CurvesGeometry &curves1, const CurvesGeometry &curves2, float threshold) |
| Checks if the two curves geometries are different, returning the type of mismatch if any. Changes in index order are detected, but treated as a mismatch. | |
| std::optional< GeoMismatch > | compare_lattices (const Lattice &lattice1, const Lattice &lattice2, float threshold) |
| Checks if the two lattices are different, returning the type of mismatch if any. | |
| template<typename T> | |
| static void | sort_indices (MutableSpan< int > indices, const Span< T > values, const int component_i) |
| static void | sort_indices_with_id_maps (MutableSpan< int > indices, const Span< int > values, const Span< int > values_to_sorted, const Span< int > set_ids) |
| template<typename T> | |
| static void | sort_per_set_based_on_attributes (const Span< int > set_sizes, MutableSpan< int > sorted_to_domain1, MutableSpan< int > sorted_to_domain2, const Span< T > values1, const Span< T > values2, const int component_i) |
| static void | sort_per_set_with_id_maps (const Span< int > set_sizes, const Span< int > values1, const Span< int > values2, const Span< int > values1_to_sorted, const Span< int > values2_to_sorted, const Span< int > value_set_ids, MutableSpan< int > sorted_to_domain1, MutableSpan< int > sorted_to_domain2) |
| template<typename T> | |
| static bool | values_different (const T value1, const T value2, const float threshold, const int component_i) |
| template<typename T> | |
| static bool | update_set_ids (MutableSpan< int > set_ids, const Span< T > values1, const Span< T > values2, const Span< int > sorted_to_values1, const Span< int > sorted_to_values2, const float threshold, const int component_i) |
| static bool | update_set_ids_with_id_maps (MutableSpan< int > set_ids, const Span< int > domain_to_values1, const Span< int > domain_to_values2, const Span< int > values1_to_sorted, const Span< int > values2_to_sorted, const Span< int > value_set_ids, const Span< int > sorted_to_domain1, const Span< int > sorted_to_domain2) |
| static void | update_set_sizes (const Span< int > set_ids, MutableSpan< int > set_sizes) |
| static void | edges_from_vert_sets (const Span< int2 > edges, const Span< int > verts_to_sorted, const Span< int > vert_set_ids, MutableSpan< OrderedEdge > r_edges) |
| static bool | sort_edges (const Span< int2 > edges1, const Span< int2 > edges2, const IndexMapping &verts, IndexMapping &edges) |
| static bool | sort_corners_based_on_domain (const Span< int > corner_domain1, const Span< int > corner_domain2, const IndexMapping &domain, IndexMapping &corners) |
| static void | calc_smallest_corner_ids (const Span< int > face_offsets, const Span< int > corners_to_sorted, const Span< int > corner_set_ids, MutableSpan< int > smallest_corner_ids) |
| static bool | sort_faces_based_on_corners (const IndexMapping &corners, const Span< int > face_offsets1, const Span< int > face_offsets2, IndexMapping &faces) |
| static bool | ignored_attribute (const StringRef id) |
| static std::optional< GeoMismatch > | verify_attributes_compatible (const AttributeAccessor &attributes1, const AttributeAccessor &attributes2) |
| static std::optional< GeoMismatch > | sort_domain_using_attributes (const AttributeAccessor &attributes1, const AttributeAccessor &attributes2, const AttrDomain domain, const Span< StringRef > excluded_attributes, IndexMapping &maps, const float threshold) |
| static void | make_set_sizes_one (IndexMapping &indices) |
| static bool | all_set_sizes_one (const Span< int > set_sizes) |
| static std::optional< GeoMismatch > | construct_vert_mapping (const Mesh &mesh1, const Mesh &mesh2, IndexMapping &verts, IndexMapping &edges) |
| static bool | sort_curves (const OffsetIndices< int > offset_indices1, const OffsetIndices< int > offset_indices2, IndexMapping &curves) |
|
strong |
Definition at line 26 of file geometry_compare.cc.
|
static |
Definition at line 707 of file geometry_compare.cc.
References all_set_sizes_one(), and size().
Referenced by all_set_sizes_one(), and construct_vert_mapping().
|
static |
Definition at line 476 of file geometry_compare.cc.
References calc_smallest_corner_ids(), and blender::MutableSpan< T >::index_range().
Referenced by calc_smallest_corner_ids(), and sort_faces_based_on_corners().
| std::optional< GeoMismatch > blender::bke::compare_geometry::compare_curves | ( | const CurvesGeometry & | curves1, |
| const CurvesGeometry & | curves2, | ||
| float | threshold ) |
Checks if the two curves geometries are different, returning the type of mismatch if any. Changes in index order are detected, but treated as a mismatch.
Definition at line 997 of file geometry_compare.cc.
References blender::bke::CurvesGeometry::attributes(), compare_curves(), blender::bke::Curve, blender::bke::CurvesGeometry::curves_num(), CurveTopology, blender::bke::compare_geometry::IndexMapping::from_sorted1, blender::bke::compare_geometry::IndexMapping::from_sorted2, Array< T, InlineBufferCapacity, Allocator >::index_range(), Indices, NumCurves, NumPoints, blender::bke::CurvesGeometry::offsets(), blender::bke::Point, blender::bke::CurvesGeometry::points_num(), sort_curves(), sort_domain_using_attributes(), and verify_attributes_compatible().
Referenced by compare_curves().
| std::optional< GeoMismatch > blender::bke::compare_geometry::compare_lattices | ( | const Lattice & | lattice1, |
| const Lattice & | lattice2, | ||
| float | threshold ) |
Checks if the two lattices are different, returning the type of mismatch if any.
Definition at line 1052 of file geometry_compare.cc.
References compare_lattices(), Lattice::def, i, NumPoints, Lattice::pntsu, Lattice::pntsv, Lattice::pntsw, PointAttributes, and values_different().
Referenced by compare_lattices().
| std::optional< GeoMismatch > blender::bke::compare_geometry::compare_meshes | ( | const Mesh & | mesh1, |
| const Mesh & | mesh2, | ||
| float | threshold ) |
Checks if the two meshes are different, returning the type of mismatch if any. Changes in index order are detected, but treated as a mismatch.
Instead of just blindly comparing the two meshes, the code tries to determine if they are isomorphic. Two meshes are considered isomorphic, if, for each domain, there is a bijection between the two meshes such that the bijections preserve connectivity.
In general, determining if two graphs are isomorphic is a very difficult problem (no polynomial time algorithm is known). Because we have more information than just connectivity (attributes), we can compute it in a more reasonable time in most cases.
Definition at line 822 of file geometry_compare.cc.
References Geometry::attributes, compare_meshes(), construct_vert_mapping(), blender::bke::Corner, Mesh::corners_num, blender::bke::Edge, Mesh::edges_num, EdgeTopology, blender::bke::Face, faces, Mesh::faces_num, FaceTopology, Indices, make_set_sizes_one(), NumCorners, NumEdges, NumFaces, NumPoints, blender::bke::Point, blender::bke::compare_geometry::IndexMapping::recalculate_inverse_maps(), sort_corners_based_on_domain(), sort_domain_using_attributes(), sort_edges(), sort_faces_based_on_corners(), verify_attributes_compatible(), verts, and Mesh::verts_num.
Referenced by compare_meshes().
|
static |
Tries to construct a (bijective) mapping from the vertices of the first mesh to the vertices of the second mesh, such that:
Definition at line 729 of file geometry_compare.cc.
References all_set_sizes_one(), blender::Vector< T, InlineBufferCapacity, Allocator >::append(), BLI_assert, blender::bke::mesh::build_vert_to_edge_map(), construct_vert_mapping(), EdgeTopology, blender::Vector< T, InlineBufferCapacity, Allocator >::first(), blender::Vector< T, InlineBufferCapacity, Allocator >::is_empty(), blender::bke::compare_geometry::IndexMapping::set_ids, blender::Span< T >::size(), blender::bke::compare_geometry::IndexMapping::to_sorted1, blender::bke::compare_geometry::IndexMapping::to_sorted2, verts, and Mesh::verts_num.
Referenced by compare_meshes(), and construct_vert_mapping().
|
static |
Definition at line 400 of file geometry_compare.cc.
References e, edges_from_vert_sets(), i, and blender::MutableSpan< T >::index_range().
Referenced by edges_from_vert_sets(), and sort_edges().
|
static |
The UV selection & pin layers are ignored in the comparisons because the original flags they replace were ignored as well. Because of the lazy creation of these layers it would need careful handling of the test files to compare these layers. For now it has been decided to skip them.
Definition at line 536 of file geometry_compare.cc.
References blender::bke::attribute_name_is_anonymous(), ELEM, and ignored_attribute().
Referenced by ignored_attribute(), sort_domain_using_attributes(), and verify_attributes_compatible().
|
static |
Definition at line 679 of file geometry_compare.cc.
References indices, and make_set_sizes_one().
Referenced by compare_meshes(), and make_set_sizes_one().
| const char * blender::bke::compare_geometry::mismatch_to_string | ( | const GeoMismatch & | mismatch | ) |
Convert the mismatch to a human-readable string for display.
Definition at line 45 of file geometry_compare.cc.
References Attributes, AttributeTypes, BLI_assert_unreachable, CornerAttributes, CurveAttributes, CurveTopology, EdgeAttributes, EdgeTopology, FaceAttributes, FaceTopology, Indices, NumCorners, NumCurves, NumEdges, NumFaces, NumPoints, and PointAttributes.
|
static |
Sort the corners based on the sorted vertex/edge set ids.
Definition at line 448 of file geometry_compare.cc.
References blender::bke::compare_geometry::IndexMapping::set_ids, sort_corners_based_on_domain(), sort_per_set_with_id_maps(), blender::bke::compare_geometry::IndexMapping::to_sorted1, blender::bke::compare_geometry::IndexMapping::to_sorted2, update_set_ids_with_id_maps(), and update_set_sizes().
Referenced by compare_meshes(), and sort_corners_based_on_domain().
|
static |
Sort curves based on their sizes.
Definition at line 967 of file geometry_compare.cc.
References blender::Array< T, InlineBufferCapacity, Allocator >::as_mutable_span(), blender::Array< T, InlineBufferCapacity, Allocator >::as_span(), blender::offset_indices::copy_group_sizes(), blender::offset_indices::OffsetIndices< T >::index_range(), blender::offset_indices::OffsetIndices< T >::size(), sort_curves(), sort_per_set_based_on_attributes(), update_set_ids(), and update_set_sizes().
Referenced by compare_curves(), and sort_curves().
|
static |
Sort the domain using all the attributes on that domain except the ones in excluded_attributes
Definition at line 579 of file geometry_compare.cc.
References blender::bke::AttributeAccessor::all_ids(), Attributes, BLI_assert_unreachable, blender::bke::AttributeAccessor::contains(), blender::bke::attribute_math::convert_to_static_type(), blender::bke::Corner, CornerAttributes, blender::bke::Curve, CurveAttributes, blender::bke::GAttributeReader::domain, blender::bke::Edge, EdgeAttributes, blender::bke::Face, FaceAttributes, blender::bke::compare_geometry::IndexMapping::from_sorted1, blender::bke::compare_geometry::IndexMapping::from_sorted2, ignored_attribute(), blender::is_same_any_v, blender::bke::AttributeAccessor::lookup(), name, blender::bke::Point, PointAttributes, blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::remove_as(), blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::remove_if(), blender::bke::compare_geometry::IndexMapping::set_ids, blender::bke::compare_geometry::IndexMapping::set_sizes, sort_domain_using_attributes(), sort_per_set_based_on_attributes(), blender::GVArrayCommon::type(), update_set_ids(), update_set_sizes(), and blender::bke::GAttributeReader::varray.
Referenced by compare_curves(), compare_meshes(), and sort_domain_using_attributes().
|
static |
Sort the edges based on the sorted vertex set ids.
Definition at line 415 of file geometry_compare.cc.
References blender::Array< T, InlineBufferCapacity, Allocator >::as_span(), edges_from_vert_sets(), blender::bke::compare_geometry::IndexMapping::from_sorted1, blender::bke::compare_geometry::IndexMapping::from_sorted2, blender::bke::compare_geometry::IndexMapping::set_ids, blender::bke::compare_geometry::IndexMapping::set_sizes, blender::Span< T >::size(), sort_edges(), sort_per_set_based_on_attributes(), update_set_ids(), update_set_sizes(), and verts.
Referenced by compare_meshes(), and sort_edges().
|
static |
Sort the faces using the sorted corner set ids.
Definition at line 497 of file geometry_compare.cc.
References blender::Array< T, InlineBufferCapacity, Allocator >::as_span(), calc_smallest_corner_ids(), faces, sort_faces_based_on_corners(), sort_per_set_based_on_attributes(), update_set_ids(), and update_set_sizes().
Referenced by compare_meshes(), and sort_faces_based_on_corners().
|
static |
Sort the indices using the values. For vectors of floats, the sorting happens based on the given component.
Definition at line 133 of file geometry_compare.cc.
References BLI_assert_unreachable, i, indices, and blender::is_same_any_v.
Referenced by sort_per_set_based_on_attributes().
|
static |
Sort the indices using the set ids of the values.
Definition at line 179 of file geometry_compare.cc.
References indices, and sort_indices_with_id_maps().
Referenced by sort_indices_with_id_maps(), and sort_per_set_with_id_maps().
|
static |
Definition at line 191 of file geometry_compare.cc.
References i, blender::Span< T >::size(), blender::MutableSpan< T >::slice(), sort_indices(), and sort_per_set_based_on_attributes().
Referenced by sort_curves(), sort_domain_using_attributes(), sort_edges(), sort_faces_based_on_corners(), and sort_per_set_based_on_attributes().
|
static |
Definition at line 214 of file geometry_compare.cc.
References i, blender::MutableSpan< T >::size(), blender::MutableSpan< T >::slice(), sort_indices_with_id_maps(), and sort_per_set_with_id_maps().
Referenced by sort_corners_based_on_domain(), and sort_per_set_with_id_maps().
|
static |
Split the sets into smaller sets based on the sorted attribute values.
Definition at line 307 of file geometry_compare.cc.
References i, blender::Span< T >::index_range(), blender::MutableSpan< T >::is_empty(), T, update_set_ids(), and values_different().
Referenced by sort_curves(), sort_domain_using_attributes(), sort_edges(), sort_faces_based_on_corners(), and update_set_ids().
|
static |
Split the sets into smaller sets based on the set ids of the sorted values.
Definition at line 348 of file geometry_compare.cc.
References i, blender::Span< T >::index_range(), blender::MutableSpan< T >::is_empty(), and update_set_ids_with_id_maps().
Referenced by sort_corners_based_on_domain(), and update_set_ids_with_id_maps().
|
static |
Update set sizes, using the updated set ids.
Definition at line 385 of file geometry_compare.cc.
References i, blender::Span< T >::size(), and update_set_sizes().
Referenced by sort_corners_based_on_domain(), sort_curves(), sort_domain_using_attributes(), sort_edges(), sort_faces_based_on_corners(), and update_set_sizes().
|
static |
Checks if the two values are different. For float types, the equality is checked based on a threshold.
Definition at line 249 of file geometry_compare.cc.
References ASSERT_AND_ASSUME, BLI_assert_unreachable, compare_threshold_relative(), blender::is_same_any_v, T, and values_different().
Referenced by compare_lattices(), update_set_ids(), and values_different().
|
static |
Verify that both geometries have the same attributes:
Definition at line 548 of file geometry_compare.cc.
References blender::bke::AttributeAccessor::all_ids(), AttributeTypes, blender::bke::GAttributeReader::domain, ignored_attribute(), blender::bke::AttributeAccessor::lookup(), blender::Set< Key, InlineBufferCapacity, ProbingStrategy, Hash, IsEqual, Slot, Allocator >::remove_if(), blender::GVArrayCommon::type(), blender::bke::GAttributeReader::varray, and verify_attributes_compatible().
Referenced by compare_curves(), compare_meshes(), and verify_attributes_compatible().