[Bf-blender-cvs] [562bcb4] object_nodes: Implementation of the "make dupli" node to generate a single dupli object.
Lukas Tönne
noreply at git.blender.org
Wed Dec 23 12:47:41 CET 2015
Commit: 562bcb4d36a77901f896a0a3c3e743e6f75cf5e5
Author: Lukas Tönne
Date: Wed Dec 23 12:46:36 2015 +0100
Branches: object_nodes
https://developer.blender.org/rB562bcb4d36a77901f896a0a3c3e743e6f75cf5e5
Implementation of the "make dupli" node to generate a single dupli object.
===================================================================
M release/scripts/nodes/instancing_nodes.py
M release/scripts/nodes/node_compiler.py
M source/blender/blenvm/bvm/bvm_eval.cc
M source/blender/blenvm/bvm/bvm_opcode.h
M source/blender/blenvm/compile/bvm_nodegraph.cc
===================================================================
diff --git a/release/scripts/nodes/instancing_nodes.py b/release/scripts/nodes/instancing_nodes.py
index 3bca7f7..1a6341a 100644
--- a/release/scripts/nodes/instancing_nodes.py
+++ b/release/scripts/nodes/instancing_nodes.py
@@ -98,12 +98,40 @@ class MakeDupliNode(InstancingNodeBase, ObjectNode):
bl_idname = 'InstancingMakeDupliNode'
bl_label = 'Make Dupli'
+ bl_id_property_type = 'OBJECT'
+ def bl_id_property_poll(self, ob):
+ return True
+
+ def draw_buttons(self, context, layout):
+ layout.template_ID(self, "id")
+
+ def eval_dependencies(self, depsnode):
+ dob = self.id
+ if dob:
+ # XXX not quite ideal: we need to define a "dependency"
+ # because this puts the dupli object into the globals dict,
+ # even though the duplis don't actually need to be re-evaluated
+ # when this object changes
+ depsnode.add_object_relation(dob, 'GEOMETRY')
+
def init(self, context):
self.inputs.new('TransformSocket', "Transform")
+ self.inputs.new('NodeSocketInt', "Index")
+ self.inputs.new('NodeSocketInt', "Hide")
+ socket = self.inputs.new('NodeSocketInt', "Recursive")
+ socket.default_value = 1
+ self.outputs.new('DupliSocket', "")
def compile(self, compiler):
- #compiler.map_input(0, compiler.graph_output("mesh"))
- print("DDDD")
+ ob = compile_object(compiler, self.id)
+
+ node = compiler.add_node("MAKE_DUPLI")
+ compiler.link(ob, node.inputs["object"])
+ compiler.map_input(0, node.inputs["transform"])
+ compiler.map_input(1, node.inputs["index"])
+ compiler.map_input(2, node.inputs["hide"])
+ compiler.map_input(3, node.inputs["recursive"])
+ compiler.map_output(0, node.outputs[0])
###############################################################################
@@ -139,6 +167,9 @@ def register():
NodeItem("InstancingOutputNode"),
NodeItem(goutput.bl_idname),
]),
+ InstancingNodeCategory("INS_DUPLIS", "Duplis", items=[
+ NodeItem("InstancingMakeDupliNode"),
+ ]),
InstancingNodeCategory("INS_CONVERTER", "Converter", items=[
NodeItem("ObjectSeparateVectorNode"),
NodeItem("ObjectCombineVectorNode"),
diff --git a/release/scripts/nodes/node_compiler.py b/release/scripts/nodes/node_compiler.py
index 153b5e3..655986c 100644
--- a/release/scripts/nodes/node_compiler.py
+++ b/release/scripts/nodes/node_compiler.py
@@ -159,7 +159,7 @@ class NodeCompiler:
@staticmethod
def get_id_key(id_data):
- return BVMEvalGlobals.get_id_key(id_data)
+ return BVMEvalGlobals.get_id_key(id_data) if id_data else 0
###############################################################################
diff --git a/source/blender/blenvm/bvm/bvm_eval.cc b/source/blender/blenvm/bvm/bvm_eval.cc
index 1a231f8..7db1e6c 100644
--- a/source/blender/blenvm/bvm/bvm_eval.cc
+++ b/source/blender/blenvm/bvm/bvm_eval.cc
@@ -304,6 +304,24 @@ static void eval_op_effector_closest_point(float *stack, StackIndex offset_objec
}
}
+static void eval_op_make_dupli(float *stack, StackIndex offset_object, StackIndex offset_transform, StackIndex offset_index,
+ StackIndex offset_hide, StackIndex offset_recursive, StackIndex offset_dupli)
+{
+ PointerRNA object = stack_load_pointer(stack, offset_object);
+ if (!object.data || !RNA_struct_is_a(&RNA_Object, object.type))
+ return;
+
+ DupliList *list = new DupliList(1);
+ Dupli &dupli = list->back();
+ dupli.object = (Object *)object.data;
+ dupli.transform = stack_load_matrix44(stack, offset_transform);
+ dupli.index = stack_load_int(stack, offset_index);
+ dupli.hide = stack_load_int(stack, offset_hide);
+ dupli.recursive = stack_load_int(stack, offset_recursive);
+
+ stack_store_duplis(stack, offset_dupli, list);
+}
+
void EvalContext::eval_instructions(const EvalGlobals *globals, const Function *fn, int entry_point, float *stack) const
{
EvalKernelData kd;
@@ -949,6 +967,18 @@ void EvalContext::eval_instructions(const EvalGlobals *globals, const Function *
break;
}
+ case OP_MAKE_DUPLI: {
+ StackIndex offset_object = fn->read_stack_index(&instr);
+ StackIndex offset_transform = fn->read_stack_index(&instr);
+ StackIndex offset_index = fn->read_stack_index(&instr);
+ StackIndex offset_hide = fn->read_stack_index(&instr);
+ StackIndex offset_recursive = fn->read_stack_index(&instr);
+ StackIndex offset_dupli = fn->read_stack_index(&instr);
+ eval_op_make_dupli(stack, offset_object, offset_transform, offset_index,
+ offset_hide, offset_recursive, offset_dupli);
+ break;
+ }
+
case OP_END:
return;
}
diff --git a/source/blender/blenvm/bvm/bvm_opcode.h b/source/blender/blenvm/bvm/bvm_opcode.h
index fc65540..2838f40 100644
--- a/source/blender/blenvm/bvm/bvm_opcode.h
+++ b/source/blender/blenvm/bvm/bvm_opcode.h
@@ -143,6 +143,8 @@ enum OpCode {
OP_CURVE_PATH,
+ OP_MAKE_DUPLI,
+
OP_END,
// OP_JUMP,
diff --git a/source/blender/blenvm/compile/bvm_nodegraph.cc b/source/blender/blenvm/compile/bvm_nodegraph.cc
index f2cb4be..339b671 100644
--- a/source/blender/blenvm/compile/bvm_nodegraph.cc
+++ b/source/blender/blenvm/compile/bvm_nodegraph.cc
@@ -884,6 +884,8 @@ OpCode get_opcode_from_node_type(const string &node)
NODETYPE(CURVE_PATH);
+ NODETYPE(MAKE_DUPLI);
+
#undef NODETYPE
return OP_NOOP;
@@ -1260,6 +1262,14 @@ static void register_opcode_node_types()
nt->add_output("weight", TYPE_FLOAT);
nt->add_output("tilt", TYPE_FLOAT);
+ nt = NodeGraph::add_function_node_type("MAKE_DUPLI");
+ nt->add_input("object", TYPE_POINTER, PointerRNA_NULL);
+ nt->add_input("transform", TYPE_MATRIX44, matrix44::identity());
+ nt->add_input("index", TYPE_INT, 0);
+ nt->add_input("hide", TYPE_INT, 0);
+ nt->add_input("recursive", TYPE_INT, 1);
+ nt->add_output("dupli", TYPE_DUPLIS);
+
nt = NodeGraph::add_function_node_type("ADD_MATRIX44");
nt->add_input("value_a", TYPE_MATRIX44, matrix44::identity());
nt->add_input("value_b", TYPE_MATRIX44, matrix44::identity());
More information about the Bf-blender-cvs
mailing list