VTKファイルをつくる

 投稿者:しばっち  投稿日:2018年 3月10日(土)20時48分18秒
  オープンソースの「ParaView」という可視化ソフトと連携することを考えます。
データファイルの構造が分かると他アプリケーションと連携することができます。
ParaViewでは色々なファイルが読み込み可能ですが、ここではレガシーvtkファイル(Visualization Tool Kit)を十進BASICで
作成します(※世間的にはPythonを使うらしい)

vtkファイルにはアスキー形式(テキストファイル)とバイナリー形式とありますが、バイナリー形式は詳細不明なので
アスキー形式を作成します(※notepad等で内容を確認することができます)

このプログラムでは3次元陽関数 z=f(x,y)を計算しています。
また、ParaViewでは点(x,y,z)に対してスカラー値を設定することができます。(※ベクトルも設定できます)
十進BASICのグラフィックでいう点(x,y)のスカラー値は色(濃度値)ですが、ParaViewでは任意に設定できます。
プログラムでは、スカラー値にZ値(高さ)を設定しました。

なお、私の実行環境ではParaView ver 5以上は起動できませんでした(グラフィックドライバー(デバイス)が未対応?らしい)
その為、今回ParaView ver4.4.0を使用しました。下記URLからダウンロードしてください(Windows版、Linux版、Mac版、各OS版及び各ver)



ParaViewの詳しい操作及び、vtkフォーマットについては同梱されているドキュメント(※もちろん英語です)もしくは、ネット上で検索してください。
私も色々と模索しているところです。
ParaViewは日本語PATH、日本語ファイル名には対応していないようなので注意が必要です。

ParaViewのFileメニューから「open」で、このvtkファイルを読み込んでください(又はファイルをD&D)
もしこの時何も表示されない場合は、Propertiesにある「Apply」のボタンを押してください。
Pipeline Browserの中の目のようなアイコンをクリックするとそのレイヤーを表示、非表示に切り替えできます。
表示された図形はマウスでグリグリ動かすことができます。
「Delete」ボタンを押すと、メモリー上からデータが消去されます。
coloringの「Solid Color」をここでは「value」に変更するとスカラー値が採用されます。
coloringの「Edit」又は2行左から2列目のアイコンを押すとColor Map Editorが開き、「Choose preset」のアイコンからパターンを変更できます。
その時うまく適用されない場合は、「Rescale To Data Range」のアイコンをクリックしてください。
「3D」ボタンを押すと「3D」と「2D」が切り替わります。
X-Y-Z軸に目が描かれているアイコンを押すと座標軸を非表示にできます。その隣のアイコンでセンターのマークがついたり、消えたりします。

※連番vtkファイルには別の意味があるので、ここでは敢えて連番ファイルとして書き出しはしていません。

LET XSIZE=50
LET YSIZE=50
INPUT  PROMPT "MODE(0 - 41)=":MODE
FILE GETSAVENAME F$,"vtkファイル|*.vtk"
IF F$="" THEN STOP
IF POS(UCASE$(F$),".VTK")=0 THEN LET F$=F$&".vtk"
OPEN #1:NAME F$
ERASE #1
PRINT #1:"# vtk DataFile Version 3.0"
PRINT #1:"plane"
PRINT #1:"ASCII"
PRINT #1:"DATASET STRUCTURED_GRID"
PRINT #1:"DIMENSIONS";XSIZE;YSIZE;1
PRINT #1:"POINTS";XSIZE*YSIZE;"float"
LET XS=-5
LET YS=-5
LET XE=5
LET YE=5
LET STX=(XE-XS)/XSIZE
LET STY=(YE-YS)/YSIZE
LET SCALE=10
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      LET Z=FUNC(MODE,XS+X*STX,YS+Y*STY)
      PRINT #1:X;Y;Z
   NEXT   X
NEXT  Y
PRINT #1:"POINT_DATA";XSIZE*YSIZE
PRINT #1:"SCALARS value float"
PRINT #1:"LOOKUP_TABLE default"
FOR Y=0 TO YSIZE-1
   FOR X=0 TO XSIZE-1
      LET Z=FUNC(MODE,XS+X*STX,YS+Y*STY) !'スカラー値(Z値)
      PRINT #1:Z
   NEXT  X
NEXT   Y
CLOSE #1
END

EXTERNAL FUNCTION FUNC(MODE,X,Y) !'3次元陽関数 z=f(x,y)
SELECT CASE MODE
CASE 0
   LET FUNC=COS(5*SQR(X*X+Y*Y))
CASE 1
   LET FUNC=X*Y*(X^2-Y^2)
CASE 2
   LET FUNC=(X^2-Y^2)/2
CASE 3
   LET FUNC=EXP(-X^2-Y^2)*(X^2+Y^2)
CASE 4
   IF(X^2-1)*(X^2-9)*(Y^2-1)*(Y^2-9)>0 THEN
      LET FUNC=2
   ELSE
      LET FUNC=0
   END IF
CASE 5
   LET Z=4-X^2-Y^2
   IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 6
   LET Z=2*(X^2+Y^2-3)
   IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 7
   LET FUNC=EXP(-Y)*SIN(3*X)
CASE 8
   LET FUNC=MIN(3,X^2+Y^2-4)
CASE 9
   LET Z=1-X^2
   IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
   LET FUNC=MIN(Z,Y^2)
CASE 10
   IF X=0 AND Y=0 THEN
      LET FUNC=0
   ELSE
      LET FUNC=X*Y/(X^2+Y^2)
   END IF
CASE 11
   LET FUNC=LOG(X^2+Y^2+.1)
CASE 12
   LET FUNC=MAX(X^2+Y^2-(X^2+Y^2+Y)^2,-2)
CASE 13
   LET FUNC=MIN(MAX(X^3-3*X*Y+Y^3,-4),0)
CASE 14
   LET FUNC=SIN(X)*SIN(Y)*SIN(X+Y)
CASE 15
   LET FUNC=COS(PI*X)*COS(PI*Y)
CASE 16
   LET FUNC=COS(3*X*Y)
CASE 17
   LET FUNC=SQR(COS(X)^2+SINH(Y)^2)
CASE 18
   LET Z=1-X^2
   IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
   LET FUNC=MIN(Z,.5*(1.5*X-Y)^2)
CASE 19
   LET Z=1-(SQR(X^2+Y^2)-1.5)^2
   IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 20
   LET FUNC=6-4*SQR(X^2+Y^2)
CASE 21
   LET Z=1-X^2
   LET ZZ=1-Y^2
   IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
   IF ZZ>0 THEN LET ZZ=SQR(ZZ) ELSE LET ZZ=0
   LET FUNC=MAX(Z,ZZ)
CASE 22
   LET Z=1-(SQR(X^2+Y^2)-1.5)^2
   LET ZZ=.7-X^2
   IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
   IF ZZ>0 THEN LET ZZ=SQR(ZZ) ELSE LET ZZ=0
   LET FUNC=MAX(Z,ZZ)
CASE 23
   LET FUNC=EXP(-X^2+Y^2)
CASE 24
   LET Z=1-X^2
   IF Z>0 THEN LET Z=SQR(Z) ELSE LET Z=0
   LET FUNC=MIN(Z,.25*(Y^2-2.5)^2)
CASE 25
   IF X=0 OR Y=0 THEN
      LET FUNC=1
   ELSE
      LET FUNC=SIN(X*Y)/X/Y
   END IF
CASE 26
   LET Z=1-.25*(Y-SIN(X))^2
   IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 27
   LET FUNC=2*ABS(COS(X*PI)*COS(Y*PI))^3
CASE 28
   LET FUNC=(X^3+Y^3)/10
CASE 29
   LET FUNC=SQR(X^2+(Y+1)^2)*SQR(X^2+(Y-1)^2)
CASE 30
   LET FUNC=X^3-X*Y^2
CASE 31
   LET FUNC=SIN(X*Y)
CASE 32
   LET FUNC=3*EXP(-.5*((X-3*INT(X/3)-1.5)^2+(Y-3*INT(Y/3)-1.5)^2))*COS(PI*((X-3*INT(X/3)-1.5)^2+(Y-3*INT(Y/3)-1.5)^2))
CASE 33
   LET FUNC=EXP(.5*X)*SIN(Y)
CASE 34
   IF X>0 AND Y>0 THEN
      LET FUNC=0
   ELSE
      LET FUNC=6*EXP(-X^2-Y^2)*(X^2+Y^2)
   END IF
CASE 35
   LET Z=4-(X-2*INT((X+1)/2))^2-(Y-2*INT((Y+1)/2))^2
   IF Z>0 THEN LET FUNC=SQR(Z) ELSE LET FUNC=0
CASE 36
   LET FUNC=SIN(Y)+SIN(2*X)+SIN(3*Y)+SIN(4*X)+SIN(5*Y)
CASE 37
   LET FUNC=COS(X)+COS(2*Y)+COS(3*X)+COS(4*Y)+COS(5*X)
CASE 38
   LET FUNC=SIN(X)-COS(Y)+SIN(3*X)+COS(3*Y)+SIN(5*X)-COS(5*Y)
CASE 39
   LET FUNC=(X^2+SQR(2)*X*Y+Y^2-4)*(X^2-SQR(2)*X*Y+Y^2-4)
CASE 40
   LET FUNC=(Y^2-X^4+X^6)*(X^2-Y^4+Y^6)
CASE 41
   LET FUNC=SIN(2*X)*COS(Y)/2
CASE 42
!' LET FUNC=IM(EXP(-COMPLEX(X,Y))) !'複素数モード
END SELECT
END FUNCTION
 

戻る