16,211
社区成员
发帖
与我相关
我的任务
分享
#include "drawpoly.h"
#include <QTextStream>
#include <QFile>
#include <QPainter>
#include <QPointF>
#include <QPolygonF>
#include <QLine>
#include <QtGui>
#include <math.h>
drawPoly::drawPoly(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
//resize(800,1000);
setWindowTitle("ContourLine");
}
drawPoly::~drawPoly()
{
}
void drawPoly::paintEvent(QPaintEvent *event)
{
QFile file("contourdata.txt");
//if (!file.open(QIODevice::WriteOnly))
//{
//std::cerr<<"Can not open!"<<endl;
//}
QVector<QPolygonF> path;
QStringList fields;
double t_minX=100000000,t_maxX=-1000000000,t_minY=100000000,t_maxY=-1000000000;
if(file.open(QIODevice::ReadOnly))
{
QTextStream in(&file);
QPolygonF t_path;
while (!in.atEnd())
{
QString line = in.readLine();
fields=line.split(' ');
double x,y;
for(int n=0;n*2<fields.size()-2;n++)
{
x=QVariant(fields[2*n+2]).toDouble();
y=QVariant(fields[2*n+3]).toDouble();
t_path.append(QPointF(x,y)); //插入坐标点X,Y
}
if (x<t_minX)
{
t_minX=x;
}
if (x>t_maxX)
{
t_maxX=x;
}
if (y<t_minY)
{
t_minY=y;
}
if (y>t_maxY)
{
t_maxY=y;
}
path.append(t_path);
t_path=QPolygonF();
}
}
for (int i=0; i<path.size(); ++i)
{
QPointF pointF;
for (int j=0; j<path[i].size(); ++j)
{
pointF = path[i].at(j);
pointF.rx()= (pointF.x() - t_minX)/50.0;
pointF.ry() = -(pointF.y() - t_minY)/50.0;
path[i].replace(j,pointF);
}
}
double t_width = (t_maxX - t_minX)/50.0;
double t_height = (t_maxY - t_minY)/50.0;
this->resize(t_width*1.5, t_height*1.5);
QPainter painter(this);
painter.save();
painter.setPen(Qt::gray);//设置网格线条颜色
painter.translate(t_width/4, t_height*1.2);
int step=20;
for (int i=1; i <=22; i++)
{
painter.drawLine(0, -t_height + step*i, t_width, -t_height + step*i);//画网格
}
for (int j=1; j <=28; j++)
{
painter.drawLine(j*step, -t_height, j*step, 0);
}
//QPen pen2;
//pen2.setColor(Qt::red);//设置矩形边界颜色
//painter.setPen(pen2);
painter.setPen(Qt::red);
painter.drawRect(0, -t_height, t_width, t_height);//绘制矩形边界
for (int i=0; i <path.size(); ++i)
{
//painter.setPen(Qt::red);
painter.drawPolyline(path[i]);//等值线绘制
}
painter.restore();
if (file.isOpen()) file.close();
}
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setBrush(QBrush(Qt::blue, Qt::SolidPattern));
QPainterPath pat;
pat.addPolygon(path[i]);
painter.drawPath(pat);