|
ParaViewでは「anime000.vtk」「anime001.vtk」「anime002.vtk」のような連番ファイルを自動的にグループ化して
読み込み、アニメーションとして再生することができます。
このプログラムでは立方体を回して、『回転』アニメーションを表示させます。
上の方にある緑の三角形の「Play」のアイコンをクリックしてください。
アニメーションが再生されます。
また、fileメニューの「Save Animation」から連番静止画(jpg,png)や動画(avi,ogv)を書き出すことができます。
image magickなら連番の静止画から
convert(magick) -delay 10 -loop 0 anime*.jpg anime.gif
convert(magick) -delay 10 -loop 0 anime*.jpg anime.mng
とすればフレームレート10/100秒、無限回ループのアニメーションgifやmngファイルを生成できます。
※なお、大量書き込みにつきましてはご容赦下さい。
OPTION ANGLE DEGREES
DIM M(4,4),POINT(4),ROTXY(4,4),ROTXZ(4,4),ROTYU(4,4),ROTYZ(4,4),ROTXU(4,4),ROTZU(4,4)
LET L=100
LET X=0
LET Y=0
LET Z=0
LET U=0
LET ST=5 !'回転角
FILE GETSAVENAME F$,"vtkファイル|*.vtk" !'BASE名のみ(拡張子なし)
IF F$="" THEN STOP
FOR J=1 TO 360/ST
LET FF$=F$&RIGHT$("000"&STR$(J),3)
IF POS(UCASE$(FF$),".VTK")=0 THEN LET FF$=FF$&".vtk"
OPEN #1:NAME FF$
ERASE #1
LET YU=YU+ST
LET XZ=XZ+ST
MAT ROTXY=IDN !'XY平面上の回転
LET ROTXY(1,1)=COS(XY)
LET ROTXY(1,2)=SIN(XY)
LET ROTXY(2,1)=-SIN(XY)
LET ROTXY(2,2)=COS(XY)
MAT ROTXZ=IDN !'XZ平面上の回転
LET ROTXZ(1,1)=COS(XZ)
LET ROTXZ(1,3)=-SIN(XZ)
LET ROTXZ(3,1)=SIN(XZ)
LET ROTXZ(3,3)=COS(XZ)
MAT ROTYU=IDN !'YU平面上の回転
LET ROTYU(2,2)=COS(YU)
LET ROTYU(2,4)=-SIN(YU)
LET ROTYU(4,2)=SIN(YU)
LET ROTYU(4,4)=COS(YU)
MAT ROTYZ=IDN !'YZ平面上の回転
LET ROTYZ(2,2)=COS(YZ)
LET ROTYZ(2,3)=SIN(YZ)
LET ROTYZ(3,2)=-SIN(YZ)
LET ROTYZ(3,3)=COS(YZ)
MAT ROTXU=IDN !'XU平面上の回転
LET ROTXU(1,1)=COS(XU)
LET ROTXU(1,4)=SIN(XU)
LET ROTXU(4,1)=-SIN(XU)
LET ROTXU(4,4)=COS(XU)
MAT ROTZU=IDN !'ZU平面上の回転
LET ROTZU(3,3)=COS(ZU)
LET ROTZU(3,4)=-SIN(ZU)
LET ROTZU(4,3)=SIN(ZU)
LET ROTZU(4,4)=COS(ZU)
MAT M=ROTXY*ROTXZ*ROTYU*ROTYZ*ROTXU*ROTZU !'4次元回転
PRINT #1:"# vtk DataFile Version 2.0"
PRINT #1:"cube"
PRINT #1:"ASCII"
PRINT #1:"DATASET UNSTRUCTURED_GRID"
PRINT #1:"POINTS 8 float"
LET FLG=0
CALL PLOT(X-L/2,Y-L/2,Z-L/2,U) !'座標
CALL PLOT(X+L/2,Y-L/2,Z-L/2,U)
CALL PLOT(X+L/2,Y+L/2,Z-L/2,U)
CALL PLOT(X-L/2,Y+L/2,Z-L/2,U)
CALL PLOT(X-L/2,Y-L/2,Z+L/2,U)
CALL PLOT(X+L/2,Y-L/2,Z+L/2,U)
CALL PLOT(X+L/2,Y+L/2,Z+L/2,U)
CALL PLOT(X-L/2,Y+L/2,Z+L/2,U)
PRINT #1:"CELLS 1 9"
PRINT #1:"8 0 1 2 3 4 5 6 7" !'meshデータ
PRINT #1:"CELL_TYPES 1"
PRINT #1:12 !'立方体を表す
PRINT #1:"POINT_DATA 8"
PRINT #1:"SCALARS height float"
PRINT #1:"LOOKUP_TABLE default"
LET FLG=1
CALL PLOT(X-L/2,Y-L/2,Z-L/2,U) !'スカラー値
CALL PLOT(X+L/2,Y-L/2,Z-L/2,U)
CALL PLOT(X+L/2,Y+L/2,Z-L/2,U)
CALL PLOT(X-L/2,Y+L/2,Z-L/2,U)
CALL PLOT(X-L/2,Y-L/2,Z+L/2,U)
CALL PLOT(X+L/2,Y-L/2,Z+L/2,U)
CALL PLOT(X+L/2,Y+L/2,Z+L/2,U)
CALL PLOT(X-L/2,Y+L/2,Z+L/2,U)
CLOSE #1
NEXT J
SUB PLOT(X,Y,Z,U)
LET LU=100
LET POINT(1)=X
LET POINT(2)=Y
LET POINT(3)=Z
LET POINT(4)=U
MAT POINT=POINT*M
FOR I=1 TO 4
LET POINT(I)=POINT(I)/(LU-POINT(4))
NEXT I
IF FLG=0 THEN
PRINT #1:POINT(1);POINT(2);POINT(3) !'座標
ELSE
PRINT #1:POINT(2) !'スカラー値
END IF
END SUB
END
|
|