Replace tabs with spaces everywhere.

This commit is contained in:
Viktor Kovacs 2021-03-31 18:02:14 +02:00
parent d1000c0c93
commit c770b84e26
38 changed files with 3591 additions and 3591 deletions

View File

@ -1,26 +1,26 @@
OV.Exporter = class
{
constructor ()
{
this.exporters = [
new OV.ExporterObj (),
new OV.ExporterStl (),
new OV.ExporterPly (),
new OV.ExporterOff (),
new OV.ExporterGltf ()
];
}
constructor ()
{
this.exporters = [
new OV.ExporterObj (),
new OV.ExporterStl (),
new OV.ExporterPly (),
new OV.ExporterOff (),
new OV.ExporterGltf ()
];
}
Export (model, format, extension)
{
let files = [];
for (let i = 0; i < this.exporters.length; i++) {
let exporter = this.exporters[i];
if (exporter.CanExport (format, extension)) {
exporter.Export (model, format, files);
break;
}
}
return files;
}
Export (model, format, extension)
{
let files = [];
for (let i = 0; i < this.exporters.length; i++) {
let exporter = this.exporters[i];
if (exporter.CanExport (format, extension)) {
exporter.Export (model, format, files);
break;
}
}
return files;
}
};

View File

@ -1,100 +1,100 @@
OV.Mesh = class
{
constructor ()
{
this.name = '';
this.vertices = [];
this.normals = [];
this.uvs = [];
this.triangles = [];
}
constructor ()
{
this.name = '';
this.vertices = [];
this.normals = [];
this.uvs = [];
this.triangles = [];
}
GetName ()
{
return this.name;
}
SetName (name)
{
this.name = name;
}
VertexCount ()
{
return this.vertices.length;
}
NormalCount ()
{
return this.normals.length;
}
TextureUVCount ()
{
return this.uvs.length;
}
TriangleCount ()
{
return this.triangles.length;
}
AddVertex (vertex)
{
this.vertices.push (vertex);
return this.vertices.length - 1;
}
GetName ()
{
return this.name;
}
SetName (name)
{
this.name = name;
}
VertexCount ()
{
return this.vertices.length;
}
NormalCount ()
{
return this.normals.length;
}
TextureUVCount ()
{
return this.uvs.length;
}
TriangleCount ()
{
return this.triangles.length;
}
AddVertex (vertex)
{
this.vertices.push (vertex);
return this.vertices.length - 1;
}
SetVertex (index, vertex)
{
this.vertices[index] = vertex;
}
GetVertex (index)
{
return this.vertices[index];
}
AddNormal (normal)
{
this.normals.push (normal);
return this.normals.length - 1;
}
SetVertex (index, vertex)
{
this.vertices[index] = vertex;
}
GetVertex (index)
{
return this.vertices[index];
}
AddNormal (normal)
{
this.normals.push (normal);
return this.normals.length - 1;
}
SetNormal (index, normal)
{
this.normals[index] = normal;
}
SetNormal (index, normal)
{
this.normals[index] = normal;
}
GetNormal (index)
{
return this.normals[index];
}
AddTextureUV (uv)
{
this.uvs.push (uv);
return this.uvs.length - 1;
}
GetNormal (index)
{
return this.normals[index];
}
AddTextureUV (uv)
{
this.uvs.push (uv);
return this.uvs.length - 1;
}
SetTextureUV (index, uv)
{
this.uvs[index] = uv;
}
GetTextureUV (index)
{
return this.uvs[index];
}
AddTriangle (triangle)
{
this.triangles.push (triangle);
return this.triangles.length - 1;
}
GetTriangle (index)
{
return this.triangles[index];
}
SetTextureUV (index, uv)
{
this.uvs[index] = uv;
}
GetTextureUV (index)
{
return this.uvs[index];
}
AddTriangle (triangle)
{
this.triangles.push (triangle);
return this.triangles.length - 1;
}
GetTriangle (index)
{
return this.triangles[index];
}
};

View File

@ -1,105 +1,105 @@
OV.Model = class
{
constructor ()
{
this.name = '';
this.materials = [];
this.meshes = [];
}
constructor ()
{
this.name = '';
this.materials = [];
this.meshes = [];
}
GetName ()
{
return this.name;
}
GetName ()
{
return this.name;
}
SetName (name)
{
this.name = name;
}
SetName (name)
{
this.name = name;
}
MaterialCount ()
{
return this.materials.length;
}
MaterialCount ()
{
return this.materials.length;
}
MeshCount ()
{
return this.meshes.length;
}
MeshCount ()
{
return this.meshes.length;
}
VertexCount ()
{
let count = 0;
for (let i = 0; i < this.meshes.length; i++) {
count += this.meshes[i].VertexCount ();
}
return count;
}
VertexCount ()
{
let count = 0;
for (let i = 0; i < this.meshes.length; i++) {
count += this.meshes[i].VertexCount ();
}
return count;
}
NormalCount ()
{
let count = 0;
for (let i = 0; i < this.meshes.length; i++) {
count += this.meshes[i].NormalCount ();
}
return count;
}
NormalCount ()
{
let count = 0;
for (let i = 0; i < this.meshes.length; i++) {
count += this.meshes[i].NormalCount ();
}
return count;
}
TextureUVCount ()
{
let count = 0;
for (let i = 0; i < this.meshes.length; i++) {
count += this.meshes[i].TextureUVCount ();
}
return count;
}
TextureUVCount ()
{
let count = 0;
for (let i = 0; i < this.meshes.length; i++) {
count += this.meshes[i].TextureUVCount ();
}
return count;
}
TriangleCount ()
{
let count = 0;
for (let i = 0; i < this.meshes.length; i++) {
count += this.meshes[i].TriangleCount ();
}
return count;
}
TriangleCount ()
{
let count = 0;
for (let i = 0; i < this.meshes.length; i++) {
count += this.meshes[i].TriangleCount ();
}
return count;
}
AddMaterial (material)
{
this.materials.push (material);
return this.materials.length - 1;
}
AddMaterial (material)
{
this.materials.push (material);
return this.materials.length - 1;
}
GetMaterial (index)
{
return this.materials[index];
}
GetMaterial (index)
{
return this.materials[index];
}
AddMesh (mesh)
{
this.meshes.push (mesh);
return this.meshes.length - 1;
}
AddMesh (mesh)
{
this.meshes.push (mesh);
return this.meshes.length - 1;
}
AddMeshToIndex (mesh, index)
{
this.meshes.splice (index, 0, mesh);
return index;
}
AddMeshToIndex (mesh, index)
{
this.meshes.splice (index, 0, mesh);
return index;
}
RemoveMesh (index)
{
this.meshes.splice (index, 1);
}
RemoveMesh (index)
{
this.meshes.splice (index, 1);
}
GetMesh (index)
{
return this.meshes[index];
}
GetMesh (index)
{
return this.meshes[index];
}
Clear ()
{
this.name = '';
this.materials = [];
this.meshes = [];
}
Clear ()
{
this.name = '';
this.materials = [];
this.meshes = [];
}
};

View File

@ -1,255 +1,255 @@
OV.SRGBToLinear = function (component)
{
if (component < 0.04045) {
return component * 0.0773993808;
} else {
return Math.pow (component * 0.9478672986 + 0.0521327014, 2.4);
}
if (component < 0.04045) {
return component * 0.0773993808;
} else {
return Math.pow (component * 0.9478672986 + 0.0521327014, 2.4);
}
};
OV.LinearToSRGB = function (component)
{
if (component < 0.0031308) {
return component * 12.92;
} else {
return 1.055 * (Math.pow (component, 0.41666)) - 0.055;
}
if (component < 0.0031308) {
return component * 12.92;
} else {
return 1.055 * (Math.pow (component, 0.41666)) - 0.055;
}
};
OV.Color = class
{
constructor (r, g, b)
{
this.r = r; // 0 .. 255
this.g = g; // 0 .. 255
this.b = b; // 0 .. 255
}
constructor (r, g, b)
{
this.r = r; // 0 .. 255
this.g = g; // 0 .. 255
this.b = b; // 0 .. 255
}
ToHexString ()
{
function IntegerToHex (intVal)
{
let result = parseInt (intVal, 10).toString (16);
while (result.length < 2) {
result = '0' + result;
}
return result;
}
ToHexString ()
{
function IntegerToHex (intVal)
{
let result = parseInt (intVal, 10).toString (16);
while (result.length < 2) {
result = '0' + result;
}
return result;
}
let r = IntegerToHex (this.r);
let g = IntegerToHex (this.g);
let b = IntegerToHex (this.b);
return r + g + b;
}
let r = IntegerToHex (this.r);
let g = IntegerToHex (this.g);
let b = IntegerToHex (this.b);
return r + g + b;
}
Clone ()
{
return new OV.Color (this.r, this.g, this.b);
}
Clone ()
{
return new OV.Color (this.r, this.g, this.b);
}
};
OV.TextureMap = class
{
constructor ()
{
this.name = null;
this.url = null;
this.buffer = null;
this.offset = new OV.Coord2D (0.0, 0.0);
this.scale = new OV.Coord2D (1.0, 1.0);
this.rotation = 0.0; // radians
}
constructor ()
{
this.name = null;
this.url = null;
this.buffer = null;
this.offset = new OV.Coord2D (0.0, 0.0);
this.scale = new OV.Coord2D (1.0, 1.0);
this.rotation = 0.0; // radians
}
IsValid ()
{
return this.name !== null && this.url !== null && this.buffer !== null;
}
IsValid ()
{
return this.name !== null && this.url !== null && this.buffer !== null;
}
HasTransformation ()
{
if (!OV.CoordIsEqual2D (this.offset, new OV.Coord2D (0.0, 0.0))) {
return true;
}
if (!OV.CoordIsEqual2D (this.scale, new OV.Coord2D (1.0, 1.0))) {
return true;
}
if (!OV.IsEqual (this.rotation, 0.0)) {
return true;
}
HasTransformation ()
{
if (!OV.CoordIsEqual2D (this.offset, new OV.Coord2D (0.0, 0.0))) {
return true;
}
if (!OV.CoordIsEqual2D (this.scale, new OV.Coord2D (1.0, 1.0))) {
return true;
}
if (!OV.IsEqual (this.rotation, 0.0)) {
return true;
}
return false;
}
}
Clone ()
{
let cloned = new OV.TextureMap ();
cloned.name = this.name;
cloned.url = this.url;
cloned.buffer = this.buffer;
cloned.offset = this.offset.Clone ();
cloned.scale = this.scale.Clone ();
cloned.rotation = this.rotation;
return cloned;
}
Clone ()
{
let cloned = new OV.TextureMap ();
cloned.name = this.name;
cloned.url = this.url;
cloned.buffer = this.buffer;
cloned.offset = this.offset.Clone ();
cloned.scale = this.scale.Clone ();
cloned.rotation = this.rotation;
return cloned;
}
};
OV.Material = class
{
constructor ()
{
this.name = '';
constructor ()
{
this.name = '';
this.ambient = new OV.Color (0, 0, 0);
this.diffuse = new OV.Color (0, 0, 0);
this.specular = new OV.Color (0, 0, 0);
this.emissive = new OV.Color (0, 0, 0);
this.ambient = new OV.Color (0, 0, 0);
this.diffuse = new OV.Color (0, 0, 0);
this.specular = new OV.Color (0, 0, 0);
this.emissive = new OV.Color (0, 0, 0);
this.shininess = 0.0; // 0.0 .. 1.0
this.opacity = 1.0; // 0.0 .. 1.0
this.shininess = 0.0; // 0.0 .. 1.0
this.opacity = 1.0; // 0.0 .. 1.0
this.diffuseMap = null;
this.specularMap = null;
this.bumpMap = null;
this.normalMap = null;
this.emissiveMap = null;
this.diffuseMap = null;
this.specularMap = null;
this.bumpMap = null;
this.normalMap = null;
this.emissiveMap = null;
this.alphaTest = 0.0; // 0.0 .. 1.0
this.transparent = false;
this.multiplyDiffuseMap = false;
}
this.alphaTest = 0.0; // 0.0 .. 1.0
this.transparent = false;
this.multiplyDiffuseMap = false;
}
EnumerateTextureMaps (enumerator)
{
if (this.diffuseMap !== null) {
enumerator (this.diffuseMap);
}
if (this.specularMap !== null) {
enumerator (this.specularMap);
}
if (this.bumpMap !== null) {
enumerator (this.bumpMap);
}
if (this.normalMap !== null) {
enumerator (this.normalMap);
}
if (this.emissiveMap !== null) {
enumerator (this.emissiveMap);
}
}
EnumerateTextureMaps (enumerator)
{
if (this.diffuseMap !== null) {
enumerator (this.diffuseMap);
}
if (this.specularMap !== null) {
enumerator (this.specularMap);
}
if (this.bumpMap !== null) {
enumerator (this.bumpMap);
}
if (this.normalMap !== null) {
enumerator (this.normalMap);
}
if (this.emissiveMap !== null) {
enumerator (this.emissiveMap);
}
}
Clone ()
{
let cloned = new OV.Material ();
Clone ()
{
let cloned = new OV.Material ();
cloned.name = this.name;
cloned.name = this.name;
cloned.ambient = this.ambient.Clone ();
cloned.diffuse = this.diffuse.Clone ();
cloned.specular = this.specular.Clone ();
cloned.emissive = this.emissive.Clone ();
cloned.ambient = this.ambient.Clone ();
cloned.diffuse = this.diffuse.Clone ();
cloned.specular = this.specular.Clone ();
cloned.emissive = this.emissive.Clone ();
cloned.shininess = this.shininess;
cloned.opacity = this.opacity;
cloned.shininess = this.shininess;
cloned.opacity = this.opacity;
cloned.diffuseMap = this.CloneTextureMap (this.diffuseMap);
cloned.specularMap = this.CloneTextureMap (this.specularMap);
cloned.bumpMap = this.CloneTextureMap (this.bumpMap);
cloned.normalMap = this.CloneTextureMap (this.normalMap);
cloned.emissiveMap = this.CloneTextureMap (this.emissiveMap);
cloned.diffuseMap = this.CloneTextureMap (this.diffuseMap);
cloned.specularMap = this.CloneTextureMap (this.specularMap);
cloned.bumpMap = this.CloneTextureMap (this.bumpMap);
cloned.normalMap = this.CloneTextureMap (this.normalMap);
cloned.emissiveMap = this.CloneTextureMap (this.emissiveMap);
cloned.alphaTest = this.alphaTest;
cloned.transparent = this.transparent;
cloned.multiplyDiffuseMap = this.multiplyDiffuseMap;
cloned.alphaTest = this.alphaTest;
cloned.transparent = this.transparent;
cloned.multiplyDiffuseMap = this.multiplyDiffuseMap;
return cloned;
}
return cloned;
}
CloneTextureMap (textureMap)
{
if (textureMap === null) {
return null;
}
return textureMap.Clone ();
}
CloneTextureMap (textureMap)
{
if (textureMap === null) {
return null;
}
return textureMap.Clone ();
}
};
OV.Triangle = class
{
constructor (v0, v1, v2)
{
this.v0 = v0;
this.v1 = v1;
this.v2 = v2;
this.n0 = null;
this.n1 = null;
this.n2 = null;
this.u0 = null;
this.u1 = null;
this.u2 = null;
this.mat = null;
this.curve = null;
}
constructor (v0, v1, v2)
{
this.v0 = v0;
this.v1 = v1;
this.v2 = v2;
this.n0 = null;
this.n1 = null;
this.n2 = null;
this.u0 = null;
this.u1 = null;
this.u2 = null;
this.mat = null;
this.curve = null;
}
HasVertices ()
{
return this.v0 !== null && this.v1 !== null && this.v2 !== null;
}
HasVertices ()
{
return this.v0 !== null && this.v1 !== null && this.v2 !== null;
}
HasNormals ()
{
return this.n0 !== null && this.n1 !== null && this.n2 !== null;
}
HasNormals ()
{
return this.n0 !== null && this.n1 !== null && this.n2 !== null;
}
HasTextureUVs ()
{
return this.u0 !== null && this.u1 !== null && this.u2 !== null;
}
HasTextureUVs ()
{
return this.u0 !== null && this.u1 !== null && this.u2 !== null;
}
SetVertices (v0, v1, v2)
{
this.v0 = v0;
this.v1 = v1;
this.v2 = v2;
return this;
}
SetNormals (n0, n1, n2)
{
this.n0 = n0;
this.n1 = n1;
this.n2 = n2;
return this;
}
SetTextureUVs (u0, u1, u2)
{
this.u0 = u0;
this.u1 = u1;
this.u2 = u2;
return this;
}
SetVertices (v0, v1, v2)
{
this.v0 = v0;
this.v1 = v1;
this.v2 = v2;
return this;
}
SetNormals (n0, n1, n2)
{
this.n0 = n0;
this.n1 = n1;
this.n2 = n2;
return this;
}
SetTextureUVs (u0, u1, u2)
{
this.u0 = u0;
this.u1 = u1;
this.u2 = u2;
return this;
}
SetMaterial (mat)
{
this.mat = mat;
return this;
}
SetCurve (curve)
{
this.curve = curve;
return this;
}
SetMaterial (mat)
{
this.mat = mat;
return this;
}
SetCurve (curve)
{
this.curve = curve;
return this;
}
Clone ()
{
let cloned = new OV.Triangle (this.v0, this.v1, this.v2);
cloned.SetNormals (this.n0, this.n1, this.n2);
cloned.SetTextureUVs (this.u0, this.u1, this.u2);
cloned.SetMaterial (this.mat);
cloned.SetCurve (this.curve);
return cloned;
}
Clone ()
{
let cloned = new OV.Triangle (this.v0, this.v1, this.v2);
cloned.SetNormals (this.n0, this.n1, this.n2);
cloned.SetTextureUVs (this.u0, this.u1, this.u2);
cloned.SetMaterial (this.mat);
cloned.SetCurve (this.curve);
return cloned;
}
};

View File

@ -1,7 +1,7 @@
OV.FinalizeModel = function (model, getDefaultMaterial)
{
function FinalizeMesh (mesh, getDefaultMaterialIndex)
{
function FinalizeMesh (mesh, getDefaultMaterialIndex)
{
function CalculateCurveNormals (mesh)
{
function AddAverageNormal (mesh, triangle, vertexIndex, triangleNormals, vertexToTriangles)
@ -54,9 +54,9 @@ OV.FinalizeModel = function (model, getDefaultMaterial)
}
}
function FinalizeTriangle (mesh, triangle, status)
{
if (!triangle.HasNormals ()) {
function FinalizeTriangle (mesh, triangle, status)
{
if (!triangle.HasNormals ()) {
if (triangle.curve === null || triangle.curve === 0) {
let v0 = mesh.GetVertex (triangle.v0);
let v1 = mesh.GetVertex (triangle.v1);
@ -67,29 +67,29 @@ OV.FinalizeModel = function (model, getDefaultMaterial)
} else {
status.calculateCurveNormals = true;
}
}
}
if (triangle.mat === null) {
triangle.mat = status.getDefaultMaterialIndex ();
}
if (triangle.curve === null) {
triangle.curve = 0;
}
}
}
let status = {
getDefaultMaterialIndex : getDefaultMaterialIndex,
calculateCurveNormals : false
};
for (let i = 0; i < mesh.TriangleCount (); i++) {
let triangle = mesh.GetTriangle (i);
FinalizeTriangle (mesh, triangle, status);
}
for (let i = 0; i < mesh.TriangleCount (); i++) {
let triangle = mesh.GetTriangle (i);
FinalizeTriangle (mesh, triangle, status);
}
if (status.calculateCurveNormals) {
CalculateCurveNormals (mesh);
}
}
}
let defaultMaterialIndex = null;
let getDefaultMaterialIndex = function () {
@ -143,9 +143,9 @@ OV.CheckModel = function (model)
}
function CheckMesh (model, mesh)
{
{
function CheckTriangle (model, mesh, triangle)
{
{
if (!IsCorrectIndex (triangle.v0, mesh.VertexCount ())) {
return false;
}
@ -183,53 +183,53 @@ OV.CheckModel = function (model)
}
return true;
}
for (let i = 0; i < mesh.VertexCount (); i++) {
let vertex = mesh.GetVertex (i);
if (!IsCorrectNumber (vertex.x)) {
}
for (let i = 0; i < mesh.VertexCount (); i++) {
let vertex = mesh.GetVertex (i);
if (!IsCorrectNumber (vertex.x)) {
return false;
}
if (!IsCorrectNumber (vertex.y)) {
if (!IsCorrectNumber (vertex.y)) {
return false;
}
if (!IsCorrectNumber (vertex.z)) {
if (!IsCorrectNumber (vertex.z)) {
return false;
}
}
}
for (let i = 0; i < mesh.NormalCount (); i++) {
let normal = mesh.GetNormal (i);
if (!IsCorrectNumber (normal.x)) {
for (let i = 0; i < mesh.NormalCount (); i++) {
let normal = mesh.GetNormal (i);
if (!IsCorrectNumber (normal.x)) {
return false;
}
if (!IsCorrectNumber (normal.y)) {
if (!IsCorrectNumber (normal.y)) {
return false;
}
if (!IsCorrectNumber (normal.z)) {
if (!IsCorrectNumber (normal.z)) {
return false;
}
}
}
for (let i = 0; i < mesh.TextureUVCount (); i++) {
let uv = mesh.GetTextureUV (i);
if (!IsCorrectNumber (uv.x)) {
for (let i = 0; i < mesh.TextureUVCount (); i++) {
let uv = mesh.GetTextureUV (i);
if (!IsCorrectNumber (uv.x)) {
return false;
}
if (!IsCorrectNumber (uv.y)) {
if (!IsCorrectNumber (uv.y)) {
return false;
}
}
}
for (let i = 0; i < mesh.TriangleCount (); i++) {
let triangle = mesh.GetTriangle (i);
if (!CheckTriangle (model, mesh, triangle)) {
let triangle = mesh.GetTriangle (i);
if (!CheckTriangle (model, mesh, triangle)) {
return false;
}
}
}
return true;
}
}
for (let i = 0; i < model.MeshCount (); i++) {
let mesh = model.GetMesh (i);

View File

@ -1,16 +1,16 @@
OV.CalculateTriangleNormal = function (v0, v1, v2)
{
let v = OV.SubCoord3D (v1, v0);
let w = OV.SubCoord3D (v2, v0);
let normal = new OV.Coord3D (
v.y * w.z - v.z * w.y,
v.z * w.x - v.x * w.z,
v.x * w.y - v.y * w.x
);
let v = OV.SubCoord3D (v1, v0);
let w = OV.SubCoord3D (v2, v0);
let normal = new OV.Coord3D (
v.y * w.z - v.z * w.y,
v.z * w.x - v.x * w.z,
v.x * w.y - v.y * w.x
);
normal.Normalize ();
return normal;
normal.Normalize ();
return normal;
};
OV.TransformMesh = function (mesh, transformation)
@ -43,20 +43,20 @@ OV.TransformMesh = function (mesh, transformation)
OV.GetMeshBoundingBox = function (mesh)
{
let min = new OV.Coord3D (Infinity, Infinity, Infinity);
let max = new OV.Coord3D (-Infinity, -Infinity, -Infinity);
let min = new OV.Coord3D (Infinity, Infinity, Infinity);
let max = new OV.Coord3D (-Infinity, -Infinity, -Infinity);
for (let i = 0; i < mesh.VertexCount (); i++) {
let vertex = mesh.GetVertex (i);
min.x = Math.min (min.x, vertex.x);
min.y = Math.min (min.y, vertex.y);
min.z = Math.min (min.z, vertex.z);
max.x = Math.max (max.x, vertex.x);
max.y = Math.max (max.y, vertex.y);
max.z = Math.max (max.z, vertex.z);
}
return [min, max];
min.x = Math.min (min.x, vertex.x);
min.y = Math.min (min.y, vertex.y);
min.z = Math.min (min.z, vertex.z);
max.x = Math.max (max.x, vertex.x);
max.y = Math.max (max.y, vertex.y);
max.z = Math.max (max.z, vertex.z);
}
return [min, max];
};
OV.IsModelEmpty = function (model)

View File

@ -37,7 +37,7 @@ OV.Init3DViewerElements = function ()
return true;
});
viewer.AdjustClippingPlanes (boundingSphere);
viewer.FitToWindow (boundingSphere, false);
viewer.FitToWindow (boundingSphere, false);
},
onTextureLoaded : function () {
viewer.Render ();

View File

@ -1,56 +1,56 @@
OV.GetClientCoordinates = function (canvas, clientX, clientY)
{
if (canvas.getBoundingClientRect) {
let clientRect = canvas.getBoundingClientRect ();
clientX -= clientRect.left;
clientY -= clientRect.top;
}
if (window.pageXOffset && window.pageYOffset) {
clientX += window.pageXOffset;
clientY += window.pageYOffset;
}
return (new OV.Coord2D (clientX, clientY));
if (canvas.getBoundingClientRect) {
let clientRect = canvas.getBoundingClientRect ();
clientX -= clientRect.left;
clientY -= clientRect.top;
}
if (window.pageXOffset && window.pageYOffset) {
clientX += window.pageXOffset;
clientY += window.pageYOffset;
}
return (new OV.Coord2D (clientX, clientY));
};
OV.Camera = class
{
constructor (eye, center, up)
{
this.eye = eye;
this.center = center;
this.up = up;
}
constructor (eye, center, up)
{
this.eye = eye;
this.center = center;
this.up = up;
}
Clone ()
{
return new OV.Camera (
this.eye.Clone (),
this.center.Clone (),
this.up.Clone ()
);
}
Clone ()
{
return new OV.Camera (
this.eye.Clone (),
this.center.Clone (),
this.up.Clone ()
);
}
};
OV.MouseInteraction = class
{
constructor ()
{
this.prev = new OV.Coord2D (0.0, 0.0);
this.curr = new OV.Coord2D (0.0, 0,0);
this.diff = new OV.Coord2D (0.0, 0.0);
this.buttons = [];
}
constructor ()
{
this.prev = new OV.Coord2D (0.0, 0.0);
this.curr = new OV.Coord2D (0.0, 0,0);
this.diff = new OV.Coord2D (0.0, 0.0);
this.buttons = [];
}
Down (canvas, ev)
{
this.buttons.push (ev.which);
this.curr = this.GetCurrent (canvas, ev);
this.prev = this.curr.Clone ();
}
Down (canvas, ev)
{
this.buttons.push (ev.which);
this.curr = this.GetCurrent (canvas, ev);
this.prev = this.curr.Clone ();
}
Move (canvas, ev)
{
this.curr = this.GetCurrent (canvas, ev);
Move (canvas, ev)
{
this.curr = this.GetCurrent (canvas, ev);
this.diff = OV.SubCoord2D (this.curr, this.prev);
this.prev = this.curr.Clone ();
}

View File

@ -1,399 +1,399 @@
OV.GetDefaultCamera = function (direction)
{
if (direction === OV.Direction.X) {
return new OV.Camera (
new OV.Coord3D (2.0, -3.0, 1.5),
new OV.Coord3D (0.0, 0.0, 0.0),
new OV.Coord3D (1.0, 0.0, 0.0)
);
} else if (direction === OV.Direction.Y) {
return new OV.Camera (
new OV.Coord3D (-1.5, 2.0, 3.0),
new OV.Coord3D (0.0, 0.0, 0.0),
new OV.Coord3D (0.0, 1.0, 0.0)
);
} else if (direction === OV.Direction.Z) {
return new OV.Camera (
new OV.Coord3D (-1.5, -3.0, 2.0),
new OV.Coord3D (0.0, 0.0, 0.0),
new OV.Coord3D (0.0, 0.0, 1.0)
);
}
return null;
if (direction === OV.Direction.X) {
return new OV.Camera (
new OV.Coord3D (2.0, -3.0, 1.5),
new OV.Coord3D (0.0, 0.0, 0.0),
new OV.Coord3D (1.0, 0.0, 0.0)
);
} else if (direction === OV.Direction.Y) {
return new OV.Camera (
new OV.Coord3D (-1.5, 2.0, 3.0),
new OV.Coord3D (0.0, 0.0, 0.0),
new OV.Coord3D (0.0, 1.0, 0.0)
);
} else if (direction === OV.Direction.Z) {
return new OV.Camera (
new OV.Coord3D (-1.5, -3.0, 2.0),
new OV.Coord3D (0.0, 0.0, 0.0),
new OV.Coord3D (0.0, 0.0, 1.0)
);
}
return null;
};
OV.UpVector = class
{
constructor ()
{
this.direction = OV.Direction.Z;
this.isFixed = true;
this.isFlipped = false;
}
constructor ()
{
this.direction = OV.Direction.Z;
this.isFixed = true;
this.isFlipped = false;
}
SetDirection (newDirection, oldCamera)
{
this.direction = newDirection;
this.isFlipped = false;
SetDirection (newDirection, oldCamera)
{
this.direction = newDirection;
this.isFlipped = false;
let defaultCamera = OV.GetDefaultCamera (this.direction);
let defaultDir = OV.SubCoord3D (defaultCamera.eye, defaultCamera.center);
let defaultCamera = OV.GetDefaultCamera (this.direction);
let defaultDir = OV.SubCoord3D (defaultCamera.eye, defaultCamera.center);
let distance = OV.CoordDistance3D (oldCamera.center, oldCamera.eye);
let newEye = oldCamera.center.Clone ().Offset (defaultDir, distance);
let distance = OV.CoordDistance3D (oldCamera.center, oldCamera.eye);
let newEye = oldCamera.center.Clone ().Offset (defaultDir, distance);
let newCamera = oldCamera.Clone ();
if (this.direction === OV.Direction.Y) {
newCamera.up = new OV.Coord3D (0.0, 1.0, 0.0);
newCamera.eye = newEye;
} else if (this.direction === OV.Direction.Z) {
newCamera.up = new OV.Coord3D (0.0, 0.0, 1.0);
newCamera.eye = newEye;
}
return newCamera;
}
let newCamera = oldCamera.Clone ();
if (this.direction === OV.Direction.Y) {
newCamera.up = new OV.Coord3D (0.0, 1.0, 0.0);
newCamera.eye = newEye;
} else if (this.direction === OV.Direction.Z) {
newCamera.up = new OV.Coord3D (0.0, 0.0, 1.0);
newCamera.eye = newEye;
}
return newCamera;
}
SetFixed (isFixed, oldCamera)
{
this.isFixed = isFixed;
if (this.isFixed) {
return this.SetDirection (this.direction, oldCamera);
}
return null;
}
SetFixed (isFixed, oldCamera)
{
this.isFixed = isFixed;
if (this.isFixed) {
return this.SetDirection (this.direction, oldCamera);
}
return null;
}
Flip (oldCamera)
{
this.isFlipped = !this.isFlipped;
let newCamera = oldCamera.Clone ();
newCamera.up.MultiplyScalar (-1.0);
return newCamera;
}
Flip (oldCamera)
{
this.isFlipped = !this.isFlipped;
let newCamera = oldCamera.Clone ();
newCamera.up.MultiplyScalar (-1.0);
return newCamera;
}
};
OV.Viewer = class
{
constructor ()
{
this.canvas = null;
this.renderer = null;
this.scene = null;
this.camera = null;
this.light = null;
this.navigation = null;
this.upVector = null;
this.settings = {
animationSteps : 40
};
}
Init (canvas)
{
this.canvas = canvas;
this.canvas.id = 'viewer';
this.canvas.addEventListener ('contenxtmenu', function (ev) {
ev.preventDefault ();
});
constructor ()
{
this.canvas = null;
this.renderer = null;
this.scene = null;
this.camera = null;
this.light = null;
this.navigation = null;
this.upVector = null;
this.settings = {
animationSteps : 40
};
}
Init (canvas)
{
this.canvas = canvas;
this.canvas.id = 'viewer';
this.canvas.addEventListener ('contenxtmenu', function (ev) {
ev.preventDefault ();
});
let parameters = {
canvas : this.canvas,
antialias : true
};
this.renderer = new THREE.WebGLRenderer (parameters);
this.renderer.setClearColor ('#ffffff', 1.0);
this.renderer.setSize (this.canvas.width, this.canvas.height);
this.scene = new THREE.Scene ();
let parameters = {
canvas : this.canvas,
antialias : true
};
this.renderer = new THREE.WebGLRenderer (parameters);
this.renderer.setClearColor ('#ffffff', 1.0);
this.renderer.setSize (this.canvas.width, this.canvas.height);
this.scene = new THREE.Scene ();
this.InitCamera ();
this.InitLights ();
this.InitCamera ();
this.InitLights ();
this.Render ();
}
this.Render ();
}
SetClickHandler (onClick)
{
this.navigation.SetClickHandler (onClick);
}
SetClickHandler (onClick)
{
this.navigation.SetClickHandler (onClick);
}
GetCamera ()
{
return this.navigation.GetCamera ();
}
SetCamera (camera)
{
this.navigation.SetCamera (camera);
this.Render ();
}
GetCamera ()
{
return this.navigation.GetCamera ();
}
SetCamera (camera)
{
this.navigation.SetCamera (camera);
this.Render ();
}
Resize (width, height)
{
let innerSize = OV.GetInnerDimensions (this.canvas, width, height);
this.ResizeRenderer (innerSize.width, innerSize.height);
}
Resize (width, height)
{
let innerSize = OV.GetInnerDimensions (this.canvas, width, height);
this.ResizeRenderer (innerSize.width, innerSize.height);
}
ResizeRenderer (width, height)
{
this.camera.aspect = width / height;
this.camera.updateProjectionMatrix ();
this.renderer.setSize (width, height);
this.Render ();
}
ResizeRenderer (width, height)
{
this.camera.aspect = width / height;
this.camera.updateProjectionMatrix ();
this.renderer.setSize (width, height);
this.Render ();
}
FitToWindow (boundingSphere, animation)
{
if (boundingSphere === null) {
return;
}
let center = new OV.Coord3D (boundingSphere.center.x, boundingSphere.center.y, boundingSphere.center.z);
let radius = boundingSphere.radius;
let fov = this.camera.fov;
if (animation) {
let newCamera = this.navigation.GetFitToSphereCamera (center, radius, fov);
this.navigation.MoveCamera (newCamera, this.settings.animationSteps);
} else {
this.navigation.FitToSphere (center, radius, fov);
}
}
FitToWindow (boundingSphere, animation)
{
if (boundingSphere === null) {
return;
}
let center = new OV.Coord3D (boundingSphere.center.x, boundingSphere.center.y, boundingSphere.center.z);
let radius = boundingSphere.radius;
let fov = this.camera.fov;
if (animation) {
let newCamera = this.navigation.GetFitToSphereCamera (center, radius, fov);
this.navigation.MoveCamera (newCamera, this.settings.animationSteps);
} else {
this.navigation.FitToSphere (center, radius, fov);
}
}
AdjustClippingPlanes (boundingSphere)
{
if (boundingSphere === null) {
return;
}
if (boundingSphere.radius < 10.0) {
this.camera.near = 0.01;
this.camera.far = 100.0;
} else if (boundingSphere.radius < 100.0) {
this.camera.near = 0.1;
this.camera.far = 1000.0;
} else if (boundingSphere.radius < 1000.0) {
this.camera.near = 10.0;
this.camera.far = 10000.0;
} else {
this.camera.near = 100.0;
this.camera.far = 1000000.0;
}
this.camera.updateProjectionMatrix ();
this.Render ();
}
AdjustClippingPlanes (boundingSphere)
{
if (boundingSphere === null) {
return;
}
if (boundingSphere.radius < 10.0) {
this.camera.near = 0.01;
this.camera.far = 100.0;
} else if (boundingSphere.radius < 100.0) {
this.camera.near = 0.1;
this.camera.far = 1000.0;
} else if (boundingSphere.radius < 1000.0) {
this.camera.near = 10.0;
this.camera.far = 10000.0;
} else {
this.camera.near = 100.0;
this.camera.far = 1000000.0;
}
this.camera.updateProjectionMatrix ();
this.Render ();
}
IsFixUpVector ()
{
return this.navigation.IsFixUpVector ();
}
IsFixUpVector ()
{
return this.navigation.IsFixUpVector ();
}
SetFixUpVector (fixUpVector)
{
let oldCamera = this.navigation.GetCamera ();
let newCamera = this.upVector.SetFixed (fixUpVector, oldCamera);
this.navigation.SetFixUpVector (fixUpVector);
if (newCamera !== null) {
this.navigation.MoveCamera (newCamera, this.settings.animationSteps);
}
this.Render ();
}
SetFixUpVector (fixUpVector)
{
let oldCamera = this.navigation.GetCamera ();
let newCamera = this.upVector.SetFixed (fixUpVector, oldCamera);
this.navigation.SetFixUpVector (fixUpVector);
if (newCamera !== null) {
this.navigation.MoveCamera (newCamera, this.settings.animationSteps);
}
this.Render ();
}
SetUpVector (upDirection, animate)
{
let oldCamera = this.navigation.GetCamera ();
let newCamera = this.upVector.SetDirection (upDirection, oldCamera);
let animationSteps = animate ? this.settings.animationSteps : 0;
this.navigation.MoveCamera (newCamera, animationSteps);
this.Render ();
}
SetUpVector (upDirection, animate)
{
let oldCamera = this.navigation.GetCamera ();
let newCamera = this.upVector.SetDirection (upDirection, oldCamera);
let animationSteps = animate ? this.settings.animationSteps : 0;
this.navigation.MoveCamera (newCamera, animationSteps);
this.Render ();
}
FlipUpVector ()
{
let oldCamera = this.navigation.GetCamera ();
let newCamera = this.upVector.Flip (oldCamera);
this.navigation.MoveCamera (newCamera, 0);
this.Render ();
}
FlipUpVector ()
{
let oldCamera = this.navigation.GetCamera ();
let newCamera = this.upVector.Flip (oldCamera);
this.navigation.MoveCamera (newCamera, 0);
this.Render ();
}
Render ()
{
let navigationCamera = this.navigation.GetCamera ();
this.camera.position.set (navigationCamera.eye.x, navigationCamera.eye.y, navigationCamera.eye.z);
this.camera.up.set (navigationCamera.up.x, navigationCamera.up.y, navigationCamera.up.z);
this.camera.lookAt (new THREE.Vector3 (navigationCamera.center.x, navigationCamera.center.y, navigationCamera.center.z));
let lightDir = OV.SubCoord3D (navigationCamera.eye, navigationCamera.center);
this.light.position.set (lightDir.x, lightDir.y, lightDir.z);
this.renderer.render (this.scene, this.camera);
}
Render ()
{
let navigationCamera = this.navigation.GetCamera ();
this.camera.position.set (navigationCamera.eye.x, navigationCamera.eye.y, navigationCamera.eye.z);
this.camera.up.set (navigationCamera.up.x, navigationCamera.up.y, navigationCamera.up.z);
this.camera.lookAt (new THREE.Vector3 (navigationCamera.center.x, navigationCamera.center.y, navigationCamera.center.z));
let lightDir = OV.SubCoord3D (navigationCamera.eye, navigationCamera.center);
this.light.position.set (lightDir.x, lightDir.y, lightDir.z);
this.renderer.render (this.scene, this.camera);
}
AddMeshes (meshes)
{
for (let i = 0; i < meshes.length; i++) {
let mesh = meshes[i];
this.scene.add (mesh);
}
this.Render ();
}
AddMeshes (meshes)
{
for (let i = 0; i < meshes.length; i++) {
let mesh = meshes[i];
this.scene.add (mesh);
}
this.Render ();
}
Clear ()
{
this.ClearMeshes ();
this.Render ();
}
Clear ()
{
this.ClearMeshes ();
this.Render ();
}
SetMeshesVisibility (isVisible)
{
this.EnumerateMeshes (function (mesh) {
let visible = isVisible (mesh.userData);
if (mesh.visible !== visible) {
mesh.visible = visible;
}
});
this.Render ();
}
SetMeshesVisibility (isVisible)
{
this.EnumerateMeshes (function (mesh) {
let visible = isVisible (mesh.userData);
if (mesh.visible !== visible) {
mesh.visible = visible;
}
});
this.Render ();
}
SetMeshesHighlight (highlightMaterial, isHighlighted)
{
function CreateHighlightMaterials (originalMaterials, highlightMaterial)
{
let highlightMaterials = [];
for (let i = 0; i < originalMaterials.length; i++) {
highlightMaterials.push (highlightMaterial);
}
return highlightMaterials;
}
SetMeshesHighlight (highlightMaterial, isHighlighted)
{
function CreateHighlightMaterials (originalMaterials, highlightMaterial)
{
let highlightMaterials = [];
for (let i = 0; i < originalMaterials.length; i++) {
highlightMaterials.push (highlightMaterial);
}
return highlightMaterials;
}
this.EnumerateMeshes (function (mesh) {
let highlighted = isHighlighted (mesh.userData);
if (highlighted) {
if (mesh.userData.threeMaterials === null) {
mesh.userData.threeMaterials = mesh.material;
mesh.material = CreateHighlightMaterials (mesh.material, highlightMaterial);
}
} else {
if (mesh.userData.threeMaterials !== null) {
mesh.material = mesh.userData.threeMaterials;
mesh.userData.threeMaterials = null;
}
}
});
this.Render ();
}
this.EnumerateMeshes (function (mesh) {
let highlighted = isHighlighted (mesh.userData);
if (highlighted) {
if (mesh.userData.threeMaterials === null) {
mesh.userData.threeMaterials = mesh.material;
mesh.material = CreateHighlightMaterials (mesh.material, highlightMaterial);
}
} else {
if (mesh.userData.threeMaterials !== null) {
mesh.material = mesh.userData.threeMaterials;
mesh.userData.threeMaterials = null;
}
}
});
this.Render ();
}
GetMeshUnderMouse (mouseCoords)
{
let raycaster = new THREE.Raycaster ();
let mousePos = new THREE.Vector2 ();
mousePos.x = (mouseCoords.x / this.canvas.width) * 2 - 1;
mousePos.y = -(mouseCoords.y / this.canvas.height) * 2 + 1;
raycaster.setFromCamera (mousePos, this.camera);
let iSectObjects = raycaster.intersectObjects (this.scene.children);
for (let i = 0; i < iSectObjects.length; i++) {
let iSectObject = iSectObjects[i];
if (iSectObject.object.type === 'Mesh' && iSectObject.object.visible) {
return iSectObject.object.userData;
}
}
return null;
}
GetMeshUnderMouse (mouseCoords)
{
let raycaster = new THREE.Raycaster ();
let mousePos = new THREE.Vector2 ();
mousePos.x = (mouseCoords.x / this.canvas.width) * 2 - 1;
mousePos.y = -(mouseCoords.y / this.canvas.height) * 2 + 1;
raycaster.setFromCamera (mousePos, this.camera);
let iSectObjects = raycaster.intersectObjects (this.scene.children);
for (let i = 0; i < iSectObjects.length; i++) {
let iSectObject = iSectObjects[i];
if (iSectObject.object.type === 'Mesh' && iSectObject.object.visible) {
return iSectObject.object.userData;
}
}
return null;
}
GetBoundingBox (needToProcess)
{
let hasMesh = false;
let boundingBox = new THREE.Box3 ();
this.EnumerateMeshes (function (mesh) {
if (needToProcess (mesh.userData)) {
boundingBox.union (new THREE.Box3 ().setFromObject (mesh));
hasMesh = true;
}
});
GetBoundingBox (needToProcess)
{
let hasMesh = false;
let boundingBox = new THREE.Box3 ();
this.EnumerateMeshes (function (mesh) {
if (needToProcess (mesh.userData)) {
boundingBox.union (new THREE.Box3 ().setFromObject (mesh));
hasMesh = true;
}
});
if (!hasMesh) {
return null;
}
return boundingBox;
}
if (!hasMesh) {
return null;
}
return boundingBox;
}
GetBoundingSphere (needToProcess)
{
let boundingBox = this.GetBoundingBox (needToProcess);
if (boundingBox === null) {
return null;
}
GetBoundingSphere (needToProcess)
{
let boundingBox = this.GetBoundingBox (needToProcess);
if (boundingBox === null) {
return null;
}
let boundingSphere = new THREE.Sphere ();
boundingBox.getBoundingSphere (boundingSphere);
return boundingSphere;
}
let boundingSphere = new THREE.Sphere ();
boundingBox.getBoundingSphere (boundingSphere);
return boundingSphere;
}
EnumerateMeshesUserData (enumerator)
{
this.EnumerateMeshes (function (mesh) {
enumerator (mesh.userData);
});
}
EnumerateMeshesUserData (enumerator)
{
this.EnumerateMeshes (function (mesh) {
enumerator (mesh.userData);
});
}
EnumerateMeshes (enumerator)
{
this.scene.traverse (function (object) {
if (object.isMesh) {
enumerator (object);
}
});
}
EnumerateMeshes (enumerator)
{
this.scene.traverse (function (object) {
if (object.isMesh) {
enumerator (object);
}
});
}
ClearMeshes ()
{
for (let i = this.scene.children.length - 1; i >= 0; i--) {
let object = this.scene.children[i];
if (object.isMesh) {
object.geometry.dispose ();
this.scene.remove (object);
}
}
}
ClearMeshes ()
{
for (let i = this.scene.children.length - 1; i >= 0; i--) {
let object = this.scene.children[i];
if (object.isMesh) {
object.geometry.dispose ();
this.scene.remove (object);
}
}
}
InitCamera ()
{
this.camera = new THREE.PerspectiveCamera (45.0, this.canvas.width / this.canvas.height, 0.1, 1000.0);
this.scene.add (this.camera);
InitCamera ()
{
this.camera = new THREE.PerspectiveCamera (45.0, this.canvas.width / this.canvas.height, 0.1, 1000.0);
this.scene.add (this.camera);
let canvasElem = this.renderer.domElement;
let camera = OV.GetDefaultCamera (OV.Direction.Z);
let canvasElem = this.renderer.domElement;
let camera = OV.GetDefaultCamera (OV.Direction.Z);
let obj = this;
this.navigation = new OV.Navigation (canvasElem, camera);
this.navigation.SetUpdateHandler (function () {
obj.Render ();
});
let obj = this;
this.navigation = new OV.Navigation (canvasElem, camera);
this.navigation.SetUpdateHandler (function () {
obj.Render ();
});
this.upVector = new OV.UpVector ();
}
this.upVector = new OV.UpVector ();
}
InitLights ()
{
let ambientLight = new THREE.AmbientLight (0x888888);
this.scene.add (ambientLight);
this.light = new THREE.DirectionalLight (0x888888);
this.scene.add (this.light);
}
InitLights ()
{
let ambientLight = new THREE.AmbientLight (0x888888);
this.scene.add (ambientLight);
this.light = new THREE.DirectionalLight (0x888888);
this.scene.add (this.light);
}
GetImageAsDataUrl (width, height)
{
let originalSize = null;
if (width && height) {
originalSize = new THREE.Vector2 ();
this.renderer.getSize (originalSize);
this.ResizeRenderer (width, height);
}
this.Render ();
let url = this.renderer.domElement.toDataURL();
if (originalSize !== null) {
this.ResizeRenderer (
parseInt (originalSize.x, 10),
parseInt (originalSize.y, 10)
);
}
return url;
}
GetImageAsDataUrl (width, height)
{
let originalSize = null;
if (width && height) {
originalSize = new THREE.Vector2 ();
this.renderer.getSize (originalSize);
this.ResizeRenderer (width, height);
}
this.Render ();
let url = this.renderer.domElement.toDataURL();
if (originalSize !== null) {
this.ResizeRenderer (
parseInt (originalSize.x, 10),
parseInt (originalSize.y, 10)
);
}
return url;
}
};

View File

@ -7,8 +7,8 @@ var testDirName = './tests/';
var files = fs.readdirSync (testDirName, { withFileTypes: true });
var i, file;
for (i = 0; i < files.length; i++) {
file = files[i];
if (file.isFile ()) {
require (testDirName + file.name);
}
file = files[i];
if (file.isFile ()) {
require (testDirName + file.name);
}
}

View File

@ -178,7 +178,7 @@ describe ('Exporter', function () {
'endsolid Model',
''
].join ('\n'));
});
});
it ('Stl Binary Export', function () {
let model = CreateTestModel ();
@ -201,7 +201,7 @@ describe ('Exporter', function () {
let importedModel = importer.GetModel ();
assert.strictEqual (importedModel.VertexCount (), 12);
assert.strictEqual (importedModel.TriangleCount (), 4);
});
});
it ('Off Export', function () {
let model = CreateTestModel ();

View File

@ -2,40 +2,40 @@ var assert = require ('assert');
function GetLines (str)
{
var lines = [];
OV.ReadLines (str, function (line) {
lines.push (line);
});
return lines;
var lines = [];
OV.ReadLines (str, function (line) {
lines.push (line);
});
return lines;
}
describe ('File Utils', function () {
it ('Get File Extension', function () {
assert.strictEqual (OV.GetFileExtension ('file'), '');
assert.strictEqual (OV.GetFileExtension ('file.obj'), 'obj');
assert.strictEqual (OV.GetFileExtension ('file.OBJ'), 'OBJ');
});
it ('Get File Name', function () {
assert.strictEqual (OV.GetFileName ('file'), 'file');
assert.strictEqual (OV.GetFileName ('file.obj'), 'file.obj');
assert.strictEqual (OV.GetFileName ('file.OBJ'), 'file.OBJ');
assert.strictEqual (OV.GetFileName ('folder/file'), 'file');
assert.strictEqual (OV.GetFileName ('folder/file.obj'), 'file.obj');
assert.strictEqual (OV.GetFileName ('folder/file.OBJ'), 'file.OBJ');
assert.strictEqual (OV.GetFileName ('folder\\file'), 'file');
assert.strictEqual (OV.GetFileName ('folder\\file.obj'), 'file.obj');
assert.strictEqual (OV.GetFileName ('folder\\file.OBJ'), 'file.OBJ');
});
it ('Get File Extension', function () {
assert.strictEqual (OV.GetFileExtension ('file'), '');
assert.strictEqual (OV.GetFileExtension ('file.obj'), 'obj');
assert.strictEqual (OV.GetFileExtension ('file.OBJ'), 'OBJ');
});
it ('Get File Name', function () {
assert.strictEqual (OV.GetFileName ('file'), 'file');
assert.strictEqual (OV.GetFileName ('file.obj'), 'file.obj');
assert.strictEqual (OV.GetFileName ('file.OBJ'), 'file.OBJ');
assert.strictEqual (OV.GetFileName ('folder/file'), 'file');
assert.strictEqual (OV.GetFileName ('folder/file.obj'), 'file.obj');
assert.strictEqual (OV.GetFileName ('folder/file.OBJ'), 'file.OBJ');
assert.strictEqual (OV.GetFileName ('folder\\file'), 'file');
assert.strictEqual (OV.GetFileName ('folder\\file.obj'), 'file.obj');
assert.strictEqual (OV.GetFileName ('folder\\file.OBJ'), 'file.OBJ');
});
it ('Read Lines', function () {
assert.deepStrictEqual (GetLines (''), []);
assert.deepStrictEqual (GetLines ('\n'), []);
assert.deepStrictEqual (GetLines ('\r\n'), []);
assert.deepStrictEqual (GetLines ('a\nb'), ['a', 'b']);
assert.deepStrictEqual (GetLines ('apple\nbanana'), ['apple', 'banana']);
assert.deepStrictEqual (GetLines ('apple\r\nbanana'), ['apple', 'banana']);
assert.deepStrictEqual (GetLines ('apple\r\n'), ['apple']);
assert.deepStrictEqual (GetLines ('\r\napple\r\n'), ['apple']);
});
it ('Read Lines', function () {
assert.deepStrictEqual (GetLines (''), []);
assert.deepStrictEqual (GetLines ('\n'), []);
assert.deepStrictEqual (GetLines ('\r\n'), []);
assert.deepStrictEqual (GetLines ('a\nb'), ['a', 'b']);
assert.deepStrictEqual (GetLines ('apple\nbanana'), ['apple', 'banana']);
assert.deepStrictEqual (GetLines ('apple\r\nbanana'), ['apple', 'banana']);
assert.deepStrictEqual (GetLines ('apple\r\n'), ['apple']);
assert.deepStrictEqual (GetLines ('\r\napple\r\n'), ['apple']);
});
});

View File

@ -2,145 +2,145 @@ var assert = require ('assert');
function CreateYRot90Quaternion ()
{
let angle = Math.PI / 2.0;
let rotX = 0.0;
let rotY = 1.0;
let rotZ = 0.0;
let quaternion = [
Math.sin (angle / 2.0) * rotX,
Math.sin (angle / 2.0) * rotY,
Math.sin (angle / 2.0) * rotZ,
Math.cos (angle / 2.0)
];
return quaternion;
let angle = Math.PI / 2.0;
let rotX = 0.0;
let rotY = 1.0;
let rotZ = 0.0;
let quaternion = [
Math.sin (angle / 2.0) * rotX,
Math.sin (angle / 2.0) * rotY,
Math.sin (angle / 2.0) * rotZ,
Math.cos (angle / 2.0)
];
return quaternion;
}
describe ('Coord', function () {
it ('Length', function () {
var c = new OV.Coord3D (2.0, 0.0, 0.0);
assert.strictEqual (c.Length (), 2.0);
});
it ('Multiply Scalar', function () {
var c = new OV.Coord3D (2.0, 0.0, 0.0);
c.MultiplyScalar (3.0);
assert.strictEqual (c.x, 6.0);
assert.strictEqual (c.y, 0.0);
assert.strictEqual (c.z, 0.0);
});
it ('Normalize', function () {
var c = new OV.Coord3D (2.0, 0.0, 0.0);
c.Normalize ();
assert.strictEqual (c.x, 1.0);
assert.strictEqual (c.y, 0.0);
assert.strictEqual (c.z, 0.0);
});
it ('Length', function () {
var c = new OV.Coord3D (2.0, 0.0, 0.0);
assert.strictEqual (c.Length (), 2.0);
});
it ('Multiply Scalar', function () {
var c = new OV.Coord3D (2.0, 0.0, 0.0);
c.MultiplyScalar (3.0);
assert.strictEqual (c.x, 6.0);
assert.strictEqual (c.y, 0.0);
assert.strictEqual (c.z, 0.0);
});
it ('Normalize', function () {
var c = new OV.Coord3D (2.0, 0.0, 0.0);
c.Normalize ();
assert.strictEqual (c.x, 1.0);
assert.strictEqual (c.y, 0.0);
assert.strictEqual (c.z, 0.0);
});
});
describe ('Triangle', function() {
it ('Calculate Normal', function () {
var normal = OV.CalculateTriangleNormal (
new OV.Coord3D (0.0, 0.0, 0.0),
new OV.Coord3D (1.0, 0.0, 0.0),
new OV.Coord3D (1.0, 1.0, 0.0)
);
assert.strictEqual (normal.x, 0.0);
assert.strictEqual (normal.y, 0.0);
assert.strictEqual (normal.z, 1.0);
});
it ('Calculate Normal', function () {
var normal = OV.CalculateTriangleNormal (
new OV.Coord3D (0.0, 0.0, 0.0),
new OV.Coord3D (1.0, 0.0, 0.0),
new OV.Coord3D (1.0, 1.0, 0.0)
);
assert.strictEqual (normal.x, 0.0);
assert.strictEqual (normal.y, 0.0);
assert.strictEqual (normal.z, 1.0);
});
});
describe ('Transformation', function() {
it ('Basic Test', function () {
let rotation = CreateYRot90Quaternion ();
it ('Basic Test', function () {
let rotation = CreateYRot90Quaternion ();
let coord = new OV.Coord3D (1.0, 2.0, 3.0);
let coord = new OV.Coord3D (1.0, 2.0, 3.0);
let tr = new OV.Transformation ();
assert (tr.IsIdentity ());
assert (OV.CoordIsEqual3D (tr.TransformCoord3D (coord), new OV.Coord3D (1.0, 2.0, 3.0)));
let tr = new OV.Transformation ();
assert (tr.IsIdentity ());
assert (OV.CoordIsEqual3D (tr.TransformCoord3D (coord), new OV.Coord3D (1.0, 2.0, 3.0)));
tr.AppendMatrix (new OV.Matrix ().CreateScale (3.0, 4.0, 5.0));
assert (!tr.IsIdentity ());
assert (OV.CoordIsEqual3D (tr.TransformCoord3D (coord), new OV.Coord3D (3.0, 8.0, 15.0)));
tr.AppendMatrix (new OV.Matrix ().CreateScale (3.0, 4.0, 5.0));
assert (!tr.IsIdentity ());
assert (OV.CoordIsEqual3D (tr.TransformCoord3D (coord), new OV.Coord3D (3.0, 8.0, 15.0)));
tr.AppendMatrix (new OV.Matrix ().CreateRotation (rotation[0], rotation[1], rotation[2], rotation[3]));
assert (!tr.IsIdentity ());
assert (OV.CoordIsEqual3D (tr.TransformCoord3D (coord), new OV.Coord3D (15.0, 8.0, -3.0)));
tr.AppendMatrix (new OV.Matrix ().CreateTranslation (4.0, 5.0, 6.0));
assert (!tr.IsIdentity ());
assert (OV.CoordIsEqual3D (tr.TransformCoord3D (coord), new OV.Coord3D (19.0, 13.0, 3.0)));
tr.AppendMatrix (new OV.Matrix ().CreateRotation (rotation[0], rotation[1], rotation[2], rotation[3]));
assert (!tr.IsIdentity ());
assert (OV.CoordIsEqual3D (tr.TransformCoord3D (coord), new OV.Coord3D (15.0, 8.0, -3.0)));
tr.AppendMatrix (new OV.Matrix ().CreateTranslation (4.0, 5.0, 6.0));
assert (!tr.IsIdentity ());
assert (OV.CoordIsEqual3D (tr.TransformCoord3D (coord), new OV.Coord3D (19.0, 13.0, 3.0)));
let tr2 = new OV.Transformation ();
tr2.SetMatrix (new OV.Matrix ().ComposeTRS ([4.0, 5.0, 6.0], rotation, [3.0, 4.0, 5.0]));
assert (OV.CoordIsEqual3D (tr2.TransformCoord3D (coord), new OV.Coord3D (19.0, 13.0, 3.0)));
});
let tr2 = new OV.Transformation ();
tr2.SetMatrix (new OV.Matrix ().ComposeTRS ([4.0, 5.0, 6.0], rotation, [3.0, 4.0, 5.0]));
assert (OV.CoordIsEqual3D (tr2.TransformCoord3D (coord), new OV.Coord3D (19.0, 13.0, 3.0)));
});
it ('TRS Compose Test', function () {
let rotation = CreateYRot90Quaternion ();
let coord = new OV.Coord3D (1.0, 2.0, 3.0);
it ('TRS Compose Test', function () {
let rotation = CreateYRot90Quaternion ();
let coord = new OV.Coord3D (1.0, 2.0, 3.0);
let tr = new OV.Transformation ();
tr.SetMatrix (new OV.Matrix ().ComposeTRS ([4.0, 5.0, 6.0], rotation, [3.0, 4.0, 5.0]));
assert (OV.CoordIsEqual3D (tr.TransformCoord3D (coord), new OV.Coord3D (19.0, 13.0, 3.0)));
});
let tr = new OV.Transformation ();
tr.SetMatrix (new OV.Matrix ().ComposeTRS ([4.0, 5.0, 6.0], rotation, [3.0, 4.0, 5.0]));
assert (OV.CoordIsEqual3D (tr.TransformCoord3D (coord), new OV.Coord3D (19.0, 13.0, 3.0)));
});
it ('TRS Compose Test', function () {
let rotation = CreateYRot90Quaternion ();
let coord = new OV.Coord3D (1.0, 2.0, 3.0);
it ('TRS Compose Test', function () {
let rotation = CreateYRot90Quaternion ();
let coord = new OV.Coord3D (1.0, 2.0, 3.0);
let tr = new OV.Transformation ();
tr.SetMatrix (new OV.Matrix ().ComposeTRS ([4.0, 5.0, 6.0], rotation, [3.0, 4.0, 5.0]));
assert (OV.CoordIsEqual3D (tr.TransformCoord3D (coord), new OV.Coord3D (19.0, 13.0, 3.0)));
let tr = new OV.Transformation ();
tr.SetMatrix (new OV.Matrix ().ComposeTRS ([4.0, 5.0, 6.0], rotation, [3.0, 4.0, 5.0]));
assert (OV.CoordIsEqual3D (tr.TransformCoord3D (coord), new OV.Coord3D (19.0, 13.0, 3.0)));
let trs = tr.GetMatrix ().DecomposeTRS ();
let tr2 = new OV.Transformation ();
tr2.SetMatrix (new OV.Matrix ().ComposeTRS (trs.translation, trs.rotation, trs.scale));
assert (OV.CoordIsEqual3D (tr2.TransformCoord3D (coord), new OV.Coord3D (19.0, 13.0, 3.0)));
});
let trs = tr.GetMatrix ().DecomposeTRS ();
let tr2 = new OV.Transformation ();
tr2.SetMatrix (new OV.Matrix ().ComposeTRS (trs.translation, trs.rotation, trs.scale));
assert (OV.CoordIsEqual3D (tr2.TransformCoord3D (coord), new OV.Coord3D (19.0, 13.0, 3.0)));
});
it ('Default Quaternion Test', function () {
let coord = new OV.Coord3D (1.0, 2.0, 3.0);
it ('Default Quaternion Test', function () {
let coord = new OV.Coord3D (1.0, 2.0, 3.0);
let tr = new OV.Transformation ();
tr.SetMatrix (new OV.Matrix ().CreateRotation (0.0, 0.0, 0.0, 1.0));
assert (OV.CoordIsEqual3D (tr.TransformCoord3D (coord), coord));
});
let tr = new OV.Transformation ();
tr.SetMatrix (new OV.Matrix ().CreateRotation (0.0, 0.0, 0.0, 1.0));
assert (OV.CoordIsEqual3D (tr.TransformCoord3D (coord), coord));
});
});
describe ('Tween', function() {
it ('Linear Tween Function', function () {
assert (OV.IsEqual (OV.LinearTweenFunction (10.0, 0, 10), 0.0));
assert (OV.IsEqual (OV.LinearTweenFunction (10.0, 1, 10), 1.0));
assert (OV.IsEqual (OV.LinearTweenFunction (10.0, 5, 10), 5.0));
assert (OV.IsEqual (OV.LinearTweenFunction (10.0, 9, 10), 9.0));
assert (OV.IsEqual (OV.LinearTweenFunction (10.0, 10, 10), 10.0));
});
it ('Linear Tween Function', function () {
assert (OV.IsEqual (OV.LinearTweenFunction (10.0, 0, 10), 0.0));
assert (OV.IsEqual (OV.LinearTweenFunction (10.0, 1, 10), 1.0));
assert (OV.IsEqual (OV.LinearTweenFunction (10.0, 5, 10), 5.0));
assert (OV.IsEqual (OV.LinearTweenFunction (10.0, 9, 10), 9.0));
assert (OV.IsEqual (OV.LinearTweenFunction (10.0, 10, 10), 10.0));
});
it ('Bezier Tween Function', function () {
assert (OV.IsEqual (OV.BezierTweenFunction (10.0, 0, 10), 0.0));
assert (OV.IsEqual (OV.BezierTweenFunction (10.0, 1, 10), 0.28));
assert (OV.IsEqual (OV.BezierTweenFunction (10.0, 5, 10), 5.0));
assert (OV.IsEqual (OV.BezierTweenFunction (10.0, 9, 10), 9.72));
assert (OV.IsEqual (OV.BezierTweenFunction (10.0, 10, 10), 10.0));
});
it ('Bezier Tween Function', function () {
assert (OV.IsEqual (OV.BezierTweenFunction (10.0, 0, 10), 0.0));
assert (OV.IsEqual (OV.BezierTweenFunction (10.0, 1, 10), 0.28));
assert (OV.IsEqual (OV.BezierTweenFunction (10.0, 5, 10), 5.0));
assert (OV.IsEqual (OV.BezierTweenFunction (10.0, 9, 10), 9.72));
assert (OV.IsEqual (OV.BezierTweenFunction (10.0, 10, 10), 10.0));
});
it ('Parabolic Tween Function', function () {
assert (OV.IsEqual (OV.ParabolicTweenFunction (10.0, 0, 10), 0.0));
assert (OV.IsEqual (OV.ParabolicTweenFunction (10.0, 5, 10), 5.0));
assert (OV.IsEqual (OV.ParabolicTweenFunction (10.0, 10, 10), 10.0));
});
it ('Parabolic Tween Function', function () {
assert (OV.IsEqual (OV.ParabolicTweenFunction (10.0, 0, 10), 0.0));
assert (OV.IsEqual (OV.ParabolicTweenFunction (10.0, 5, 10), 5.0));
assert (OV.IsEqual (OV.ParabolicTweenFunction (10.0, 10, 10), 10.0));
});
it ('Linear Tween Coordinates', function () {
let beg = new OV.Coord3D (0.0, 0.0, 0.0);
let end = new OV.Coord3D (9.0, 0.0, 0.0);
let segments = OV.TweenCoord3D (beg, end, 10, OV.LinearTweenFunction);
assert.strictEqual (segments.length, 10);
assert (OV.CoordIsEqual3D (segments[0], beg));
assert (OV.CoordIsEqual3D (segments[1], new OV.Coord3D (1.0, 0.0, 0.0)));
assert (OV.CoordIsEqual3D (segments[5], new OV.Coord3D (5.0, 0.0, 0.0)));
assert (OV.CoordIsEqual3D (segments[segments.length - 1], end));
});
it ('Linear Tween Coordinates', function () {
let beg = new OV.Coord3D (0.0, 0.0, 0.0);
let end = new OV.Coord3D (9.0, 0.0, 0.0);
let segments = OV.TweenCoord3D (beg, end, 10, OV.LinearTweenFunction);
assert.strictEqual (segments.length, 10);
assert (OV.CoordIsEqual3D (segments[0], beg));
assert (OV.CoordIsEqual3D (segments[1], new OV.Coord3D (1.0, 0.0, 0.0)));
assert (OV.CoordIsEqual3D (segments[5], new OV.Coord3D (5.0, 0.0, 0.0)));
assert (OV.CoordIsEqual3D (segments[segments.length - 1], end));
});
});

View File

@ -3,159 +3,159 @@ var testFiles = require ('../utils/testfiles.js');
var testUtils = require ('../utils/testutils.js');
describe ('3ds Importer', function() {
it ('cube_with_materials.obj', function () {
var model = testFiles.Import3dsFile ('cube_with_materials.3ds');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : 'tex' },
{ name : 'red' },
{ name : 'green' },
{ name : 'blue' },
{ name : 'white' }
],
meshes : [
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
it ('cube_with_materials.obj', function () {
var model = testFiles.Import3dsFile ('cube_with_materials.3ds');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : 'tex' },
{ name : 'red' },
{ name : 'green' },
{ name : 'blue' },
{ name : 'white' }
],
meshes : [
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
it ('cube_with_texture_transformations.3ds', function () {
var model = testFiles.Import3dsFile ('cube_with_texture_transformations.3ds');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : 'tex' },
{ name : 'red' },
{ name : 'green' },
{ name : 'blue' },
{ name : 'white' }
],
meshes : [
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
it ('cube_with_texture_transformations.3ds', function () {
var model = testFiles.Import3dsFile ('cube_with_texture_transformations.3ds');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : 'tex' },
{ name : 'red' },
{ name : 'green' },
{ name : 'blue' },
{ name : 'white' }
],
meshes : [
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
it ('cube_two_instances.3ds', function () {
var model = testFiles.Import3dsFile ('cube_two_instances.3ds');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : 'tex' },
{ name : 'red' },
{ name : 'green' },
{ name : 'blue' },
{ name : 'white' }
],
meshes : [
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
},
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [2, 0, 0],
max : [3, 1, 1]
}
}
]
});
});
it ('cube_two_instances.3ds', function () {
var model = testFiles.Import3dsFile ('cube_two_instances.3ds');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : 'tex' },
{ name : 'red' },
{ name : 'green' },
{ name : 'blue' },
{ name : 'white' }
],
meshes : [
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
},
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [2, 0, 0],
max : [3, 1, 1]
}
}
]
});
});
it ('cube_four_instances.3ds', function () {
var model = testFiles.Import3dsFile ('cube_four_instances.3ds');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : 'tex' },
{ name : 'red' },
{ name : 'green' },
{ name : 'blue' },
{ name : 'white' }
],
meshes : [
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
},
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [2, 0, 0],
max : [3, 1, 1]
}
},
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [2, 2, 0],
max : [3, 3, 1]
}
},
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [0, 2, 0],
max : [1, 3, 1]
}
}
]
});
});
it ('cube_four_instances.3ds', function () {
var model = testFiles.Import3dsFile ('cube_four_instances.3ds');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : 'tex' },
{ name : 'red' },
{ name : 'green' },
{ name : 'blue' },
{ name : 'white' }
],
meshes : [
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
},
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [2, 0, 0],
max : [3, 1, 1]
}
},
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [2, 2, 0],
max : [3, 3, 1]
}
},
{
name : 'cube',
vertexCount : 8,
normalCount : 12,
uvCount : 8,
triangleCount : 12,
boundingBox : {
min : [0, 2, 0],
max : [1, 3, 1]
}
}
]
});
});
});

View File

@ -22,7 +22,7 @@ function ImportFiles (files, callbacks)
}
describe ('Importer Test', function () {
it ('Empty File List', function () {
it ('Empty File List', function () {
let files = [];
ImportFiles (files, {
success : function (importer, importResult) {
@ -32,9 +32,9 @@ describe ('Importer Test', function () {
assert.strictEqual (importError.code, OV.ImportErrorCode.NoImportableFile);
}
});
});
});
it ('Not existing file', function () {
it ('Not existing file', function () {
let files = [
new FileObject ('obj', 'missing.obj')
];
@ -46,9 +46,9 @@ describe ('Importer Test', function () {
assert.strictEqual (importError.code, OV.ImportErrorCode.NoImportableFile);
}
});
});
});
it ('Not imprtable file', function () {
it ('Not imprtable file', function () {
let files = [
new FileObject ('', 'wrong.ext')
];
@ -60,9 +60,9 @@ describe ('Importer Test', function () {
assert.strictEqual (importError.code, OV.ImportErrorCode.NoImportableFile);
}
});
});
});
it ('Wrong file', function () {
it ('Wrong file', function () {
let files = [
new FileObject ('3ds', 'wrong.3ds')
];
@ -74,7 +74,7 @@ describe ('Importer Test', function () {
assert.strictEqual (importError.code, OV.ImportErrorCode.ImportFailed);
}
});
});
});
it ('Single file', function () {
let files = [
@ -90,7 +90,7 @@ describe ('Importer Test', function () {
assert.fail ();
}
});
});
});
it ('Multiple files', function () {
let files = [
@ -110,7 +110,7 @@ describe ('Importer Test', function () {
assert.fail ();
}
});
});
});
it ('Missing files', function () {
let files = [];
@ -147,7 +147,7 @@ describe ('Importer Test', function () {
assert.fail ();
}
});
});
});
it ('Missing texture multiple times', function () {
let files = [
@ -164,7 +164,7 @@ describe ('Importer Test', function () {
assert.fail ();
}
});
});
});
it ('Append Missing files', function () {
let theImporter = new OV.Importer ();
@ -198,7 +198,7 @@ describe ('Importer Test', function () {
assert.fail ();
}
});
});
});
it ('Reuse importer', function () {
let files1 = [
@ -232,5 +232,5 @@ describe ('Importer Test', function () {
assert.fail ();
}
});
});
});
});

View File

@ -6,7 +6,7 @@ let testUtils = require ('../utils/testutils.js');
//console.log (util.inspect(testUtils.ModelToObjectSimple (model), {showHidden: false, depth: null}))
describe ('Gltf Importer', function () {
it ('Triangle', function () {
it ('Triangle', function () {
let testFileList = [
['Triangle/glTF', 'Triangle.gltf'],
['Triangle/glTF-Embedded', 'Triangle.gltf'],
@ -37,9 +37,9 @@ describe ('Gltf Importer', function () {
]
});
}
});
});
it ('Box', function () {
it ('Box', function () {
let testFileList = [
['Box/glTF', 'Box.gltf'],
['Box/glTF-Embedded', 'Box.gltf'],
@ -69,9 +69,9 @@ describe ('Gltf Importer', function () {
]
});
}
});
});
it ('BoxInterleaved', function () {
it ('BoxInterleaved', function () {
let testFileList = [
['BoxInterleaved/glTF', 'BoxInterleaved.gltf'],
['BoxInterleaved/glTF-Embedded', 'BoxInterleaved.gltf'],
@ -101,9 +101,9 @@ describe ('Gltf Importer', function () {
]
});
}
});
});
it ('BoxTextured', function () {
it ('BoxTextured', function () {
let testFileList = [
['BoxTextured/glTF', 'BoxTextured.gltf'],
['BoxTextured/glTF-Embedded', 'BoxTextured.gltf'],
@ -133,7 +133,7 @@ describe ('Gltf Importer', function () {
]
});
}
});
});
it ('SimpleMeshes', function () {
let testFileList = [
@ -175,7 +175,7 @@ describe ('Gltf Importer', function () {
]
});
}
});
});
it ('OrientationTest', function () {
let testFileList = [
@ -345,9 +345,9 @@ describe ('Gltf Importer', function () {
]
});
}
});
});
it ('MeshPrimitives_4Vertex', function () {
it ('MeshPrimitives_4Vertex', function () {
let testFileList = [
['Mesh_PrimitiveMode', 'Mesh_PrimitiveMode_04.gltf'],
['Mesh_PrimitiveMode', 'Mesh_PrimitiveMode_05.gltf'],
@ -379,9 +379,9 @@ describe ('Gltf Importer', function () {
]
});
}
});
});
it ('MeshPrimitives_6Vertex', function () {
it ('MeshPrimitives_6Vertex', function () {
let testFileList = [
['Mesh_PrimitiveMode', 'Mesh_PrimitiveMode_06.gltf']
];
@ -409,9 +409,9 @@ describe ('Gltf Importer', function () {
]
});
}
});
});
it ('SimpleSparseAccessor', function () {
it ('SimpleSparseAccessor', function () {
let testFileList = [
['SimpleSparseAccessor/glTF', 'SimpleSparseAccessor.gltf'],
['SimpleSparseAccessor/glTF-Embedded', 'SimpleSparseAccessor.gltf']
@ -440,5 +440,5 @@ describe ('Gltf Importer', function () {
]
});
}
});
});
});

File diff suppressed because it is too large Load Diff

View File

@ -3,135 +3,135 @@ var testFiles = require ('../utils/testfiles.js');
var testUtils = require ('../utils/testutils.js');
describe ('Off Importer', function() {
it ('single_triangle.off', function () {
var model = testFiles.ImportOffFile ('single_triangle.off');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_triangle.off', function () {
var model = testFiles.ImportOffFile ('single_triangle.off');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('two_triangles.off', function () {
var model = testFiles.ImportOffFile ('two_triangles.off');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
},
{
vertices : [0, 0, 1, 1, 0, 1, 1, 1, 1],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('two_triangles.off', function () {
var model = testFiles.ImportOffFile ('two_triangles.off');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
},
{
vertices : [0, 0, 1, 1, 0, 1, 1, 1, 1],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_rectangle.off', function () {
var model = testFiles.ImportOffFile ('single_rectangle.off');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
},
{
vertices : [0, 0, 0, 1, 1, 0, 0, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_rectangle.off', function () {
var model = testFiles.ImportOffFile ('single_rectangle.off');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
},
{
vertices : [0, 0, 0, 1, 1, 0, 0, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_triangle_with_comments.off', function () {
var model = testFiles.ImportOffFile ('single_triangle_with_comments.off');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_triangle_with_comments.off', function () {
var model = testFiles.ImportOffFile ('single_triangle_with_comments.off');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('cube.off', function () {
var model = testFiles.ImportOffFile ('cube.off');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
vertexCount : 8,
normalCount : 12,
uvCount : 0,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
it ('cube.off', function () {
var model = testFiles.ImportOffFile ('cube.off');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
vertexCount : 8,
normalCount : 12,
uvCount : 0,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
});

View File

@ -3,210 +3,210 @@ var testFiles = require ('../utils/testfiles.js');
var testUtils = require ('../utils/testutils.js');
describe ('Ply Importer', function() {
it ('single_triangle.ply', function () {
var model = testFiles.ImportPlyFile ('single_triangle.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_triangle.ply', function () {
var model = testFiles.ImportPlyFile ('single_triangle.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('two_triangles.ply', function () {
var model = testFiles.ImportPlyFile ('two_triangles.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
},
{
vertices : [0, 0, 1, 1, 0, 1, 1, 1, 1],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('two_triangles.ply', function () {
var model = testFiles.ImportPlyFile ('two_triangles.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
},
{
vertices : [0, 0, 1, 1, 0, 1, 1, 1, 1],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_rectangle.ply', function () {
var model = testFiles.ImportPlyFile ('single_rectangle.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
},
{
vertices : [0, 0, 0, 1, 1, 0, 0, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_rectangle.ply', function () {
var model = testFiles.ImportPlyFile ('single_rectangle.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
},
{
vertices : [0, 0, 0, 1, 1, 0, 0, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_triangle_with_comments.ply', function () {
var model = testFiles.ImportPlyFile ('single_triangle_with_comments.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_triangle_with_comments.ply', function () {
var model = testFiles.ImportPlyFile ('single_triangle_with_comments.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('cube.ply', function () {
var model = testFiles.ImportPlyFile ('cube.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
vertexCount : 8,
normalCount : 12,
uvCount : 0,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
it ('cube_meshlab_ascii.ply', function () {
var model = testFiles.ImportPlyFile ('cube_meshlab_ascii.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
vertexCount : 8,
it ('cube.ply', function () {
var model = testFiles.ImportPlyFile ('cube.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
vertexCount : 8,
normalCount : 12,
uvCount : 0,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
it ('cube_meshlab_binary.ply', function () {
var model = testFiles.ImportPlyFile ('cube_meshlab_binary.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
vertexCount : 8,
it ('cube_meshlab_ascii.ply', function () {
var model = testFiles.ImportPlyFile ('cube_meshlab_ascii.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
vertexCount : 8,
normalCount : 12,
uvCount : 0,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
it ('cube_rgb_binary.ply', function () {
var model = testFiles.ImportPlyFile ('cube_rgb_binary.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '#cc0000ff' },
{ name : '#00cc00ff' },
{ name : '#0000ccff' },
{ name : '#cccccc7f' }
],
meshes : [
{
name : '',
vertexCount : 8,
normalCount : 12,
uvCount : 0,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
it ('cube_meshlab_binary.ply', function () {
var model = testFiles.ImportPlyFile ('cube_meshlab_binary.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
vertexCount : 8,
normalCount : 12,
uvCount : 0,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
it ('cube_rgb_binary.ply', function () {
var model = testFiles.ImportPlyFile ('cube_rgb_binary.ply');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '#cc0000ff' },
{ name : '#00cc00ff' },
{ name : '#0000ccff' },
{ name : '#cccccc7f' }
],
meshes : [
{
name : '',
vertexCount : 8,
normalCount : 12,
uvCount : 0,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
});

View File

@ -3,202 +3,202 @@ var testFiles = require ('../utils/testfiles.js');
var testUtils = require ('../utils/testutils.js');
describe ('Stl Importer', function() {
it ('single_triangle.stl', function () {
var model = testFiles.ImportStlFile ('single_triangle.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : 'MeshName',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_triangle.stl', function () {
var model = testFiles.ImportStlFile ('single_triangle.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : 'MeshName',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_triangle_with_comments.stl', function () {
var model = testFiles.ImportStlFile ('single_triangle_with_comments.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : 'MeshName',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_triangle_with_comments.stl', function () {
var model = testFiles.ImportStlFile ('single_triangle_with_comments.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : 'MeshName',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_triangle_no_normal.stl', function () {
var model = testFiles.ImportStlFile ('single_triangle_no_normal.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : 'MeshName',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('single_triangle_no_normal.stl', function () {
var model = testFiles.ImportStlFile ('single_triangle_no_normal.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : 'MeshName',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('two_triangles.stl', function () {
var model = testFiles.ImportStlFile ('two_triangles.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : 'MeshName',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
},
{
vertices : [0, 0, 1, 1, 0, 1, 1, 1, 1],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('two_triangles.stl', function () {
var model = testFiles.ImportStlFile ('two_triangles.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : 'MeshName',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
},
{
vertices : [0, 0, 1, 1, 0, 1, 1, 1, 1],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
it ('stl_ascii.stl', function () {
var model = testFiles.ImportStlFile ('stl_ascii.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : 'Untitled-5427e5af',
vertexCount : 1716,
it ('stl_ascii.stl', function () {
var model = testFiles.ImportStlFile ('stl_ascii.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : 'Untitled-5427e5af',
vertexCount : 1716,
normalCount : 572,
uvCount : 0,
triangleCount : 572,
boundingBox : {
min : [0, -1.10792799192095, 0],
max : [4.94407346265022, 3.31831671830375, 1.2]
}
}
]
});
});
boundingBox : {
min : [0, -1.10792799192095, 0],
max : [4.94407346265022, 3.31831671830375, 1.2]
}
}
]
});
});
it ('stl_binary.stl', function () {
var model = testFiles.ImportStlFile ('stl_binary.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
vertexCount : 2184,
it ('stl_binary.stl', function () {
var model = testFiles.ImportStlFile ('stl_binary.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
vertexCount : 2184,
normalCount : 728,
uvCount : 0,
triangleCount : 728,
boundingBox : {
min : [0, -1.1079280376434326, 0],
max : [5.70156717300415, 3.318316698074341, 1.2000000476837158]
}
}
]
});
});
boundingBox : {
min : [0, -1.1079280376434326, 0],
max : [5.70156717300415, 3.318316698074341, 1.2000000476837158]
}
}
]
});
});
it ('cube_meshlab_ascii.stl', function () {
var model = testFiles.ImportStlFile ('cube_meshlab_ascii.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : 'STL generated by MeshLab',
vertexCount : 36,
it ('cube_meshlab_ascii.stl', function () {
var model = testFiles.ImportStlFile ('cube_meshlab_ascii.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : 'STL generated by MeshLab',
vertexCount : 36,
normalCount : 12,
uvCount : 0,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
it ('cube_meshlab_binary.stl', function () {
var model = testFiles.ImportStlFile ('cube_meshlab_binary.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
vertexCount : 36,
it ('cube_meshlab_binary.stl', function () {
var model = testFiles.ImportStlFile ('cube_meshlab_binary.stl');
assert (OV.CheckModel (model));
assert.deepStrictEqual (testUtils.ModelToObjectSimple (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
vertexCount : 36,
normalCount : 12,
uvCount : 0,
triangleCount : 12,
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
boundingBox : {
min : [0, 0, 0],
max : [1, 1, 1]
}
}
]
});
});
});

View File

@ -1,7 +1,7 @@
var assert = require ('assert');
describe ('Power of Two', function () {
it ('IsPowerOfTwo', function () {
it ('IsPowerOfTwo', function () {
assert (OV.IsPowerOfTwo (1));
assert (OV.IsPowerOfTwo (2));
assert (!OV.IsPowerOfTwo (3));
@ -13,5 +13,5 @@ describe ('Power of Two', function () {
assert.strictEqual (OV.NextPowerOfTwo (i - 1), i);
assert.strictEqual (OV.NextPowerOfTwo (i + 1), i * 2);
}
});
});
});

View File

@ -2,7 +2,7 @@ var assert = require ('assert');
var testUtils = require ('../utils/testutils.js');
describe ('IO Test', function () {
it ('Binary Reader', function () {
it ('Binary Reader', function () {
let buffer = testUtils.GetArrayBufferFileContent ('bin', 'binary_content.bin');
let reader = new OV.BinaryReader (buffer, true);

View File

@ -1,109 +1,109 @@
var assert = require ('assert');
describe ('Mesh', function() {
it ('Default Initialization', function () {
var mesh = new OV.Mesh ();
assert.strictEqual (mesh.GetName (), '');
assert.strictEqual (mesh.VertexCount (), 0);
assert.strictEqual (mesh.NormalCount (), 0);
assert.strictEqual (mesh.TextureUVCount (), 0);
assert.strictEqual (mesh.TriangleCount (), 0);
});
it ('Set Name', function () {
var mesh = new OV.Mesh ();
mesh.SetName ('example');
assert.strictEqual (mesh.GetName (), 'example');
});
it ('Default Initialization', function () {
var mesh = new OV.Mesh ();
assert.strictEqual (mesh.GetName (), '');
assert.strictEqual (mesh.VertexCount (), 0);
assert.strictEqual (mesh.NormalCount (), 0);
assert.strictEqual (mesh.TextureUVCount (), 0);
assert.strictEqual (mesh.TriangleCount (), 0);
});
it ('Set Name', function () {
var mesh = new OV.Mesh ();
mesh.SetName ('example');
assert.strictEqual (mesh.GetName (), 'example');
});
it ('Add Vertex', function () {
var mesh = new OV.Mesh ();
var index = mesh.AddVertex (new OV.Coord3D (1.0, 2.0, 3.0))
assert.strictEqual (index, 0);
assert.strictEqual (mesh.VertexCount (), 1);
var vertex = mesh.GetVertex (index);
assert.strictEqual (vertex.x, 1.0);
assert.strictEqual (vertex.y, 2.0);
assert.strictEqual (vertex.z, 3.0);
});
it ('Add Vertex', function () {
var mesh = new OV.Mesh ();
var index = mesh.AddVertex (new OV.Coord3D (1.0, 2.0, 3.0))
assert.strictEqual (index, 0);
assert.strictEqual (mesh.VertexCount (), 1);
var vertex = mesh.GetVertex (index);
assert.strictEqual (vertex.x, 1.0);
assert.strictEqual (vertex.y, 2.0);
assert.strictEqual (vertex.z, 3.0);
});
it ('Add Normal', function () {
var mesh = new OV.Mesh ();
var index = mesh.AddNormal (new OV.Coord3D (1.0, 2.0, 3.0))
assert.strictEqual (index, 0);
assert.strictEqual (mesh.NormalCount (), 1);
var normal = mesh.GetNormal (index);
assert.strictEqual (normal.x, 1.0);
assert.strictEqual (normal.y, 2.0);
assert.strictEqual (normal.z, 3.0);
});
it ('Add Texture UV', function () {
var mesh = new OV.Mesh ();
var index = mesh.AddTextureUV (new OV.Coord2D (1.0, 2.0))
assert.strictEqual (index, 0);
assert.strictEqual (mesh.TextureUVCount (), 1);
var uv = mesh.GetTextureUV (index);
assert.strictEqual (uv.x, 1.0);
assert.strictEqual (uv.y, 2.0);
});
it ('Add Triangle', function () {
var mesh = new OV.Mesh ();
var triangle = new OV.Triangle (1, 2, 3);
var index = mesh.AddTriangle (triangle);
assert.strictEqual (index, 0);
assert.strictEqual (mesh.TriangleCount (), 1);
var triangle = mesh.GetTriangle (index);
assert.strictEqual (triangle.v0, 1);
assert.strictEqual (triangle.v1, 2);
assert.strictEqual (triangle.v2, 3);
assert (triangle.HasVertices ());
assert (!triangle.HasNormals ());
assert (!triangle.HasTextureUVs ());
assert.strictEqual (triangle.n0, null);
assert.strictEqual (triangle.n1, null);
assert.strictEqual (triangle.n2, null);
assert.strictEqual (triangle.u0, null);
assert.strictEqual (triangle.u1, null);
assert.strictEqual (triangle.u2, null);
assert.strictEqual (triangle.mat, null);
});
it ('Add Normal', function () {
var mesh = new OV.Mesh ();
var index = mesh.AddNormal (new OV.Coord3D (1.0, 2.0, 3.0))
assert.strictEqual (index, 0);
assert.strictEqual (mesh.NormalCount (), 1);
var normal = mesh.GetNormal (index);
assert.strictEqual (normal.x, 1.0);
assert.strictEqual (normal.y, 2.0);
assert.strictEqual (normal.z, 3.0);
});
it ('Add Texture UV', function () {
var mesh = new OV.Mesh ();
var index = mesh.AddTextureUV (new OV.Coord2D (1.0, 2.0))
assert.strictEqual (index, 0);
assert.strictEqual (mesh.TextureUVCount (), 1);
var uv = mesh.GetTextureUV (index);
assert.strictEqual (uv.x, 1.0);
assert.strictEqual (uv.y, 2.0);
});
it ('Add Triangle', function () {
var mesh = new OV.Mesh ();
var triangle = new OV.Triangle (1, 2, 3);
var index = mesh.AddTriangle (triangle);
assert.strictEqual (index, 0);
assert.strictEqual (mesh.TriangleCount (), 1);
var triangle = mesh.GetTriangle (index);
assert.strictEqual (triangle.v0, 1);
assert.strictEqual (triangle.v1, 2);
assert.strictEqual (triangle.v2, 3);
assert (triangle.HasVertices ());
assert (!triangle.HasNormals ());
assert (!triangle.HasTextureUVs ());
assert.strictEqual (triangle.n0, null);
assert.strictEqual (triangle.n1, null);
assert.strictEqual (triangle.n2, null);
assert.strictEqual (triangle.u0, null);
assert.strictEqual (triangle.u1, null);
assert.strictEqual (triangle.u2, null);
assert.strictEqual (triangle.mat, null);
});
it ('Transform Mesh', function () {
var mesh = new OV.Mesh ();
mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
mesh.AddVertex (new OV.Coord3D (1.0, 0.0, 0.0));
mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 0.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, 1.0));
mesh.AddTextureUV (new OV.Coord2D (0.0, 0.0));
mesh.AddTextureUV (new OV.Coord2D (1.0, 0.0));
mesh.AddTextureUV (new OV.Coord2D (1.0, 1.0));
var triangle = new OV.Triangle (0, 1, 2);
triangle.SetNormals (0, 0, 0);
triangle.SetTextureUVs (0, 1, 2);
mesh.AddTriangle (triangle);
it ('Transform Mesh', function () {
var mesh = new OV.Mesh ();
mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
mesh.AddVertex (new OV.Coord3D (1.0, 0.0, 0.0));
mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 0.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, 1.0));
mesh.AddTextureUV (new OV.Coord2D (0.0, 0.0));
mesh.AddTextureUV (new OV.Coord2D (1.0, 0.0));
mesh.AddTextureUV (new OV.Coord2D (1.0, 1.0));
var triangle = new OV.Triangle (0, 1, 2);
triangle.SetNormals (0, 0, 0);
triangle.SetTextureUVs (0, 1, 2);
mesh.AddTriangle (triangle);
let angle = -Math.PI / 2.0;
let rotX = 0.0;
let rotY = 1.0;
let rotZ = 0.0;
let angle = -Math.PI / 2.0;
let rotX = 0.0;
let rotY = 1.0;
let rotZ = 0.0;
let rotation = [
Math.sin (angle / 2.0) * rotX,
Math.sin (angle / 2.0) * rotY,
Math.sin (angle / 2.0) * rotZ,
Math.cos (angle / 2.0)
];
let rotation = [
Math.sin (angle / 2.0) * rotX,
Math.sin (angle / 2.0) * rotY,
Math.sin (angle / 2.0) * rotZ,
Math.cos (angle / 2.0)
];
let transformation = new OV.Transformation ();
transformation.AppendMatrix (new OV.Matrix ().CreateScale (2.0, 1.0, 1.0));
transformation.AppendMatrix (new OV.Matrix ().CreateRotation (rotation[0], rotation[1], rotation[2], rotation[3]));
transformation.AppendMatrix (new OV.Matrix ().CreateTranslation (0.0, 0.0, 1.0));
OV.TransformMesh (mesh, transformation);
assert (OV.CoordIsEqual3D (mesh.GetVertex (0), new OV.Coord3D (0.0, 0.0, 1.0)));
assert (OV.CoordIsEqual3D (mesh.GetVertex (1), new OV.Coord3D (0.0, 0.0, 3.0)));
assert (OV.CoordIsEqual3D (mesh.GetVertex (2), new OV.Coord3D (0.0, 1.0, 3.0)));
assert (OV.CoordIsEqual3D (mesh.GetNormal (0), new OV.Coord3D (-1.0, 0.0, 0.0)));
});
let transformation = new OV.Transformation ();
transformation.AppendMatrix (new OV.Matrix ().CreateScale (2.0, 1.0, 1.0));
transformation.AppendMatrix (new OV.Matrix ().CreateRotation (rotation[0], rotation[1], rotation[2], rotation[3]));
transformation.AppendMatrix (new OV.Matrix ().CreateTranslation (0.0, 0.0, 1.0));
OV.TransformMesh (mesh, transformation);
assert (OV.CoordIsEqual3D (mesh.GetVertex (0), new OV.Coord3D (0.0, 0.0, 1.0)));
assert (OV.CoordIsEqual3D (mesh.GetVertex (1), new OV.Coord3D (0.0, 0.0, 3.0)));
assert (OV.CoordIsEqual3D (mesh.GetVertex (2), new OV.Coord3D (0.0, 1.0, 3.0)));
assert (OV.CoordIsEqual3D (mesh.GetNormal (0), new OV.Coord3D (-1.0, 0.0, 0.0)));
});
});

View File

@ -12,23 +12,23 @@ describe ('Mesh Buffer', function () {
mesh.AddVertex (new OV.Coord3D (1.0, 0.0, 1.0));
mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 1.0));
mesh.AddVertex (new OV.Coord3D (0.0, 1.0, 1.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, 1.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, 1.0));
mesh.AddTriangle (new OV.Triangle (0, 1, 2).SetNormals (0, 0, 0).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (0, 2, 3).SetNormals (0, 0, 0).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (0, 2, 3).SetNormals (0, 0, 0).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (4, 5, 6).SetNormals (0, 0, 0).SetMaterial (1));
mesh.AddTriangle (new OV.Triangle (4, 6, 7).SetNormals (0, 0, 0).SetMaterial (1));
mesh.AddTriangle (new OV.Triangle (4, 6, 7).SetNormals (0, 0, 0).SetMaterial (1));
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 2);
assert.strictEqual (buffer.primitives[0].indices.length, 6);
assert.strictEqual (buffer.primitives[0].vertices.length, 4 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 4 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 0);
assert.strictEqual (buffer.primitives[1].indices.length, 6);
assert.strictEqual (buffer.primitives[1].vertices.length, 4 * 3);
assert.strictEqual (buffer.primitives[1].normals.length, 4 * 3);
assert.strictEqual (buffer.primitives[1].uvs.length, 0);
});
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 2);
assert.strictEqual (buffer.primitives[0].indices.length, 6);
assert.strictEqual (buffer.primitives[0].vertices.length, 4 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 4 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 0);
assert.strictEqual (buffer.primitives[1].indices.length, 6);
assert.strictEqual (buffer.primitives[1].vertices.length, 4 * 3);
assert.strictEqual (buffer.primitives[1].normals.length, 4 * 3);
assert.strictEqual (buffer.primitives[1].uvs.length, 0);
});
it ('Mesh To Buffer Different Normals', function () {
var mesh = new OV.Mesh ();
@ -36,18 +36,18 @@ describe ('Mesh Buffer', function () {
mesh.AddVertex (new OV.Coord3D (1.0, 0.0, 0.0));
mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 0.0));
mesh.AddVertex (new OV.Coord3D (0.0, 1.0, 0.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, 1.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, -1.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, 1.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, -1.0));
mesh.AddTriangle (new OV.Triangle (0, 1, 2).SetNormals (0, 0, 0).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (0, 2, 3).SetNormals (1, 1, 1).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (0, 2, 3).SetNormals (1, 1, 1).SetMaterial (0));
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 6);
assert.strictEqual (buffer.primitives[0].vertices.length, 6 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 6 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 0);
});
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 6);
assert.strictEqual (buffer.primitives[0].vertices.length, 6 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 6 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 0);
});
it ('Mesh To Buffer Different UVs', function () {
var mesh = new OV.Mesh ();
@ -55,19 +55,19 @@ describe ('Mesh Buffer', function () {
mesh.AddVertex (new OV.Coord3D (1.0, 0.0, 0.0));
mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 0.0));
mesh.AddVertex (new OV.Coord3D (0.0, 1.0, 0.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, 1.0));
mesh.AddTextureUV (new OV.Coord3D (1.0, 1.0));
mesh.AddTextureUV (new OV.Coord3D (-1.0, -1.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, 1.0));
mesh.AddTextureUV (new OV.Coord3D (1.0, 1.0));
mesh.AddTextureUV (new OV.Coord3D (-1.0, -1.0));
mesh.AddTriangle (new OV.Triangle (0, 1, 2).SetNormals (0, 0, 0).SetTextureUVs (0, 0, 0).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (0, 2, 3).SetNormals (0, 0, 0).SetTextureUVs (1, 1, 1).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (0, 2, 3).SetNormals (0, 0, 0).SetTextureUVs (1, 1, 1).SetMaterial (0));
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 6);
assert.strictEqual (buffer.primitives[0].vertices.length, 6 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 6 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 6 * 2);
});
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 6);
assert.strictEqual (buffer.primitives[0].vertices.length, 6 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 6 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 6 * 2);
});
it ('Mesh To Buffer Same Normals and UVs', function () {
var mesh = new OV.Mesh ();
@ -75,21 +75,21 @@ describe ('Mesh Buffer', function () {
mesh.AddVertex (new OV.Coord3D (1.0, 0.0, 0.0));
mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 0.0));
mesh.AddVertex (new OV.Coord3D (0.0, 1.0, 0.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, 1.0));
mesh.AddTextureUV (new OV.Coord3D (1.0, 1.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, 1.0));
mesh.AddTextureUV (new OV.Coord3D (1.0, 1.0));
mesh.AddTriangle (new OV.Triangle (0, 1, 2).SetNormals (0, 0, 0).SetTextureUVs (0, 0, 0).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (0, 2, 3).SetNormals (0, 0, 0).SetTextureUVs (0, 0, 0).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (0, 2, 3).SetNormals (0, 0, 0).SetTextureUVs (0, 0, 0).SetMaterial (0));
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 6);
assert.strictEqual (buffer.primitives[0].vertices.length, 4 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 4 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 4 * 2);
});
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 6);
assert.strictEqual (buffer.primitives[0].vertices.length, 4 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 4 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 4 * 2);
});
it ('Mesh To Buffer Cube', function () {
var model = new OV.Model ();
var model = new OV.Model ();
var mesh = new OV.Mesh ();
mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
@ -101,42 +101,42 @@ describe ('Mesh Buffer', function () {
mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 1.0));
mesh.AddVertex (new OV.Coord3D (0.0, 1.0, 1.0));
mesh.AddNormal (new OV.Coord3D (0, -1, 0));
mesh.AddNormal (new OV.Coord3D (1, 0, 0));
mesh.AddNormal (new OV.Coord3D (0, 1, 0));
mesh.AddNormal (new OV.Coord3D (-1, 0, 0));
mesh.AddNormal (new OV.Coord3D (0, 0, -1));
mesh.AddNormal (new OV.Coord3D (0, 0, 1));
mesh.AddNormal (new OV.Coord3D (0, -1, 0));
mesh.AddNormal (new OV.Coord3D (1, 0, 0));
mesh.AddNormal (new OV.Coord3D (0, 1, 0));
mesh.AddNormal (new OV.Coord3D (-1, 0, 0));
mesh.AddNormal (new OV.Coord3D (0, 0, -1));
mesh.AddNormal (new OV.Coord3D (0, 0, 1));
mesh.AddTriangle (new OV.Triangle (0, 1, 5).SetNormals (0, 0, 0));
mesh.AddTriangle (new OV.Triangle (0, 5, 4).SetNormals (0, 0, 0));
mesh.AddTriangle (new OV.Triangle (1, 2, 6).SetNormals (1, 1, 1));
mesh.AddTriangle (new OV.Triangle (1, 6, 5).SetNormals (1, 1, 1));
mesh.AddTriangle (new OV.Triangle (2, 3, 7).SetNormals (2, 2, 2));
mesh.AddTriangle (new OV.Triangle (2, 7, 6).SetNormals (2, 2, 2));
mesh.AddTriangle (new OV.Triangle (3, 0, 4).SetNormals (3, 3, 3));
mesh.AddTriangle (new OV.Triangle (3, 4, 7).SetNormals (3, 3, 3));
mesh.AddTriangle (new OV.Triangle (0, 3, 2).SetNormals (4, 4, 4));
mesh.AddTriangle (new OV.Triangle (0, 2, 1).SetNormals (4, 4, 4));
mesh.AddTriangle (new OV.Triangle (4, 5, 6).SetNormals (5, 5, 5));
mesh.AddTriangle (new OV.Triangle (4, 6, 7).SetNormals (5, 5, 5));
mesh.AddTriangle (new OV.Triangle (0, 1, 5).SetNormals (0, 0, 0));
mesh.AddTriangle (new OV.Triangle (0, 5, 4).SetNormals (0, 0, 0));
mesh.AddTriangle (new OV.Triangle (1, 2, 6).SetNormals (1, 1, 1));
mesh.AddTriangle (new OV.Triangle (1, 6, 5).SetNormals (1, 1, 1));
mesh.AddTriangle (new OV.Triangle (2, 3, 7).SetNormals (2, 2, 2));
mesh.AddTriangle (new OV.Triangle (2, 7, 6).SetNormals (2, 2, 2));
mesh.AddTriangle (new OV.Triangle (3, 0, 4).SetNormals (3, 3, 3));
mesh.AddTriangle (new OV.Triangle (3, 4, 7).SetNormals (3, 3, 3));
mesh.AddTriangle (new OV.Triangle (0, 3, 2).SetNormals (4, 4, 4));
mesh.AddTriangle (new OV.Triangle (0, 2, 1).SetNormals (4, 4, 4));
mesh.AddTriangle (new OV.Triangle (4, 5, 6).SetNormals (5, 5, 5));
mesh.AddTriangle (new OV.Triangle (4, 6, 7).SetNormals (5, 5, 5));
model.AddMesh (mesh);
OV.FinalizeModel (model, function () {
return new OV.Material ();
});
assert (OV.CheckModel (model));
model.AddMesh (mesh);
OV.FinalizeModel (model, function () {
return new OV.Material ();
});
assert (OV.CheckModel (model));
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 36);
assert.strictEqual (buffer.primitives[0].vertices.length, 24 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 24 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 0);
});
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 36);
assert.strictEqual (buffer.primitives[0].vertices.length, 24 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 24 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 0);
});
it ('Mesh To Buffer Cube Auto Normals', function () {
var model = new OV.Model ();
var model = new OV.Model ();
var mesh = new OV.Mesh ();
mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
@ -148,37 +148,37 @@ describe ('Mesh Buffer', function () {
mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 1.0));
mesh.AddVertex (new OV.Coord3D (0.0, 1.0, 1.0));
mesh.AddTriangle (new OV.Triangle (0, 1, 5));
mesh.AddTriangle (new OV.Triangle (0, 5, 4));
mesh.AddTriangle (new OV.Triangle (1, 2, 6));
mesh.AddTriangle (new OV.Triangle (1, 6, 5));
mesh.AddTriangle (new OV.Triangle (2, 3, 7));
mesh.AddTriangle (new OV.Triangle (2, 7, 6));
mesh.AddTriangle (new OV.Triangle (3, 0, 4));
mesh.AddTriangle (new OV.Triangle (3, 4, 7));
mesh.AddTriangle (new OV.Triangle (0, 3, 2));
mesh.AddTriangle (new OV.Triangle (0, 2, 1));
mesh.AddTriangle (new OV.Triangle (4, 5, 6));
mesh.AddTriangle (new OV.Triangle (4, 6, 7));
mesh.AddTriangle (new OV.Triangle (0, 1, 5));
mesh.AddTriangle (new OV.Triangle (0, 5, 4));
mesh.AddTriangle (new OV.Triangle (1, 2, 6));
mesh.AddTriangle (new OV.Triangle (1, 6, 5));
mesh.AddTriangle (new OV.Triangle (2, 3, 7));
mesh.AddTriangle (new OV.Triangle (2, 7, 6));
mesh.AddTriangle (new OV.Triangle (3, 0, 4));
mesh.AddTriangle (new OV.Triangle (3, 4, 7));
mesh.AddTriangle (new OV.Triangle (0, 3, 2));
mesh.AddTriangle (new OV.Triangle (0, 2, 1));
mesh.AddTriangle (new OV.Triangle (4, 5, 6));
mesh.AddTriangle (new OV.Triangle (4, 6, 7));
model.AddMesh (mesh);
OV.FinalizeModel (model, function () {
return new OV.Material ();
});
assert (OV.CheckModel (model));
model.AddMesh (mesh);
OV.FinalizeModel (model, function () {
return new OV.Material ();
});
assert (OV.CheckModel (model));
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 36);
assert.strictEqual (buffer.primitives[0].vertices.length, 24 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 24 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 0);
assert.strictEqual (buffer.primitives[0].GetByteLength (2, 4), 36 * 2 + 2 * 24 * 3 * 4);
assert.strictEqual (buffer.GetByteLength (2, 4), 36 * 2 + 2 * 24 * 3 * 4);
});
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 36);
assert.strictEqual (buffer.primitives[0].vertices.length, 24 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 24 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 0);
assert.strictEqual (buffer.primitives[0].GetByteLength (2, 4), 36 * 2 + 2 * 24 * 3 * 4);
assert.strictEqual (buffer.GetByteLength (2, 4), 36 * 2 + 2 * 24 * 3 * 4);
});
it ('Mesh To Buffer Cube Auto Curve Normals', function () {
var model = new OV.Model ();
var model = new OV.Model ();
var mesh = new OV.Mesh ();
mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
@ -190,37 +190,37 @@ describe ('Mesh Buffer', function () {
mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 1.0));
mesh.AddVertex (new OV.Coord3D (0.0, 1.0, 1.0));
mesh.AddTriangle (new OV.Triangle (0, 1, 5).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (0, 5, 4).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (1, 2, 6).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (1, 6, 5).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (2, 3, 7).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (2, 7, 6).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (3, 0, 4).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (3, 4, 7).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (0, 3, 2).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (0, 2, 1).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (4, 5, 6).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (4, 6, 7).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (0, 1, 5).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (0, 5, 4).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (1, 2, 6).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (1, 6, 5).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (2, 3, 7).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (2, 7, 6).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (3, 0, 4).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (3, 4, 7).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (0, 3, 2).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (0, 2, 1).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (4, 5, 6).SetCurve (1));
mesh.AddTriangle (new OV.Triangle (4, 6, 7).SetCurve (1));
model.AddMesh (mesh);
OV.FinalizeModel (model, function () {
return new OV.Material ();
});
assert (OV.CheckModel (model));
model.AddMesh (mesh);
OV.FinalizeModel (model, function () {
return new OV.Material ();
});
assert (OV.CheckModel (model));
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 36);
assert.strictEqual (buffer.primitives[0].vertices.length, 8 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 8 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 0);
assert.strictEqual (buffer.primitives[0].GetByteLength (2, 4), 36 * 2 + 2 * 8 * 3 * 4);
assert.strictEqual (buffer.GetByteLength (2, 4), 36 * 2 + 2 * 8 * 3 * 4);
});
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 36);
assert.strictEqual (buffer.primitives[0].vertices.length, 8 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 8 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 0);
assert.strictEqual (buffer.primitives[0].GetByteLength (2, 4), 36 * 2 + 2 * 8 * 3 * 4);
assert.strictEqual (buffer.GetByteLength (2, 4), 36 * 2 + 2 * 8 * 3 * 4);
});
it ('Mesh To Buffer Cube Materials', function () {
var model = new OV.Model ();
var model = new OV.Model ();
model.AddMaterial (new OV.Material ());
model.AddMaterial (new OV.Material ());
var mesh = new OV.Mesh ();
@ -234,42 +234,42 @@ describe ('Mesh Buffer', function () {
mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 1.0));
mesh.AddVertex (new OV.Coord3D (0.0, 1.0, 1.0));
mesh.AddTriangle (new OV.Triangle (0, 1, 5).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (0, 5, 4).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (1, 2, 6).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (1, 6, 5).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (2, 3, 7).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (2, 7, 6).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (3, 0, 4).SetMaterial (1));
mesh.AddTriangle (new OV.Triangle (3, 4, 7).SetMaterial (1));
mesh.AddTriangle (new OV.Triangle (0, 3, 2).SetMaterial (1));
mesh.AddTriangle (new OV.Triangle (0, 2, 1).SetMaterial (1));
mesh.AddTriangle (new OV.Triangle (4, 5, 6).SetMaterial (1));
mesh.AddTriangle (new OV.Triangle (4, 6, 7).SetMaterial (1));
mesh.AddTriangle (new OV.Triangle (0, 1, 5).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (0, 5, 4).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (1, 2, 6).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (1, 6, 5).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (2, 3, 7).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (2, 7, 6).SetMaterial (0));
mesh.AddTriangle (new OV.Triangle (3, 0, 4).SetMaterial (1));
mesh.AddTriangle (new OV.Triangle (3, 4, 7).SetMaterial (1));
mesh.AddTriangle (new OV.Triangle (0, 3, 2).SetMaterial (1));
mesh.AddTriangle (new OV.Triangle (0, 2, 1).SetMaterial (1));
mesh.AddTriangle (new OV.Triangle (4, 5, 6).SetMaterial (1));
mesh.AddTriangle (new OV.Triangle (4, 6, 7).SetMaterial (1));
model.AddMesh (mesh);
OV.FinalizeModel (model, function () {
return new OV.Material ();
});
assert (OV.CheckModel (model));
model.AddMesh (mesh);
OV.FinalizeModel (model, function () {
return new OV.Material ();
});
assert (OV.CheckModel (model));
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 2);
assert.strictEqual (buffer.primitives[0].indices.length, 18);
assert.strictEqual (buffer.primitives[0].vertices.length, 12 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 12 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 0);
assert.strictEqual (buffer.primitives[0].GetByteLength (2, 4), 18 * 2 + 2 * 12 * 3 * 4);
assert.strictEqual (buffer.primitives[1].indices.length, 18);
assert.strictEqual (buffer.primitives[1].vertices.length, 12 * 3);
assert.strictEqual (buffer.primitives[1].normals.length, 12 * 3);
assert.strictEqual (buffer.primitives[1].uvs.length, 0);
assert.strictEqual (buffer.primitives[1].GetByteLength (2, 4), 18 * 2 + 2 * 12 * 3 * 4);
assert.strictEqual (buffer.GetByteLength (2, 4), 36 * 2 + 2 * 24 * 3 * 4);
});
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 2);
assert.strictEqual (buffer.primitives[0].indices.length, 18);
assert.strictEqual (buffer.primitives[0].vertices.length, 12 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 12 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 0);
assert.strictEqual (buffer.primitives[0].GetByteLength (2, 4), 18 * 2 + 2 * 12 * 3 * 4);
assert.strictEqual (buffer.primitives[1].indices.length, 18);
assert.strictEqual (buffer.primitives[1].vertices.length, 12 * 3);
assert.strictEqual (buffer.primitives[1].normals.length, 12 * 3);
assert.strictEqual (buffer.primitives[1].uvs.length, 0);
assert.strictEqual (buffer.primitives[1].GetByteLength (2, 4), 18 * 2 + 2 * 12 * 3 * 4);
assert.strictEqual (buffer.GetByteLength (2, 4), 36 * 2 + 2 * 24 * 3 * 4);
});
it ('Mesh To Buffer Cube One UV', function () {
var model = new OV.Model ();
it ('Mesh To Buffer Cube One UV', function () {
var model = new OV.Model ();
var mesh = new OV.Mesh ();
mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
@ -280,39 +280,39 @@ describe ('Mesh Buffer', function () {
mesh.AddVertex (new OV.Coord3D (1.0, 0.0, 1.0));
mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 1.0));
mesh.AddVertex (new OV.Coord3D (0.0, 1.0, 1.0));
mesh.AddTextureUV (new OV.Coord2D (0.0, 0.0));
mesh.AddTextureUV (new OV.Coord2D (1.0, 0.0));
mesh.AddTextureUV (new OV.Coord2D (1.0, 1.0));
mesh.AddTextureUV (new OV.Coord2D (0.0, 0.0));
mesh.AddTextureUV (new OV.Coord2D (1.0, 0.0));
mesh.AddTextureUV (new OV.Coord2D (1.0, 1.0));
mesh.AddTriangle (new OV.Triangle (0, 1, 5));
mesh.AddTriangle (new OV.Triangle (0, 5, 4));
mesh.AddTriangle (new OV.Triangle (1, 2, 6).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (1, 6, 5));
mesh.AddTriangle (new OV.Triangle (2, 3, 7));
mesh.AddTriangle (new OV.Triangle (2, 7, 6));
mesh.AddTriangle (new OV.Triangle (3, 0, 4));
mesh.AddTriangle (new OV.Triangle (3, 4, 7));
mesh.AddTriangle (new OV.Triangle (0, 3, 2));
mesh.AddTriangle (new OV.Triangle (0, 2, 1));
mesh.AddTriangle (new OV.Triangle (4, 5, 6));
mesh.AddTriangle (new OV.Triangle (4, 6, 7));
mesh.AddTriangle (new OV.Triangle (0, 1, 5));
mesh.AddTriangle (new OV.Triangle (0, 5, 4));
mesh.AddTriangle (new OV.Triangle (1, 2, 6).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (1, 6, 5));
mesh.AddTriangle (new OV.Triangle (2, 3, 7));
mesh.AddTriangle (new OV.Triangle (2, 7, 6));
mesh.AddTriangle (new OV.Triangle (3, 0, 4));
mesh.AddTriangle (new OV.Triangle (3, 4, 7));
mesh.AddTriangle (new OV.Triangle (0, 3, 2));
mesh.AddTriangle (new OV.Triangle (0, 2, 1));
mesh.AddTriangle (new OV.Triangle (4, 5, 6));
mesh.AddTriangle (new OV.Triangle (4, 6, 7));
model.AddMesh (mesh);
OV.FinalizeModel (model, function () {
return new OV.Material ();
});
assert (OV.CheckModel (model));
model.AddMesh (mesh);
OV.FinalizeModel (model, function () {
return new OV.Material ();
});
assert (OV.CheckModel (model));
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 36);
assert.strictEqual (buffer.primitives[0].vertices.length, 25 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 25 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 25 * 2);
});
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 36);
assert.strictEqual (buffer.primitives[0].vertices.length, 25 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 25 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 25 * 2);
});
it ('Mesh To Buffer Cube All UVs', function () {
var model = new OV.Model ();
it ('Mesh To Buffer Cube All UVs', function () {
var model = new OV.Model ();
var mesh = new OV.Mesh ();
mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
@ -323,34 +323,34 @@ describe ('Mesh Buffer', function () {
mesh.AddVertex (new OV.Coord3D (1.0, 0.0, 1.0));
mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 1.0));
mesh.AddVertex (new OV.Coord3D (0.0, 1.0, 1.0));
mesh.AddTextureUV (new OV.Coord2D (0.0, 0.0));
mesh.AddTextureUV (new OV.Coord2D (1.0, 0.0));
mesh.AddTextureUV (new OV.Coord2D (1.0, 1.0));
mesh.AddTextureUV (new OV.Coord2D (0.0, 0.0));
mesh.AddTextureUV (new OV.Coord2D (1.0, 0.0));
mesh.AddTextureUV (new OV.Coord2D (1.0, 1.0));
mesh.AddTriangle (new OV.Triangle (0, 1, 5).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (0, 5, 4).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (1, 2, 6).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (1, 6, 5).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (2, 3, 7).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (2, 7, 6).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (3, 0, 4).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (3, 4, 7).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (0, 3, 2).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (0, 2, 1).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (4, 5, 6).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (4, 6, 7).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (0, 1, 5).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (0, 5, 4).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (1, 2, 6).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (1, 6, 5).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (2, 3, 7).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (2, 7, 6).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (3, 0, 4).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (3, 4, 7).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (0, 3, 2).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (0, 2, 1).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (4, 5, 6).SetTextureUVs (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (4, 6, 7).SetTextureUVs (0, 1, 2));
model.AddMesh (mesh);
OV.FinalizeModel (model, function () {
return new OV.Material ();
});
assert (OV.CheckModel (model));
model.AddMesh (mesh);
OV.FinalizeModel (model, function () {
return new OV.Material ();
});
assert (OV.CheckModel (model));
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 36);
assert.strictEqual (buffer.primitives[0].vertices.length, 30 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 30 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 30 * 2);
});
let buffer = OV.ConvertMeshToMeshBuffer (mesh);
assert.strictEqual (buffer.primitives.length, 1);
assert.strictEqual (buffer.primitives[0].indices.length, 36);
assert.strictEqual (buffer.primitives[0].vertices.length, 30 * 3);
assert.strictEqual (buffer.primitives[0].normals.length, 30 * 3);
assert.strictEqual (buffer.primitives[0].uvs.length, 30 * 2);
});
});

View File

@ -1,152 +1,152 @@
var assert = require ('assert');
describe ('Model', function() {
it ('Default Initialization', function () {
var model = new OV.Model ();
assert.strictEqual (model.MaterialCount (), 0);
assert.strictEqual (model.MeshCount (), 0);
});
it ('Default Initialization', function () {
var model = new OV.Model ();
assert.strictEqual (model.MaterialCount (), 0);
assert.strictEqual (model.MeshCount (), 0);
});
it ('Add Material', function () {
var model = new OV.Model ();
var material = new OV.Material ();
material.name = 'example';
var index = model.AddMaterial (material);
assert.strictEqual (model.MaterialCount (), 1);
var theMaterial = model.GetMaterial (index);
assert.strictEqual (theMaterial.name, 'example');
});
it ('Add Material', function () {
var model = new OV.Model ();
var material = new OV.Material ();
material.name = 'example';
var index = model.AddMaterial (material);
assert.strictEqual (model.MaterialCount (), 1);
var theMaterial = model.GetMaterial (index);
assert.strictEqual (theMaterial.name, 'example');
});
it ('Add Mesh', function () {
var model = new OV.Model ();
var mesh = new OV.Mesh ();
mesh.SetName ('example');
var index = model.AddMesh (mesh);
assert.strictEqual (model.MeshCount (), 1);
var theMesh = model.GetMesh (index);
assert.strictEqual (theMesh.GetName (), 'example');
});
it ('Add Mesh', function () {
var model = new OV.Model ();
var mesh = new OV.Mesh ();
mesh.SetName ('example');
var index = model.AddMesh (mesh);
assert.strictEqual (model.MeshCount (), 1);
var theMesh = model.GetMesh (index);
assert.strictEqual (theMesh.GetName (), 'example');
});
it ('Add Mesh To Index', function () {
var model = new OV.Model ();
var mesh1 = new OV.Mesh ();
var mesh2 = new OV.Mesh ();
var mesh3 = new OV.Mesh ();
var mesh4 = new OV.Mesh ();
mesh1.SetName ('A');
mesh2.SetName ('B');
mesh3.SetName ('C');
mesh4.SetName ('D');
model.AddMesh (mesh1);
model.AddMesh (mesh2);
model.AddMeshToIndex (mesh3, 1);
model.AddMeshToIndex (mesh4, 3);
assert.strictEqual (model.GetMesh (0).GetName (), 'A');
assert.strictEqual (model.GetMesh (1).GetName (), 'C');
assert.strictEqual (model.GetMesh (2).GetName (), 'B');
assert.strictEqual (model.GetMesh (3).GetName (), 'D');
});
it ('Add Mesh To Index', function () {
var model = new OV.Model ();
var mesh1 = new OV.Mesh ();
var mesh2 = new OV.Mesh ();
var mesh3 = new OV.Mesh ();
var mesh4 = new OV.Mesh ();
mesh1.SetName ('A');
mesh2.SetName ('B');
mesh3.SetName ('C');
mesh4.SetName ('D');
model.AddMesh (mesh1);
model.AddMesh (mesh2);
model.AddMeshToIndex (mesh3, 1);
model.AddMeshToIndex (mesh4, 3);
assert.strictEqual (model.GetMesh (0).GetName (), 'A');
assert.strictEqual (model.GetMesh (1).GetName (), 'C');
assert.strictEqual (model.GetMesh (2).GetName (), 'B');
assert.strictEqual (model.GetMesh (3).GetName (), 'D');
});
it ('Counters', function () {
var model = new OV.Model ();
let mesh = new OV.Mesh ();
mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, 0.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, 0.0));
mesh.AddTextureUV (new OV.Coord2D (0.0, 0.0));
mesh.AddTriangle (new OV.Triangle (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (0, 1, 2));
model.AddMesh (mesh);
assert.strictEqual (model.VertexCount (), 3);
assert.strictEqual (model.NormalCount (), 2);
assert.strictEqual (model.TextureUVCount (), 1);
assert.strictEqual (model.TriangleCount (), 4);
});
it ('Counters', function () {
var model = new OV.Model ();
let mesh = new OV.Mesh ();
mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, 0.0));
mesh.AddNormal (new OV.Coord3D (0.0, 0.0, 0.0));
mesh.AddTextureUV (new OV.Coord2D (0.0, 0.0));
mesh.AddTriangle (new OV.Triangle (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (0, 1, 2));
mesh.AddTriangle (new OV.Triangle (0, 1, 2));
model.AddMesh (mesh);
assert.strictEqual (model.VertexCount (), 3);
assert.strictEqual (model.NormalCount (), 2);
assert.strictEqual (model.TextureUVCount (), 1);
assert.strictEqual (model.TriangleCount (), 4);
});
it ('Remove Mesh', function () {
var model = new OV.Model ();
let mesh1 = new OV.Mesh ();
mesh1.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
mesh1.AddVertex (new OV.Coord3D (1.0, 0.0, 0.0));
mesh1.AddVertex (new OV.Coord3D (1.0, 1.0, 0.0));
mesh1.AddTriangle (new OV.Triangle (0, 1, 2));
model.AddMesh (mesh1);
it ('Remove Mesh', function () {
var model = new OV.Model ();
let mesh1 = new OV.Mesh ();
mesh1.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
mesh1.AddVertex (new OV.Coord3D (1.0, 0.0, 0.0));
mesh1.AddVertex (new OV.Coord3D (1.0, 1.0, 0.0));
mesh1.AddTriangle (new OV.Triangle (0, 1, 2));
model.AddMesh (mesh1);
let mesh2 = new OV.Mesh ();
mesh2.AddVertex (new OV.Coord3D (0.0, 0.0, 1.0));
mesh2.AddVertex (new OV.Coord3D (1.0, 0.0, 1.0));
mesh2.AddVertex (new OV.Coord3D (1.0, 1.0, 1.0));
mesh2.AddTriangle (new OV.Triangle (0, 1, 2));
model.AddMesh (mesh2);
let mesh2 = new OV.Mesh ();
mesh2.AddVertex (new OV.Coord3D (0.0, 0.0, 1.0));
mesh2.AddVertex (new OV.Coord3D (1.0, 0.0, 1.0));
mesh2.AddVertex (new OV.Coord3D (1.0, 1.0, 1.0));
mesh2.AddTriangle (new OV.Triangle (0, 1, 2));
model.AddMesh (mesh2);
assert.strictEqual (model.MeshCount (), 2);
assert.strictEqual (model.VertexCount (), 6);
assert.strictEqual (model.TriangleCount (), 2);
assert.strictEqual (model.MeshCount (), 2);
assert.strictEqual (model.VertexCount (), 6);
assert.strictEqual (model.TriangleCount (), 2);
model.RemoveMesh (0);
assert.strictEqual (model.MeshCount (), 1);
assert.strictEqual (model.VertexCount (), 3);
assert.strictEqual (model.TriangleCount (), 1);
model.RemoveMesh (0);
assert.strictEqual (model.MeshCount (), 1);
assert.strictEqual (model.VertexCount (), 3);
assert.strictEqual (model.TriangleCount (), 1);
model.RemoveMesh (0);
assert.strictEqual (model.MeshCount (), 0);
assert.strictEqual (model.VertexCount (), 0);
assert.strictEqual (model.TriangleCount (), 0);
});
model.RemoveMesh (0);
assert.strictEqual (model.MeshCount (), 0);
assert.strictEqual (model.VertexCount (), 0);
assert.strictEqual (model.TriangleCount (), 0);
});
});
describe ('Model Finalization', function() {
it ('Calculate Normal', function () {
var mesh = new OV.Mesh ();
var v0 = mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
var v1 = mesh.AddVertex (new OV.Coord3D (1.0, 0.0, 0.0));
var v2 = mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 0.0));
var triangleIndex = mesh.AddTriangle (new OV.Triangle (v0, v1, v2));
var model = new OV.Model ();
var meshIndex = model.AddMesh (mesh);
assert.strictEqual (model.MaterialCount (), 0);
OV.FinalizeModel (model, function () { new OV.Material () });
assert.strictEqual (model.MaterialCount (), 1);
var theMesh = model.GetMesh (meshIndex);
assert.strictEqual (theMesh.NormalCount (), 1);
var triangle = theMesh.GetTriangle (triangleIndex);
assert.strictEqual (triangle.n0, 0);
assert.strictEqual (triangle.n1, 0);
assert.strictEqual (triangle.n2, 0);
assert.strictEqual (triangle.mat, 0);
});
it ('Calculate Normal', function () {
var mesh = new OV.Mesh ();
var v0 = mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
var v1 = mesh.AddVertex (new OV.Coord3D (1.0, 0.0, 0.0));
var v2 = mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 0.0));
var triangleIndex = mesh.AddTriangle (new OV.Triangle (v0, v1, v2));
var model = new OV.Model ();
var meshIndex = model.AddMesh (mesh);
assert.strictEqual (model.MaterialCount (), 0);
OV.FinalizeModel (model, function () { new OV.Material () });
assert.strictEqual (model.MaterialCount (), 1);
var theMesh = model.GetMesh (meshIndex);
assert.strictEqual (theMesh.NormalCount (), 1);
var triangle = theMesh.GetTriangle (triangleIndex);
assert.strictEqual (triangle.n0, 0);
assert.strictEqual (triangle.n1, 0);
assert.strictEqual (triangle.n2, 0);
assert.strictEqual (triangle.mat, 0);
});
it ('Calculate Curved Normal', function () {
var mesh = new OV.Mesh ();
var v0 = mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
var v1 = mesh.AddVertex (new OV.Coord3D (1.0, 0.0, 0.0));
var v2 = mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 0.0));
var v3 = mesh.AddVertex (new OV.Coord3D (0.0, 0.0, -1.0));
it ('Calculate Curved Normal', function () {
var mesh = new OV.Mesh ();
var v0 = mesh.AddVertex (new OV.Coord3D (0.0, 0.0, 0.0));
var v1 = mesh.AddVertex (new OV.Coord3D (1.0, 0.0, 0.0));
var v2 = mesh.AddVertex (new OV.Coord3D (1.0, 1.0, 0.0));
var v3 = mesh.AddVertex (new OV.Coord3D (0.0, 0.0, -1.0));
var triangle1 = new OV.Triangle (v0, v1, v2);
triangle1.curve = 1;
var triangle2 = new OV.Triangle (v0, v3, v1);
triangle2.curve = 1;
var triangle1 = new OV.Triangle (v0, v1, v2);
triangle1.curve = 1;
var triangle2 = new OV.Triangle (v0, v3, v1);
triangle2.curve = 1;
var triangle1 = mesh.AddTriangle (triangle1);
var triangle1 = mesh.AddTriangle (triangle2);
var triangle1 = mesh.AddTriangle (triangle1);
var triangle1 = mesh.AddTriangle (triangle2);
var model = new OV.Model ()
var meshIndex = model.AddMesh (mesh);
var model = new OV.Model ()
var meshIndex = model.AddMesh (mesh);
OV.FinalizeModel (model, function () { new OV.Material () });
var theMesh = model.GetMesh (meshIndex);
assert.strictEqual (theMesh.NormalCount (), 6);
var normal = theMesh.GetNormal (0);
assert.strictEqual (normal.x, 0.0);
assert.strictEqual (normal.y, -0.7071067811865475);
assert.strictEqual (normal.z, 0.7071067811865475);
});
OV.FinalizeModel (model, function () { new OV.Material () });
var theMesh = model.GetMesh (meshIndex);
assert.strictEqual (theMesh.NormalCount (), 6);
var normal = theMesh.GetNormal (0);
assert.strictEqual (normal.x, 0.0);
assert.strictEqual (normal.y, -0.7071067811865475);
assert.strictEqual (normal.z, 0.7071067811865475);
});
});

View File

@ -20,62 +20,62 @@ describe ('Model Utils', function () {
model.AddMesh (mesh2);
OV.FinalizeModel (model, function () { return new OV.Material (); });
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
},
assert.deepStrictEqual (testUtils.ModelToObject (model), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 1, 1, 0, 1, 1, 1, 1],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
},
{
name : '',
triangles : [
{
vertices : [0, 0, 1, 1, 0, 1, 1, 1, 1],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
var mergedModel = OV.CreateMergedModel (model);
assert.deepStrictEqual (testUtils.ModelToObject (mergedModel), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
},
assert.deepStrictEqual (testUtils.ModelToObject (mergedModel), {
name : '',
materials : [
{ name : '' }
],
meshes : [
{
name : '',
triangles : [
{
vertices : [0, 0, 1, 1, 0, 1, 1, 1, 1],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
vertices : [0, 0, 0, 1, 0, 0, 1, 1, 0],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
},
{
vertices : [0, 0, 1, 1, 0, 1, 1, 1, 1],
normals : [0, 0, 1, 0, 0, 1, 0, 0, 1],
uvs : [],
mat : 0
}
]
}
]
});
});
]
});
});
});

View File

@ -1,31 +1,31 @@
var assert = require ('assert');
describe ('Task Runner', function () {
it ('Run task zero times', function () {
var tr = new OV.TaskRunner ();
var numbers = [];
tr.Run (0, {
runTask : function (index, ready) {
numbers.push (index);
ready ();
},
onReady : function () {
assert.deepStrictEqual (numbers, []);
}
});
});
it ('Run task zero times', function () {
var tr = new OV.TaskRunner ();
var numbers = [];
tr.Run (0, {
runTask : function (index, ready) {
numbers.push (index);
ready ();
},
onReady : function () {
assert.deepStrictEqual (numbers, []);
}
});
});
it ('Run task three times', function () {
var tr = new OV.TaskRunner ();
var numbers = [];
tr.Run (3, {
runTask : function (index, ready) {
numbers.push (index);
ready ();
},
onReady : function () {
assert.deepStrictEqual (numbers, [0, 1, 2]);
}
});
});
it ('Run task three times', function () {
var tr = new OV.TaskRunner ();
var numbers = [];
tr.Run (3, {
runTask : function (index, ready) {
numbers.push (index);
ready ();
},
onReady : function () {
assert.deepStrictEqual (numbers, [0, 1, 2]);
}
});
});
});

View File

@ -11,10 +11,10 @@ global.Blob = function () {
var objectUrlCounter = 0;
global.URL = {
createObjectURL : function () {
objectUrlCounter += 1;
return 'ObjectUrl:' + objectUrlCounter.toString ();
},
createObjectURL : function () {
objectUrlCounter += 1;
return 'ObjectUrl:' + objectUrlCounter.toString ();
},
revokeObjectURL : function () {
}

View File

@ -2,84 +2,84 @@ var testUtils = require ('./testutils.js');
module.exports =
{
ImportObjFile : function (fileName)
{
var importer = new OV.ImporterObj ();
return this.ImportFile (importer, OV.FileFormat.Text, 'obj', fileName);
},
ImportObjFile : function (fileName)
{
var importer = new OV.ImporterObj ();
return this.ImportFile (importer, OV.FileFormat.Text, 'obj', fileName);
},
ImportStlFile : function (fileName)
{
var importer = new OV.ImporterStl ();
return this.ImportFile (importer, OV.FileFormat.Binary, 'stl', fileName);
},
ImportStlFile : function (fileName)
{
var importer = new OV.ImporterStl ();
return this.ImportFile (importer, OV.FileFormat.Binary, 'stl', fileName);
},
ImportOffFile : function (fileName)
{
var importer = new OV.ImporterOff ();
return this.ImportFile (importer, OV.FileFormat.Text, 'off', fileName);
},
ImportOffFile : function (fileName)
{
var importer = new OV.ImporterOff ();
return this.ImportFile (importer, OV.FileFormat.Text, 'off', fileName);
},
ImportPlyFile : function (fileName)
{
var importer = new OV.ImporterPly ();
return this.ImportFile (importer, OV.FileFormat.Binary, 'ply', fileName);
},
ImportPlyFile : function (fileName)
{
var importer = new OV.ImporterPly ();
return this.ImportFile (importer, OV.FileFormat.Binary, 'ply', fileName);
},
Import3dsFile : function (fileName)
{
var importer = new OV.Importer3ds ();
return this.ImportFile (importer, OV.FileFormat.Binary, '3ds', fileName);
},
Import3dsFile : function (fileName)
{
var importer = new OV.Importer3ds ();
return this.ImportFile (importer, OV.FileFormat.Binary, '3ds', fileName);
},
ImportGltfFile : function (folderName, fileName)
{
let extension = OV.GetFileExtension (fileName);
let format = OV.FileFormat.Text;
if (extension == 'glb') {
format = OV.FileFormat.Binary;
}
var importer = new OV.ImporterGltf ();
return this.ImportFile (importer, format, 'gltf/' + folderName, fileName);
},
ImportGltfFile : function (folderName, fileName)
{
let extension = OV.GetFileExtension (fileName);
let format = OV.FileFormat.Text;
if (extension == 'glb') {
format = OV.FileFormat.Binary;
}
var importer = new OV.ImporterGltf ();
return this.ImportFile (importer, format, 'gltf/' + folderName, fileName);
},
ImportFile : function (importer, format, folder, fileName)
{
var content = null;
if (format == OV.FileFormat.Text) {
content = testUtils.GetTextFileContent (folder, fileName);
} else if (format == OV.FileFormat.Binary) {
content = testUtils.GetArrayBufferFileContent (folder, fileName);
}
var extension = OV.GetFileExtension (fileName);
let buffers = new OV.ImporterBuffers (function (filePath) {
let extension = OV.GetFileExtension (filePath);
let knownFormats = importer.GetKnownFileFormats ();
let format = OV.FileFormat.Binary;
if (knownFormats[extension] !== undefined) {
format = knownFormats[extension];
}
let fileContent = null;
if (format == OV.FileFormat.Text) {
fileContent = testUtils.GetTextFileContent (folder, filePath);
} else if (format == OV.FileFormat.Binary) {
fileContent = testUtils.GetArrayBufferFileContent (folder, filePath);
}
return fileContent;
});
importer.Import (content, extension, {
getDefaultMaterial : function () {
var material = new OV.Material ();
return material;
},
getFileBuffer : function (filePath) {
return buffers.GetFileBuffer (filePath);
},
getTextureBuffer : function (filePath) {
return buffers.GetTextureBuffer (filePath);
}
});
let model = importer.GetModel ();
return model;
}
ImportFile : function (importer, format, folder, fileName)
{
var content = null;
if (format == OV.FileFormat.Text) {
content = testUtils.GetTextFileContent (folder, fileName);
} else if (format == OV.FileFormat.Binary) {
content = testUtils.GetArrayBufferFileContent (folder, fileName);
}
var extension = OV.GetFileExtension (fileName);
let buffers = new OV.ImporterBuffers (function (filePath) {
let extension = OV.GetFileExtension (filePath);
let knownFormats = importer.GetKnownFileFormats ();
let format = OV.FileFormat.Binary;
if (knownFormats[extension] !== undefined) {
format = knownFormats[extension];
}
let fileContent = null;
if (format == OV.FileFormat.Text) {
fileContent = testUtils.GetTextFileContent (folder, filePath);
} else if (format == OV.FileFormat.Binary) {
fileContent = testUtils.GetArrayBufferFileContent (folder, filePath);
}
return fileContent;
});
importer.Import (content, extension, {
getDefaultMaterial : function () {
var material = new OV.Material ();
return material;
},
getFileBuffer : function (filePath) {
return buffers.GetFileBuffer (filePath);
},
getTextureBuffer : function (filePath) {
return buffers.GetTextureBuffer (filePath);
}
});
let model = importer.GetModel ();
return model;
}
}

View File

@ -3,137 +3,137 @@ 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 ();
},
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
},
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 : []
};
ModelToObject : function (model)
{
var obj = {
name : model.GetName (),
materials : [],
meshes : []
};
var i, j;
var i, j;
var material;
for (i = 0; i < model.MaterialCount (); i++) {
material = model.GetMaterial (i);
obj.materials.push ({
name : material.name
});
}
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);
}
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;
},
return obj;
},
ModelToObjectSimple : function (model)
{
var obj = {
name : model.GetName (),
materials : [],
meshes : []
};
ModelToObjectSimple : function (model)
{
var obj = {
name : model.GetName (),
materials : [],
meshes : []
};
var i;
var i;
var material;
for (i = 0; i < model.MaterialCount (); i++) {
material = model.GetMaterial (i);
obj.materials.push ({
name : material.name
});
}
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);
}
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;
}
return obj;
}
}

View File

@ -273,7 +273,7 @@ OV.ShowExportDialog = function (model)
$('<img>').addClass ('ov_dialog_file_link_icon').attr ('src', 'assets/images/dialog/file_download.svg').appendTo (fileLink);
$('<div>').addClass ('ov_dialog_file_link_text').html (file.GetName ()).appendTo (fileLink);
}
});
});
});
dialog.SetCloseHandler (function () {

View File

@ -1,69 +1,69 @@
OV.Embed = class
{
constructor (parameters)
{
constructor (parameters)
{
this.parameters = parameters;
this.viewer = new OV.Viewer ();
this.hashHandler = new OV.HashHandler ();
this.modelLoader = new OV.ThreeModelLoader ();
}
Load ()
{
let canvas = $('<canvas>').appendTo (this.parameters.viewerDiv);
this.viewer.Init (canvas.get (0));
this.InitModelLoader ();
Load ()
{
let canvas = $('<canvas>').appendTo (this.parameters.viewerDiv);
this.viewer.Init (canvas.get (0));
this.InitModelLoader ();
this.Resize ();
if (this.hashHandler.HasHash ()) {
let urls = this.hashHandler.GetModelFilesFromHash ();
if (urls === null) {
return;
}
let camera = this.hashHandler.GetCameraFromHash ();
if (camera !== null) {
this.viewer.SetCamera (camera);
}
this.modelLoader.LoadFromUrlList (urls);
let hashParameters = OV.CreateHashParameters (urls, camera);
let websiteUrl = this.parameters.websiteLinkDiv.attr ('href') + '#' + hashParameters;
this.parameters.websiteLinkDiv.attr ('href', websiteUrl);
}
}
if (this.hashHandler.HasHash ()) {
let urls = this.hashHandler.GetModelFilesFromHash ();
if (urls === null) {
return;
}
let camera = this.hashHandler.GetCameraFromHash ();
if (camera !== null) {
this.viewer.SetCamera (camera);
}
this.modelLoader.LoadFromUrlList (urls);
let hashParameters = OV.CreateHashParameters (urls, camera);
let websiteUrl = this.parameters.websiteLinkDiv.attr ('href') + '#' + hashParameters;
this.parameters.websiteLinkDiv.attr ('href', websiteUrl);
}
}
Resize ()
{
let windowWidth = $(window).outerWidth ();
let windowHeight = $(window).outerHeight ();
this.viewer.Resize (windowWidth, windowHeight);
}
{
let windowWidth = $(window).outerWidth ();
let windowHeight = $(window).outerHeight ();
this.viewer.Resize (windowWidth, windowHeight);
}
OnModelFinished (importResult, threeMeshes)
{
this.viewer.AddMeshes (threeMeshes);
let boundingSphere = this.viewer.GetBoundingSphere (function (meshUserData) {
return true;
});
this.viewer.AdjustClippingPlanes (boundingSphere);
this.viewer.FitToWindow (boundingSphere, false);
}
OnModelFinished (importResult, threeMeshes)
{
this.viewer.AddMeshes (threeMeshes);
let boundingSphere = this.viewer.GetBoundingSphere (function (meshUserData) {
return true;
});
this.viewer.AdjustClippingPlanes (boundingSphere);
this.viewer.FitToWindow (boundingSphere, false);
}
InitModelLoader ()
{
let obj = this;
OV.InitModelLoader (this.modelLoader, {
onStart : function ()
{
},
onFinish : function (importResult, threeMeshes)
{
obj.OnModelFinished (importResult, threeMeshes);
},
onRender : function ()
{
obj.viewer.Render ();
}
});
}
InitModelLoader ()
{
let obj = this;
OV.InitModelLoader (this.modelLoader, {
onStart : function ()
{
},
onFinish : function (importResult, threeMeshes)
{
obj.OnModelFinished (importResult, threeMeshes);
},
onRender : function ()
{
obj.viewer.Render ();
}
});
}
};

View File

@ -1,110 +1,110 @@
OV.HashHandler = class
{
constructor ()
{
this.skipNextEvent = false;
this.eventListener = null;
}
constructor ()
{
this.skipNextEvent = false;
this.eventListener = null;
}
SetEventListener (eventListener)
{
this.eventListener = eventListener;
window.onhashchange = this.OnChange.bind (this);
}
SetEventListener (eventListener)
{
this.eventListener = eventListener;
window.onhashchange = this.OnChange.bind (this);
}
SkipNextEventHandler ()
{
this.skipNextEvent = true;
}
SkipNextEventHandler ()
{
this.skipNextEvent = true;
}
HasHash ()
{
let hash = this.GetHash ();
return hash.length > 0;
}
HasHash ()
{
let hash = this.GetHash ();
return hash.length > 0;
}
ClearHash ()
{
this.SetHash ('');
}
ClearHash ()
{
this.SetHash ('');
}
GetCameraFromHash ()
{
let parameters = this.GetFromHash ('camera');
if (parameters === null) {
return null;
}
let splitted = parameters.split (',');
if (splitted.length !== 9) {
return null;
}
let camera = new OV.Camera (
new OV.Coord3D (parseFloat (splitted[0]), parseFloat (splitted[1]), parseFloat (splitted[2])),
new OV.Coord3D (parseFloat (splitted[3]), parseFloat (splitted[4]), parseFloat (splitted[5])),
new OV.Coord3D (parseFloat (splitted[6]), parseFloat (splitted[7]), parseFloat (splitted[8]))
);
return camera;
}
GetCameraFromHash ()
{
let parameters = this.GetFromHash ('camera');
if (parameters === null) {
return null;
}
let splitted = parameters.split (',');
if (splitted.length !== 9) {
return null;
}
let camera = new OV.Camera (
new OV.Coord3D (parseFloat (splitted[0]), parseFloat (splitted[1]), parseFloat (splitted[2])),
new OV.Coord3D (parseFloat (splitted[3]), parseFloat (splitted[4]), parseFloat (splitted[5])),
new OV.Coord3D (parseFloat (splitted[6]), parseFloat (splitted[7]), parseFloat (splitted[8]))
);
return camera;
}
GetModelFilesFromHash ()
{
let hash = this.GetHash ();
if (hash.length === 0) {
return null;
}
GetModelFilesFromHash ()
{
let hash = this.GetHash ();
if (hash.length === 0) {
return null;
}
// detect legacy links
let modelKeyword = 'model';
let keywordToken = modelKeyword + '=';
if (hash.indexOf (keywordToken) === -1) {
return hash.split (',');
}
// detect legacy links
let modelKeyword = 'model';
let keywordToken = modelKeyword + '=';
if (hash.indexOf (keywordToken) === -1) {
return hash.split (',');
}
let fileList = this.GetFromHash (modelKeyword);
if (fileList === null) {
return null;
}
return fileList.split (',');
}
let fileList = this.GetFromHash (modelKeyword);
if (fileList === null) {
return null;
}
return fileList.split (',');
}
SetModelFilesToHash (files)
{
this.SetHash ('model=' + files.join (','));
}
SetModelFilesToHash (files)
{
this.SetHash ('model=' + files.join (','));
}
GetFromHash (keyword)
{
let hash = this.GetHash ();
if (hash.length === 0) {
return null;
}
let keywordToken = keyword + '=';
let hashParts = hash.split ('$');
for (let i = 0; i < hashParts.length; i++) {
let hashPart = hashParts[i];
if (hashPart.startsWith (keywordToken)) {
return hashPart.substr (keywordToken.length);
}
}
return null;
}
GetFromHash (keyword)
{
let hash = this.GetHash ();
if (hash.length === 0) {
return null;
}
let keywordToken = keyword + '=';
let hashParts = hash.split ('$');
for (let i = 0; i < hashParts.length; i++) {
let hashPart = hashParts[i];
if (hashPart.startsWith (keywordToken)) {
return hashPart.substr (keywordToken.length);
}
}
return null;
}
GetHash ()
{
return window.location.hash.substr (1);
}
GetHash ()
{
return window.location.hash.substr (1);
}
SetHash (hash)
{
window.location.hash = hash;
}
SetHash (hash)
{
window.location.hash = hash;
}
OnChange ()
{
if (this.skipNextEvent) {
this.skipNextEvent = false;
return;
}
this.eventListener ();
}
OnChange ()
{
if (this.skipNextEvent) {
this.skipNextEvent = false;
return;
}
this.eventListener ();
}
};

View File

@ -4,9 +4,9 @@ OV.InfoPanel = class
{
this.mainDiv = $('<div>').addClass ('ov_info_panel_main').appendTo (parentDiv);
this.treeView = new OV.TreeView (this.mainDiv);
this.detailsItem = new OV.TreeViewGroupItem ('Details', 'assets/images/tree/details.svg');
this.detailsItem = new OV.TreeViewGroupItem ('Details', 'assets/images/tree/details.svg');
this.detailsItem.ShowChildren (!OV.IsSmallHeight (), null);
this.treeView.AddItem (this.detailsItem);
this.treeView.AddItem (this.detailsItem);
let childrenDiv = this.detailsItem.CreateChildrenDiv ();
childrenDiv.addClass ('ov_info_panel_content');
this.popup = null;
@ -146,10 +146,10 @@ OV.InfoPanel = class
Clear ()
{
if (this.popup !== null) {
if (this.popup !== null) {
this.popup.Hide ();
this.popup = null;
}
}
let contentDiv = this.detailsItem.GetChildrenDiv ();
contentDiv.empty ();
}

View File

@ -47,22 +47,22 @@ OV.Menu = class
}
FillTree (importResult)
{
{
let obj = this;
this.titleDiv.html (importResult.mainFile).attr ('title', importResult.mainFile);
let model = importResult.model;
let usedFiles = importResult.usedFiles;
let missingFiles = importResult.missingFiles;
let model = importResult.model;
let usedFiles = importResult.usedFiles;
let missingFiles = importResult.missingFiles;
let filesItem = new OV.TreeViewGroupItem ('Files', 'assets/images/tree/files.svg');
this.treeView.AddItem (filesItem);
let filesItem = new OV.TreeViewGroupItem ('Files', 'assets/images/tree/files.svg');
this.treeView.AddItem (filesItem);
for (let i = 0; i < usedFiles.length; i++) {
let file = usedFiles[i];
let item = new OV.TreeViewSingleItem (file);
filesItem.AddChild (item);
}
let file = usedFiles[i];
let item = new OV.TreeViewSingleItem (file);
filesItem.AddChild (item);
}
if (missingFiles.length > 0) {
let missingFilesItem = new OV.TreeViewGroupItem ('Missing Files', 'assets/images/tree/missing_files.svg');
@ -79,29 +79,29 @@ OV.Menu = class
}
}
let materialsItem = new OV.TreeViewGroupItem ('Materials', 'assets/images/tree/materials.svg');
this.treeView.AddItem (materialsItem);
let materialsItem = new OV.TreeViewGroupItem ('Materials', 'assets/images/tree/materials.svg');
this.treeView.AddItem (materialsItem);
for (let i = 0; i < model.MaterialCount (); i++) {
let material = model.GetMaterial (i);
let material = model.GetMaterial (i);
let materialName = OV.GetMaterialName (material.name);
let materialData = new OV.MaterialData (i);
let materialItem = materialData.CreateMenuItem (materialName, {
let materialItem = materialData.CreateMenuItem (materialName, {
onSelected : function (materialIndex) {
obj.SetSelection (new OV.Selection (OV.SelectionType.Material, materialIndex));
}
});
this.modelData.AddMaterialData (materialData);
materialsItem.AddChild (materialItem);
}
materialsItem.AddChild (materialItem);
}
let meshesItem = new OV.TreeViewGroupItem ('Meshes', 'assets/images/tree/meshes.svg');
this.treeView.AddItem (meshesItem);
this.treeView.AddItem (meshesItem);
meshesItem.ShowChildren (true, null);
for (let i = 0; i < model.MeshCount (); i++) {
let mesh = model.GetMesh (i);
let meshData = new OV.MeshData (i);
for (let i = 0; i < model.MeshCount (); i++) {
let mesh = model.GetMesh (i);
let meshData = new OV.MeshData (i);
let meshName = OV.GetMeshName (mesh.GetName ());
let meshItem = meshData.CreateMenuItem (meshName, {
let meshItem = meshData.CreateMenuItem (meshName, {
onShowHide : function (meshIndex) {
obj.ToggleMeshVisibility (meshIndex);
},
@ -115,13 +115,13 @@ OV.Menu = class
obj.SetSelection (new OV.Selection (OV.SelectionType.Mesh, meshIndex));
}
});
this.modelData.AddMeshData (meshData);
meshesItem.AddChild (meshItem);
}
this.modelData.AddMeshData (meshData);
meshesItem.AddChild (meshItem);
}
this.UpdateInfoPanel ();
this.Resize ();
}
}
IsMeshVisible (meshIndex)
{
@ -129,8 +129,8 @@ OV.Menu = class
return meshData.IsVisible ();
}
IsolateMesh (meshIndex)
{
IsolateMesh (meshIndex)
{
let isIsolated = true;
for (let i = 0; i < this.modelData.MeshCount (); i++) {
let meshData = this.modelData.GetMeshData (i);
@ -147,17 +147,17 @@ OV.Menu = class
meshData.SetVisible (false);
}
}
this.callbacks.updateMeshesVisibility ();
}
this.callbacks.updateMeshesVisibility ();
}
ToggleMeshVisibility (meshIndex)
{
let meshData = this.modelData.GetMeshData (meshIndex);
meshData.SetVisible (!meshData.IsVisible ());
this.callbacks.updateMeshesVisibility ();
}
ToggleMeshVisibility (meshIndex)
{
let meshData = this.modelData.GetMeshData (meshIndex);
meshData.SetVisible (!meshData.IsVisible ());
this.callbacks.updateMeshesVisibility ();
}
GetSelectedMeshIndex ()
GetSelectedMeshIndex ()
{
if (this.tempSelectedMeshIndex !== null) {
return this.tempSelectedMeshIndex;
@ -212,9 +212,9 @@ OV.Menu = class
}
FitMeshToWindow (meshIndex)
{
this.callbacks.fitMeshToWindow (meshIndex);
}
{
this.callbacks.fitMeshToWindow (meshIndex);
}
UpdateInfoPanel ()
{

View File

@ -45,15 +45,15 @@ OV.TreeViewItem = class
this.nameElement = null;
}
GetName ()
{
return this.name;
}
SetName (name)
{
this.name = name;
}
GetName ()
{
return this.name;
}
SetName (name)
{
this.name = name;
}
CreateMainElement (parentDiv)
{
@ -155,15 +155,15 @@ OV.TreeViewGroupItem = class extends OV.TreeViewItem
this.openCloseHandler = null;
}
GetName ()
{
return this.name;
}
SetName (name)
{
this.name = name;
}
GetName ()
{
return this.name;
}
SetName (name)
{
this.name = name;
}
SetAnimated (animated)
{

View File

@ -102,12 +102,12 @@ OV.CopyToClipboard = function (text)
OV.CreateIconButton = function (iconName, hoverIconName, title, link)
{
let buttonLink = $('<a>');
buttonLink.attr ('href', link);
buttonLink.attr ('target', '_blank');
let buttonLink = $('<a>');
buttonLink.attr ('href', link);
buttonLink.attr ('target', '_blank');
buttonLink.attr ('rel', 'noopener noreferrer');
OV.InstallTooltip (buttonLink, title);
let imgElem = $('<img>').attr ('src', iconName).appendTo (buttonLink);
let imgElem = $('<img>').attr ('src', iconName).appendTo (buttonLink);
if (hoverIconName !== null && OV.IsHoverEnabled ()) {
buttonLink.hover (
function () {
@ -118,7 +118,7 @@ OV.CreateIconButton = function (iconName, hoverIconName, title, link)
}
);
}
return buttonLink;
return buttonLink;
};
OV.CreateHashParameters = function (urls, camera)

View File

@ -1,448 +1,448 @@
OV.Website = class
{
constructor (parameters)
{
this.parameters = parameters;
this.viewer = new OV.Viewer ();
this.hashHandler = new OV.HashHandler ();
this.toolbar = new OV.Toolbar (this.parameters.toolbarDiv);
this.menu = new OV.Menu (this.parameters.menuDiv);
this.modelLoader = new OV.ThreeModelLoader ();
this.highlightMaterial = new THREE.MeshPhongMaterial ({
color : 0x8ec9f0,
side : THREE.DoubleSide
});
this.model = null;
this.dialog = null;
}
constructor (parameters)
{
this.parameters = parameters;
this.viewer = new OV.Viewer ();
this.hashHandler = new OV.HashHandler ();
this.toolbar = new OV.Toolbar (this.parameters.toolbarDiv);
this.menu = new OV.Menu (this.parameters.menuDiv);
this.modelLoader = new OV.ThreeModelLoader ();
this.highlightMaterial = new THREE.MeshPhongMaterial ({
color : 0x8ec9f0,
side : THREE.DoubleSide
});
this.model = null;
this.dialog = null;
}
Load ()
{
let canvas = $('<canvas>').appendTo (this.parameters.viewerDiv);
this.viewer.Init (canvas.get (0));
this.ShowViewer (false);
this.hashHandler.SetEventListener (this.OnHashChange.bind (this));
Load ()
{
let canvas = $('<canvas>').appendTo (this.parameters.viewerDiv);
this.viewer.Init (canvas.get (0));
this.ShowViewer (false);
this.hashHandler.SetEventListener (this.OnHashChange.bind (this));
this.InitToolbar ();
this.InitDragAndDrop ();
this.InitModelLoader ();
this.InitMenu ();
this.InitToolbar ();
this.InitDragAndDrop ();
this.InitModelLoader ();
this.InitMenu ();
this.viewer.SetClickHandler (this.OnModelClicked.bind (this));
this.Resize ();
this.viewer.SetClickHandler (this.OnModelClicked.bind (this));
this.Resize ();
this.OnHashChange ();
}
this.OnHashChange ();
}
Resize ()
{
let windowWidth = $(window).outerWidth ();
let windowHeight = $(window).outerHeight ();
let headerHeight = parseInt (this.parameters.headerDiv.outerHeight (true), 10);
Resize ()
{
let windowWidth = $(window).outerWidth ();
let windowHeight = $(window).outerHeight ();
let headerHeight = parseInt (this.parameters.headerDiv.outerHeight (true), 10);
let menuWidth = 0;
let safetyMargin = 0;
if (!OV.IsSmallWidth ()) {
menuWidth = parseInt (this.parameters.menuDiv.outerWidth (true), 10);
safetyMargin = 1;
}
let contentWidth = windowWidth - menuWidth - safetyMargin;
let contentHeight = windowHeight - headerHeight - safetyMargin;
this.parameters.menuDiv.outerHeight (contentHeight, true);
this.parameters.introDiv.outerHeight (contentHeight, true);
let menuWidth = 0;
let safetyMargin = 0;
if (!OV.IsSmallWidth ()) {
menuWidth = parseInt (this.parameters.menuDiv.outerWidth (true), 10);
safetyMargin = 1;
}
let contentWidth = windowWidth - menuWidth - safetyMargin;
let contentHeight = windowHeight - headerHeight - safetyMargin;
this.parameters.menuDiv.outerHeight (contentHeight, true);
this.parameters.introDiv.outerHeight (contentHeight, true);
this.menu.Resize ();
this.viewer.Resize (contentWidth, contentHeight);
}
this.menu.Resize ();
this.viewer.Resize (contentWidth, contentHeight);
}
ShowViewer (show)
{
if (show) {
this.parameters.mainDiv.show ();
} else {
this.parameters.mainDiv.hide ();
}
}
ShowViewer (show)
{
if (show) {
this.parameters.mainDiv.show ();
} else {
this.parameters.mainDiv.hide ();
}
}
ClearModel ()
{
if (this.dialog !== null) {
ClearModel ()
{
if (this.dialog !== null) {
this.dialog.Hide ();
this.dialog = null;
}
this.model = null;
this.parameters.introDiv.hide ();
this.ShowViewer (false);
this.viewer.Clear ();
this.menu.Clear ();
}
OnModelFinished (importResult, threeMeshes)
{
this.model = importResult.model;
this.ShowViewer (true);
this.viewer.AddMeshes (threeMeshes);
this.viewer.SetUpVector (importResult.upVector, false);
this.menu.FillTree (importResult);
this.FitModelToWindow (true);
}
}
this.model = null;
this.parameters.introDiv.hide ();
this.ShowViewer (false);
this.viewer.Clear ();
this.menu.Clear ();
}
OnModelFinished (importResult, threeMeshes)
{
this.model = importResult.model;
this.ShowViewer (true);
this.viewer.AddMeshes (threeMeshes);
this.viewer.SetUpVector (importResult.upVector, false);
this.menu.FillTree (importResult);
this.FitModelToWindow (true);
}
OnModelClicked (button, isCtrlPressed, mouseCoordinates)
{
if (button === 1) {
let meshUserData = this.viewer.GetMeshUnderMouse (mouseCoordinates);
if (meshUserData === null) {
this.menu.SetSelection (null);
} else {
if (isCtrlPressed) {
this.menu.IsolateMesh (meshUserData.originalMeshIndex);
} else {
this.menu.SetSelection (new OV.Selection (OV.SelectionType.Mesh, meshUserData.originalMeshIndex));
}
}
}
}
OnModelClicked (button, isCtrlPressed, mouseCoordinates)
{
if (button === 1) {
let meshUserData = this.viewer.GetMeshUnderMouse (mouseCoordinates);
if (meshUserData === null) {
this.menu.SetSelection (null);
} else {
if (isCtrlPressed) {
this.menu.IsolateMesh (meshUserData.originalMeshIndex);
} else {
this.menu.SetSelection (new OV.Selection (OV.SelectionType.Mesh, meshUserData.originalMeshIndex));
}
}
}
}
OpenFileBrowserDialog ()
{
this.parameters.fileInput.trigger ('click');
}
OpenFileBrowserDialog ()
{
this.parameters.fileInput.trigger ('click');
}
FitModelToWindow (onLoad)
{
let obj = this;
let animation = !onLoad;
let boundingSphere = this.viewer.GetBoundingSphere (function (meshUserData) {
return obj.menu.IsMeshVisible (meshUserData.originalMeshIndex);
});
if (onLoad) {
this.viewer.AdjustClippingPlanes (boundingSphere);
}
this.viewer.FitToWindow (boundingSphere, animation);
}
FitModelToWindow (onLoad)
{
let obj = this;
let animation = !onLoad;
let boundingSphere = this.viewer.GetBoundingSphere (function (meshUserData) {
return obj.menu.IsMeshVisible (meshUserData.originalMeshIndex);
});
if (onLoad) {
this.viewer.AdjustClippingPlanes (boundingSphere);
}
this.viewer.FitToWindow (boundingSphere, animation);
}
FitMeshToWindow (meshIndex)
{
let boundingSphere = this.viewer.GetBoundingSphere (function (meshUserData) {
return meshUserData.originalMeshIndex === meshIndex;
});
this.viewer.FitToWindow (boundingSphere, true);
}
FitMeshToWindow (meshIndex)
{
let boundingSphere = this.viewer.GetBoundingSphere (function (meshUserData) {
return meshUserData.originalMeshIndex === meshIndex;
});
this.viewer.FitToWindow (boundingSphere, true);
}
UpdateMeshesVisibility ()
{
let obj = this;
this.viewer.SetMeshesVisibility (function (meshUserData) {
return obj.menu.IsMeshVisible (meshUserData.originalMeshIndex);
});
}
UpdateMeshesVisibility ()
{
let obj = this;
this.viewer.SetMeshesVisibility (function (meshUserData) {
return obj.menu.IsMeshVisible (meshUserData.originalMeshIndex);
});
}
UpdateMeshesSelection ()
{
let selectedMeshIndex = this.menu.GetSelectedMeshIndex ();
this.viewer.SetMeshesHighlight (this.highlightMaterial, function (meshUserData) {
if (meshUserData.originalMeshIndex === selectedMeshIndex) {
return true;
}
return false;
});
}
UpdateMeshesSelection ()
{
let selectedMeshIndex = this.menu.GetSelectedMeshIndex ();
this.viewer.SetMeshesHighlight (this.highlightMaterial, function (meshUserData) {
if (meshUserData.originalMeshIndex === selectedMeshIndex) {
return true;
}
return false;
});
}
LoadModelFromUrlList (urls)
{
this.modelLoader.LoadFromUrlList (urls);
this.ClearHashIfNotOnlyUrlList ();
}
LoadModelFromUrlList (urls)
{
this.modelLoader.LoadFromUrlList (urls);
this.ClearHashIfNotOnlyUrlList ();
}
LoadModelFromFileList (files)
{
if (files.length === 0) {
return;
}
this.modelLoader.LoadFromFileList (files);
this.ClearHashIfNotOnlyUrlList ();
}
LoadModelFromFileList (files)
{
if (files.length === 0) {
return;
}
this.modelLoader.LoadFromFileList (files);
this.ClearHashIfNotOnlyUrlList ();
}
ClearHashIfNotOnlyUrlList ()
{
let importer = this.modelLoader.GetImporter ();
let isOnlyUrl = importer.IsOnlyFileSource (OV.FileSource.Url);
if (!isOnlyUrl && this.hashHandler.HasHash ()) {
this.hashHandler.SkipNextEventHandler ();
this.hashHandler.ClearHash ();
}
}
ClearHashIfNotOnlyUrlList ()
{
let importer = this.modelLoader.GetImporter ();
let isOnlyUrl = importer.IsOnlyFileSource (OV.FileSource.Url);
if (!isOnlyUrl && this.hashHandler.HasHash ()) {
this.hashHandler.SkipNextEventHandler ();
this.hashHandler.ClearHash ();
}
}
OnHashChange ()
{
if (this.hashHandler.HasHash ()) {
let urls = this.hashHandler.GetModelFilesFromHash ();
if (urls === null) {
return;
}
let camera = this.hashHandler.GetCameraFromHash ();
if (camera !== null) {
this.viewer.SetCamera (camera);
}
this.LoadModelFromUrlList (urls);
} else {
this.ClearModel ();
this.parameters.introDiv.show ();
}
}
OnHashChange ()
{
if (this.hashHandler.HasHash ()) {
let urls = this.hashHandler.GetModelFilesFromHash ();
if (urls === null) {
return;
}
let camera = this.hashHandler.GetCameraFromHash ();
if (camera !== null) {
this.viewer.SetCamera (camera);
}
this.LoadModelFromUrlList (urls);
} else {
this.ClearModel ();
this.parameters.introDiv.show ();
}
}
InitToolbar ()
{
function AddButton (toolbar, imageName, imageTitle, onlyFullWidth, onClick)
{
let image = 'assets/images/toolbar/' + imageName + '.svg';
let button = toolbar.AddImageButton (image, imageTitle, onClick);
if (onlyFullWidth) {
button.AddClass ('only_full_width');
}
}
InitToolbar ()
{
function AddButton (toolbar, imageName, imageTitle, onlyFullWidth, onClick)
{
let image = 'assets/images/toolbar/' + imageName + '.svg';
let button = toolbar.AddImageButton (image, imageTitle, onClick);
if (onlyFullWidth) {
button.AddClass ('only_full_width');
}
}
function AddRadioButton (toolbar, imageNames, imageTitles, selectedIndex, onlyFullWidth, onClick)
{
let imageData = [];
for (let i = 0; i < imageNames.length; i++) {
let imageName = imageNames[i];
let imageTitle = imageTitles[i];
imageData.push ({
image : 'assets/images/toolbar/' + imageName + '.svg',
title : imageTitle
});
}
let buttons = toolbar.AddImageRadioButton (imageData, selectedIndex, onClick);
if (onlyFullWidth) {
for (let i = 0; i < buttons.length; i++) {
let button = buttons[i];
button.AddClass ('only_full_width');
}
}
}
function AddRadioButton (toolbar, imageNames, imageTitles, selectedIndex, onlyFullWidth, onClick)
{
let imageData = [];
for (let i = 0; i < imageNames.length; i++) {
let imageName = imageNames[i];
let imageTitle = imageTitles[i];
imageData.push ({
image : 'assets/images/toolbar/' + imageName + '.svg',
title : imageTitle
});
}
let buttons = toolbar.AddImageRadioButton (imageData, selectedIndex, onClick);
if (onlyFullWidth) {
for (let i = 0; i < buttons.length; i++) {
let button = buttons[i];
button.AddClass ('only_full_width');
}
}
}
function AddSeparator (toolbar, onlyFullWidth)
{
let separator = toolbar.AddSeparator ();
if (onlyFullWidth) {
separator.addClass ('only_full_width');
}
}
function AddSeparator (toolbar, onlyFullWidth)
{
let separator = toolbar.AddSeparator ();
if (onlyFullWidth) {
separator.addClass ('only_full_width');
}
}
let obj = this;
AddButton (this.toolbar, 'open', 'Open model from your device', false, function () {
obj.OpenFileBrowserDialog ();
});
AddButton (this.toolbar, 'open_url', 'Open model from a url', false, function () {
obj.dialog = OV.ShowOpenUrlDialog (function (urls) {
if (urls.length > 0) {
obj.hashHandler.SetModelFilesToHash (urls);
}
});
});
AddSeparator (this.toolbar);
AddButton (this.toolbar, 'fit', 'Fit model to Window', false, function () {
obj.FitModelToWindow (false);
});
AddButton (this.toolbar, 'up_y', 'Set Y axis as up vector', false, function () {
obj.viewer.SetUpVector (OV.Direction.Y, true);
});
AddButton (this.toolbar, 'up_z', 'Set Z axis as up vector', false, function () {
obj.viewer.SetUpVector (OV.Direction.Z, true);
});
AddButton (this.toolbar, 'flip', 'Flip up vector', false, function () {
obj.viewer.FlipUpVector ();
});
AddSeparator (this.toolbar);
AddRadioButton (this.toolbar, ['fix_up_on', 'fix_up_off'], ['Fixed up vector', 'Free orbit'], 0, false, function (buttonIndex) {
if (buttonIndex === 0) {
obj.viewer.SetFixUpVector (true);
} else if (buttonIndex === 1) {
obj.viewer.SetFixUpVector (false);
}
});
AddSeparator (this.toolbar, true);
AddButton (this.toolbar, 'export', 'Export model', true, function () {
obj.dialog = OV.ShowExportDialog (obj.model);
});
AddButton (this.toolbar, 'embed', 'Get embedding code', true, function () {
obj.dialog = OV.ShowEmbeddingDialog (obj.modelLoader.GetImporter (), obj.viewer.GetCamera ());
});
let obj = this;
AddButton (this.toolbar, 'open', 'Open model from your device', false, function () {
obj.OpenFileBrowserDialog ();
});
AddButton (this.toolbar, 'open_url', 'Open model from a url', false, function () {
obj.dialog = OV.ShowOpenUrlDialog (function (urls) {
if (urls.length > 0) {
obj.hashHandler.SetModelFilesToHash (urls);
}
});
});
AddSeparator (this.toolbar);
AddButton (this.toolbar, 'fit', 'Fit model to Window', false, function () {
obj.FitModelToWindow (false);
});
AddButton (this.toolbar, 'up_y', 'Set Y axis as up vector', false, function () {
obj.viewer.SetUpVector (OV.Direction.Y, true);
});
AddButton (this.toolbar, 'up_z', 'Set Z axis as up vector', false, function () {
obj.viewer.SetUpVector (OV.Direction.Z, true);
});
AddButton (this.toolbar, 'flip', 'Flip up vector', false, function () {
obj.viewer.FlipUpVector ();
});
AddSeparator (this.toolbar);
AddRadioButton (this.toolbar, ['fix_up_on', 'fix_up_off'], ['Fixed up vector', 'Free orbit'], 0, false, function (buttonIndex) {
if (buttonIndex === 0) {
obj.viewer.SetFixUpVector (true);
} else if (buttonIndex === 1) {
obj.viewer.SetFixUpVector (false);
}
});
AddSeparator (this.toolbar, true);
AddButton (this.toolbar, 'export', 'Export model', true, function () {
obj.dialog = OV.ShowExportDialog (obj.model);
});
AddButton (this.toolbar, 'embed', 'Get embedding code', true, function () {
obj.dialog = OV.ShowEmbeddingDialog (obj.modelLoader.GetImporter (), obj.viewer.GetCamera ());
});
this.parameters.fileInput.on ('change', function (ev) {
obj.LoadModelFromFileList (ev.target.files);
});
}
this.parameters.fileInput.on ('change', function (ev) {
obj.LoadModelFromFileList (ev.target.files);
});
}
InitDragAndDrop ()
{
window.addEventListener ('dragstart', function (ev) {
ev.preventDefault ();
}, false);
InitDragAndDrop ()
{
window.addEventListener ('dragstart', function (ev) {
ev.preventDefault ();
}, false);
window.addEventListener ('dragover', function (ev) {
ev.stopPropagation ();
ev.preventDefault ();
ev.dataTransfer.dropEffect = 'copy';
}, false);
window.addEventListener ('dragover', function (ev) {
ev.stopPropagation ();
ev.preventDefault ();
ev.dataTransfer.dropEffect = 'copy';
}, false);
let obj = this;
window.addEventListener ('drop', function (ev) {
ev.stopPropagation ();
ev.preventDefault ();
obj.LoadModelFromFileList (ev.dataTransfer.files);
}, false);
}
let obj = this;
window.addEventListener ('drop', function (ev) {
ev.stopPropagation ();
ev.preventDefault ();
obj.LoadModelFromFileList (ev.dataTransfer.files);
}, false);
}
InitModelLoader ()
{
let obj = this;
OV.InitModelLoader (this.modelLoader, {
onStart : function ()
{
obj.ClearModel ();
},
onFinish : function (importResult, threeMeshes)
{
obj.OnModelFinished (importResult, threeMeshes);
},
onRender : function ()
{
obj.viewer.Render ();
}
});
}
InitModelLoader ()
{
let obj = this;
OV.InitModelLoader (this.modelLoader, {
onStart : function ()
{
obj.ClearModel ();
},
onFinish : function (importResult, threeMeshes)
{
obj.OnModelFinished (importResult, threeMeshes);
},
onRender : function ()
{
obj.viewer.Render ();
}
});
}
InitMenu ()
{
function GetMeshUserData (viewer, meshIndex)
{
let userData = null;
viewer.EnumerateMeshesUserData (function (meshUserData) {
if (meshUserData.originalMeshIndex === meshIndex) {
userData = meshUserData;
}
});
return userData;
}
InitMenu ()
{
function GetMeshUserData (viewer, meshIndex)
{
let userData = null;
viewer.EnumerateMeshesUserData (function (meshUserData) {
if (meshUserData.originalMeshIndex === meshIndex) {
userData = meshUserData;
}
});
return userData;
}
function GetBoundingBoxInfo (boundingBox)
{
if (boundingBox === null) {
return null;
}
return {
min : new OV.Coord3D (boundingBox.min.x, boundingBox.min.y, boundingBox.min.z),
max : new OV.Coord3D (boundingBox.max.x, boundingBox.max.y, boundingBox.max.z)
};
}
function GetBoundingBoxInfo (boundingBox)
{
if (boundingBox === null) {
return null;
}
return {
min : new OV.Coord3D (boundingBox.min.x, boundingBox.min.y, boundingBox.min.z),
max : new OV.Coord3D (boundingBox.max.x, boundingBox.max.y, boundingBox.max.z)
};
}
function GetMaterialInfo (viewer, model, materialIndex)
{
function AddTexture (textureNames, type, texture)
{
if (texture === null) {
return;
}
textureNames.push ({
type : type,
name : OV.GetFileName (texture.name),
path : texture.name
});
}
function GetMaterialInfo (viewer, model, materialIndex)
{
function AddTexture (textureNames, type, texture)
{
if (texture === null) {
return;
}
textureNames.push ({
type : type,
name : OV.GetFileName (texture.name),
path : texture.name
});
}
let material = model.GetMaterial (materialIndex);
let material = model.GetMaterial (materialIndex);
let materialInfo = {
name : material.name,
ambient : material.ambient.Clone (),
diffuse : material.diffuse.Clone (),
specular : material.specular.Clone (),
opacity : material.opacity,
textureNames : [],
usedByMeshes : []
textureNames : [],
usedByMeshes : []
};
AddTexture (materialInfo.textureNames, 'Base', material.diffuseMap);
AddTexture (materialInfo.textureNames, 'Specular', material.specularMap);
AddTexture (materialInfo.textureNames, 'Bump', material.bumpMap);
AddTexture (materialInfo.textureNames, 'Normal', material.normalMap);
AddTexture (materialInfo.textureNames, 'Emissive', material.emissiveMap);
AddTexture (materialInfo.textureNames, 'Base', material.diffuseMap);
AddTexture (materialInfo.textureNames, 'Specular', material.specularMap);
AddTexture (materialInfo.textureNames, 'Bump', material.bumpMap);
AddTexture (materialInfo.textureNames, 'Normal', material.normalMap);
AddTexture (materialInfo.textureNames, 'Emissive', material.emissiveMap);
viewer.EnumerateMeshesUserData (function (meshUserData) {
if (meshUserData.originalMaterials.indexOf (materialIndex) !== -1) {
materialInfo.usedByMeshes.push (meshUserData.originalMeshIndex);
}
});
return materialInfo;
}
viewer.EnumerateMeshesUserData (function (meshUserData) {
if (meshUserData.originalMaterials.indexOf (materialIndex) !== -1) {
materialInfo.usedByMeshes.push (meshUserData.originalMeshIndex);
}
});
return materialInfo;
}
function GetMeshInfo (viewer, model, meshIndex)
{
let result = {
name : null,
vertexCount : null,
triangleCount : null,
usedMaterials : null,
boundingBox : null
};
let mesh = model.GetMesh (meshIndex);
result.name = mesh.GetName ();
result.vertexCount = mesh.VertexCount ();
result.triangleCount = mesh.TriangleCount ();
function GetMeshInfo (viewer, model, meshIndex)
{
let result = {
name : null,
vertexCount : null,
triangleCount : null,
usedMaterials : null,
boundingBox : null
};
let mesh = model.GetMesh (meshIndex);
result.name = mesh.GetName ();
result.vertexCount = mesh.VertexCount ();
result.triangleCount = mesh.TriangleCount ();
let userData = GetMeshUserData (viewer, meshIndex);
result.usedMaterials = userData.originalMaterials;
result.usedMaterials.sort ();
let userData = GetMeshUserData (viewer, meshIndex);
result.usedMaterials = userData.originalMaterials;
result.usedMaterials.sort ();
let boundingBox = viewer.GetBoundingBox (function (meshUserData) {
return meshUserData.originalMeshIndex === meshIndex;
});
result.boundingBox = GetBoundingBoxInfo (boundingBox);
return result;
}
function GetModelInfo (model, viewer)
{
let result = {
name : null,
vertexCount : model.VertexCount (),
triangleCount : model.TriangleCount (),
usedMaterials : null,
boundingBox : null
};
let boundingBox = viewer.GetBoundingBox (function (meshUserData) {
return true;
});
result.boundingBox = GetBoundingBoxInfo (boundingBox);
return result;
}
let boundingBox = viewer.GetBoundingBox (function (meshUserData) {
return meshUserData.originalMeshIndex === meshIndex;
});
result.boundingBox = GetBoundingBoxInfo (boundingBox);
return result;
}
function GetModelInfo (model, viewer)
{
let result = {
name : null,
vertexCount : model.VertexCount (),
triangleCount : model.TriangleCount (),
usedMaterials : null,
boundingBox : null
};
let boundingBox = viewer.GetBoundingBox (function (meshUserData) {
return true;
});
result.boundingBox = GetBoundingBoxInfo (boundingBox);
return result;
}
let obj = this;
this.menu.Init ({
openFileBrowserDialog : function () {
obj.OpenFileBrowserDialog ();
},
updateMeshesVisibility : function () {
obj.UpdateMeshesVisibility ();
},
updateMeshesSelection : function () {
obj.UpdateMeshesSelection ();
},
fitMeshToWindow : function (meshIndex) {
obj.FitMeshToWindow (meshIndex);
},
getMaterialInformation : function (materialIndex) {
return GetMaterialInfo (obj.viewer, obj.model, materialIndex);
},
getMeshInformation : function (meshIndex) {
return GetMeshInfo (obj.viewer, obj.model, meshIndex);
},
getModelInformation : function () {
return GetModelInfo (obj.model, obj.viewer);
}
});
}
let obj = this;
this.menu.Init ({
openFileBrowserDialog : function () {
obj.OpenFileBrowserDialog ();
},
updateMeshesVisibility : function () {
obj.UpdateMeshesVisibility ();
},
updateMeshesSelection : function () {
obj.UpdateMeshesSelection ();
},
fitMeshToWindow : function (meshIndex) {
obj.FitMeshToWindow (meshIndex);
},
getMaterialInformation : function (materialIndex) {
return GetMaterialInfo (obj.viewer, obj.model, materialIndex);
},
getMeshInformation : function (meshIndex) {
return GetMeshInfo (obj.viewer, obj.model, meshIndex);
},
getModelInformation : function () {
return GetModelInfo (obj.model, obj.viewer);
}
});
}
};