| 100 | } |
| 101 | |
| 102 | bool interaction::InteractionContext::UpdateRange(std::array<double, 2> newRange) { |
| 103 | double rangeStart = newRange[0]; |
| 104 | double rangeEnd = newRange[1]; |
| 105 | |
| 106 | rangeStart = fmax(0, rangeStart); |
| 107 | rangeEnd = fmin(1, rangeEnd); |
| 108 | |
| 109 | std::size_t valueSize = values_.size(); |
| 110 | std::size_t valueStart = static_cast<std::size_t>(valueSize * rangeStart); |
| 111 | std::size_t valueEnd = fmin(static_cast<std::size_t>(valueSize * rangeEnd), valueSize - 1); |
| 112 | |
| 113 | // chart_->GetLogTracer()->trace("UpdateRange range: %lu", (valueEnd - valueStart)); |
| 114 | |
| 115 | if((valueEnd - valueStart) < minCount_ || (valueEnd - valueStart) > maxCount_) { |
| 116 | return false; |
| 117 | } |
| 118 | range_ = {rangeStart, rangeEnd}; |
| 119 | // 从原始数据里截取需要显示的数据 |
| 120 | auto newValue = JsonArraySlice(values_, valueStart, valueEnd); |
| 121 | |
| 122 | return this->Repaint(newValue, valueStart, valueEnd); |
| 123 | } |
| 124 | |
| 125 | bool interaction::InteractionContext::Repaint(nlohmann::json &newValues, std::size_t valueStart, std::size_t valueEnd) { |
| 126 | const std::string &xField = this->chart_->GetXScaleField(); |
no test coverage detected