2017-04-07 13 views
1

私はblender3DでPythonを使用してスクリプトを作成しようとしています。 私は自分のシーンにたくさんのオブジェクトを持っており、objectnameの数値部分を使ってそれらを翻訳したいと思っています。オブジェクト名の一部に応じて位置を設定します

まず、シーンの名前の一部を照合してオブジェクトを収集します。 [bpy.data.objects [ '01_Root']、bpy.data.objects [ '02_Root']、bpy.data.objects [ '03_Root']、BPY:これは私のリストを提供します

root_obj = [obj for obj in scene.objects if fnmatch.fnmatchcase(obj.name, "*_Root")] 

。 data.objects ['00_Root']]

私の目標は、これらのオブジェクトを名前の対応する部分の15倍に移動することです。だから、 '00_Root'は移動する必要はありませんが、 '01_Root'は15個のブレンダーユニットと '02_Root' 30個のブレンダーユニットを移動する必要があります。

どのように私は名前の数値部分をexctractし、翻訳値として使用するのですか?

私はPythonでかなり新しくて、私は得ることができるすべての助けに感謝します。

答えて

0

文字列は文字のリストで、各文字は0から始まるインデックスでアクセスできます。最初の文字はname[0]で、2番目の文字はname[1]です。どのリストと同様に、slicingを使用してリストの一部を取得できます。値が常に最初の2文字の場合は、name[:2]で値を取得できます。int()の整数またはfloat()の浮動小数点にすることができます。これを組み合わせると、

val = int(name[:2]) 

あなたは新しい場所を計算できる番号を持っています。

obj.location.x = val * 15 

名の桁数は、特定の分離文字の文字列を破るためにsplit()を使用することができます異なる場合があります場合。これは、指定された文字の間の項目のリストを返します。そのため、最初の項目を整数に変換したい場合に使用します。

name = '02_item' 
val = int(name.split('_')[0]) 

splitを使用すると、名前に複数の値を設定することもできます。

name = '2_12_item' 
val1 = int(name.split('_')[0]) 
val2 = int(name.split('_')[1]) 
関連する問題