diff options
author | Dalai Felinto <dalai@blender.org> | 2021-01-19 19:30:44 +0300 |
---|---|---|
committer | Dalai Felinto <dalai@blender.org> | 2021-01-19 19:30:44 +0300 |
commit | 8b777ee6d69d4805c64756cf6a33db894160ce29 (patch) | |
tree | b9d8decb26cf0841fbdc6451c1ad337eda6649b0 /source/blender/makesrna/intern | |
parent | a9203e25a2e1f1489b8a3705f8883cdd86f094c7 (diff) |
Geometry Nodes - Object Info: option to apply obj transform to the geometry
By design the modified object transformations should still work and
affect the geometry nodes results. The current behaviour, however, would
make the geometry from the object info to not be affected by the
modified object transformations. This patch changes that by default.
In a similar fashion the Location, Rotation and Scale sockets outputs
should be aware of whether the output should be in the global space or in the
space of the nodetree.
To solve this, the patch introduces a new transformation space "enum"
where users can pick "Original" or "Relative" space.
Original
--------
Output the geometry relative to the input object transform, and the
location, rotation and scale relative to the world origin.
Relative
--------
Bring the input object geometry, location, rotation and scale into the
modified object maintaining the relative position between the two objects in
the scene.
Relative space violates a bit the design of the nodetree. The geometry in this
case is transformed so that moving the modified object doesn't interfere with
the geometry. This is particularly useful for the boolean node for instance.
"Original" is the default space, but old files are set to "Relative" for
backwards compatibility.
Differential Revision: https://developer.blender.org/D10124
Diffstat (limited to 'source/blender/makesrna/intern')
-rw-r--r-- | source/blender/makesrna/intern/rna_nodetree.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/source/blender/makesrna/intern/rna_nodetree.c b/source/blender/makesrna/intern/rna_nodetree.c index a01f6b2db5d..6480b80056c 100644 --- a/source/blender/makesrna/intern/rna_nodetree.c +++ b/source/blender/makesrna/intern/rna_nodetree.c @@ -494,6 +494,22 @@ static const EnumPropertyItem rna_node_geometry_attribute_input_type_items_no_bo {0, NULL, 0, NULL, NULL}, }; +static const EnumPropertyItem rna_node_geometry_object_info_transform_space_items[] = { + {GEO_NODE_TRANSFORM_SPACE_ORIGINAL, + "ORIGINAL", + 0, + "Original", + "Output the geometry relative to the input object transform, and the location, rotation and " + "scale relative to the world origin"}, + {GEO_NODE_TRANSFORM_SPACE_RELATIVE, + "RELATIVE", + 0, + "Relative", + "Bring the input object geometry, location, rotation and scale into the modified object, " + "maintaining the relative position between the two objects in the scene"}, + {0, NULL, 0, NULL, NULL}, +}; + #endif #undef ITEM_ATTRIBUTE @@ -8846,6 +8862,20 @@ static void def_geo_point_translate(StructRNA *srna) RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_socket_update"); } +static void def_geo_object_info(StructRNA *srna) +{ + PropertyRNA *prop; + + RNA_def_struct_sdna_from(srna, "NodeGeometryObjectInfo", "storage"); + + prop = RNA_def_property(srna, "transform_space", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, rna_node_geometry_object_info_transform_space_items); + RNA_def_property_ui_text(prop, + "Transform Space", + "Determine the transformation applied to vector and geometry outputs"); + RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update"); +} + /* -------------------------------------------------------------------------- */ static void rna_def_shader_node(BlenderRNA *brna) |