src/representation/buffer-representation.js
/**
* @file Buffer Representation
* @author Alexander Rose <alexander.rose@weirdbyte.de>
* @private
*/
import Representation from './representation.js'
/**
* Representation for showing buffer objects. Good for efficiently showing
* large amounts of geometric primitives e.g. spheres via {@link SphereBuffer}.
* Smaller numbers of geometric primitives are more easily shown with help
* from the {@link Shape} class.
*
* __Name:__ _buffer_
*
* @example
* // add a single red sphere from a buffer to a shape instance
* var shape = new NGL.Shape( "shape" );
* var sphereBuffer = new NGL.SphereBuffer( {
* position: new Float32Array( [ 0, 0, 0 ] ),
* color: new Float32Array( [ 1, 0, 0 ] ),
* radius: new Float32Array( [ 1 ] )
* } );
* shape.addBuffer( sphereBuffer );
* var shapeComp = stage.addComponentFromObject( shape );
* shapeComp.addRepresentation( "buffer" );
*
* @example
* // add a single red sphere from a buffer to a structure component instance
* stage.loadFile( "rcsb://1crn" ).then( function( o ){
* var sphereBuffer = new NGL.SphereBuffer( {
* position: new Float32Array( [ 0, 0, 0 ] ),
* color: new Float32Array( [ 1, 0, 0 ] ),
* radius: new Float32Array( [ 1 ] )
* } );
* o.addBufferRepresentation( sphereBuffer, { opacity: 0.5 } );
* } );
*/
class BufferRepresentation extends Representation {
/**
* Create Buffer representation
* @param {Buffer} buffer - a buffer object
* @param {Viewer} viewer - a viewer object
* @param {RepresentationParameters} params - representation parameters
*/
constructor (buffer, viewer, params) {
if (!Array.isArray(buffer)) {
buffer = [ buffer ]
}
super(buffer, viewer, params)
this.type = 'buffer'
this.parameters = Object.assign({
}, this.parameters, {
colorScheme: null,
colorScale: null,
colorValue: null,
colorDomain: null,
colorMode: null
})
this.buffer = buffer
this.init(params)
}
init (params) {
super.init(params)
this.build()
}
create () {
this.bufferList.push.apply(this.bufferList, this.buffer)
}
attach (callback) {
this.bufferList.forEach(buffer => {
this.viewer.add(buffer)
buffer.setParameters(this.getBufferParams())
})
this.setVisibility(this.visible)
callback()
}
}
export default BufferRepresentation