Reference Source

src/XKTModel/XKTEntity.js

import {math} from "../lib/math.js";

/**
 * An object within an {@link XKTModel}.
 *
 * * Created by {@link XKTModel#createEntity}
 * * Stored in {@link XKTModel#entities} and {@link XKTModel#entitiesList}
 * * Has one or more {@link XKTMesh}s, each having an {@link XKTGeometry}
 *
 * @class XKTEntity
 */
class XKTEntity {

    /**
     * @private
     * @param entityId
     * @param meshes
     */
    constructor(entityId,  meshes) {

        /**
         * Unique ID of this ````XKTEntity```` in {@link XKTModel#entities}.
         *
         * For a BIM model, this will be an IFC product ID.
         *
         * We can also use {@link XKTModel#createMetaObject} to create an {@link XKTMetaObject} to specify metadata for
         * this ````XKTEntity````. To associate the {@link XKTMetaObject} with our {@link XKTEntity}, we give
         * {@link XKTMetaObject#metaObjectId} the same value as {@link XKTEntity#entityId}.
         *
         * @type {String}
         */
        this.entityId = entityId;

        /**
         * Index of this ````XKTEntity```` in {@link XKTModel#entitiesList}.
         *
         * Set by {@link XKTModel#finalize}.
         *
         * @type {Number}
         */
        this.entityIndex = null;

        /**
         * A list of {@link XKTMesh}s that indicate which {@link XKTGeometry}s are used by this Entity.
         *
         * @type {XKTMesh[]}
         */
        this.meshes = meshes;

        /**
         * World-space axis-aligned bounding box (AABB) that encloses the {@link XKTGeometry#positions} of
         * the {@link XKTGeometry}s that are used by this ````XKTEntity````.
         *
         * Set by {@link XKTModel#finalize}.
         *
         * @type {Float32Array}
         */
        this.aabb = math.AABB3();

        /**
         * Indicates if this ````XKTEntity```` shares {@link XKTGeometry}s with other {@link XKTEntity}'s.
         *
         * Set by {@link XKTModel#finalize}.
         *
         * Note that when an ````XKTEntity```` shares ````XKTGeometrys````, it shares **all** of its ````XKTGeometrys````. An ````XKTEntity````
         * never shares only some of its ````XKTGeometrys```` - it always shares either the whole set or none at all.
         *
         * @type {Boolean}
         */
        this.hasReusedGeometries = false;
    }
}

export {XKTEntity};