ProcessingのpythonモードでJava版ライブラリを使う方法
Processing(Java版)のライブラリをpythonモードで使う方法を調べたので、方法をまとめておきます。
いや、GitHubのprocessing.pyのページに使い方書いてあったんですけどね...
結論から言うと、ほぼJava版と同じ感じで使えます。というかあまりにもJava版そのままなので「ほんとにこれでいけるの?」と不安になるレベル。
以下、順を追って使い方を書いていきます。
① ライブラリを探す
まず、Processing.orgのライブラリページから使いたいライブラリ(Java版)を探します。pythonモード向けが別枠で存在してたりはせず、Java版と同じものが使えます。
② ライブラリをインストール
目当てのライブラリを見つけたら、Processingの「スケッチ」メニューから「ライブラリをインポート」→「ライブラリを追加」を選んでインストール。
③ ライブラリをインポート
pythonモードでライブラリを読み込むときは、いつもの import 文ではなく、add_library("ライブラリ名") を使います。
この部分、Java版だと
// Javaモードの書き方
import com.thomasdiewald.pixelflow.java.DwPixelFlow;
みたいに長くなるようなんですが、pythonモードだとライブラリ名のみでOKです。(というか、ライブラリの一部分だけを読むことができない?)
# pythonモードでの書き方
add_library("PixelFlow")
ちなみにメニューの「スケッチ」→「ライブラリのインポート」でインストールしたライブラリ名を選択しても、上記add_library("ライブラリ名")がコードに挿入されます。
④ ライブラリを使う
ライブラリの使い方は、Processing.orgのライブラリページから、そのライブラリのサイトに飛んで調べます。
Javaモードとpythonモードでクラスのインスタンス化の構文が違いますが、これはpython風に書き換えればOKです。
// Javaモードの書き方
DwPixelFlow context = new DwPixelFlow(this);
# pythonモードでの書き方
context = DwPixelFlow(this)
ちなみに、Javaのthisに相当するキーワードはpythonにはないのですが、これはそのままthisと書いておけばOK。ライブラリの互換性を保つために、Processingのpythonモードにはthisが定義されているとのこと。
あと配列の扱いがJavaとpythonでは微妙に違っていて、Java版では中身の型を定義する必要がありますが、pythonモードではいつもどおり [] に入れておけば大丈夫です。
まとめ
一度使い方さえ分かってしまえば、pythonモードでも簡単にライブラリを使うことができます。
(ProcessingのpythonモードはJavaで実装されたpython(Jython)なので、Javaライブラリをそのまま使えるようです。その代わり、numpyのような内部的にC言語を使っているpythonのライブラリが使えないわけですが...)
最後に、Java版ライブラリのPixelFlowを使って、この記事のヘッダー画像を生成したコードを使用例として載せておきます。このPixelFlowがまたすごいライブラリなので、いつか記事を書きたいところです。
add_library("PixelFlow")
def setup():
size(1280, 670, P2D)
global F, G, T, font
F=DwFluid2D(DwPixelFlow(this),width,height,1)
F.param.dissipation_density = 0.8
G=createGraphics(width,height,P2D)
T=createGraphics(width,height,P2D)
font = createFont("Georgia", 130)
def draw():
with G.beginDraw():
G.background(0)
with T.beginDraw():
T.clear()
T.fill(180)
T.textAlign(CENTER, CENTER)
T.textFont(font)
T.text("Processing Libraries\nin Python Mode", width/2, height/2)
F.addDensity(T, 1, ADD, 1)
N = 10
for i in range(N):
x = (i+0.5)*width/N
F.addTemperature(x, 50, 20, 0.5+0.5+noise(i))
F.addVelocity(x, 50, 30, 10+i, 0)
F.update()
F.renderFluidTextures(G, 0)
image(G,0,0)
fill(-1)
textAlign(CENTER, CENTER)
textFont(font)
text("Processing Libraries\nin Python Mode", width/2, height/2)
以上、ProcessingのpythonモードでJava版ライブラリを使う方法
でした!
この記事が気に入ったらサポートをしてみませんか?