GIMP:Pythonでベジェ曲線

gimp-python-bezier-curve.png
gimp_vectors_bezier_stroke_conicto
gimp_vectors_bezier_stroke_cubicto スプライン曲線
gimp_vectors_bezier_stroke_lineto 直線を描く
gimp_vectors_bezier_stroke_new-ellipse 楕円を描く
gimp_vectors_bezier_stroke_moveto
gimp-vectors-stroke-close 一筆書きをやって最終的に始点と終点を連結させてストロークを閉じる

gimp_vectors_bezier_stroke_cubicto

引数

vectors VECTORS ベクターオブジェクト
stroke-id INT32 ストロークID
x0 float 最初の制御点のx座標
y0 float 最初の制御点のy座標
x1 float 真ん中の制御点のx座標
y1 float 真ん中の制御点のy座標
x2 float 最後の制御点のx座標
y2 float 最後の制御点のy座標

まずはVECTORオブジェクトを作る

ベクターオブジェクト= gimp_vectors_new(IMAGE,"名前")

vectorを画像に加える

gimp_image_add_vectors(image,vectorオブジェクト,position);

引数

position INT32 ベクターオブジェクトの位置

これは古いからgimp_image_insert_vectorsを使えだって。

gimp_image_insert_vectors(image,vectorオブジェクト,親のベクターオブジェクト,位置)

パスをストロークとして追加する

gimp_vectors_stroke_new_from_points

引数

vectors VECTORS ベクターオブジェクト
type INT32 GIMP_VECTORS_STROKE_TYPE_BEZIER=0
num-points INT32 点群の数×2 点の数は3の倍数でなければならない
controlpoints FLOATARRAY 点群の配列
closed INT32 ストロークが閉じているかどうか

返り値

stroke-id INT32 新しく作られたストロークのID

どんな点配列を渡すか

ハンドル、アンカー、ハンドル、ハンドル、アンカー、ハンドル。。。
という並びで渡す。
つまり、
ハンドル、アンカー、ハンドルでワンセットだから、渡す点の数は3の倍数でなければならない。

ベクターオブジェクトを可視化する

gimp_vectors_set_visible

pdb.gimp_vectors_set_visible(vectors, TRUE)

from gimpfu import *
def plugin_bezier(img, drawable):
    vectors=pdb.gimp_vectors_new(img,"miffy_path")#make miffy_path
    pdb.gimp_message("Bezier")
    pdb.gimp_image_add_vectors(img,vectors,0)
    pdb.gimp_message("gimp_image_add_vectors")
    points=[0,150,80,100,120,200,180,28,240,150,0,0]# it must be even points
    stroke_id=pdb.gimp_vectors_stroke_new_from_points(vectors,0,len(points),points,FALSE)
    pdb.gimp_vectors_bezier_stroke_cubicto(vectors,stroke_id,0,150,80,100,120,200)
    pdb.gimp_message("middle Bezier")
    pdb.gimp_vectors_set_visible(vectors, TRUE)
    pdb.gimp_message("end Bezier")
register(
        "plugin_bezier",
        "dots",
        "dots",
        "Miffy Sora",
        "Miffy Sora",
        "2013",
        "<Image>/Image/Bezier...",
        "RGB*, GRAY*",
        [],
        [],
        plugin_bezier)
 
main()

bezierpython

サポートサイト Wikidot.com bezierpython