Remove solidity check from volume calculation.
This commit is contained in:
parent
d5976ec8db
commit
1cf59b750f
@ -18,9 +18,6 @@ OV.GetTetrahedronSignedVolume = function (v0, v1, v2)
|
||||
|
||||
OV.CalculateVolume = function (object3D)
|
||||
{
|
||||
if (!OV.IsSolid (object3D)) {
|
||||
return null;
|
||||
}
|
||||
let volume = 0.0;
|
||||
object3D.EnumerateTriangleVertices ((v0, v1, v2) => {
|
||||
volume += OV.GetTetrahedronSignedVolume (v0, v1, v2);
|
||||
|
||||
@ -111,6 +111,7 @@ describe ('O3dv Importer', function () {
|
||||
assert.strictEqual (model.MeshCount (), 5);
|
||||
assert.strictEqual (model.MeshInstanceCount (), 5);
|
||||
|
||||
assert (OV.IsSolid (model));
|
||||
assert (OV.IsEqual (OV.CalculateVolume (model), 8.707448863695035));
|
||||
assert (OV.IsEqual (OV.CalculateSurfaceArea (model), 39.636169009449105));
|
||||
|
||||
|
||||
@ -5,6 +5,8 @@ describe ('Quantities', function () {
|
||||
it ('Cube Volume Calculation', function () {
|
||||
const mesh = OV.GenerateCuboid (null, 1.0, 1.0, 1.0);
|
||||
const model = testUtils.GetModelWithOneMesh (mesh);
|
||||
assert (OV.IsSolid (mesh));
|
||||
assert (OV.IsSolid (model));
|
||||
assert (OV.IsEqual (OV.CalculateVolume (mesh), 1.0));
|
||||
assert (OV.IsEqual (OV.CalculateVolume (model), 1.0));
|
||||
});
|
||||
@ -12,21 +14,24 @@ describe ('Quantities', function () {
|
||||
it ('Cube with Missing Face Volume Calculation', function () {
|
||||
const mesh = testUtils.GetCubeWithOneMissingFaceMesh ();
|
||||
const model = testUtils.GetModelWithOneMesh (mesh);
|
||||
assert.strictEqual (OV.CalculateVolume (model), null);
|
||||
assert (!OV.IsSolid (model));
|
||||
});
|
||||
|
||||
it ('Two Cubes Connecting in One Vertex Volume Calculation', function () {
|
||||
const model = testUtils.GetTwoCubesConnectingInOneVertexModel ();
|
||||
assert (OV.IsSolid (model));
|
||||
assert (OV.IsEqual (OV.CalculateVolume (model), 2.0));
|
||||
});
|
||||
|
||||
it ('Two Cubes Connecting in One Edge Volume Calculation', function () {
|
||||
const model = testUtils.GetTwoCubesConnectingInOneEdgeModel ();
|
||||
assert (OV.IsSolid (model));
|
||||
assert (OV.IsEqual (OV.CalculateVolume (model), 2.0));
|
||||
});
|
||||
|
||||
it ('Two Cubes Connecting in One Face Volume Calculation', function () {
|
||||
const model = testUtils.GetTwoCubesConnectingInOneFaceModel ();
|
||||
assert (OV.IsSolid (model));
|
||||
assert (OV.IsEqual (OV.CalculateVolume (model), 2.0));
|
||||
});
|
||||
|
||||
@ -53,13 +58,15 @@ describe ('Quantities', function () {
|
||||
mesh.AddTriangle (new OV.Triangle (4, 5, 6));
|
||||
mesh.AddTriangle (new OV.Triangle (4, 7, 6));
|
||||
const model = testUtils.GetModelWithOneMesh (mesh);
|
||||
assert.strictEqual (OV.CalculateVolume (mesh), null);
|
||||
assert.strictEqual (OV.CalculateVolume (model), null);
|
||||
assert (!OV.IsSolid (mesh));
|
||||
assert (!OV.IsSolid (model));
|
||||
});
|
||||
|
||||
it ('Cube Surface Area Calculation', function () {
|
||||
const mesh = OV.GenerateCuboid (null, 1.0, 1.0, 1.0);
|
||||
const model = testUtils.GetModelWithOneMesh (mesh);
|
||||
assert (OV.IsSolid (mesh));
|
||||
assert (OV.IsSolid (model));
|
||||
assert (OV.IsEqual (OV.CalculateSurfaceArea (mesh), 6.0));
|
||||
assert (OV.IsEqual (OV.CalculateSurfaceArea (model), 6.0));
|
||||
});
|
||||
@ -67,6 +74,8 @@ describe ('Quantities', function () {
|
||||
it ('Cube with Missing Face Surface Area Calculation', function () {
|
||||
const mesh = testUtils.GetCubeWithOneMissingFaceMesh ();
|
||||
const model = testUtils.GetModelWithOneMesh (mesh);
|
||||
assert (!OV.IsSolid (mesh));
|
||||
assert (!OV.IsSolid (model));
|
||||
assert (OV.IsEqual (OV.CalculateSurfaceArea (mesh), 5.0));
|
||||
assert (OV.IsEqual (OV.CalculateSurfaceArea (model), 5.0));
|
||||
});
|
||||
@ -75,6 +84,8 @@ describe ('Quantities', function () {
|
||||
const edgeLength = OV.CoordDistance3D (new OV.Coord3D (1.0, 1.0, 1.0), new OV.Coord3D (-1.0, -1.0, 1.0));
|
||||
const mesh = testUtils.GetTetrahedronMesh ();
|
||||
const model = testUtils.GetModelWithOneMesh (mesh);
|
||||
assert (OV.IsSolid (mesh));
|
||||
assert (OV.IsSolid (model));
|
||||
assert (OV.IsEqual (OV.CalculateVolume (mesh), Math.pow (edgeLength, 3.0) / (6.0 * Math.sqrt (2))));
|
||||
assert (OV.IsEqual (OV.CalculateVolume (model), Math.pow (edgeLength, 3.0) / (6.0 * Math.sqrt (2))));
|
||||
});
|
||||
@ -83,6 +94,8 @@ describe ('Quantities', function () {
|
||||
const edgeLength = OV.CoordDistance3D (new OV.Coord3D (1.0, 1.0, 1.0), new OV.Coord3D (-1.0, -1.0, 1.0));
|
||||
const mesh = testUtils.GetTetrahedronMesh ();
|
||||
const model = testUtils.GetModelWithOneMesh (mesh);
|
||||
assert (OV.IsSolid (mesh));
|
||||
assert (OV.IsSolid (model));
|
||||
assert (OV.IsEqual (OV.CalculateSurfaceArea (mesh), Math.sqrt (3) * Math.pow (edgeLength, 2.0)));
|
||||
assert (OV.IsEqual (OV.CalculateSurfaceArea (model), Math.sqrt (3) * Math.pow (edgeLength, 2.0)));
|
||||
});
|
||||
@ -93,6 +106,7 @@ describe ('Quantities', function () {
|
||||
let node = new OV.Node ();
|
||||
node.SetTransformation (transformation);
|
||||
const meshInstance = new OV.MeshInstance (node, mesh);
|
||||
assert (OV.IsSolid (meshInstance));
|
||||
assert (OV.IsEqual (OV.CalculateVolume (meshInstance), 8.0));
|
||||
assert (OV.IsEqual (OV.CalculateSurfaceArea (meshInstance), 24.0));
|
||||
});
|
||||
|
||||
@ -27,6 +27,9 @@ OV.SidebarDetailsPanel = class extends OV.SidebarPanel
|
||||
this.AddProperty (table, new OV.Property (OV.PropertyType.Number, 'Size Y', size.y));
|
||||
this.AddProperty (table, new OV.Property (OV.PropertyType.Number, 'Size Z', size.z));
|
||||
this.AddCalculatedProperty (table, 'Volume', () => {
|
||||
if (!OV.IsSolid (object3D)) {
|
||||
return null;
|
||||
}
|
||||
const volume = OV.CalculateVolume (object3D);
|
||||
if (volume === null) {
|
||||
return null;
|
||||
@ -34,11 +37,11 @@ OV.SidebarDetailsPanel = class extends OV.SidebarPanel
|
||||
return new OV.Property (OV.PropertyType.Number, null, volume);
|
||||
});
|
||||
this.AddCalculatedProperty (table, 'Surface', () => {
|
||||
const volume = OV.CalculateSurfaceArea (object3D);
|
||||
if (volume === null) {
|
||||
const surfaceArea = OV.CalculateSurfaceArea (object3D);
|
||||
if (surfaceArea === null) {
|
||||
return null;
|
||||
}
|
||||
return new OV.Property (OV.PropertyType.Number, null, volume);
|
||||
return new OV.Property (OV.PropertyType.Number, null, surfaceArea);
|
||||
});
|
||||
if (object3D.PropertyGroupCount () > 0) {
|
||||
let customTable = OV.AddDiv (this.contentDiv, 'ov_property_table ov_property_table_custom');
|
||||
|
||||
Loading…
Reference in New Issue
Block a user