Skip to content

Instantly share code, notes, and snippets.

@zeffii
Created February 11, 2018 19:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zeffii/06e2b5f6ccda02b2854e004afe039f8f to your computer and use it in GitHub Desktop.
Save zeffii/06e2b5f6ccda02b2854e004afe039f8f to your computer and use it in GitHub Desktop.
leqitor
# This file is part of project Sverchok. It's copyrighted by the contributors
# recorded in the version control history of the file, available from
# its original location https://github.com/nortikin/sverchok/commit/master
#
# SPDX-License-Identifier: GPL3
# License-Filename: LICENSE
import bpy
# import mathutils
# from mathutils import Vector
# from bpy.props import FloatProperty, BoolProperty
from sverchok.node_tree import SverchCustomTreeNode
from sverchok.data_structure import updateNode
def pre_updateNode(self, context):
''' must rebuild for each update'''
self.collection_name.clear()
for node in self.id_data.nodes:
if node.bl_idname == 'ViewerNode2':
self.collection_name.add().name = node.name
# updateNode(self, context)
class SvVDMK2LayerOperatorCallback(bpy.types.Operator):
"""delegate changes to node"""
bl_idname = "nodes.sv_vdmk2_layer_cb"
bl_label = "Sv Ops Layer vd"
fn_name = bpy.props.StringProperty()
group_name = bpy.props.StringProperty()
nt_name = bpy.props.StringProperty()
node_name = bpy.props.StringProperty()
def execute(self, context):
n = context.node
if self.group_name:
getattr(n, self.fn_name)(self.group_name)
else:
getattr(n, self.fn_name)()
return {"FINISHED"}
class SvVDMK2LayerGroup(bpy.types.PropertyGroup):
collection_name = bpy.props.CollectionProperty(type=bpy.types.PropertyGroup)
vd_node_name = bpy.props.StringProperty(update=pre_updateNode)
class SvVDMK2LayerGroupMain(bpy.types.PropertyGroup):
group_name = bpy.props.StringProperty()
group_layer = bpy.props.CollectionProperty(type=SvVDMK2LayerGroup)
class SvVDMK2LayerNode(bpy.types.Node, SverchCustomTreeNode):
''' VDMK layer teste '''
bl_idname = 'SvVDMK2LayerNode'
bl_label = 'VDMK Layers'
bl_icon = 'CAMERA_STEREO'
vd_layer_groups = bpy.props.CollectionProperty(name="Viewer Draw Layers", type=SvVDMK2LayerGroupMain)
def draw_buttons(self, context, layout):
cb = SvVDMK2LayerOperatorCallback.bl_idname
tree = self.id_data
for group in self.vd_layer_groups:
box = layout.box().column(align=True)
box.prop(group, "group_name")
for viewer in group.group_layer:
row = box.row(align=True)
part1 = row.split(0.6)
part1.prop_search(viewer, "vd_node_name", viewer, 'collection_name', icon='OBJECT_DATA', text='')
viewer_node = tree.nodes.get(viewer.vd_node_name)
self.draw_row(part1, viewer_node)
box.separator()
op = box.row().operator(cb, text='', icon='PLUS')
op.fn_name = "ops_add_new_layer"
op.group_name = group.group_name
row = layout.row()
op = row.operator(cb, text='', icon='PLUS')
op.fn_name = "ops_add_new_group"
op.group_name = ''
def draw_row(self, part1, viewer_node):
if not viewer_node:
return
part2 = part1.split(align=True)
part2.prop(viewer_node, "activate", toggle=True, icon='VISIBLE_IPO_ON', text='')
part2.prop(viewer_node, "shading", toggle=True, icon='LAMP_SPOT', text='')
part2.prop(viewer_node, "vertex_colors", text='')
part2.prop(viewer_node, "edge_colors", text='')
part2.prop(viewer_node, "face_colors", text='')
def sv_init(self, context):
self.width = 300
def process(self):
...
def ops_add_new_layer(self, name):
group = [g for g in self.vd_layer_groups if g.group_name == name]
if group and len(group) == 1:
m = group[0].group_layer.add()
m.vd_node_name = ''
def ops_add_new_group(self):
m = self.vd_layer_groups.add()
m.group_name = ''
def ops_activate_helper(self, mode):
for viewer in self.vd_layers:
viewer_node = tree.nodes.get(viewer.vd_node_name)
if viewer_node:
viewer_node.activate = mode
def ops_hide_layers(self):
self.ops_activate_helper(False)
classes = SvVDMK2LayerOperatorCallback, SvVDMK2LayerGroup, SvVDMK2LayerGroupMain, SvVDMK2LayerNode
def register():
_ = [bpy.utils.register_class(cls) for cls in classes]
def unregister():
_ = [bpy.utils.register_class(cls) for cls in reverse(classes)]
if __name__ == '__main__':
try:
register()
except Exception as err:
unregister()
register()
nodes = bpy.data.node_groups['NodeTree'].nodes
newnode = nodes.new('SvVDMK2LayerNode')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment