Source code for pi3d.shape.Cuboid

from __future__ import absolute_import, division, print_function, unicode_literals

from pi3d.Buffer import Buffer
from pi3d.Shape import Shape
import logging

LOGGER = logging.getLogger(__name__)

[docs]class Cuboid(Shape): """ 3d model inherits from Shape""" def __init__(self, camera=None, light=None, w=1.0, h=1.0, d=1.0, name="", x=0.0, y=0.0, z=0.0, rx=0.0, ry=0.0, rz=0.0, cx=0.0, cy=0.0, cz=0.0, tw=1.0, th=1.0, td=1.0): """uses standard constructor for Shape extra Keyword arguments: *w* width *h* height *d* depth *tw* scale width *th* scale height *td* scale depth The scale factors are the multiple of the texture to show along that dimension. For no distortion of the image the scale factors need to be proportional to the relative dimension. """ super(Cuboid, self).__init__(camera, light, name, x, y, z, rx, ry, rz, 1.0, 1.0, 1.0, cx, cy, cz) LOGGER.debug("Creating cuboid ...") self.width = w self.height = h self.depth = d self.ssize = 36 ww = w / 2.0 hh = h / 2.0 dd = d / 2.0 #cuboid data - faces are separated out for texturing.. self.vertices = ((-ww, hh, dd), (ww, hh, dd), (ww, -hh, dd), (-ww, -hh, dd), (ww, hh, dd), (ww, hh, -dd), (ww, -hh, -dd), (ww, -hh, dd), (-ww, hh, dd), (-ww, hh, -dd), (ww, hh, -dd), (ww, hh, dd), (ww, -hh, dd), (ww, -hh, -dd), (-ww, -hh, -dd),(-ww, -hh, dd), (-ww, -hh, dd),(-ww, -hh, -dd),(-ww, hh, -dd), (-ww, hh, dd), (-ww, hh, -dd),(ww, hh, -dd), (ww, -hh, -dd), (-ww,-hh,-dd)) self.normals = ((0.0, 0.0, 1), (0.0, 0.0, 1), (0.0, 0.0, 1), (0.0, 0.0, 1), (1, 0.0, 0), (1, 0.0, 0), (1, 0.0, 0), (1, 0.0, 0), (0.0, 1, 0), (0.0, 1, 0), (0.0, 1, 0), (0.0, 1, 0), (0.0, -1, 0), (0,- 1, 0), (0.0, -1, 0), (0.0, -1, 0), (-1, 0.0, 0), (-1, 0.0, 0), (-1, 0.0, 0), (-1, 0.0, 0), (0.0, 0.0, -1),(0.0, 0.0, -1),(0.0, 0.0, -1), (0.0, 0.0, -1)) self.indices = ((1, 0, 3), (3, 2, 1), (5, 4, 7), (7, 6, 5), (9, 8, 11), (11, 10, 9), (14, 13, 12), (12, 15, 14), (17, 16, 19),(19, 18, 17),(20, 21, 22), (22, 23, 20)) #texture scales (each set to 1 would stretch it over face) tw = tw / 2.0 th = th / 2.0 td = td / 2.0 self.tex_coords = ((0.5+tw, 0.5-th), (0.5-tw, 0.5-th), (0.5-tw, 0.5+th), (0.5+tw, 0.5+th), #tw x th (0.5+td, 0.5-th), (0.5-td, 0.5-th), (0.5-td, 0.5+th), (0.5+td, 0.5+th), # td x th (0.5-tw, 0.5-th), (0.5+tw, 0.5-th), (0.5+tw, 0.5+th), (0.5-tw, 0.5+th), # tw x th (0.5+tw, 0.5+td), (0.5-tw, 0.5+td), (0.5-tw, 0.5-td), (0.5+tw, 0.5-td), # tw x td (0.5-td, 0.5+th), (0.5+td, 0.5+th), (0.5+td, 0.5-th), (0.5-td, 0.5-th), # td x th (0.5-tw, 0.5-th), (0.5+tw, 0.5-th), (0.5+tw, 0.5+th), (0.5-tw, 0.5+th)) # tw x th self.buf = [] self.buf.append(Buffer(self, self.vertices, self.tex_coords, self.indices, self.normals))