63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
import bpy
|
|
|
|
from ..bioxelutils.common import get_file_prop, is_incompatible, local_lib_not_updated
|
|
from ..constants import VERSION
|
|
from ast import literal_eval
|
|
from ..bioxelutils.node import assign_node_group, get_node_group
|
|
from ..utils import get_use_link
|
|
|
|
|
|
class AddNode(bpy.types.Operator):
|
|
bl_idname = "bioxelnodes.add_node"
|
|
bl_label = "Add Node"
|
|
bl_options = {"REGISTER", "UNDO"}
|
|
|
|
node_name: bpy.props.StringProperty(
|
|
default='',
|
|
) # type: ignore
|
|
|
|
node_label: bpy.props.StringProperty(
|
|
default=''
|
|
) # type: ignore
|
|
|
|
node_description: bpy.props.StringProperty(
|
|
default="",
|
|
) # type: ignore
|
|
|
|
@property
|
|
def node_type(self):
|
|
return f"BioxelNodes_{self.node_name}"
|
|
|
|
def execute(self, context):
|
|
space = context.space_data
|
|
if space.type != "NODE_EDITOR":
|
|
self.report({"ERROR"}, "Not in node editor.")
|
|
return {'CANCELLED'}
|
|
|
|
if not space.edit_tree.is_editable:
|
|
self.report({"ERROR"}, "Not editable.")
|
|
return {'CANCELLED'}
|
|
|
|
if is_incompatible():
|
|
self.report({"ERROR"},
|
|
"Current addon verison is not compatible to this file. If you insist on editing this file please keep the same addon version.")
|
|
return {'CANCELLED'}
|
|
|
|
get_node_group(self.node_type, get_use_link())
|
|
bpy.ops.node.add_node(
|
|
'INVOKE_DEFAULT',
|
|
type='GeometryNodeGroup',
|
|
use_transform=True
|
|
)
|
|
node = bpy.context.active_node
|
|
assign_node_group(node, self.node_type)
|
|
node.label = self.node_label
|
|
|
|
node.show_options = False
|
|
|
|
if local_lib_not_updated():
|
|
self.report({"WARNING"},
|
|
"Local library version does not match the current addon version, which may cause problems, please save the node library again.")
|
|
|
|
return {"FINISHED"}
|