[Bf-blender-cvs] [e910ac7c3d2] sculpt-mode-features: disabling an operand now skips unnecessary calculations

Martin Felke noreply at git.blender.org
Wed Apr 10 00:44:21 CEST 2019


Commit: e910ac7c3d2d5adc514ce3d78b15ef08b75c57a5
Author: Martin Felke
Date:   Wed Apr 10 00:42:48 2019 +0200
Branches: sculpt-mode-features
https://developer.blender.org/rBe910ac7c3d2d5adc514ce3d78b15ef08b75c57a5

disabling an operand now skips unnecessary calculations

useful when transforming the disabled operand for example

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

M	intern/openvdb/intern/openvdb_level_set.cc
M	source/blender/editors/object/object_modifier.c
M	source/blender/makesrna/intern/rna_modifier.c
M	source/blender/modifiers/intern/MOD_remesh.c

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

diff --git a/intern/openvdb/intern/openvdb_level_set.cc b/intern/openvdb/intern/openvdb_level_set.cc
index 280b008f369..c95cbceb10f 100644
--- a/intern/openvdb/intern/openvdb_level_set.cc
+++ b/intern/openvdb/intern/openvdb_level_set.cc
@@ -119,8 +119,8 @@ void OpenVDBLevelSet::OpenVDB_level_set_filter(OpenVDBLevelSet_FilterType filter
 }
 openvdb::FloatGrid::Ptr OpenVDBLevelSet::OpenVDB_CSG_operation(openvdb::FloatGrid::Ptr gridA, openvdb::FloatGrid::Ptr gridB, OpenVDBLevelSet_CSGOperation operation)
 {
-	openvdb::FloatGrid::Ptr gridA_copy = gridA->deepCopy();
-	openvdb::FloatGrid::Ptr gridB_copy = gridB->deepCopy();
+	openvdb::FloatGrid::Ptr gridA_copy = gridA;//->deepCopy();
+	openvdb::FloatGrid::Ptr gridB_copy = gridB;//->deepCopy();
 
 	switch (operation) {
 		case OPENVDB_LEVELSET_CSG_UNION:
diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c
index 5babeed6b9b..b40df6158b7 100644
--- a/source/blender/editors/object/object_modifier.c
+++ b/source/blender/editors/object/object_modifier.c
@@ -2413,6 +2413,7 @@ static bool remesh_csg_poll(bContext *C)
 static int remesh_csg_add_exec(bContext *C, wmOperator *op)
 {
 	Object *ob = ED_object_active_context(C);
+	Main *bmain = CTX_data_main(C);
 	RemeshModifierData *rmd = (RemeshModifierData *)edit_modifier_property_get(op, ob, eModifierType_Remesh);
 
 	if (rmd == NULL) {
@@ -2425,6 +2426,11 @@ static int remesh_csg_add_exec(bContext *C, wmOperator *op)
 	vcob->flag |= MOD_REMESH_CSG_SYNC_VOXEL_SIZE;
 	BLI_addtail(&rmd->csg_operands, vcob);
 
+	if (BLI_listbase_is_single(&rmd->csg_operands)) {
+		/*trigger update to detach modifier transform relation from modifier */
+		DEG_relations_tag_update(bmain);
+	}
+
 	DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE);
 	WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
 
@@ -2459,6 +2465,7 @@ void REMESH_OT_csg_add(wmOperatorType *ot)
 static int remesh_csg_remove_exec(bContext *C, wmOperator *op)
 {
 	Object *ob = ED_object_active_context(C);
+	Main *bmain = CTX_data_main(C);
 	RemeshModifierData *rmd = (RemeshModifierData *)edit_modifier_property_get(op, ob, eModifierType_Remesh);
 	int index = RNA_int_get(op->ptr, "index");
 
@@ -2471,6 +2478,11 @@ static int remesh_csg_remove_exec(bContext *C, wmOperator *op)
 		BLI_remlink(&rmd->csg_operands, vcob);
 	}
 
+	if (BLI_listbase_is_empty(&rmd->csg_operands)) {
+		/*trigger update to detach modifier transform relation from modifier */
+		DEG_relations_tag_update(bmain);
+	}
+
 	DEG_id_tag_update(&ob->id, ID_RECALC_GEOMETRY | ID_RECALC_COPY_ON_WRITE);
 	WM_event_add_notifier(C, NC_OBJECT | ND_MODIFIER, ob);
 
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index 8477485681a..6084d1499fb 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -4285,11 +4285,11 @@ static void rna_def_modifier_remesh(BlenderRNA *brna)
 	prop = RNA_def_property(srna, "enabled", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_REMESH_CSG_OBJECT_ENABLED);
 	RNA_def_property_ui_text(prop, "Enabled", "Consider this object as part of the csg operations");
-	RNA_def_property_update(prop, 0, "rna_Modifier_update");
+	RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
 
 	prop = RNA_def_property(srna, "sync_voxel_size", PROP_BOOLEAN, PROP_NONE);
 	RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_REMESH_CSG_SYNC_VOXEL_SIZE);
-	RNA_def_property_ui_text(prop, "Sync Voxel Size", "Consider this object as part of the csg operations");
+	RNA_def_property_ui_text(prop, "Sync Voxel Size", "Keep voxel size in sync");
 	RNA_def_property_update(prop, 0, "rna_Modifier_update");
 }
 
diff --git a/source/blender/modifiers/intern/MOD_remesh.c b/source/blender/modifiers/intern/MOD_remesh.c
index 5d6d7296147..7259745a509 100644
--- a/source/blender/modifiers/intern/MOD_remesh.c
+++ b/source/blender/modifiers/intern/MOD_remesh.c
@@ -385,13 +385,16 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
 
 	for (vcob = rmd->csg_operands.first; vcob; vcob = vcob->next)
 	{
-		if (vcob->object != NULL) {
+		if (vcob->object && (vcob->flag & MOD_REMESH_CSG_OBJECT_ENABLED)) {
 			DEG_add_object_relation(ctx->node, vcob->object, DEG_OB_COMP_TRANSFORM, "Remesh Modifier");
 			DEG_add_object_relation(ctx->node, vcob->object, DEG_OB_COMP_GEOMETRY, "Remesh Modifier");
 		}
 	}
-	/* We need own transformation as well. */
-	DEG_add_modifier_to_transform_relation(ctx->node, "Remesh Modifier");
+
+	if (rmd->csg_operands.first) {
+		/* We need own transformation as well in case we have operands */
+		DEG_add_modifier_to_transform_relation(ctx->node, "Remesh Modifier");
+	}
 }
 
 static void copyData(const ModifierData *md_src, ModifierData *md_dst, const int flag)



More information about the Bf-blender-cvs mailing list