見出し画像

ProcessingのpythonモードでJava版ライブラリを使う方法

Processing(Java版)のライブラリをpythonモードで使う方法を調べたので、方法をまとめておきます。

いや、GitHubのprocessing.pyのページに使い方書いてあったんですけどね...

結論から言うと、ほぼJava版と同じ感じで使えます。というかあまりにもJava版そのままなので「ほんとにこれでいけるの?」と不安になるレベル。

以下、順を追って使い方を書いていきます。

① ライブラリを探す

まず、Processing.orgのライブラリページから使いたいライブラリ(Java版)を探します。pythonモード向けが別枠で存在してたりはせず、Java版と同じものが使えます。

② ライブラリをインストール

目当てのライブラリを見つけたら、Processingの「スケッチ」メニューから「ライブラリをインポート」→「ライブラリを追加」を選んでインストール。

インスト1

インスト2

③ ライブラリをインポート

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版ライブラリを使う方法 でした!

この記事が気に入ったらサポートをしてみませんか?