src/representation/trajectory-representation.js
- /**
- * @file Trajectory Representation
- * @author Alexander Rose <alexander.rose@weirdbyte.de>
- * @private
- */
-
- import { Color } from '../../lib/three.es6.js'
-
- import { defaults } from '../utils.js'
- import { uniformArray, uniformArray3 } from '../math/array-utils.js'
-
- import StructureRepresentation from './structure-representation.js'
-
- import SphereBuffer from '../buffer/sphere-buffer.js'
- import CylinderBuffer from '../buffer/cylinder-buffer.js'
- import PointBuffer from '../buffer/point-buffer.js'
- import LineBuffer from '../buffer/line-buffer.js'
-
- /**
- * Trajectory representation parameter object.
- * @typedef {Object} TrajectoryRepresentationParameters - parameters
- *
- * @property {Boolean} drawLine - draw lines
- * @property {Boolean} drawCylinder - draw cylinders
- * @property {Boolean} drawPoint - draw points
- * @property {Boolean} drawSphere - draw sphere
- * @property {Integer} linewidth - line width
- * @property {Integer} pointSize - point size
- * @property {Boolean} sizeAttenuation - size attenuation
- * @property {Boolean} sort - sort flag for points
- */
-
- /**
- * Trajectory representation
- */
- class TrajectoryRepresentation extends StructureRepresentation {
- /**
- * @param {Trajectory} trajectory - the trajectory
- * @param {Viewer} viewer - viewer object
- * @param {TrajectoryRepresentationParameters} params - parameters
- */
- constructor (trajectory, viewer, params) {
- super(trajectory.structure, viewer, params)
-
- this.type = 'trajectory'
-
- this.parameters = Object.assign({
- drawLine: {
- type: 'boolean', rebuild: true
- },
- drawCylinder: {
- type: 'boolean', rebuild: true
- },
- drawPoint: {
- type: 'boolean', rebuild: true
- },
- drawSphere: {
- type: 'boolean', rebuild: true
- },
-
- linewidth: {
- type: 'integer', max: 20, min: 1, rebuild: true
- },
- pointSize: {
- type: 'integer', max: 20, min: 1, rebuild: true
- },
- sizeAttenuation: {
- type: 'boolean', rebuild: true
- },
- sort: {
- type: 'boolean', rebuild: true
- }
- }, this.parameters)
-
- this.manualAttach = true
- this.trajectory = trajectory
-
- this.init(params)
- }
-
- init (params) {
- var p = params || {}
- p.colorScheme = defaults(p.colorScheme, 'uniform')
- p.colorValue = defaults(p.colorValue, 0xDDDDDD)
-
- this.drawLine = defaults(p.drawLine, true)
- this.drawCylinder = defaults(p.drawCylinder, false)
- this.drawPoint = defaults(p.drawPoint, false)
- this.drawSphere = defaults(p.drawSphere, false)
-
- this.pointSize = defaults(p.pointSize, 1)
- this.sizeAttenuation = defaults(p.sizeAttenuation, false)
- this.sort = defaults(p.sort, true)
-
- super.init(p)
- }
-
- attach () {
- this.bufferList.forEach(buffer => this.viewer.add(buffer))
- this.setVisibility(this.visible)
- this.tasks.decrement()
- }
-
- // prepare (callback) {
- // // TODO
- // // - move loading of path here
- // // - get rid of manualAttach
- // callback()
- // }
-
- create () {
- console.log('create', this.structureView.atomCount)
- if (this.structureView.atomCount === 0) return
-
- var index = this.structureView.getAtomIndices()[ 0 ]
-
- this.trajectory.getPath(index, path => {
- var n = path.length / 3
- var tc = new Color(this.colorValue)
-
- if (this.drawSphere) {
- var sphereBuffer = new SphereBuffer(
- {
- position: path,
- color: uniformArray3(n, tc.r, tc.g, tc.b),
- radius: uniformArray(n, 0.2)
- },
- this.getBufferParams({
- sphereDetail: this.sphereDetail,
- dullInterior: true,
- disableImpostor: this.disableImpostor
- })
- )
-
- this.bufferList.push(sphereBuffer)
- }
-
- if (this.drawCylinder) {
- var cylinderBuffer = new CylinderBuffer(
- {
- position1: path.subarray(0, -3),
- position2: path.subarray(3),
- color: uniformArray3(n - 1, tc.r, tc.g, tc.b),
- color2: uniformArray3(n - 1, tc.r, tc.g, tc.b),
- radius: uniformArray(n, 0.05)
- },
- this.getBufferParams({
- openEnded: false,
- radialSegments: this.radialSegments,
- disableImpostor: this.disableImpostor,
- dullInterior: true
- })
- )
-
- this.bufferList.push(cylinderBuffer)
- }
-
- if (this.drawPoint) {
- var pointBuffer = new PointBuffer(
- {
- position: path,
- color: uniformArray3(n, tc.r, tc.g, tc.b)
- },
- this.getBufferParams({
- pointSize: this.pointSize,
- sizeAttenuation: this.sizeAttenuation,
- sort: this.sort
- })
- )
-
- this.bufferList.push(pointBuffer)
- }
-
- if (this.drawLine) {
- var lineBuffer = new LineBuffer(
- {
- position1: path.subarray(0, -3),
- position2: path.subarray(3),
- color: uniformArray3(n - 1, tc.r, tc.g, tc.b),
- color2: uniformArray3(n - 1, tc.r, tc.g, tc.b)
- },
- this.getBufferParams()
- )
-
- this.bufferList.push(lineBuffer)
- }
-
- this.attach()
- })
- }
- }
-
- export default TrajectoryRepresentation