Не подтверждена Коммит 6019f8e8 создал по автору Sergey's avatar Sergey Зафиксировано автором GitHub
Просмотр файлов

Scene handler (#4299)

add new scene handler
should update nodes reading data from Blender upon changes in the scene

* remove update live mode

* Remove AnimatableNode mix-in class and create is_animation_dependent property instead. Also add is_scene_dependent property which handled nodes to be updated upon user changes in scene
владелец 86957d45
...@@ -10,11 +10,10 @@ import bpy ...@@ -10,11 +10,10 @@ import bpy
from sverchok.data_structure import repeat_last from sverchok.data_structure import repeat_last
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.utils.handle_blender_data import BlModifier from sverchok.utils.handle_blender_data import BlModifier
class SvCopyModifiersNode(SvAnimatableNode, SverchCustomTreeNode, bpy.types.Node): class SvCopyModifiersNode(SverchCustomTreeNode, bpy.types.Node):
""" """
Triggers: modifiers Triggers: modifiers
Tooltip: Tooltip:
...@@ -23,12 +22,22 @@ class SvCopyModifiersNode(SvAnimatableNode, SverchCustomTreeNode, bpy.types.Node ...@@ -23,12 +22,22 @@ class SvCopyModifiersNode(SvAnimatableNode, SverchCustomTreeNode, bpy.types.Node
bl_label = 'Copy Modifiers' bl_label = 'Copy Modifiers'
bl_icon = 'MODIFIER_DATA' bl_icon = 'MODIFIER_DATA'
@property
def is_scene_dependent(self):
return (not self.inputs['Objects'].is_linked) and (self.inputs['Objects'].object_ref_pointer
or self.object_names)
@property
def is_animation_dependent(self):
return (not self.inputs['Objects'].is_linked) and (self.inputs['Objects'].object_ref_pointer
or self.object_names)
def sv_init(self, context): def sv_init(self, context):
self.inputs.new('SvObjectSocket', 'Object To') self.inputs.new('SvObjectSocket', 'Object To')
self.inputs.new('SvObjectSocket', 'Object From') self.inputs.new('SvObjectSocket', 'Object From')
self.outputs.new('SvObjectSocket', 'Object') self.outputs.new('SvObjectSocket', 'Object')
def draw_buttons(self, context, layout): def sv_draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout) self.draw_animatable_buttons(layout)
def process(self): def process(self):
......
...@@ -20,18 +20,25 @@ ...@@ -20,18 +20,25 @@
import bpy import bpy
from bpy.props import EnumProperty from bpy.props import EnumProperty
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import (updateNode, second_as_first_cycle as safc) from sverchok.data_structure import (updateNode, second_as_first_cycle as safc)
class SvSetCustomMeshNormals(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvSetCustomMeshNormals(bpy.types.Node, SverchCustomTreeNode):
''' Set custom normals for verts or loops ''' ''' Set custom normals for verts or loops '''
bl_idname = 'SvSetCustomMeshNormals' bl_idname = 'SvSetCustomMeshNormals'
bl_label = 'Set Custom Normals' bl_label = 'Set Custom Normals'
bl_icon = 'SNAP_NORMAL' bl_icon = 'SNAP_NORMAL'
sv_icon = 'SV_CUSTOM_NORMALS' sv_icon = 'SV_CUSTOM_NORMALS'
@property
def is_scene_dependent(self):
return (not self.inputs['Objects'].is_linked) and self.inputs['Objects'].object_ref_pointer
@property
def is_animation_dependent(self):
return (not self.inputs['Objects'].is_linked) and self.inputs['Objects'].object_ref_pointer
modes = [ modes = [
("per_Vert", "per Vert", "", 1), ("per_Vert", "per Vert", "", 1),
("per_Loop", "per Loop", "", 2) ("per_Loop", "per Loop", "", 2)
...@@ -39,8 +46,7 @@ class SvSetCustomMeshNormals(bpy.types.Node, SverchCustomTreeNode, SvAnimatableN ...@@ -39,8 +46,7 @@ class SvSetCustomMeshNormals(bpy.types.Node, SverchCustomTreeNode, SvAnimatableN
mode: EnumProperty(items=modes, default='per_Vert', update=updateNode) mode: EnumProperty(items=modes, default='per_Vert', update=updateNode)
def draw_buttons(self, context, layout): def sv_draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
layout.prop(self, "mode", expand=True) layout.prop(self, "mode", expand=True)
def sv_init(self, context): def sv_init(self, context):
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
import bpy import bpy
from bpy.props import EnumProperty, PointerProperty from bpy.props import EnumProperty, PointerProperty
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import (updateNode, no_space, enum_item as e) from sverchok.data_structure import (updateNode, no_space, enum_item as e)
def frame_from_available(idx, layer): def frame_from_available(idx, layer):
...@@ -48,12 +47,14 @@ def frame_from_available2(current_frame, layer): ...@@ -48,12 +47,14 @@ def frame_from_available2(current_frame, layer):
return inp_to_index.get(tval, 0) return inp_to_index.get(tval, 0)
class SvGetAssetPropertiesMK2(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvGetAssetPropertiesMK2(bpy.types.Node, SverchCustomTreeNode):
''' Get Asset Props ''' ''' Get Asset Props '''
bl_idname = 'SvGetAssetPropertiesMK2' bl_idname = 'SvGetAssetPropertiesMK2'
bl_label = 'Object ID Selector+' bl_label = 'Object ID Selector+'
bl_icon = 'SELECT_SET' bl_icon = 'SELECT_SET'
sv_icon = 'SV_OBJECT_ID_SELECTOR' sv_icon = 'SV_OBJECT_ID_SELECTOR'
is_scene_dependent = True
is_animation_dependent = True
def type_filter(self, object): def type_filter(self, object):
return object.type == self.Type return object.type == self.Type
...@@ -196,9 +197,8 @@ class SvGetAssetPropertiesMK2(bpy.types.Node, SverchCustomTreeNode, SvAnimatable ...@@ -196,9 +197,8 @@ class SvGetAssetPropertiesMK2(bpy.types.Node, SverchCustomTreeNode, SvAnimatable
else: else:
return data_list[:] return data_list[:]
def draw_buttons(self, context, layout): def sv_draw_buttons(self, context, layout):
# layout.operator('node.' ,text='refresh from scene') # layout.operator('node.' ,text='refresh from scene')
self.draw_animatable_buttons(layout, icon_only=True)
layout.row().prop(self, "Mode", text="data") layout.row().prop(self, "Mode", text="data")
if self.Mode == 'objects': if self.Mode == 'objects':
......
...@@ -26,7 +26,6 @@ import mathutils ...@@ -26,7 +26,6 @@ import mathutils
from mathutils import Matrix, Vector, Euler, Quaternion, Color from mathutils import Matrix, Vector, Euler, Quaternion, Color
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import Matrix_generate, updateNode, node_id from sverchok.data_structure import Matrix_generate, updateNode, node_id
...@@ -158,12 +157,14 @@ def secondary_type_assesment(item): ...@@ -158,12 +157,14 @@ def secondary_type_assesment(item):
return "SvColorSocket" return "SvColorSocket"
return None return None
class SvGetPropNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvGetPropNode(bpy.types.Node, SverchCustomTreeNode):
''' Get property ''' ''' Get property '''
bl_idname = 'SvGetPropNode' bl_idname = 'SvGetPropNode'
bl_label = 'Get property' bl_label = 'Get property'
bl_icon = 'FORCE_VORTEX' bl_icon = 'FORCE_VORTEX'
sv_icon = 'SV_PROP_GET' sv_icon = 'SV_PROP_GET'
is_animation_dependent = True
is_scene_dependent = True
bad_prop: BoolProperty(default=False) bad_prop: BoolProperty(default=False)
...@@ -198,10 +199,8 @@ class SvGetPropNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): ...@@ -198,10 +199,8 @@ class SvGetPropNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode):
path = parse_to_path(ast_path.body[0].value) path = parse_to_path(ast_path.body[0].value)
return get_object(path) return get_object(path)
def draw_buttons(self, context, layout): def sv_draw_buttons(self, context, layout):
layout.alert = self.bad_prop layout.alert = self.bad_prop
if len(self.outputs) > 0:
self.draw_animatable_buttons(layout, icon_only=True)
layout.prop(self, "prop_name", text="") layout.prop(self, "prop_name", text="")
def process(self): def process(self):
......
...@@ -26,7 +26,6 @@ import mathutils ...@@ -26,7 +26,6 @@ import mathutils
from mathutils import Matrix, Vector, Euler, Quaternion, Color from mathutils import Matrix, Vector, Euler, Quaternion, Color
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import Matrix_generate, updateNode, node_id from sverchok.data_structure import Matrix_generate, updateNode, node_id
...@@ -221,13 +220,21 @@ class SvPropNodeMixin(): ...@@ -221,13 +220,21 @@ class SvPropNodeMixin():
prop_name: StringProperty(name='', update=verify_prop) prop_name: StringProperty(name='', update=verify_prop)
class SvGetPropNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvPropNodeMixin, SvAnimatableNode): class SvGetPropNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvPropNodeMixin):
''' Get property ''' ''' Get property '''
bl_idname = 'SvGetPropNodeMK2' bl_idname = 'SvGetPropNodeMK2'
bl_label = 'Get property MK2' bl_label = 'Get property MK2'
bl_icon = 'FORCE_VORTEX' bl_icon = 'FORCE_VORTEX'
sv_icon = 'SV_PROP_GET' sv_icon = 'SV_PROP_GET'
@property
def is_scene_dependent(self):
return bool(self.outputs)
@property
def is_animation_dependent(self):
return bool(self.outputs)
def execute_inside_throttle(self): # the name of the method does not have any meaning now def execute_inside_throttle(self): # the name of the method does not have any meaning now
s_type = self.type_assesment() s_type = self.type_assesment()
...@@ -237,8 +244,7 @@ class SvGetPropNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvPropNodeMixin, Sv ...@@ -237,8 +244,7 @@ class SvGetPropNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvPropNodeMixin, Sv
elif s_type: elif s_type:
outputs.new(s_type, "Data") outputs.new(s_type, "Data")
def draw_buttons(self, context, layout): def sv_draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
layout.alert = self.bad_prop layout.alert = self.bad_prop
layout.prop(self, "prop_name", text="") layout.prop(self, "prop_name", text="")
......
...@@ -18,16 +18,15 @@ ...@@ -18,16 +18,15 @@
import bpy import bpy
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import updateNode
class SvLatticePropsNode(bpy.types.Node, SverchCustomTreeNode):
class SvLatticePropsNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode):
'''Lattice object props''' '''Lattice object props'''
bl_idname = 'SvLatticePropsNode' bl_idname = 'SvLatticePropsNode'
bl_label = 'Lattice Props' bl_label = 'Lattice Props'
bl_icon = 'MOD_LATTICE' bl_icon = 'MOD_LATTICE'
is_scene_dependent = True
is_animation_dependent = True
def sv_init(self, context): def sv_init(self, context):
self.inputs.new('SvObjectSocket', 'Lattice Object') self.inputs.new('SvObjectSocket', 'Lattice Object')
...@@ -37,9 +36,6 @@ class SvLatticePropsNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) ...@@ -37,9 +36,6 @@ class SvLatticePropsNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode)
self.outputs.new('SvVerticesSocket', 'deformed points') self.outputs.new('SvVerticesSocket', 'deformed points')
self.outputs.new('SvObjectSocket', "Lattice Object") self.outputs.new('SvObjectSocket', "Lattice Object")
def draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
def process(self): def process(self):
lattobj, dep, selm = self.inputs lattobj, dep, selm = self.inputs
Oorp, Odep, obj = self.outputs Oorp, Odep, obj = self.outputs
......
...@@ -22,12 +22,11 @@ import bpy ...@@ -22,12 +22,11 @@ import bpy
from bpy.props import IntProperty, BoolProperty, EnumProperty from bpy.props import IntProperty, BoolProperty, EnumProperty
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import (updateNode, match_long_repeat, fullList, get_data_nesting_level, from sverchok.data_structure import (updateNode, match_long_repeat, fullList, get_data_nesting_level,
describe_data_shape) describe_data_shape)
class SvMaterialIndexNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvMaterialIndexNode(bpy.types.Node, SverchCustomTreeNode):
''' '''
Triggers: material index Triggers: material index
Tooltip: Set material index per object face Tooltip: Set material index per object face
...@@ -37,6 +36,14 @@ class SvMaterialIndexNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode ...@@ -37,6 +36,14 @@ class SvMaterialIndexNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode
bl_label = "Set Material Index" bl_label = "Set Material Index"
bl_icon = 'MATERIAL' bl_icon = 'MATERIAL'
@property
def is_scene_dependent(self):
return (not self.inputs['Object'].is_linked) and self.inputs['Object'].object_ref_pointer
@property
def is_animation_dependent(self):
return (not self.inputs['Object'].is_linked) and self.inputs['Object'].object_ref_pointer
def update_all_faces(self, context): def update_all_faces(self, context):
self.inputs['FaceIndex'].hide_safe = self.all_faces self.inputs['FaceIndex'].hide_safe = self.all_faces
updateNode(self, context) updateNode(self, context)
...@@ -68,8 +75,7 @@ class SvMaterialIndexNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode ...@@ -68,8 +75,7 @@ class SvMaterialIndexNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode
default = 'FACE', default = 'FACE',
update = updateNode) update = updateNode)
def draw_buttons(self, context, layout): def sv_draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
layout.prop(self, "all_faces", toggle=True) layout.prop(self, "all_faces", toggle=True)
if self.all_faces: if self.all_faces:
layout.prop(self, "matching_mode", text='') layout.prop(self, "matching_mode", text='')
......
...@@ -17,12 +17,10 @@ ...@@ -17,12 +17,10 @@
# ##### END GPL LICENSE BLOCK ##### # ##### END GPL LICENSE BLOCK #####
import bpy import bpy
import mathutils
from mathutils import Vector from mathutils import Vector
from mathutils.bvhtree import BVHTree from mathutils.bvhtree import BVHTree
from bpy.props import BoolProperty from bpy.props import BoolProperty
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import (updateNode, match_long_repeat) from sverchok.data_structure import (updateNode, match_long_repeat)
...@@ -49,12 +47,14 @@ class FakeObj(object): ...@@ -49,12 +47,14 @@ class FakeObj(object):
return [True, tv[0], tv[1], tv[2]] return [True, tv[0], tv[1], tv[2]]
class SvOBJRayCastNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvOBJRayCastNodeMK2(bpy.types.Node, SverchCustomTreeNode):
''' RayCast Object ''' ''' RayCast Object '''
bl_idname = 'SvOBJRayCastNodeMK2' bl_idname = 'SvOBJRayCastNodeMK2'
bl_label = 'Object ID Raycast MK2' # new is nonsense name bl_label = 'Object ID Raycast MK2' # new is nonsense name
bl_icon = 'OUTLINER_OB_EMPTY' bl_icon = 'OUTLINER_OB_EMPTY'
sv_icon = 'SV_RAYCASTER_OBJECT_ID' sv_icon = 'SV_RAYCASTER_OBJECT_ID'
is_animation_dependent = True
is_scene_dependent = True
mode: BoolProperty(name='input mode', default=False, update=updateNode) mode: BoolProperty(name='input mode', default=False, update=updateNode)
mode2: BoolProperty(name='output mode', default=False, update=updateNode) mode2: BoolProperty(name='output mode', default=False, update=updateNode)
...@@ -69,15 +69,11 @@ class SvOBJRayCastNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode ...@@ -69,15 +69,11 @@ class SvOBJRayCastNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode
so('SvVerticesSocket', "HitNorm") so('SvVerticesSocket', "HitNorm")
so('SvStringsSocket', "FaceINDEX") so('SvStringsSocket', "FaceINDEX")
# self.inputs[2].prop[2] = -1 # z down # <--- mayybe? # self.inputs[2].prop[2] = -1 # z down # <--- mayybe?
def draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
def draw_buttons_ext(self, context, layout): def sv_draw_buttons_ext(self, context, layout):
row = layout.row(align=True) row = layout.row(align=True)
row.prop(self, "mode", text="In Mode") row.prop(self, "mode", text="In Mode")
row.prop(self, "mode2", text="Out Mode") row.prop(self, "mode2", text="Out Mode")
self.draw_animatable_buttons(layout)
def process(self): def process(self):
o,s,e = self.inputs o,s,e = self.inputs
......
...@@ -23,7 +23,6 @@ from mathutils.geometry import barycentric_transform ...@@ -23,7 +23,6 @@ from mathutils.geometry import barycentric_transform
import numpy as np import numpy as np
from bpy.props import BoolProperty, StringProperty, FloatVectorProperty from bpy.props import BoolProperty, StringProperty, FloatVectorProperty
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import (updateNode) from sverchok.data_structure import (updateNode)
...@@ -52,17 +51,16 @@ def UV(self, object): ...@@ -52,17 +51,16 @@ def UV(self, object):
return [vertices_new, polygons_new] return [vertices_new, polygons_new]
class SvUVPointonMeshNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvUVPointonMeshNode(bpy.types.Node, SverchCustomTreeNode):
''' Transform vectors from UV space to Object space ''' ''' Transform vectors from UV space to Object space '''
bl_idname = 'SvUVPointonMeshNode' bl_idname = 'SvUVPointonMeshNode'
bl_label = 'Find UV Coord on Surface' bl_label = 'Find UV Coord on Surface'
bl_icon = 'GROUP_UVS' bl_icon = 'GROUP_UVS'
is_scene_dependent = True
is_animation_dependent = True
object_ref: StringProperty(default='', update=updateNode) object_ref: StringProperty(default='', update=updateNode)
def draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
def sv_init(self, context): def sv_init(self, context):
si, so = self.inputs.new, self.outputs.new si, so = self.inputs.new, self.outputs.new
si('SvObjectSocket', 'Mesh Object') si('SvObjectSocket', 'Mesh Object')
......
...@@ -22,21 +22,21 @@ from mathutils.geometry import barycentric_transform ...@@ -22,21 +22,21 @@ from mathutils.geometry import barycentric_transform
import numpy as np import numpy as np
from bpy.props import BoolProperty, StringProperty from bpy.props import BoolProperty, StringProperty
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.core.handlers import get_sv_depsgraph, set_sv_depsgraph_need from sverchok.core.handlers import get_sv_depsgraph, set_sv_depsgraph_need
from sverchok.data_structure import (updateNode) from sverchok.data_structure import (updateNode)
class SvSampleUVColorNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvSampleUVColorNode(bpy.types.Node, SverchCustomTreeNode):
''' Sample pixel color on UV texture from surface''' ''' Sample pixel color on UV texture from surface'''
bl_idname = 'SvSampleUVColorNode' bl_idname = 'SvSampleUVColorNode'
bl_label = 'Sample UV Color' bl_label = 'Sample UV Color'
bl_icon = 'UV' bl_icon = 'UV'
is_animation_dependent = True
is_scene_dependent = True
image: StringProperty(default='', update=updateNode) image: StringProperty(default='', update=updateNode)
def draw_buttons(self, context, layout): def sv_draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
ob = self.inputs[0].sv_get(default=[[]])[0] ob = self.inputs[0].sv_get(default=[[]])[0]
if ob and ob.type == 'MESH': if ob and ob.type == 'MESH':
layout.prop_search(self, 'image', bpy.data, "images", text="") layout.prop_search(self, 'image', bpy.data, "images", text="")
......
...@@ -18,16 +18,17 @@ ...@@ -18,16 +18,17 @@
import bpy import bpy
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import (updateNode, match_long_repeat) from sverchok.data_structure import (updateNode, match_long_repeat)
class SvSCNRayCastNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvSCNRayCastNodeMK2(bpy.types.Node, SverchCustomTreeNode):
''' RayCast Scene ''' ''' RayCast Scene '''
bl_idname = 'SvSCNRayCastNodeMK2' bl_idname = 'SvSCNRayCastNodeMK2'
bl_label = 'Scene Raycast MK2' #new is nonsense name bl_label = 'Scene Raycast MK2' #new is nonsense name
bl_icon = 'OUTLINER_OB_EMPTY' bl_icon = 'OUTLINER_OB_EMPTY'
sv_icon = 'SV_RAYCASTER_SCENE' sv_icon = 'SV_RAYCASTER_SCENE'
is_scene_dependent = True
is_animation_dependent = True
def sv_init(self, context): def sv_init(self, context):
si,so = self.inputs.new,self.outputs.new si,so = self.inputs.new,self.outputs.new
...@@ -40,9 +41,6 @@ class SvSCNRayCastNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode ...@@ -40,9 +41,6 @@ class SvSCNRayCastNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode
so("SvObjectSocket", "Objects") so("SvObjectSocket", "Objects")
so("SvMatrixSocket", "hited object matrix") so("SvMatrixSocket", "hited object matrix")
def draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
def process(self): def process(self):
P,N,S,I,O,M = self.outputs P,N,S,I,O,M = self.outputs
rc = [] rc = []
......
...@@ -21,15 +21,16 @@ import bpy ...@@ -21,15 +21,16 @@ import bpy
import numpy as np import numpy as np
from bpy.props import StringProperty, BoolProperty, EnumProperty from bpy.props import StringProperty, BoolProperty, EnumProperty
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import (updateNode, second_as_first_cycle as safc) from sverchok.data_structure import (updateNode, second_as_first_cycle as safc)
class SvSelectMeshVerts(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvSelectMeshVerts(bpy.types.Node, SverchCustomTreeNode):
''' Select vertices of mesh objects ''' ''' Select vertices of mesh objects '''
bl_idname = 'SvSelectMeshVerts' bl_idname = 'SvSelectMeshVerts'
bl_label = 'Select Object Vertices' bl_label = 'Select Object Vertices'
bl_icon = 'EDITMODE_HLT' bl_icon = 'EDITMODE_HLT'
is_animation_dependent = True
is_scene_dependent = True
formula: StringProperty(name='formula', default='val == 0', update=updateNode) formula: StringProperty(name='formula', default='val == 0', update=updateNode)
deselect_all: BoolProperty(name='deselect', default=False, update=updateNode) deselect_all: BoolProperty(name='deselect', default=False, update=updateNode)
...@@ -41,8 +42,7 @@ class SvSelectMeshVerts(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): ...@@ -41,8 +42,7 @@ class SvSelectMeshVerts(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode):
mode: EnumProperty(items=modes, default='vertices', update=updateNode) mode: EnumProperty(items=modes, default='vertices', update=updateNode)
def draw_buttons(self, context, layout): def sv_draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
layout.prop(self, "deselect_all", text="clear selection") layout.prop(self, "deselect_all", text="clear selection")
layout.prop(self, "mode", expand=True) layout.prop(self, "mode", expand=True)
if self.inputs[4].is_linked: if self.inputs[4].is_linked:
......
...@@ -18,10 +18,8 @@ ...@@ -18,10 +18,8 @@
import bpy import bpy
from mathutils import Matrix
from bpy.props import StringProperty from bpy.props import StringProperty
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import (updateNode, second_as_first_cycle as safc) from sverchok.data_structure import (updateNode, second_as_first_cycle as safc)
...@@ -30,7 +28,7 @@ from sverchok.data_structure import (updateNode, second_as_first_cycle as safc) ...@@ -30,7 +28,7 @@ from sverchok.data_structure import (updateNode, second_as_first_cycle as safc)
# pylint: disable=w0613 # pylint: disable=w0613
class SvSetDataObjectNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvSetDataObjectNodeMK2(bpy.types.Node, SverchCustomTreeNode):
""" """
Triggers: obj id set data Triggers: obj id set data
Tooltip: Set Object Properties Tooltip: Set Object Properties
...@@ -41,11 +39,12 @@ class SvSetDataObjectNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvAnimatableN ...@@ -41,11 +39,12 @@ class SvSetDataObjectNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvAnimatableN
bl_label = 'Object ID Set MK2' bl_label = 'Object ID Set MK2'
bl_icon = 'OUTLINER_OB_EMPTY' bl_icon = 'OUTLINER_OB_EMPTY'
sv_icon = 'SV_OBJECT_ID_SET' sv_icon = 'SV_OBJECT_ID_SET'
is_scene_dependent = True
is_animation_dependent = True
formula: StringProperty(name='formula', default='delta_location', update=updateNode) formula: StringProperty(name='formula', default='delta_location', update=updateNode)
def draw_buttons(self, context, layout): def sv_draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
layout.prop(self, "formula", text="") layout.prop(self, "formula", text="")
def sv_init(self, context): def sv_init(self, context):
......
...@@ -13,7 +13,6 @@ import bpy ...@@ -13,7 +13,6 @@ import bpy
from mathutils import Vector from mathutils import Vector
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import updateNode, repeat_last from sverchok.data_structure import updateNode, repeat_last
from sverchok.utils.sv_bmesh_utils import bmesh_from_edit_mesh from sverchok.utils.sv_bmesh_utils import bmesh_from_edit_mesh
...@@ -68,7 +67,7 @@ def set_uv_edit_mode(verts: list, faces: list, mesh: bpy.types.Mesh, uv_name: st ...@@ -68,7 +67,7 @@ def set_uv_edit_mode(verts: list, faces: list, mesh: bpy.types.Mesh, uv_name: st
bml[uv_layer].uv = uv bml[uv_layer].uv = uv
class SvSetCustomUVMap(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvSetCustomUVMap(bpy.types.Node, SverchCustomTreeNode):
""" """
Triggers: Set custom UV map to Blender mesh Triggers: Set custom UV map to Blender mesh
...@@ -79,11 +78,18 @@ class SvSetCustomUVMap(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): ...@@ -79,11 +78,18 @@ class SvSetCustomUVMap(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode):
bl_label = 'Set custom UV map' bl_label = 'Set custom UV map'
bl_icon = 'GROUP_UVS' bl_icon = 'GROUP_UVS'
@property
def is_scene_dependent(self):
return (not self.inputs['Objects'].is_linked) and self.inputs['Objects'].object_ref_pointer
@property
def is_animation_dependent(self):
return (not self.inputs['Objects'].is_linked) and self.inputs['Objects'].object_ref_pointer
uv_name: bpy.props.StringProperty(name='Uv name', default='SVMap', description='Name of UV layer', uv_name: bpy.props.StringProperty(name='Uv name', default='SVMap', description='Name of UV layer',
update=updateNode) update=updateNode)
def draw_buttons(self, context, layout): def sv_draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
layout.prop(self, 'uv_name', text='', icon='GROUP_UVS') layout.prop(self, 'uv_name', text='', icon='GROUP_UVS')
def sv_init(self, context): def sv_init(self, context):
......
...@@ -19,27 +19,27 @@ ...@@ -19,27 +19,27 @@
import bpy import bpy
from bpy.props import StringProperty, BoolProperty, FloatProperty from bpy.props import StringProperty, BoolProperty, FloatProperty
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import (updateNode, second_as_first_cycle) from sverchok.data_structure import (updateNode, second_as_first_cycle)
class SvVertexGroupNodeMK2(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvVertexGroupNodeMK2(bpy.types.Node, SverchCustomTreeNode):
''' Vertex Group mk2''' ''' Vertex Group mk2'''
bl_idname = 'SvVertexGroupNodeMK2' bl_idname = 'SvVertexGroupNodeMK2'
bl_label = 'Vertex group weights' bl_label = 'Vertex group weights'
bl_icon = 'OUTLINER_OB_EMPTY' bl_icon = 'OUTLINER_OB_EMPTY'
sv_icon = 'SV_VERTEX_WEIGHT' sv_icon = 'SV_VERTEX_WEIGHT'
is_animation_dependent = True
is_scene_dependent = True
fade_speed: FloatProperty(name='fade', default=2, update=updateNode) fade_speed: FloatProperty(name='fade', default=2, update=updateNode)
clear: BoolProperty(name='clear w', default=True, update=updateNode) clear: BoolProperty(name='clear w', default=True, update=updateNode)
group_name: StringProperty(default='Sv_VGroup', update=updateNode) group_name: StringProperty(default='Sv_VGroup', update=updateNode)
def draw_buttons(self, context, layout): def sv_draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
layout.prop(self, "group_name", text="") layout.prop(self, "group_name", text="")
def draw_buttons_ext(self, context, layout): def sv_draw_buttons_ext(self, context, layout):
lp = layout.prop lp = layout.prop
lp(self, "clear", text="clear unindexed") lp(self, "clear", text="clear unindexed")
lp(self, "fade_speed", text="Clearing speed") lp(self, "fade_speed", text="Clearing speed")
......
...@@ -21,7 +21,6 @@ from numpy import array ...@@ -21,7 +21,6 @@ from numpy import array
import bpy import bpy
from bpy.props import IntProperty, StringProperty, BoolProperty, FloatProperty, FloatVectorProperty from bpy.props import IntProperty, StringProperty, BoolProperty, FloatProperty, FloatVectorProperty
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import updateNode, node_id, match_long_repeat from sverchok.data_structure import updateNode, node_id, match_long_repeat
from sverchok.utils.pulga_physics_core import pulga_system_init from sverchok.utils.pulga_physics_core import pulga_system_init
...@@ -46,7 +45,7 @@ def fill_past_file(p, location): ...@@ -46,7 +45,7 @@ def fill_past_file(p, location):
text.clear() text.clear()
text.write(''.join(str(p))) text.write(''.join(str(p)))
class SvPulgaPhysicsNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvPulgaPhysicsNode(bpy.types.Node, SverchCustomTreeNode):
''' '''
Triggers: Springs, Cloth Triggers: Springs, Cloth
Tooltip: Physics Engine Tooltip: Physics Engine
...@@ -54,6 +53,7 @@ class SvPulgaPhysicsNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) ...@@ -54,6 +53,7 @@ class SvPulgaPhysicsNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode)
bl_idname = 'SvPulgaPhysicsNode' bl_idname = 'SvPulgaPhysicsNode'
bl_label = 'Pulga Physics Lite' bl_label = 'Pulga Physics Lite'
bl_icon = 'MOD_PHYSICS' bl_icon = 'MOD_PHYSICS'
is_animation_dependent = True
n_id : StringProperty() n_id : StringProperty()
......
...@@ -21,12 +21,11 @@ from numpy import array ...@@ -21,12 +21,11 @@ from numpy import array
import bpy import bpy
from bpy.props import IntProperty, StringProperty, BoolProperty, FloatProperty, FloatVectorProperty from bpy.props import IntProperty, StringProperty, BoolProperty, FloatProperty, FloatVectorProperty
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import updateNode, match_long_repeat from sverchok.data_structure import updateNode, match_long_repeat
from sverchok.utils.pulga_physics_modular_core import pulga_system_init from sverchok.utils.pulga_physics_modular_core import pulga_system_init
class SvPulgaPhysicsSolverNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvPulgaPhysicsSolverNode(bpy.types.Node, SverchCustomTreeNode):
''' '''
Triggers: Simulate Particles Triggers: Simulate Particles
Tooltip: Modular Physics Engine Tooltip: Modular Physics Engine
...@@ -34,6 +33,7 @@ class SvPulgaPhysicsSolverNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatabl ...@@ -34,6 +33,7 @@ class SvPulgaPhysicsSolverNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatabl
bl_idname = 'SvPulgaPhysicsSolverNode' bl_idname = 'SvPulgaPhysicsSolverNode'
bl_label = 'Pulga Physics Solver' bl_label = 'Pulga Physics Solver'
bl_icon = 'MOD_PHYSICS' bl_icon = 'MOD_PHYSICS'
is_animation_dependent = True
iterations: IntProperty( iterations: IntProperty(
name='Iterations', description='Number of Iterations', name='Iterations', description='Number of Iterations',
......
...@@ -6,11 +6,8 @@ ...@@ -6,11 +6,8 @@
# License-Filename: LICENSE # License-Filename: LICENSE
import bpy import bpy
# import mathutils
# from mathutils import Vector
from bpy.props import IntProperty, StringProperty, EnumProperty # FloatProperty, BoolProperty from bpy.props import IntProperty, StringProperty, EnumProperty # FloatProperty, BoolProperty
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import updateNode from sverchok.data_structure import updateNode
from sverchok.utils.sv_operator_mixins import SvGenericCallbackWithParams from sverchok.utils.sv_operator_mixins import SvGenericCallbackWithParams
...@@ -20,7 +17,7 @@ class SvFCurveMK1CB(bpy.types.Operator, SvGenericCallbackWithParams): ...@@ -20,7 +17,7 @@ class SvFCurveMK1CB(bpy.types.Operator, SvGenericCallbackWithParams):
bl_label = "Callback for fcurve sampler node mk1" bl_label = "Callback for fcurve sampler node mk1"
bl_options = {'INTERNAL'} bl_options = {'INTERNAL'}
class SvFCurveInNodeMK1(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvFCurveInNodeMK1(bpy.types.Node, SverchCustomTreeNode):
''' '''
Triggers: FCurve In Triggers: FCurve In
Tooltip: Get result of curve evaluated at frame x Tooltip: Get result of curve evaluated at frame x
...@@ -31,6 +28,7 @@ class SvFCurveInNodeMK1(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): ...@@ -31,6 +28,7 @@ class SvFCurveInNodeMK1(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode):
bl_idname = 'SvFCurveInNodeMK1' bl_idname = 'SvFCurveInNodeMK1'
bl_label = 'F-Curve In' bl_label = 'F-Curve In'
bl_icon = 'FCURVE' bl_icon = 'FCURVE'
is_scene_dependent = True
def wrapped_update(self, context): def wrapped_update(self, context):
...@@ -64,8 +62,7 @@ class SvFCurveInNodeMK1(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): ...@@ -64,8 +62,7 @@ class SvFCurveInNodeMK1(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode):
self.inputs.new("SvStringsSocket", "Frame") self.inputs.new("SvStringsSocket", "Frame")
self.outputs.new("SvStringsSocket", "Evaluated") self.outputs.new("SvStringsSocket", "Evaluated")
def draw_buttons(self, context, layout): def sv_draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
row = layout.row(align=True) row = layout.row(align=True)
row.prop_search(self, 'object_name', bpy.data, 'objects', text='', icon='OBJECT_DATA') row.prop_search(self, 'object_name', bpy.data, 'objects', text='', icon='OBJECT_DATA')
row.operator("node.sv_fcurvenodemk1_callback_with_params", text='', icon="ZOOM_IN").fn_name="add_empty" row.operator("node.sv_fcurvenodemk1_callback_with_params", text='', icon="ZOOM_IN").fn_name="add_empty"
......
...@@ -8,7 +8,6 @@ ...@@ -8,7 +8,6 @@
import bpy import bpy
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import updateNode from sverchok.data_structure import updateNode
from bpy.props import BoolProperty; from bpy.props import BoolProperty;
...@@ -16,7 +15,8 @@ from bpy.props import BoolProperty; ...@@ -16,7 +15,8 @@ from bpy.props import BoolProperty;
# pylint: disable=c0111 # pylint: disable=c0111
# pylint: disable=c0103 # pylint: disable=c0103
class SvCollectionPicker(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode):
class SvCollectionPicker(bpy.types.Node, SverchCustomTreeNode):
""" """
Triggers: SvCollectionPicker Triggers: SvCollectionPicker
...@@ -28,6 +28,8 @@ class SvCollectionPicker(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) ...@@ -28,6 +28,8 @@ class SvCollectionPicker(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode)
bl_idname = 'SvCollectionPicker' bl_idname = 'SvCollectionPicker'
bl_label = 'Collection Picker' bl_label = 'Collection Picker'
bl_icon = 'GROUP' bl_icon = 'GROUP'
is_scene_dependent = True
is_animation_dependent = True
def find_collections(self, object): def find_collections(self, object):
return True return True
...@@ -50,8 +52,7 @@ class SvCollectionPicker(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode) ...@@ -50,8 +52,7 @@ class SvCollectionPicker(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode)
def sv_init(self, context): def sv_init(self, context):
self.outputs.new("SvObjectSocket", "Objects") self.outputs.new("SvObjectSocket", "Objects")
def draw_buttons(self, context, layout): def sv_draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
col = layout.column() col = layout.column()
col.prop_search(self, 'collection', bpy.data, 'collections', text='', icon='GROUP') col.prop_search(self, 'collection', bpy.data, 'collections', text='', icon='GROUP')
layout.prop(self, "show_all_objects") layout.prop(self, "show_all_objects")
......
...@@ -17,11 +17,8 @@ ...@@ -17,11 +17,8 @@
# ##### END GPL LICENSE BLOCK ##### # ##### END GPL LICENSE BLOCK #####
import bpy import bpy
import mathutils
# from bpy.props import FloatProperty, BoolProperty
from sverchok.node_tree import SverchCustomTreeNode from sverchok.node_tree import SverchCustomTreeNode
from sverchok.utils.nodes_mixins.sv_animatable_nodes import SvAnimatableNode
from sverchok.data_structure import updateNode from sverchok.data_structure import updateNode
from sverchok.utils.sv_extended_curve_utils import get_points_bezier, get_points_nurbs, offset from sverchok.utils.sv_extended_curve_utils import get_points_bezier, get_points_nurbs, offset
from sverchok.utils.modules.range_utils import frange_count from sverchok.utils.modules.range_utils import frange_count
...@@ -134,11 +131,13 @@ def interpolate_radii(spline, segments, interpolation_type='LINEAR'): ...@@ -134,11 +131,13 @@ def interpolate_radii(spline, segments, interpolation_type='LINEAR'):
return radii return radii
class SvCurveInputNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): class SvCurveInputNode(bpy.types.Node, SverchCustomTreeNode):
''' Curve data in ''' ''' Curve data in '''
bl_idname = 'SvCurveInputNode' bl_idname = 'SvCurveInputNode'
bl_label = 'Curve Input' bl_label = 'Curve Input'
bl_icon = 'ROOTCURVE' bl_icon = 'ROOTCURVE'
is_scene_dependent = True
is_animation_dependent = True
object_names: bpy.props.CollectionProperty(type=bpy.types.PropertyGroup) object_names: bpy.props.CollectionProperty(type=bpy.types.PropertyGroup)
mode_options = [(k, k, '', i) for i, k in enumerate(["LINEAR", "CATMUL"])] mode_options = [(k, k, '', i) for i, k in enumerate(["LINEAR", "CATMUL"])]
...@@ -158,8 +157,7 @@ class SvCurveInputNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode): ...@@ -158,8 +157,7 @@ class SvCurveInputNode(bpy.types.Node, SverchCustomTreeNode, SvAnimatableNode):
new_o_put("SvStringsSocket", "radii") new_o_put("SvStringsSocket", "radii")
new_o_put("SvMatrixSocket", "matrices") new_o_put("SvMatrixSocket", "matrices")
def draw_buttons(self, context, layout): def sv_draw_buttons(self, context, layout):
self.draw_animatable_buttons(layout, icon_only=True)
layout.prop(self, 'selected_mode', expand=True) layout.prop(self, 'selected_mode', expand=True)
def get_objects(self): def get_objects(self):
......
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать