その他の関数


他のアプリケーションを起動する:launchAPP

launchApp(string)

起動できるファイルの種類
launchAppコマンドはPPBasic実行中に他のアプリケーションを起動することが出来ます。引数として、起動するアプリケーション名を入力します。入力方法はynshでのアプリケーション起動コマンドと同様で、コマンドを単独で入力した場合はカレントフォルダおよびbinフォルダに格納されているコマンドを検索して実行し、コマンドをフルパスで入力した場合はパスで指定されたコマンドを実行します。また、ファイル名としてエイリアスを指定しても構いませんし、書類そのものやAppleScript実行ファイルを指定しても構いません。書類を指定した場合は、書類はマウスでダブルクリックした場合と同様にクリエイターで指定されたアプリケーションと共に起動されます。

アプリケーションで開くファイルの指定
アプリケーションがfileOpenアップルイベントに対応している場合、コマンドには引数としてアプリケーションに渡すファイル名を指定することが可能です。ファイル名はコマンドの指定方法と同様に、カレントフォルダからのパスで指定するか、フルパスで指定することが出来ます。

引数情報テンポラリファイル
起動したファイルがアプリケーションだった場合のみ、PPBasicは引数情報を収めたテンポラリテキストファイルを作成します。このファイルを利用することにより、ユーザーはANSI仕様の独自のアプリケーションにおいても、要求された適切な引数情報を取得し、適切にアプリケーションの動作を切り替えることが出来ます。
テンポラリファイルは、PostPlot3Dの実行アプリケーションが収められているフォルダに作成されます。ファイル名はnp3dTmp_appLaunchParams.txtです。ファイルの内容は以下のサンプルコード実行結果中に示す通りで、コマンドそのものと起動アプリケーション名、コマンド実行時のカレントディレクトリ情報および引数として与えられたファイル名が記録されます。

ウェイトモードとノンウェイトモード
launchAppでは、コマンドにアプリケーション名を指定した場合はウェイトモードで起動し、書類を指定した場合はノンウェイトモードで起動します。より具体的には、PPBasicは起動時にファイルのtypeを調べ、これがAPPLであった場合にウェイトモードで動作する様になっています。そのため、AppleScript書類の場合でもアプリケーション形式でファイルを保存すれば処理をウェイトモードで実行することが出来ます。
ウェイトモードでアプリケーションを起動した場合、起動したアプリケーションが自動または手動で終了されるまでPPBasicは処理を再開しません。
アプリケーションをノンウェイトモードで起動したい場合、コマンドラインで起動するのと同様にコマンドの末尾に「 &」を付加すれば結構です。

 

 

#-----------------------------launchAppサンプルコード
launchApp("ye app.bas &")



 

#-----------------------------結果(np3dTmp_appLaunchParams.txtの内容
//-------コマンド
cw &
//-------起動アプリケーション
:bin:cw
//-------カレントディレクトリ
filesHD:Desktop Folder:testGraph0.4b
//-------ファイル名




配列変数の初期化:initArray
initArray(x,val)

配列変数xを値valで初期化します。配列変数は何次元のものでも初期化できます。





テキストファイルへ配列変数のデータ出力:fWriteArray
fWriteArray(fID, x)

open文で開いたテキストファイル(ファイル番号fID)へ配列変数の内容を書き出します。
配列変数は何次元のものでも出力可能で、書出し順序は以下のようになります。
例えば、三次元配列x(i,j,k)がの場合、以下のプログラムを実行した時と同じ順序で出力されます。

for k=1 to kmax
for j=1 to jmax
for i=1 to imax
print x(i,j,k)
next i:next j:next k


配列変数の内容は全てがテキストファイルへ出力されます。



配列変数へテキストデータからデータ読み込み:fReadArray
fReadArray(fID, x)

open文で開いたテキストファイルからデータを読み込み、配列xへ格納します。
配列の読み込み順はfWriteArrayを参照して下さい。
テキストファイルの中にはdim文で宣言したデータサイズと同一(またはそれ以上)のデータが入っていなければなりません。
データが不足していた場合はエラーになります。



離散座標のフラクタル補間:fractalInterpolation
fractalInterpolation(num,x,y,ndepth,n,xout,yout)

num個の点から成る節点群(ジェネレータ)のndepth階層までのフラクタル補間を行います。
fractalInterpolationでは、一次元配列x(),y()でジェネレータの座標を与え、補間した結果得られた点数をnに、座標を一次元配列xout(),yout()に返します。(ndepth=1のとき、補間結果とジェネレータは同一のものになります。)
xout()及びyout()の配列のサイズが補間後の点数よりも小さかった場合は、nに配列のサイズを返し、n個の座標群をxout(),yout()に返します。
また、ジェネレータの始点座標と終点座標に同一の点を与えるとfractalInterpolationはエラーを返して終了します。
以下にコッホ曲線及びフラクタル星雲の例を示します。



コッホ曲線のジェネレータ

ndepth=2

ndepth=3

ndepth=7

星雲のジェネレータ


補間結果を点で表示(ndepth=6)


particlePictureを使用した星雲画像

#-----------------------------サンプルコード
imem=270000

dim x(10),y(10),xout(imem),yout(imem)

disposeGworld
createGworld(800,600)
setGworld
cls

#-------------ジェネレータ選択
gosub *matrix1

#-------------深度設定
ndepth=1

#-------------再帰画像作成
fractalInterpolation(num,x,y,ndepth,n,xout,yout)
print "n->",n

#-------------表示形式を選択し、描画
#gosub *drawPixel
gosub *drawLine
#gosub *drawPicture
#-------------終了
end
#------------------------------------------------------




#--------------------------------画像を点で表示
*drawPixel
cls
for i=2 to n
MoveTo(xout(i),yout(i))
LineTo(xout(i),yout(i))
next
flushGworld
flushMainWin
return


#--------------------------------画像を線で表示
*drawLine
cls
for i=2 to n
MoveTo(xout(i-1),yout(i-1))
LineTo(xout(i),yout(i))
next
flushGworld
flushMainWin
return


#--------------------------------画像をPICTデータで表示
*drawPicture
dim vc1(imem),vc2(imem)
initArray(vc1,0.005)
initArray(vc2,1)

pict particlePict
pict outpict
openPictFile("cloud_s.pict",particlePict)
RGBFilter(particlePict,0.5,0.5,1)
print "pict画像作成中..."
particlePicture(particlePict,outpict,600,500,n,xout,yout,vc1,vc2)
drawPict(outpict,0,0)

flushGworld
flushMainWin
return


#--------------------------------ジェネレータ設定
#------------------コッホ曲線
*matrix1
num=5
x(1)= 50 :y(1)=200
x(2)=125 :y(2)=200
x(3)=162.5:y(3)=135
x(4)=200 :y(4)=200
x(5)=275 :y(5)=200
return


#-------------------フラクタル星雲
*matrix2
num=9
x(1)= 80:y(1)=177
x(2)=153:y(2)=133
x(3)=169:y(3)=129
x(4)=127:y(4)=318
x(5)= 86:y(5)=257
x(6)=351:y(6)=133
x(7)=388:y(7)=381
x(8)=420:y(8)=38
x(9)=448:y(9)=158
return