[Bf-blender-cvs] [29951651489] master: Cleanup: simplify wrapping CurvesGeometry in C++

Jacques Lucke noreply at git.blender.org
Tue Jan 31 18:46:08 CET 2023


Commit: 29951651489079da8d72782eb4f8b693d57896a8
Author: Jacques Lucke
Date:   Tue Jan 31 18:45:34 2023 +0100
Branches: master
https://developer.blender.org/rB29951651489079da8d72782eb4f8b693d57896a8

Cleanup: simplify wrapping CurvesGeometry in C++

===================================================================

M	source/blender/blenkernel/BKE_curves.hh
M	source/blender/blenkernel/intern/attribute.cc
M	source/blender/blenkernel/intern/crazyspace.cc
M	source/blender/blenkernel/intern/curve_legacy_convert.cc
M	source/blender/blenkernel/intern/curves.cc
M	source/blender/blenkernel/intern/geometry_component_edit_data.cc
M	source/blender/blenkernel/intern/geometry_fields.cc
M	source/blender/blenkernel/intern/geometry_set.cc
M	source/blender/blenkernel/intern/mesh_convert.cc
M	source/blender/draw/engines/overlay/overlay_sculpt_curves.cc
M	source/blender/draw/engines/overlay/overlay_viewer_attribute.cc
M	source/blender/draw/intern/draw_cache_impl_curve.cc
M	source/blender/draw/intern/draw_cache_impl_curves.cc
M	source/blender/draw/intern/draw_curves.cc
M	source/blender/editors/curves/intern/curves_data.cc
M	source/blender/editors/curves/intern/curves_ops.cc
M	source/blender/editors/curves/intern/curves_selection.cc
M	source/blender/editors/curves/intern/curves_undo.cc
M	source/blender/editors/object/object_add.cc
M	source/blender/editors/object/object_modifier.cc
M	source/blender/editors/object/object_transform.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_add.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_brush.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_comb.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_delete.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_density.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_grow_shrink.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_ops.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_pinch.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_puff.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_selection.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_selection_paint.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_slide.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_smooth.cc
M	source/blender/editors/sculpt_paint/curves_sculpt_snake_hook.cc
M	source/blender/editors/transform/transform_convert_curves.cc
M	source/blender/geometry/intern/realize_instances.cc
M	source/blender/makesdna/DNA_curves_types.h
M	source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_fillet.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_length.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_primitive_arc.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_primitive_bezier_segment.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_primitive_circle.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_primitive_line.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_primitive_quadratic_bezier.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_primitive_quadrilateral.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_primitive_spiral.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_primitive_star.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_resample.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_reverse.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_sample.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_set_handle_type.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_spline_type.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_subdivide.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_to_mesh.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_to_points.cc
M	source/blender/nodes/geometry/nodes/node_geo_curve_trim.cc
M	source/blender/nodes/geometry/nodes/node_geo_deform_curves_on_surface.cc
M	source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc
M	source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc
M	source/blender/nodes/geometry/nodes/node_geo_interpolate_curves.cc
M	source/blender/nodes/geometry/nodes/node_geo_set_curve_handles.cc
M	source/blender/nodes/geometry/nodes/node_geo_set_curve_normal.cc
M	source/blender/nodes/geometry/nodes/node_geo_set_curve_radius.cc
M	source/blender/nodes/geometry/nodes/node_geo_set_curve_tilt.cc
M	source/blender/nodes/geometry/nodes/node_geo_set_position.cc
M	source/blender/nodes/geometry/nodes/node_geo_set_spline_cyclic.cc
M	source/blender/nodes/geometry/nodes/node_geo_set_spline_resolution.cc
M	source/blender/nodes/geometry/nodes/node_geo_string_to_curves.cc
M	source/blender/nodes/geometry/nodes/node_geo_transform_geometry.cc

===================================================================

diff --git a/source/blender/blenkernel/BKE_curves.hh b/source/blender/blenkernel/BKE_curves.hh
index e22348106db..8e4a83a1135 100644
--- a/source/blender/blenkernel/BKE_curves.hh
+++ b/source/blender/blenkernel/BKE_curves.hh
@@ -128,17 +128,6 @@ class CurvesGeometry : public ::CurvesGeometry {
   CurvesGeometry &operator=(CurvesGeometry &&other);
   ~CurvesGeometry();
 
-  static CurvesGeometry &wrap(::CurvesGeometry &dna_struct)
-  {
-    CurvesGeometry *geometry = reinterpret_cast<CurvesGeometry *>(&dna_struct);
-    return *geometry;
-  }
-  static const CurvesGeometry &wrap(const ::CurvesGeometry &dna_struct)
-  {
-    const CurvesGeometry *geometry = reinterpret_cast<const CurvesGeometry *>(&dna_struct);
-    return *geometry;
-  }
-
   /* --------------------------------------------------------------------
    * Accessors.
    */
@@ -408,6 +397,8 @@ class CurvesGeometry : public ::CurvesGeometry {
   }
 };
 
+static_assert(sizeof(blender::bke::CurvesGeometry) == sizeof(::CurvesGeometry));
+
 /**
  * Used to propagate deformation data through modifier evaluation so that sculpt tools can work on
  * evaluated data.
@@ -966,3 +957,12 @@ struct CurvesSurfaceTransforms {
 };
 
 }  // namespace blender::bke
+
+inline blender::bke::CurvesGeometry &CurvesGeometry::wrap()
+{
+  return *reinterpret_cast<blender::bke::CurvesGeometry *>(this);
+}
+inline const blender::bke::CurvesGeometry &CurvesGeometry::wrap() const
+{
+  return *reinterpret_cast<const blender::bke::CurvesGeometry *>(this);
+}
diff --git a/source/blender/blenkernel/intern/attribute.cc b/source/blender/blenkernel/intern/attribute.cc
index 4b090e710f5..32d12e1af17 100644
--- a/source/blender/blenkernel/intern/attribute.cc
+++ b/source/blender/blenkernel/intern/attribute.cc
@@ -112,7 +112,7 @@ static std::optional<blender::bke::MutableAttributeAccessor> get_attribute_acces
     }
     case ID_CV: {
       Curves &curves_id = reinterpret_cast<Curves &>(id);
-      CurvesGeometry &curves = CurvesGeometry::wrap(curves_id.geometry);
+      CurvesGeometry &curves = curves_id.geometry.wrap();
       return curves.attributes_for_write();
     }
     default: {
diff --git a/source/blender/blenkernel/intern/crazyspace.cc b/source/blender/blenkernel/intern/crazyspace.cc
index dd58f137abe..906d4c82623 100644
--- a/source/blender/blenkernel/intern/crazyspace.cc
+++ b/source/blender/blenkernel/intern/crazyspace.cc
@@ -601,7 +601,7 @@ GeometryDeformation get_evaluated_curves_deformation(const Depsgraph &depsgraph,
 {
   BLI_assert(ob_orig.type == OB_CURVES);
   const Curves &curves_id_orig = *static_cast<const Curves *>(ob_orig.data);
-  const CurvesGeometry &curves_orig = CurvesGeometry::wrap(curves_id_orig.geometry);
+  const CurvesGeometry &curves_orig = curves_id_orig.geometry.wrap();
   const int points_num = curves_orig.points_num();
 
   GeometryDeformation deformation;
@@ -643,7 +643,7 @@ GeometryDeformation get_evaluated_curves_deformation(const Depsgraph &depsgraph,
     if (curves_component_eval != nullptr) {
       const Curves *curves_id_eval = curves_component_eval->get_for_read();
       if (curves_id_eval != nullptr) {
-        const CurvesGeometry &curves_eval = CurvesGeometry::wrap(curves_id_eval->geometry);
+        const CurvesGeometry &curves_eval = curves_id_eval->geometry.wrap();
         if (curves_eval.points_num() == points_num) {
           deformation.positions = curves_eval.positions();
         }
diff --git a/source/blender/blenkernel/intern/curve_legacy_convert.cc b/source/blender/blenkernel/intern/curve_legacy_convert.cc
index f82d931114e..c8ae56220c3 100644
--- a/source/blender/blenkernel/intern/curve_legacy_convert.cc
+++ b/source/blender/blenkernel/intern/curve_legacy_convert.cc
@@ -82,7 +82,7 @@ Curves *curve_legacy_to_curves(const Curve &curve_legacy, const ListBase &nurbs_
   const Vector<const Nurb *> src_curves(nurbs_list);
 
   Curves *curves_id = curves_new_nomain(0, src_curves.size());
-  CurvesGeometry &curves = CurvesGeometry::wrap(curves_id->geometry);
+  CurvesGeometry &curves = curves_id->geometry.wrap();
   MutableAttributeAccessor curves_attributes = curves.attributes_for_write();
 
   MutableSpan<int8_t> types = curves.curve_types_for_write();
diff --git a/source/blender/blenkernel/intern/curves.cc b/source/blender/blenkernel/intern/curves.cc
index 0bdddc9c389..a7ac35ce56b 100644
--- a/source/blender/blenkernel/intern/curves.cc
+++ b/source/blender/blenkernel/intern/curves.cc
@@ -70,8 +70,8 @@ static void curves_copy_data(Main * /*bmain*/, ID *id_dst, const ID *id_src, con
   const Curves *curves_src = (const Curves *)id_src;
   curves_dst->mat = static_cast<Material **>(MEM_dupallocN(curves_src->mat));
 
-  const bke::CurvesGeometry &src = bke::CurvesGeometry::wrap(curves_src->geometry);
-  bke::CurvesGeometry &dst = bke::CurvesGeometry::wrap(curves_dst->geometry);
+  const bke::CurvesGeometry &src = curves_src->geometry.wrap();
+  bke::CurvesGeometry &dst = curves_dst->geometry.wrap();
 
   /* We need special handling here because the generic ID management code has already done a
    * shallow copy from the source to the destination, and because the copy-on-write functionality
@@ -103,7 +103,7 @@ static void curves_free_data(ID *id)
   Curves *curves = (Curves *)id;
   BKE_animdata_free(&curves->id, false);
 
-  blender::bke::CurvesGeometry::wrap(curves->geometry).~CurvesGeometry();
+  curves->geometry.wrap().~CurvesGeometry();
 
   BKE_curves_batch_cache_free(curves);
 
@@ -174,7 +174,7 @@ static void curves_blend_read_data(BlendDataReader *reader, ID *id)
   curves->geometry.runtime = MEM_new<blender::bke::CurvesGeometryRuntime>(__func__);
 
   /* Recalculate curve type count cache that isn't saved in files. */
-  blender::bke::CurvesGeometry::wrap(curves->geometry).update_curve_types();
+  curves->geometry.wrap().update_curve_types();
 
   /* Materials */
   BLO_read_pointer_array(reader, (void **)&curves->mat);
@@ -247,8 +247,7 @@ BoundBox *BKE_curves_boundbox_get(Object *ob)
   if (ob->runtime.bb == nullptr) {
     ob->runtime.bb = MEM_cnew<BoundBox>(__func__);
 
-    const blender::bke::CurvesGeometry &curves = blender::bke::CurvesGeometry::wrap(
-        curves_id->geometry);
+    const blender::bke::CurvesGeometry &curves = curves_id->geometry.wrap();
 
     float3 min(FLT_MAX);
     float3 max(-FLT_MAX);
@@ -372,7 +371,7 @@ Curves *curves_new_nomain(const int points_num, const int curves_num)
   BLI_assert(points_num >= 0);
   BLI_assert(curves_num >= 0);
   Curves *curves_id = static_cast<Curves *>(BKE_id_new_nomain(ID_CV, nullptr));
-  CurvesGeometry &curves = CurvesGeometry::wrap(curves_id->geometry);
+  CurvesGeometry &curves = curves_id->geometry.wrap();
   curves.resize(points_num, curves_num);
   return curves_id;
 }
@@ -380,7 +379,7 @@ Curves *curves_new_nomain(const int points_num, const int curves_num)
 Curves *curves_new_nomain_single(const int points_num, const CurveType type)
 {
   Curves *curves_id = curves_new_nomain(points_num, 1);
-  CurvesGeometry &curves = CurvesGeometry::wrap(curves_id->geometry);
+  CurvesGeometry &curves = curves_id->geometry.wrap();
   curves.offsets_for_write().last() = points_num;
   curves.fill_curve_types(type);
   return curves_id;
@@ -389,7 +388,7 @@ Curves *curves_new_nomain_single(const int points_num, const CurveType type)
 Curves *curves_new_nomain(CurvesGeometry curves)
 {
   Curves *curves_id = static_cast<Curves *>(BKE_id_new_nomain(ID_CV, nullptr));
-  bke::CurvesGeometry::wrap(curves_id->geometry) = std::move(curves);
+  curves_id->geometry.wrap() = std::move(curves);
   return curves_id;
 }
 
diff --git a/source/blender/blenkernel/intern/geometry_component_edit_data.cc b/source/blender/blenkernel/intern/geometry_component_edit_data.cc
index 2c00de3254f..9a5cd1aa904 100644
--- a/source/blender/blenkernel/intern/geometry_component_edit_data.cc
+++ b/source/blender/blenkernel/intern/geometry_component_edit_data.cc
@@ -48,7 +48,7 @@ void GeometryComponentEditData::remember_deformed_curve_positions_if_necessary(
   if (curves_id == nullptr) {
     return;
   }
-  const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometry);
+  const bke::CurvesGeometry &curves = curves_id->geometry.wrap();
   const int points_num = curves.points_num();
   if (points_num != edit_component.curves_edit_hints_->curves_id_orig.geometry.point_num) {
     return;
diff --git a/source/blender/blenkernel/intern/geometry_fields.cc b/source/blender/blenkernel/intern/geometry_fields.cc
index f4f4d0d8719..fd07f7eceab 100644
--- a/source/blender/blenkernel/intern/geometry_fields.cc
+++ b/source/blender/blenkernel/intern/geometry_fields.cc
@@ -55,7 +55,7 @@ GeometryFieldContext::GeometryFieldContext(const GeometryComponent &component,
     case GEO_COMPONENT_TYPE_CURVE: {
       const CurveComponent &curve_component = static_cast<const CurveComponent &>(component);
       const Curves *curves = curve_component.get_for_read();
-      geometry_ = curves ? &CurvesGeometry::wrap(curves->geometry) : nullptr;
+      geometry_ = curves ? &curves->geometry.wrap() : nullptr;
       break;
     }
     case GEO_COMPONENT_TYPE_POINT_CLOUD: {
@@ -560,8 +560,7 @@ std::optional<eAttrDomain> try_detect_field_domain(const GeometryComponent &comp
       }
       else if (const auto *curves_field_input = dynamic_cast<const CurvesFieldInput *>(
                    &field_input)) {
-        if (!handle_domain(
-                curves_field_input->preferred_domain(CurvesGeometry::wrap(curves->geometry)))) {
+        if (!handle_domain(curves_field_input->preferred_domain(curves->geometry.wrap()))) {
           return std::nullopt;
         }
       }
diff --git a/source/blender/blenkernel/intern/geometry_set.cc b/source/blender/blenkernel/intern/geometry_set.cc
index 8fff80e709f..2417f8e2f73 100644
--- a/source/blender/blenkernel/intern/geometry_set.cc
+++ b/source/blender/blenkernel/intern/geometry_set.cc
@@ -227,7 +227,7 @@ bool GeometrySet::compute_boundbox_without_instances(float3 *r_min, float3 *r_ma
     have_minmax |= BKE_volume_min_max(volume, *r_min, *r_max);
   }
   if (const Curves *curves_id = this->get_curves_for_read()) {
-    const bke::CurvesGeometry &curves = bke::CurvesGeometry::wrap(curves_id->geometr

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list