ModelHandle/test/utils/testutils.js
2021-03-31 18:02:14 +02:00

140 lines
4.5 KiB
JavaScript

var fs = require ('fs');
var path = require ('path');
module.exports =
{
GetTextFileContent : function (folder, fileName)
{
var testFilePath = path.join ('testfiles', folder, fileName);
if (!fs.existsSync (testFilePath)) {
return null;
}
return fs.readFileSync (testFilePath).toString ();
},
GetArrayBufferFileContent : function (folder, fileName)
{
var testFilePath = path.join ('testfiles', folder, fileName);
var buffer = fs.readFileSync (testFilePath);
var arrayBuffer = new ArrayBuffer (buffer.length);
var uint8Array = new Uint8Array (arrayBuffer);
var i;
for (i = 0; i < buffer.length; ++i) {
uint8Array[i] = buffer[i];
}
return arrayBuffer
},
ModelToObject : function (model)
{
var obj = {
name : model.GetName (),
materials : [],
meshes : []
};
var i, j;
var material;
for (i = 0; i < model.MaterialCount (); i++) {
material = model.GetMaterial (i);
obj.materials.push ({
name : material.name
});
}
var mesh, triangle, meshObj, triangleObj;
for (i = 0; i < model.MeshCount (); i++) {
mesh = model.GetMesh (i);
meshObj = {
name : mesh.GetName (),
triangles : []
};
for (j = 0; j < mesh.TriangleCount (); j++) {
triangle = mesh.GetTriangle (j);
triangleObj = {
mat : triangle.mat,
vertices : [],
normals : [],
uvs : []
};
triangleObj.vertices.push (
mesh.GetVertex (triangle.v0).x,
mesh.GetVertex (triangle.v0).y,
mesh.GetVertex (triangle.v0).z,
mesh.GetVertex (triangle.v1).x,
mesh.GetVertex (triangle.v1).y,
mesh.GetVertex (triangle.v1).z,
mesh.GetVertex (triangle.v2).x,
mesh.GetVertex (triangle.v2).y,
mesh.GetVertex (triangle.v2).z
);
triangleObj.normals.push (
mesh.GetNormal (triangle.n0).x,
mesh.GetNormal (triangle.n0).y,
mesh.GetNormal (triangle.n0).z,
mesh.GetNormal (triangle.n1).x,
mesh.GetNormal (triangle.n1).y,
mesh.GetNormal (triangle.n1).z,
mesh.GetNormal (triangle.n2).x,
mesh.GetNormal (triangle.n2).y,
mesh.GetNormal (triangle.n2).z
);
if (triangle.HasTextureUVs ()) {
triangleObj.uvs.push (
mesh.GetTextureUV (triangle.u0).x,
mesh.GetTextureUV (triangle.u0).y,
mesh.GetTextureUV (triangle.u1).x,
mesh.GetTextureUV (triangle.u1).y,
mesh.GetTextureUV (triangle.u2).x,
mesh.GetTextureUV (triangle.u2).y
);
}
meshObj.triangles.push (triangleObj);
}
obj.meshes.push (meshObj);
}
return obj;
},
ModelToObjectSimple : function (model)
{
var obj = {
name : model.GetName (),
materials : [],
meshes : []
};
var i;
var material;
for (i = 0; i < model.MaterialCount (); i++) {
material = model.GetMaterial (i);
obj.materials.push ({
name : material.name
});
}
var mesh, meshObj, boundingBox;
for (i = 0; i < model.MeshCount (); i++) {
mesh = model.GetMesh (i);
boundingBox = OV.GetMeshBoundingBox (mesh);
meshObj = {
name : mesh.GetName (),
vertexCount : mesh.VertexCount (),
normalCount : mesh.NormalCount (),
uvCount : mesh.TextureUVCount (),
triangleCount : mesh.TriangleCount (),
boundingBox : {
min : [boundingBox[0].x, boundingBox[0].y, boundingBox[0].z],
max : [boundingBox[1].x, boundingBox[1].y, boundingBox[1].z]
}
};
obj.meshes.push (meshObj);
}
return obj;
}
}