/usr/include/Wt/Chart/WScatterData is in libwt-dev 3.3.4+dfsg-6ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 | // This may look like C code, but it's really -*- C++ -*-
/*
* Copyright (C) 2013 Emweb bvba, Leuven, Belgium.
*
* See the LICENSE file for terms of use.
*/
#ifndef CHART_SCATTERDATA_H
#define CHART_SCATTERDATA_H
#include <Wt/WModelIndex>
#include <Wt/Chart/WAbstractDataSeries3D>
#include <Wt/Chart/WCartesian3DChart>
#include <Wt/Chart/WSelection>
namespace Wt {
class WMemoryResource;
namespace Chart {
/*! \class WScatterData
* \brief Class representing a collection of points for on a 3D chart.
*
* General information can be found at WAbstractDataSeries3D. The model should
* be structured as a table where every row represents a point. In the simplest
* case, there are three columns representing the x-, y- and z-values. By
* default, this is column 0 for X, column 1 for Y and column 2 for Z. It is
* also possible to provide an additional column containing information on the
* color for each point. The same is possible for the size. Color-information
* in the model should be present as a WColor.
*
* If these extra columns are not included, the MarkerBrushColorRole and
* MarkerScaleFactorRole can still be used to style individual points. These
* dataroles should be set on the values in the column containing the z-values.
*
* The figure below shows an upward spiral of points, with droplines enabled
* and a pointsize of 5 pixels.
*
* \image html spiral.png "An example of WScatterData"
*
* \ingroup charts
*/
class WT_API WScatterData : public WAbstractDataSeries3D {
public:
/*! \brief Constructor
*/
WScatterData(WAbstractItemModel *model);
/*! \brief Enables or disables droplines for all points.
*
* Enabling droplines will cause a line to be drawn from every point to the
* the ground-plane of the chart's plotcube. By default the droplines are
* disabled.
*
* \sa setDroplinesPen()
*/
void setDroplinesEnabled(bool enable = true);
/*! \brief Returns whether droplines are enabled.
*
* \sa setDroplinesEnabled(), setDroplinesPen()
*/
bool droplinesEnabled() const { return droplinesEnabled_; }
/*! \brief Sets the pen that is used to draw droplines.
*
* The default pen is a default constructed WPen.
*
* Note: only the width and color of the pen are used.
*
* \sa setDroplinesEnabled()
*/
void setDroplinesPen(const WPen &pen);
/*! \brief Returns the pen that is used to draw droplines.
*
* \sa setDroplinesEnabled(), setDroplinesPen()
*/
WPen droplinesPen() const { return droplinesPen_; }
/*! \brief Sets the column-index from the model that is used for the
* x-coordinate of all points.
*
* The default X column index is 0.
*/
void setXSeriesColumn(int columnNumber) { XSeriesColumn_ = columnNumber; }
/*! \brief Returns the column-index from the model that is used for the
* x-coordinate of all points.
*
* \sa setXSeriesColumn()
*/
int XSeriesColumn() const { return XSeriesColumn_; }
/*! \brief Sets the column-index from the model that is used for the
* y-coordinate of all points.
*
* The default X column index is 1.
*/
void setYSeriesColumn(int columnNumber) { YSeriesColumn_ = columnNumber; }
/*! \brief Returns the column-index from the model that is used for the
* y-coordinate of all points.
*
* \sa setYSeriesColumn()
*/
int YSeriesColumn() const { return YSeriesColumn_; }
/*! \brief Sets the column-index from the model that is used for the
* z-coordinate of all points.
*
* The default Z column index is 2.
*
* Note that this column is also used to check for a MarkerBrushColorRole
* and a MarkerScaleFactorRole is no color-column or size-column are set.
*
* \sa setColorColumn(), setSizeColumn()
*/
void setZSeriesColumn(int columnNumber) { ZSeriesColumn_ = columnNumber; }
/*! \brief Returns the column-index from the model that is used for the
* z-coordinate of all points.
*
* \sa setZSeriesColumn()
*/
int ZSeriesColumn() const { return ZSeriesColumn_; }
#ifndef WT_TARGET_JAVA
/*! \brief Configure a column in the model to be used for the color of the
* points.
*
* By default, the color-column is set to -1. This means there is no column
* which specifies color-values. Also, the basic mechanism of using the
* MarkerBrushColorRole (if present) is then active. The Z-seriescolumn is
* checked for the presence of this Role.
*
* /sa setZSeriesColumn()
*/
void setColorColumn(int columnNumber, ItemDataRole role = DisplayRole);
/*! \brief Configure a column in the model to be used for the size of the
* points.
*
* By default, the size-column is set to -1. This means there is no column
* which specifies size-values. Also, the basic mechanism of using the
* MarkerScaleFactorRole (if present) is then active. The Z-seriescolumn is
* checked for the presence of this Role.
*
* /sa setZSeriesColumn()
*/
void setSizeColumn(int columnNumber, ItemDataRole role = DisplayRole);
#else
void setColorColumn(int columnNumber, int role = DisplayRole);
void setSizeColumn(int columnNumber, int role = DisplayRole);
#endif
/*! \brief Pick points on this WScatterData using a single pixel.
*
* x,y are the screen coordinates of the pixel from the top left of
* the chart, and radius is the radius in pixels around that pixel.
* All points around the ray projected through the pixel within the
* given radius will be returned.
*/
std::vector<WPointSelection> pickPoints(int x, int y, int radius) const;
/*! \brief Pick points on this WScatterData inside of a rectangle.
*
* The screen coordinates (x1, y1) and (x2, y2) from the top left of
* the chart define a rectangle within which the points should be selected.
*/
std::vector<WPointSelection> pickPoints(int x1, int y1, int x2, int y2) const;
virtual double minimum(Axis axis) const;
virtual double maximum(Axis axis) const;
virtual void initializeGL() {}
virtual void paintGL() const;
virtual void updateGL();
virtual void resizeGL();
virtual void deleteAllGLResources();
private:
int countSimpleData() const;
void dataFromModel(FloatBuffer& simplePtsArray,
FloatBuffer& simplePtsSize,
FloatBuffer& coloredPtsArray,
FloatBuffer& coloredPtsSize,
FloatBuffer& coloredPtsColor);
void dropLineVertices(FloatBuffer& dataPoints,
FloatBuffer& verticesOUT);
void initShaders();
void findXRange() const;
void findYRange() const;
void findZRange() const;
int XSeriesColumn_;
int YSeriesColumn_;
int ZSeriesColumn_;
int colorColumn_;
#ifndef WT_TARGET_JAVA
ItemDataRole asColorRole_;
ItemDataRole asSizeRole_;
#else
int asColorRole_;
int asSizeRole_;
#endif
int sizeColumn_;
bool droplinesEnabled_;
WPen droplinesPen_;
mutable double xMin_, xMax_, yMin_, yMax_;
mutable bool xRangeCached_;
mutable bool yRangeCached_;
WGLWidget::Buffer vertexPosBuffer_, vertexSizeBuffer_;
WGLWidget::Buffer vertexPosBuffer2_, vertexSizeBuffer2_, vertexColorBuffer2_;
WGLWidget::Buffer lineVertBuffer_;
int vertexBufferSize_, vertexBuffer2Size_, lineVertBufferSize_;
WGLWidget::Texture colormapTexture_;
WGLWidget::Texture pointSpriteTexture_;
WGLWidget::Shader vertexShader_;
WGLWidget::Shader colVertexShader_;
WGLWidget::Shader linesVertShader_;
WGLWidget::Shader fragmentShader_;
WGLWidget::Shader colFragmentShader_;
WGLWidget::Shader linesFragShader_;
WGLWidget::Program shaderProgram_;
WGLWidget::Program colShaderProgram_;
WGLWidget::Program linesProgram_;
WGLWidget::AttribLocation posAttr_;
WGLWidget::AttribLocation posAttr2_;
WGLWidget::AttribLocation posAttrLines_;
WGLWidget::AttribLocation sizeAttr_;
WGLWidget::AttribLocation sizeAttr2_;
WGLWidget::AttribLocation colorAttr2_;
WGLWidget::UniformLocation mvMatrixUniform_;
WGLWidget::UniformLocation mvMatrixUniform2_;
WGLWidget::UniformLocation mvMatrixUniform3_;
WGLWidget::UniformLocation pMatrixUniform_;
WGLWidget::UniformLocation pMatrixUniform2_;
WGLWidget::UniformLocation pMatrixUniform3_;
WGLWidget::UniformLocation cMatrixUniform_;
WGLWidget::UniformLocation cMatrixUniform2_;
WGLWidget::UniformLocation cMatrixUniform3_;
WGLWidget::UniformLocation lineColorUniform_;
WGLWidget::UniformLocation samplerUniform_;
WGLWidget::UniformLocation pointSpriteUniform_;
WGLWidget::UniformLocation pointSpriteUniform2_;
WGLWidget::UniformLocation vpHeightUniform_;
WGLWidget::UniformLocation vpHeightUniform2_;
WGLWidget::UniformLocation offsetUniform_;
WGLWidget::UniformLocation scaleFactorUniform_;
};
}
}
#endif
|