[Bf-blender-cvs] [6c168010010] sculpt-dev: Sculpt: add new bending constraint to cloth filter
Joseph Eagar
noreply at git.blender.org
Mon Oct 11 00:38:30 CEST 2021
Commit: 6c16801001049f624e588b0f698993993737a042
Author: Joseph Eagar
Date: Sun Oct 10 15:38:14 2021 -0700
Branches: sculpt-dev
https://developer.blender.org/rB6c16801001049f624e588b0f698993993737a042
Sculpt: add new bending constraint to cloth filter
===================================================================
M release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
M source/blender/blenkernel/intern/dyntopo.c
M source/blender/editors/sculpt_paint/sculpt.c
M source/blender/editors/sculpt_paint/sculpt_cloth.c
M source/blender/editors/sculpt_paint/sculpt_intern.h
===================================================================
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index e282a0b38ba..58c66f5927e 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -1383,6 +1383,8 @@ class _defs_sculpt:
layout.prop(props, "cloth_damping")
layout.prop(props, "use_face_sets")
layout.prop(props, "use_collisions")
+ layout.prop(props, "use_bending")
+ layout.prop(props, "bending_stiffness")
return dict(idname="builtin.cloth_filter",
label="Cloth Filter",
diff --git a/source/blender/blenkernel/intern/dyntopo.c b/source/blender/blenkernel/intern/dyntopo.c
index 5163568cdf8..f8ca407cc76 100644
--- a/source/blender/blenkernel/intern/dyntopo.c
+++ b/source/blender/blenkernel/intern/dyntopo.c
@@ -3945,7 +3945,7 @@ static void pbvh_bmesh_collapse_edge(PBVH *pbvh,
float(*uv)[2] = alloca(sizeof(float) * 4 * totuv);
do {
- BMLoop *ls2[2] = {l->head.data, l->next->head.data};
+ const void *ls2[2] = {l->head.data, l->next->head.data};
float ws2[2] = {0.5f, 0.5f};
if (!snap) {
@@ -4640,10 +4640,16 @@ static void pbvh_bmesh_collapse_edge1(PBVH *pbvh,
else {
for (int j = 0; j < 3; j++) {
if (BM_edge_is_wire(e_tri[j])) {
- v_conn ? validate_vert_faces(pbvh, pbvh->bm, v_conn, false, false) : NULL;
+ if (v_conn) {
+ validate_vert_faces(pbvh, pbvh->bm, v_conn, false, false);
+ }
+
BM_log_edge_removed(pbvh->bm_log, e_tri[j]);
BM_edge_kill(pbvh->bm, e_tri[j]);
- v_conn ? validate_vert_faces(pbvh, pbvh->bm, v_conn, false, false) : NULL;
+
+ if (v_conn) {
+ validate_vert_faces(pbvh, pbvh->bm, v_conn, false, false);
+ }
}
}
}
@@ -5133,8 +5139,7 @@ cleanup_valence_3_4(EdgeQueueContext *ectx,
int ni2 = BM_ELEM_CD_GET_INT(f, pbvh->cd_face_node_offset);
if (ni2 != DYNTOPO_NODE_NONE) {
- PBVHNode *node2 = pbvh->nodes + ni2;
-
+ // PBVHNode *node2 = pbvh->nodes + ni2;
// BLI_table_gset_remove(node2->bm_unique_verts, v, NULL);
pbvh_bmesh_face_remove(pbvh, f, true, true, true);
@@ -5344,7 +5349,6 @@ static void on_vert_swap(BMVert *v1, BMVert *v2, void *userdata)
{
SwapData *sdata = (SwapData *)userdata;
PBVH *pbvh = sdata->pbvh;
- BMesh *bm = pbvh->bm;
MSculptVert *mv1 = BKE_PBVH_SCULPTVERT(pbvh->cd_sculpt_vert, v1);
MSculptVert *mv2 = BKE_PBVH_SCULPTVERT(pbvh->cd_sculpt_vert, v2);
@@ -5818,7 +5822,6 @@ typedef struct EdgeQueueContext {
/* clear PBVH_UpdateTopology flags */
for (int i = 0; i < pbvh->totnode; i++) {
- BMVert *v;
PBVHNode *node = pbvh->nodes + i;
if (!(node->flag & PBVH_Leaf)) {
@@ -6273,8 +6276,6 @@ static void pbvh_split_edges(EdgeQueueContext *eq_ctx,
node->flag |= node_updateflag;
BLI_table_gset_add(node->bm_unique_verts, newv);
- BMIter iter;
- BMFace *f;
BM_ELEM_CD_SET_INT(newv, pbvh->cd_vert_node_offset, ni);
// BM_ELEM_CD_SET_INT(newv, pbvh->cd_vert_node_offset, -1);
@@ -6314,7 +6315,7 @@ static void pbvh_split_edges(EdgeQueueContext *eq_ctx,
int flen = j;
- if (mask >= ARRAY_SIZE(splitmap)) {
+ if (mask >= (int)ARRAY_SIZE(splitmap)) {
printf("splitmap error!\n");
continue;
}
diff --git a/source/blender/editors/sculpt_paint/sculpt.c b/source/blender/editors/sculpt_paint/sculpt.c
index 62b97f6a49e..c9774205bf3 100644
--- a/source/blender/editors/sculpt_paint/sculpt.c
+++ b/source/blender/editors/sculpt_paint/sculpt.c
@@ -288,7 +288,7 @@ int SCULPT_vertex_count_get(const SculptSession *ss)
return 0;
}
-MSculptVert *SCULPT_vertex_get_mdyntopo(SculptSession *ss, SculptVertRef vertex)
+MSculptVert *SCULPT_vertex_get_mdyntopo(const SculptSession *ss, SculptVertRef vertex)
{
switch (BKE_pbvh_type(ss->pbvh)) {
case PBVH_BMESH: {
@@ -2067,7 +2067,7 @@ static bool neighbor_cache_begin(const SculptSession *ss)
ncache->totvert = totvert;
NeighborCache *old = ss->cache->ncache;
- atomic_cas_ptr(&ss->cache->ncache, NULL, ncache);
+ atomic_cas_ptr((void **)&ss->cache->ncache, NULL, ncache);
if (ss->cache->ncache != ncache) {
// another thread got here first?
@@ -2138,7 +2138,7 @@ static NeighborCacheItem *neighbor_cache_get(const SculptSession *ss,
// another thread got here first
//}
- atomic_cas_ptr(&cache[i], NULL, item);
+ atomic_cas_ptr((void **)&cache[i], NULL, item);
}
return cache[i];
diff --git a/source/blender/editors/sculpt_paint/sculpt_cloth.c b/source/blender/editors/sculpt_paint/sculpt_cloth.c
index 8374d348263..70daf552093 100644
--- a/source/blender/editors/sculpt_paint/sculpt_cloth.c
+++ b/source/blender/editors/sculpt_paint/sculpt_cloth.c
@@ -754,7 +754,7 @@ static void cloth_brush_add_deformation_constraint(SculptClothSimulation *cloth_
cloth_brush_reallocate_constraints(cloth_sim);
}
-ATTR_NO_OPT static void do_cloth_brush_build_constraints_task_cb_ex(
+static void do_cloth_brush_build_constraints_task_cb_ex(
void *__restrict userdata, const int n, const TaskParallelTLS *__restrict UNUSED(tls))
{
SculptThreadedTaskData *data = userdata;
@@ -1617,6 +1617,8 @@ static void do_cloth_brush_solve_simulation_task_cb_ex(
static void cloth_free_tasks(SculptClothSimulation *cloth_sim)
{
+ // printf("Freeing tasks %d\n", BLI_task_parallel_thread_id(NULL));
+
for (int i = 0; i < cloth_sim->tot_constraint_tasks; i++) {
for (int j = 0; j < TOT_CONSTRAINT_TYPES; j++) {
MEM_SAFE_FREE(cloth_sim->constraint_tasks[i].constraints[j]);
@@ -1760,11 +1762,11 @@ static void cloth_sort_constraints_for_tasks(SculptSession *ss,
MEM_SAFE_FREE(vthreads);
}
-ATTR_NO_OPT static void cloth_brush_satisfy_constraints_intern(SculptSession *ss,
- Brush *brush,
- SculptClothSimulation *cloth_sim,
- SculptClothTaskData *task,
- bool no_boundary)
+static void cloth_brush_satisfy_constraints_intern(SculptSession *ss,
+ Brush *brush,
+ SculptClothSimulation *cloth_sim,
+ SculptClothTaskData *task,
+ bool no_boundary)
{
AutomaskingCache *automasking = SCULPT_automasking_active_cache_get(ss);
@@ -2771,6 +2773,7 @@ static int sculpt_cloth_filter_invoke(bContext *C, wmOperator *op, const wmEvent
const float cloth_damping = RNA_float_get(op->ptr, "cloth_damping");
const bool use_collisions = RNA_boolean_get(op->ptr, "use_collisions");
const int pinch_origin = RNA_enum_get(op->ptr, "pinch_origin");
+
ss->filter_cache->cloth_sim = SCULPT_cloth_brush_simulation_create(
ss,
cloth_mass,
@@ -2779,6 +2782,9 @@ static int sculpt_cloth_filter_invoke(bContext *C, wmOperator *op, const wmEvent
use_collisions,
cloth_filter_is_deformation_filter(filter_type));
+ ss->filter_cache->cloth_sim->use_bending = RNA_boolean_get(op->ptr, "use_bending");
+ ss->filter_cache->cloth_sim->bend_stiffness = RNA_float_get(op->ptr, "bending_stiffness");
+
switch (pinch_origin) {
case CLOTH_FILTER_PINCH_ORIGIN_CURSOR:
copy_v3_v3(ss->filter_cache->cloth_sim_pinch_point, SCULPT_active_vertex_co_get(ss));
@@ -2889,4 +2895,8 @@ void SCULPT_OT_cloth_filter(struct wmOperatorType *ot)
false,
"Use Collisions",
"Collide with other collider objects in the scene");
+ ot->prop = RNA_def_boolean(
+ ot->srna, "use_bending", false, "Bending", "Enable bending constraints");
+ ot->prop = RNA_def_float(
+ ot->srna, "bending_stiffness", 0.5f, 0.0f, 1.0f, "Bending Stiffness", "", 0.0f, 1.0f);
}
diff --git a/source/blender/editors/sculpt_paint/sculpt_intern.h b/source/blender/editors/sculpt_paint/sculpt_intern.h
index c9bb873ca8b..9bf519fe9cf 100644
--- a/source/blender/editors/sculpt_paint/sculpt_intern.h
+++ b/source/blender/editors/sculpt_paint/sculpt_intern.h
@@ -250,7 +250,7 @@ float *SCULPT_vertex_origco_get(SculptSession *ss, SculptVertRef vertex);
float *SCULPT_vertex_origno_get(SculptSession *ss, SculptVertRef vertex);
void SCULPT_active_vertex_normal_get(SculptSession *ss, float normal[3]);
-MSculptVert *SCULPT_vertex_get_mdyntopo(SculptSession *ss, SculptVertRef vertex);
+MSculptVert *SCULPT_vertex_get_mdyntopo(const SculptSession *ss, SculptVertRef vertex);
/* Returns PBVH deformed vertices array if shape keys or deform modifiers are used, otherwise
* returns mesh original vertices array. */
More information about the Bf-blender-cvs
mailing list