Modo901

Modo901へアップグレード!

MeshFusionが標準で付く他は小粒な機能追加のみのようですが、MODO’s TD SDKというPython APIが追加されたのは僕にとっては大きいところです。今までもPythonを使用することはできました、lxモジュールというPythonとModoマクロ言語の橋渡しのようなAPIを介して使用する方法です(あまり覚える気が無かったのでこの表現が正しいかはわかりません。)

バージョン901からmodoモジュールが追加され、Mayaで言うPymelのような使い勝手が期待できます。

modo901ScriptEditor

内臓のスクリプトエディタを少し使ってみましたが、オートインデントが効きません。「:(コロン)」の次の改行はインデントされるのですがそれ以外では不可、Pythonを書くのにこれは不便ですね。


Euclidean Rhythm

Basic paper: The Euclidean Algorithm Generates Traditional Musical Rhythms

Python code

# Making Euclidean Rhythm with Bjorklund's distribution
# by hTaka
import sys

class EuclideanRhythm:
    def getRhythm(self,steps,hit,shift):
        self.result = ""
        if hit > steps:
            raise NameError("Number of hit must less than steps")
        pause = steps - hit
        leftUnit = "X"
        rightUnit = "."
        print "process>{0}|{1} / left:{2} right:{3}".format(("["+leftUnit+"]") * hit , ("["+rightUnit+"]") * pause , hit , pause)
        self.makeEuclidRhythm(hit,pause,leftUnit,rightUnit)
        if abs(shift)%steps != 0:
            print "Result> Steps:{0} hit:{1} shift:{2} [{3}] (before shift)".format(steps,hit,shift,self.result)
            self.shiftRhythm(steps,shift)
        return self.result
    
    def makeEuclidRhythm(self,numL,numR,leftUnit,rightUnit):
        unitBuffer = leftUnit
        if numR==0 or numR == 1:
            self.result = leftUnit * numL+ rightUnit * numR
            return
        if numR > numL:
            m,k = numR,numL
            isRightRemain = True
            leftUnit += (rightUnit * (m // k))
        else:
            m,k = numL,numR
            isRightRemain = False
            leftUnit += rightUnit
        if isRightRemain:
            print "process>{0}|{1}  / left:{2} right:{3} {4} {5}".format(("["+leftUnit+"]") * k, ("["+rightUnit+"]") * (m % k), k , m%k ,"RightUnit Remain with" , "[" + rightUnit + "]")
            self.makeEuclidRhythm(k,m%k,leftUnit,rightUnit)
        else:
            print "process>{0}|{1}  / left:{2} right:{3} {4} {5}".format(("["+leftUnit+"]") * k, ("["+unitBuffer+"]") * (m - k), k, m-k,"RightUnit Replace with Left" , "[" + unitBuffer + "]")
            self.makeEuclidRhythm(k,m-k,leftUnit,unitBuffer)

    def shiftRhythm(self,steps,shift):
        if shift > 0:
            shift = shift % steps
            self.result = "{0}{1}".format(self.result[steps - shift :],self.result[0 : -1 * shift])
        if shift < 0:
            shift = (abs(shift) % steps)
            self.result = "{0}{1}".format(self.result[shift :],self.result[0 : shift])
        return


def main(arg):
    try:
        steps = int(arg[1])
        hit = int(arg[2])
        shift = int(arg[3])
    except:
        print "Args error! usage: python EuclideanRhythms.py <STEPS> <HIT> <SHIFT>"
        print "using hard coded params."
        steps,hit,shift = 16,7,0
    rhythm = EuclideanRhythm()
    print "Result> Steps:{0} hit:{1} shift:{2} [{3}]".format(steps,hit,shift,rhythm.getRhythm(steps,hit,shift))

if __name__ == '__main__':
    main(sys.argv)

Result

process>[X][X][X][X][X][X][X]|[.][.][.][.][.][.][.][.][.] / left:7 right:9
process>[X.][X.][X.][X.][X.][X.][X.]|[.][.]  / left:7 right:2 RightUnit Remain with [.]
process>[X..][X..]|[X.][X.][X.][X.][X.]  / left:2 right:5 RightUnit Replace with Left [X.]
process>[X..X.X.][X..X.X.]|[X.]  / left:2 right:1 RightUnit Remain with [X.]
Result> Steps:16 hit:7 shift:0 [X..X.X.X..X.X.X.]

Import molecular structure to Maya

ひっさしぶりのCGの記事ですよ。誰が興味あんねんってな内容ですよ!

お仕事で、ある高分子をモデリングする必要があって、Avogadroと言うフリーソフトを見つけました。既知の分子構造はもちろん呼び出せますし、自分で分子をモデリングすることも出来、非常に興味深いのですが、残念なことに3Dの書き出しがPOV-Rayフォーマットしかありません。

つーことでpythonのお勉強を兼ねて読み込みスクリプトを書いてみました。

Tryptophan_trim

Avogadroの説明は省きます、分子は「File/Import」から呼び出せます。「File/Export/POV-ray…」で書き出したら次のスクリプトを実行してpovファイルを読み込むだけです。メッシュデータには対応していません、ファイル内のcylinderとsphereの情報を読み取るだけです。Maya2013 x64 Extension2で動作確認してます。
続きを読む “Import molecular structure to Maya”


Cornuライブラリ(NodeBox)

会社の備品を家電量販店で購入しているとナントカポイントがあっという間にたまります。使い道なのですが、なぜかうちはゲームソフトを購入するのが慣例になっているみたいです。個人でつまんないゲーム買って失敗したとか、クリアできればおしまいなら会社のお金(なのか?経理上どういう扱い?)で買った方がいいだろうけど。

p1000916.jpg

僕の許可が必要らしい。ならルパンDVDボックスとか買いません?古畑DVDボックスとか?

さて、Pythonの勉強に使っているNodeBoxですが、Crounuライブラリが気に入りました。標準のdrawpath()とちがいクセがあって、文字列を描く場合はちょっとコツがいるようですが。

cornu3.jpg

「cornu」とは動物の角のような形の事を言うらしいです。

def typoA():
    cornu = ximport("cornu")
    push()
    transform(CORNER)
    translate(20, 250)
    scale(0.2)
    font("Arial", 0.6)
    points = []
    for i in range(2):
        offset = 0.1
        for t in txt:
            path = textpath(t, 0, 0)
            for pt in path:
                if pt.cmd == LINETO or pt.cmd == CURVETO:
                    points.append((pt.x + offset, pt.y))
                    if random() > 0.8:
                        points.append((pt.x+random(-0.05,0.05)+ offset, 
                                       pt.y+random(-0.05,0.05)))
            strokewidth(2)
            nofill()
            stroke(1)
            offset += 0.3
            #offset += textmetrics(t)[0]
            cornu.drawpath(points)
    pop()

年明けからデスクの上が汚い。

大掃除したハズなんですけど散らかってます。デスクの上を雑巾がけするために上にのっかってたものをダンボール箱にまとめて、もう一度元に戻したって感じ。

では今年の初アマゾ〜ン。

CG関係の本を買うなんて何年ぶりでしょ。学生の頃以来かな。本買ったって仕事で使うテクなんて載ってませんもんね。

今年はこれ勉強します。PHPはWeb用、CGツール用にPython。ActionScriptはね、後回し。仕事があればおぼえりゃいいや。

CONCEPT DESIGN 2はアマゾンで英語版も扱ってるのが分かりました。でももう出荷したって、、、3千円も安いので英語版の方がいいかも。