Geometry Nodes: Node group operators initial phase #108947
|
@ -136,25 +136,28 @@ class NODE_HT_header(Header):
|
|||
layout.prop(snode_id, "use_nodes")
|
||||
|
||||
elif snode.tree_type == 'GeometryNodeTree':
|
||||
layout.prop(snode, "geometry_nodes_type", text="")
|
||||
NODE_MT_editor_menus.draw_collapsible(context, layout)
|
||||
layout.separator_spacer()
|
||||
|
||||
ob = context.object
|
||||
if snode.geometry_nodes_type == 'MODIFIER':
|
||||
ob = context.object
|
||||
|
||||
row = layout.row()
|
||||
if snode.pin:
|
||||
row.enabled = False
|
||||
row.template_ID(snode, "node_tree", new="node.new_geometry_node_group_assign")
|
||||
elif ob:
|
||||
active_modifier = ob.modifiers.active
|
||||
if active_modifier and active_modifier.type == 'NODES':
|
||||
if active_modifier.node_group:
|
||||
row.template_ID(active_modifier, "node_group", new="object.geometry_node_tree_copy_assign")
|
||||
row = layout.row()
|
||||
if snode.pin:
|
||||
row.enabled = False
|
||||
row.template_ID(snode, "node_tree", new="node.new_geometry_node_group_assign")
|
||||
elif ob:
|
||||
active_modifier = ob.modifiers.active
|
||||
if active_modifier and active_modifier.type == 'NODES':
|
||||
if active_modifier.node_group:
|
||||
row.template_ID(active_modifier, "node_group", new="object.geometry_node_tree_copy_assign")
|
||||
else:
|
||||
row.template_ID(active_modifier, "node_group", new="node.new_geometry_node_group_assign")
|
||||
else:
|
||||
row.template_ID(active_modifier, "node_group", new="node.new_geometry_node_group_assign")
|
||||
else:
|
||||
row.template_ID(snode, "node_tree", new="node.new_geometry_nodes_modifier")
|
||||
|
||||
row.template_ID(snode, "node_tree", new="node.new_geometry_nodes_modifier")
|
||||
else:
|
||||
layout.template_ID(snode, "node_tree", new="node.new_node_tree")
|
||||
else:
|
||||
# Custom node tree is edited as independent ID block
|
||||
NODE_MT_editor_menus.draw_collapsible(context, layout)
|
||||
|
|
|
@ -127,7 +127,7 @@ static void get_context_path_node_geometry(const bContext &C,
|
|||
SpaceNode &snode,
|
||||
Vector<ui::ContextPathItem> &path)
|
||||
{
|
||||
if (snode.flag & SNODE_PIN) {
|
||||
if (snode.flag & SNODE_PIN || snode.geometry_nodes_type == SNODE_GEOMETRY_OPERATOR) {
|
||||
context_path_add_node_tree_and_node_groups(snode, path);
|
||||
}
|
||||
else {
|
||||
|
|
|
@ -1600,7 +1600,12 @@ typedef struct SpaceNode {
|
|||
/** Texture-from object, world or brush (#eSpaceNode_TexFrom). */
|
||||
short texfrom;
|
||||
/** Shader from object or world (#eSpaceNode_ShaderFrom). */
|
||||
short shaderfrom;
|
||||
char shaderfrom;
|
||||
/**
|
||||
* Whether to edit any geometry node group, or follow the active modifier context.
|
||||
* #SpaceNodeGeometryNodesType.
|
||||
*/
|
||||
char geometry_nodes_type;
|
||||
|
||||
/** Grease-pencil data. */
|
||||
struct bGPdata *gpd;
|
||||
|
@ -1644,6 +1649,12 @@ typedef enum eSpaceNode_ShaderFrom {
|
|||
SNODE_SHADER_LINESTYLE = 2,
|
||||
} eSpaceNode_ShaderFrom;
|
||||
|
||||
/** #SpaceNode.geometry_nodes_type */
|
||||
typedef enum SpaceNodeGeometryNodesType {
|
||||
SNODE_GEOMETRY_MODIFIER = 0,
|
||||
SNODE_GEOMETRY_OPERATOR = 1,
|
||||
} SpaceNodeGeometryNodesType;
|
||||
|
||||
/** #SpaceNode.insert_ofs_dir */
|
||||
enum {
|
||||
SNODE_INSERTOFS_DIR_RIGHT = 0,
|
||||
|
|
|
@ -7382,6 +7382,12 @@ static void rna_def_space_node(BlenderRNA *brna)
|
|||
{0, NULL, 0, NULL, NULL},
|
||||
};
|
||||
|
||||
static const EnumPropertyItem geometry_nodes_type_items[] = {
|
||||
{SNODE_GEOMETRY_MODIFIER, "MODIFIER", 0, "Modifier", ""},
|
||||
{SNODE_GEOMETRY_OPERATOR, "OPERATOR", 0, "Operator", ""},
|
||||
{0, NULL, 0, NULL, NULL},
|
||||
};
|
||||
|
||||
static const EnumPropertyItem backdrop_channels_items[] = {
|
||||
{SNODE_USE_ALPHA,
|
||||
"COLOR_ALPHA",
|
||||
|
@ -7436,6 +7442,13 @@ static void rna_def_space_node(BlenderRNA *brna)
|
|||
RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_ID);
|
||||
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "geometry_nodes_type", PROP_ENUM, PROP_NONE);
|
||||
RNA_def_property_enum_sdna(prop, NULL, "geometry_nodes_type");
|
||||
RNA_def_property_enum_items(prop, geometry_nodes_type_items);
|
||||
RNA_def_property_ui_text(prop, "Geometry Nodes Type", "");
|
||||
RNA_def_property_translation_context(prop, BLT_I18NCONTEXT_ID_ID);
|
||||
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_NODE, NULL);
|
||||
|
||||
prop = RNA_def_property(srna, "id", PROP_POINTER, PROP_NONE);
|
||||
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
|
||||
RNA_def_property_ui_text(prop, "ID", "Data-block whose nodes are being edited");
|
||||
|
|
|
@ -31,6 +31,12 @@ bNodeTreeType *ntreeType_Geometry;
|
|||
static void geometry_node_tree_get_from_context(
|
||||
const bContext *C, bNodeTreeType * /*treetype*/, bNodeTree **r_ntree, ID **r_id, ID **r_from)
|
||||
{
|
||||
const SpaceNode *snode = CTX_wm_space_node(C);
|
||||
if (snode->geometry_nodes_type == SNODE_GEOMETRY_OPERATOR) {
|
||||
*r_ntree = snode->nodetree;
|
||||
return;
|
||||
}
|
||||
|
||||
const Scene *scene = CTX_data_scene(C);
|
||||
ViewLayer *view_layer = CTX_data_view_layer(C);
|
||||
BKE_view_layer_synced_ensure(scene, view_layer);
|
||||
|
|
Loading…
Reference in New Issue