Не подтверждена Коммит 2febe9ed создал по автору Dealga McArdle's avatar Dealga McArdle Зафиксировано автором GitHub
Просмотр файлов

start pr for textrendering in idxviewer (#2535)

* start pr for textrendering in idxviewer

* introduce space for parsing input text into usable form

* sorry.. no this is not a priority

* add comment for later

* least invasive approach.. not optimal

* small error fix

* add custom elem+prolongue code... but might be stupid ...

* untested autolengthen text items to match input verts

* complete prelim text socket implementation
владелец 9f0d4322
......@@ -87,6 +87,7 @@ class SvIDXViewer28(bpy.types.Node, SverchCustomTreeNode):
inew('SvStringsSocket', 'edges')
inew('SvStringsSocket', 'faces')
inew('SvMatrixSocket', 'matrix')
inew('SvStringsSocket', 'text')
def draw_buttons(self, context, layout):
......@@ -187,7 +188,7 @@ class SvIDXViewer28(bpy.types.Node, SverchCustomTreeNode):
inputs = self.inputs
geom = lambda: None
for socket in ['matrix', 'verts', 'edges', 'faces']:
for socket in ['matrix', 'verts', 'edges', 'faces', 'text']:
input_stream = inputs[socket].sv_get(default=[])
if socket == 'verts' and input_stream:
......@@ -212,16 +213,24 @@ class SvIDXViewer28(bpy.types.Node, SverchCustomTreeNode):
display_topology.vert_data = []
display_topology.edge_data = []
display_topology.face_data = []
display_topology.text_data = []
concat_vert = display_topology.vert_data.append
concat_edge = display_topology.edge_data.append
concat_face = display_topology.face_data.append
concat_text = display_topology.text_data.append
for obj_index, final_verts in enumerate(geom.verts):
# can't display vert idx and text simultaneously - ...
if self.display_vert_index:
for idx, vpos in enumerate(final_verts):
concat_vert((idx, vpos))
if geom.text:
text_items = self.get_text_of_correct_length(obj_index, geom, len(final_verts))
for text_item, vpos in zip(text_items, final_verts):
concat_text(text_item)
if self.display_edge_index and obj_index < len(geom.edges):
for edge_index, (idx1, idx2) in enumerate(geom.edges[obj_index]):
......@@ -236,6 +245,24 @@ class SvIDXViewer28(bpy.types.Node, SverchCustomTreeNode):
return display_topology
def get_text_of_correct_length(self, obj_index, geom, num_elements_to_fill):
""" get text elements, and extend if needed"""
if obj_index < len(geom.text):
text_items = geom.text[obj_index]
else:
text_items = geom.text[len(geom.text)-1]
if not (len(text_items) == num_elements_to_fill):
# ---- this doesn't touch the data, but returns a copy, or a modified copy -----
if len(text_items) < num_elements_to_fill:
return text_items + [text_items[-1], ] * (num_elements_to_fill - len(text_items))
else:
return text_items[:num_elements_to_fill]
return text_items
def process(self):
n_id = node_id(self)
callback_disable(n_id)
......
......@@ -123,7 +123,7 @@ def draw_indices_2D(context, args):
x = region_mid_width + region_mid_width * (vec_4d.x / vec_4d.w)
y = region_mid_height + region_mid_height * (vec_4d.y / vec_4d.w)
# ''' draw text '''
# ---- draw text ----
index_str = str(index)
txt_width, txt_height = blf.dimensions(0, index_str)
blf.position(0, x - (txt_width / 2), y - (txt_height / 2), 0)
......@@ -132,8 +132,12 @@ def draw_indices_2D(context, args):
if draw_bface:
blf.color(font_id, *vert_idx_color)
for vidx in geom.vert_data:
draw_index(*vidx)
if geom.vert_data and geom.text_data:
for text_item, (idx, location) in zip(geom.text_data, geom.vert_data):
draw_index(text_item, location)
else:
for vidx in geom.vert_data:
draw_index(*vidx)
blf.color(font_id, *edge_idx_color)
for eidx in geom.edge_data:
......
Поддерживает Markdown
0% или .
You are about to add 0 people to the discussion. Proceed with caution.
Сначала завершите редактирование этого сообщения!
Пожалуйста, зарегистрируйтесь или чтобы прокомментировать