Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 64652f9

Browse files
committed
revised min opacity in palettes
1 parent 913c6e6 commit 64652f9

File tree

3 files changed

+32
-28
lines changed

3 files changed

+32
-28
lines changed

src/traces/volume/opacityscale.js

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,35 @@
88

99
'use strict';
1010

11-
var min = 0.2;
12-
11+
var MIN = 0.1; // Note: often we don't want the data cube to be disappeared
1312
var scales = {
13+
'uniform': [
14+
[0, 1], [1, 1]
15+
],
1416
'max': [
15-
[0, min], [1, 1]
17+
[0, MIN], [1, 1]
1618
],
17-
1819
'min': [
19-
[0, 1], [1, min]
20+
[0, 1], [1, MIN]
2021
],
21-
22-
'extremes': createWave(1, min)
22+
'extremes': createWave(1, MIN)
2323
};
2424

25+
function createWave(n, minOpacity) {
26+
var arr = [];
27+
var steps = 32; // Max: 256
28+
for(var i = 0; i < steps; i++) {
29+
var u = i / (steps - 1);
30+
var v = minOpacity + (1 - minOpacity) * (1 - Math.pow(Math.sin(n * u * Math.PI), 2));
31+
arr.push([
32+
u,
33+
Math.max(1, Math.min(0, v))
34+
]);
35+
}
36+
return arr;
37+
}
2538
var defaultScale = scales.uniform;
26-
27-
var paletteStr = Object.keys(scales);
39+
var scaleKeys = Object.keys(scales);
2840

2941
/**
3042
* Make opacityscale attribute declarations for
@@ -67,7 +79,7 @@ function attributes(context, opts) {
6779
' `[[0, 1], [0.5, 0.2], [1, 1]]` means that higher/lower values would have',
6880
' higher opacity values and those in the middle would be more transparent',
6981
' Alternatively, `opacityscale` may be a palette name string',
70-
' of the following list: ' + paletteStr + '.'
82+
' of the following list: ' + scaleKeys + '.'
7183
].join('')
7284
};
7385

@@ -80,27 +92,13 @@ function defaults(traceIn, traceOut, layout, coerce, opts) {
8092
coerce(prefix + 'opacityscale');
8193
}
8294

83-
function createWave(n, minOpacity) {
84-
var arr = [];
85-
var steps = 32; // Max: 256
86-
for(var i = 0; i < steps; i++) {
87-
var u = i / (steps - 1);
88-
var v = minOpacity + (1 - minOpacity) * (1 - Math.pow(Math.sin(n * u * Math.PI), 2));
89-
arr.push([
90-
u,
91-
Math.max(1, Math.min(0, v))
92-
]);
93-
}
94-
return arr;
95-
}
96-
9795
function getScale(scl, dflt) {
9896
if(!dflt) dflt = defaultScale;
9997
if(!scl) return dflt;
10098

10199
function parseScale() {
102100
try {
103-
scl = palette[scl] || JSON.parse(scl);
101+
scl = scales[scl] || JSON.parse(scl);
104102
} catch(e) {
105103
scl = dflt;
106104
}
@@ -138,9 +136,15 @@ function isValidScaleArray(scl) {
138136
return true;
139137
}
140138

139+
function isValidScale(scl) {
140+
if(scales[scl] !== undefined) return true;
141+
else return isValidScaleArray(scl);
142+
}
143+
141144
module.exports = {
142145
attributes: attributes,
143146
defaults: defaults,
144147
scales: scales,
145-
get: getScale
148+
get: getScale,
149+
isValid: isValidScale
146150
};

test/image/mocks/gl3d_volume_between-ranges.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
},
88
"colorscale": "Blackbody",
99
"reversescale": true,
10-
"opacityscale": "max",
10+
"opacityscale": [[0, 0.2], [1, 1]],
1111
"opacity": 0.5,
1212
"surface": { "show": true, "fill": 1.0, "pattern": "all", "count": 33 },
1313
"spaceframe": { "show": true, "fill": 1.0 },

test/image/mocks/gl3d_volume_data-cube.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"colorscale": [[ 0.0, "rgb(0,0,255)" ], [ 0.5, "rgb(255,255,255)" ], [ 0.75, "rgb(255,255,0)" ], [ 0.875, "rgb(255,0,0)" ], [ 1.0, "rgb(0,0,0)" ]],
99
"reversescale": false,
1010
"opacityscale": "max",
11-
"opacity": 0.2,
11+
"opacity": 0.1,
1212
"surface": { "show": true, "fill": 1.0, "pattern": "all", "count": 64 },
1313
"spaceframe": { "show": true, "fill": 1.0 },
1414
"slices": {

0 commit comments

Comments
 (0)