Eliminate manual node type setting in importers.

This commit is contained in:
Viktor Kovacs 2023-05-08 08:07:37 +02:00
parent b661ddcfb5
commit 96609b559a
8 changed files with 12 additions and 35 deletions

View File

@ -9,7 +9,7 @@ import { RGBColor, ColorComponentFromFloat } from '../model/color.js';
import { PhongMaterial, TextureMap } from '../model/material.js';
import { Mesh } from '../model/mesh.js';
import { FlipMeshTrianglesOrientation, TransformMesh } from '../model/meshutils.js';
import { Node, NodeType } from '../model/node.js';
import { Node } from '../model/node.js';
import { Triangle } from '../model/triangle.js';
import { ImporterBase } from './importerbase.js';
import { UpdateMaterialTransparency } from './importerutils.js';
@ -550,7 +550,6 @@ export class Importer3ds extends ImporterBase
let isMeshNode = this.meshNameToIndex.has (node3ds.name);
node.SetTransformation (GetNodeTransformation (node3ds, isMeshNode));
if (isMeshNode) {
node.SetType (NodeType.MeshNode);
node.AddMeshIndex (this.meshNameToIndex.get (node3ds.name));
}
}

View File

@ -2,7 +2,7 @@ import { IsObjectEmpty } from '../core/core.js';
import { Coord3D } from '../geometry/coord3d.js';
import { Direction } from '../geometry/geometry.js';
import { ArrayBufferToUtf8String } from '../io/bufferutils.js';
import { Node, NodeType } from '../model/node.js';
import { Node } from '../model/node.js';
import { Mesh } from '../model/mesh.js';
import { Triangle } from '../model/triangle.js';
import { ImporterBase } from './importerbase.js';
@ -95,7 +95,6 @@ export class ImporterBim extends ImporterBase
let meshIndex = this.model.AddMesh (mesh);
let elementNode = new Node ();
elementNode.SetType (NodeType.MeshNode);
elementNode.AddMeshIndex (meshIndex);
let translation = new Coord3D (0.0, 0.0, 0.0);

View File

@ -4,7 +4,7 @@ import { GetFileExtension } from '../io/fileutils.js';
import { GetExternalLibPath } from '../io/externallibs.js';
import { ConvertThreeGeometryToMesh } from '../threejs/threeutils.js';
import { ArrayBufferToUtf8String } from '../io/bufferutils.js';
import { Node, NodeType } from '../model/node.js';
import { Node } from '../model/node.js';
import { ColorToMaterialConverter } from './importerutils.js';
import { RGBAColor } from '../model/color.js';
import { Property, PropertyGroup, PropertyType } from '../model/property.js';
@ -387,7 +387,6 @@ export class ImporterFcstd extends ImporterBase
}
let objectNode = new Node ();
objectNode.SetType (NodeType.GroupNode);
if (object.shapeName !== null) {
objectNode.SetName (object.shapeName);
}

View File

@ -11,7 +11,7 @@ import { LoadExternalLibrary } from '../io/externallibs.js';
import { RGBColor, ColorComponentFromFloat, RGBColorFromFloatComponents, LinearToSRGB } from '../model/color.js';
import { PhongMaterial, PhysicalMaterial, TextureMap } from '../model/material.js';
import { Mesh } from '../model/mesh.js';
import { Node, NodeType } from '../model/node.js';
import { Node } from '../model/node.js';
import { Property, PropertyGroup, PropertyType } from '../model/property.js';
import { Triangle } from '../model/triangle.js';
import { ImporterBase } from './importerbase.js';
@ -1057,9 +1057,6 @@ export class ImporterGltf extends ImporterBase
}
if (gltfNode.mesh !== undefined) {
if (gltfNode.children === undefined || gltfNode.children.length === 0) {
node.SetType (NodeType.MeshNode);
}
let mesh = this.model.GetMesh (gltfNode.mesh);
this.ImportProperties (mesh, gltfNode.extras, 'Node properties');
node.AddMeshIndex (gltfNode.mesh);

View File

@ -5,7 +5,7 @@ import { Transformation } from '../geometry/transformation.js';
import { Base64DataURIToArrayBuffer, CreateObjectUrl, GetFileExtensionFromMimeType } from '../io/bufferutils.js';
import { GetFileExtension, GetFileName } from '../io/fileutils.js';
import { PhongMaterial, TextureMap } from '../model/material.js';
import { Node, NodeType } from '../model/node.js';
import { Node } from '../model/node.js';
import { ConvertThreeColorToColor, ConvertThreeGeometryToMesh, ThreeLinearToSRGBColorConverter, ThreeSRGBToLinearColorConverter } from '../threejs/threeutils.js';
import { ImporterBase } from './importerbase.js';
@ -134,9 +134,6 @@ export class ImporterThreeBase extends ImporterBase
AddObject (importer, model, childObject, node);
}
if (threeObject.isMesh && importer.IsMeshVisible (threeObject)) {
if (threeObject.children.length === 0) {
node.SetType (NodeType.MeshNode);
}
let mesh = importer.ConvertThreeMesh (threeObject);
let meshIndex = model.AddMesh (mesh);
node.AddMeshIndex (meshIndex);

View File

@ -54,7 +54,7 @@ import { GetMeshType, CalculateTriangleNormal, TransformMesh, FlipMeshTrianglesO
import { Model } from './model/model.js';
import { FinalizeModel, CheckModel } from './model/modelfinalization.js';
import { IsModelEmpty, GetBoundingBox, GetTopology, IsTwoManifold, HasDefaultMaterial, ReplaceDefaultMaterialColor } from './model/modelutils.js';
import { Node, NodeType } from './model/node.js';
import { Node } from './model/node.js';
import { Object3D, ModelObject3D } from './model/object.js';
import { Property, PropertyGroup, PropertyToString, PropertyType } from './model/property.js';
import { GetTriangleArea, GetTetrahedronSignedVolume, CalculateVolume, CalculateSurfaceArea } from './model/quantities.js';
@ -253,7 +253,6 @@ export {
HasDefaultMaterial,
ReplaceDefaultMaterialColor,
Node,
NodeType,
Object3D,
ModelObject3D,
Property,

View File

@ -15,17 +15,10 @@ class NodeIdGenerator
}
}
export const NodeType =
{
GroupNode : 0,
MeshNode : 1
};
export class Node
{
constructor ()
{
this.type = NodeType.GroupNode;
this.name = '';
this.parent = null;
this.transformation = new Transformation ();
@ -42,14 +35,9 @@ export class Node
return this.childNodes.length === 0 && this.meshIndices.length === 0;
}
GetType ()
IsMeshNode ()
{
return this.type;
}
SetType (type)
{
this.type = type;
return this.childNodes.length === 0 && this.meshIndices.length === 1;
}
GetId ()

View File

@ -1,4 +1,3 @@
import { NodeType } from '../engine/model/node.js';
import { MeshInstanceId } from '../engine/model/meshinstance.js';
import { AddDiv, CreateDiv, ShowDomElement, ClearDomElement, InsertDomElementBefore, SetDomElementHeight, GetDomElementOuterHeight, IsDomElementVisible } from '../engine/viewer/domutils.js';
import { CalculatePopupPositionToElementBottomRight, ShowListPopup } from './dialogs.js';
@ -147,7 +146,7 @@ export class NavigatorMeshesPanel extends NavigatorPanel
const rootNode = importResult.model.GetRootNode ();
let isHierarchical = false;
for (let childNode of rootNode.GetChildNodes ()) {
if (childNode.GetType () === NodeType.GroupNode) {
if (childNode.ChildNodeCount () > 0) {
isHierarchical = true;
break;
}
@ -380,12 +379,12 @@ export class NavigatorMeshesPanel extends NavigatorPanel
let meshNodes = [];
for (let childNode of node.GetChildNodes ()) {
if (mode === MeshesPanelMode.TreeView) {
if (childNode.GetType () === NodeType.GroupNode) {
if (childNode.IsMeshNode ()) {
meshNodes.push (childNode);
} else {
let nodeItem = CreateNodeItem (panel, childNode);
parentItem.AddChild (nodeItem);
AddModelNodeToTree (panel, model, childNode, nodeItem, mode);
} else if (childNode.GetType () === NodeType.MeshNode) {
meshNodes.push (childNode);
}
} else {
AddModelNodeToTree (panel, model, childNode, parentItem, mode);