:note

しゅわしゅわとしたものをつくる

InDesignでしゅわしゅわと噴き出すような曲線群を描くスクリプト。

ベジェ曲線の両端のコントロールハンドルの長さの合計を一定にしてみる試み。

しゅわしゅわとしたものをつくる /images/2010/09/655-shuwa_spring.png
しゅわしゅわとしたものをつくる /images/2010/09/656-shuwa_dialog.png

一本だと波平、二本だと海平、三本だとQ太郎〜になるので、色は[黒]でなく、予約色のシアンを生成してます。

/**
しゅわしゅわとしたものをつくる
"create erupted objects"
使い方:
実行すると設定ダイアログがでます。
大きさ、大きさのレンジ、曲線のきつさ、作成数などを入力。
最前面のドキュメント中央下から線を噴出させます。
開いているドキュメントがなければ新規ドキュメントを勝手に作って実行します。
動作確認:OS10.4.11 InDesign CS3
milligramme
www.milligramme.cc
*/
if(app.documents.length == 0){
var doc=app.documents.add();
}
var doc=app.documents[0];
var dWidth=doc.documentPreferences.pageWidth;
var dHeight=doc.documentPreferences.pageHeight;
//ルーラーを一時的にスプレッドにする
var rulerBk=doc.viewPreferences.rulerOrigin;
var rulerTemp=RulerOrigin.SPREAD_ORIGIN;
doc.viewPreferences.rulerOrigin=rulerTemp;
var dialogObj=app.dialogs.add({name:"shuwawa", canCancel:true});
with(dialogObj){
with(dialogColumns.add()){
with(borderPanels.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel: "size"});
}
with(dialogColumns.add()){
var sizeField = realEditboxes.add({editValue: 105});
}
with(dialogColumns.add()){
staticTexts.add({staticLabel: "rate of min/max"});
}
with(dialogColumns.add()){
var minField = percentEditboxes.add({editValue: 60, minimumValue:1, maximumValue:99});
}
}//min per
with(borderPanels.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel: "slope of curve"});
}
with(dialogColumns.add()){
var handsumField = integerEditboxes.add({editValue: 150});
}
}//sum of handles
with(borderPanels.add()){
with(dialogColumns.add()){
staticTexts.add({staticLabel: "amount"});
}
with(dialogColumns.add()){
var valueField = integerEditboxes.add({editValue: 50});
}
}//value
}
}//dialog
if(dialogObj.show() == true){
var armMax=sizeField.editValue;//だいたいの半径
var armMinPer=minField.editValue;//内側の比率、小さい程あばれる、大きい程外側に集まる
var handLnSum=handsumField.editValue;//コントロールハンドルの長さの合計。大きい程曲線が急になる
var creatValue=valueField.editValue;//作成する数
dialogObj.destroy();
}
else{
dialogObj.destroy();
exit();
}
var pi=Math.PI/180;
var stX=dWidth/2;
var stY=dHeight;
var armMin=armMax*armMinPer/100;
for(var i=0; i < creatValue; i++){
var contrHndL=Math.random()*handLnSum;
var leng=armMin+(armMax-armMin)*Math.random();
var degree=(90+180*Math.random())*pi;
var curvArray=[
[[stX, stY], [stX, stY], [stX, stY-contrHndL]],
[[stX+leng*Math.sin(degree),stY+leng*Math.cos(degree)-(handLnSum-contrHndL)],
[stX+leng*Math.sin(degree),stY+leng*Math.cos(degree)],
[stX+leng*Math.sin(degree),stY+leng*Math.cos(degree)]]
];
var curvObj=doc.rectangles.add();
curvObj.paths[0].entirePath=curvArray;
curvObj.paths[0].pathType=PathType.OPEN_PATH;
curvObj.fillColor="None";
curvObj.strokeWeight=0.1;
curvObj.strokeColor="Cyan";
}
//ルーラーを元に戻す
doc.viewPreferences.rulerOrigin=rulerBk;
 
comments powered by Disqus
back to top