Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.4.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Calcul de surface quelconque

December 2010 modifié dans Année 2010
Bonjour,

Je suis à la recherche d’un algorithme qui calcule une surface quelconque, j'utilise les méthodes de QPainter.
Ci-dessous l'exemple :
#ifndef DRAWING_H
#define DRAWING_H

#include <QtGui/QMainWindow>
#include "ui_drawing.h"
#include <QMouseEvent>
#include <QLabel>
#include <QPainter>
#include <QPoint>
#include <QVector>
#include <QRect>
#include <QPainterPath>
#include <QtCore>

class Drawing : public QMainWindow
{
Q_OBJECT

public:
Drawing(QWidget *parent = 0, Qt::WFlags flags = 0);
~Drawing();

private:
Ui::DrawingClass ui;
QPoint dtPnt;
bool blLftbtnPrsd ;
QVector<QPoint> polyPoints;
QRect echlRct;
int extrmX;
int extrmY;

protected:
void mouseMoveEvent(QMouseEvent *e);
void paintEvent(QPaintEvent *e);
void mouseReleaseEvent ( QMouseEvent *e );
void mousePressEvent ( QMouseEvent *e ) ;

};

#endif // DRAWING_H


#include "drawing.h"

Drawing::Drawing(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
blLftbtnPrsd = false;
}

Drawing::~Drawing()
{

}

void Drawing::mousePressEvent ( QMouseEvent *e )
{
if (e->button() == Qt::LeftButton)
{
blLftbtnPrsd = true;
polyPoints.clear();

}

if (e->button() == Qt::RightButton)
{
polyPoints.clear();
extrmX = 0;
extrmY = 0;
update();

}


}

void Drawing::mouseReleaseEvent ( QMouseEvent *e )
{
blLftbtnPrsd = false;
if (!polyPoints.isEmpty())
{
polyPoints << polyPoints.at(0);
extrmX = 0 ;
extrmY = 0;

if (!polyPoints.isEmpty())
{

extrmX = this->width();


foreach(QPoint pnt, polyPoints)
{
if (pnt.x() < extrmX)
extrmX = pnt.x();

if (pnt.y() > extrmY)
extrmY = pnt.y();

}
}
update();
}
}

void Drawing::mouseMoveEvent(QMouseEvent *e)
{

if (blLftbtnPrsd && e->state() == Qt::LeftButton)
{
dtPnt.setX(e->x());
dtPnt.setY(e->y());
polyPoints << dtPnt ;
update();
}

}

void Drawing::paintEvent(QPaintEvent* e)
{
QPainter painter(this);

// Grille
int siUnte = 10;

int siHght = this->height() - 80;
int siWdth = this->width() - 80;
int nbItrHght = (int)(siHght / siUnte);
int nbItrWdth = (int)(siWdth / siUnte);
QVector<QPoint> vectQdrlgHrz;

painter.setPen(Qt::gray);

for(int i = 1; i <= nbItrHght; i++)
painter.drawLine (40, ((i * siUnte)+40), siWdth+40, ((i * siUnte)+40));

for(int i = 1; i <= nbItrWdth; i++)
painter.drawLine (((i * siUnte)+40), 40, ((i * siUnte)+40), siHght+40);

// Courbe
painter.setPen(Qt::blue);
painter.drawPolyline( polyPoints );

// Axe
if (extrmX > 0 && extrmY > 0)
{
painter.setPen(Qt::red);
painter.drawLine ( extrmX, 80, extrmX, extrmY + 10);
painter.drawLine ( extrmX - 10, extrmY , this->width() - 80, extrmY);

}


}
Comment pourrais je calculer la surface dessinée à partir de cet exemple ?

Merci d'avance.

Réponses

Connectez-vous ou Inscrivez-vous pour répondre.