[Bf-blender-cvs] [171a1feeb3d] gsoc-2021-porting-modifiers-to-nodes-solidify: moved solidify to Blender Kernel

Fabian Schempp noreply at git.blender.org
Tue Jun 22 10:49:54 CEST 2021


Commit: 171a1feeb3d1a64576fe80cb331a0feeb32bbaa2
Author: Fabian Schempp
Date:   Tue Jun 1 07:15:56 2021 +0200
Branches: gsoc-2021-porting-modifiers-to-nodes-solidify
https://developer.blender.org/rB171a1feeb3d1a64576fe80cb331a0feeb32bbaa2

moved solidify to Blender Kernel

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

D	source/blender/nodes/geometry/nodes/node_geo_solidify.cc
D	source/blender/nodes/geometry/nodes/node_geo_solidify.h
D	source/blender/nodes/geometry/nodes/node_geo_solidify_extrude.c

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

diff --git a/source/blender/nodes/geometry/nodes/node_geo_solidify.cc b/source/blender/nodes/geometry/nodes/node_geo_solidify.cc
deleted file mode 100644
index b11cabe078f..00000000000
--- a/source/blender/nodes/geometry/nodes/node_geo_solidify.cc
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-#include "UI_interface.h"
-#include "UI_resources.h"
-
-#include "DNA_modifier_types.h"
-
-#include "node_geometry_util.hh"
-#include "node_geo_solidify.h"
-
-/*extern "C" {    // another way
-  Mesh *solidify_extrude_modifyMesh( Mesh *mesh);
-};*/
-
-static bNodeSocketTemplate geo_node_solidify_in[] = {
-    {SOCK_GEOMETRY, N_("Geometry")},
-    {SOCK_FLOAT, N_("Thickness"), 0.1f, 0.0f, 0.0f, 0.0f, -FLT_MAX, FLT_MAX},
-    {SOCK_FLOAT, N_("Offset"), -1.0f, 0.0f, 0.0f, 0.0f, -1.0f, 1.0f},
-    {SOCK_FLOAT, N_("Clamp Offset"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 2.0f},
-    {SOCK_BOOLEAN, N_("Fill"), true},
-    {SOCK_BOOLEAN, N_("Rim"), true},
-
-    {-1, ""},
-};
-
-static bNodeSocketTemplate geo_node_solidify_out[] = {
-    {SOCK_GEOMETRY, N_("Geometry")},
-    {-1, ""},
-};
-
-namespace blender::nodes {
-
-static void geo_node_solidify_exec(GeoNodeExecParams params)
-{
-  GeometrySet geometry_set = params.extract_input<GeometrySet>("Geometry");
-  bool add_rim = params.extract_input<bool>("Rim");
-  bool add_fill = params.extract_input<bool>("Fill");
-
-  char flag = MOD_SOLIDIFY_NORMAL_CALC;
-  if(add_rim){
-    flag |= MOD_SOLIDIFY_RIM;
-  }
-  if(!add_fill){
-    flag |= MOD_SOLIDIFY_NOSHELL;
-  }
-  float thickness = params.extract_input<float>("Thickness");
-  float offset = params.extract_input<float>("Offset");
-  float offset_clamp = params.extract_input<float>("Clamp Offset");
-
-  geometry_set = geometry_set_realize_instances(geometry_set);
-
-  if (geometry_set.has<MeshComponent>()) {
-    SolidifyNodeData solidify_node_data = {
-      /** Name of vertex group to use, MAX_VGROUP_NAME. */
-      "char defgrp_name[64]",
-      "shell_defgrp_name[64]",
-      "rim_defgrp_name[64]",
-      /** New surface offset level. */
-      thickness,
-      /** Midpoint of the offset. */
-      offset,
-      /**
-       * Factor for the minimum weight to use when vertex-groups are used,
-       * avoids 0.0 weights giving duplicate geometry.
-       */
-      0.0f,
-      /** Clamp offset based on surrounding geometry. */
-      offset_clamp,
-      MOD_SOLIDIFY_MODE_EXTRUDE,
-
-      /** Variables for #MOD_SOLIDIFY_MODE_NONMANIFOLD. */
-      MOD_SOLIDIFY_NONMANIFOLD_OFFSET_MODE_FIXED,
-      MOD_SOLIDIFY_NONMANIFOLD_BOUNDARY_MODE_NONE,
-
-      0,
-      0.0f,
-      0.0f,
-      0.0f,
-      flag,
-      0,
-      0,
-      0.01f,
-      0.0f,
-    };
-
-    MeshComponent &meshComponent = geometry_set.get_component_for_write<MeshComponent>();
-    Mesh *return_mesh = solidify_extrude_modifyMesh(&solidify_node_data, meshComponent.get_for_write());
-    geometry_set.replace_mesh(return_mesh);
-  }
-//  if (geometry_set.has<PointCloudComponent>()) {
-//    fill_attribute(geometry_set.get_component_for_write<PointCloudComponent>(), params);
-//  }
-//  if (geometry_set.has<CurveComponent>()) {
-//    fill_attribute(geometry_set.get_component_for_write<CurveComponent>(), params);
-//  }
-
-  params.set_output("Geometry", geometry_set);
-}
-
-}  // namespace blender::nodes
-
-void register_node_type_geo_solidify()
-{
-  static bNodeType ntype;
-  geo_node_type_base(&ntype, GEO_NODE_SOLIDIFY, "Solidify", NODE_CLASS_GEOMETRY, 0);
-  node_type_socket_templates(&ntype, geo_node_solidify_in, geo_node_solidify_out);
-  ntype.geometry_node_execute = blender::nodes::geo_node_solidify_exec;
-  nodeRegisterType(&ntype);
-}
diff --git a/source/blender/nodes/geometry/nodes/node_geo_solidify.h b/source/blender/nodes/geometry/nodes/node_geo_solidify.h
deleted file mode 100644
index bda46dc5150..00000000000
--- a/source/blender/nodes/geometry/nodes/node_geo_solidify.h
+++ /dev/null
@@ -1,47 +0,0 @@
-//
-// Created by fabian on 24.05.21.
-//
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef struct SolidifyNodeData {
-  /** Name of vertex group to use, MAX_VGROUP_NAME. */
-  char defgrp_name[64];
-  char shell_defgrp_name[64];
-  char rim_defgrp_name[64];
-  /** New surface offset level. */
-  float offset;
-  /** Midpoint of the offset. */
-  float offset_fac;
-  /**
-   * Factor for the minimum weight to use when vertex-groups are used,
-   * avoids 0.0 weights giving duplicate geometry.
-   */
-  float offset_fac_vg;
-  /** Clamp offset based on surrounding geometry. */
-  float offset_clamp;
-  char mode;
-
-  /** Variables for #MOD_SOLIDIFY_MODE_NONMANIFOLD. */
-  char nonmanifold_offset_mode;
-  char nonmanifold_boundary_mode;
-
-  char _pad;
-  float crease_inner;
-  float crease_outer;
-  float crease_rim;
-  int flag;
-  short mat_ofs;
-  short mat_ofs_rim;
-
-  float merge_tolerance;
-  float bevel_convex;
-} SolidifyNodeData;
-
-Mesh *solidify_extrude_modifyMesh(SolidifyNodeData *smd, Mesh *mesh);
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/source/blender/nodes/geometry/nodes/node_geo_solidify_extrude.c b/source/blender/nodes/geometry/nodes/node_geo_solidify_extrude.c
deleted file mode 100644
index 1337923cc78..00000000000
--- a/source/blender/nodes/geometry/nodes/node_geo_solidify_extrude.c
+++ /dev/null
@@ -1,2290 +0,0 @@
-/*
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- */
-
-/** \file
- * \ingroup modifiers
- */
-
-#include "BLI_utildefines.h"
-#include <BKE_modifier.h>
-#include <DNA_modifier_types.h>
-
-#include "BLI_bitmap.h"
-#include "BLI_math.h"
-#include "BLI_utildefines_stack.h"
-
-#include "DNA_mesh_types.h"
-#include "DNA_meshdata_types.h"
-#include "DNA_object_types.h"
-
-#include "MEM_guardedalloc.h"
-
-#include "BKE_deform.h"
-#include "BKE_mesh.h"
-#include "BKE_particle.h"
-#include "node_geo_solidify.h"
-
-//#include "node_geometry_util.hh"
-
-#ifdef __GNUC__
-#  pragma GCC diagnostic error "-Wsign-conversion"
-#endif
-
-/* -------------------------------------------------------------------- */
-/** \name Local Utilities
- * \{ */
-
-/* specific function for solidify - define locally */
-BLI_INLINE void madd_v3v3short_fl(float r[3], const short a[3], const float f)
-{
-  r[0] += (float)a[0] * f;
-  r[1] += (float)a[1] * f;
-  r[2] += (float)a[2] * f;
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name High Quality Normal Calculation Function
- * \{ */
-
-/* skip shell thickness for non-manifold edges, see T35710. */
-#define USE_NONMANIFOLD_WORKAROUND
-
-/* *** derived mesh high quality normal calculation function  *** */
-/* could be exposed for other functions to use */
-
-typedef struct EdgeFaceRef {
-  int p1; /* init as -1 */
-  int p2;
-} EdgeFaceRef;
-
-BLI_INLINE bool edgeref_is_init(const EdgeFaceRef *edge_ref)
-{
-  return !((edge_ref->p1 == 0) && (edge_ref->p2 == 0));
-}
-
-/**
- * \param mesh: Mesh to calculate normals for.
- * \param poly_nors: Precalculated face normals.
- * \param r_vert_nors: Return vert normals.
- */
-static void mesh_calc_hq_normal(Mesh *mesh, float (*poly_nors)[3], float (*r_vert_nors)[3])
-{
-  int i, numVerts, numEdges, numPolys;
-  MPoly *mpoly, *mp;
-  MLoop *mloop, *ml;
-  MEdge *medge, *ed;
-  MVert *mvert, *mv;
-
-  numVerts = mesh->totvert;
-  numEdges = mesh->totedge;
-  numPolys = mesh->totpoly;
-  mpoly = mesh->mpoly;
-  medge = mesh->medge;
-  mvert = mesh->mvert;
-  mloop = mesh->mloop;
-
-  /* we don't want to overwrite any referenced layers */
-
-  /* Doesn't work here! */
-#if 0
-  mv = CustomData_duplicate_referenced_layer(&dm->vertData, CD_MVERT, numVerts);
-  cddm->mvert = mv;
-#endif
-
-  mv = mvert;
-  mp = mpoly;
-
-  {
-    EdgeFaceRef *edge_ref_array = MEM_calloc_arrayN(
-        (size_t)numEdges, sizeof(EdgeFaceRef), "Edge Connectivity");
-    EdgeFaceRef *edge_ref;
-    float edge_normal[3];
-
-    /* Add an edge reference if it's not there, pointing back to the face index. */
-    for (i = 0; i < numPolys; i++, mp++) {
-      int j;
-
-      ml = mloop + mp->loopstart;
-
-      for (j = 0; j < mp->totloop; j++, ml++) {
-        /* --- add edge ref to face --- */
-        edge_ref = &edge_ref_array[ml->e];
-        if (!edgeref_is_init(edge_ref)) {
-          edge_ref->p1 = i;
-          edge_ref->p2 = -1;
-        }
-        else if ((edge_ref->p1 != -1) && (edge_ref->p2 == -1)) {
-          edge_ref->p2 = i;
-        }
-        else {
-          /* 3+ faces using an edge, we can't handle this usefully */
-          edge_ref->p1 = edge_ref->p2 = -1;
-#ifdef USE_NONMANIFOLD_WORKAROUND
-          medge[ml->e].flag |= ME_EDGE_TMP_TAG;
-#endif
-        }
-        /* --- done --- */
-      }
-    }
-
-    for (i = 0, ed = medge, edge_ref = edge_ref_array; i < numEdges; i++, ed++, edge_ref++) {
-      /* Get the edge vert indices, and edge value (t

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list