PieScatterLayer = {
class PieScatterLayer extends deck.ScatterplotLayer {
static defaultProps = defaultProps
static layerName = 'PieScatterLayer' + Date.now()
initializeState() {
super.initializeState()
this.getAttributeManager().addInstanced({
instanceBreakdown: {
size: 2,
accessor: 'getBreakdown'
}
})
}
getShaders() {
return {
...super.getShaders(),
inject: {
'vs:#decl': `
attribute vec2 instanceBreakdown;
varying vec2 vBrackets;
`,
'vs:#main-end': `
vBrackets = vec2(instanceBreakdown.x, instanceBreakdown.x + instanceBreakdown.y);
`,
'fs:#decl': `
uniform vec3 color0;
uniform vec3 color1;
uniform vec3 color2;
varying vec2 vBrackets;
`,
'fs:DECKGL_FILTER_COLOR': `
vec2 uv = geometry.uv;
float r = atan(uv.y, uv.x) / 3.1415927 / 2.0 + 0.5;
if (r <= vBrackets.x) {
color.rgb = color0;
} else if (r <= vBrackets.y) {
color.rgb = color1;
} else {
color.rgb = color2;
}
`
}
}
}
draw(opts) {
const {colors} = this.props
opts.uniforms.color0 = colors[0].map(x => x / 255)
opts.uniforms.color1 = colors[1].map(x => x / 255)
opts.uniforms.color2 = colors[2].map(x => x / 255)
super.draw(opts)
}
}
return PieScatterLayer
}