经过大量工作后,我在Python中开发了以下代码来绘制矢量[在本例中为(2,2,2)],以便它指向您对原点的期望.
花了一些时间来收集三个旋转参数在滚动,俯仰和偏航方面的含义.您可能需要设置Euler XYZ.
我用了一个很长的圆柱作为我的矢量,这符合我的目的,适合我的搅拌器的薄薄经验.这段代码绘制了一个矢量,上面有一个箭头(一个圆锥),很适合我的目的,但有点像一个小屋.
我适用于大多数矢量但在x <0和y> 0且z> 0时失败
import bpy
import math
from math import *
x=-5
y=-10
z=12
yParameter=-1.0
if y < 0:
if x < 0:
yParameter = 1.0
#print ("y para is ",yParameter
for i in range (0,1):
length=sqrt(z*z+y*y+x*x)
#Create a vector at correct orientation at the origin
bpy.ops.mesh.primitive_cylinder_add(vertices=16, radius=0.04, depth=length, end_fill_type='NGON', view_align=False, enter_editmode=False, location=(0,0,0),rotation=(-acos(z/sqrt(x*x+y*y+z*z)),0,yParameter*acos(y/sqrt(x*x+y*y))))
bpy.ops.transform.translate(value=(x/2, y/2, z/2))
bpy.ops.mesh.primitive_cone_add(vertices=32, radius1=0.1, radius2=0, depth=0.4, end_fill_type='NGON', view_align=False, enter_editmode=False, location=(0,0,0), rotation=(-acos(z/sqrt(x*x+y*y+z*z)),0,yParameter*acos(y/sqrt(x*x+y*y))))
bpy.ops.transform.translate(value =(x / 2,y / 2,z / 2))
我确信向量和矩阵操作中的巨大API应该使这项工作更容易,但我正在努力寻找除了这个自行开发的笛卡尔工作以外的方法.
任何人都可以指向一个可理解的代码片段或者可能是关于如何在blender python中操纵向量(在数学意义上)的教程
我发现blender API非常清楚参数的名称以及如何对它们进行编码,但我发现参数的实际含义很少甚至没有.
解决方法:
这将创建一个圆柱体,其中(0,0,0)作为一端,(x,y,z)作为另一端:
def createVectorLikeThing(x,y,z):
v = Vector((x,y,z))
up = Vector((0,0,1))
if v!=-up:
rot = up.rotation_difference(v)
else:
rot = Quaternion((1,0,0),pi)
bpy.ops.mesh.primitive_cylinder_add(vertices=16, radius=0.01, depth=v.length, end_fill_type='NGON', view_align=False, enter_editmode=True)
bpy.ops.transform.translate(value=(0,0,v.length/2))
bpy.ops.object.editmode_toggle()
bpy.ops.transform.rotate(value=(rot.angle,), axis=rot.axis)
该代码适用于搅拌机2.63但不适用于2.65.
对于2.65,将最后一行更改为:
bpy.ops.transform.rotate(value=rot.angle, axis=rot.axis)