// anim_block_rotate.sce

clear; xdel(winsid());

exec('eulerXYZ.sci', -1);
exec('transver.sci', -1);
exec('genpat.sci', -1);
exec('calcBlock.sci', -1);

// Block spec
Lx = 0.15;
Ly = 0.05;
Lz = 0.30;

// Motion data
t = (0:0.001:1)';             // Time data
position = [0*t, 0*t, 0*t];   // Position data
angles = [2*%pi*t, 0*t, 0*t]; // Orientation data (XYZ Euler angles)

// Initial patches
r_ini = position(1,:)';
R_ini = eulerXYZ(angles(1,1), angles(1,2), angles(1,3));
patches_ini = calcBlock(r_ini, R_ini, Lx, Ly, Lz);

// Draw initial figure
h_fig = figure;
h_fig.background = 8;
drawlater();
h_pat = plot3d(patches_ini.x, patches_ini.y, patches_ini.z);
h_pat.color_mode = 4;
h_pat.foreground = 1;
h_pat.hiddencolor = 4;

// Axes settings
xlabel("x"); ylabel("y"); zlabel("z");
h_axes = gca();
h_axes.isoview = "on";
h_axes.box = "off";
h_axes.rotation_angles = [63.5, -127];
h_axes.data_bounds = [-0.5, -0.5, -0.5; 0.7, 0.5, 0.5];
xgrid;

// Compute patches at each time
for i = 1:length(t)
    r = position(i,:)';
    R = eulerXYZ(angles(i,1), angles(i,2), angles(i,3));
    patches(i) = calcBlock(r, R, Lx, Ly, Lz);
end

// Animation Loop
for i = 1:length(t)
    drawlater();
    h_pat.data.x = patches(i).x;
    h_pat.data.y = patches(i).y;
    h_pat.data.z = patches(i).z;
    drawnow();
end