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] |