[Bf-blender-cvs] [aafe1034bbe] functions: store node tree pointer in modifier
Jacques Lucke
noreply at git.blender.org
Tue Feb 12 19:21:36 CET 2019
Commit: aafe1034bbe53b1e63996ec6eec6689ec9e80c8e
Author: Jacques Lucke
Date: Tue Feb 12 19:12:32 2019 +0100
Branches: functions
https://developer.blender.org/rBaafe1034bbe53b1e63996ec6eec6689ec9e80c8e
store node tree pointer in modifier
Unfortunately, there are still issues with the COW system resulting in a crash.
===================================================================
M release/scripts/startup/bl_ui/properties_data_modifier.py
M source/blender/makesdna/DNA_modifier_types.h
M source/blender/makesrna/intern/rna_modifier.c
M source/blender/modifiers/intern/MOD_functiondeform.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index ab277ff8ec4..8ec1feb14ad 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -1636,6 +1636,7 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
def FUNCTION_DEFORM(self,layout, ob, md):
layout.prop(md, "control1")
layout.prop(md, "control2")
+ layout.prop(md, "function_tree")
class DATA_PT_gpencil_modifiers(ModifierButtonsPanel, Panel):
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index ab7f24ddbf0..2ddc8a22c6b 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -1947,6 +1947,7 @@ typedef struct FunctionDeformModifierData {
ModifierData modifier;
float control1;
int control2;
+ struct bNodeTree *function_tree;
} FunctionDeformModifierData;
#endif /* __DNA_MODIFIER_TYPES_H__ */
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index f2fae8a7909..5d5e996216a 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -5077,6 +5077,11 @@ static void rna_def_modifier_function_deform(BlenderRNA *brna)
prop = RNA_def_int(srna, "control2", 0, INT_MIN, INT_MAX, "Control 2", "", -10, 10);
RNA_def_property_update(prop, 0, "rna_Modifier_update");
+
+ prop = RNA_def_property(srna, "function_tree", PROP_POINTER, PROP_NONE);
+ RNA_def_property_flag(prop, PROP_EDITABLE);
+ RNA_def_property_ui_text(prop, "Function Tree", "Function node tree");
+ RNA_def_property_update(prop, 0, "rna_Modifier_dependency_update");
}
void RNA_def_modifier(BlenderRNA *brna)
diff --git a/source/blender/modifiers/intern/MOD_functiondeform.c b/source/blender/modifiers/intern/MOD_functiondeform.c
index 79b93ac4bfb..421a572b2fa 100644
--- a/source/blender/modifiers/intern/MOD_functiondeform.c
+++ b/source/blender/modifiers/intern/MOD_functiondeform.c
@@ -36,6 +36,7 @@
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_scene.h"
+#include "BKE_library_query.h"
#include "BKE_global.h"
#include "BKE_main.h"
@@ -51,14 +52,11 @@
#include "FN_functions.h"
-static bNodeTree *get_node_tree(void)
+static FnFunction get_current_function(FunctionDeformModifierData *fdmd)
{
- return (bNodeTree *)G.main->nodetree.first;
-}
-
-static FnFunction get_current_function(void)
-{
- return FN_testing(get_node_tree());
+ bNodeTree *tree = fdmd->function_tree;
+ if (tree == NULL) return NULL;
+ return FN_testing(tree);
}
static void do_deformation(
@@ -66,8 +64,11 @@ static void do_deformation(
float (*vertexCos)[3],
int numVerts)
{
- FnFunction fn = get_current_function();
- // FnFunction fn = FN_get_generated_function();
+ FnFunction fn = get_current_function(fdmd);
+ if (fn == NULL) {
+ return;
+ }
+
FnCallable fn_call = FN_function_get_callable(fn);
BLI_assert(fn_call);
@@ -124,10 +125,22 @@ static bool dependsOnTime(ModifierData *UNUSED(md))
static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphContext *ctx)
{
- FunctionDeformModifierData *UNUSED(fdmd) = (FunctionDeformModifierData *)md;
+ FunctionDeformModifierData *fdmd = (FunctionDeformModifierData *)md;
+
+ FnFunction fn = get_current_function(fdmd);
+ if (fn) {
+ FN_function_update_dependencies(fn, ctx->node);
+ FN_function_free(fn);
+ }
+}
+
+static void foreachIDLink(
+ ModifierData *md, Object *ob,
+ IDWalkFunc walk, void *userData)
+{
+ FunctionDeformModifierData *fdmd = (FunctionDeformModifierData *)md;
- FnFunction fn = get_current_function();
- FN_function_update_dependencies(fn, ctx->node);
+ walk(userData, ob, (ID **)&fdmd->function_tree, IDWALK_CB_USER);
}
@@ -159,6 +172,6 @@ ModifierTypeInfo modifierType_FunctionDeform = {
/* dependsOnTime */ dependsOnTime,
/* dependsOnNormals */ NULL,
/* foreachObjectLink */ NULL,
- /* foreachIDLink */ NULL,
+ /* foreachIDLink */ foreachIDLink,
/* foreachTexLink */ NULL,
};
\ No newline at end of file
More information about the Bf-blender-cvs
mailing list