Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WindRose visualization needs reload #4

Open
Sineos opened this issue Sep 3, 2018 · 2 comments
Open

WindRose visualization needs reload #4

Sineos opened this issue Sep 3, 2018 · 2 comments
Labels
bug Something isn't working help wanted Extra attention is needed

Comments

@Sineos
Copy link
Owner

Sineos commented Sep 3, 2018

The visualization for the WindRose data needs a reload before starting to display the data. Reason is unknown and Angular and I are not exactly friends. Any pointer would be appreciated.

@Sineos Sineos added bug Something isn't working help wanted Extra attention is needed labels Sep 3, 2018
@Hypnos3
Copy link

Hypnos3 commented Sep 27, 2018

Ich hatte das Problem, das die Windrose leer war oder nur kurz nach dem Laden der Seite angezeigt wurde.

Ich bin leider nur Anfänger und habe per trail und error etwas herumgespielt.

Neben kleineren Änderungen, hab ich im wesentlichen geändert, das das init(); und leere zeichnen drawWindRose(); nur einmal aufgerufen wird. Damit funktioniert es jetzt.

Das Problem mit dem Reload tritt aber immer noch auf.

Der code der Windrose sieht jetzt wie folgt aus:

<script>

    /*
     * Version 6 of the Windrose/Radar gauge
     * Originally created by Mark Crossley
     * Source: https://www.weather-watch.com/smf/index.php/topic,55071.0.html
     *
     */

     // Create some global variables to hold references to the buffers
    var g_bufferRadar, g_bufferRadarFrame, g_bufferRadarBackground,
        g_bufferRadarForeground, g_ctxRadarGauge;
    var g_radarPlotSize;
    
    // Global variables that already exist in gauges-ss, if merging into gauge-ss, you
    // DO NOT need to add these
    var g_size = 281;
    //var data = {};
    var g_frameDesign = steelseries.FrameDesign.BLACK_METAL;
    var g_background = steelseries.BackgroundColor.BRUSHED_METAL;
    var g_foreground = steelseries.ForegroundType.TYPE1;
    //var g_imgPathURL = 'images/';
    var LANG = {};
    LANG.compass = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW'];
    
    // Optional - background image - Already in gauges-ss
    //var g_imgSmall = document.createElement("img");                     //  background image
    //g_imgSmall.setAttribute("src", g_imgPathURL + "logoLarge.png");
    
    function init() {
    
      // Calcuate the size of the gauge background and so the size of radar plot required
      g_radarPlotSize = g_size * 0.68;
    
      // Create a hidden div to host the Radar plot
      var div = document.createElement('div');
      div.style.display = 'none';
      document.body.appendChild(div);
    
      // radar plot canvas buffer
      g_bufferRadar = document.createElement('canvas');
      g_bufferRadar.width = g_radarPlotSize;
      g_bufferRadar.height = g_radarPlotSize;
      g_bufferRadar.id = 'radarPlot';
      div.appendChild(g_bufferRadar);
    
      // Create a steelseries gauge frame
      g_bufferRadarFrame = document.createElement('canvas');
      g_bufferRadarFrame.width = g_size;
      g_bufferRadarFrame.height = g_size;
      var ctxFrame = g_bufferRadarFrame.getContext('2d');
      steelseries.drawFrame(ctxFrame, g_frameDesign, g_size/2, g_size/2, g_size, g_size);
    
      // Create a steelseries gauge background
      g_bufferRadarBackground = document.createElement('canvas');
      g_bufferRadarBackground.width = g_size;
      g_bufferRadarBackground.height = g_size;
      var ctxBackground = g_bufferRadarBackground.getContext('2d');
      steelseries.drawBackground(ctxBackground, g_background, g_size/2, g_size/2, g_size, g_size);
      // Optional - add a background image
      //var drawSize = g_size * 0.831775;
      //var x = (g_size - drawSize) / 2;
      //ctxBackground.drawImage(g_imgSmall, x, x, drawSize, drawSize);
    
      // Add the compass points
      drawCompassPoints(ctxBackground, g_size);
    
      // Create a steelseries gauge forground
      g_bufferRadarForeground = document.createElement('canvas');
      g_bufferRadarForeground.width = g_size;
      g_bufferRadarForeground.height = g_size;
      var ctxForegound = g_bufferRadarForeground.getContext('2d');
      steelseries.drawForeground(ctxForegound, g_foreground, g_size, g_size, false);
    
      // Get the context of the gauge canavs on the HTML page
      g_ctxRadarGauge = document.getElementById('canvasRdGauge').getContext('2d');
    }
    
    // Just draw an empty gauge as a placeholder when the page loads
    function drawWindRose() {
      // Paint the gauge frame
      g_ctxRadarGauge.drawImage(g_bufferRadarFrame, 0, 0);
    
      // Paint the gauge background
      g_ctxRadarGauge.drawImage(g_bufferRadarBackground, 0, 0);
    
      // Paint the gauge foreground
      g_ctxRadarGauge.drawImage(g_bufferRadarForeground, 0, 0);
    }
    
    // Redraw the gauge with data
    function doWindRose(windRoseData) {
      //console.log(windRoseData);
      // Clear the gauge
      g_ctxRadarGauge.clearRect(0, 0, g_size, g_size);
    
      // Clear the existing radar plot
      g_bufferRadar.width = g_bufferRadar.height = g_radarPlotSize;
    
      // Create a new radar plot
      var radar = new RGraph.Radar('radarPlot', windRoseData);
      radar.Set('chart.strokestyle', 'black');
      radar.Set('chart.colors.alpha', 0.4);
      radar.Set('chart.colors', ['red']);
    
      radar.Set('chart.title', 'Wind  Rose');
      radar.Set('chart.title.size', Math.ceil(0.045 * g_radarPlotSize));
      radar.Set('chart.title.bold', false);
      radar.Set('chart.gutter.top', 0.2 * g_radarPlotSize);
      radar.Set('chart.gutter.bottom', 0.2 * g_radarPlotSize);
    
      radar.Set('chart.tooltips.effect', 'snap');
      radar.Set('chart.labels.axes', '');
      radar.Set('chart.background.circles', true);
      radar.Set('chart.radius', g_radarPlotSize/2);
      radar.Draw();
    
      // Paint the gauge frame
      g_ctxRadarGauge.drawImage(g_bufferRadarFrame, 0, 0);
    
      // Paint the gauge background
      g_ctxRadarGauge.drawImage(g_bufferRadarBackground, 0, 0);
    
      // Paint the radar plot
      var offset = (g_size - g_radarPlotSize) / 2;
      g_ctxRadarGauge.drawImage(g_bufferRadar, offset, offset);
    
      // Paint the gauge foreground
      g_ctxRadarGauge.drawImage(g_bufferRadarForeground, 0, 0);
    
    }
    
    
    // Helper function to put the compass points on the background
    function drawCompassPoints(ctx, size) {
      ctx.save();
      // set the font
      ctx.font = (0.06 * size) + 'px serif';
      ctx.fillStyle = '#505050'; //'#000000';
      ctx.textAlign = 'center';
      ctx.textBaseline = 'middle';
    
      // Draw the compass points
      for (var i=0; i<4; i++) {
        ctx.translate(size/2, size*0.125);
        ctx.fillText(LANG.compass[i*2], 0, 0, size);
        ctx.translate(-size/2, -size*0.125);
        // Move to center
        ctx.translate(size/2, size/2);
        ctx.rotate(Math.PI/2);
        ctx.translate(-size/2, -size/2);
      }
      ctx.restore();
    }
    
    angular.element(document).ready(function () {
        //console.log('init + drawWindRose');
        init();
        drawWindRose();
    });

    (function(scope) {
        scope.$watch('msg', function(msg) {
            if (msg != null && msg.payload != null) {
                //init();
                //drawWindRose();
                //data.WindRoseData = msg.payload;
                doWindRose(msg.payload);
            }
        });
    })(scope);
</script>

<canvas id="canvasRdGauge" width="301" height="301">No canvas in your browser...sorry...</canvas>

@Sineos
Copy link
Owner Author

Sineos commented Oct 1, 2018

Many thanks for digging into this. Unfortunately this change does not work for me. In recent FF and Chrome, still a reload is required before it starts showing data.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working help wanted Extra attention is needed
Projects
None yet
Development

No branches or pull requests

2 participants