2017-06-27 8 views
-2

私が調べたところではインデントは正しく、括弧はなく、前の行にインポートされたパッケージしかありませんでしたが、まだ無効な構文エラーが出ます。def関数が無効な構文を返す

#!/usr/bin/python 
import bpy 
import mathutils 
import numpy as np 
from math import radians 
from mathutils import Vector 
from math import radians 
from mathutils import Matrix 
from bpy import context 

def transform_mesh('parent', 'obj_to_be_transformed', (translate_x, translate_y, translate_z), (rot_x,rot_y,rot_z)): 

    obj= bpy.data.objects[parent] 
    obj1= bpy.data.objects[obj_to_be_transformed] 
    initial_mat = obj1.matrix_world 

    ...some code 

    (x,y,z) = (translate_x, translate_y, translate_z) 
    orig_loc_mat = Matrix.Translation(orig_loc+ mathutils.Vector((x,y,z))) 

    ...some more code 

    eul = mathutils.Euler((radians(rot_x), radians(rot_y), radians(rot_z)), 'XYZ') 
    rot_mat = eul.to_matrix().to_4x4() 

    obj.matrix_world = orig_loc_mat * rot_mat * orig_rot_mat * orig_scale_mat 
    bpy.context.scene.update() 

    return [initial_loc,initial_rot,initial_scale,loc,rot,scale] 


transform_result= transform_mesh('Armature','Coil',(5,0,0),(0,0,1)) 
print (transform_result) 

とエラーです:

Error: File "D:\users\gayathri\Gayathri\Synthetic_data_generation\Final\HMI_Depth_coilA_final_final.blend\Untitled", line 18 
def transform_mesh('parent', 'obj_to_be_transformed', (translate_x, translate_y, translate_z), (rot_x,rot_y,rot_z)): 
                             ^
SyntaxError: invalid syntax 

location: <unknown location>:-1 
+0

あなたの引数は文字列ではありません: 'transform_mesh(親、obj_to_be_transformed、(translate_x、translate_y、translate_z)、(rot_x、rot_y、rot_z)):' – Nuageux

+0

うわー、私は」didnのそのネストされたPAを知っていないラマーリストが可能でした。 – mkrieger1

+0

@ mkrieger1:これらはかなりネストされたパラメータではなく、パラメータとしてのタプルです。 –

答えて

2

の1-ので(いくつかのチェックを追加すると便利かもしれません)の引数からタプルを削除し、関数内でそれらの属性の引数

2-

を文字列を削除し、ここでは、次のとおりです。

def transform_mesh(parent, obj_to_be_transformed, translate, rot): 
    translate_x, translate_y, translate_z= translate 
    rot_x,rot_y,rot_z = rot 

    # etc 


transform_result= transform_mesh('Armature','Coil',(5,0,0),(0,0,1)) 
print (transform_result) 
+0

ありがとうございます。これはうまくいった。 – gaya

+0

ようこそ。あなたが好きな答えを自由に受け入れるようにして、あなたの質問にそのように印を付けてください:) – Nuageux

3
def transform_mesh('parent', 'obj_to_be_transformed', 

確実

def transform_mesh(parent, obj_to_be_transformed, 

すべきですか?

0

タプルパラメータはPython3ではサポートされていませんが、変数として渡して関数を定義した後で解凍することができます。

def transform_mesh(translate_xyz): 
    translate_x, translate_y, translate_z = translate_xyz  
+0

私はPython 2.7を使用しますが、引数として渡して試してみます。 – gaya

0

変数を関数の引数として指定する必要があります。あなたが共有しているコードの中で、あなたは常にタプルとしてT1とT2を使用しているが、

def transform_mesh(parent, obj_to_be_transformed, t1, t2): 

のような何かを試してみてください。しかし、あなたは、別途のx、y、zのを使用したい場合には、インデックスを参照することによってそれを行うことができます。このラインで

x = t1[0] 
y = t1[1] 
+0

または単に 'x、y = t1'。 – mkrieger1

+0

@ mkrieger1合意。しかし、すべての要素が個別に必要な場合にのみ。 –

0

関数パラメータ間違った方法で渡され、

def transform_mesh('parent', 'obj_to_be_transformed', (translate_x, translate_y, translate_z), (rot_x,rot_y,rot_z)): 

正しい構文は次のようになります。

def transform_mesh(parent, obj_to_be_transformed, *translate_xyz, *rot_xyz): #*translate_xyz and *rot-xyz are tuple parameter