Use set or map instead of pure object.

This commit is contained in:
kovacsv 2022-01-02 10:00:13 +01:00
parent 862677bbf7
commit d4b3a2e009
7 changed files with 55 additions and 50 deletions

View File

@ -18,14 +18,14 @@ OV.Importer3dm = class extends OV.ImporterBase
ClearContent () ClearContent ()
{ {
this.instanceObjects = null; this.instanceIdToObject = null;
this.instanceDefinitions = null; this.instanceIdToDefinition = null;
} }
ResetContent () ResetContent ()
{ {
this.instanceObjects = {}; this.instanceIdToObject = new Map ();
this.instanceDefinitions = {}; this.instanceIdToDefinition = new Map ();
} }
ImportContent (fileContent, onFinish) ImportContent (fileContent, onFinish)
@ -73,13 +73,13 @@ OV.Importer3dm = class extends OV.ImporterBase
let rhinoObject = rhinoObjects.get (i); let rhinoObject = rhinoObjects.get (i);
let rhinoAttributes = rhinoObject.attributes (); let rhinoAttributes = rhinoObject.attributes ();
if (rhinoAttributes.isInstanceDefinitionObject) { if (rhinoAttributes.isInstanceDefinitionObject) {
this.instanceObjects[rhinoAttributes.id] = rhinoObject; this.instanceIdToObject.set (rhinoAttributes.id, rhinoObject);
} }
} }
let rhinoInstanceDefinitions = rhinoDoc.instanceDefinitions (); let rhinoInstanceDefinitions = rhinoDoc.instanceDefinitions ();
for (let i = 0; i < rhinoInstanceDefinitions.count (); i++) { for (let i = 0; i < rhinoInstanceDefinitions.count (); i++) {
let rhinoInstanceDefinition = rhinoInstanceDefinitions.get (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; deleteMesh = true;
} else if (objectType === this.rhino.ObjectType.InstanceReference) { } else if (objectType === this.rhino.ObjectType.InstanceReference) {
let parentDefinitionId = rhinoGeometry.parentIdefId; let parentDefinitionId = rhinoGeometry.parentIdefId;
let instanceDefinition = this.instanceDefinitions[parentDefinitionId]; if (this.instanceIdToDefinition.has (parentDefinitionId)) {
if (instanceDefinition !== undefined) { let instanceDefinition = this.instanceIdToDefinition.get (parentDefinitionId);
let instanceObjectIds = instanceDefinition.getObjectIds (); let instanceObjectIds = instanceDefinition.getObjectIds ();
for (let i = 0; i < instanceObjectIds.length; i++) { for (let i = 0; i < instanceObjectIds.length; i++) {
let instanceObjectId = instanceObjectIds[i]; let instanceObjectId = instanceObjectIds[i];
let instanceObject = this.instanceObjects[instanceObjectId]; if (this.instanceIdToObject.has (instanceObjectId)) {
if (instanceObject !== undefined) { let instanceObject = this.instanceIdToObject.get (instanceObjectId);
rhinoInstanceReferences.push (rhinoObject); rhinoInstanceReferences.push (rhinoObject);
this.ImportRhinoGeometryObject (rhinoDoc, instanceObject, rhinoInstanceReferences); this.ImportRhinoGeometryObject (rhinoDoc, instanceObject, rhinoInstanceReferences);
rhinoInstanceReferences.pop (); rhinoInstanceReferences.pop ();

View File

@ -490,7 +490,7 @@ OV.ImporterGltf = class extends OV.ImporterBase
ResetContent () ResetContent ()
{ {
this.bufferContents = []; this.bufferContents = [];
this.imageIndexToTextureParams = {}; this.imageIndexToTextureParams = new Map ();
} }
ImportContent (fileContent, onFinish) ImportContent (fileContent, onFinish)
@ -725,8 +725,10 @@ OV.ImporterGltf = class extends OV.ImporterBase
let gltfImageIndex = gltfTexture.source; let gltfImageIndex = gltfTexture.source;
let gltfImage = gltf.images[gltfImageIndex]; let gltfImage = gltf.images[gltfImageIndex];
let textureParams = this.imageIndexToTextureParams[gltfImageIndex]; let textureParams = null;
if (textureParams === undefined) { if (this.imageIndexToTextureParams.has (gltfImageIndex)) {
textureParams = this.imageIndexToTextureParams.get (gltfImageIndex);
} else {
textureParams = { textureParams = {
name : null, name : null,
url : null, url : null,
@ -757,7 +759,7 @@ OV.ImporterGltf = class extends OV.ImporterBase
textureParams.buffer = buffer; textureParams.buffer = buffer;
} }
} }
this.imageIndexToTextureParams[gltfImageIndex] = textureParams; this.imageIndexToTextureParams.set (gltfImageIndex, textureParams);
} }
texture.name = textureParams.name; texture.name = textureParams.name;

View File

@ -24,8 +24,8 @@ OV.ImporterIfc = class extends OV.ImporterBase
ResetContent () ResetContent ()
{ {
this.materialNameToIndex = {}; this.materialNameToIndex = new Map ();
this.expressIDToMesh = {}; this.expressIDToMesh = new Map ();
} }
ImportContent (fileContent, onFinish) ImportContent (fileContent, onFinish)
@ -103,7 +103,7 @@ OV.ImporterIfc = class extends OV.ImporterBase
vertexOffset += ifcVertices.length / 6; vertexOffset += ifcVertices.length / 6;
} }
this.expressIDToMesh[ifcMesh.expressID] = mesh; this.expressIDToMesh.set (ifcMesh.expressID, mesh);
this.model.AddMeshToRootNode (mesh); this.model.AddMeshToRootNode (mesh);
} }
@ -117,15 +117,18 @@ OV.ImporterIfc = class extends OV.ImporterBase
continue; continue;
} }
rel.RelatedObjects.forEach ((objectRelID) => { rel.RelatedObjects.forEach ((objectRelID) => {
let element = this.expressIDToMesh[objectRelID.value]; let element = null;
if (element === undefined) { if (this.expressIDToMesh.has (objectRelID.value)) {
element = this.expressIDToMesh.get (objectRelID.value);
} else {
let propSetOwner = this.ifc.GetLine (modelID, objectRelID.value, true); let propSetOwner = this.ifc.GetLine (modelID, objectRelID.value, true);
if (propSetOwner.type === WebIFC.IFCBUILDING) { if (propSetOwner.type === WebIFC.IFCBUILDING) {
element = this.model; element = this.model;
} else {
return;
} }
} }
if (element === null) {
return;
}
let propSetDef = rel.RelatingPropertyDefinition; let propSetDef = rel.RelatingPropertyDefinition;
let propSet = this.ifc.GetLine (modelID, propSetDef.value, true); let propSet = this.ifc.GetLine (modelID, propSetDef.value, true);
if (!propSet || !propSet.HasProperties) { if (!propSet || !propSet.HasProperties) {
@ -203,17 +206,18 @@ OV.ImporterIfc = class extends OV.ImporterBase
OV.IntegerToHexString (color.b) + OV.IntegerToHexString (color.b) +
OV.IntegerToHexString (parseInt (ifcColor.w * 255.0, 10)); OV.IntegerToHexString (parseInt (ifcColor.w * 255.0, 10));
let materialIndex = this.materialNameToIndex[materialName]; if (this.materialNameToIndex.has (materialName)) {
if (materialIndex === undefined) { return this.materialNameToIndex.get (materialName);
} else {
let material = new OV.PhongMaterial (); let material = new OV.PhongMaterial ();
material.name = materialName; material.name = materialName;
material.color = color; material.color = color;
material.opacity = ifcColor.w; material.opacity = ifcColor.w;
OV.UpdateMaterialTransparency (material); OV.UpdateMaterialTransparency (material);
materialIndex = this.model.AddMaterial (material); let materialIndex = this.model.AddMaterial (material);
this.materialNameToIndex[materialName] = materialIndex; this.materialNameToIndex.set (materialName, materialIndex);
return materialIndex;
} }
return materialIndex;
} }
GetIFCString (ifcString) GetIFCString (ifcString)

View File

@ -97,7 +97,7 @@ OV.PlyMaterialHandler = class
constructor (model) constructor (model)
{ {
this.model = model; this.model = model;
this.colorToMaterial = {}; this.colorToMaterial = new Map ();
} }
GetMaterialIndexByColor (color) GetMaterialIndexByColor (color)
@ -108,18 +108,18 @@ OV.PlyMaterialHandler = class
OV.IntegerToHexString (color[2]) + OV.IntegerToHexString (color[2]) +
OV.IntegerToHexString (color[3]); OV.IntegerToHexString (color[3]);
let materialIndex = this.colorToMaterial[materialName]; if (this.colorToMaterial.has (materialName)) {
if (materialIndex === undefined) { return this.colorToMaterial.get (materialName);
} else {
let material = new OV.PhongMaterial (); let material = new OV.PhongMaterial ();
material.name = materialName; material.name = materialName;
material.color = new OV.Color (color[0], color[1], color[2]); material.color = new OV.Color (color[0], color[1], color[2]);
material.opacity = color[3] / 255.0; material.opacity = color[3] / 255.0;
OV.UpdateMaterialTransparency (material); OV.UpdateMaterialTransparency (material);
materialIndex = this.model.AddMaterial (material); let materialIndex = this.model.AddMaterial (material);
this.colorToMaterial[materialName] = materialIndex; this.colorToMaterial.set (materialName, materialIndex);
return materialIndex;
} }
return materialIndex;
} }
}; };

View File

@ -1,6 +1,5 @@
OV.ExternalLibLocation = null; OV.ExternalLibLocation = null;
OV.LoadedExternalLibs = new Set ();
OV.LoadedExternalLibs = {};
OV.LoadExternalLibrary = function (libName) OV.LoadExternalLibrary = function (libName)
{ {
@ -10,7 +9,7 @@ OV.LoadExternalLibrary = function (libName)
return; return;
} }
if (OV.LoadedExternalLibs[libName] !== undefined) { if (OV.LoadedExternalLibs.has (libName)) {
resolve (); resolve ();
return; return;
} }
@ -19,7 +18,7 @@ OV.LoadExternalLibrary = function (libName)
scriptElement.type = 'text/javascript'; scriptElement.type = 'text/javascript';
scriptElement.src = OV.ExternalLibLocation + '/' + libName; scriptElement.src = OV.ExternalLibLocation + '/' + libName;
scriptElement.onload = () => { scriptElement.onload = () => {
OV.LoadedExternalLibs[libName] = true; OV.LoadedExternalLibs.add (libName);
resolve (); resolve ();
}; };
scriptElement.onerror = () => { scriptElement.onerror = () => {

View File

@ -51,7 +51,7 @@ OV.ModelFinalizer = class
} }
let averageNormals = []; let averageNormals = [];
let neigTriangles = vertexToTriangles[vertexIndex]; let neigTriangles = vertexToTriangles.get (vertexIndex);
for (let i = 0; i < neigTriangles.length; i++) { for (let i = 0; i < neigTriangles.length; i++) {
let neigIndex = neigTriangles[i]; let neigIndex = neigTriangles[i];
let neigTriangle = mesh.GetTriangle (neigIndex); let neigTriangle = mesh.GetTriangle (neigIndex);
@ -73,10 +73,10 @@ OV.ModelFinalizer = class
} }
let triangleNormals = []; let triangleNormals = [];
let vertexToTriangles = {}; let vertexToTriangles = new Map ();
for (let vertexIndex = 0; vertexIndex < mesh.VertexCount (); vertexIndex++) { for (let vertexIndex = 0; vertexIndex < mesh.VertexCount (); vertexIndex++) {
vertexToTriangles[vertexIndex] = []; vertexToTriangles.set (vertexIndex, []);
} }
for (let triangleIndex = 0; triangleIndex < mesh.TriangleCount (); triangleIndex++) { for (let triangleIndex = 0; triangleIndex < mesh.TriangleCount (); triangleIndex++) {
@ -86,9 +86,9 @@ OV.ModelFinalizer = class
let v2 = mesh.GetVertex (triangle.v2); let v2 = mesh.GetVertex (triangle.v2);
let normal = OV.CalculateTriangleNormal (v0, v1, v2); let normal = OV.CalculateTriangleNormal (v0, v1, v2);
triangleNormals.push (normal); triangleNormals.push (normal);
vertexToTriangles[triangle.v0].push (triangleIndex); vertexToTriangles.get (triangle.v0).push (triangleIndex);
vertexToTriangles[triangle.v1].push (triangleIndex); vertexToTriangles.get (triangle.v1).push (triangleIndex);
vertexToTriangles[triangle.v2].push (triangleIndex); vertexToTriangles.get (triangle.v2).push (triangleIndex);
} }
for (let triangleIndex = 0; triangleIndex < mesh.TriangleCount (); triangleIndex++) { for (let triangleIndex = 0; triangleIndex < mesh.TriangleCount (); triangleIndex++) {

View File

@ -44,7 +44,7 @@ OV.Topology = class
this.edges = []; this.edges = [];
this.triangleEdges = []; this.triangleEdges = [];
this.triangles = []; this.triangles = [];
this.edgeStartToEndVertexMap = {}; this.edgeStartToEndVertexMap = new Map ();
} }
AddVertex () AddVertex ()
@ -114,11 +114,11 @@ OV.Topology = class
AddEdge (startVertex, endVertex) AddEdge (startVertex, endVertex)
{ {
if (this.edgeStartToEndVertexMap[startVertex] === undefined) { if (!this.edgeStartToEndVertexMap.has (startVertex)) {
this.edgeStartToEndVertexMap[startVertex] = []; this.edgeStartToEndVertexMap.set (startVertex, []);
} }
let endVertices = this.edgeStartToEndVertexMap[startVertex]; let endVertices = this.edgeStartToEndVertexMap.get (startVertex);
for (let i = 0; i < endVertices.length; i++) { for (let i = 0; i < endVertices.length; i++) {
let endVertexItem = endVertices[i]; let endVertexItem = endVertices[i];
if (endVertexItem.endVertex === endVertex) { if (endVertexItem.endVertex === endVertex) {