diff --git a/nodes/text/gtext.py b/nodes/text/gtext.py index 0d93580d09cf83aea82634774cb36f0f7db54a15..e672447211ad1501ff1283345cb22a503734db7b 100644 --- a/nodes/text/gtext.py +++ b/nodes/text/gtext.py @@ -20,7 +20,7 @@ import ast import os import bpy -from bpy.props import IntProperty, IntVectorProperty, StringProperty +from bpy.props import IntProperty, IntVectorProperty, StringProperty, FloatVectorProperty from mathutils import Vector from sverchok.node_tree import SverchCustomTreeNode @@ -51,6 +51,14 @@ def analyze_glyphs(fdict): fdict = openjson_asdict('gtext_font.dict') fdict_sizes = analyze_glyphs(fdict) +def get_palette(tree=None, palette_name=None): + palettes = tree.grease_pencil.palettes + if not palette_name in palettes: + palette = palettes.new(palette_name) + else: + palette = palettes.get(palette_name) + return palette + def generate_greasepencil(node, text, col, pos, fontdict): @@ -75,15 +83,27 @@ def generate_greasepencil(node, text, col, pos, fontdict): nt.grease_pencil = bpy.data.grease_pencil[grease_pencil_name] gp = nt.grease_pencil + palette = get_palette(tree=nt, palette_name='sv_palette') + node_specific_color = 'gt_col_' + node.name + if not node_specific_color in palette.colors: + named_color = palette.colors.new() + named_color.color = node.stroke_color + named_color.name = node_specific_color + else: + if node.stroke_color != palette.colors[node_specific_color].color: + palette.colors[node_specific_color].color = node.stroke_color + + + # get grease pencil layer if not (node_name in gp.layers): layer = gp.layers.new(node_name) layer.frames.new(1) - layer.line_width = 1 else: layer = gp.layers[node_name] layer.frames[0].clear() + layer.line_change = 1.0 for ch in text: if ch == "\n": yof -= line_height @@ -104,8 +124,11 @@ def generate_greasepencil(node, text, col, pos, fontdict): minx, maxx, xwide = fdict_sizes[str(ord(ch))] + node_specific_color = 'gt_col_' + node.name for chain in v: - s = layer.frames[0].strokes.new() + s = layer.frames[0].strokes.new(colorname=node_specific_color) + + s.line_width = 1 s.draw_mode = '2DSPACE' s.points.add(len(chain)) for idx, p in enumerate(chain): @@ -134,49 +157,50 @@ class SverchokGText(bpy.types.Operator): if self.mode == 'clear': node.erase_gtext() if self.mode == 'clipboard': - node.set_gtest() + node.set_gtext() return {'FINISHED'} + + class GTextNode(bpy.types.Node, SverchCustomTreeNode): + def wrapped_update(self, context): + self.draw_gtext() + + ''' G Notes ''' bl_idname = 'GTextNode' bl_label = 'GText' bl_icon = 'OUTLINER_OB_EMPTY' - text = StringProperty(name='text', - default='your text here') - locator = IntVectorProperty(name="locator", description="stores location", - default=(0, 0), size=2) - - text_scale = IntProperty(name="font size", - default=25, - update=updateNode) + text = StringProperty(name='text', default='your text here') + locator = IntVectorProperty(name="locator", description="stores location", default=(0, 0), size=2) + text_scale = IntProperty(name="font size", default=25, update=wrapped_update) + stroke_color = FloatVectorProperty(subtype='COLOR', size=3, min=0, max=1) def draw_buttons(self, context, layout): row = layout.row(align=True) row.operator('node.sverchok_gtext_button', text='Set').mode = 'set' - row.operator('node.sverchok_gtext_button', text='Clear').mode = 'clear' - pass + row.operator('node.sverchok_gtext_button', text='', icon='PASTEDOWN').mode = 'clipboard' + row.operator('node.sverchok_gtext_button', text='', icon='X').mode = 'clear' + row.prop(self, 'stroke_color', text='') + def draw_buttons_ext(self, context, layout): row = layout.row(align=True) - row.operator( - 'node.sverchok_gtext_button', text='Get from Clipboard' - ).mode = 'clipboard' if self.id_data.grease_pencil: gp_layer = self.id_data.grease_pencil.layers.get(self.name) if gp_layer: - layout.prop(gp_layer, 'color') - layout.prop(gp_layer, 'line_width') + # layout.prop(gp_layer, 'color') + # layout.prop(gp_layer, 'line_width') layout.prop(self, 'text_scale') def update(self): pass - def set_gtest(self): + def set_gtext(self): self.text = bpy.context.window_manager.clipboard self.draw_gtext() @@ -196,7 +220,7 @@ class GTextNode(bpy.types.Node, SverchCustomTreeNode): def draw_gtext(self): text = self.text - col = [] + col = self.stroke_color pos = self.location x_offset = 0 diff --git a/ui/nodeview_space_menu.py b/ui/nodeview_space_menu.py index 8808654d0883fda75d9c057c4cfc246a17f1f2e8..d74393870d6bb011d1d279c11a9e854723c2896c 100644 --- a/ui/nodeview_space_menu.py +++ b/ui/nodeview_space_menu.py @@ -105,6 +105,7 @@ class NodeViewMenuTemplate(bpy.types.Menu): def draw(self, context): layout_draw_categories(self.layout, node_cats[self.bl_label]) + # prop_menu_enum(data, property, text="", text_ctxt="", icon='NONE') # quick class factory.