Source code for morse.builder.blenderobjects
import math
from morse.builder.abstractcomponent import AbstractComponent
from morse.builder import bpymorse
[docs]class Mesh(AbstractComponent):
mesh_primitive_add = bpymorse.add_mesh_monkey # you must set it in subclasses
def __init__(self, name):
AbstractComponent.__init__(self)
bpymorse.deselect_all()
self.mesh_primitive_add()
obj = bpymorse.get_first_selected_object()
obj.name = name
# no collision by default for components
obj.game.physics_type = 'NO_COLLISION'
self.set_blender_object(obj)
[docs] def color(self, r=0.1, g=0.1, b=0.1):
if not self._bpy_object.active_material:
self._bpy_object.active_material = bpymorse.create_new_material()
self._bpy_object.active_material.diffuse_color = (r, g, b)
[docs]class Plane(Mesh):
mesh_primitive_add = bpymorse.add_mesh_plane
[docs]class Cube(Mesh):
mesh_primitive_add = bpymorse.add_mesh_cube
[docs]class Sphere(Mesh):
mesh_primitive_add = bpymorse.add_mesh_uv_sphere
[docs]class IcoSphere(Mesh):
mesh_primitive_add = bpymorse.add_mesh_ico_sphere
[docs]class Cylinder(Mesh):
mesh_primitive_add = bpymorse.add_mesh_cylinder
[docs]class Cone(Mesh):
mesh_primitive_add = bpymorse.add_mesh_cone
[docs]class Torus(Mesh):
mesh_primitive_add = bpymorse.add_mesh_torus
[docs]class Empty(Mesh):
mesh_primitive_add = bpymorse.add_object
[docs]class Coordsys(AbstractComponent):
mesh_primitive_add = bpymorse.add_object
def __init__(self, name):
AbstractComponent.__init__(self)
bpymorse.deselect_all()
self.mesh_primitive_add()
obj = bpymorse.get_first_selected_object()
obj.name = name
obj.empty_draw_type = 'ARROWS'
obj.empty_draw_size = 0.1
self.set_blender_object(obj)
[docs]class Spot(AbstractComponent):
def __init__(self, name, lamp_type='SPOT'):
AbstractComponent.__init__(self)
bpymorse.deselect_all()
bpymorse.add_lamp(type=lamp_type)
obj = bpymorse.get_first_selected_object()
obj.name = name
# no collision by default for components
obj.game.physics_type = 'NO_COLLISION'
self.set_blender_object(obj)
# Emit in +X
self.rotate(y=-math.pi/2)
if lamp_type is 'SPOT':
spot = bpymorse.get_last_lamp()
spot.spot_size = math.pi / 2
spot.distance = 10
[docs]class Camera(AbstractComponent):
def __init__(self, name):
AbstractComponent.__init__(self)
bpymorse.deselect_all()
bpymorse.add_camera()
obj = bpymorse.get_first_selected_object()
obj.name = name
# no collision by default for components
obj.game.physics_type = 'NO_COLLISION'
self.set_blender_object(obj)
# Camera look in +Z
self.rotate(y=math.pi, z=math.pi)