@@ -32,6 +32,7 @@ GCODE.renderer = (function(){
32
32
// colorLine: ["#000000", "#aabb88", "#ffe7a0", "#6e7700", "#331a00", "#44ba97", "#08262f", "#db0e00", "#ff9977"],
33
33
colorLine : [ "#000000" , "#45c7ba" , "#a9533a" , "#ff44cc" , "#dd1177" , "#eeee22" , "#ffbb55" , "#ff5511" , "#777788" , "#ff0000" , "#ffff00" ] ,
34
34
colorLineLen : 9 ,
35
+ gradientColors : [ [ 110 , 64 , 110 ] , [ 0 , 0 , 255 ] , [ 0 , 255 , 255 ] , [ 0 , 170 , 0 ] , [ 232 , 232 , 0 ] , [ 170 , 0 , 0 ] , [ 255 , 0 , 255 ] ] ,
35
36
colorMove : "#00ff00" ,
36
37
colorRetract : "#ff0000" ,
37
38
colorRestart : "#0000ff" ,
@@ -54,7 +55,36 @@ GCODE.renderer = (function(){
54
55
var volSpeedsByLayer = { } ;
55
56
var extrusionSpeeds = [ ] ;
56
57
var extrusionSpeedsByLayer = { } ;
58
+ var max = { } ;
59
+ var min = { } ;
60
+
61
+ var rgbToColor = function ( r , g , b ) {
62
+ var rString = Math . round ( r ) . toString ( 16 ) ;
63
+ var gString = Math . round ( g ) . toString ( 16 ) ;
64
+ var bString = Math . round ( b ) . toString ( 16 ) ;
65
+ if ( rString . length < 2 ) { rString = '0' + rString ; }
66
+ if ( gString . length < 2 ) { gString = '0' + gString ; }
67
+ if ( bString . length < 2 ) { bString = '0' + bString ; }
68
+ return '#' + rString + gString + bString ;
69
+ }
57
70
71
+ var gradientColor = function ( scale ) {
72
+ // There's still a rounding error somewhere, hence the .1.
73
+ // I leave it to some diligent programmer to find and fix this.
74
+ if ( scale < - 0.1 || scale > 1.1 ) {
75
+ return "#000000" ;
76
+ }
77
+ if ( scale > 1 ) { scale = 1 ; }
78
+ else if ( scale < 0 ) { scale = 0 ; }
79
+ var numSegments = renderOptions [ 'gradientColors' ] . length ;
80
+ var leftIndex = Math . floor ( scale * ( numSegments - 1 ) ) ;
81
+ var mix = scale * ( numSegments - 1 ) - leftIndex ;
82
+ var leftColor = renderOptions [ 'gradientColors' ] [ leftIndex ] ;
83
+ var rightColor = renderOptions [ 'gradientColors' ] [ Math . ceil ( scale * ( numSegments - 1 ) ) ] ;
84
+ return rgbToColor ( leftColor [ 0 ] * ( 1.0 - mix ) + rightColor [ 0 ] * mix ,
85
+ leftColor [ 1 ] * ( 1.0 - mix ) + rightColor [ 1 ] * mix ,
86
+ leftColor [ 2 ] * ( 1.0 - mix ) + rightColor [ 2 ] * mix ) ;
87
+ }
58
88
59
89
var reRender = function ( ) {
60
90
var gCodeOpts = GCODE . gCodeReader . getOptions ( ) ;
@@ -214,7 +244,7 @@ GCODE.renderer = (function(){
214
244
} ;
215
245
216
246
var drawLayer = function ( layerNum , fromProgress , toProgress , isNextLayer ) {
217
- var i , speedIndex = 0 , prevZ = 0 ;
247
+ var i , speedIndex = 0 , prevZ = 0 , speedScale = 0 ;
218
248
isNextLayer = typeof isNextLayer !== 'undefined' ? isNextLayer : false ;
219
249
if ( ! isNextLayer ) {
220
250
layerNumStore = layerNum ;
@@ -280,12 +310,17 @@ GCODE.renderer = (function(){
280
310
// if(speedsByLayer['extrude'][prevZ]){
281
311
if ( renderOptions [ 'speedDisplayType' ] === displayType . speed ) {
282
312
speedIndex = speeds [ 'extrude' ] . indexOf ( cmds [ i ] . speed ) ;
313
+ speedScale = ( cmds [ i ] . speed - min . speed ) / ( max . speed - min . speed ) ;
283
314
} else if ( renderOptions [ 'speedDisplayType' ] === displayType . expermm ) {
284
315
speedIndex = volSpeeds . indexOf ( cmds [ i ] . volPerMM ) ;
316
+ speedScale = ( cmds [ i ] . volPerMM - min . volSpeed ) / ( max . volSpeed - min . volSpeed ) ;
285
317
} else if ( renderOptions [ 'speedDisplayType' ] === displayType . volpersec ) {
286
- speedIndex = extrusionSpeeds . indexOf ( ( cmds [ i ] . volPerMM * cmds [ i ] . speed / 60 ) . toFixed ( 3 ) ) ;
318
+ var volpersec = ( cmds [ i ] . volPerMM * cmds [ i ] . speed / 60 ) . toFixed ( 3 ) ;
319
+ speedIndex = extrusionSpeeds . indexOf ( volpersec ) ;
320
+ speedScale = ( volpersec - min . extrSpeed ) / ( max . extrSpeed - min . extrSpeed ) ;
287
321
} else {
288
- speedIndex = 0 ;
322
+ speedIndex = 0 ;
323
+ speedScale = - 1 ;
289
324
}
290
325
// speedIndex = GCODE.ui.ArrayIndexOf(speedsByLayer['extrude'][prevZ], function(obj) {return obj.speed === cmds[i].speed;});
291
326
// } else {
@@ -348,7 +383,10 @@ GCODE.renderer = (function(){
348
383
}
349
384
else if ( cmds [ i ] . extrude ) {
350
385
if ( cmds [ i ] . retract == 0 ) {
351
- if ( speedIndex >= 0 ) {
386
+ if ( speedScale >= 0 ) {
387
+ ctx . strokeStyle = gradientColor ( speedScale ) ;
388
+ }
389
+ else if ( speedIndex >= 0 ) {
352
390
ctx . strokeStyle = renderOptions [ "colorLine" ] [ speedIndex ] ;
353
391
} else if ( speedIndex === - 1 ) {
354
392
var val = parseInt ( cmds [ i ] . errLevelB ) . toString ( 16 ) ;
@@ -475,6 +513,8 @@ GCODE.renderer = (function(){
475
513
volSpeedsByLayer = mdlInfo . volSpeedsByLayer ;
476
514
extrusionSpeeds = mdlInfo . extrusionSpeeds ;
477
515
extrusionSpeedsByLayer = mdlInfo . extrusionSpeedsByLayer ;
516
+ max = mdlInfo . max ;
517
+ min = mdlInfo . min ;
478
518
// console.log(speeds);
479
519
// console.log(mdlInfo.min.x + ' ' + mdlInfo.modelSize.x);
480
520
offsetModelX = ( gridSizeX / 2 - ( mdlInfo . min . x + mdlInfo . modelSize . x / 2 ) ) * zoomFactor ;
@@ -499,6 +539,9 @@ GCODE.renderer = (function(){
499
539
if ( cmds [ i ] . prevZ !== undefined ) return cmds [ i ] . prevZ ;
500
540
}
501
541
return '-1' ;
542
+ } ,
543
+ getGradientColor : function ( scale ) {
544
+ return gradientColor ( scale ) ;
502
545
}
503
546
504
547
}
0 commit comments