Source code for compas_rhino.conduits.labels


from __future__ import print_function
from __future__ import absolute_import
from __future__ import division

from System.Drawing.Color import FromArgb
from Rhino.Geometry import Point3d

from compas_rhino.conduits.base import BaseConduit
from compas.utilities import color_to_rgb


__all__ = ['LabelsConduit']


[docs]class LabelsConduit(BaseConduit): """A Rhino display conduit for labels. Parameters ---------- labels : list of 2-tuple A list of label tuples. Each tuple contains a position and text for the label. color : list of 2-tuple, optional The colors of the labels. Each color is a tuple with a background color and a text color. Default is ``((0, 0, 0), (255, 255, 255))`` for all labels. Attributes ---------- color : list of RGB colors A color specification per label. labels : list A list of label tuples. Each tuple contains a position and text for the label. Examples -------- .. code-block:: python from random import randint from compas_rhino.conduits import LabelsConduit labels = [([1.0 * randint(0, 100), 1.0 * randint(0, 100), 0.0], str(i)) for i in range(100)] conduit = LabelsConduit(labels) with conduit.enabled(): for i in range(100): conduit.labels = [([1.0 * randint(0, 100), 1.0 * randint(0, 100), 0.0], str(i)) for i in range(100)] conduit.redraw(pause=0.1) """ def __init__(self, labels, color=None, **kwargs): super(LabelsConduit, self).__init__(**kwargs) self._default_color = FromArgb(0, 0, 0) self._default_textcolor = FromArgb(255, 255, 255) self._color = None self.labels = labels or [] self.color = color @property def color(self): return self._colors @color.setter def color(self, color): if color: color[:] = [(FromArgb(* color_to_rgb(bgc)), FromArgb(* color_to_rgb(tc))) for bgc, tc in color] l = len(self.labels) # noqa: E741 c = len(color) if c < l: color += [(self._default_color, self._default_textcolor) for i in range(l - c)] elif c > l: color[:] = color[:l] self._color = color def DrawForeground(self, e): for i, (pos, text) in enumerate(self.labels): if self.color: color, textcolor = self.color[i] e.Display.DrawDot(Point3d(*pos), text, color, textcolor) else: e.Display.DrawDot(Point3d(*pos), text, self._default_color, self._default_textcolor)
# ============================================================================== # Main # ============================================================================== if __name__ == "__main__": pass