UNPKG

polygonjs-engine

Version:

node-based webgl 3D engine https://polygonjs.com

164 lines (163 loc) 4.12 kB
import {TypedContainer} from "./_Base"; import {CoreGeometry} from "../../core/geometry/Geometry"; import {CoreObject} from "../../core/geometry/Object"; export class GeometryContainer extends TypedContainer { coreContentCloned() { if (this._content) { return this._content.clone(); } } set_content(content) { super.set_content(content); } firstObject() { if (this._content) { return this._content.objects()[0]; } } firstCoreObject() { const object = this.firstObject(); if (object) { return new CoreObject(object, 0); } } firstGeometry() { const object = this.firstObject(); if (object) { return object.geometry; } else { return null; } } objectsCount() { if (this._content) { return this._content.objects().length; } else { return 0; } } objectsVisibleCount() { let count = 0; if (this._content) { } return count; } objectsCountByType() { const count_by_type = {}; const core_group = this._content; if (this._content && core_group) { for (let core_object of core_group.coreObjects()) { const human_type = core_object.humanType(); if (count_by_type[human_type] == null) { count_by_type[human_type] = 0; } count_by_type[human_type] += 1; } } return count_by_type; } objectsNamesByType() { const names_by_type = {}; const core_group = this._content; if (this._content && core_group) { for (let core_object of core_group.coreObjects()) { const human_type = core_object.humanType(); names_by_type[human_type] = names_by_type[human_type] || []; names_by_type[human_type].push(core_object.name()); } } return names_by_type; } pointAttributeNames() { let names = []; const geometry = this.firstGeometry(); if (geometry) { names = Object.keys(geometry.attributes); } return names; } pointAttributeSizesByName() { let sizes_by_name = {}; const geometry = this.firstGeometry(); if (geometry) { Object.keys(geometry.attributes).forEach((attrib_name) => { const attrib = geometry.attributes[attrib_name]; sizes_by_name[attrib_name] = attrib.itemSize; }); } return sizes_by_name; } objectAttributeSizesByName() { let sizes_by_name = {}; const core_object = this.firstCoreObject(); if (core_object) { const attribNames = core_object.attribNames(); for (let name of attribNames) { const size = core_object.attribSize(name); if (size != null) { sizes_by_name[name] = size; } } } return sizes_by_name; } pointAttributeTypesByName() { let types_by_name = {}; const geometry = this.firstGeometry(); if (geometry) { const core_geo = new CoreGeometry(geometry); Object.keys(geometry.attributes).forEach((attrib_name) => { types_by_name[attrib_name] = core_geo.attribType(attrib_name); }); } return types_by_name; } objectAttributeTypesByName() { let types_by_name = {}; const core_object = this.firstCoreObject(); if (core_object) { for (let name of core_object.attribNames()) { types_by_name[name] = core_object.attribType(name); } } return types_by_name; } objectAttributeNames() { let names = []; const object = this.firstObject(); if (object) { names = Object.keys(object.userData["attributes"] || {}); } return names; } pointsCount() { if (this._content) { return this._content.pointsCount(); } else { return 0; } } totalPointsCount() { if (this._content) { return this._content.totalPointsCount(); } else { return 0; } } objectsData() { if (this._content) { return this._content.objectsData(); } else { return []; } } boundingBox() { return this._content.boundingBox(); } center() { return this._content.center(); } size() { return this._content.size(); } }