怎么对等值线进行颜色填充

pluto1024 2015-08-25 03:38:16
#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();
}



这个是我绘制等值线的源码,现在想在不同的等值线之间用不同的颜色进行填充,有什么好的方法呢?
...全文
778 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuxio 2018-12-27
  • 打赏
  • 举报
回复
兄弟,contourdata.txt里面的数据能说一下吗?
qfl_sdu 2018-10-30
  • 打赏
  • 举报
回复
楼主你好,离散点生成等值线的代码能共享一下吗,邮箱463589170@qq.com,谢谢了
day122 2017-06-04
  • 打赏
  • 举报
回复
引用 3 楼 yangsh3002 的回复:
一层层地画,每一层是一个polygon,地势低的先画,高的后画,然后高的就把一部分低的覆盖了
如果要填充的是三维的呢?也是一层层的画出来?
chentao19900828 2016-12-08
  • 打赏
  • 举报
回复
求填色方法啊! 有源码最好了
pluto1024 2015-09-09
  • 打赏
  • 举报
回复
颜色填充自己已经解决。比如要填充第i条等值线,贝塞尔曲线填充方法代码如下:
painter.setRenderHint(QPainter::Antialiasing, true);
		painter.setBrush(QBrush(Qt::blue, Qt::SolidPattern));
		QPainterPath pat;
		pat.addPolygon(path[i]);
		painter.drawPath(pat);
yangsh3002 2015-09-04
  • 打赏
  • 举报
回复
一层层地画,每一层是一个polygon,地势低的先画,高的后画,然后高的就把一部分低的覆盖了
pluto1024 2015-08-25
  • 打赏
  • 举报
回复
没人么?这分想送也送不出去啊
pluto1024 2015-08-25
  • 打赏
  • 举报
回复

绘制结果是这样的。我想进行颜色填充,求高手指教下呢

16,211

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧