X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.history%2Fsrc%2Forg%2Fsimantics%2Fhistory%2Fimpl%2FCollectorImpl.java;h=e956b37117fcc365cbb85cf0e2b339752d814bcc;hp=d6dd6d9b33f19baf7bca38f773d99f9530508f6e;hb=b885083762a43ec97162a5f77df4fd5f85e28979;hpb=30ca6dab0384054fec22139c2e88fbcc31a463cd diff --git a/bundles/org.simantics.history/src/org/simantics/history/impl/CollectorImpl.java b/bundles/org.simantics.history/src/org/simantics/history/impl/CollectorImpl.java index d6dd6d9b3..e956b3711 100644 --- a/bundles/org.simantics.history/src/org/simantics/history/impl/CollectorImpl.java +++ b/bundles/org.simantics.history/src/org/simantics/history/impl/CollectorImpl.java @@ -811,58 +811,69 @@ public class CollectorImpl implements Collector { boolean condition = makeNewBand || (!i.hasEndTime && i.itemState.count==2); - if(i.stream.size() > 0 ) { //!i.itemState.ooDeadband) { + if (i.stream.size() > 0) { /// Extend existing band // Extend endTime value - if (!i.hasEndTime) { - i.current.setTime( time.getBinding(), time.getValue() ); - } else { - i.current.setEndTime( time.getBinding(), time.getValue() ); + + // This ensures that a value band's end time isn't the same + // as the next band's start time which makes it possible to + // know what are the timestamps between which the item value + // changed from a to b. This allows us to more correctly render + // steps and sloped lines accoring to the actual data. + if (!i.itemState.ooDeadband || isMinMaxFormat) { + if (!i.hasEndTime) { + i.current.setTime( time.getBinding(), time.getValue() ); + } else { + i.current.setEndTime( time.getBinding(), time.getValue() ); + } } - if (i.itemState.ooDeadband) { + + if (i.itemState.ooDeadband || isMinMaxFormat) { if (isValidValue) { // Set last value if (i.current.hasLastValue()) { i.current.setLastValue( value.getBinding(), value.getValue() ); } - // Add sum - if (i.current.hasAvg() && i.isNumeric && !isNanValue && !restep) { - double duration = (currentTime - i.itemState.firstTime); - if(duration < 1e-9) { - i.current.setAvg( Bindings.DOUBLE, 0.0 ); - } else { - i.current.setAvg( Bindings.DOUBLE, i.itemState.sum / duration); + if (i.isNumeric && !isNanValue) { + // Add sum + if (i.current.hasAvg() && !restep) { + double duration = (currentTime - i.itemState.firstTime); + if(duration < 1e-9) { + i.current.setAvg( Bindings.DOUBLE, 0.0 ); + } else { + i.current.setAvg( Bindings.DOUBLE, i.itemState.sum / duration); + } } - } - // Update min-max - if (i.current.hasMin() && i.isNumeric && !isNanValue) { - Binding minBinding = i.current.getMinBinding(); - Object prevMinValue = i.current.getMin(); - Object currentValueWithMinBinding = value.getValue( minBinding ); - int diff = minBinding.compare( prevMinValue, currentValueWithMinBinding ); - if (diff>0) i.current.setMin( minBinding, currentValueWithMinBinding ); - } - if (i.current.hasMax() && i.isNumeric && !isNanValue) { - Binding maxBinding = i.current.getMaxBinding(); - Object prevMaxValue = i.current.getMax(); - Object currentValueWithMaxBinding = value.getValue( maxBinding ); - int diff = maxBinding.compare( prevMaxValue, currentValueWithMaxBinding ); - if (diff<0) i.current.setMax( maxBinding, currentValueWithMaxBinding ); - } + // Update min-max + if (i.current.hasMin()) { + Binding minBinding = i.current.getMinBinding(); + Object prevMinValue = i.current.getMin(); + Object currentValueWithMinBinding = value.getValue( minBinding ); + int diff = minBinding.compare( prevMinValue, currentValueWithMinBinding ); + if (diff>0) i.current.setMin( minBinding, currentValueWithMinBinding ); + } + if (i.current.hasMax()) { + Binding maxBinding = i.current.getMaxBinding(); + Object prevMaxValue = i.current.getMax(); + Object currentValueWithMaxBinding = value.getValue( maxBinding ); + int diff = maxBinding.compare( prevMaxValue, currentValueWithMaxBinding ); + if (diff<0) i.current.setMax( maxBinding, currentValueWithMaxBinding ); + } - // Update median - if (i.current.hasMedian() && i.isNumeric && !isNanValue) { - Double median = i.itemState.median.getMedian(); - i.current.setMedian( Bindings.DOUBLE, median); + // Update median + if (i.current.hasMedian()) { + Double median = i.itemState.median.getMedian(); + i.current.setMedian( Bindings.DOUBLE, median); + } } } else { i.current.setValueNull(); } - // Add count + // Update count if (i.current.hasCount()) { i.current.setCount( i.itemState.count ); }