From d4b3a2e009e3a5133a0a207c6db4eea1339088bc Mon Sep 17 00:00:00 2001 From: kovacsv Date: Sun, 2 Jan 2022 10:00:13 +0100 Subject: [PATCH] Use set or map instead of pure object. --- source/import/importer3dm.js | 20 ++++++++++---------- source/import/importergltf.js | 10 ++++++---- source/import/importerifc.js | 28 ++++++++++++++++------------ source/import/importerply.js | 14 +++++++------- source/io/externallibs.js | 11 +++++------ source/model/modelfinalization.js | 12 ++++++------ source/model/topology.js | 10 +++++----- 7 files changed, 55 insertions(+), 50 deletions(-) diff --git a/source/import/importer3dm.js b/source/import/importer3dm.js index 029e753..219b441 100644 --- a/source/import/importer3dm.js +++ b/source/import/importer3dm.js @@ -18,14 +18,14 @@ OV.Importer3dm = class extends OV.ImporterBase ClearContent () { - this.instanceObjects = null; - this.instanceDefinitions = null; + this.instanceIdToObject = null; + this.instanceIdToDefinition = null; } ResetContent () { - this.instanceObjects = {}; - this.instanceDefinitions = {}; + this.instanceIdToObject = new Map (); + this.instanceIdToDefinition = new Map (); } ImportContent (fileContent, onFinish) @@ -73,13 +73,13 @@ OV.Importer3dm = class extends OV.ImporterBase let rhinoObject = rhinoObjects.get (i); let rhinoAttributes = rhinoObject.attributes (); if (rhinoAttributes.isInstanceDefinitionObject) { - this.instanceObjects[rhinoAttributes.id] = rhinoObject; + this.instanceIdToObject.set (rhinoAttributes.id, rhinoObject); } } let rhinoInstanceDefinitions = rhinoDoc.instanceDefinitions (); for (let i = 0; i < rhinoInstanceDefinitions.count (); i++) { let rhinoInstanceDefinition = rhinoInstanceDefinitions.get (i); - this.instanceDefinitions[rhinoInstanceDefinition.id] = rhinoInstanceDefinition; + this.instanceIdToDefinition.set (rhinoInstanceDefinition.id, rhinoInstanceDefinition); } } @@ -145,13 +145,13 @@ OV.Importer3dm = class extends OV.ImporterBase deleteMesh = true; } else if (objectType === this.rhino.ObjectType.InstanceReference) { let parentDefinitionId = rhinoGeometry.parentIdefId; - let instanceDefinition = this.instanceDefinitions[parentDefinitionId]; - if (instanceDefinition !== undefined) { + if (this.instanceIdToDefinition.has (parentDefinitionId)) { + let instanceDefinition = this.instanceIdToDefinition.get (parentDefinitionId); let instanceObjectIds = instanceDefinition.getObjectIds (); for (let i = 0; i < instanceObjectIds.length; i++) { let instanceObjectId = instanceObjectIds[i]; - let instanceObject = this.instanceObjects[instanceObjectId]; - if (instanceObject !== undefined) { + if (this.instanceIdToObject.has (instanceObjectId)) { + let instanceObject = this.instanceIdToObject.get (instanceObjectId); rhinoInstanceReferences.push (rhinoObject); this.ImportRhinoGeometryObject (rhinoDoc, instanceObject, rhinoInstanceReferences); rhinoInstanceReferences.pop (); diff --git a/source/import/importergltf.js b/source/import/importergltf.js index ab8774b..f24e4af 100644 --- a/source/import/importergltf.js +++ b/source/import/importergltf.js @@ -490,7 +490,7 @@ OV.ImporterGltf = class extends OV.ImporterBase ResetContent () { this.bufferContents = []; - this.imageIndexToTextureParams = {}; + this.imageIndexToTextureParams = new Map (); } ImportContent (fileContent, onFinish) @@ -725,8 +725,10 @@ OV.ImporterGltf = class extends OV.ImporterBase let gltfImageIndex = gltfTexture.source; let gltfImage = gltf.images[gltfImageIndex]; - let textureParams = this.imageIndexToTextureParams[gltfImageIndex]; - if (textureParams === undefined) { + let textureParams = null; + if (this.imageIndexToTextureParams.has (gltfImageIndex)) { + textureParams = this.imageIndexToTextureParams.get (gltfImageIndex); + } else { textureParams = { name : null, url : null, @@ -757,7 +759,7 @@ OV.ImporterGltf = class extends OV.ImporterBase textureParams.buffer = buffer; } } - this.imageIndexToTextureParams[gltfImageIndex] = textureParams; + this.imageIndexToTextureParams.set (gltfImageIndex, textureParams); } texture.name = textureParams.name; diff --git a/source/import/importerifc.js b/source/import/importerifc.js index 28f1c4a..1c46c7d 100644 --- a/source/import/importerifc.js +++ b/source/import/importerifc.js @@ -24,8 +24,8 @@ OV.ImporterIfc = class extends OV.ImporterBase ResetContent () { - this.materialNameToIndex = {}; - this.expressIDToMesh = {}; + this.materialNameToIndex = new Map (); + this.expressIDToMesh = new Map (); } ImportContent (fileContent, onFinish) @@ -103,7 +103,7 @@ OV.ImporterIfc = class extends OV.ImporterBase vertexOffset += ifcVertices.length / 6; } - this.expressIDToMesh[ifcMesh.expressID] = mesh; + this.expressIDToMesh.set (ifcMesh.expressID, mesh); this.model.AddMeshToRootNode (mesh); } @@ -117,15 +117,18 @@ OV.ImporterIfc = class extends OV.ImporterBase continue; } rel.RelatedObjects.forEach ((objectRelID) => { - let element = this.expressIDToMesh[objectRelID.value]; - if (element === undefined) { + let element = null; + if (this.expressIDToMesh.has (objectRelID.value)) { + element = this.expressIDToMesh.get (objectRelID.value); + } else { let propSetOwner = this.ifc.GetLine (modelID, objectRelID.value, true); if (propSetOwner.type === WebIFC.IFCBUILDING) { element = this.model; - } else { - return; } } + if (element === null) { + return; + } let propSetDef = rel.RelatingPropertyDefinition; let propSet = this.ifc.GetLine (modelID, propSetDef.value, true); if (!propSet || !propSet.HasProperties) { @@ -203,17 +206,18 @@ OV.ImporterIfc = class extends OV.ImporterBase OV.IntegerToHexString (color.b) + OV.IntegerToHexString (parseInt (ifcColor.w * 255.0, 10)); - let materialIndex = this.materialNameToIndex[materialName]; - if (materialIndex === undefined) { + if (this.materialNameToIndex.has (materialName)) { + return this.materialNameToIndex.get (materialName); + } else { let material = new OV.PhongMaterial (); material.name = materialName; material.color = color; material.opacity = ifcColor.w; OV.UpdateMaterialTransparency (material); - materialIndex = this.model.AddMaterial (material); - this.materialNameToIndex[materialName] = materialIndex; + let materialIndex = this.model.AddMaterial (material); + this.materialNameToIndex.set (materialName, materialIndex); + return materialIndex; } - return materialIndex; } GetIFCString (ifcString) diff --git a/source/import/importerply.js b/source/import/importerply.js index f5830aa..2160927 100644 --- a/source/import/importerply.js +++ b/source/import/importerply.js @@ -97,7 +97,7 @@ OV.PlyMaterialHandler = class constructor (model) { this.model = model; - this.colorToMaterial = {}; + this.colorToMaterial = new Map (); } GetMaterialIndexByColor (color) @@ -108,18 +108,18 @@ OV.PlyMaterialHandler = class OV.IntegerToHexString (color[2]) + OV.IntegerToHexString (color[3]); - let materialIndex = this.colorToMaterial[materialName]; - if (materialIndex === undefined) { + if (this.colorToMaterial.has (materialName)) { + return this.colorToMaterial.get (materialName); + } else { let material = new OV.PhongMaterial (); material.name = materialName; material.color = new OV.Color (color[0], color[1], color[2]); material.opacity = color[3] / 255.0; OV.UpdateMaterialTransparency (material); - materialIndex = this.model.AddMaterial (material); - this.colorToMaterial[materialName] = materialIndex; + let materialIndex = this.model.AddMaterial (material); + this.colorToMaterial.set (materialName, materialIndex); + return materialIndex; } - - return materialIndex; } }; diff --git a/source/io/externallibs.js b/source/io/externallibs.js index 9d4dab2..2b76d69 100644 --- a/source/io/externallibs.js +++ b/source/io/externallibs.js @@ -1,6 +1,5 @@ OV.ExternalLibLocation = null; - -OV.LoadedExternalLibs = {}; +OV.LoadedExternalLibs = new Set (); OV.LoadExternalLibrary = function (libName) { @@ -9,17 +8,17 @@ OV.LoadExternalLibrary = function (libName) reject (); return; } - - if (OV.LoadedExternalLibs[libName] !== undefined) { + + if (OV.LoadedExternalLibs.has (libName)) { resolve (); return; } - + let scriptElement = document.createElement ('script'); scriptElement.type = 'text/javascript'; scriptElement.src = OV.ExternalLibLocation + '/' + libName; scriptElement.onload = () => { - OV.LoadedExternalLibs[libName] = true; + OV.LoadedExternalLibs.add (libName); resolve (); }; scriptElement.onerror = () => { diff --git a/source/model/modelfinalization.js b/source/model/modelfinalization.js index 9f885b6..eaf9401 100644 --- a/source/model/modelfinalization.js +++ b/source/model/modelfinalization.js @@ -51,7 +51,7 @@ OV.ModelFinalizer = class } let averageNormals = []; - let neigTriangles = vertexToTriangles[vertexIndex]; + let neigTriangles = vertexToTriangles.get (vertexIndex); for (let i = 0; i < neigTriangles.length; i++) { let neigIndex = neigTriangles[i]; let neigTriangle = mesh.GetTriangle (neigIndex); @@ -73,10 +73,10 @@ OV.ModelFinalizer = class } let triangleNormals = []; - let vertexToTriangles = {}; + let vertexToTriangles = new Map (); for (let vertexIndex = 0; vertexIndex < mesh.VertexCount (); vertexIndex++) { - vertexToTriangles[vertexIndex] = []; + vertexToTriangles.set (vertexIndex, []); } for (let triangleIndex = 0; triangleIndex < mesh.TriangleCount (); triangleIndex++) { @@ -86,9 +86,9 @@ OV.ModelFinalizer = class let v2 = mesh.GetVertex (triangle.v2); let normal = OV.CalculateTriangleNormal (v0, v1, v2); triangleNormals.push (normal); - vertexToTriangles[triangle.v0].push (triangleIndex); - vertexToTriangles[triangle.v1].push (triangleIndex); - vertexToTriangles[triangle.v2].push (triangleIndex); + vertexToTriangles.get (triangle.v0).push (triangleIndex); + vertexToTriangles.get (triangle.v1).push (triangleIndex); + vertexToTriangles.get (triangle.v2).push (triangleIndex); } for (let triangleIndex = 0; triangleIndex < mesh.TriangleCount (); triangleIndex++) { diff --git a/source/model/topology.js b/source/model/topology.js index 4209841..d1e62ed 100644 --- a/source/model/topology.js +++ b/source/model/topology.js @@ -44,7 +44,7 @@ OV.Topology = class this.edges = []; this.triangleEdges = []; this.triangles = []; - this.edgeStartToEndVertexMap = {}; + this.edgeStartToEndVertexMap = new Map (); } AddVertex () @@ -114,11 +114,11 @@ OV.Topology = class AddEdge (startVertex, endVertex) { - if (this.edgeStartToEndVertexMap[startVertex] === undefined) { - this.edgeStartToEndVertexMap[startVertex] = []; + if (!this.edgeStartToEndVertexMap.has (startVertex)) { + this.edgeStartToEndVertexMap.set (startVertex, []); } - - let endVertices = this.edgeStartToEndVertexMap[startVertex]; + + let endVertices = this.edgeStartToEndVertexMap.get (startVertex); for (let i = 0; i < endVertices.length; i++) { let endVertexItem = endVertices[i]; if (endVertexItem.endVertex === endVertex) {