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

Тут можно читать онлайн Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - описание и краткое содержание, автор Thomas Larsson, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

Третье издание, расширенное и обновлённое для Blender 2.57

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - читать онлайн бесплатно полную версию (весь текст целиком)

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - читать книгу онлайн бесплатно, автор Thomas Larsson
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

# File import_simple_obj.py

# Простой OBJ-импортёр, который читает только вершины, грани и текстурные вершины

#----------------------------------------------------------

import bpy, os

def import_simple_obj(filepath, rot90, scale):

name = os.path.basename(filepath)

realpath = os.path.realpath(os.path.expanduser(filepath))

fp = open(realpath, 'rU') # Universal read

print('Importing %s' % realpath)

verts = []

faces = []

texverts = []

texfaces = []

for line in fp:

words = line.split()

if len(words) == 0:

pass

elif words[0] == 'v':

(x,y,z) = (float(words[1]), float(words[2]), float(words[3]))

if rot90:

verts.append( (scale*x, -scale*z, scale*y) )

else:

verts.append( (scale*x, scale*y, scale*z) )

elif words[0] == 'vt':

texverts.append( (float(words[1]), float(words[2])) )

elif words[0] == 'f':

(f,tf) = parseFace(words)

faces.append(f)

if tf:

texfaces.append(tf)

else:

pass

print('%s successfully imported' % realpath)

fp.close()

me = bpy.data.meshes.new(name)

me.from_pydata(verts, [], faces)

me.update()

if texverts:

uvtex = me.uv_textures.new()

uvtex.name = name

data = uvtex.data

for n in range(len(texfaces)):

tf = texfaces[n]

data[n].uv1 = texverts[tf[0]]

data[n].uv2 = texverts[tf[1]]

data[n].uv3 = texverts[tf[2]]

if len(tf) == 4:

data[n].uv4 = texverts[tf[3]]

scn = bpy.context.scene

ob = bpy.data.objects.new(name, me)

scn.objects.link(ob)

scn.objects.active = ob

return

def parseFace(words):

face = []

texface = []

for n in range(1, len(words)):

li = words[n].split('/')

face.append( int(li[0])-1 )

try:

texface.append( int(li[1])-1 )

except:

pass

return (face, texface)

__init__.py

Этот файл содержит пользовательский интерфейс, то есть два класса, которые создают пункты меню для экспортёра и импортёра. Простой экспортёр вызывается из меню File » Export. Есть две опции: логический выбор, чтобы повернуть меш на 90 градусов (для преобразования между осями Y и Z для направления вверх), и масштаб. Простой импортёр вызывается из меню File » Import. Есть две опции: логический выбор, чтобы повернуть меш на 90 градусов (чтобы ось Z указывала вверх), и масштаб.

__init__.pyтакже содержит словарь bl_info, который преобразует пакет в аддон Блендера, код регистрации, и код для импорта/перезагрузки двух других файлов.

#----------------------------------------------------------

# File __init__.py

#----------------------------------------------------------

# Информация аддона

bl_info = {

"name": "Simple OBJ format",

"author": "Thomas Larsson",

"location": "File > Import-Export",

"description": "Simple Wavefront obj import/export. Does meshes and UV coordinates",

"category": "Import-Export"}

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

# к переменной пакета, если она есть, перезагрузить всё

if "bpy" in locals():

import imp

if 'simple_obj_import' in locals():

imp.reload(simple_obj_import)

if 'simple_obj_export' in locals():

imp.reload(simple_obj_export)

import bpy

from bpy.props import *

from io_utils import ExportHelper, ImportHelper

#

# Меню Import

#

class IMPORT_OT_simple_obj(bpy.types.Operator, ImportHelper):

bl_idname = "io_import_scene.simple_obj"

bl_description = 'Import from simple OBJ file format (.obj)'

bl_label = "Import simple OBJ" bl_space_type = "PROPERTIES"

bl_region_type = "WINDOW"

filename_ext = ".obj"

filter_glob = StringProperty(default="*.obj;*.mtl", options={'HIDDEN'})

filepath = bpy.props.StringProperty(

name="File Path",

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

maxlen= 1024, default= "")

rot90 = bpy.props.BoolProperty(

name = "Rotate 90 degrees",

description="Rotate mesh to Z 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):

from . import simple_obj_import

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

simple_obj_import.import_simple_obj(

self.properties.filepath,

self.rot90,

self.scale)

return {'FINISHED'}

def invoke(self, context, event):

context.window_manager.fileselect_add(self)

return {'RUNNING_MODAL'}

#

# Меню Export

#

class EXPORT_OT_simple_obj(bpy.types.Operator, ExportHelper):

bl_idname = "io_export_scene.simple_obj"

bl_description = 'Export from simple OBJ file format (.obj)'

bl_label = "Export simple OBJ"

bl_space_type = "PROPERTIES"

bl_region_type = "WINDOW"

# Из ExportHelper. Фильтрация имён файлов.

filename_ext = ".obj"

filter_glob = StringProperty(default="*.obj", options={'HIDDEN'})

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

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Thomas Larsson читать все книги автора по порядку

Thomas Larsson - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


Отзывы читателей о книге Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода, автор: Thomas Larsson. Читайте комментарии и мнения людей о произведении.


Понравилась книга? Поделитесь впечатлениями - оставьте Ваш отзыв или расскажите друзьям

Напишите свой комментарий
x