Skip to content

File CurveRendererParams.hpp

File List > QAccelPlot > src > QAccelPlot > renderers > CurveRendererParams.hpp

Go to the documentation of this file

//
// SPDX-FileCopyrightText: 2026 Michal Grabarczyk
// SPDX-License-Identifier: GPL-3.0-only WITH Universal-FOSS-exception-1.0
//
// This file is also available under a separate commercial license.
// See COMMERCIAL-LICENSING.md for contact information.
//
#pragma once

#include "QAccelPlot/axis/Axis.hpp"
#include "QAccelPlot/series/StepMode.hpp"

#include <vector>

namespace QAccelPlot {

struct CurveChunk {
    int start;  
    int count;  
    qreal minX; 
    qreal maxX; 
    qreal minY; 
    qreal maxY; 
};

struct CurveDataView {
    const float* floatData{nullptr};
    const double* doubleData{nullptr};

    qreal x(int index) const
    {
        const auto offset = static_cast<std::size_t>(index) * 2;
        return doubleData ? static_cast<qreal>(doubleData[offset]) : static_cast<qreal>(floatData[offset]);
    }

    qreal y(int index) const
    {
        const auto offset = static_cast<std::size_t>(index) * 2 + 1;
        return doubleData ? static_cast<qreal>(doubleData[offset]) : static_cast<qreal>(floatData[offset]);
    }
};

struct CurveHitTestParams {
    CurveDataView data;                    
    int pointCount;                        
    const std::vector<CurveChunk>& chunks; 
    Axis* xAxis;                           
    Axis* yAxis;                           
    qreal width;                           
    qreal height;                          
    qreal hitThreshold;                    
    bool nonPositiveXInvalid;              
    bool nonPositiveYInvalid;              
    StepMode stepMode{StepMode::None};     
};

inline bool isEmptyChunk(const CurveChunk& chunk)
{
    return chunk.minX > chunk.maxX || chunk.minY > chunk.maxY;
}

} // namespace QAccelPlot