本文整理汇总了C++中QPolygon::last方法的典型用法代码示例。如果您正苦于以下问题:C++ QPolygon::last方法的具体用法?C++ QPolygon::last怎么用?C++ QPolygon::last使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QPolygon
的用法示例。
在下文中一共展示了QPolygon::last方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: end
bool QwtPlotPicker::end( bool ok )
{
ok = QwtPicker::end( ok );
if ( !ok )
return false;
QwtPlot *plot = QwtPlotPicker::plot();
if ( !plot )
return false;
const QPolygon points = selection();
if ( points.count() == 0 )
return false;
QwtPickerMachine::SelectionType selectionType =
QwtPickerMachine::NoSelection;
if ( stateMachine() )
selectionType = stateMachine()->selectionType();
switch ( selectionType )
{
case QwtPickerMachine::PointSelection:
{
const QPointF pos = invTransform( points.first() );
Q_EMIT selected( pos );
break;
}
case QwtPickerMachine::RectSelection:
{
if ( points.count() >= 2 )
{
const QPoint p1 = points.first();
const QPoint p2 = points.last();
const QRect rect = QRect( p1, p2 ).normalized();
Q_EMIT selected( invTransform( rect ) );
}
break;
}
case QwtPickerMachine::PolygonSelection:
{
QVector<QPointF> dpa( points.count() );
for ( int i = 0; i < points.count(); i++ )
dpa[i] = invTransform( points[i] );
Q_EMIT selected( dpa );
}
default:
break;
}
return true;
}
示例2: accept
bool QwtPlotZoomer::accept( QPolygon &pa ) const
{
if ( pa.count() < 2 )
return false;
QRect rect = QRect( pa.first(), pa.last() );
rect = rect.normalized();
const int minSize = 2;
if ( rect.width() < minSize && rect.height() < minSize )
return false;
const int minZoomSize = 11;
const QPoint center = rect.center();
rect.setSize( rect.size().expandedTo( QSize( minZoomSize, minZoomSize ) ) );
rect.moveCenter( center );
pa.resize( 2 );
pa[0] = rect.topLeft();
pa[1] = rect.bottomRight();
return true;
}
示例3: draw
/**
* Overrides drawing of subentities. This is only ever called for solid fills.
*/
void RS_Hatch::draw(RS_Painter* painter, RS_GraphicView* view, double& /*patternOffset*/) {
if (!data.solid) {
for(auto se: entities){
view->drawEntity(painter,se);
}
return;
}
//area of solid fill. Use polygon approximation, except trivial cases
QPainterPath path;
QList<QPolygon> paClosed;
QPolygon pa;
// QPolygon jp; // jump points
// loops:
if (needOptimization==true) {
for(auto l: entities){
if (l->rtti()==RS2::EntityContainer) {
RS_EntityContainer* loop = (RS_EntityContainer*)l;
loop->optimizeContours();
}
}
needOptimization = false;
}
// loops:
for(auto l: entities){
l->setLayer(getLayer());
if (l->rtti()==RS2::EntityContainer) {
RS_EntityContainer* loop = (RS_EntityContainer*)l;
// edges:
for(auto e: *loop){
e->setLayer(getLayer());
switch (e->rtti()) {
case RS2::EntityLine: {
QPoint pt1(RS_Math::round(view->toGuiX(e->getStartpoint().x)),
RS_Math::round(view->toGuiY(e->getStartpoint().y)));
QPoint pt2(RS_Math::round(view->toGuiX(e->getEndpoint().x)),
RS_Math::round(view->toGuiY(e->getEndpoint().y)));
// if (! (pa.size()>0 && (pa.last() - pt1).manhattanLength()<=2)) {
// jp<<pt1;
// }
if(pa.size() && (pa.last()-pt1).manhattanLength()>=1)
pa<<pt1;
pa<<pt2;
}
break;
case RS2::EntityArc: {
// QPoint pt1(RS_Math::round(view->toGuiX(e->getStartpoint().x)),
// RS_Math::round(view->toGuiY(e->getStartpoint().y)));
// if (! (pa.size()>0 && (pa.last() - pt1).manhattanLength()<=2)) {
// jp<<pt1;
// }
QPolygon pa2;
RS_Arc* arc=static_cast<RS_Arc*>(e);
painter->createArc(pa2, view->toGui(arc->getCenter()),
view->toGuiDX(arc->getRadius())
,arc->getAngle1(),arc->getAngle2(),arc->isReversed());
if(pa.size() &&pa2.size()&&(pa.last()-pa2.first()).manhattanLength()<1)
pa2.remove(0,1);
pa<<pa2;
}
break;
case RS2::EntityCircle: {
RS_Circle* circle = static_cast<RS_Circle*>(e);
// QPoint pt1(RS_Math::round(view->toGuiX(circle->getCenter().x+circle->getRadius())),
// RS_Math::round(view->toGuiY(circle->getCenter().y)));
// if (! (pa.size()>0 && (pa.last() - pt1).manhattanLength()<=2)) {
// jp<<pt1;
// }
RS_Vector c=view->toGui(circle->getCenter());
double r=view->toGuiDX(circle->getRadius());
#if QT_VERSION >= 0x040400
path.addEllipse(QPoint(c.x,c.y),r,r);
#else
path.addEllipse(c.x - r, c.y + r, 2.*r, 2.*r);
// QPolygon pa2;
// painter->createArc(pa2, view->toGui(circle->getCenter()),
// view->toGuiDX(circle->getRadius()),
// 0.0,
// 2*M_PI,
// false);
// pa<<pa2;
//.........这里部分代码省略.........
示例4: readDetectionAreaFile
bool DataManager::readDetectionAreaFile(bool clipToCamera) {
QFile areaFile(m_config->detectionAreaFile());
QDomDocument doc;
QDomElement root;
int x = 0;
int y = 0;
int cameraId = m_config->cameraIndex();
int cameraWidth = m_config->cameraWidth();
int cameraHeight = m_config->cameraHeight();
QPolygon cameraRectangle;
bool polygonsClipped = false;
bool polygonWasClosed = false;
if(!areaFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
QString errorMsg = tr("Failed to open the detection area file %1. Please create it in Settings dialog or manually.").arg(areaFile.fileName());
emit messageBroadcasted(errorMsg);
return false;
}
if(!doc.setContent(&areaFile)) {
QString errorMsg = tr("Error reading the detection area file %1").arg(areaFile.fileName());
areaFile.close();
emit messageBroadcasted(errorMsg);
return false;
}
areaFile.close();
root = doc.documentElement();
if (root.nodeName() != "detectionarealist") {
QString errorMsg = tr("Expected <detectionarealist> tag in detection area file but not found");
emit messageBroadcasted(errorMsg);
return false;
}
QDomNodeList areaList = root.childNodes();
if (areaList.count() > 1) {
QString errorMsg = tr("More than one detection areas defined, combining all together");
emit messageBroadcasted(errorMsg);
}
for (int i = 0; i < areaList.count(); i++) {
QDomNode area = areaList.at(i);
QDomNodeList areaNodes = area.childNodes();
if (area.nodeName() != "detectionarea") {
QString errorMsg = tr("Expected <detectionarea> tag in detection area file but not found.");
emit messageBroadcasted(errorMsg);
return false;
}
QDomNodeList cameraList = area.toElement().elementsByTagName("camera");
if (cameraList.count() != 1) {
QString errorMsg = tr("Expected single <camera> tag in detection area. Assuming camera index 0.");
emit messageBroadcasted(errorMsg);
}
for (int c = 0; c < cameraList.count(); c++) {
QDomElement cameraElement = cameraList.at(c).toElement();
cameraId = cameraElement.attribute("id").toInt();
cameraWidth = cameraElement.attribute("width").toInt();
cameraHeight = cameraElement.attribute("height").toInt();
if (cameraId == m_config->cameraIndex()) {
break;
}
}
cameraRectangle << QPoint(0, 0) << QPoint(0, cameraHeight - 1)
<< QPoint(cameraWidth - 1, cameraHeight - 1) << QPoint(cameraWidth - 1, 0);
while (!m_detectionAreaPolygons.isEmpty()) {
QPolygon* polygon = m_detectionAreaPolygons.takeLast();
delete polygon;
}
for (int a = 0; a < areaNodes.count(); a++) {
QDomNode areaSubNode = areaNodes.at(a);
if (areaSubNode.nodeName() == "polygon") {
QDomNodeList pointList = areaSubNode.childNodes();
QPolygon* polygon = new QPolygon();
for (int p = 0; p < pointList.count(); p++) {
QDomElement pointElement = pointList.at(p).toElement();
if (pointElement.nodeName() == "point") {
x = pointElement.attribute("x").toInt();
y = pointElement.attribute("y").toInt();
polygon->append(QPoint(x, y));
}
}
if (clipToCamera && polygon->size() &&
!cameraRectangle.boundingRect().contains(polygon->boundingRect()))
{
if (polygon->first() == polygon->last()) {
polygonWasClosed = true;
}
*polygon = polygon->intersected(cameraRectangle);
polygonsClipped = true;
if (!polygonWasClosed) {
// intersected() treats polygon as implicitly closed
// so extra node is added: remove it
//.........这里部分代码省略.........
示例5: draw
//.........这里部分代码省略.........
case RS2::EntityArc: {
// QPoint pt1(RS_Math::round(view->toGuiX(e->getStartpoint().x)),
// RS_Math::round(view->toGuiY(e->getStartpoint().y)));
// if (! (pa.size()>0 && (pa.last() - pt1).manhattanLength()<=2)) {
// jp<<pt1;
// }
QPolygon pa2;
RS_Arc* arc=static_cast<RS_Arc*>(e);
painter->createArc(pa2, view->toGui(arc->getCenter()),
view->toGuiDX(arc->getRadius()),
arc->getAngle1(),
arc->getAngle2(),
arc->isReversed());
pa<<pa2;
}
break;
case RS2::EntityCircle: {
RS_Circle* circle = static_cast<RS_Circle*>(e);
// QPoint pt1(RS_Math::round(view->toGuiX(circle->getCenter().x+circle->getRadius())),
// RS_Math::round(view->toGuiY(circle->getCenter().y)));
// if (! (pa.size()>0 && (pa.last() - pt1).manhattanLength()<=2)) {
// jp<<pt1;
// }
RS_Vector c=view->toGui(circle->getCenter());
double r=view->toGuiDX(circle->getRadius());
#if QT_VERSION >= 0x040400
path.addEllipse(QPoint(c.x,c.y),r,r);
#else
path.addEllipse(c.x - r, c.y + r, 2.*r, 2.*r);
// QPolygon pa2;
// painter->createArc(pa2, view->toGui(circle->getCenter()),
// view->toGuiDX(circle->getRadius()),
// 0.0,
// 2*M_PI,
// false);
// pa<<pa2;
#endif
}
break;
case RS2::EntityEllipse:
if(static_cast<RS_Ellipse*>(e)->isArc()) {
QPolygon pa2;
auto ellipse=static_cast<RS_Ellipse*>(e);
painter->createEllipse(pa2,
view->toGui(ellipse->getCenter()),
view->toGuiDX(ellipse->getMajorRadius()),
view->toGuiDX(ellipse->getMinorRadius()),
ellipse->getAngle(),
ellipse->getAngle1(), ellipse->getAngle2(),
ellipse->isReversed()
);
pa<<pa2;
}else{
QPolygon pa2;
auto ellipse=static_cast<RS_Ellipse*>(e);
painter->createEllipse(pa2,
view->toGui(ellipse->getCenter()),
view->toGuiDX(ellipse->getMajorRadius()),
view->toGuiDX(ellipse->getMinorRadius()),
ellipse->getAngle(),
ellipse->getAngle1(), ellipse->getAngle2(),
ellipse->isReversed()
);
path.addPolygon(pa2);
}
break;
default:
break;
}
if( pa.size()>2 && pa.first() == pa.last()) {
paClosed<<pa;
pa.clear();
}
}
}
}
if(pa.size()>2){
pa<<pa.first();
paClosed<<pa;
}
for(int i=0;i<paClosed.size();i++){
path.addPolygon(paClosed.at(i));
}
painter->setBrush(painter->getPen().getColor());
painter->disablePen();
painter->drawPath(path);
// pa<<jp;
// painter->setBrush(painter->getPen().getColor());
// painter->disablePen();
// painter->drawPolygon(pa);
}
示例6: end
bool RectPicker::end(bool ok)
{
if (!ok)//更改代码处:,正常结束后,并不停止。只有reset时候,end(false)停止选择,重置状态机
QwtPicker::end(ok);
if (!ok)
return false;
QwtPlot *plot = QwtPlotPicker::plot();
if (!plot)
return false;
const QPolygon points = selection();
if (points.count() == 0)
return false;
QwtPickerMachine::SelectionType selectionType =
QwtPickerMachine::NoSelection;
if (stateMachine())
selectionType = stateMachine()->selectionType();
switch (selectionType)
{
case QwtPickerMachine::PointSelection:
{
const QPointF pos = invTransform(points.first());
Q_EMIT selected(pos);
break;
}
case QwtPickerMachine::RectSelection:
{
if (points.count() >= 2)
{
const QPoint p1 = points.first();
const QPoint p2 = points.last();
QPointF pF1 = invTransform(p1);
QPointF pF2 = invTransform(p2);
const QRect rect = QRect(p1, p2).normalized();
const QRect rect11 = QRect(p1, p2);
QPoint pp1 = rect.topLeft();
QPoint pp2 = rect.bottomRight();
//const QRect rect = QRect(p1, p2);
QRectF rect1 = invTransform(rect);
QPointF topLeft = rect1.topLeft();
QPointF bottomRight = rect1.bottomRight();
Q_EMIT selected(invTransform(rect));
}
break;
}
case QwtPickerMachine::PolygonSelection:
{
QVector<QPointF> dpa(points.count());
for (int i = 0; i < points.count(); i++)
dpa[i] = invTransform(points[i]);
Q_EMIT selected(dpa);
}
default:
break;
}
return ok;
}
示例7: drawRubberBand
void QwtPicker::drawRubberBand( QPainter *painter ) const
{
if ( !isActive() || rubberBand() == NoRubberBand ||
rubberBandPen().style() == Qt::NoPen )
{
return;
}
const QPolygon pa = adjustedPoints( d_data->pickedPoints );
QwtPickerMachine::SelectionType selectionType =
QwtPickerMachine::NoSelection;
if ( d_data->stateMachine )
selectionType = d_data->stateMachine->selectionType();
switch ( selectionType )
{
case QwtPickerMachine::NoSelection:
case QwtPickerMachine::PointSelection:
{
if ( pa.count() < 1 )
return;
const QPoint pos = pa[0];
const QRect pRect = pickArea().boundingRect().toRect();
switch ( rubberBand() )
{
case VLineRubberBand:
{
QwtPainter::drawLine( painter, pos.x(),
pRect.top(), pos.x(), pRect.bottom() );
break;
}
case HLineRubberBand:
{
QwtPainter::drawLine( painter, pRect.left(),
pos.y(), pRect.right(), pos.y() );
break;
}
case CrossRubberBand:
{
QwtPainter::drawLine( painter, pos.x(),
pRect.top(), pos.x(), pRect.bottom() );
QwtPainter::drawLine( painter, pRect.left(),
pos.y(), pRect.right(), pos.y() );
break;
}
default:
break;
}
break;
}
case QwtPickerMachine::RectSelection:
{
if ( pa.count() < 2 )
return;
const QRect rect = QRect( pa.first(), pa.last() ).normalized();
switch ( rubberBand() )
{
case EllipseRubberBand:
{
QwtPainter::drawEllipse( painter, rect );
break;
}
case RectRubberBand:
{
QwtPainter::drawRect( painter, rect );
break;
}
default:
break;
}
break;
}
case QwtPickerMachine::PolygonSelection:
{
if ( rubberBand() == PolygonRubberBand )
painter->drawPolyline( pa );
break;
}
default:
break;
}
}
示例8: rubberBandMask
/*!
Calculate the mask for the rubber band overlay
\return Region for the mask
\sa QWidget::setMask()
*/
QRegion QwtPicker::rubberBandMask() const
{
QRegion mask;
if ( !isActive() || rubberBand() == NoRubberBand ||
rubberBandPen().style() == Qt::NoPen )
{
return mask;
}
const QPolygon pa = adjustedPoints( d_data->pickedPoints );
QwtPickerMachine::SelectionType selectionType =
QwtPickerMachine::NoSelection;
if ( d_data->stateMachine )
selectionType = d_data->stateMachine->selectionType();
switch ( selectionType )
{
case QwtPickerMachine::NoSelection:
case QwtPickerMachine::PointSelection:
{
if ( pa.count() < 1 )
return mask;
const QPoint pos = pa[0];
const int pw = rubberBandPen().width();
const QRect pRect = pickArea().boundingRect().toRect();
switch ( rubberBand() )
{
case VLineRubberBand:
{
mask += qwtMaskRegion( QLine( pos.x(), pRect.top(),
pos.x(), pRect.bottom() ), pw );
break;
}
case HLineRubberBand:
{
mask += qwtMaskRegion( QLine( pRect.left(), pos.y(),
pRect.right(), pos.y() ), pw );
break;
}
case CrossRubberBand:
{
mask += qwtMaskRegion( QLine( pos.x(), pRect.top(),
pos.x(), pRect.bottom() ), pw );
mask += qwtMaskRegion( QLine( pRect.left(), pos.y(),
pRect.right(), pos.y() ), pw );
break;
}
default:
break;
}
break;
}
case QwtPickerMachine::RectSelection:
{
if ( pa.count() < 2 )
return mask;
const int pw = rubberBandPen().width();
switch ( rubberBand() )
{
case RectRubberBand:
{
const QRect r = QRect( pa.first(), pa.last() );
mask = qwtMaskRegion( r.normalized(), pw );
break;
}
case EllipseRubberBand:
{
const QRect r = QRect( pa.first(), pa.last() );
mask += r.adjusted( -pw, -pw, pw, pw );
break;
}
default:
break;
}
break;
}
case QwtPickerMachine::PolygonSelection:
{
const int pw = rubberBandPen().width();
if ( pw <= 1 )
{
// because of the join style we better
// return a mask for a pen width <= 1 only
const int off = 2 * pw;
const QRect r = pa.boundingRect();
mask += r.adjusted( -off, -off, off, off );
//.........这里部分代码省略.........