QT qwtplot3d绘制曲面图

        上一篇讲到用datavisualization绘制曲面图,发现绘制的效果没有达到自己的预期,于是打算换一个库试试看-qwtplot3d。

绘制曲面图整体流程:

1、首先使用qwtplot3d有两种方式、继承、直接实例化。在这里本人是直接实例化来操作的SurfacePlot* m_dataWidget;通过操作m_dataWidget控制绘制曲面图。

2、构造数据:将我们的数据构造成m_dataWidget需要的数据

3、加载数据:SurfacePlot库中有三种方式加载数据 

        1)loadFromData(Qwt3D::Triple** data, unsigned int columns, unsigned int rows
    , bool uperiodic = false, bool vperiodic = false);

        2)bool loadFromData(double** data, unsigned int columns, unsigned int rows,double minx, double maxx, double miny, double maxy);

        3)bool loadFromData(Qwt3D::TripleField const& data, Qwt3D::CellField const& poly);

4、设置图例:根据个人需求设置图例。

5、设置曲面颜色:根据个人需求绘制想要的颜色以及渐变色。

接下来是介绍它们的详细操作以及原理。

qwtplot3d曲面图绘制原理

整个曲面图是由n个如下的矩形组成

它的连线原理就是上图中按照顺序去连接的,可以是ABCD,也可以是ADCB这种,顺时针、逆时针连接矩形。

本人采用上述加载数据的第三种方法

Data:存放所有的数据点集(x、y、z);

poly:2维的数组,外层的index代表一个矩形,内层存放绘制该矩形顶点索引,需要按照绘制矩形的顺序存放,该索引对应Data数据点集中的数据;

构造数据

按照上述中绘制原理分别构造出data和poly。

然后m_dataWidget->loadFromData(data, poly);进行加载数据。

绘制图例

// 刻度条设置
m_dataWidget->legend()->setMajors(maxScale);// 设置刻度数量最大数量
m_dataWidget->legend()->setMinors(minScale);
m_dataWidget->legend()->drawNumbers(true);
// 刻度值设置
m_dataWidget->legend()->setLimits(m_minColor, m_maxColor);// 设置最大、最小刻度值

存放色谱总体的颜色容器:Qwt3D::ColorVector colors;

通过修改colors数组的rgba修改整体颜色

设置曲面颜色

// 曲面图颜色
ColorVector cv;
RGBA elem;
int size = Data->size();
for (int i = 0; i < size; i++)
{
     elem.a = 1.0;
     elem.r = Data->at(i).cr;
     elem.g = Data->at(i).cg;
     elem.b = Data->at(i).cb;
     cv.push_back(elem);
 }

Qwt3D::StandardColor* col = new StandardColor(m_dataWidget, 400);
col->setColorVector(cv);
m_dataWidget->setDataColor(col);

由于个人需求,本人在构造数据的同时把每个点和一个颜色关联起来。这里conepos->at(i);cr、cg、cb就是关联的颜色rgb,这样就可以按照个人需求去实现控制曲面的颜色。

总结:qwtplot3d与datavisualization比起来,qwtplot3d绘制效果连接线更好一些,以及可以修改库中的代码实现自己想要的效果,不过qwtplot3d的类不是很丰富,比如它就没有像datavisualization提供选点的操作等,so,世间安得两全法,最终还是要在qwtplot3d基础上进行修改,根据个人需求去实现想要的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值