Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - страница 38

стр.

>


>    filepath = bpy.props.StringProperty(

>        name="File Path",

>        description="File path used for exporting the simple OBJ file",

>        maxlen= 1024, default= "")


>    rot90 = bpy.props.BoolProperty(

>        name = "Rotate 90 degrees",

>        description="Rotate mesh to Y up",

>        default = True)


>    scale = bpy.props.FloatProperty(

>        name = "Scale",

>        description="Scale mesh",

>        default = 0.1, min = 0.001, max = 1000.0)  


>    def execute(self, context):

>        print("Load", self.properties.filepath)

>        from . import simple_obj_export

>        simple_obj_export.export_simple_obj(

>            self.properties.filepath,

>            context.object,

>            self.rot90,

>            1.0/self.scale)

> return {'FINISHED'}  


>    def invoke(self, context, event):

>        context.window_manager.fileselect_add(self)

>        return {'RUNNING_MODAL'}  


>#

># Регистрация

># 


>def menu_func_import(self, context):

>    self.layout.operator(IMPORT_OT_simple_obj.bl_idname, text="Simple OBJ (.obj)...")  


>def menu_func_export(self, context):

>    self.layout.operator(EXPORT_OT_simple_obj.bl_idname, text="Simple OBJ (.obj)...")  


>def register():

>    bpy.utils.register_module(__name__)

>    bpy.types.INFO_MT_file_import.append(menu_func_import)

>    bpy.types.INFO_MT_file_export.append(menu_func_export)  


>def unregister():

>    bpy.utils.unregister_module(__name__)

>    bpy.types.INFO_MT_file_import.remove(menu_func_import)

>    bpy.types.INFO_MT_file_export.remove(menu_func_export)  


>if __name__ == "__main__":

>    register()




Симуляции

В этом разделе мы обращаемся к потенциалу симуляций Блендера из Питона. Некоторые из примеров были вдохновлены книгой Bounce, Tumble and Splash Тони Муллена (ищите в Сети великолепный перевод от Morthan'а, пользуясь случаем, передаю ему большое СПАСИБО! - прим. пер.). Однако, большинство рендеров не выглядят так же хорошо, как в книге Муллена, так как целью этих заметок не было найти оптимальный способ для настройки параметров, а скорее чтобы показать, как их можно настраивать из Питона.


Частицы

Эта программа добавляет две системы частиц.



>#---------------------------------------------------

># File particle.py

>#---------------------------------------------------

>import bpy, mathutils, math

>from mathutils import Vector, Matrix

>from math import pi  


>def run(origo):

>    # Добавление меша эмиттера

>    origin = Vector(origo)

>    bpy.ops.mesh.primitive_plane_add(location=origin)

>    emitter = bpy.context.object  


>    # --- Система частиц 1: Падение и сдувание капель ---  


>    # Добавление первой системы частиц

>    bpy.ops.object.particle_system_add()

>    psys1 = emitter.particle_systems[-1]

>    psys1.name = 'Drops' 


>    # Эмиссия, испускание

>    pset1 = psys1.settings

>    pset1.name = 'DropSettings'

>    pset1.frame_start = 40

>    pset1.frame_end = 200

>    pset1.lifetime = 50

>    pset1.lifetime_random = 0.4

>    pset1.emit_from = 'FACE'

>    pset1.use_render_emitter = True

>    pset1.object_align_factor = (0,0,1)  


>    # Физика

>    pset1.physics_type = 'NEWTON'

>    pset1.mass = 2.5

>    pset1.particle_size = 0.3

>    pset1.use_multiply_size_mass = True  


>    # Веса эффекторов

>    ew = pset1.effector_weights

>    ew.gravity = 1.0

>    ew.wind = 1.0 


>    # Дочерние частицы

>    pset1.child_nbr = 10

>    pset1.rendered_child_count = 10

>    pset1.child_type = 'SIMPLE'  


>    # Отображение и рендер

>    pset1.draw_percentage = 100

>    pset1.draw_method = 'CROSS'

>    pset1.material = 1

>    pset1.particle_size = 0.1

>    pset1.render_type = 'HALO'

>    pset1.render_step = 3 


>    # ------------ Эффектор ветра ----- 


>    # Добавление эффектора ветра

>    bpy.ops.object.effector_add(

>        type='WIND',

>        enter_editmode=False,

>        location = origin - Vector((0,3,0)),

>        rotation = (-pi/2, 0, 0))

>    wind = bpy.context.object  


>    # Настройки полей

>    fld = wind.field

>    fld.strength = 2.3

>    fld.noise = 3.2

>    fld.flow = 0.3  


>    # --- Система частиц 2: Обезьяны на ветру ---- 


>    # Добавление обезьяны, используемой как объект размножения

>    # Скрытие обезьяны в слое 2

>    layers = 20*[False]