UNPKG

polygonjs-engine

Version:

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

70 lines (64 loc) 1.81 kB
/** * Create points from a an array of json dictionaries * * @remarks * The number of points created will be equal to the number of elements in the array. * Each element of the array must be a dictionary. It can look like: * `[{position: [1,2,3]}]` * which will create a single point at the position x=1,y=2,z=3. * * In order to create 2 points with attributes `position` and `amp`, you would have: * `[{position: [1,2,3], amp: 1},{position: [7,2,1], amp: 3}]` * */ import {TypedSopNode} from './_Base'; import {JsonDataLoader} from '../../../core/loader/geometry/JsonData'; const DEFAULT_DATA = [ {value: -40}, {value: -30}, {value: -20}, {value: -10}, {value: 0}, {value: 10}, {value: 20}, {value: 30}, {value: 40}, {value: 50}, {value: 60}, {value: 70}, {value: 80}, ]; const DEFAULT_DATA_STR = JSON.stringify(DEFAULT_DATA); import {NodeParamsConfig, ParamConfig} from '../utils/params/ParamsConfig'; import {ObjectType} from '../../../core/geometry/Constant'; class DataSopParamsConfig extends NodeParamsConfig { /** @param json object used to create the geometry */ data = ParamConfig.STRING(DEFAULT_DATA_STR); } const ParamsConfig = new DataSopParamsConfig(); export class DataSopNode extends TypedSopNode<DataSopParamsConfig> { params_config = ParamsConfig; static type() { return 'data'; } cook() { let json = null; try { json = JSON.parse(this.pv.data); } catch (e) { this.states.error.set('could not parse json'); } if (json) { try { const loader = new JsonDataLoader(); loader.set_json(json); const geometry = loader.create_object(); this.setGeometry(geometry, ObjectType.POINTS); } catch (e) { this.states.error.set('could not build geometry from json'); } } else { this.cookController.end_cook(); } } }