A layer optimized for huge number of curves having all the same X sampling. More...
#include <XUniqueYColorLines.h>
Public Slots | |
void | setColor (int curveIndex, int red, int green, int blue) |
Signals | |
void | dataSelected (int id, const QVector< int > *indexList) |
Public Member Functions | |
virtual void | addProperties (PropertyProxy *pp) |
Rect | boundingRect () const |
void | clear () |
const QColor * | colors () const |
int | curveCount () |
void | divYbyX (double constant) |
virtual bool | hasProperties () |
double | lineWeight () const |
double | lineWeightMM () const |
void | mulYbyX (double constant) |
virtual void | properties (PropertyWidget *w) const |
virtual void | removeProperties (PropertyProxy *pp) |
void | setColor (int index, const QColor &col) |
void | setColors (QColor *col) |
void | setLineWeight (double lw) |
void | setPointCount (int nCurve, int nX) |
virtual void | setProperty (uint wid, int pid, QVariant val) |
virtual bool | trackRectangle (int, double rx1, double ry1, double rx2, double ry2, Qt::KeyboardModifiers) |
const double * | x () const |
double * | x () |
virtual const QString & | xml_tagName () const |
XUniqueYColorLines (AxisWindow *parent=0) | |
const double * | y () const |
double * | y () |
~XUniqueYColorLines () | |
Static Public Attributes | |
static const QString | xmlXUniqueYColorLinesTag = "XUniqueYColorLines" |
Protected Member Functions | |
virtual void | paintData (const LayerPainterRequest &lp, QPainter &p, double dotpercm) const |
virtual bool | xml_setBinaryData (XML_SETBINARYDATA_ARGS) |
virtual void | xml_writeBinaryData (XML_WRITEBINARYDATA_ARGS) const |
virtual void | xml_writeProperties (XML_WRITEPROPERTIES_ARGS) const |
Protected Attributes | |
QColor * | _colors |
int | _curveCount |
double | _lineWeight |
XYColorLinesProperties * | _propertiesTab |
double * | _x |
int | _xCount |
double * | _y |
Properties | |
double | lineWeight |
A layer optimized for huge number of curves having all the same X sampling.
SciFigs::XUniqueYColorLines::XUniqueYColorLines | ( | AxisWindow * | parent = 0 | ) |
Description of constructor still missing
References _colors, _curveCount, _lineWeight, _propertiesTab, _x, _xCount, _y, and TRACE.
: GraphContentLayer(parent) { TRACE; _curveCount=0; _xCount=0; _x=0; _y=0; _colors=0; _lineWeight=0.1; _propertiesTab=0; }
void SciFigs::XUniqueYColorLines::addProperties | ( | PropertyProxy * | pp | ) | [virtual] |
Setup property editor
Reimplemented from SciFigs::GraphContentLayer.
References SciFigs::XYColorLines::_tab, QGpGuiTools::PropertyProxy::addReference(), QGpGuiTools::PropertyProxy::addTab(), QGpGuiTools::PropertyProxy::setCurrentTab(), QGpCoreTools::tr(), TRACE, and w.
{ TRACE; if(pp->setCurrentTab(XYColorLines::_tab)) { pp->addReference(this); } else { XYColorLinesProperties * w=new XYColorLinesProperties; pp->addTab(XYColorLines::_tab, tr("Color Lines"), w, this); } }
Rect SciFigs::XUniqueYColorLines::boundingRect | ( | ) | const [virtual] |
Implements SciFigs::GraphContentLayer.
References _curveCount, _x, _xCount, _y, QGpCoreTools::Rect::add(), TRACE, and y().
void SciFigs::XUniqueYColorLines::clear | ( | ) |
References _colors, _curveCount, _x, _xCount, _y, and TRACE.
Referenced by MonoStation::StationResults::clear(), ArrayGui::ArrayResponse::setArray(), setPointCount(), MonoStation::StationResults::setWindows(), PtMotionResults::updateSignals(), and ~XUniqueYColorLines().
const QColor* SciFigs::XUniqueYColorLines::colors | ( | ) | const [inline] |
Referenced by MonoStation::StationResults::addWindows().
{return _colors;}
int SciFigs::XUniqueYColorLines::curveCount | ( | ) | [inline] |
{return _curveCount;}
void SciFigs::XUniqueYColorLines::dataSelected | ( | int | id, |
const QVector< int > * | indexList | ||
) | [signal] |
Referenced by trackRectangle().
void SciFigs::XUniqueYColorLines::divYbyX | ( | double | constant | ) |
References _curveCount, _x, _xCount, _y, TRACE, and y().
Referenced by MonoStation::StationResults::integrate().
virtual bool SciFigs::XUniqueYColorLines::hasProperties | ( | ) | [inline, virtual] |
Reimplemented from SciFigs::GraphContentLayer.
{return true;}
double SciFigs::XUniqueYColorLines::lineWeight | ( | ) | const [inline] |
Referenced by paintData().
{return _lineWeight;}
double SciFigs::XUniqueYColorLines::lineWeightMM | ( | ) | const [inline] |
Referenced by properties().
{return _lineWeight*10.0;}
void SciFigs::XUniqueYColorLines::mulYbyX | ( | double | constant | ) |
References _curveCount, _x, _xCount, _y, TRACE, and y().
Referenced by MonoStation::StationResults::derivate().
void SciFigs::XUniqueYColorLines::paintData | ( | const LayerPainterRequest & | lp, |
QPainter & | p, | ||
double | dotpercm | ||
) | const [protected, virtual] |
Implements SciFigs::GraphContentLayer.
References _colors, _curveCount, _lineWeight, _x, _xCount, _y, SciFigs::GraphContentOptions::checkOrigin(), lineWeight(), SciFigs::LayerPainterRequest::options(), QGpCoreTools::Point2D::setX(), QGpCoreTools::Point2D::setY(), SciFigs::LayerPainterRequest::size(), SciFigs::LayerPainterRequest::terminated(), TRACE, SciFigs::GraphContentOptions::xr2s(), y(), and SciFigs::GraphContentOptions::yr2s().
{ TRACE; if( !_curveCount || !_xCount) return ; const GraphContentOptions& gc=lp.options(); int h=lp.size().height(); Point2D * realPoints=new Point2D[_xCount]; int * screenX=new int[_xCount]; for(int i=0;i < _xCount;i++ ) { realPoints[i].setX(_x[i]); screenX[i]=gc.xr2s(_x[i]); } double * y=_y; QPoint pscreen1, pscreen2; int lineWeight=(int) floor(_lineWeight * dotpercm + 0.5); if(lineWeight<1) lineWeight=1; QPen currentPen(Qt::black, lineWeight, Qt::SolidLine, Qt::SquareCap, Qt::RoundJoin); for(int i=0;i < _curveCount;i++ ) { if(lp.terminated()) { delete [] realPoints; delete [] screenX; return; } QPolygon ap(_xCount); if(_colors) currentPen.setColor(_colors[ i ] ); p.setPen(currentPen); for(int j=0;j < _xCount;j++ ) { realPoints[j].setY(y[j]); } y+=_xCount; Point2D * p1=realPoints, *p2; pscreen2.setX(screenX[0]); int subCurveCount=0; for(int j=1;j < _xCount;j++ ) { p2=p1 + 1; pscreen1.setX(screenX[j-1] ); pscreen2.setX(screenX[j] ); if(gc.yr2s( *p1, *p2, pscreen1, pscreen2) ) { gc.checkOrigin(pscreen1, pscreen2, h); if(subCurveCount==0) { ap.setPoint(0, pscreen1); subCurveCount=1; } else { if(ap.point(subCurveCount - 1)!=pscreen1) { p.drawPolyline (ap.data(), subCurveCount); ap.setPoint(0, pscreen1); subCurveCount=1; } } ap.setPoint(subCurveCount, pscreen2); subCurveCount++; } else if(subCurveCount > 1) { p.drawPolyline (ap.data(), subCurveCount); subCurveCount=0; } p1=p2; } if(subCurveCount > 1) p.drawPolyline (ap.data(), subCurveCount); } delete [] realPoints; delete [] screenX; }
void SciFigs::XUniqueYColorLines::properties | ( | PropertyWidget * | w | ) | const [virtual] |
Reimplemented from SciFigs::GraphContentLayer.
References SciFigs::XYColorLinesProperties::LineWeight, lineWeightMM(), QGpGuiTools::PropertyWidget::setValue(), and TRACE.
{ TRACE; w->setValue(XYColorLinesProperties::LineWeight, lineWeightMM()); }
void SciFigs::XUniqueYColorLines::removeProperties | ( | PropertyProxy * | pp | ) | [virtual] |
Clean property editor
Reimplemented from SciFigs::GraphContentLayer.
References SciFigs::XYColorLines::_tab, QGpGuiTools::PropertyProxy::removeTab(), and TRACE.
{ TRACE; pp->removeTab(XYColorLines::_tab, this); }
void SciFigs::XUniqueYColorLines::setColor | ( | int | index, |
const QColor & | col | ||
) |
References _colors, and TRACE.
Referenced by MonoStation::StationResults::setWindowColor().
void SciFigs::XUniqueYColorLines::setColor | ( | int | curveIndex, |
int | red, | ||
int | green, | ||
int | blue | ||
) | [slot] |
References _colors, _curveCount, and TRACE.
{ TRACE; LayerLocker ll(this); if(curveIndex < 0 || curveIndex >= _curveCount || !_colors) return ; _colors[ curveIndex ]=QColor(red, green, blue); }
void SciFigs::XUniqueYColorLines::setColors | ( | QColor * | col | ) |
References _colors, and TRACE.
Referenced by MonoStation::StationResults::addWindows(), and MonoStation::StationResults::setWindows().
void SciFigs::XUniqueYColorLines::setLineWeight | ( | double | lw | ) | [inline] |
Referenced by ArrayGui::ArrayResponse::createObjects(), setProperty(), and MonoStation::StationResults::setWindows().
{_lineWeight=lw;}
void SciFigs::XUniqueYColorLines::setPointCount | ( | int | nCurves, |
int | nX | ||
) |
This is the unique function you have to call to populate this layer with lines.
References _curveCount, _x, _xCount, _y, clear(), and TRACE.
Referenced by MonoStation::StationResults::addWindows(), MonoStation::StationResults::setWindows(), and PtMotionResults::updateSignals().
{ TRACE; LayerLocker ll(this); if(_curveCount>0 && nX==_xCount) { if(nCurves==0) { clear(); return; } int minNCurves=nCurves; if(_curveCount<minNCurves) minNCurves=_curveCount; double * new_y=new double [ nCurves*nX ]; memcpy(new_y, _y, minNCurves * nX * sizeof(double)); delete [] _y; _y=new_y; _curveCount=nCurves; } else { clear(); _curveCount=nCurves; _xCount=nX; if(_xCount > 0) _x=new double[ _xCount ]; if(_curveCount > 0) _y=new double [ _xCount * _curveCount ]; } }
void SciFigs::XUniqueYColorLines::setProperty | ( | uint | wid, |
int | pid, | ||
QVariant | val | ||
) | [virtual] |
Reimplemented from SciFigs::GraphContentLayer.
References SciFigs::GraphContent::deepUpdate(), SciFigs::GraphContentLayer::graphContent(), SciFigs::XYColorLinesProperties::LineWeight, setLineWeight(), and TRACE.
{ TRACE; switch(pid) { case XYColorLinesProperties::LineWeight: setLineWeight(val.toDouble() * 0.1); graphContent()->deepUpdate(); break; default: break; } }
bool SciFigs::XUniqueYColorLines::trackRectangle | ( | int | id, |
double | rx1, | ||
double | ry1, | ||
double | rx2, | ||
double | ry2, | ||
Qt::KeyboardModifiers | |||
) | [virtual] |
When the user select curve using the mouse pointer
Reimplemented from SciFigs::GraphContentLayer.
References _curveCount, _x, _xCount, _y, dataSelected(), QGpCoreTools::Rect::includes(), TRACE, and y().
{ TRACE; // Select the points inside the rectangle and call dataSelected(QVector * indexList) // This trackRectangle function can be redefined in sub-classes Rect r(rx1, ry1, rx2, ry2); QVector<int> * indexList=new QVector<int>; double * y=_y; for(int i=0;i < _curveCount;i++ ) { for(int j=1;j < _xCount;j++ ) { if(r.includes(_x[j-1], y[j-1], _x[j], y[j] )) { indexList->push_back(i); break; } } y+=_xCount; } if(!indexList->isEmpty()) emit dataSelected(id, indexList); delete indexList; return true; }
const double* SciFigs::XUniqueYColorLines::x | ( | ) | const [inline] |
Referenced by MonoStation::StationResults::addPeak(), MonoStation::StationResults::printWindows(), MonoStation::StationResults::setAverageLayer(), MonoStation::StationResults::setPeak(), MonoStation::StationResults::setPeakLayer(), MonoStation::StationResults::setWindow(), MonoStation::StationResults::setWindows(), and PtMotionResults::updateSignals().
{return _x;}
double* SciFigs::XUniqueYColorLines::x | ( | ) | [inline] |
{return _x;}
bool SciFigs::XUniqueYColorLines::xml_setBinaryData | ( | XML_SETBINARYDATA_ARGS | ) | [protected, virtual] |
This function must be re-implemented in all classes dealing with binary data that cannot be saved in an ASCII xml file (e.g. due to the amount of data).
See also xml_writeBinaryData().
The difference between xml_setBinaryData() and xml_setBinaryData200410() is detected by the type of tag at the beginning of each block if it can be read with QString ==> 200510, else try with a normal C string, if it match the current tag then execute xml_setBinaryData200411().
See also xml_setBinaryData200411() to maintain compatibility with previous versions of xml storages.
For the arguments of this function use Macro XML_SETBINARYDATA_ARGS.
Reimplemented from QGpCoreTools::XMLClass.
References _colors, _curveCount, _x, _xCount, _y, SciFigs::XYColorLines::restoreBinaryColorVector(), and TRACE.
{ TRACE; Q_UNUSED(context); s >> _curveCount; s >> _xCount; if(_curveCount > 0) { XYColorLines::restoreBinaryColorVector(s, _colors, _curveCount, context); _x=new double [ _xCount ]; s.readRawData(( char * ) _x, sizeof(double) * _xCount); _y=new double [ _xCount * _curveCount ]; s.readRawData(( char * ) _y, sizeof(double) * _xCount * _curveCount); } return true; }
virtual const QString& SciFigs::XUniqueYColorLines::xml_tagName | ( | ) | const [inline, virtual] |
Reimplemented from SciFigs::GraphContentLayer.
{return xmlXUniqueYColorLinesTag;}
void SciFigs::XUniqueYColorLines::xml_writeBinaryData | ( | XML_WRITEBINARYDATA_ARGS | ) | const [protected, virtual] |
This function must be re-implemented in all classes dealing with binary data that cannot be saved in an ASCII xml file (e.g. due to the amount of data).
The way binary data is stored drastically changed in November 2006 with the introduction of tar.gz structures for xml files. Each class willing to store binary data can automatically generate a new file (with an automatic file name) in the .tar.gz structure by sending bytes to s.
See also xml_setBinaryData().
For the arguments of this function use Macro XML_WRITEBINARYDATA_ARGS.
Reimplemented from QGpCoreTools::XMLClass.
References _colors, _curveCount, _x, _xCount, _y, SciFigs::XYColorLines::saveBinaryColorVector(), and TRACE.
{ TRACE; Q_UNUSED(context); s << _curveCount; s << _xCount; XYColorLines::saveBinaryColorVector(s, _colors, _curveCount); s.writeRawData(( const char * ) _x, sizeof(double) * _xCount); s.writeRawData(( const char * ) _y, sizeof(double) * _xCount * _curveCount); }
void SciFigs::XUniqueYColorLines::xml_writeProperties | ( | XML_WRITEPROPERTIES_ARGS | ) | const [protected, virtual] |
Reimplemented from SciFigs::GraphContentLayer.
References SciFigs::XMLSciFigs::data(), TRACE, and QGpCoreTools::XMLClass::writeBinaryData().
{ TRACE; GraphContentLayer::xml_writeProperties(s, context); XMLSciFigs * scifigsContext=static_cast<XMLSciFigs *>(context); if(scifigsContext->data()) writeBinaryData(s, context); }
const double* SciFigs::XUniqueYColorLines::y | ( | ) | const [inline] |
double* SciFigs::XUniqueYColorLines::y | ( | ) | [inline] |
{return _y;}
QColor* SciFigs::XUniqueYColorLines::_colors [protected] |
Referenced by clear(), paintData(), setColor(), setColors(), xml_setBinaryData(), xml_writeBinaryData(), and XUniqueYColorLines().
int SciFigs::XUniqueYColorLines::_curveCount [protected] |
Referenced by boundingRect(), clear(), divYbyX(), mulYbyX(), paintData(), setColor(), setPointCount(), trackRectangle(), xml_setBinaryData(), xml_writeBinaryData(), and XUniqueYColorLines().
double SciFigs::XUniqueYColorLines::_lineWeight [protected] |
Referenced by paintData(), and XUniqueYColorLines().
Referenced by XUniqueYColorLines().
double* SciFigs::XUniqueYColorLines::_x [protected] |
Referenced by boundingRect(), clear(), divYbyX(), mulYbyX(), paintData(), setPointCount(), trackRectangle(), xml_setBinaryData(), xml_writeBinaryData(), and XUniqueYColorLines().
int SciFigs::XUniqueYColorLines::_xCount [protected] |
Referenced by boundingRect(), clear(), divYbyX(), mulYbyX(), paintData(), setPointCount(), trackRectangle(), xml_setBinaryData(), xml_writeBinaryData(), and XUniqueYColorLines().
double* SciFigs::XUniqueYColorLines::_y [protected] |
Referenced by boundingRect(), clear(), divYbyX(), mulYbyX(), paintData(), setPointCount(), trackRectangle(), xml_setBinaryData(), xml_writeBinaryData(), and XUniqueYColorLines().
const QString SciFigs::XUniqueYColorLines::xmlXUniqueYColorLinesTag = "XUniqueYColorLines" [static] |
double SciFigs::XUniqueYColorLines::lineWeight [read, write] |