Changeset 360:71b918aedf9d in finroc_tools_gui-java


Ignore:
Timestamp:
15.11.2019 07:39:18 (8 months ago)
Author:
Max Reichardt <max.reichardt@…>
Branch:
default
Phase:
public
Message:

Fixes issue in plotter: If plotted signals start with different timestamps, they are no properly arranged relative to each other

File:
1 edited

Legend:

Unmodified
Added
Removed
  • widgets/Plotter.java

    r358 r360  
    127127        transient ColorMode actualColorMode; 
    128128        transient boolean[] isTimestampBuffer; 
     129        transient long firstTimestamp = 0; 
     130        transient boolean firstTimestampSet = false; 
    129131 
    130132        int getXValueIndex() { 
     
    365367                    Arrays.fill(currentData, null); 
    366368                    Arrays.fill(c.isTimestampBuffer, false); 
    367                     long firstTimestamp = 0; 
    368                     boolean firstTimestampSet = false; 
     369                    c.firstTimestamp = 0; 
     370                    c.firstTimestampSet = false; 
    369371 
    370372                    tempChannelIndices[InputBufferPortTypes.X.ordinal()] = c.channelX; 
     
    403405                                        c.isTimestampBuffer[type] = true; 
    404406 
    405                                         if ((!firstTimestampSet) && (!showAbsoluteTimestamps)) { 
    406                                             firstTimestamp = input.get(0); 
    407                                             firstTimestampSet = true; 
     407                                        if ((!c.firstTimestampSet) && (!showAbsoluteTimestamps)) { 
     408                                            c.firstTimestamp = input.get(0); 
     409                                            c.firstTimestampSet = true; 
    408410                                        } 
    409411 
    410412                                        for (int k = 0; k < valueCount; k++) { 
    411                                             values[k] = (input.get(k * inputValueIncrement) - firstTimestamp) * 0.000000001; 
     413                                            values[k] = (input.get(k * inputValueIncrement) - c.firstTimestamp) * 0.000000001; 
    412414                                        } 
    413415                                    } else if (inputData instanceof IntList) { 
     
    790792            private static final long serialVersionUID = -2946030738495285342L; 
    791793 
     794            double xOffset = 0; 
     795 
    792796            public BufferPlotterMainPanel() { 
    793797            } 
     
    850854 
    851855                // Draw plots 
     856 
     857                // Determine first timestamp 
     858                long firstTimestamp = 0; 
     859                boolean firstTimestampSet = false; 
     860                for (Channel c : channels) { 
     861                    if (c.firstTimestampSet) { 
     862                        if (firstTimestampSet) { 
     863                            firstTimestamp = Math.min(c.firstTimestamp, firstTimestamp); 
     864                        } else { 
     865                            firstTimestamp = c.firstTimestamp; 
     866                        } 
     867                        firstTimestampSet = true; 
     868                    } 
     869                } 
     870 
    852871                for (Channel c : channels) { 
    853872                    // TODO: optimized plots with monotonic x values 
     
    855874                    double[] xValues = c.values[c.getXValueIndex()]; 
    856875                    double[] yValues = c.values[InputBufferPortTypes.Y.ordinal()]; 
     876 
     877                    // Adjust X offset, if plot starts with different timestamp 
     878                    if (!c.firstTimestampSet) { 
     879                        xOffset = 0; 
     880                    } else { 
     881                        xOffset = (c.firstTimestamp - firstTimestamp) * 0.000000001; 
     882                    } 
    857883 
    858884                    if (c.colorMode == ColorMode.UNICOLOR_HEAT_0) { 
     
    947973 
    948974            public double getXCord(double x) { 
    949                 double xRel = (x - tempXScaleMin) / (tempXScaleMax - tempXScaleMin); 
     975                double xRel = (x + xOffset - tempXScaleMin) / (tempXScaleMax - tempXScaleMin); 
    950976                return (getWidth() - 1) * xRel; 
    951977            } 
Note: See TracChangeset for help on using the changeset viewer.