A circular mask. More...
#include <CircleMask.h>
Public Member Functions | |
| virtual Rect | boundingRect () const |
| CircleMask (AxisWindow *parent=0) | |
| virtual void | paintData (const LayerPainterRequest &lp, QPainter &p, double dotpercm) const |
| void | set (double x, double y, double rx, double ry, QColor col) |
| virtual const QString & | xml_tagName () const |
Static Public Attributes | |
| static const QString | xmlCircleMaskTag = "CircleMask" |
Protected Member Functions | |
| void | xml_polich (XML_POLISH_ARGS) |
A circular mask.
Mask all inferior layers and leave only a visible circle.
TODO: add a property widget
| SciFigs::CircleMask::CircleMask | ( | AxisWindow * | parent = 0 | ) |
Constructs a circle centered around 0,0 with a radius of 1.
References SciFigs::CircleViewer::add(), and TRACE.
: CircleViewer(parent) { TRACE; add(0, 0, 1, 1, 0.0, Qt::white); }
| Rect SciFigs::CircleMask::boundingRect | ( | ) | const [virtual] |
Returns bounding rectangle.
Reimplemented from SciFigs::CircleViewer.
References SciFigs::CircleViewer::_items, QGpCoreTools::Ellipse::center(), TRACE, QGpCoreTools::Point2D::x(), QGpCoreTools::Ellipse::xRadius(), QGpCoreTools::Point2D::y(), and QGpCoreTools::Ellipse::yRadius().
| void SciFigs::CircleMask::paintData | ( | const LayerPainterRequest & | lp, |
| QPainter & | p, | ||
| double | dotpercm | ||
| ) | const [virtual] |
Paints the mask.
Reimplemented from SciFigs::CircleViewer.
References SciFigs::CircleViewer::Item::_color, SciFigs::CircleViewer::Item::_ellipse, SciFigs::CircleViewer::_items, QGpCoreTools::abs(), SciFigs::GraphContentOptions::ax(), SciFigs::GraphContentOptions::ay(), QGpCoreTools::Ellipse::center(), QGpCoreTools::Rect::height(), QGpCoreTools::Ellipse::majorRadius(), QGpCoreTools::Ellipse::minorRadius(), SciFigs::LayerPainterRequest::options(), SciFigs::CircleViewer::Limits::polarLimits(), TRACE, QGpCoreTools::Rect::width(), QGpCoreTools::Point2D::x(), QGpCoreTools::Rect::x1(), SciFigs::GraphContentOptions::xr2s(), SciFigs::GraphContentOptions::xVisMax(), SciFigs::GraphContentOptions::xVisMin(), QGpCoreTools::Point2D::y(), QGpCoreTools::Rect::y1(), SciFigs::GraphContentOptions::yr2s(), SciFigs::GraphContentOptions::yVisMax(), and SciFigs::GraphContentOptions::yVisMin().
{
TRACE;
const GraphContentOptions& gc=lp.options();
Limits limits(gc);
double startPhi, stopPhi;
const Item& item=_items[0];
const Ellipse& ell=item._ellipse;
if(limits.polarLimits(ell, startPhi, stopPhi)) {
QPainterPath path;
Rect r(gc.xr2s(gc.xVisMin()), gc.yr2s(gc.yVisMin()), gc.xr2s(gc.xVisMax()), gc.yr2s(gc.yVisMax()));
path.addRect((int)r.x1(), (int)r.y1(), (int)r.width(), (int)r.height());
int rx=abs((int)(ell.majorRadius()*gc.ax()));
int ry=abs((int)(ell.minorRadius()*gc.ay()));
const Point2D& c=ell.center();
int orx=gc.xr2s(c.x())-rx;
int ory=gc.yr2s(c.y())-ry;
int minphi=(int)floor(Angle::radiansToDegrees(startPhi)*16.0);
int dphi=(int)ceil(Angle::radiansToDegrees(stopPhi)*16.0)-minphi;
path.arcTo(orx, ory, rx + rx, ry + ry, minphi, dphi);
p.setPen(QPen(Qt::NoPen));
p.setBrush(item._color);
p.drawPath(path);
}
}
| void SciFigs::CircleMask::set | ( | double | x, |
| double | y, | ||
| double | rx, | ||
| double | ry, | ||
| QColor | col | ||
| ) |
Sets circle position, circle sizes and mask color.
References TRACE.
Referenced by Simulator::on_gridSizeEdit_valueChanged().
{
TRACE;
CircleViewer::set(0, x, y, rx, ry, 0.0, col);
}
| void SciFigs::CircleMask::xml_polich | ( | XML_POLISH_ARGS | ) | [protected] |
Makes sure that there is only one circle.
References SciFigs::CircleViewer::resize(), and TRACE.
| virtual const QString& SciFigs::CircleMask::xml_tagName | ( | ) | const [inline, virtual] |
Reimplemented from SciFigs::CircleViewer.
{return xmlCircleMaskTag;}
const QString SciFigs::CircleMask::xmlCircleMaskTag = "CircleMask" [static] |