[Bf-blender-cvs] [f23bb03cbb4] gsoc-2021-porting-modifiers-to-nodes-solidify: - added output groups for rim and fill
Fabian Schempp
noreply at git.blender.org
Fri Jun 18 17:06:53 CEST 2021
Commit: f23bb03cbb40d89284cd83c9845eeaeea1b47e47
Author: Fabian Schempp
Date: Wed Jun 16 10:01:22 2021 +0200
Branches: gsoc-2021-porting-modifiers-to-nodes-solidify
https://developer.blender.org/rBf23bb03cbb40d89284cd83c9845eeaeea1b47e47
- added output groups for rim and fill
===================================================================
M source/blender/blenkernel/BKE_solidifiy.h
M source/blender/blenkernel/intern/solidify_extrude.c
M source/blender/blenkernel/intern/solidify_nonmanifold.c
M source/blender/makesdna/DNA_modifier_types.h
M source/blender/modifiers/intern/MOD_solidify.c
M source/blender/nodes/geometry/nodes/node_geo_solidifiy.cc
===================================================================
diff --git a/source/blender/blenkernel/BKE_solidifiy.h b/source/blender/blenkernel/BKE_solidifiy.h
index c022352544c..1fd885ae665 100644
--- a/source/blender/blenkernel/BKE_solidifiy.h
+++ b/source/blender/blenkernel/BKE_solidifiy.h
@@ -38,11 +38,11 @@ typedef struct SolidifyData {
float merge_tolerance;
float bevel_convex;
- float *selection;
+ float *distance;
} SolidifyData;
Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh);
-Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh);
+Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh, bool **r_shell_verts, bool **r_rim_verts);
#ifdef __cplusplus
}
diff --git a/source/blender/blenkernel/intern/solidify_extrude.c b/source/blender/blenkernel/intern/solidify_extrude.c
index f1d3fce3f8a..03885770ff6 100644
--- a/source/blender/blenkernel/intern/solidify_extrude.c
+++ b/source/blender/blenkernel/intern/solidify_extrude.c
@@ -621,10 +621,10 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
//if (dvert) {
//MDeformVert *dv = &dvert[i];
if (defgrp_invert) {
- scalar_short_vgroup = 1.0f - solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
+ scalar_short_vgroup = 1.0f - solidify_data->distance[i];//BKE_defvert_find_weight(dv, defgrp_index);
}
else {
- scalar_short_vgroup = solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
+ scalar_short_vgroup = solidify_data->distance[i];//BKE_defvert_find_weight(dv, defgrp_index);
}
scalar_short_vgroup = (offset_fac_vg + (scalar_short_vgroup * offset_fac_vg_inv)) *
scalar_short;
@@ -668,10 +668,10 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
//if (dvert) {
//MDeformVert *dv = &dvert[i];
if (defgrp_invert) {
- scalar_short_vgroup = 1.0f - solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
+ scalar_short_vgroup = 1.0f - solidify_data->distance[i];//BKE_defvert_find_weight(dv, defgrp_index);
}
else {
- scalar_short_vgroup = solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
+ scalar_short_vgroup = solidify_data->distance[i];//BKE_defvert_find_weight(dv, defgrp_index);
}
scalar_short_vgroup = (offset_fac_vg + (scalar_short_vgroup * offset_fac_vg_inv)) *
scalar_short;
@@ -808,14 +808,14 @@ Mesh *solidify_extrude(const SolidifyData *solidify_data, Mesh *mesh)
if (defgrp_invert) {
for (i = 0; i < numVerts; i++){//}, dv++) {
- scalar = 1.0f - solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
+ scalar = 1.0f - solidify_data->distance[i];//BKE_defvert_find_weight(dv, defgrp_index);
scalar = offset_fac_vg + (scalar * offset_fac_vg_inv);
vert_angles[i] *= scalar;
}
}
else {
for (i = 0; i < numVerts; i++){//, dv++) {
- scalar = solidify_data->selection[i];//BKE_defvert_find_weight(dv, defgrp_index);
+ scalar = solidify_data->distance[i];//BKE_defvert_find_weight(dv, defgrp_index);
scalar = offset_fac_vg + (scalar * offset_fac_vg_inv);
vert_angles[i] *= scalar;
}
diff --git a/source/blender/blenkernel/intern/solidify_nonmanifold.c b/source/blender/blenkernel/intern/solidify_nonmanifold.c
index 75dedac1fbf..0d2392be4b7 100644
--- a/source/blender/blenkernel/intern/solidify_nonmanifold.c
+++ b/source/blender/blenkernel/intern/solidify_nonmanifold.c
@@ -152,7 +152,7 @@ static void get_vgroup(
}
/* NOLINTNEXTLINE: readability-function-size */
-Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
+Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh, bool **r_shell_verts, bool **r_rim_verts)
{
Mesh *result;
@@ -187,8 +187,7 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
const bool do_angle_clamp = solidify_data->flag & MOD_SOLIDIFY_OFFSET_ANGLE_CLAMP;
const bool do_flip = (solidify_data->flag & MOD_SOLIDIFY_FLIP) != 0;
const bool do_rim = solidify_data->flag & MOD_SOLIDIFY_RIM;
- const bool do_shell = ((solidify_data->flag & MOD_SOLIDIFY_RIM) && (solidify_data->flag & MOD_SOLIDIFY_NOSHELL)) ==
- 0;
+ const bool do_shell = solidify_data->flag & MOD_SOLIDIFY_SHELL;
const bool do_clamp = (solidify_data->offset_clamp != 0.0f);
const float bevel_convex = solidify_data->bevel_convex;
@@ -1408,10 +1407,10 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
ml = orig_mloop + mp->loopstart;
for (int j = mp->loopstart; j < loopend; j++, ml++) {
if (defgrp_invert) {
- scalar_vgroup = min_ff(1.0f - solidify_data->selection[i],scalar_vgroup);
+ scalar_vgroup = min_ff(1.0f - solidify_data->distance[i],scalar_vgroup);
}
else {
- scalar_vgroup = min_ff(solidify_data->selection[i], scalar_vgroup);
+ scalar_vgroup = min_ff(solidify_data->distance[i], scalar_vgroup);
}
}
scalar_vgroup = offset_fac_vg + (scalar_vgroup * offset_fac_vg_inv);
@@ -1800,10 +1799,10 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
if (!do_flat_faces) {
//MDeformVert *dv = &dvert[i];
if (defgrp_invert) {
- scalar_vgroup = 1.0f - solidify_data->selection[i];
+ scalar_vgroup = 1.0f - solidify_data->distance[i];
}
else {
- scalar_vgroup = solidify_data->selection[i];
+ scalar_vgroup = solidify_data->distance[i];
}
scalar_vgroup = offset_fac_vg + (scalar_vgroup * offset_fac_vg_inv);
}
@@ -1938,6 +1937,13 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
}
/* Checks that result has dvert data. */
+ //////---->/////
+ *r_shell_verts = MEM_malloc_arrayN(
+ (size_t)result->totvert, sizeof(bool), "shell verts selection in solidify");
+
+ *r_rim_verts = MEM_malloc_arrayN(
+ (size_t)result->totvert, sizeof(bool), "rim verts selection in solidify");
+
if (shell_defgrp_index != -1 || rim_defgrp_index != -1) {
dvert = CustomData_duplicate_referenced_layer(&result->vdata, CD_MDEFORMVERT, result->totvert);
/* If no vertices were ever added to an object's vgroup, dvert might be NULL. */
@@ -1948,6 +1954,7 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
}
result->dvert = dvert;
}
+ //////---->/////
/* Make_new_verts. */
{
@@ -2312,20 +2319,26 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
MEdge *open_face_edge;
uint open_face_edge_index;
if (!do_flip) {
+ //////---->/////
+ (*r_rim_verts)[medge[edge1->new_edge].v1] = true;
if (rim_defgrp_index != -1) {
BKE_defvert_ensure_index(&result->dvert[medge[edge1->new_edge].v1], rim_defgrp_index)
->weight = 1.0f;
}
+ //////---->/////
CustomData_copy_data(&mesh->ldata, &result->ldata, loop1, (int)loop_index, 1);
mloop[loop_index].v = medge[edge1->new_edge].v1;
mloop[loop_index++].e = edge1->new_edge;
if (!v2_singularity) {
open_face_edge_index = edge1->link_edge_groups[1]->open_face_edge;
+ //////---->/////
+ (*r_rim_verts)[medge[edge1->new_edge].v2] = true;
if (rim_defgrp_index != -1) {
BKE_defvert_ensure_index(&result->dvert[medge[edge1->new_edge].v2], rim_defgrp_index)
->weight = 1.0f;
}
+ //////---->/////
CustomData_copy_data(&mesh->ldata, &result->ldata, loop2, (int)loop_index, 1);
mloop[loop_index].v = medge[edge1->new_edge].v2;
open_face_edge = medge + open_face_edge_index;
@@ -2336,21 +2349,26 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
mloop[loop_index++].e = edge2->link_edge_groups[1]->open_face_edge;
}
}
-
+ //////---->/////
+ (*r_rim_verts)[medge[edge2->new_edge].v2] = true;
if (rim_defgrp_index != -1) {
BKE_defvert_ensure_index(&result->dvert[medge[edge2->new_edge].v2], rim_defgrp_index)
->weight = 1.0f;
}
+ //////---->/////
CustomData_copy_data(&mesh->ldata, &result->ldata, loop2, (int)loop_index, 1);
mloop[loop_index].v = medge[edge2->new_edge].v2;
mloop[loop_index++].e = edge2->new_edge;
if (!v1_singularity) {
open_face_edge_index = edge2->link_edge_groups[0]->open_face_edge;
+ //////---->/////
+ (*r_rim_verts)[medge[edge2->new_edge].v1] = true;
if (rim_defgrp_index != -1) {
BKE_defvert_ensure_index(&result->dvert[medge[edge2->new_edge].v1], rim_defgrp_index)
->weight = 1.0f;
}
+ //////---->/////
CustomData_copy_data(&mesh->ldata, &result->ldata, loop1, (int)loop_index, 1);
mloop[loop_index].v = medge[edge2->new_edge].v1;
open_face_edge = medge + open_face_edge_index;
@@ -2365,10 +2383,13 @@ Mesh *solidify_nonmanifold(const SolidifyData *solidify_data, Mesh *mesh)
else {
if (!v1_singularity) {
open_face_edge_index = edge1->link_edge_groups[0]->open_face_edge;
+ //////---->/////
+ (*r_rim_verts)[medge[edge1->new_edge].v1] = true;
if (rim_defgrp_index != -1) {
BKE_defvert_ensure_index(&result->dvert[medge[edge1->new_edge].v1], rim_defgrp_index)
->weight = 1.0f;
}
+ //////---->/////
CustomData_copy_data(&mesh->ldata, &result->ldata, loop1, (int)loop_index,
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list