Add mesh enumeration function to model.
This commit is contained in:
parent
4ebcddc040
commit
bb9724578d
@ -59,8 +59,7 @@ OV.ExporterObj = class extends OV.ExporterBase
|
|||||||
let normalOffset = 0;
|
let normalOffset = 0;
|
||||||
let uvOffset = 0;
|
let uvOffset = 0;
|
||||||
let usedMaterialName = null;
|
let usedMaterialName = null;
|
||||||
for (let meshIndex = 0; meshIndex < model.MeshCount (); meshIndex++) {
|
model.EnumerateMeshes ((mesh) => {
|
||||||
let mesh = model.GetMesh (meshIndex);
|
|
||||||
objWriter.WriteArrayLine (['g', this.GetExportedMeshName (mesh.GetName ())]);
|
objWriter.WriteArrayLine (['g', this.GetExportedMeshName (mesh.GetName ())]);
|
||||||
for (let vertexIndex = 0; vertexIndex < mesh.VertexCount (); vertexIndex++) {
|
for (let vertexIndex = 0; vertexIndex < mesh.VertexCount (); vertexIndex++) {
|
||||||
let vertex = mesh.GetVertex (vertexIndex);
|
let vertex = mesh.GetVertex (vertexIndex);
|
||||||
@ -103,7 +102,7 @@ OV.ExporterObj = class extends OV.ExporterBase
|
|||||||
vertexOffset += mesh.VertexCount ();
|
vertexOffset += mesh.VertexCount ();
|
||||||
normalOffset += mesh.NormalCount ();
|
normalOffset += mesh.NormalCount ();
|
||||||
uvOffset += mesh.TextureUVCount ();
|
uvOffset += mesh.TextureUVCount ();
|
||||||
}
|
});
|
||||||
|
|
||||||
objFile.SetTextContent (objWriter.GetText ());
|
objFile.SetTextContent (objWriter.GetText ());
|
||||||
onFinish ();
|
onFinish ();
|
||||||
|
|||||||
@ -60,5 +60,10 @@ OV.Element = class
|
|||||||
EnumerateTriangles (onTriangle)
|
EnumerateTriangles (onTriangle)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EnumerateTriangleVertices (onTriangleVertices)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -90,20 +90,25 @@ OV.Mesh = class extends OV.Element
|
|||||||
|
|
||||||
EnumerateVertices (onVertex)
|
EnumerateVertices (onVertex)
|
||||||
{
|
{
|
||||||
for (let vertexIndex = 0; vertexIndex < this.vertices.length; vertexIndex++) {
|
for (const vertex of this.vertices) {
|
||||||
let vertex = this.vertices[vertexIndex];
|
|
||||||
onVertex (vertex);
|
onVertex (vertex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EnumerateTriangles (onTriangle)
|
EnumerateTriangles (onTriangle)
|
||||||
{
|
{
|
||||||
for (let triangleIndex = 0; triangleIndex < this.triangles.length; triangleIndex++) {
|
for (const triangle of this.triangles) {
|
||||||
let triangle = this.triangles[triangleIndex];
|
onTriangle (triangle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
EnumerateTriangleVertices (onTriangleVertices)
|
||||||
|
{
|
||||||
|
for (const triangle of this.triangles) {
|
||||||
let v0 = this.vertices[triangle.v0];
|
let v0 = this.vertices[triangle.v0];
|
||||||
let v1 = this.vertices[triangle.v1];
|
let v1 = this.vertices[triangle.v1];
|
||||||
let v2 = this.vertices[triangle.v2];
|
let v2 = this.vertices[triangle.v2];
|
||||||
onTriangle (v0, v1, v2);
|
onTriangleVertices (v0, v1, v2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -85,20 +85,32 @@ OV.Model = class extends OV.Element
|
|||||||
{
|
{
|
||||||
return this.meshes[index];
|
return this.meshes[index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EnumerateMeshes (onMesh)
|
||||||
|
{
|
||||||
|
for (const mesh of this.meshes) {
|
||||||
|
onMesh (mesh);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
EnumerateVertices (onVertex)
|
EnumerateVertices (onVertex)
|
||||||
{
|
{
|
||||||
for (let meshIndex = 0; meshIndex < this.meshes.length; meshIndex++) {
|
for (const mesh of this.meshes) {
|
||||||
let mesh = this.meshes[meshIndex];
|
|
||||||
mesh.EnumerateVertices (onVertex);
|
mesh.EnumerateVertices (onVertex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EnumerateTriangles (onTriangle)
|
EnumerateTriangles (onTriangle)
|
||||||
{
|
{
|
||||||
for (let meshIndex = 0; meshIndex < this.meshes.length; meshIndex++) {
|
for (const mesh of this.meshes) {
|
||||||
let mesh = this.meshes[meshIndex];
|
|
||||||
mesh.EnumerateTriangles (onTriangle);
|
mesh.EnumerateTriangles (onTriangle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EnumerateTriangleVertices (onTriangleVertices)
|
||||||
|
{
|
||||||
|
for (const mesh of this.meshes) {
|
||||||
|
mesh.EnumerateTriangleVertices (onTriangleVertices);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@ -150,27 +150,24 @@ OV.CreateMergedModel = function (model)
|
|||||||
|
|
||||||
OV.EnumerateModelVerticesAndTriangles = function (model, callbacks)
|
OV.EnumerateModelVerticesAndTriangles = function (model, callbacks)
|
||||||
{
|
{
|
||||||
for (let meshIndex = 0; meshIndex < model.MeshCount (); meshIndex++) {
|
model.EnumerateMeshes ((mesh) => {
|
||||||
let mesh = model.GetMesh (meshIndex);
|
|
||||||
for (let vertexIndex = 0; vertexIndex < mesh.VertexCount (); vertexIndex++) {
|
for (let vertexIndex = 0; vertexIndex < mesh.VertexCount (); vertexIndex++) {
|
||||||
let vertex = mesh.GetVertex (vertexIndex);
|
let vertex = mesh.GetVertex (vertexIndex);
|
||||||
callbacks.onVertex (vertex.x, vertex.y, vertex.z);
|
callbacks.onVertex (vertex.x, vertex.y, vertex.z);
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
let vertexOffset = 0;
|
let vertexOffset = 0;
|
||||||
for (let meshIndex = 0; meshIndex < model.MeshCount (); meshIndex++) {
|
model.EnumerateMeshes ((mesh) => {
|
||||||
let mesh = model.GetMesh (meshIndex);
|
mesh.EnumerateTriangles ((triangle) => {
|
||||||
for (let triangleIndex = 0; triangleIndex < mesh.TriangleCount (); triangleIndex++) {
|
|
||||||
let triangle = mesh.GetTriangle (triangleIndex);
|
|
||||||
callbacks.onTriangle (triangle.v0 + vertexOffset, triangle.v1 + vertexOffset, triangle.v2 + vertexOffset);
|
callbacks.onTriangle (triangle.v0 + vertexOffset, triangle.v1 + vertexOffset, triangle.v2 + vertexOffset);
|
||||||
}
|
});
|
||||||
vertexOffset += mesh.VertexCount ();
|
vertexOffset += mesh.VertexCount ();
|
||||||
}
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
OV.EnumerateTrianglesWithNormals = function (element, onTriangle)
|
OV.EnumerateTrianglesWithNormals = function (element, onTriangle)
|
||||||
{
|
{
|
||||||
element.EnumerateTriangles ((v0, v1, v2) => {
|
element.EnumerateTriangleVertices ((v0, v1, v2) => {
|
||||||
let normal = OV.CalculateTriangleNormal (v0, v1, v2);
|
let normal = OV.CalculateTriangleNormal (v0, v1, v2);
|
||||||
onTriangle (v0, v1, v2, normal);
|
onTriangle (v0, v1, v2, normal);
|
||||||
});
|
});
|
||||||
@ -201,7 +198,7 @@ OV.GetTopology = function (element)
|
|||||||
let octree = new OV.Octree (boundingBox);
|
let octree = new OV.Octree (boundingBox);
|
||||||
let topology = new OV.Topology ();
|
let topology = new OV.Topology ();
|
||||||
|
|
||||||
element.EnumerateTriangles ((v0, v1, v2) => {
|
element.EnumerateTriangleVertices ((v0, v1, v2) => {
|
||||||
let v0Index = GetVertexIndex (v0, octree, topology);
|
let v0Index = GetVertexIndex (v0, octree, topology);
|
||||||
let v1Index = GetVertexIndex (v1, octree, topology);
|
let v1Index = GetVertexIndex (v1, octree, topology);
|
||||||
let v2Index = GetVertexIndex (v2, octree, topology);
|
let v2Index = GetVertexIndex (v2, octree, topology);
|
||||||
|
|||||||
@ -22,7 +22,7 @@ OV.CalculateVolume = function (element)
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
let volume = 0.0;
|
let volume = 0.0;
|
||||||
element.EnumerateTriangles ((v0, v1, v2) => {
|
element.EnumerateTriangleVertices ((v0, v1, v2) => {
|
||||||
volume += OV.GetTetrahedronSignedVolume (v0, v1, v2);
|
volume += OV.GetTetrahedronSignedVolume (v0, v1, v2);
|
||||||
});
|
});
|
||||||
return volume;
|
return volume;
|
||||||
@ -31,7 +31,7 @@ OV.CalculateVolume = function (element)
|
|||||||
OV.CalculateSurfaceArea = function (element)
|
OV.CalculateSurfaceArea = function (element)
|
||||||
{
|
{
|
||||||
let surface = 0.0;
|
let surface = 0.0;
|
||||||
element.EnumerateTriangles ((v0, v1, v2) => {
|
element.EnumerateTriangleVertices ((v0, v1, v2) => {
|
||||||
surface += OV.GetTriangleArea (v0, v1, v2);
|
surface += OV.GetTriangleArea (v0, v1, v2);
|
||||||
});
|
});
|
||||||
return surface;
|
return surface;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user