Скрипт Blender Python для экспортера примитивного блендера

1

Я пытаюсь написать очень простой экспорт в blender (из примитивных форм) скрипта. Я должен рисовать цилиндры под разными углами и положениями. У меня есть информация о позиции смещения и размерах.

import bpy
import bgl
from mathutils import *
from math import *

material = bpy.data.materials.new('red')
material.diffuse_color = (1.0,0.0,0.0)


def draw_cylinder(name,material,radius,depth,location,rotation,offsetPosition,offsetAngle):

    bgl.glRotatef(*offsetAngle[:4]) 
    bgl.glTranslatef(*offsetPosition[:3])

    bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=depth, location=location, rotation=rotation)

    Cylinder = bpy.context.active_object
    Cylinder.name = name
    Cylinder.active_material = material

    bgl.glTranslatef(*[i*-1 for i in offsetPosition[:3]])
    bgl.glRotatef(*[i*-1 for i in offsetAngle[:4]])

    return Cylinder

cmpt = draw_cylinder('first',material,radius=1,depth=2,location=(-1,0,0),rotation=(pi/2,0,0),offsetPosition=(10,2,7),offsetAngle=(pi/2,0,1,0))

Это не приводит цилиндр в (9,2,7) [и не поворачивается вдоль оси y], где я ужасно ошибаюсь? Как я могу исправить это. Очень ценю вашу помощь.

EDIT: Использование Blender версии 2.60 (интерактивная консоль python 3.2.2) Выход показывает цилиндр в (-1, 0,0). Я ожидаю/нуждаюсь в том, чтобы он находился в (9,2,7) (location + offsetPosition)

  • 2
    Вы получаете ошибку?
  • 1
    Пожалуйста, укажите версию Blender, так как после 2.49 Blender использует Python 3 с другим API
Показать ещё 1 комментарий
Теги:
blender

1 ответ

1
Лучший ответ

В функции draw_cylinder вам нужно добавить два вектора:

pos = (
    location[0]+offsetPosition[0],
    location[1]+offsetPosition[2],
    location[1]+offsetPosition[2],
)

а потом

bpy.ops.mesh.primitive_cylinder_add(radius=radius, depth=depth, location=pos, rotation=rotation)

[EDIT] Если вам нужны более сложные операции, посмотрите на библиотеку mathutils.

  • 0
    Как насчет матрицы вращения? Существует смещение поворота с исходным местоположением.
  • 0
    В этом случае взгляните на библиотеку mathutils которая содержит все виды операций: blender.org/documentation/blender_python_api_2_56_0/…

Ещё вопросы

Сообщество Overcoder
Наверх
Меню