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