Brief description of class still missing.
Full description of class still missing
Reimplemented from SciFigs::LineLayer.
References SciFigs::LineLayer::begin(), SciFigs::GraphContentOptions::checkOrigin(), SciFigs::Pen::color(), SciFigs::PlotLine2D::count(), SciFigs::LineLayer::end(), QGpCoreTools::Angle::initRadians(), SciFigs::AbstractLine::isValid(), SciFigs::AbstractLine::isVisible(), SciFigs::LineLayer::line(), SciFigs::LayerPainterRequest::options(), SciFigs::Symbol::pen(), SciFigs::PlotLine2D::point(), SciFigs::LineLayer::pointOptions(), SciFigs::GraphContentOptions::r2s(), QGpCoreTools::Point2D::rotate(), SciFigs::LayerPainterRequest::size(), SciFigs::AbstractLine::symbol(), SciFigs::LayerPainterRequest::terminated(), and TRACE.
{
TRACE;
LineLayer::paintData(lp, p, dotpercm);
const GraphContentOptions& gc=lp.options();
int h=lp.size().height();
p.setRenderHints(QPainter::Antialiasing, true);
p.setPen(Qt::NoPen);
QRectF r;
QList<AbstractLine *>::const_iterator it;
QMutexLocker ml(&_textPathsMutex);
QList<QPainterPath>::const_iterator itText=_textPaths.begin();
p.setPen(Qt::NoPen);
for(it=begin() ;it!=end();++it) {
if(lp.terminated()) return;
PlotLine2D * line=static_cast<PlotLine2D *>( *it);
int countPoints=line->count();
p.setBrush(line->symbol().pen().color());
if(countPoints && line->isVisible()) {
int i=0;
Point p1;
while(i<countPoints) {
if(line->isValid(i)) {
p1=line->point(i, pointOptions());
break;
}
i++;
}
if(i>=countPoints) continue ;
QPoint pscreen1, pscreen2;
for(i++;i < countPoints;i++ ) {
if(!line->isValid(i)) continue;
Point p2=line->point(i, pointOptions());
if(gc.r2s(p1, p2, pscreen1, pscreen2) ) {
gc.checkOrigin(pscreen1, pscreen2, h);
Angle angle(pscreen2.x()-pscreen1.x(), pscreen2.y()-pscreen1.y());
angle.initRadians();
angle.initDegrees();
QPoint pMidScreen=(pscreen2+pscreen1)*0.5;
r=itText->boundingRect();
int originalTop=(int) r.top();
r.moveCenter(pMidScreen);
p.save();
p.rotate(angle.degrees());
QPointF c(( r.left() + r.right()) * 0.5, r.bottom());
Point2D pt(c.x(), c.y());
pt.rotate(angle);
p.translate(pt.x() - c.x() + r.left(), pt.y() - c.y() + r.top());
p.setOpacity(0.7);
p.fillRect( -4, originalTop-4, (int)r.width()+8, (int)r.height()+8, Qt::white);
p.setOpacity(1);
p.drawPath(*itText);
itText++;
p.restore();
}
p1=p2;
}
}
}
p.setRenderHints(QPainter::Antialiasing, false);
}
Reimplemented from SciFigs::GraphContentLayer.
References QGpCoreTools::Point2D::azimuthTo(), SciFigs::LineLayer::begin(), SciFigs::GraphContentOptions::checkOrigin(), SciFigs::PlotLine2D::count(), DegreesFromX, DegreesFromY, SciFigs::LineLayer::end(), QGpCoreTools::Angle::initRadians(), SciFigs::AbstractLine::isValid(), SciFigs::AbstractLine::isVisible(), SciFigs::LineLayer::line(), SciFigs::LayerPainterRequest::options(), SciFigs::PlotLine2D::point(), SciFigs::LineLayer::pointOptions(), SciFigs::GraphContentOptions::printBitmap(), SciFigs::GraphContentOptions::r2s(), RatioXOverY, RatioYOverX, SAFE_UNINITIALIZED, SciFigs::GraphicObject::scaleFont(), SciFigs::SciFigsGlobal::screenResolution(), SciFigs::LayerPainterRequest::size(), TRACE, QGpCoreTools::Point2D::x(), and QGpCoreTools::Point2D::y().
{
TRACE;
QMutexLocker ml(&_textPathsMutex);
_textPaths.clear();
const GraphContentOptions& gc=lp.options();
int h=lp.size().height();
double coef=dotpercm/SciFigsGlobal::screenResolution();
QFont scaledFont=_textFont;
if(coef!=1.0 && gc.printBitmap())
GraphicObject::scaleFont(scaledFont, coef);
QRect r;
QList<AbstractLine *>::const_iterator it;
for(it=begin() ;it!=end();++it) {
PlotLine2D * line=static_cast<PlotLine2D *>( *it);
int countPoints=line->count();
if(countPoints && line->isVisible()) {
int i=0;
Point p1;
while(i<countPoints) {
if(line->isValid(i)) {
p1=line->point(i, pointOptions());
break;
}
i++;
}
if(i>=countPoints) continue ;
QPoint pscreen1, pscreen2;
for(i++;i < countPoints;i++ ) {
if(!line->isValid(i)) continue;
Point p2=line->point(i, pointOptions());
if(gc.r2s(p1, p2, pscreen1, pscreen2) ) {
gc.checkOrigin(pscreen1, pscreen2, h);
Angle angle(pscreen2.x()-pscreen1.x(), pscreen2.y()-pscreen1.y());
angle.initRadians();
angle.initDegrees();
QPoint pMidScreen=(pscreen2+pscreen1)*0.5;
double value;
SAFE_UNINITIALIZED(value,0);
switch (_format) {
case DegreesFromX: value=p1.azimuthTo(p2); break;
case DegreesFromY: value=0.5*M_PI-p1.azimuthTo(p2); break;
case RatioYOverX: value=(p2.y()-p1.y())/(p2.x()-p1.x()); break;
case RatioXOverY: value=(p2.x()-p1.x())/(p2.y()-p1.y()); break;
}
QPainterPath p;
p.addText(0, 0, scaledFont, QString::number(fabs(value), 'f', 1) );
_textPaths.append(p);
}
p1=p2;
}
}
}
}