CGらぼ

広く浅くCGを勉強していきます。

Pythonを基礎から勉強してみる!!_009

Pythonのキーワード一覧

import keyword;

for kw in keyword.kwlist :

     print (kw);

 で全てのキーワードが表示される。

 

and

aとbが共にtrueの場合にtrue

     a and b
as

aをbとする

     a as b
assert

aが期待通りのbかを確める

     a = b

     assert a == c
break

最も内側の[while],[for]などのループを抜ける

     for a in b :

          if a == 5 :

               break

          print a
class

クラスを作成
continue

最も内側のwhile,forなどのループ処理を繰り返す

     for a in range(10) :

          if a == 5 :

               continue

          print a
def

関数を作成
del

オブジェクトを削除

     a = 1 ;

     del a ;
elif

if式がfalseの場合にelif式を実行、if式,elif式がfalseの場合にはeles式を実行

     if a > 5 :

          print "BIG"

     elif a ==5 :

          print "EQUAL"

     else :

          print "SMALL"

else

ifの式がfalseの場合にelse以下の式を実行

     if a > 5 :

          print "BIG"

     else :

          print "SMALL"

whileのループ終了後にelse式を実行

     n = 0

     while n < 5 :

          print n

          n += 1

     else :

          print "END"

forのループ終了後にeles式を実行

     for a in b :

          print a

     else :

          print "END"

例外を扱う

except
exec

引数の文字列をpythonスクリプトとして実行
finally

例外を扱う
for

繰り返し実行する

     for a in b

          print b


from
global

グローバル変数
if

式がtrueの場合、以下の式を実行

     if a > 5 :

          print "BIG"
import

パッケージの中からモジュール、識別子をインポートする
in
is
lambda

名前のない小さな関数を定義

関数の引数に指定することができる
not

aがtrueのときにfalse、falseのときにtrue

     not a
or

aかbの少なくとも1つがtrueの場合にtrue

     a or b
pass

空の関数、クラスを作る

     def myfun() :

          pass

 

     class mycla() :

          pass
print

出力する
raise

例外を扱う
return
try

例外を扱う

while

while式を満たす間は実行

     n = 0

     while n < 5 :

          print n

          n += 1
with
yield

イテレータを返すジェネレータを定義する

 

 

まずは使ってみないと、どう使って良いのか分からないなぁ

SubstanceDesignerでタイルを作ってみた!!

久々にSDをさわりました!!

 

めっちゃ動作が重くなっていたw

タイムラグ多発でストレスが半端ないので、しばらくさわらないようにします。

次回のアップグレードに期待します。

 

f:id:foreverLab:20151110170657j:plain

全ての模様をSD内部で作りました。

作り方は簡単で『シェイプ』と『ブレンド』を駆使して模様を作り、『Splatter』で円形配置して完成。

作業環境とうの関係で作業時間が3~4時間かかりました。

Ai使えば1時間くらいで完成しそうな模様ですね。。。

f:id:foreverLab:20151110170849j:plain

しばらくはPythonに集中します!!

maya Pythonを使ってシェーダーを割り当てる

pythonを使用して

三角ポリゴン、多角形ポリゴンを色分けしようと思いスクリプトを書いてみました。

 

三角ポリゴンが黄色、多角形が青色です。

 

f:id:foreverLab:20151109092756j:plain

 

import maya.cmds as mc;

material_Tri = mc.shadingNode('lambert',n='Tri',asShader=True);
mc.setAttr('Tri.color',1.0,1.0,0.0,type='double3');

material_Qua = mc.shadingNode('lambert',n='Qua',asShader=True);
mc.setAttr('Qua.color',0.2,0.2,0.2,type='double3');

material_Nsided = mc.shadingNode('lambert',n='Nsided',asShader=True);
mc.setAttr('Nsided.color',0.0,0.0,1.0,type='double3');



if mc.window("PolyFinderWindow",exists=True):
    mc.deleteUI("PolyFinderWindow")



Create_Window = mc.window("PolyFinderWindow",t="PolyFinder",w=30,h=50,s=True,mnb=True,mxb=True);
mc.columnLayout(adj=True);

mc.button(l="Tri",c="SetTri()");
mc.separator(h=10);
mc.button(l="Nsided",c="SetNsided()");
mc.separator(h=10);
mc.button(l="Clear",c="SetClear()")

mc.showWindow(Create_Window);



def SetTri():

    mc.polySelectConstraint(t=0x008,m=3,sz=1)
    mc.hyperShade(a='Tri')
    mc.sets(e=True,fe='Tri.SG')
    
    
    
def SetNsided():
    
    mc.polySelectConstraint(t=0x008,m=3,sz=3)
    
    mc.hyperShade(a='Nsided')
    mc.sets(e=True,fe='Nsided.SG')
   
   
    
def SetClear():
    
    mc.hyperShade(a='Qua')
    mc.sets(e=True,fe='Qua.SG')

 

maya Python メモ

ポリゴンを三角形化する

import maya.cmds as mc ;
mc.polyTriangulate(); 

 

ポリゴンを選択する

import maya.cmds as mc ;
mc.polySelectConstraint(t=0x008,m=3,sz=1);

sz=1・・・三角形

sz=2・・・四角形

sz=3・・・多角形

 

シェーダーを作成する

mc.shadingNode('lambert',n='Tri',asShader=True);
mc.setAttr('Tri.color',0.0,1.0,0.0,type='double3'); 

一行目でLambertシェーダーを作成

二行目で色を指定

 

シェーダーを割り当てる

mc.hyperShade(a='Nsided')
mc.sets(e=True,fe='NsidedSG') 

 一行目で割り当てたいシェーダーを選択

二行目で割り当てる

頂点にボックスを配置するスクリプトをpythonで書いてみた!!

頂点に配置するスクリプトです。

f:id:foreverLab:20151108182202j:plain

 

import maya.cmds as mc;
import random;

mc.polySphere(r=3,sx=16,sy=16);

vtxNum = mc.polyEvaluate(v=True);

vtxList = range(0,vtxNum);
vtxRanNum = random.sample(vtxList,vtxNum);
vtxRanStr = map(str,vtxRanNum);

for a in vtxRanStr:
    A1 = 'pSphere1.vtx[000]'
    A2 = A1.replace("000",a)
    for b in A2:
        ver = mc.select(A2)
        tvf = mc.polyListComponentConversion(ver,fv=True,tvf=True)
        mc.filterExpand(tvf,sm=70,ex=True)
        normal = mc.polyNormalPerVertex(q=True,xyz=1)
        position = mc.xform(q=True,ws=True,t=True)
    
        box = mc.polyCube(ax=[normal[0],normal[1],normal[2]],w=0.1,h=0.1,d=0.1)
        mc.move(position[0],position[1],position[2],box)
        mc.rotate(normal[0],normal[1],normal[2],box,ws=True) 

 

勉強中ですので、修正した方が良い箇所などございましたら、コメントいただけると助かります。

 

あと、出来れば赤ライン上にあるボックスのように、その他のボックスも回転を揃えたいのですが、現状のスクリプトでは上手くいっておりません。。。(法線情報でいけると思ったんだけどな。。。)

こっちの解決策も教えていただけると助かります。

f:id:foreverLab:20151108182510j:plain