Module simple_3dviz.window

Create a window with an attached scene that is rendered in real time.

Expand source code
"""Create a window with an attached scene that is rendered in real time."""

try:
    from .wx import Window
except ImportError:
    raise ImportError("No supported gui library was found. Install wxPython.")


from ..renderables import Renderable
from ..behaviours import Behaviour, SceneInit
from ..behaviours.mouse import MouseRotate, MouseZoom, MousePan
from ..behaviours.keyboard import CameraReport, SortTriangles


def simple_window(init, size=(512, 512)):
    """Return a window with the expected behaviours added.

    Arguments
    ---------
        init: callable that sets up the scene
        size: (w, h) the size of the window

    Returns
    -------
        Window instance
    """
    w = Window(size)
    w.add_behaviours([SceneInit(init), MouseRotate(), MouseZoom(),
                      MousePan(), CameraReport(), SortTriangles()])
    return w


def show(renderables, size=(512, 512), background=(1,)*4, title="Scene",
         camera_position=(-2, -2, -2), camera_target=(0, 0, 0),
         up_vector=(0, 0, 1), light=None, behaviours=[]):
    """Creates a simple window that displays the renderables.

    Arguments
    ---------
        renderables: list[Renderable] the renderables to be displayed in the
                     scene
        size: (w, h) the size of the window
        background: (r, g, b, a) the rgba tuple for the background
        title: str the title of the window
        camera_position: (x, y, z) the position of the camera
        camera_target: (x, y, z) the point that the camera looks at
        up_vector: (x, y, z) defines the floor and sky
        light: (x, y, z) defines the position of the light source
    """
    if not isinstance(renderables, (list, tuple)):
        renderables = [renderables]
    if not all(isinstance(r, Renderable) for r in renderables):
        raise ValueError(("show() expects one or more renderables as "
                          "parameters not {}").format(renderables))

    def init(scene):
        for r in renderables:
            scene.add(r)
        scene.background = background
        scene.camera_position = camera_position
        scene.camera_target = camera_target
        scene.up_vector = up_vector
        if light is not None:
            scene.light = light

    w = simple_window(init, size=size)
    w.add_behaviours(behaviours)
    w.show(title)

Sub-modules

simple_3dviz.window.base
simple_3dviz.window.wx

Functions

def show(renderables, size=(512, 512), background=(1, 1, 1, 1), title='Scene', camera_position=(-2, -2, -2), camera_target=(0, 0, 0), up_vector=(0, 0, 1), light=None, behaviours=[])

Creates a simple window that displays the renderables.

Arguments

renderables: list[Renderable] the renderables to be displayed in the
             scene
size: (w, h) the size of the window
background: (r, g, b, a) the rgba tuple for the background
title: str the title of the window
camera_position: (x, y, z) the position of the camera
camera_target: (x, y, z) the point that the camera looks at
up_vector: (x, y, z) defines the floor and sky
light: (x, y, z) defines the position of the light source
Expand source code
def show(renderables, size=(512, 512), background=(1,)*4, title="Scene",
         camera_position=(-2, -2, -2), camera_target=(0, 0, 0),
         up_vector=(0, 0, 1), light=None, behaviours=[]):
    """Creates a simple window that displays the renderables.

    Arguments
    ---------
        renderables: list[Renderable] the renderables to be displayed in the
                     scene
        size: (w, h) the size of the window
        background: (r, g, b, a) the rgba tuple for the background
        title: str the title of the window
        camera_position: (x, y, z) the position of the camera
        camera_target: (x, y, z) the point that the camera looks at
        up_vector: (x, y, z) defines the floor and sky
        light: (x, y, z) defines the position of the light source
    """
    if not isinstance(renderables, (list, tuple)):
        renderables = [renderables]
    if not all(isinstance(r, Renderable) for r in renderables):
        raise ValueError(("show() expects one or more renderables as "
                          "parameters not {}").format(renderables))

    def init(scene):
        for r in renderables:
            scene.add(r)
        scene.background = background
        scene.camera_position = camera_position
        scene.camera_target = camera_target
        scene.up_vector = up_vector
        if light is not None:
            scene.light = light

    w = simple_window(init, size=size)
    w.add_behaviours(behaviours)
    w.show(title)
def simple_window(init, size=(512, 512))

Return a window with the expected behaviours added.

Arguments

init: callable that sets up the scene
size: (w, h) the size of the window

Returns

Window instance
Expand source code
def simple_window(init, size=(512, 512)):
    """Return a window with the expected behaviours added.

    Arguments
    ---------
        init: callable that sets up the scene
        size: (w, h) the size of the window

    Returns
    -------
        Window instance
    """
    w = Window(size)
    w.add_behaviours([SceneInit(init), MouseRotate(), MouseZoom(),
                      MousePan(), CameraReport(), SortTriangles()])
    return w