クリエイター手抜きプロジェクト[97]Photoshop CS/CS2編 数学曲線を描く/古籏一浩

投稿:  著者:  読了時間:4分(本文:約1,500文字)


Adobe Creative Suite Standard 2.0 日本語版 Windows版前回は、Illustratorでスクリプトを用いて数学的な曲線を描かせましたが、Photoshopにも数学的な曲線を描くツールは用意されていません。ということで、今回はPhotoshopで数学的曲線を描くスクリプトです。

基本的には前回のIllustratorのものと同じです。が、同じAdobe製品でもアプリケーション独自部分には互換性がないので(当然ですが)、同じスクリプトでは動作しません。

Photoshopの場合、数学的曲線を描かせるやりかたとしては、選択範囲を作成して塗りつぶしていく方法と、パスを描いてそのパスにブラシや鉛筆の形状を適用する方法があります。サンプルでは、Illustrator同様にパスを作成し、パスにそってブラシで曲線を描きます。


w = 1; // 横の拡大率
h = 100; // 縦の拡大率
step = 5; // 計算上の間隔
startP = 0; // 開始角度
endP = 360; // 終了角度
offsetX = 100; // X座標のオフセット
offsetY = 200; // Y座標のオフセット
passData = [];
lineData = [];
count = 0;
for (i=startP; i< =endP; i+=step)
{
r = i * Math.PI / 180;
y = Math.sin(r) * h;
x = i * w;
x = x + offsetX;
y = y + offsetY;
passData[count]= new PathPointInfo();
passData[count].kind = PointKind.CORNERPOINT;
passData[count].anchor = [x, y];
passData[count].leftDirection = [x, y];
passData[count].rightDirection = [x, y];
count++;
}
lineData[0] = new SubPathInfo();
lineData[0].operation = ShapeOperation.SHAPEADD;
lineData[0].closed = false;
lineData[0].entireSubPath = passData;
docObj = activeDocument;pObj = docObj.pathItems.add("Sin", lineData);
pObj.strokePath(ToolType.BRUSH);
pObj.remove();

曲線を変更するのであれば
y = Math.sin(r) * h;
x = i * w;

の数式を

y = Math.cos(r) * Math.sin(r) * h;
x = Math.cos(r) * w;

のようにすると、いろいろな曲線を描くことができます。また、Illustratorと異なり不要になったパスは消していますが、もしパスを残しておきたい場合には一番最後の行にある

pObj.remove();

を削除してください。これでパスデータを残すことができます。

【古籏一浩】openspc@po.shiojiri.ne.jp
< http://www.openspc2.org/ >
7月27日に秀和システムから「Ajax実践テクニック」が発売されました。あと、Adobe Spryの解説などは以下のページにある「Ajaxを勉強しよう」の19章で行なっています。
< http://www.openspc2.org/JavaScript/Ajax/Ajax_study/ >

photo
Ajax実践テクニック
高橋 登史朗 古籏 一浩
秀和システム 2006-07


photo
Ajax逆引きクイックリファレンスWeb2.0対応for Windows & Macintosh
古籏 一浩
毎日コミュニケーションズ 2006-03
おすすめ平均 star
star知ってる人は使いやすい
starサンプル多いのが良い
starJavaScript初心者にはちょっとわかりづらい

入門 Ajax Ajax 実装のための基礎テクニック Ajaxイン・アクション AJAX Webアプリケーション アイデアブック Googleマップ+Ajaxで自分の地図をつくる本  Google Maps API徹底活用

by G-Tools , 2006/07/31