A Scilab script to draw a cylinder shape in a general configuration is shown in Code 1. The result of the drawing by this script is shown in Figure 1.
// make_cylinder_general.sce
clear; xdel(winsid());
exec('eulerXYZ.sci', -1);
exec('transver.sci', -1);
exec('genpat.sci', -1);
// Reference position
r = [1; 1; 1];
// Reference orientation
R = eulerXYZ(-%pi/3, 0, 0);
// Cylinder spec
Radius = 0.1;
Height = 0.3;
SideCount = 20;
// Vertices
vertices_0 = zeros(2*SideCount, 3);
for i = 1:SideCount
theta = 2*%pi/SideCount*(i-1);
vertices_0(i,:) = [Radius*cos(theta), Radius*sin(theta), 0];
vertices_0(SideCount+i,:) = [Radius*cos(theta), Radius*sin(theta), Height];
end
vertices = transver(vertices_0, r, R);
// Side faces
sideFaces = zeros(SideCount, 4);
for i = 1:(SideCount-1)
sideFaces(i,:) = [i, i+1, SideCount+i+1, SideCount+i];
end
sideFaces(SideCount,:) = [SideCount, 1, SideCount+1, 2*SideCount];
// Bottom faces
bottomFaces = [
1:SideCount;
(SideCount+1):2*SideCount];
// Side patches
sidePatches = genpat(vertices, sideFaces);
// Bottom patches
bottomPatches = genpat(vertices, bottomFaces);
// Draw patches
h_fig = figure;
h_fig.background = 8;
h_sidePat = plot3d(sidePatches.x, sidePatches.y, sidePatches.z);
h_sidePat.color_mode = 4;
h_sidePat.foreground = 1;
h_sidePat.hiddencolor = 4;
h_bottomPat = plot3d(bottomPatches.x, bottomPatches.y, bottomPatches.z);
h_bottomPat.color_mode = 4;
h_bottomPat.foreground = 1;
h_bottomPat.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.8, 0.9, 0.8; 1.3, 1.4, 1.3];
xgrid;