Source code for compas_rhino.artists.frameartist


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

import compas_rhino
from ._primitiveartist import PrimitiveArtist


__all__ = ['FrameArtist']


[docs]class FrameArtist(PrimitiveArtist): """Artist for drawing frames. Parameters ---------- frame: :class:`compas.geometry.Frame` A COMPAS frame. scale: float, optional Scale factor that controls the length of the axes. Notes ----- See :class:`compas_rhino.artists.PrimitiveArtist` for all other parameters. Attributes ---------- scale : float Scale factor that controls the length of the axes. Default is ``1.0``. color_origin : tuple of 3 int between 0 abd 255 Default is ``(0, 0, 0)``. color_xaxis : tuple of 3 int between 0 abd 255 Default is ``(255, 0, 0)``. color_yaxis : tuple of 3 int between 0 abd 255 Default is ``(0, 255, 0)``. color_zaxis : tuple of 3 int between 0 abd 255 Default is ``(0, 0, 255)``. Examples -------- .. code-block:: python from compas.geometry import Pointcloud from compas.geometry import Frame import compas_rhino from compas_rhino.artists import FrameArtist pcl = Pointcloud.from_bounds(10, 10, 10, 100) tpl = Frame([0, 0, 0], [1, 0, 0], [0, 1, 0]) compas_rhino.clear_layer("Test::FrameArtist") for point in pcl.points: frame = tpl.copy() frame.point = point artist = FrameArtist(frame, layer="Test::FrameArtist") artist.draw() """ def __init__(self, frame, layer=None, scale=1.0): super(FrameArtist, self).__init__(frame, layer=layer) self.scale = scale or 1.0 self.color_origin = (0, 0, 0) self.color_xaxis = (255, 0, 0) self.color_yaxis = (0, 255, 0) self.color_zaxis = (0, 0, 255)
[docs] def draw(self): """Draw the frame. Returns ------- guids: list The GUIDs of the created Rhino objects. """ points = [] lines = [] origin = list(self.primitive.point) X = list(self.primitive.point + self.primitive.xaxis.scaled(self.scale)) Y = list(self.primitive.point + self.primitive.yaxis.scaled(self.scale)) Z = list(self.primitive.point + self.primitive.zaxis.scaled(self.scale)) points = [{'pos': origin, 'color': self.color_origin}] lines = [ {'start': origin, 'end': X, 'color': self.color_xaxis, 'arrow': 'end'}, {'start': origin, 'end': Y, 'color': self.color_yaxis, 'arrow': 'end'}, {'start': origin, 'end': Z, 'color': self.color_zaxis, 'arrow': 'end'}] guids = compas_rhino.draw_points(points, layer=self.layer, clear=False, redraw=False) guids += compas_rhino.draw_lines(lines, layer=self.layer, clear=False, redraw=False) self._guids = guids return guids
# ============================================================================== # Main # ============================================================================== if __name__ == "__main__": pass