#include "qwt3d_surfaceplot.h"
#include "qwt3d_function.h"
using namespace Qwt3D;
Function::Function()
:GridMapping()
{
}
Function::Function(SurfacePlot& pw)
:GridMapping()
{
plotwidget_p = &pw;
}
Function::Function(SurfacePlot* pw)
:GridMapping()
{
plotwidget_p = pw;
}
void Function::assign(SurfacePlot& plotWidget)
{
if (&plotWidget != plotwidget_p)
plotwidget_p = &plotWidget;
}
void Function::assign(SurfacePlot* plotWidget)
{
if (plotWidget != plotwidget_p)
plotwidget_p = plotWidget;
}
void Function:: setMinZ(double val)
{
range_p.minVertex.z = val;
}
void Function:: setMaxZ(double val)
{
range_p.maxVertex.z = val;
}
bool Function::create()
{
if ((umesh_p<=2) || (vmesh_p<=2) || !plotwidget_p)
return false;
/* allocate some space for the mesh */
double** data = new double* [umesh_p] ;
unsigned i,j;
for ( i = 0; i < umesh_p; i++)
{
data[i] = new double [vmesh_p];
}
/* get the data */
double dx = (maxu_p - minu_p) / (umesh_p - 1);
double dy = (maxv_p - minv_p) / (vmesh_p - 1);
for (i = 0; i < umesh_p; ++i)
{
for (j = 0; j < vmesh_p; ++j)
{
data[i][j] = operator()(minu_p + i*dx, minv_p + j*dy);
if (data[i][j] > range_p.maxVertex.z)
data[i][j] = range_p.maxVertex.z;
else if (data[i][j] < range_p.minVertex.z)
data[i][j] = range_p.minVertex.z;
}
}
Q_ASSERT(plotwidget_p);
if (!plotwidget_p)
{
fprintf(stderr,"Function: no valid Plot3D Widget assigned");
}
else
{
((SurfacePlot*)plotwidget_p)->loadFromData(data, umesh_p, vmesh_p, minu_p, maxu_p, minv_p, maxv_p);
}
for ( i = 0; i < umesh_p; i++)
{
delete [] data[i];
}
delete [] data;
return true;
}
bool Function::create(SurfacePlot& pl)
{
assign(pl);
return create();
}
syntax highlighted by Code2HTML, v. 0.9.1