::ComputePerVertexQualityMinMax(m.cm);
- parlst.addFloat("minQualityVal", _meshMinMaxQuality.minV, "Minimum mesh quality","The specified quality value is mapped in the lower end of the choosen color scale. Default value: the minumum quality value found on the mesh." );
- parlst.addFloat("maxQualityVal", _meshMinMaxQuality.maxV, "Maximum mesh quality","The specified quality value is mapped in the upper end of the choosen color scale. Default value: the maximum quality value found on the mesh." );
- parlst.addFloat("midHandlePos", 50, "Gamma biasing (0..100)", "Defines a gamma compression of the quality values, by setting the position of the middle of the color scale. Value is defined as a percentage (0..100). Default value is 50, that corresponds to a linear mapping." );
- parlst.addFloat("brightness", 1.0f, "Mesh brightness", "must be between 0 and 2. 0 represents a completely dark mesh, 1 represents a mesh colorized with original colors, 2 represents a completely bright mesh");
+ parlst.addParam(new RichFloat("minQualityVal", _meshMinMaxQuality.minV, "Minimum mesh quality","The specified quality value is mapped in the lower end of the choosen color scale. Default value: the minumum quality value found on the mesh." ));
+ parlst.addParam(new RichFloat("maxQualityVal", _meshMinMaxQuality.maxV, "Maximum mesh quality","The specified quality value is mapped in the upper end of the choosen color scale. Default value: the maximum quality value found on the mesh." ));
+ parlst.addParam(new RichFloat("midHandlePos", 50, "Gamma biasing (0..100)", "Defines a gamma compression of the quality values, by setting the position of the middle of the color scale. Value is defined as a percentage (0..100). Default value is 50, that corresponds to a linear mapping." ));
+ parlst.addParam(new RichFloat("brightness", 1.0f, "Mesh brightness", "must be between 0 and 2. 0 represents a completely dark mesh, 1 represents a mesh colorized with original colors, 2 represents a completely bright mesh"));
//setting default transfer functions names
TransferFunction::defaultTFs[GREY_SCALE_TF] = "Grey Scale";
TransferFunction::defaultTFs[MESHLAB_RGB_TF] = "Meshlab RGB";
TransferFunction::defaultTFs[RGB_TF] = "RGB";
+ TransferFunction::defaultTFs[FRENCH_RGB_TF] = "French RGB";
TransferFunction::defaultTFs[RED_SCALE_TF] = "Red Scale";
TransferFunction::defaultTFs[GREEN_SCALE_TF] = "Green Scale";
TransferFunction::defaultTFs[BLUE_SCALE_TF] = "Blue Scale";
TransferFunction::defaultTFs[FLAT_TF] = "Flat";
+ TransferFunction::defaultTFs[SAW_4_TF] = "Saw 4";
+ TransferFunction::defaultTFs[SAW_8_TF] = "Saw 8";
QStringList tfList;
tfList << "Custom Transfer Function File";
@@ -110,8 +113,8 @@ void QualityMapperFilter::initParameterSet(QAction *action,MeshModel &m, FilterP
//fetching and adding default TFs to TFList
tfList << TransferFunction::defaultTFs[(STARTUP_TF_TYPE + i)%NUMBER_OF_DEFAULT_TF];
- parlst.addEnum( "TFsList", 1, tfList, "Transfer Function type to apply to filter", "Choose the Transfer Function to apply to the filter" );
- parlst.addString("csvFileName", "", "Custom TF Filename", "Filename of the transfer function to be loaded, used only if you have chosen the Custom Transfer Function." );
+ parlst.addParam(new RichEnum( "TFsList", 1, tfList, "Transfer Function type to apply to filter", "Choose the Transfer Function to apply to the filter" ));
+ parlst.addParam(new RichString("csvFileName", "", "Custom TF Filename", "Filename of the transfer function to be loaded, used only if you have chosen the Custom Transfer Function." ));
}
break;
@@ -121,7 +124,7 @@ void QualityMapperFilter::initParameterSet(QAction *action,MeshModel &m, FilterP
// The Real Core Function doing the actual mesh processing.
// Apply color to mesh vertexes
-bool QualityMapperFilter::applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & par, vcg::CallBackPos *cb)
+bool QualityMapperFilter::applyFilter(QAction *filter, MeshModel &m, RichParameterSet & par, vcg::CallBackPos *cb)
{
Q_UNUSED(filter);
Q_UNUSED(cb);
@@ -145,11 +148,11 @@ bool QualityMapperFilter::applyFilter(QAction *filter, MeshModel &m, FilterParam
//text TF
QString csvFileName = par.getString("csvFileName");
if ( csvFileName != "" && loadEqualizerInfo(csvFileName, &eqData) > 0 )
- {
- par.setFloat("minQualityVal", eqData.minQualityVal );
- par.setFloat("maxQualityVal", eqData.maxQualityVal );
- par.setFloat("midHandlePos", _meshMinMaxQuality.minV + ((_meshMinMaxQuality.maxV-_meshMinMaxQuality.minV)/eqData.midQualityPercentage));
- par.setFloat("brightness", eqData.brightness);
+ {
+ par.setValue("minQualityVal", FloatValue(eqData.minQualityVal) );
+ par.setValue("maxQualityVal", FloatValue(eqData.maxQualityVal) );
+ par.setValue("midHandlePos", FloatValue(_meshMinMaxQuality.minV + ((_meshMinMaxQuality.maxV-_meshMinMaxQuality.minV)/eqData.midQualityPercentage)));
+ par.setValue("brightness", FloatValue(eqData.brightness));
//building new TF object from external file
transferFunction = new TransferFunction( par.getString("csvFileName") );
diff --git a/src/fgt/filter_quality/filterqualitymapper.h b/src/fgt/filter_quality/filterqualitymapper.h
index 5c022c777..ce564c2ea 100644
--- a/src/fgt/filter_quality/filterqualitymapper.h
+++ b/src/fgt/filter_quality/filterqualitymapper.h
@@ -74,8 +74,8 @@ public:
int getPreConditions(QAction *) const;
int postCondition( QAction* ) const;
virtual bool autoDialog(QAction *) {return true;}
- virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*parent*/);
- virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual void initParameterSet(QAction *,MeshModel &/*m*/, RichParameterSet & /*parent*/);
+ virtual bool applyFilter(QAction *filter, MeshModel &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
virtual const FilterClass getClass(QAction *);
};
diff --git a/src/fgt/filter_trioptimize/filter_trioptimize.cpp b/src/fgt/filter_trioptimize/filter_trioptimize.cpp
index 5c2173faa..900cbff63 100644
--- a/src/fgt/filter_trioptimize/filter_trioptimize.cpp
+++ b/src/fgt/filter_trioptimize/filter_trioptimize.cpp
@@ -204,20 +204,20 @@ int TriOptimizePlugin::postCondition(QAction *a) const
// - the default value
// - a possibly long string describing the meaning of that parameter (shown as a popup help in the dialog)
void TriOptimizePlugin::initParameterSet(QAction *action, MeshModel &m,
- FilterParameterSet & parlst)
+ RichParameterSet & parlst)
{
if (ID(action) == FP_CURVATURE_EDGE_FLIP) {
- parlst.addBool("selection", m.cm.sfn > 0, tr("Update selection"), tr("Apply edge flip optimization on selected faces only"));
- parlst.addFloat("pthreshold", 1.0f,
+ parlst.addParam(new RichBool("selection", m.cm.sfn > 0, tr("Update selection"), tr("Apply edge flip optimization on selected faces only")));
+ parlst.addParam(new RichFloat("pthreshold", 1.0f,
tr("Angle Thr (deg)"),
- tr("To avoid excessive flipping/swapping we consider only couple of faces with a significant diedral angle (e.g. greater than the indicated threshold). "));
+ tr("To avoid excessive flipping/swapping we consider only couple of faces with a significant diedral angle (e.g. greater than the indicated threshold). ")));
QStringList cmetrics;
cmetrics.push_back("mean");
cmetrics.push_back("norm squared");
cmetrics.push_back("absolute");
- parlst.addEnum("curvtype", 0, cmetrics, tr("Curvature metric"),
+ parlst.addParam(new RichEnum("curvtype", 0, cmetrics, tr("Curvature metric"),
tr(""
"Choose a metric to compute surface curvature on vertices
"
"H = mean curv, K = gaussian curv, A = area per vertex
"
@@ -225,15 +225,15 @@ void TriOptimizePlugin::initParameterSet(QAction *action, MeshModel &m,
"2: Norm squared mean curvature = (H * H) / A
"
"3: Absolute curvature:
"
" if(K >= 0) return 2 * H
"
- " else return 2 * sqrt(H ^ 2 - A * K)"));
+ " else return 2 * sqrt(H ^ 2 - A * K)")));
}
if (ID(action) == FP_PLANAR_EDGE_FLIP) {
- parlst.addBool("selection", m.cm.sfn > 0, tr("Update selection"), tr("Apply edge flip optimization on selected faces only"));
+ parlst.addParam(new RichBool("selection", m.cm.sfn > 0, tr("Update selection"), tr("Apply edge flip optimization on selected faces only")));
- parlst.addFloat("pthreshold", 1.0f,
+ parlst.addParam(new RichFloat("pthreshold", 1.0f,
tr("Planar threshold (deg)"),
- tr("angle threshold for planar faces (degrees)"));
+ tr("angle threshold for planar faces (degrees)")));
QStringList pmetrics;
pmetrics.push_back("area/max side");
@@ -241,7 +241,7 @@ void TriOptimizePlugin::initParameterSet(QAction *action, MeshModel &m,
pmetrics.push_back("mean ratio");
pmetrics.push_back("delaunay");
pmetrics.push_back("topology");
- parlst.addEnum("planartype", 0, pmetrics, tr("Planar metric"),
+ parlst.addParam(new RichEnum("planartype", 0, pmetrics, tr("Planar metric"),
tr("
"
"Choose a metric to define the planar flip operation
"
"Triangle quality based
"
@@ -251,22 +251,22 @@ void TriOptimizePlugin::initParameterSet(QAction *action, MeshModel &m,
" M transform triangle into equilateral
"
"Others
"
"4: Fix the Delaunay condition between two faces
"
- "5: Do the flip to improve local topology
"));
- parlst.addInt("iterations", 1, "Post optimization relax iter", tr("number of a planar laplacian smooth iterations that have to be performed after every run"));
+ "5: Do the flip to improve local topology
")));
+ parlst.addParam(new RichInt("iterations", 1, "Post optimization relax iter", tr("number of a planar laplacian smooth iterations that have to be performed after every run")));
}
if (ID(action) == FP_NEAR_LAPLACIAN_SMOOTH) {
- parlst.addBool("selection", false, tr("Update selection"), tr("Apply laplacian smooth on selected faces only"));
- parlst.addFloat("AngleDeg", 0.5f, tr("Max Normal Dev (deg)"), tr("maximum mean normal angle displacement (degrees) from old to new faces"));
- parlst.addInt("iterations", 1, "Iterations", tr("number of laplacian smooth iterations in every run"));
+ parlst.addParam(new RichBool("selection", false, tr("Update selection"), tr("Apply laplacian smooth on selected faces only")));
+ parlst.addParam(new RichFloat("AngleDeg", 0.5f, tr("Max Normal Dev (deg)"), tr("maximum mean normal angle displacement (degrees) from old to new faces")));
+ parlst.addParam(new RichInt("iterations", 1, "Iterations", tr("number of laplacian smooth iterations in every run")));
}
}
// The Real Core Function doing the actual mesh processing.
// Run mesh optimization
bool TriOptimizePlugin::applyFilter(QAction *filter, MeshModel &m,
- FilterParameterSet & par,
+ RichParameterSet & par,
vcg::CallBackPos *cb)
{
float limit = -std::numeric_limits::epsilon();
diff --git a/src/fgt/filter_trioptimize/filter_trioptimize.h b/src/fgt/filter_trioptimize/filter_trioptimize.h
index ed49aa415..dfb2e6925 100644
--- a/src/fgt/filter_trioptimize/filter_trioptimize.h
+++ b/src/fgt/filter_trioptimize/filter_trioptimize.h
@@ -48,8 +48,8 @@ public:
virtual const QString filterName(FilterIDType filter) const;
virtual const QString filterInfo(FilterIDType filter) const;
virtual bool autoDialog(QAction *) {return true;}
- virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*parent*/);
- virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameterSet &/*parent*/, vcg::CallBackPos * cb) ;
+ virtual void initParameterSet(QAction *,MeshModel &/*m*/, RichParameterSet & /*parent*/);
+ virtual bool applyFilter(QAction *filter, MeshModel &m, RichParameterSet &/*parent*/, vcg::CallBackPos * cb) ;
virtual const int getRequirements(QAction *);
virtual const FilterClass getClass(QAction *);
virtual int postCondition( QAction* ) const;
diff --git a/src/meshlab/filterScriptDialog.cpp b/src/meshlab/filterScriptDialog.cpp
index 4d43f4771..1bf493fca 100644
--- a/src/meshlab/filterScriptDialog.cpp
+++ b/src/meshlab/filterScriptDialog.cpp
@@ -80,34 +80,34 @@ void FilterScriptDialog::applyScript()
for(int action = 0; action < scriptPtr->actionList.size(); action++)
{
- FilterParameterSet ¶meterSet = scriptPtr->actionList[action].second;
+ RichParameterSet ¶meterSet = scriptPtr->actionList[action].second;
for(int i = 0; i < parameterSet.paramList.size(); i++)
{
//get a modifieable reference
- FilterParameter ¶meter = parameterSet.paramList[i];
+ RichParameter* parameter = parameterSet.paramList[i];
//if this is a mesh paramter and the pointer not valid
- if(parameter.fieldType == FilterParameter::PARMESH &&
- !mainWindow->GLA()->meshDoc.meshList.contains((MeshModel*)parameter.pointerVal) )
- {
- //if the meshmodel pointer is not in the document but not null there must be a problem
- if(NULL != parameter.pointerVal )
- {
- qDebug() << "meshdoc gave us null";
- QMessageBox::critical(this, tr("Script Failure"), QString("Failed because you set a script parameter to be a mesh which does not exist anymore."));
- return;
- } else if(parameter.fieldVal.toInt() >= mainWindow->GLA()->meshDoc.meshList.size() || parameter.fieldVal.toInt() < 0)
- {
- qDebug() << "integer is out of bounds:" << parameter.fieldVal.toInt();
- QMessageBox::critical(this, tr("Script Failure"), QString("One of the filters in the script needs more meshes than you have loaded."));
- return;
- } else {
- qDebug() << "meshdoc has non null value";
- parameter.pointerVal = mainWindow->GLA()->meshDoc.getMesh(parameter.fieldVal.toInt());
- }
- }
-
+ // if(parameter.fieldType == FilterParameter::PARMESH &&
+ // !mainWindow->GLA()->meshDoc.meshList.contains((MeshModel*)parameter.pointerVal) )
+ // {
+ // //if the meshmodel pointer is not in the document but not null there must be a problem
+ // if(NULL != parameter.pointerVal )
+ // {
+ // qDebug() << "meshdoc gave us null";
+ // QMessageBox::critical(this, tr("Script Failure"), QString("Failed because you set a script parameter to be a mesh which does not exist anymore."));
+ // return;
+ // } else if(parameter.fieldVal.toInt() >= mainWindow->GLA()->meshDoc.meshList.size() || parameter.fieldVal.toInt() < 0)
+ // {
+ // qDebug() << "integer is out of bounds:" << parameter.fieldVal.toInt();
+ // QMessageBox::critical(this, tr("Script Failure"), QString("One of the filters in the script needs more meshes than you have loaded."));
+ // return;
+ // } else {
+ // qDebug() << "meshdoc has non null value";
+ // parameter.pointerVal = mainWindow->GLA()->meshDoc.getMesh(parameter.fieldVal.toInt());
+ // }
+ // }
+ //
}
}
@@ -147,7 +147,7 @@ void FilterScriptDialog::moveSelectedFilterUp()
int currentRow = ui.scriptListWidget->currentRow();
//move item up in list
- QPair pair = scriptPtr->actionList.takeAt(currentRow);
+ QPair pair = scriptPtr->actionList.takeAt(currentRow);
scriptPtr->actionList.insert(currentRow-1, pair);
//move item up on ui
@@ -163,7 +163,7 @@ void FilterScriptDialog::moveSelectedFilterDown()
int currentRow = ui.scriptListWidget->currentRow();
//move item down in list
- QPair pair = scriptPtr->actionList.takeAt(currentRow);
+ QPair pair = scriptPtr->actionList.takeAt(currentRow);
scriptPtr->actionList.insert(currentRow+1, pair);
//move item down on ui
@@ -193,7 +193,7 @@ void FilterScriptDialog::editSelectedFilterParameters()
return;
QString actionName = scriptPtr->actionList.at(currentRow).first;
- FilterParameterSet oldParameterSet = scriptPtr->actionList.at(currentRow).second;
+ RichParameterSet oldParameterSet = scriptPtr->actionList.at(currentRow).second;
//get the main window
MainWindow *mainWindow = qobject_cast(parentWidget());
@@ -215,14 +215,14 @@ void FilterScriptDialog::editSelectedFilterParameters()
//fill the paramter set with all the names and descriptions which are lost in the
//filter script
- FilterParameterSet newParameterSet;
+ RichParameterSet newParameterSet;
iFilter->initParameterSet(action, mainWindow->GLA()->meshDoc, newParameterSet);
if(newParameterSet.paramList.size() == oldParameterSet.paramList.size())
{
//now set values to be the old values
for(int i = 0; i < newParameterSet.paramList.size(); i++)
- newParameterSet.paramList[i].setValue(oldParameterSet.paramList.at(i));
+ newParameterSet.paramList[i]->val = oldParameterSet.paramList[i]->val;
} else
qDebug() << "the size of the given list is not the same as the filter suggests it should be. your filter script may be out of date, or there is a bug in the filter script class";
diff --git a/src/meshlab/filterparameter.cpp b/src/meshlab/filterparameter.cpp
index 074a468fc..f16fcdce2 100644
--- a/src/meshlab/filterparameter.cpp
+++ b/src/meshlab/filterparameter.cpp
@@ -32,639 +32,963 @@ $Log: filterparameter.h,v $
#include
#include "filterparameter.h"
+
using namespace vcg;
-bool FilterParameterSet::hasParameter(QString name)
+//bool RichParameterSet::hasParameter(QString name)
+//{
+// QList::iterator fpli;
+// for(fpli=paramList.begin();fpli!=paramList.end();++fpli)
+// if((*fpli).fieldName==name)
+// return true;
+//
+// return false;
+//}
+//FilterParameter *RichParameterSet::findParameter(QString name)
+//{
+// QList::iterator fpli;
+// for(fpli=paramList.begin();fpli!=paramList.end();++fpli)
+// if((*fpli).fieldName==name)
+// return &*fpli;
+//
+// qDebug("FilterParameter Warning: Unable to find a parameter with name '%s',\n"
+// " Please check types and names of the parameter in the calling filter",qPrintable(name));
+// return 0;
+//}
+//
+//const FilterParameter *RichParameterSet::findParameter(QString name) const
+//{
+// QList::const_iterator fpli;
+// for(fpli=paramList.begin();fpli!=paramList.end();++fpli)
+// if((*fpli).fieldName==name)
+// return &*fpli;
+//
+// qDebug("FilterParameter Warning: Unable to find a parameter with name '%s',\n"
+// " Please check types and names of the parameter in the calling filter",qPrintable(name));
+// return 0;
+//}
+//
+//void RichParameterSet::removeParameter(QString name){
+// paramList.removeAll(*findParameter(name));
+//}
+//
+////--------------------------------------
+//
+//void RichParameterSet::addBool (QString name, bool defaultVal, QString desc, QString tooltip)
+//{
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+// p.fieldVal=defaultVal;
+// p.fieldType=FilterParameter::PARBOOL;
+// paramList.push_back(p);
+//}
+//
+//void RichParameterSet::setBool(QString name, bool newVal)
+//{
+// FilterParameter *p=findParameter(name);
+// assert(p);
+// p->fieldVal=QVariant(newVal);
+//}
+//bool RichParameterSet::getBool(QString name) const
+//{
+// const FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARBOOL);
+// return p->fieldVal.toBool();
+//}
+//
+////--------------------------------------
+//
+//void RichParameterSet::addInt(QString name, int defaultVal, QString desc, QString tooltip)
+//{
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+// p.fieldVal=defaultVal;
+// p.fieldType=FilterParameter::PARINT;
+// paramList.push_back(p);
+//}
+//int RichParameterSet::getInt(QString name) const
+//{
+// const FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARINT);
+// return p->fieldVal.toInt();
+//}
+//void RichParameterSet::setInt(QString name, int newVal)
+//{
+// FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARINT);
+// p->fieldVal=QVariant(newVal);
+//}
+//
+////--------------------------------------
+//
+//void RichParameterSet::addFloat(QString name, float defaultVal, QString desc, QString tooltip)
+//{
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+// p.fieldVal=defaultVal;
+// p.fieldType=FilterParameter::PARFLOAT;
+// paramList.push_back(p);
+//}
+//float RichParameterSet::getFloat(QString name) const
+//{
+// const FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARFLOAT);
+// return float(p->fieldVal.toDouble());
+//}
+//void RichParameterSet::setFloat(QString name, float newVal)
+//{
+// FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARFLOAT);
+// p->fieldVal=QVariant(double(newVal));
+//}
+//
+////--------------------------------------
+//void RichParameterSet::addColor(QString name, QColor defaultVal, QString desc, QString tooltip)
+//{
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+// p.fieldVal=defaultVal.rgb(); // it is converted to an unsigned int
+// p.fieldType=FilterParameter::PARCOLOR;
+// paramList.push_back(p);
+//}
+//
+//Color4b RichParameterSet::getColor4b(QString name) const
+//{
+// QColor c=getColor(name);
+// return Color4b(c.red(),c.green(),c.blue(),255);
+//}
+//
+//QColor RichParameterSet::getColor(QString name) const
+//{
+// const FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARCOLOR);
+// return QColor(QRgb(p->fieldVal.toUInt()));
+//}
+//
+//void RichParameterSet::setColor(QString name, QColor newVal)
+//{
+// FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARCOLOR);
+// p->fieldVal=QVariant(newVal.rgb());
+//}
+//
+////--------------------------------------
+//
+//void RichParameterSet::addString (QString name, QString defaultVal, QString desc, QString tooltip)
+//{
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+// p.fieldVal=defaultVal;
+// p.fieldType=FilterParameter::PARSTRING;
+// paramList.push_back(p);
+//}
+//QString RichParameterSet::getString(QString name) const
+//{
+// const FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARSTRING);
+// return p->fieldVal.toString();
+//}
+//void RichParameterSet::setString(QString name, QString newVal)
+//{
+// FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARSTRING);
+// p->fieldVal=QVariant(newVal);
+//}
+//
+////--------------------------------------
+//
+//
+//Matrix44f RichParameterSet::getMatrix44(QString name) const
+//{
+// const FilterParameter *p=findParameter(name);
+//
+// assert(p);
+// assert(p->fieldType==FilterParameter::PARMATRIX);
+// assert(p->fieldVal.type()==QVariant::List);
+//
+// Matrix44f matrix;
+// QList matrixVals = p->fieldVal.toList();
+// assert(matrixVals.size()==16);
+// for(int i=0;i<16;++i)
+// matrix.V()[i]=matrixVals[i].toDouble();
+// return matrix;
+//}
+//void RichParameterSet::addMatrix44 (QString name, Matrix44f defaultVal, QString desc, QString tooltip)
+//{
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+//
+// QList matrixVals;
+// for(int i=0;i<16;++i)
+// matrixVals.append(defaultVal.V()[i]);
+// p.fieldVal=matrixVals;
+// p.fieldType=FilterParameter::PARMATRIX;
+// paramList.push_back(p);
+//}
+//
+//
+//void RichParameterSet::setMatrix44(QString , Matrix44f )
+//{
+// assert(0);
+//}
+//
+////--------------------------------------
+//
+//Point3f RichParameterSet::getPoint3f(QString name) const
+//{
+// const FilterParameter *p=findParameter(name);
+//
+// assert(p);
+// assert(p->fieldType==FilterParameter::PARPOINT3F);
+// assert(p->fieldVal.type()==QVariant::List);
+//
+// Point3f point;
+// QList pointVals = p->fieldVal.toList();
+// assert(pointVals.size()==3);
+// for(int i=0;i<3;++i)
+// point[i]=pointVals[i].toDouble();
+// return point;
+//}
+//void RichParameterSet::addPoint3f (QString name, Point3f defaultVal, QString desc, QString tooltip)
+//{
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+//
+// QList pointVals;
+// for(int i=0;i<3;++i)
+// pointVals.append(defaultVal[i]);
+// p.fieldVal=pointVals;
+// p.fieldType=FilterParameter::PARPOINT3F;
+// paramList.push_back(p);
+//}
+//void RichParameterSet::setPoint3f(QString name, Point3f newVal)
+//{
+// FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARPOINT3F);
+// QList pointVals;
+// for(int i=0;i<3;++i)
+// pointVals.append(newVal[i]);
+// p->fieldVal=pointVals;
+//}
+////--------------------------------------
+//
+//void RichParameterSet::addAbsPerc (QString name, float defaultVal, float minVal, float maxVal, QString desc, QString tooltip)
+//{
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+// p.fieldVal=defaultVal;
+// p.fieldType=FilterParameter::PARABSPERC;
+// p.min=minVal;
+// p.max=maxVal;
+// paramList.push_back(p);
+//}
+//float RichParameterSet::getAbsPerc(QString name) const
+//{
+// const FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARABSPERC);
+// return float(p->fieldVal.toDouble());
+//}
+//void RichParameterSet::setAbsPerc(QString name, float newVal)
+//{
+// FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARABSPERC);
+// p->fieldVal=QVariant(double(newVal));
+//}
+//
+//void RichParameterSet::addEnum (QString name, int defaultVal, QStringList values, QString desc, QString tooltip) {
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+// p.fieldVal=defaultVal;
+// p.fieldType=FilterParameter::PARENUM;
+// p.enumValues = values;
+// paramList.push_back(p);
+//}
+//
+//int RichParameterSet::getEnum(QString name) const {
+// const FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARENUM);
+// return float(p->fieldVal.toInt());
+//}
+//
+//void RichParameterSet::setEnum(QString name, int newVal)
+//{
+// FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARENUM);
+// p->fieldVal=QVariant(int(newVal));
+//}
+//
+//void RichParameterSet::addFloatList(QString name, QList &defaultValue, QString desc, QString tooltip)
+//{
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+//
+// QList tempList;
+// for(int i = 0; i < defaultValue.size(); ++i)
+// {
+// //if you put the float in directly int converts to a double which we do not want
+// tempList.push_back(QVariant(QString().setNum(defaultValue.at(i), 'g', 12)));
+// //qDebug() << "putting down " << QString().setNum(defaultValue.at(i), 'g', 12) ;
+// }
+//
+// p.fieldVal = tempList;
+// p.fieldType = FilterParameter::PARFLOATLIST;
+// paramList.push_back(p);
+//}
+//
+//QList RichParameterSet::getFloatList(QString name) const
+//{
+// const FilterParameter *p = findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARFLOATLIST);
+//
+// QList floatList;
+// QList internalList = p->fieldVal.toList();
+// for(int i = 0; i < internalList.size(); ++i)
+// floatList.push_back(internalList.at(i).toString().toFloat());
+//
+// return floatList;
+//}
+//
+//void RichParameterSet::setFloatList(QString name, QList &newValue)
+//{
+// FilterParameter *p = findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARFLOATLIST);
+//
+// QList tempList;
+// for(int i = 0; i < newValue.size(); ++i)
+// {
+// tempList.push_back(QVariant(QString().setNum(newValue.at(i), 'g', 12)));
+// //qDebug() << "insetfloatlist " << QVariant(QString().setNum(newValue.at(i), 'g', 12));
+// }
+// p->fieldVal = tempList;
+//}
+//
+///* ---- */
+//
+//void RichParameterSet::addMesh (QString name, MeshModel *defaultVal, QString desc, QString tooltip) {
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+// p.pointerVal= defaultVal;
+// p.fieldType=FilterParameter::PARMESH;
+// paramList.push_back(p);
+//}
+//
+////make the default the mesh that is at the given position in the mesh document
+//void RichParameterSet::addMesh(QString name, int position, QString desc, QString tooltip)
+//{
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+// p.fieldVal = position;
+// p.pointerVal = NULL;
+// p.fieldType = FilterParameter::PARMESH;
+// paramList.push_back(p);
+//}
+//
+//MeshModel * RichParameterSet::getMesh(QString name) const {
+// const FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARMESH);
+// return (MeshModel *)(p->pointerVal);
+//}
+//
+//void RichParameterSet::setMesh(QString name, MeshModel * newVal, int position)
+//{
+// FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARMESH);
+// p->fieldVal = position;
+// p->pointerVal= newVal;
+//}
+//
+///* ---- */
+///* Dynamic Float Members*/
+///* ---- */
+//
+//void RichParameterSet::addDynamicFloat(QString name, float defaultVal, float minVal, float maxVal, QString desc , QString tooltip )
+//{
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+// assert(defaultVal<=maxVal);
+// assert(defaultVal>=minVal);
+// p.fieldVal=defaultVal;
+// p.fieldType=FilterParameter::PARDYNFLOAT;
+// p.min=minVal;
+// p.max=maxVal;
+// //p.mask=changeMask;
+// paramList.push_back(p);
+//}
+//
+//float RichParameterSet::getDynamicFloat(QString name) const
+//{
+// const FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARDYNFLOAT);
+// return float(p->fieldVal.toDouble());
+//}
+//
+//void RichParameterSet::setDynamicFloat(QString name, float newVal)
+//{
+// FilterParameter *p=findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARDYNFLOAT);
+// p->fieldVal=QVariant(newVal);
+//}
+//
+///* PAROPENFILENAME */
+//
+//void RichParameterSet::addOpenFileName(QString name, QString defaultVal, QString extension, QString desc, QString tooltip)
+//{
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+// p.fieldVal = defaultVal;
+// p.fieldType = FilterParameter::PAROPENFILENAME;
+//
+// //add the extension to this unused variable because i think it is cleaner than adding another variable not used anywhere else
+// p.enumValues.push_back(extension);
+//
+// paramList.push_back(p);
+//}
+//
+//QString RichParameterSet::getOpenFileName(QString name) const
+//{
+// const FilterParameter *p = findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PAROPENFILENAME);
+// return p->fieldVal.toString();
+//}
+//
+//void RichParameterSet::setOpenFileName(QString name, QString newVal)
+//{
+// FilterParameter *p = findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PAROPENFILENAME);
+// p->fieldVal = QVariant(newVal);
+//}
+//
+///* PARSAVEFILENAME */
+//
+//void RichParameterSet::addSaveFileName(QString name, QString defaultVal, QString extension, QString desc, QString tooltip)
+//{
+// assert(!hasParameter(desc));
+// FilterParameter p(name,desc,tooltip);
+// p.fieldVal = defaultVal;
+// p.fieldType = FilterParameter::PARSAVEFILENAME;
+//
+// //add the extension to this unused variable because i think it is cleaner than adding another variable not used anywhere else
+// p.enumValues.push_back(extension);
+//
+// paramList.push_back(p);
+//}
+//
+//QString RichParameterSet::getSaveFileName(QString name) const
+//{
+// const FilterParameter *p = findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARSAVEFILENAME);
+// return p->fieldVal.toString();
+//}
+//
+//void RichParameterSet::setSaveFileName(QString name, QString newVal)
+//{
+// FilterParameter *p = findParameter(name);
+// assert(p);
+// assert(p->fieldType == FilterParameter::PARSAVEFILENAME);
+// p->fieldVal = QVariant(newVal);
+//}
+//
+//QDomElement FilterParameter::createElement(QDomDocument &doc)
+//{
+// QDomElement parElem = doc.createElement("Param");
+// //parElem.setAttribute("name",this->fieldName);
+// //switch (this->fieldType)
+// //{
+// // case FilterParameter::PARBOOL:
+// // parElem.setAttribute("type","Bool");
+// // parElem.setAttribute("value",this->fieldVal.toString());
+// // break;
+// // case FilterParameter::PARSTRING:
+// // parElem.setAttribute("type","String");
+// // parElem.setAttribute("value",this->fieldVal.toString());
+// // break;
+// // case FilterParameter::PARINT:
+// // parElem.setAttribute("type","Int");
+// // parElem.setAttribute("value",this->fieldVal.toInt());
+// // break;
+// // case FilterParameter::PARFLOAT:
+// // parElem.setAttribute("type","Float");
+// // parElem.setAttribute("value",this->fieldVal.toString());
+// // break;
+// // case FilterParameter::PARABSPERC:
+// // parElem.setAttribute("type","AbsPerc");
+// // parElem.setAttribute("value",this->fieldVal.toString());
+// // parElem.setAttribute("min",QString::number(this->min));
+// // parElem.setAttribute("max",QString::number(this->max));
+// // break;
+// // case FilterParameter::PARCOLOR:
+// // parElem.setAttribute("type","Color");
+// // parElem.setAttribute("rgb",this->fieldVal.toString());
+// // break;
+// // case FilterParameter::PARENUM:
+// // {
+// // parElem.setAttribute("type","Enum");
+// // parElem.setAttribute("value",this->fieldVal.toString());
+// // QStringList::iterator kk;
+// // for(kk = this->enumValues.begin();kk!=this->enumValues.end();++kk){
+// // QDomElement sElem = doc.createElement("EnumString");
+// // sElem.setAttribute("value",(*kk));
+// // parElem.appendChild(sElem);
+// // }
+// // }
+// // break;
+// // case FilterParameter::PARMATRIX:
+// // {
+// // parElem.setAttribute("type","Matrix44");
+// // QList matrixVals = this->fieldVal.toList();
+// // for(int i=0;i<16;++i)
+// // parElem.setAttribute(QString("val")+QString::number(i),matrixVals[i].toString());
+// // }
+// // break;
+// // case FilterParameter::PARMESH:
+// // parElem.setAttribute(TypeName(), MeshPointerName());
+// // //this is the mesh's position in the mesh document that was used
+// // parElem.setAttribute(ValueName(),(this->fieldVal.toString()));
+// // break;
+// // case FilterParameter::PARFLOATLIST:
+// // {
+// // parElem.setAttribute(TypeName(), FloatListName());
+// // QList values = this->fieldVal.toList();
+// // for(int i=0; i < values.size(); ++i)
+// // {
+// // QDomElement listElement = doc.createElement(ItemName());
+// // listElement.setAttribute(ValueName(), values[i].toString());
+// // parElem.appendChild(listElement);
+// // }
+// // }
+// // break;
+// // case FilterParameter::PARDYNFLOAT:
+// // parElem.setAttribute(TypeName(), DynamicFloatName());
+// // parElem.setAttribute(ValueName(), this->fieldVal.toString());
+// // parElem.setAttribute(MinName(), QString::number(this->min));
+// // parElem.setAttribute(MaxName(), QString::number(this->max));
+// // //parElem.setAttribute(MaskName(),QString::number(this->mask));
+// // break;
+// // case FilterParameter::PAROPENFILENAME:
+// // parElem.setAttribute(TypeName(), OpenFileNameName());
+// // parElem.setAttribute(ValueName(), this->fieldVal.toString());
+// // break;
+// // case FilterParameter::PARSAVEFILENAME:
+// // parElem.setAttribute(TypeName(), SaveFileNameName());
+// // parElem.setAttribute(ValueName(), this->fieldVal.toString());
+// // break;
+// // case FilterParameter::PARPOINT3F:
+// // {
+// // QList pointVals = this->fieldVal.toList();
+// // parElem.setAttribute("type","Point3f");
+// // parElem.setAttribute("x",QString::number(pointVals[0].toDouble()));
+// // parElem.setAttribute("y",QString::number(pointVals[1].toDouble()));
+// // parElem.setAttribute("z",QString::number(pointVals[2].toDouble()));
+// // }
+// // break;
+// // default: assert(0);
+// // }
+// return parElem;
+// }
+//
+//void FilterParameter::addQDomElement(RichParameterSet &par, QDomElement &np)
+//{
+// QString name=np.attribute("name");
+// QString type=np.attribute("type");
+//
+// qDebug(" Reading Param with name %s : %s",qPrintable(name),qPrintable(type));
+//
+// if(type=="Bool") { par.addParam(new RichBool(name,np.attribute("value")!=QString("false")); return; }
+// if(type=="Int") { par.addParam(new RichInt(name,np.attribute("value").toInt()); return; }
+// if(type=="Float") { par.addParam(new RichFloat(name,np.attribute("value").toDouble()); return; }
+// if(type=="String") { par.addParam(new RichString(name,np.attribute("value")); return; }
+// if(type=="AbsPerc") { par.addParam(new RichAbsPerc(name,np.attribute("value").toFloat(),np.attribute("min").toFloat(),np.attribute("max").toFloat()); return; }
+// if(type=="Color") { par.addParam(new RichColor(name,QColor::QColor(np.attribute("rgb").toUInt())); return; }
+// if(type=="Matrix44")
+// {
+// Matrix44f mm;
+// for(int i=0;i<16;++i)
+// mm.V()[i]=np.attribute(QString("val")+QString::number(i)).toDouble();
+// par.addParam(new RichMatrix44(name,mm);
+// return;
+// }
+// if(type=="Enum")
+// {
+// QStringList list = QStringList::QStringList();
+// for(QDomElement ns = np.firstChildElement("EnumString"); !ns.isNull(); ns = ns.nextSiblingElement("EnumString")){
+// list< values;
+// for(QDomElement listItem = np.firstChildElement(ItemName());
+// !listItem.isNull();
+// listItem = listItem.nextSiblingElement(ItemName()))
+// {
+// values.append(listItem.attribute(ValueName()).toFloat());
+// }
+// par.addParam(new RichFloatList(name,values);
+// return;
+// }
+//
+// if(type == DynamicFloatName()) { par.addParam(new RichDynamicFloat(name, np.attribute(ValueName()).toFloat(), np.attribute(MinName()).toFloat(), np.attribute(MaxName()).toFloat()); return; }
+// if(type == OpenFileNameName()) { par.addParam(new RichOpenFileName(name, np.attribute(ValueName())); return; }
+// if(type == SaveFileNameName()) { par.addParam(new RichSaveFileName(name, np.attribute(ValueName())); return; }
+// if(type=="Point3f")
+// {
+// Point3f val;
+// val[0]=np.attribute("x").toFloat();
+// val[1]=np.attribute("y").toFloat();
+// val[2]=np.attribute("z").toFloat();
+// par.addParam(new RichPoint3f(name, val);
+// return;
+// }
+//
+// assert(0); // we are trying to parse an unknown xml element
+//}
+
+/********************/
+
+bool RichParameterSet::hasParameter(QString name)
{
- QList::iterator fpli;
+ QList::iterator fpli;
for(fpli=paramList.begin();fpli!=paramList.end();++fpli)
- if((*fpli).fieldName==name)
- return true;
-
+ if((*fpli)->name ==name)
+ return true;
+
return false;
}
-FilterParameter *FilterParameterSet::findParameter(QString name)
+RichParameter* RichParameterSet::findParameter(QString name)
{
- QList::iterator fpli;
+ QList::iterator fpli;
for(fpli=paramList.begin();fpli!=paramList.end();++fpli)
- if((*fpli).fieldName==name)
- return &*fpli;
-
+ if((*fpli)->name ==name)
+ return *fpli;
+
qDebug("FilterParameter Warning: Unable to find a parameter with name '%s',\n"
- " Please check types and names of the parameter in the calling filter",qPrintable(name));
+ " Please check types and names of the parameter in the calling filter",qPrintable(name));
return 0;
}
-const FilterParameter *FilterParameterSet::findParameter(QString name) const
+const RichParameter* RichParameterSet::findParameter(QString name) const
{
- QList::const_iterator fpli;
+ QList::const_iterator fpli;
for(fpli=paramList.begin();fpli!=paramList.end();++fpli)
- if((*fpli).fieldName==name)
- return &*fpli;
-
+ {
+ if((*fpli != NULL) && (*fpli)->name==name)
+ return *fpli;
+ }
qDebug("FilterParameter Warning: Unable to find a parameter with name '%s',\n"
- " Please check types and names of the parameter in the calling filter",qPrintable(name));
+ " Please check types and names of the parameter in the calling filter",qPrintable(name));
return 0;
}
-void FilterParameterSet::removeParameter(QString name){
- paramList.removeAll(*findParameter(name));
+RichParameterSet& RichParameterSet::removeParameter(QString name){
+ paramList.removeAll(findParameter(name));
+ return (*this);
}
-//--------------------------------------
-
-void FilterParameterSet::addBool (QString name, bool defaultVal, QString desc, QString tooltip)
+RichParameterSet& RichParameterSet::addParam(RichParameter* pd )
{
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
- p.fieldVal=defaultVal;
- p.fieldType=FilterParameter::PARBOOL;
- paramList.push_back(p);
-}
-
-void FilterParameterSet::setBool(QString name, bool newVal)
-{
- FilterParameter *p=findParameter(name);
- assert(p);
- p->fieldVal=QVariant(newVal);
-}
-bool FilterParameterSet::getBool(QString name) const
-{
- const FilterParameter *p=findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARBOOL);
- return p->fieldVal.toBool();
-}
-
-//--------------------------------------
-
-void FilterParameterSet::addInt(QString name, int defaultVal, QString desc, QString tooltip)
-{
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
- p.fieldVal=defaultVal;
- p.fieldType=FilterParameter::PARINT;
- paramList.push_back(p);
-}
-int FilterParameterSet::getInt(QString name) const
-{
- const FilterParameter *p=findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARINT);
- return p->fieldVal.toInt();
-}
-void FilterParameterSet::setInt(QString name, int newVal)
-{
- FilterParameter *p=findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARINT);
- p->fieldVal=QVariant(newVal);
-}
-
-//--------------------------------------
-
-void FilterParameterSet::addFloat(QString name, float defaultVal, QString desc, QString tooltip)
-{
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
- p.fieldVal=defaultVal;
- p.fieldType=FilterParameter::PARFLOAT;
- paramList.push_back(p);
-}
-float FilterParameterSet::getFloat(QString name) const
-{
- const FilterParameter *p=findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARFLOAT);
- return float(p->fieldVal.toDouble());
-}
-void FilterParameterSet::setFloat(QString name, float newVal)
-{
- FilterParameter *p=findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARFLOAT);
- p->fieldVal=QVariant(double(newVal));
-}
-
-//--------------------------------------
-void FilterParameterSet::addColor(QString name, QColor defaultVal, QString desc, QString tooltip)
-{
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
- p.fieldVal=defaultVal.rgb(); // it is converted to an unsigned int
- p.fieldType=FilterParameter::PARCOLOR;
- paramList.push_back(p);
-}
-
-Color4b FilterParameterSet::getColor4b(QString name) const
-{
- QColor c=getColor(name);
- return Color4b(c.red(),c.green(),c.blue(),255);
-}
-
-QColor FilterParameterSet::getColor(QString name) const
-{
- const FilterParameter *p=findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARCOLOR);
- return QColor(QRgb(p->fieldVal.toUInt()));
-}
-
-void FilterParameterSet::setColor(QString name, QColor newVal)
-{
- FilterParameter *p=findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARCOLOR);
- p->fieldVal=QVariant(newVal.rgb());
-}
-
-//--------------------------------------
-
-void FilterParameterSet::addString (QString name, QString defaultVal, QString desc, QString tooltip)
-{
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
- p.fieldVal=defaultVal;
- p.fieldType=FilterParameter::PARSTRING;
- paramList.push_back(p);
-}
-QString FilterParameterSet::getString(QString name) const
-{
- const FilterParameter *p=findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARSTRING);
- return p->fieldVal.toString();
-}
-void FilterParameterSet::setString(QString name, QString newVal)
-{
- FilterParameter *p=findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARSTRING);
- p->fieldVal=QVariant(newVal);
+ paramList.push_back(pd);
+ return (*this);
}
//--------------------------------------
-Matrix44f FilterParameterSet::getMatrix44(QString name) const
+void RichParameterSet::setValue(QString name,const Value& newval)
{
- const FilterParameter *p=findParameter(name);
-
+ RichParameter *p=findParameter(name);
assert(p);
- assert(p->fieldType==FilterParameter::PARMATRIX);
- assert(p->fieldVal.type()==QVariant::List);
-
- Matrix44f matrix;
- QList matrixVals = p->fieldVal.toList();
- assert(matrixVals.size()==16);
- for(int i=0;i<16;++i)
- matrix.V()[i]=matrixVals[i].toDouble();
- return matrix;
-}
-void FilterParameterSet::addMatrix44 (QString name, Matrix44f defaultVal, QString desc, QString tooltip)
-{
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
-
- QList matrixVals;
- for(int i=0;i<16;++i)
- matrixVals.append(defaultVal.V()[i]);
- p.fieldVal=matrixVals;
- p.fieldType=FilterParameter::PARMATRIX;
- paramList.push_back(p);
-}
-
-
-void FilterParameterSet::setMatrix44(QString , Matrix44f )
-{
- assert(0);
+ p->val->set(newval);
}
//--------------------------------------
-Point3f FilterParameterSet::getPoint3f(QString name) const
+bool RichParameterSet::getBool(QString name) const
{
- const FilterParameter *p=findParameter(name);
-
+ const RichParameter *p=findParameter(name);
assert(p);
- assert(p->fieldType==FilterParameter::PARPOINT3F);
- assert(p->fieldVal.type()==QVariant::List);
-
- Point3f point;
- QList pointVals = p->fieldVal.toList();
- assert(pointVals.size()==3);
- for(int i=0;i<3;++i)
- point[i]=pointVals[i].toDouble();
- return point;
-}
-void FilterParameterSet::addPoint3f (QString name, Point3f defaultVal, QString desc, QString tooltip)
-{
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
-
- QList pointVals;
- for(int i=0;i<3;++i)
- pointVals.append(defaultVal[i]);
- p.fieldVal=pointVals;
- p.fieldType=FilterParameter::PARPOINT3F;
- paramList.push_back(p);
-}
-void FilterParameterSet::setPoint3f(QString name, Point3f newVal)
-{
- FilterParameter *p=findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARPOINT3F);
- QList pointVals;
- for(int i=0;i<3;++i)
- pointVals.append(newVal[i]);
- p->fieldVal=pointVals;
+ return p->val->getBool();
}
+
//--------------------------------------
-void FilterParameterSet::addAbsPerc (QString name, float defaultVal, float minVal, float maxVal, QString desc, QString tooltip)
+int RichParameterSet::getInt(QString name) const
{
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
- p.fieldVal=defaultVal;
- p.fieldType=FilterParameter::PARABSPERC;
- p.min=minVal;
- p.max=maxVal;
- paramList.push_back(p);
-}
-float FilterParameterSet::getAbsPerc(QString name) const
-{
- const FilterParameter *p=findParameter(name);
+ const RichParameter *p=findParameter(name);
assert(p);
- assert(p->fieldType == FilterParameter::PARABSPERC);
- return float(p->fieldVal.toDouble());
-}
-void FilterParameterSet::setAbsPerc(QString name, float newVal)
-{
- FilterParameter *p=findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARABSPERC);
- p->fieldVal=QVariant(double(newVal));
+ return p->val->getInt();
}
-void FilterParameterSet::addEnum (QString name, int defaultVal, QStringList values, QString desc, QString tooltip) {
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
- p.fieldVal=defaultVal;
- p.fieldType=FilterParameter::PARENUM;
- p.enumValues = values;
- paramList.push_back(p);
-}
+//--------------------------------------
-int FilterParameterSet::getEnum(QString name) const {
- const FilterParameter *p=findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARENUM);
- return float(p->fieldVal.toInt());
-}
-
-void FilterParameterSet::setEnum(QString name, int newVal)
+float RichParameterSet::getFloat(QString name) const
{
- FilterParameter *p=findParameter(name);
+ const RichParameter *p=findParameter(name);
assert(p);
- assert(p->fieldType == FilterParameter::PARENUM);
- p->fieldVal=QVariant(int(newVal));
+ return p->val->getFloat();
}
-void FilterParameterSet::addFloatList(QString name, QList &defaultValue, QString desc, QString tooltip)
+//--------------------------------------
+
+QColor RichParameterSet::getColor(QString name) const
{
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
-
- QList tempList;
- for(int i = 0; i < defaultValue.size(); ++i)
- {
- //if you put the float in directly int converts to a double which we do not want
- tempList.push_back(QVariant(QString().setNum(defaultValue.at(i), 'g', 12)));
- //qDebug() << "putting down " << QString().setNum(defaultValue.at(i), 'g', 12) ;
- }
-
- p.fieldVal = tempList;
- p.fieldType = FilterParameter::PARFLOATLIST;
- paramList.push_back(p);
+ const RichParameter *p=findParameter(name);
+ assert(p);
+ return p->val->getColor();
}
-QList FilterParameterSet::getFloatList(QString name) const
+Color4b RichParameterSet::getColor4b(QString name) const
{
- const FilterParameter *p = findParameter(name);
+ const RichParameter *p=findParameter(name);
assert(p);
- assert(p->fieldType == FilterParameter::PARFLOATLIST);
-
- QList floatList;
- QList internalList = p->fieldVal.toList();
- for(int i = 0; i < internalList.size(); ++i)
- floatList.push_back(internalList.at(i).toString().toFloat());
-
- return floatList;
+ return p->val->getColor4b();
}
-void FilterParameterSet::setFloatList(QString name, QList &newValue)
+//--------------------------------------
+
+
+QString RichParameterSet::getString(QString name) const
{
- FilterParameter *p = findParameter(name);
+ const RichParameter*p=findParameter(name);
assert(p);
- assert(p->fieldType == FilterParameter::PARFLOATLIST);
-
- QList tempList;
- for(int i = 0; i < newValue.size(); ++i)
- {
- tempList.push_back(QVariant(QString().setNum(newValue.at(i), 'g', 12)));
- //qDebug() << "insetfloatlist " << QVariant(QString().setNum(newValue.at(i), 'g', 12));
- }
- p->fieldVal = tempList;
+ return p->val->getString();
+}
+
+//--------------------------------------
+
+
+Matrix44f RichParameterSet::getMatrix44(QString name) const
+{
+ const RichParameter *p=findParameter(name);
+ assert(p);
+ return p->val->getMatrix44f();
+}
+
+//--------------------------------------
+
+Point3f RichParameterSet::getPoint3f(QString name) const
+{
+ const RichParameter *p=findParameter(name);
+ assert(p);
+ return p->val->getPoint3f();
+}
+
+//--------------------------------------
+
+float RichParameterSet::getAbsPerc(QString name) const
+{
+ const RichParameter *p=findParameter(name);
+ assert(p);
+ return float(p->val->getAbsPerc());
+}
+
+int RichParameterSet::getEnum(QString name) const {
+ const RichParameter *p=findParameter(name);
+ assert(p);
+ return float(p->val->getEnum());
+}
+
+QList RichParameterSet::getFloatList(QString name) const
+{
+ const RichParameter *p = findParameter(name);
+ assert(p);
+ return p->val->getFloatList();
}
/* ---- */
-void FilterParameterSet::addMesh (QString name, MeshModel *defaultVal, QString desc, QString tooltip) {
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
- p.pointerVal= defaultVal;
- p.fieldType=FilterParameter::PARMESH;
- paramList.push_back(p);
-}
-
-//make the default the mesh that is at the given position in the mesh document
-void FilterParameterSet::addMesh(QString name, int position, QString desc, QString tooltip)
-{
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
- p.fieldVal = position;
- p.pointerVal = NULL;
- p.fieldType = FilterParameter::PARMESH;
- paramList.push_back(p);
-}
-
-MeshModel * FilterParameterSet::getMesh(QString name) const {
- const FilterParameter *p=findParameter(name);
+MeshModel * RichParameterSet::getMesh(QString name) const {
+ const RichParameter *p=findParameter(name);
assert(p);
- assert(p->fieldType == FilterParameter::PARMESH);
- return (MeshModel *)(p->pointerVal);
-}
-
-void FilterParameterSet::setMesh(QString name, MeshModel * newVal, int position)
-{
- FilterParameter *p=findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARMESH);
- p->fieldVal = position;
- p->pointerVal= newVal;
+ return p->val->getMesh();
}
/* ---- */
/* Dynamic Float Members*/
/* ---- */
-void FilterParameterSet::addDynamicFloat(QString name, float defaultVal, float minVal, float maxVal, QString desc , QString tooltip )
+float RichParameterSet::getDynamicFloat(QString name) const
{
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
- assert(defaultVal<=maxVal);
- assert(defaultVal>=minVal);
- p.fieldVal=defaultVal;
- p.fieldType=FilterParameter::PARDYNFLOAT;
- p.min=minVal;
- p.max=maxVal;
- //p.mask=changeMask;
- paramList.push_back(p);
-}
-
-float FilterParameterSet::getDynamicFloat(QString name) const
-{
- const FilterParameter *p=findParameter(name);
+ const RichParameter *p=findParameter(name);
assert(p);
- assert(p->fieldType == FilterParameter::PARDYNFLOAT);
- return float(p->fieldVal.toDouble());
+ return float(p->val->getDynamicFloat());
}
-void FilterParameterSet::setDynamicFloat(QString name, float newVal)
+QString RichParameterSet::getOpenFileName(QString name) const
{
- FilterParameter *p=findParameter(name);
+ const RichParameter *p = findParameter(name);
assert(p);
- assert(p->fieldType == FilterParameter::PARDYNFLOAT);
- p->fieldVal=QVariant(newVal);
+ return p->val->getFileName();
}
-/* PAROPENFILENAME */
-void FilterParameterSet::addOpenFileName(QString name, QString defaultVal, QString extension, QString desc, QString tooltip)
+QString RichParameterSet::getSaveFileName(QString name) const
{
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
- p.fieldVal = defaultVal;
- p.fieldType = FilterParameter::PAROPENFILENAME;
-
- //add the extension to this unused variable because i think it is cleaner than adding another variable not used anywhere else
- p.enumValues.push_back(extension);
-
- paramList.push_back(p);
-}
-
-QString FilterParameterSet::getOpenFileName(QString name) const
-{
- const FilterParameter *p = findParameter(name);
+ const RichParameter *p = findParameter(name);
assert(p);
- assert(p->fieldType == FilterParameter::PAROPENFILENAME);
- return p->fieldVal.toString();
+ return p->val->getFileName();
}
-void FilterParameterSet::setOpenFileName(QString name, QString newVal)
+RichParameterSet& RichParameterSet::operator=( const RichParameterSet& rps )
{
- FilterParameter *p = findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PAROPENFILENAME);
- p->fieldVal = QVariant(newVal);
+ return copy(rps);
}
-/* PARSAVEFILENAME */
-
-void FilterParameterSet::addSaveFileName(QString name, QString defaultVal, QString extension, QString desc, QString tooltip)
+bool RichParameterSet::operator==( const RichParameterSet& rps )
{
- assert(!hasParameter(desc));
- FilterParameter p(name,desc,tooltip);
- p.fieldVal = defaultVal;
- p.fieldType = FilterParameter::PARSAVEFILENAME;
-
- //add the extension to this unused variable because i think it is cleaner than adding another variable not used anywhere else
- p.enumValues.push_back(extension);
-
- paramList.push_back(p);
-}
+ if (rps.paramList.size() != paramList.size())
+ return false;
-QString FilterParameterSet::getSaveFileName(QString name) const
-{
- const FilterParameter *p = findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARSAVEFILENAME);
- return p->fieldVal.toString();
-}
-
-void FilterParameterSet::setSaveFileName(QString name, QString newVal)
-{
- FilterParameter *p = findParameter(name);
- assert(p);
- assert(p->fieldType == FilterParameter::PARSAVEFILENAME);
- p->fieldVal = QVariant(newVal);
-}
-
-QDomElement FilterParameter::createElement(QDomDocument &doc)
-{
- QDomElement parElem = doc.createElement("Param");
- parElem.setAttribute("name",this->fieldName);
- switch (this->fieldType)
+ bool iseq = true;
+ unsigned int ii = 0;
+ while((ii < rps.paramList.size()) && iseq)
{
- case FilterParameter::PARBOOL:
- parElem.setAttribute("type","Bool");
- parElem.setAttribute("value",this->fieldVal.toString());
- break;
- case FilterParameter::PARSTRING:
- parElem.setAttribute("type","String");
- parElem.setAttribute("value",this->fieldVal.toString());
- break;
- case FilterParameter::PARINT:
- parElem.setAttribute("type","Int");
- parElem.setAttribute("value",this->fieldVal.toInt());
- break;
- case FilterParameter::PARFLOAT:
- parElem.setAttribute("type","Float");
- parElem.setAttribute("value",this->fieldVal.toString());
- break;
- case FilterParameter::PARABSPERC:
- parElem.setAttribute("type","AbsPerc");
- parElem.setAttribute("value",this->fieldVal.toString());
- parElem.setAttribute("min",QString::number(this->min));
- parElem.setAttribute("max",QString::number(this->max));
- break;
- case FilterParameter::PARCOLOR:
- parElem.setAttribute("type","Color");
- parElem.setAttribute("rgb",this->fieldVal.toString());
- break;
- case FilterParameter::PARENUM:
- {
- parElem.setAttribute("type","Enum");
- parElem.setAttribute("value",this->fieldVal.toString());
- QStringList::iterator kk;
- for(kk = this->enumValues.begin();kk!=this->enumValues.end();++kk){
- QDomElement sElem = doc.createElement("EnumString");
- sElem.setAttribute("value",(*kk));
- parElem.appendChild(sElem);
- }
- }
- break;
- case FilterParameter::PARMATRIX:
- {
- parElem.setAttribute("type","Matrix44");
- QList matrixVals = this->fieldVal.toList();
- for(int i=0;i<16;++i)
- parElem.setAttribute(QString("val")+QString::number(i),matrixVals[i].toString());
- }
- break;
- case FilterParameter::PARMESH:
- parElem.setAttribute(TypeName(), MeshPointerName());
- //this is the mesh's position in the mesh document that was used
- parElem.setAttribute(ValueName(),(this->fieldVal.toString()));
- break;
- case FilterParameter::PARFLOATLIST:
- {
- parElem.setAttribute(TypeName(), FloatListName());
- QList values = this->fieldVal.toList();
- for(int i=0; i < values.size(); ++i)
- {
- QDomElement listElement = doc.createElement(ItemName());
- listElement.setAttribute(ValueName(), values[i].toString());
- parElem.appendChild(listElement);
- }
- }
- break;
- case FilterParameter::PARDYNFLOAT:
- parElem.setAttribute(TypeName(), DynamicFloatName());
- parElem.setAttribute(ValueName(), this->fieldVal.toString());
- parElem.setAttribute(MinName(), QString::number(this->min));
- parElem.setAttribute(MaxName(), QString::number(this->max));
- //parElem.setAttribute(MaskName(),QString::number(this->mask));
- break;
- case FilterParameter::PAROPENFILENAME:
- parElem.setAttribute(TypeName(), OpenFileNameName());
- parElem.setAttribute(ValueName(), this->fieldVal.toString());
- break;
- case FilterParameter::PARSAVEFILENAME:
- parElem.setAttribute(TypeName(), SaveFileNameName());
- parElem.setAttribute(ValueName(), this->fieldVal.toString());
- break;
- case FilterParameter::PARPOINT3F:
- {
- QList pointVals = this->fieldVal.toList();
- parElem.setAttribute("type","Point3f");
- parElem.setAttribute("x",QString::number(pointVals[0].toDouble()));
- parElem.setAttribute("y",QString::number(pointVals[1].toDouble()));
- parElem.setAttribute("z",QString::number(pointVals[2].toDouble()));
- }
- break;
- default: assert(0);
- }
- return parElem;
+ if (!(*rps.paramList.at(ii) == *paramList.at(ii)))
+ iseq = false;
+ ++ii;
}
-void FilterParameter::addQDomElement(FilterParameterSet &par, QDomElement &np)
+ return iseq;
+}
+
+RichParameterSet::~RichParameterSet()
{
- QString name=np.attribute("name");
- QString type=np.attribute("type");
+ //int val = _CrtCheckMemory( );
+ for(unsigned int ii = 0;ii < paramList.size();++ii)
+ delete paramList.at(ii);
+ paramList.clear();
- qDebug(" Reading Param with name %s : %s",qPrintable(name),qPrintable(type));
+}
- if(type=="Bool") { par.addBool(name,np.attribute("value")!=QString("false")); return; }
- if(type=="Int") { par.addInt(name,np.attribute("value").toInt()); return; }
- if(type=="Float") { par.addFloat(name,np.attribute("value").toDouble()); return; }
- if(type=="String") { par.addString(name,np.attribute("value")); return; }
- if(type=="AbsPerc") { par.addAbsPerc(name,np.attribute("value").toFloat(),np.attribute("min").toFloat(),np.attribute("max").toFloat()); return; }
- if(type=="Color") { par.addColor(name,QColor::QColor(np.attribute("rgb").toUInt())); return; }
- if(type=="Matrix44")
- {
- Matrix44f mm;
- for(int i=0;i<16;++i)
- mm.V()[i]=np.attribute(QString("val")+QString::number(i)).toDouble();
- par.addMatrix44(name,mm);
- return;
- }
- if(type=="Enum")
- {
- QStringList list = QStringList::QStringList();
- for(QDomElement ns = np.firstChildElement("EnumString"); !ns.isNull(); ns = ns.nextSiblingElement("EnumString")){
- list< values;
- for(QDomElement listItem = np.firstChildElement(ItemName());
- !listItem.isNull();
- listItem = listItem.nextSiblingElement(ItemName()))
- {
- values.append(listItem.attribute(ValueName()).toFloat());
- }
- par.addFloatList(name,values);
- return;
- }
-
- if(type == DynamicFloatName()) { par.addDynamicFloat(name, np.attribute(ValueName()).toFloat(), np.attribute(MinName()).toFloat(), np.attribute(MaxName()).toFloat()); return; }
- if(type == OpenFileNameName()) { par.addOpenFileName(name, np.attribute(ValueName())); return; }
- if(type == SaveFileNameName()) { par.addSaveFileName(name, np.attribute(ValueName())); return; }
- if(type=="Point3f")
- {
- Point3f val;
- val[0]=np.attribute("x").toFloat();
- val[1]=np.attribute("y").toFloat();
- val[2]=np.attribute("z").toFloat();
- par.addPoint3f(name, val);
- return;
- }
+RichParameterSet& RichParameterSet::copy( const RichParameterSet& rps )
+{
+ clear();
- assert(0); // we are trying to parse an unknown xml element
-}
\ No newline at end of file
+ RichParameterCopyConstructor copyvisitor;
+ for(unsigned int ii = 0;ii < rps.paramList.size();++ii)
+ {
+ rps.paramList.at(ii)->accept(copyvisitor);
+ paramList.push_back(copyvisitor.lastCreated);
+ }
+ return (*this);
+}
+
+
+RichParameterSet::RichParameterSet( const RichParameterSet& rps )
+{
+ clear();
+
+ RichParameterCopyConstructor copyvisitor;
+ for(unsigned int ii = 0;ii < rps.paramList.size();++ii)
+ {
+ rps.paramList.at(ii)->accept(copyvisitor);
+ paramList.push_back(copyvisitor.lastCreated);
+ }
+}
+
+/****************************************/
+
+void RichParameterCopyConstructor::visit( RichBool& pd )
+{
+ lastCreated = new RichBool(pd.name,pd.pd->defVal->getBool(),pd.pd->fieldDesc,pd.pd->tooltip);
+}
+
+void RichParameterCopyConstructor::visit( RichInt& pd )
+{
+ lastCreated = new RichInt(pd.name,pd.pd->defVal->getInt(),pd.pd->fieldDesc,pd.pd->tooltip);
+}
+
+void RichParameterCopyConstructor::visit( RichFloat& pd )
+{
+ lastCreated = new RichFloat(pd.name,pd.pd->defVal->getFloat(),pd.pd->fieldDesc,pd.pd->tooltip);
+}
+
+void RichParameterCopyConstructor::visit( RichString& pd )
+{
+ lastCreated = new RichString(pd.name,pd.pd->defVal->getString(),pd.pd->fieldDesc,pd.pd->tooltip);
+}
+
+void RichParameterCopyConstructor::visit( RichMatrix44f& pd )
+{
+ lastCreated = new RichMatrix44f(pd.name,pd.pd->defVal->getMatrix44f(),pd.pd->fieldDesc,pd.pd->tooltip);
+}
+
+void RichParameterCopyConstructor::visit( RichPoint3f& pd )
+{
+ lastCreated = new RichPoint3f(pd.name,pd.pd->defVal->getPoint3f(),pd.pd->fieldDesc,pd.pd->tooltip);
+}
+
+void RichParameterCopyConstructor::visit( RichColor& pd )
+{
+ lastCreated = new RichColor(pd.name,pd.pd->defVal->getColor(),pd.pd->fieldDesc,pd.pd->tooltip);
+}
+
+void RichParameterCopyConstructor::visit( RichColor4b& pd )
+{
+ /*lastCreated = new Color4bWidget(par,&pd);*/
+}
+
+void RichParameterCopyConstructor::visit( RichAbsPerc& pd )
+{
+ AbsPercDecoration* dec = reinterpret_cast(pd.pd);
+ lastCreated = new RichAbsPerc(pd.name,pd.pd->defVal->getAbsPerc(),dec->min,dec->max,pd.pd->fieldDesc,pd.pd->tooltip);
+}
+
+void RichParameterCopyConstructor::visit( RichEnum& pd )
+{
+ EnumDecoration* dec = reinterpret_cast(pd.pd);
+ lastCreated = new RichEnum(pd.name,pd.pd->defVal->getEnum(),dec->enumvalues,pd.pd->fieldDesc,pd.pd->tooltip);
+}
+
+void RichParameterCopyConstructor::visit( RichFloatList& pd )
+{
+ /*lastCreated = new FloatListWidget(par,&pd);*/
+}
+
+void RichParameterCopyConstructor::visit( RichDynamicFloat& pd )
+{
+ DynamicFloatDecoration* dec = reinterpret_cast(pd.pd);
+ lastCreated = new RichDynamicFloat(pd.name,pd.pd->defVal->getDynamicFloat(),dec->min,dec->max,pd.pd->fieldDesc,pd.pd->tooltip);
+}
+
+void RichParameterCopyConstructor::visit( RichOpenFile& pd )
+{
+ /*lastCreated = new OpenFileWidget(par,&pd);*/
+}
+
+void RichParameterCopyConstructor::visit( RichSaveFile& pd )
+{
+ /*lastCreated = new SaveFileWidget(par,&pd);*/
+}
+
+void RichParameterCopyConstructor::visit( RichMesh& pd )
+{
+ MeshDecoration* dec = reinterpret_cast(pd.pd);
+ lastCreated = new RichMesh(pd.name,dec->defVal->getMesh(),dec->meshdoc,dec->fieldDesc,dec->tooltip);
+}
diff --git a/src/meshlab/filterparameter.h b/src/meshlab/filterparameter.h
index 81dfa283a..79e3f561a 100644
--- a/src/meshlab/filterparameter.h
+++ b/src/meshlab/filterparameter.h
@@ -33,159 +33,634 @@
#include
-/*
-The Filter Parameter class
-The plugin for each filter exposes a set of typed parameters.
-The invocation of a filter requires that these parameters have the specified values.
-The Specification of the parameters can be done in two ways, either by an automatic dialog constructed by the MeshLab framework or by a user built dialog.
-
-*/
-class FilterParameterSet;
-class FilterParameter
+class Value
{
- public:
- FilterParameter()
- {
- fieldType=-1;
- }
-
- FilterParameter(QString name, QString desc, QString tooltip)
- {
- fieldType=-1;
- fieldName=name;
- fieldDesc=desc;
- fieldToolTip=tooltip;
- pointerVal = 0;
- }
-
- enum ParType
- {
- PARBOOL = 1,
- PARINT = 2,
- PARFLOAT = 3,
- PARSTRING = 4,
- PARABSPERC = 5,
- PARMATRIX = 6,
- PARCOLOR = 7,
- PARENUM = 8,
- PARMESH = 9,
- PARFLOATLIST = 10,
- PARDYNFLOAT = 11,
- PAROPENFILENAME = 12,
- PARSAVEFILENAME = 13,
- PARPOINT3F = 14
- };
-
- QString fieldName;
- QString fieldDesc;
- QString fieldToolTip;
- QVariant fieldVal;
-
- // The type of the parameter
- int fieldType;
-
- float min; // used by the AbsPerc and DynFloat types
- float max;
- //int mask; // used by the DynFloat types
- void *pointerVal;
- QStringList enumValues;
-
- //set the value to be that of the input paramter
- //needed because min, max, enumValues complicate things
- void setValue(const FilterParameter &inputParameter)
- {
- assert(fieldType == inputParameter.fieldType);
- fieldVal = inputParameter.fieldVal;
- min = inputParameter.min;
- max = inputParameter.max;
- pointerVal = inputParameter.pointerVal;
-
- //clear any old values
- enumValues.clear();
- //add all the new ones
- enumValues += inputParameter.enumValues;
- }
-
- //an equals operator that compares the field name and field type
- bool operator==(const FilterParameter &inputParameter) const
- {
- return (fieldName == inputParameter.fieldName);
- }
-
- bool WriteToSettings(QSettings &qs);
- bool readFromSettings(QSettings &qs);
-
- QDomElement createElement(QDomDocument &doc);
- static void addQDomElement(FilterParameterSet &par, QDomElement &np);
+public:
+ virtual bool getBool() const {assert(0);return bool();}
+ virtual int getInt() const {assert(0);return int();}
+ virtual float getFloat() const {assert(0);return float();}
+ virtual QString getString() const {assert(0);return QString();}
+ virtual vcg::Matrix44f getMatrix44f() const {assert(0);return vcg::Matrix44f();}
+ virtual vcg::Point3f getPoint3f() const {assert(0);return vcg::Point3f();}
+ virtual QColor getColor() const {assert(0);return QColor();}
+ virtual vcg::Color4b getColor4b() const {assert(0);return vcg::Color4b();}
+ virtual float getAbsPerc() const {assert(0);return float();}
+ virtual int getEnum() const {assert(0);return int();}
+ virtual MeshModel* getMesh() const {assert(0);return NULL;}
+ virtual QList getFloatList() const {assert(0);return QList();}
+ virtual float getDynamicFloat() const {assert(0);return float();}
+ virtual QString getFileName() const {assert(0);return QString();}
-
-static const QString TypeName() { return QString("type");}
-static const QString ValueName() { return QString("value");}
+ virtual bool isBool() const {return false;}
+ virtual bool isInt() const {return false;}
+ virtual bool isFloat() const {return false;}
+ virtual bool isString() const {return false;}
+ virtual bool isMatrix44f() const {return false;}
+ virtual bool isPoint3f() const {return false;}
+ virtual bool isColor() const {return false;}
+ virtual bool isColor4b() const {return false;}
+ virtual bool isAbsPerc() const {return false;}
+ virtual bool isEnum() const {return false;}
+ virtual bool isMesh() const {return false;}
+ virtual bool isFloatList() const {return false;}
+ virtual bool isDynamicFloat() const {return false;}
+ virtual bool isFileName() const {return false;}
-//chose "val" since it is already used and should be replaced by a constant
-static const QString ValName() { return QString("val");}
-static const QString MinName() { return QString("min");}
-static const QString MaxName() { return QString("max");}
-static const QString MaskName() { return QString("mask");}
-static const QString ItemName() { return QString("item");}
-
-//constants for the type names
-static const QString MeshPointerName() { return QString("MeshPointer");}
-static const QString FloatListName() { return QString("FloatList");}
-static const QString DynamicFloatName() { return QString("DynamicFloat");}
-static const QString OpenFileNameName() { return QString("OpenFileName");}
-static const QString SaveFileNameName() { return QString("SaveFileName");}
+
+ virtual void set(const Value& p) = 0;
+ virtual ~Value(){}
+};
+
+class BoolValue : public Value
+{
+public:
+ BoolValue(const bool val): pval(val){};
+ inline bool getBool() const {return pval;}
+ inline bool isBool() const {return true;}
+ inline void set(const Value& p) {pval = p.getBool();}
+ ~BoolValue() {}
+private:
+ bool pval;
+};
+
+class IntValue : public Value
+{
+public:
+ IntValue(const int val) : pval(val){};
+ inline int getInt() const {return pval;}
+ inline bool isInt() const {return true;}
+ inline void set(const Value& p) {pval = p.getInt();}
+ ~IntValue(){}
+private:
+ int pval;
+};
+
+class FloatValue : public Value
+{
+public:
+ FloatValue(const float val) :pval(val){};
+ inline float getFloat() const {return pval;}
+ inline bool isFloat() const {return true;}
+ inline void set(const Value& p) {pval = p.getFloat();}
+ ~FloatValue(){}
+private:
+ float pval;
+};
+
+class StringValue : public Value
+{
+public:
+ StringValue(const QString& val) :pval(val){};
+ inline QString getString() const {return pval;}
+ inline bool isString() const {return true;}
+ inline void set(const Value& p) {pval = p.getString();}
+ ~StringValue(){}
+private:
+ QString pval;
+};
+
+class Matrix44fValue : public Value
+{
+public:
+ Matrix44fValue(const vcg::Matrix44f& val) :pval(val){};
+ inline vcg::Matrix44f getMatrix44f() const {return pval;}
+ inline bool isMatrix44f() const {return true;}
+ inline void set(const Value& p){pval = p.getMatrix44f();}
+ ~Matrix44fValue(){}
+private:
+ vcg::Matrix44f pval;
+};
+
+class Point3fValue : public Value
+{
+public:
+ Point3fValue(const vcg::Point3f& val) : pval(val){};
+ inline vcg::Point3f getPoint3f() const {return pval;}
+ inline bool isPoint3f() const {return true;}
+ inline void set(const Value& p) {pval = p.getPoint3f();}
+ ~Point3fValue(){}
+private:
+ vcg::Point3f pval;
+};
+
+class ColorValue : public Value
+{
+public:
+ ColorValue(QColor val) :pval(val){};
+ inline QColor getColor() const {return pval;}
+ inline bool isColor() const {return true;}
+ inline void set(const Value& p) {pval = p.getColor();}
+ ~ColorValue(){}
+private:
+ QColor pval;
+};
+
+class Color4bValue : public Value
+{
+public:
+ Color4bValue(QString name,const vcg::Color4b val) :pval(val){};
+ inline vcg::Color4b getColor4b() const {return pval;}
+ inline bool isColor4b() const {return true;}
+ inline void set(const Value& p) {pval = p.getColor4b();}
+ ~Color4bValue(){}
+
+private:
+ vcg::Color4b pval;
+};
+
+class AbsPercValue : public FloatValue
+{
+public:
+ AbsPercValue(const float val) :FloatValue(val){};
+ inline float getAbsPerc() const {return getFloat();}
+ inline bool isAbsPerc() const {return true;}
+ ~AbsPercValue(){}
+};
+
+class EnumValue : public IntValue
+{
+public:
+ EnumValue(const int val) :IntValue(val){};
+ inline int getEnum() const {return getInt();}
+ inline bool isEnum() const {return true;}
+ ~EnumValue(){}
+};
+
+class FloatListValue : public Value
+{
+public:
+ FloatListValue(QList& val) :pval(val){};
+ inline QList getFloatList() const {return pval;}
+ inline void set(const Value& p) {pval = p.getFloatList();}
+ inline bool isFloatList() const {return true;}
+ ~FloatListValue() {}
+private:
+ QList pval;
+};
+
+class DynamicFloatValue : public FloatValue
+{
+public:
+ DynamicFloatValue(const float val) :FloatValue(val){};
+ inline float getDynamicFloat() const {return getFloat();}
+ inline bool isDynamicFloat() const {return true;}
+ ~DynamicFloatValue() {}
+};
+
+class FileValue : public Value
+{
+public:
+ FileValue(QString filename) :pval(filename){};
+ inline QString getFileName() const {return pval;}
+ inline bool isFileName() const {return true;}
+ inline void set(const Value& p) {pval = p.getFileName();}
+ ~FileValue(){}
+private:
+ QString pval;
+};
+
+class MeshValue : public Value
+{
+public:
+ MeshValue(MeshModel* mesh) : pval(mesh){};
+ inline MeshModel* getMesh() const {return pval;}
+ inline bool isMesh() const {return true;}
+ inline void set(const Value& p) {pval = p.getMesh();}
+ ~MeshValue(){}
+
+private:
+ MeshModel* pval;
+};
+
+/******************************/
+
+class ParameterDecoration
+{
+public:
+ QString fieldDesc;
+ QString tooltip;
+ Value* defVal;
+
+ ParameterDecoration(Value* defvalue,const QString desc = QString(),const QString tltip = QString())
+ :fieldDesc(desc),tooltip(tltip),defVal(defvalue) {}
+
+ virtual ~ParameterDecoration(){delete defVal;}
};
-/*
- The Filter Parameter class
- */
+class BoolDecoration : public ParameterDecoration
+{
+public:
+ BoolDecoration(BoolValue* defvalue,const QString desc=QString(),const QString tltip=QString())
+ :ParameterDecoration(defvalue,desc,tltip) {}
+ ~BoolDecoration(){}
+};
-class FilterParameterSet
+class IntDecoration : public ParameterDecoration
+{
+public:
+ IntDecoration(IntValue* defvalue,const QString desc = QString(),const QString tltip = QString())
+ :ParameterDecoration(defvalue,desc,tltip) {}
+ ~IntDecoration(){}
+};
+
+class FloatDecoration : public ParameterDecoration
+{
+public:
+ FloatDecoration(FloatValue* defvalue,const QString desc = QString(),const QString tltip = QString())
+ :ParameterDecoration(defvalue,desc,tltip) {}
+ ~FloatDecoration(){}
+};
+
+class StringDecoration : public ParameterDecoration
+{
+public:
+ StringDecoration(StringValue* defvalue,const QString desc = QString(),const QString tltip = QString())
+ :ParameterDecoration(defvalue,desc,tltip) {}
+ ~StringDecoration(){}
+};
+
+class Matrix44fDecoration : public ParameterDecoration
+{
+public:
+ Matrix44fDecoration(Matrix44fValue* defvalue,const QString desc = QString(),const QString tltip = QString())
+ :ParameterDecoration(defvalue,desc,tltip) {}
+ ~Matrix44fDecoration(){}
+};
+
+class Point3fDecoration : public ParameterDecoration
+{
+public:
+ Point3fDecoration(Point3fValue* defvalue,const QString desc = QString(),const QString tltip = QString())
+ :ParameterDecoration(defvalue,desc,tltip) {}
+ ~Point3fDecoration(){}
+};
+
+class ColorDecoration : public ParameterDecoration
+{
+public:
+ ColorDecoration(ColorValue* defvalue,const QString desc = QString(),const QString tltip= QString())
+ :ParameterDecoration(defvalue,desc,tltip) {}
+ ~ColorDecoration(){}
+};
+
+class Color4bDecoration : public ParameterDecoration
+{
+public:
+ Color4bDecoration(Color4bValue* defvalue,const QString desc = QString(),const QString tltip = QString())
+ :ParameterDecoration(defvalue,desc,tltip) {}
+ ~Color4bDecoration(){}
+};
+
+class AbsPercDecoration : public ParameterDecoration
+{
+public:
+ AbsPercDecoration(AbsPercValue* defvalue,const float minVal,const float maxVal,const QString desc = QString(),const QString tltip = QString())
+ :ParameterDecoration(defvalue,desc,tltip),min(minVal),max(maxVal) {}
+ float min;
+ float max;
+ ~AbsPercDecoration(){}
+};
+
+class EnumDecoration : public ParameterDecoration
+{
+public:
+ EnumDecoration(EnumValue* defvalue, QStringList values,const QString desc = QString(),const QString tltip = QString())
+ :ParameterDecoration(defvalue,desc,tltip),enumvalues(values) {}
+ QStringList enumvalues;
+ ~EnumDecoration(){}
+};
+
+class FloatListDecoration : public ParameterDecoration
+{
+public:
+ FloatListDecoration(FloatListValue* defvalue,const QString desc = QString(),const QString tltip = QString())
+ :ParameterDecoration(defvalue,desc,tltip) {}
+ ~FloatListDecoration(){}
+};
+
+class DynamicFloatDecoration : public ParameterDecoration
+{
+public:
+ DynamicFloatDecoration(DynamicFloatValue* defvalue, const float minVal,const float maxVal,const QString desc = QString(),const QString tltip = QString())
+ :ParameterDecoration(defvalue,desc,tltip),min(minVal),max(maxVal) {}
+ ~DynamicFloatDecoration(){};
+ float min;
+ float max;
+};
+
+class FileDecoration : public ParameterDecoration
+{
+public:
+ FileDecoration(FileValue* defvalue,const QString extension=QString(".*"),const QString desc = QString(),const QString tltip = QString())
+ :ParameterDecoration(defvalue,desc,tltip),ext(extension) {}
+ ~FileDecoration(){}
+
+ QString ext;
+};
+
+
+class MeshDecoration : public ParameterDecoration
+{
+public:
+ MeshDecoration(MeshValue* defvalue,MeshDocument* doc,const QString desc=QString(), const QString tltip=QString())
+ :ParameterDecoration(defvalue,desc,tltip),meshdoc(doc) { meshindex = doc->meshList.indexOf(defvalue->getMesh()); assert(meshindex != -1);}
+
+ MeshDecoration(int meshindex,MeshDocument* doc,const QString desc=QString(), const QString tltip=QString())
+ :ParameterDecoration(NULL,desc,tltip),meshdoc(doc)
+ {
+ assert(meshindex < doc->size() && meshindex >= 0);
+ defVal = new MeshValue(doc->meshList.at(meshindex));
+ }
+
+ ~MeshDecoration(){}
+
+ MeshDocument* meshdoc;
+ int meshindex;
+};
+
+/******************************/
+class RichBool;
+class RichInt;
+class RichFloat;
+class RichString;
+class RichMatrix44f;
+class RichPoint3f;
+class RichColor;
+class RichColor4b;
+class RichAbsPerc;
+class RichEnum;
+class RichFloatList;
+class RichDynamicFloat;
+class RichOpenFile;
+class RichSaveFile;
+class RichMesh;
+
+
+class Visitor
{
public:
- FilterParameterSet(){}
- // The data is just a list of Parameters
- //QMap paramMap;
- QList paramList;
- bool isEmpty() const {return paramList.isEmpty();}
- // Members
+ virtual void visit( RichBool& pd) = 0;
+ virtual void visit( RichInt& pd) = 0;
+ virtual void visit( RichFloat& pd) = 0;
+ virtual void visit( RichString& pd) = 0;
+ virtual void visit( RichMatrix44f& pd) = 0;
+ virtual void visit( RichPoint3f& pd) = 0;
+ virtual void visit( RichColor& pd) = 0;
+ virtual void visit( RichColor4b& pd) = 0;
+ virtual void visit( RichAbsPerc& pd) = 0;
+ virtual void visit( RichEnum& pd) = 0;
+ virtual void visit( RichFloatList& pd) = 0;
+ virtual void visit( RichDynamicFloat& pd) = 0;
+ virtual void visit( RichOpenFile& pd) = 0;
+ virtual void visit( RichSaveFile& pd) = 0;
+ virtual void visit( RichMesh& pd) = 0;
- void addBool (QString name, bool defaultVal, QString desc=QString(), QString tooltip=QString());
- void addInt (QString name, int defaultVal, QString desc=QString(), QString tooltip=QString());
- void addFloat (QString name, float defaultVal, QString desc=QString(), QString tooltip=QString());
- void addString (QString name, QString defaultVal, QString desc=QString(), QString tooltip=QString());
- void addMatrix44 (QString name, vcg::Matrix44f defaultVal, QString desc=QString(), QString tooltip=QString());
- void addPoint3f (QString name, vcg::Point3f defaultVal, QString desc=QString(), QString tooltip=QString());
- void addColor (QString name, QColor defaultVal, QString desc=QString(), QString tooltip=QString());
- void addAbsPerc (QString name, float defaultVal, float minVal, float maxVal, QString desc=QString(), QString tooltip=QString());
- void addEnum (QString name, int defaultVal, QStringList values, QString desc=QString(), QString tooltip=QString());
- void addMesh (QString name, MeshModel* m, QString desc=QString(), QString tooltip=QString());
-
- //make the default the mesh that is at the given position in the mesh document
- //if the filter is run in a script and has added a mesh for a position that does not exist in the MeshDocument, then the
- //script will fail to run. this is useful for filters that need more than one mesh to work.
- //if position is set to -1 no mesh will be chosen by default and a blank option will be put in the Enum
- void addMesh (QString name, int position, QString desc=QString(), QString tooltip=QString());
-
- /* A way to collect an arbitrary number of floats. Useful if you want the user to input an array of numbers */
- void addFloatList(QString name, QList &defaultValue, QString desc=QString(), QString tooltip=QString());
- void addDynamicFloat(QString name, float defaultVal, float minVal, float maxVal, QString desc=QString(), QString tooltip=QString());
-
- /* A way to use the built in QT file picker widget: QFileDialog::getOpenFileName
- * - QString extension - the regular exprssion used to decide what files to display in QT's file picker window
- */
- void addOpenFileName(QString name, QString defaultVal, QString extension=QString(".*"), QString desc=QString(), QString tooltip=QString());
-
- /* A way to use the built in QT file picker widget: QFileDialog::getSaveFileName
- * - QString extension - the regular exprssion used to decide what files to display in QT's file picker window
- */
- void addSaveFileName(QString name, QString defaultVal, QString extension=QString(".*"), QString desc=QString(), QString tooltip=QString());
-
+ virtual ~Visitor() {}
+};
+
+class RichParameter
+{
+public:
+ const QString name;
+ Value* val;
+
+ ParameterDecoration* pd;
+
+
+ RichParameter(const QString nm,Value* v,ParameterDecoration* prdec)
+ :name(nm),pd(prdec),val(v) {}
+ virtual void accept(Visitor& v) = 0;
+ virtual bool operator==(const RichParameter& rp) = 0;
+ virtual ~RichParameter() {delete val;delete pd;}
+};
+
+
+class RichBool : public RichParameter
+{
+public:
+ RichBool(const QString nm,const bool defval,const QString desc=QString(),const QString tltip=QString())
+ : RichParameter(nm,new BoolValue(defval),new BoolDecoration(new BoolValue(defval),desc,tltip)){}
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isBool() && (name == rb.name) && (val->getBool() == rb.val->getBool()));}
+
+ ~RichBool(){}
+};
+
+class RichInt : public RichParameter
+{
+public:
+ RichInt(const QString nm,const int defval,const QString desc=QString(),const QString tltip=QString())
+ :RichParameter(nm,new IntValue(defval),new IntDecoration(new IntValue(defval),desc,tltip)){}
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isInt() &&(name == rb.name) && (val->getInt() == rb.val->getInt()));}
+ ~RichInt(){}
+};
+
+class RichFloat : public RichParameter
+{
+public:
+ RichFloat(const QString nm,const float defval,const QString desc=QString(),const QString tltip=QString())
+ :RichParameter(nm,new FloatValue(defval),new FloatDecoration(new FloatValue(defval),desc,tltip)){}
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isFloat() &&(name == rb.name) && (val->getFloat() == rb.val->getFloat()));}
+ ~RichFloat(){}
+};
+
+class RichString : public RichParameter
+{
+public:
+ RichString(const QString nm,const QString defval,const QString desc=QString(),const QString tltip=QString())
+ :RichParameter(nm,new StringValue(defval),new StringDecoration(new StringValue(defval),desc,tltip)){}
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isString() &&(name == rb.name) && (val->getString() == rb.val->getString()));}
+ ~RichString(){}
+};
+
+class RichMatrix44f : public RichParameter
+{
+public:
+ RichMatrix44f(const QString nm,const vcg::Matrix44f& defval,const QString desc=QString(),const QString tltip=QString())
+ :RichParameter(nm,new Matrix44fValue(defval),new Matrix44fDecoration(new Matrix44fValue(defval),desc,tltip)){}
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isMatrix44f() &&(name == rb.name) && (val->getMatrix44f() == rb.val->getMatrix44f()));}
+ ~RichMatrix44f() {}
+};
+
+class RichPoint3f : public RichParameter
+{
+public:
+ RichPoint3f(const QString nm,const vcg::Point3f defval,const QString desc=QString(),const QString tltip=QString())
+ :RichParameter(nm,new Point3fValue(defval),new Point3fDecoration(new Point3fValue(defval),desc,tltip)){}
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isPoint3f() &&(name == rb.name) && (val->getPoint3f() == rb.val->getPoint3f()));}
+ ~RichPoint3f(){}
+};
+
+class RichColor : public RichParameter
+{
+public:
+ RichColor(const QString nm,const QColor defval,const QString desc=QString(),const QString tltip=QString())
+ :RichParameter(nm,new ColorValue(defval),new ColorDecoration(new ColorValue(defval),desc,tltip)){}
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isColor() &&(name == rb.name) && (val->getColor() == rb.val->getColor()));}
+ ~RichColor(){}
+
+};
+
+class RichColor4b : public RichParameter
+{
+public:
+ RichColor4b(const QString nm,Color4bValue* v,Color4bDecoration* prdec)
+ :RichParameter(nm,v,prdec){}
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isColor4b() &&(name == rb.name) && (val->getColor4b() == rb.val->getColor4b()));}
+ ~RichColor4b() {}
+};
+
+class RichAbsPerc : public RichParameter
+{
+public:
+ RichAbsPerc(const QString nm,const float defval,const float minval,const float maxval,const QString desc=QString(),const QString tltip=QString())
+ :RichParameter(nm,new AbsPercValue(defval),new AbsPercDecoration(new AbsPercValue(defval),minval,maxval,desc,tltip)){}
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isAbsPerc() &&(name == rb.name) && (val->getAbsPerc() == rb.val->getAbsPerc()));}
+ ~RichAbsPerc() {}
+};
+
+class RichEnum : public RichParameter
+{
+public:
+ RichEnum(const QString nm,const int defval,const QStringList values,const QString desc=QString(),const QString tltip=QString())
+ :RichParameter(nm,new EnumValue(defval),new EnumDecoration(new EnumValue(defval),values,desc,tltip)){}
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isEnum() &&(name == rb.name) && (val->getEnum() == rb.val->getEnum()));}
+ ~RichEnum(){}
+};
+
+class RichMesh : public RichParameter
+{
+public:
+ RichMesh(const QString nm,MeshModel* defval,MeshDocument* doc,const QString desc=QString(),const QString tltip=QString())
+ :RichParameter(nm,new MeshValue(defval),new MeshDecoration(new MeshValue(defval),doc,desc,tltip)){}
+
+ RichMesh(const QString nm,int meshindex,MeshDocument* doc,const QString desc=QString(),const QString tltip=QString())
+ :RichParameter(nm,NULL,new MeshDecoration(meshindex,doc,desc,tltip))
+ {
+ assert(meshindex < doc->size() && meshindex >= 0);
+ val = new MeshValue(doc->meshList.at(meshindex));
+ }
+
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isMesh() &&(name == rb.name) && (val->getMesh() == rb.val->getMesh()));}
+ ~RichMesh(){}
+};
+
+class RichFloatList : public RichParameter
+{
+public:
+ RichFloatList(const QString nm,FloatListValue* v,FloatListDecoration* prdec)
+ :RichParameter(nm,v,prdec){}
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isFloatList() &&(name == rb.name) && (val->getFloatList() == rb.val->getFloatList()));}
+ ~RichFloatList(){}
+};
+
+class RichDynamicFloat : public RichParameter
+{
+public:
+ RichDynamicFloat(const QString nm,const float defval,const float minval,const float maxval,const QString desc=QString(),const QString tltip=QString())
+ :RichParameter(nm,new DynamicFloatValue(defval),new DynamicFloatDecoration(new DynamicFloatValue(defval),minval,maxval,desc,tltip)){}
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isDynamicFloat() &&(name == rb.name) && (val->getDynamicFloat() == rb.val->getDynamicFloat()));}
+ ~RichDynamicFloat(){}
+
+};
+
+class RichOpenFile : public RichParameter
+{
+public:
+ RichOpenFile(const QString nm,const QString defval,const QString ext = QString("*.*"),const QString desc=QString(),const QString tltip=QString())
+ :RichParameter(nm,new FileValue(defval),new FileDecoration(new FileValue(defval),tltip,desc)){}
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isFileName() &&(name == rb.name) && (val->getFileName() == rb.val->getFileName()));}
+ ~RichOpenFile(){}
+};
+
+class RichSaveFile : public RichParameter
+{
+public:
+ RichSaveFile(const QString nm,FileValue* v,FileDecoration* prdec)
+ :RichParameter(nm,v,prdec){}
+ void accept(Visitor& v) {v.visit(*this);}
+ bool operator==(const RichParameter& rb) {return (rb.val->isFileName() &&(name == rb.name) && (val->getFileName() == rb.val->getFileName()));}
+ ~RichSaveFile(){}
+};
+
+
+
+/******************************/
+
+class RichParameterCopyConstructor : public Visitor
+{
+public:
+ RichParameterCopyConstructor(){}
+
+ void visit(RichBool& pd);
+ void visit(RichInt& pd);
+ void visit(RichFloat& pd);
+ void visit(RichString& pd);
+ void visit(RichMatrix44f& pd);
+ void visit(RichPoint3f& pd);
+ void visit(RichColor& pd);
+ void visit(RichColor4b& pd);
+ void visit(RichAbsPerc& pd);
+
+ void visit(RichEnum& pd);
+ void visit(RichFloatList& pd);
+
+ void visit(RichDynamicFloat& pd);
+
+ void visit(RichOpenFile& pd);
+ void visit(RichSaveFile& pd);
+ void visit(RichMesh& pd);
+
+ ~RichParameterCopyConstructor() {}
+
+ RichParameter* lastCreated;
+};
+
+class RichParameterSet
+{
+
+public:
+ RichParameterSet():paramList(){}
+ RichParameterSet(const RichParameterSet& rps);
+ // The data is just a list of Parameters
+ //QMap paramMap;
+ QList paramList;
+ bool isEmpty() const {return paramList.isEmpty();}
+ RichParameter* findParameter(QString name);
+ const RichParameter* findParameter(QString name) const;
+ bool hasParameter(QString name);
+
+
+ RichParameterSet& operator=(const RichParameterSet& rps);
+ RichParameterSet& copy(const RichParameterSet& rps);
+ bool operator==(const RichParameterSet& rps);
+
+ RichParameterSet& addParam(RichParameter* pd);
+
+ //remove a parameter from the set by name
+ RichParameterSet& removeParameter(QString name);
+
+ void clear() { paramList.clear(); }
+
+ void setValue(const QString name,const Value& val);
+
bool getBool(QString name) const;
int getInt(QString name) const;
float getFloat(QString name) const;
@@ -195,41 +670,21 @@ public:
QColor getColor(QString name) const;
vcg::Color4b getColor4b(QString name) const;
float getAbsPerc(QString name) const;
- int getEnum(QString name) const;
+ int getEnum(QString name) const;
MeshModel* getMesh(QString name) const;
QList getFloatList(QString name) const;
float getDynamicFloat(QString name) const;
QString getOpenFileName(QString name) const;
QString getSaveFileName(QString name) const;
-
- void setBool(QString name, bool newVal) ;
- void setInt(QString name, int newVal) ;
- void setFloat(QString name, float newVal);
- void setString(QString name, QString newVal);
- void setMatrix44(QString name, vcg::Matrix44f newVal);
- void setPoint3f(QString name, vcg::Point3f newVal);
- void setColor(QString name, QColor newVal);
- void setAbsPerc(QString name, float newVal);
- void setEnum(QString name, int newVal);
-
- //position is the position of this mesh in the MeshDocument, this is needed for saving this parameter to a script
- void setMesh(QString name, MeshModel* newVal, int position = 0);
- void setFloatList(QString name, QList &newValue);
- void setDynamicFloat(QString name, float newVal);
- void setOpenFileName(QString name, QString newVal);
- void setSaveFileName(QString name, QString newVal);
-
- //int getDynamicFloatMask();
-
- FilterParameter *findParameter(QString name);
- const FilterParameter *findParameter(QString name) const;
- bool hasParameter(QString name);
-
- //remove a parameter from the set by name
- void removeParameter(QString name);
-
- void clear() { paramList.clear(); }
+
+
+ ~RichParameterSet();
};
+/****************************/
+
+
#endif
+
+
diff --git a/src/meshlab/filterscript.cpp b/src/meshlab/filterscript.cpp
index 576771ff1..a37e00640 100644
--- a/src/meshlab/filterscript.cpp
+++ b/src/meshlab/filterscript.cpp
@@ -77,12 +77,12 @@ bool FilterScript::save(QString filename)
{
QDomElement tag = doc.createElement("filter");
tag.setAttribute(QString("name"),(*ii).first);
- FilterParameterSet &par=(*ii).second;
- QList::iterator jj;
+ RichParameterSet &par=(*ii).second;
+ QList::iterator jj;
for(jj=par.paramList.begin();jj!=par.paramList.end();++jj)
{
- QDomElement parElem = (*jj).createElement(doc);
- tag.appendChild(parElem);
+ //// QDomElement parElem = (*jj).createElement(doc);
+ //// tag.appendChild(parElem);
}
root.appendChild(tag);
}
@@ -123,12 +123,12 @@ bool FilterScript::open(QString filename)
qDebug("FilterScript");
for(QDomElement nf = root.firstChildElement("filter"); !nf.isNull(); nf = nf.nextSiblingElement("filter"))
{
- FilterParameterSet par;
+ RichParameterSet par;
QString name=nf.attribute("name");
qDebug("Reading filter with name %s",qPrintable(name));
for(QDomElement np = nf.firstChildElement("Param"); !np.isNull(); np = np.nextSiblingElement("Param"))
{
- FilterParameter::addQDomElement(par,np);
+ //Guido// FilterParameter::addQDomElement(par,np);
}
actionList.append(qMakePair(name,par));
}
diff --git a/src/meshlab/filterscript.h b/src/meshlab/filterscript.h
index 7807f32b8..fc1954e9b 100644
--- a/src/meshlab/filterscript.h
+++ b/src/meshlab/filterscript.h
@@ -42,8 +42,8 @@ public:
bool open(QString filename);
bool save(QString filename);
- QList< QPair< QString , FilterParameterSet> > actionList;
- typedef QList< QPair >::iterator iterator;
+ QList< QPair< QString , RichParameterSet> > actionList;
+ typedef QList< QPair >::iterator iterator;
};
#endif
diff --git a/src/meshlab/glarea.cpp b/src/meshlab/glarea.cpp
index f7e43cf35..21091c962 100644
--- a/src/meshlab/glarea.cpp
+++ b/src/meshlab/glarea.cpp
@@ -90,8 +90,8 @@ void GLArea::initPreferences()
{
QSettings settings;
prefs.clear();
- prefs.addColor("BackgroundTop", settings.value("BackgroundTop").value(), "Top Background Color", "");
- prefs.addColor("BackgroundBottom", settings.value("BackgroundBottom").value(), "Bottom Background Color", "");
+ //GUIDO// prefs.addColor("BackgroundTop", settings.value("BackgroundTop").value(), "Top Background Color", "");
+ //GUIDO// prefs.addColor("BackgroundBottom", settings.value("BackgroundBottom").value(), "Bottom Background Color", "");
}
GLArea::~GLArea()
@@ -308,7 +308,7 @@ void GLArea::paintGL()
// Draw the selection
if(rm.selectedFaces) mm()->RenderSelectedFaces();
- pair p;
+ pair p;
foreach(p , iDecoratorsList)
{
MeshDecorateInterface * decorInterface = qobject_cast(p.first->parent());
diff --git a/src/meshlab/glarea.h b/src/meshlab/glarea.h
index 361289aba..4cbf968ca 100644
--- a/src/meshlab/glarea.h
+++ b/src/meshlab/glarea.h
@@ -204,7 +204,7 @@ public:
void setLightModel();
void setView();
void resetTrackBall();
- std::list > iDecoratorsList;
+ std::list > iDecoratorsList;
void setRenderer(MeshRenderInterface *rend, QAction *shader){ iRenderer = rend; currentShader = shader;}
MeshRenderInterface * getRenderer() { return iRenderer; }
@@ -306,7 +306,7 @@ public:
bool suspendedEditor;
protected:
- FilterParameterSet prefs;
+ RichParameterSet prefs;
void initPreferences();
void initializeGL();
void initTexture();
diff --git a/src/meshlab/interfaces.h b/src/meshlab/interfaces.h
index a6d1b312e..275cd8c50 100644
--- a/src/meshlab/interfaces.h
+++ b/src/meshlab/interfaces.h
@@ -78,29 +78,29 @@ public:
// This function is called by the framework, for each action at the loading of the plugins.
// it allows to add a list of global persistent parameters that can be changed from the meshlab itself.
// If your plugins/action has no GlobalParameter, do nothing.
- virtual void initGlobalParameterSet(QString /*format*/, FilterParameterSet & /*globalparam*/) {}
+ virtual void initGlobalParameterSet(QString /*format*/, RichParameterSet & /*globalparam*/) {}
// This function is called to initialize the list of additional parameters that a OPENING filter could require
// it is called by the framework BEFORE the actual mesh loading to perform to determine how parse the input file
// The instanced parameters are then passed to the open at the loading time.
// Typical example of use to decide what subportion of a mesh you have to load.
// If you do not need any additional processing simply do not override this and ignore the parameterSet in the open
- virtual void initPreOpenParameter(const QString &/*format*/, const QString &/*fileName*/, FilterParameterSet & /*par*/) {}
+ virtual void initPreOpenParameter(const QString &/*format*/, const QString &/*fileName*/, RichParameterSet & /*par*/) {}
// This function is called to initialize the list of additional parameters that a OPENING filter could require
// it is called by the framework AFTER the mesh is already loaded to perform more or less standard processing on the mesh.
// typical example: unifying vertices in stl models.
// If you do not need any additional processing do nothing.
- virtual void initOpenParameter(const QString &/*format*/, MeshModel &/*m*/, FilterParameterSet & /*par*/) {}
+ virtual void initOpenParameter(const QString &/*format*/, MeshModel &/*m*/, RichParameterSet & /*par*/) {}
// This is the corresponding function that is called after the mesh is loaded with the initialized parameters
- virtual void applyOpenParameter(const QString &/*format*/, MeshModel &/*m*/, const FilterParameterSet &/*par*/){}
+ virtual void applyOpenParameter(const QString &/*format*/, MeshModel &/*m*/, const RichParameterSet &/*par*/){}
// This function is called to initialize the list of additional parameters that a SAVING filter could require
// it is called by the framework after the mesh is loaded to perform more or less standard processing on the mesh.
// typical example: ascii or binary format for ply or stl
// If you do not need any additional parameter simply do nothing.
- virtual void initSaveParameter(const QString &/*format*/, MeshModel &/*m*/, FilterParameterSet & /*par*/) {}
+ virtual void initSaveParameter(const QString &/*format*/, MeshModel &/*m*/, RichParameterSet & /*par*/) {}
virtual void GetExportMaskCapability(QString &format, int &capability, int &defaultBits) const = 0;
@@ -110,7 +110,7 @@ public:
const QString &fileName, // The name of the file to be opened
MeshModel &m, // The mesh that is filled with the file content
int &mask, // a bit mask that will be filled reporting what kind of data we have found in the file (per vertex color, texture coords etc)
- const FilterParameterSet & par, // The parameters that have been set up in the initPreOpenParameter()
+ const RichParameterSet & par, // The parameters that have been set up in the initPreOpenParameter()
vcg::CallBackPos *cb=0, // standard callback for reporting progress in the loading
QWidget *parent=0)=0; // you should not use this...
@@ -119,7 +119,7 @@ public:
const QString &fileName,
MeshModel &m,
const int mask, // a bit mask indicating what kind of the data present in the mesh should be saved (e.g. you could not want to save normals in ply files)
- const FilterParameterSet & par,
+ const RichParameterSet & par,
vcg::CallBackPos *cb=0,
QWidget *parent= 0)=0 ;
@@ -164,7 +164,7 @@ class MainWindowInterface
{
public:
//isPreview tells whether this execution is being used to produce or preview a result
- virtual void executeFilter(QAction *, FilterParameterSet &, bool /* isPreview */){};
+ virtual void executeFilter(QAction *, RichParameterSet &, bool /* isPreview */){};
virtual ~MainWindowInterface(){};
// This function is to find the dir where all the deployed stuff reside.
@@ -276,7 +276,7 @@ public:
// This function is called by the framework, for each action at the loading of the plugins.
// it allows to add a list of global persistent parameters that can be changed from the meshlab itself.
// If your plugins/action has no GlobalParameter, do nothing.
- virtual void initGlobalParameterSet(QAction *, FilterParameterSet & /*globalparam*/) {}
+ virtual void initGlobalParameterSet(QAction *, RichParameterSet & /*globalparam*/) {}
// The FilterClass describes in which generic class of filters it fits.
// This choice affect the submenu in which each filter will be placed
@@ -308,8 +308,8 @@ public:
// this function will also be called by the commandline framework.
// If you want report errors, use the errorMsg() string. It will displayed in case of filters returning false.
- virtual bool applyFilter(QAction * /*filter*/, MeshModel &/*m*/, FilterParameterSet & /* par */, vcg::CallBackPos * /*cb*/) = 0;
- virtual bool applyFilter(QAction * filter, MeshDocument &md, FilterParameterSet & par, vcg::CallBackPos *cb)
+ virtual bool applyFilter(QAction * /*filter*/, MeshModel &/*m*/, RichParameterSet & /* par */, vcg::CallBackPos * /*cb*/) = 0;
+ virtual bool applyFilter(QAction * filter, MeshDocument &md, RichParameterSet & par, vcg::CallBackPos *cb)
{
return applyFilter(filter,*(md.mm()),par,cb);
}
@@ -351,8 +351,8 @@ public:
// This function is called to initialized the list of parameters.
// it is called by the auto dialog framework to know the list of parameters.
- virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*par*/) {}
- virtual void initParameterSet(QAction *filter,MeshDocument &md, FilterParameterSet &par)
+ virtual void initParameterSet(QAction *,MeshModel &/*m*/, RichParameterSet & /*par*/) {}
+ virtual void initParameterSet(QAction *filter,MeshDocument &md, RichParameterSet &par)
{initParameterSet(filter,*(md.mm()),par);}
// this function returns true if the filter has a personally customized dialog..
@@ -360,7 +360,7 @@ public:
// This function is invoked for filters with a custom dialog of a filter and when has the params
// it notify it to the mainwindow with the collected parameters
- virtual bool getCustomParameters(QAction *action, QWidget * /*parent*/, MeshModel &/*m*/, FilterParameterSet & params, MainWindowInterface *mw)
+ virtual bool getCustomParameters(QAction *action, QWidget * /*parent*/, MeshModel &/*m*/, RichParameterSet & params, MainWindowInterface *mw)
{
assert(mw);
mw->executeFilter(action, params, false);
@@ -490,13 +490,13 @@ public:
// This function is called by the framework, for each action at the loading of the plugins.
// it allows to add a list of global persistent parameters that can be changed from the meshlab itself.
// If your plugins/action has no GlobalParameter, do nothing.
- // The FilterParameterSet comes here already intialized with the values stored on the permanent storage.
+ // The RichParameterSet comes here already intialized with the values stored on the permanent storage.
// If a filter wants to save some permanent stuff should check its esistence here.
- virtual void initGlobalParameterSet(QAction *, FilterParameterSet * /*globalparam*/) {}
+ virtual void initGlobalParameterSet(QAction *, RichParameterSet * /*globalparam*/) {}
virtual bool StartDecorate(QAction * /*mode*/, MeshModel &/*m*/, GLArea * /*parent*/){assert(0); return false;};
- virtual void Decorate(QAction * /*mode*/, MeshModel &/*m*/, FilterParameterSet * /*param*/, GLArea * /*parent*/,QFont qf) = 0;
+ virtual void Decorate(QAction * /*mode*/, MeshModel &/*m*/, RichParameterSet * /*param*/, GLArea * /*parent*/,QFont qf) = 0;
virtual void EndDecorate(QAction * /*mode*/, MeshModel &/*m*/, GLArea * /*parent*/){};
virtual const QString ST(FilterIDType filter) const=0;
diff --git a/src/meshlab/mainwindow.h b/src/meshlab/mainwindow.h
index e4976cbf3..b9011602d 100644
--- a/src/meshlab/mainwindow.h
+++ b/src/meshlab/mainwindow.h
@@ -207,7 +207,7 @@ class MainWindow : public QMainWindow, MainWindowInterface
public:
// callback function to execute a filter
- void executeFilter(QAction *action, FilterParameterSet &srcpar, bool isPreview);
+ void executeFilter(QAction *action, RichParameterSet &srcpar, bool isPreview);
MainWindow();
static bool QCallBack(const int pos, const char * str);
@@ -301,6 +301,7 @@ private:
void updateRecentFileActions();
void setCurrentFile(const QString &fileName);
void addToMenu(QList, QMenu *menu, const char *slot);
+ //void saveHistory(QAction *action,const RichParameterSet ¶ms);
//void LoadKnownFilters(QStringList &filters, QHash &allKnownFormats, int type);
diff --git a/src/meshlab/mainwindow_RunTime.cpp b/src/meshlab/mainwindow_RunTime.cpp
index e280af90b..0ee14a809 100644
--- a/src/meshlab/mainwindow_RunTime.cpp
+++ b/src/meshlab/mainwindow_RunTime.cpp
@@ -387,7 +387,7 @@ void MainWindow::updateMenus()
foreach (QAction *a,decoratorActionList){a->setChecked(false);a->setEnabled(true);}
- pair p;
+ pair p;
foreach (p,GLA()->iDecoratorsList){p.first->setChecked(true);}
} // if active
else
@@ -526,7 +526,7 @@ void MainWindow::startFilter()
// (2) Ask for filter parameters (e.g. user defined threshold that could require a widget)
// bool ret=iFilter->getStdParameters(action, GLA(),*(GLA()->mm()), *par);
- FilterParameterSet parList;
+ RichParameterSet parList;
//Hide the std dialog just in case to avoid that two different filters runs mixed
//stddialog->hide();
@@ -556,14 +556,11 @@ void MainWindow::startFilter()
from the automatic dialog
from the user defined dialog
*/
-void MainWindow::executeFilter(QAction *action, FilterParameterSet ¶ms, bool isPreview)
+void MainWindow::executeFilter(QAction *action, RichParameterSet ¶ms, bool isPreview)
{
MeshFilterInterface *iFilter = qobject_cast< MeshFilterInterface *>(action->parent());
- // (3) save the current filter and its parameters in the history
- if(!isPreview) GLA()->filterHistory.actionList.append(qMakePair(action->text(),params));
-
qb->show();
iFilter->setLog(&(GLA()->log));
@@ -575,6 +572,10 @@ void MainWindow::executeFilter(QAction *action, FilterParameterSet ¶ms, bool
GLA()->mm()->updateDataMask(req);
qApp->restoreOverrideCursor();
+ // (3) save the current filter and its parameters in the history
+ if(!isPreview)
+ GLA()->filterHistory.actionList.append(qMakePair(action->text(),params));
+
// (4) Apply the Filter
bool ret;
qApp->setOverrideCursor(QCursor(Qt::WaitCursor));
@@ -716,7 +717,7 @@ void MainWindow::applyDecorateMode()
MeshDecorateInterface *iDecorateTemp = qobject_cast(action->parent());
bool found=false;
- pair p;
+ pair p;
foreach(p,GLA()->iDecoratorsList)
{
if(p.first->text()==action->text()){
@@ -728,7 +729,7 @@ void MainWindow::applyDecorateMode()
}
if(!found){
- FilterParameterSet * decoratorParams = new FilterParameterSet();
+ RichParameterSet * decoratorParams = new RichParameterSet();
iDecorateTemp->initGlobalParameterSet(action,decoratorParams);
bool ret = iDecorateTemp->StartDecorate(action,*GLA()->mm(),GLA());
if(ret) {
@@ -940,7 +941,7 @@ bool MainWindow::open(QString fileName, GLArea *gla)
MeshIOInterface* pCurrentIOPlugin = meshIOPlugins[idx-1];
pCurrentIOPlugin->setLog(&(GLA()->log));
qb->show();
- FilterParameterSet prePar;
+ RichParameterSet prePar;
pCurrentIOPlugin->initPreOpenParameter(extension, fileName,prePar);
if(!prePar.isEmpty())
{
@@ -960,7 +961,7 @@ bool MainWindow::open(QString fileName, GLArea *gla)
// requires some optional, or userdriven post-opening processing.
// and in that case ask for the required parameters and then
// ask to the plugin to perform that processing
- FilterParameterSet par;
+ RichParameterSet par;
pCurrentIOPlugin->initOpenParameter(extension, *mm, par);
if(!par.isEmpty())
{
@@ -1108,7 +1109,7 @@ bool MainWindow::saveAs(QString fileName)
pCurrentIOPlugin->GetExportMaskCapability(extension,capability,defaultBits);
// optional saving parameters (like ascii/binary encoding)
- FilterParameterSet savePar;
+ RichParameterSet savePar;
pCurrentIOPlugin->initSaveParameter(extension,*(this->GLA()->mm()),savePar);
diff --git a/src/meshlab/savemaskexporter.cpp b/src/meshlab/savemaskexporter.cpp
index cf8fe944e..b52280a17 100644
--- a/src/meshlab/savemaskexporter.cpp
+++ b/src/meshlab/savemaskexporter.cpp
@@ -90,7 +90,7 @@
#include "savemaskexporter.h"
#include "changetexturename.h"
-SaveMaskExporterDialog::SaveMaskExporterDialog(QWidget *parent,MeshModel *m,int capability,int defaultBits, FilterParameterSet *par,GLArea* glar):
+SaveMaskExporterDialog::SaveMaskExporterDialog(QWidget *parent,MeshModel *m,int capability,int defaultBits, RichParameterSet *par,GLArea* glar):
QDialog(parent),m(m),capability(capability),defaultBits(defaultBits),par(par),glar(glar)
{
InitDialog();
diff --git a/src/meshlab/savemaskexporter.h b/src/meshlab/savemaskexporter.h
index c808207b2..f79ef1f11 100644
--- a/src/meshlab/savemaskexporter.h
+++ b/src/meshlab/savemaskexporter.h
@@ -82,7 +82,7 @@ class SaveMaskExporterDialog : public QDialog
{
Q_OBJECT
public:
- SaveMaskExporterDialog(QWidget *parent, MeshModel *m, int capability, int defaultBits, FilterParameterSet *par,GLArea* glar = NULL);
+ SaveMaskExporterDialog(QWidget *parent, MeshModel *m, int capability, int defaultBits, RichParameterSet *par,GLArea* glar = NULL);
void InitDialog();
void SetTextureName();
@@ -106,7 +106,7 @@ private:
int type;
int capability;
int defaultBits;
- FilterParameterSet *par;
+ RichParameterSet *par;
StdParFrame *stdParFrame;
GLArea* glar;
diff --git a/src/meshlab/stdpardialog.cpp b/src/meshlab/stdpardialog.cpp
index 0968dc70e..4d995cd87 100644
--- a/src/meshlab/stdpardialog.cpp
+++ b/src/meshlab/stdpardialog.cpp
@@ -45,12 +45,14 @@ StdParFrame::StdParFrame(QWidget *p, QWidget *curr_gla)
/* manages the setup of the standard parameter window, when the execution of a plugin filter is requested */
-void MeshlabStdDialog::showAutoDialog(MeshFilterInterface *mfi, MeshModel *mm, MeshDocument * mdp, QAction *action, MainWindowInterface *mwi, QWidget *gla)
- {
+void MeshlabStdDialog::showAutoDialog(MeshFilterInterface *mfi, MeshModel *mm, MeshDocument * mdp, QAction *action, MainWindowInterface *mwi, QWidget *gla)
+{
+ validcache = false;
curAction=action;
curmfi=mfi;
curmwi=mwi;
curParSet.clear();
+ prevParSet.clear();
curModel = mm;
curMeshDoc = mdp;
// MainWindow * mwp = dynamic_cast(mwi);
@@ -106,68 +108,16 @@ void MeshlabStdDialog::resetValues()
stdParFrame->resetValues(curParSet);
}
-void StdParFrame::resetValues(FilterParameterSet &curParSet)
+void StdParFrame::resetValues(RichParameterSet &curParSet)
{
- QList &parList =curParSet.paramList;
+ QList &parList =curParSet.paramList;
+ assert(stdfieldwidgets.size() == parList.size());
for(int i = 0; i < parList.count(); i++)
- {
- const FilterParameter &fpi=parList.at(i);
- switch(fpi.fieldType)
- {
- case FilterParameter::PARBOOL:
- if(fpi.fieldVal.toBool()) ((QCheckBox *)stdfieldwidgets.at(i))->setCheckState(Qt::Checked);
- else ((QCheckBox *)stdfieldwidgets.at(i))->setCheckState(Qt::Unchecked);
- break;
- case FilterParameter::PARFLOAT:
- ((QLineEdit *)stdfieldwidgets.at(i))->setText(QString::number(fpi.fieldVal.toDouble(),'g',3));
- break;
- case FilterParameter::PARINT:
- case FilterParameter::PARSTRING:
- ((QLineEdit *)stdfieldwidgets.at(i))->setText(fpi.fieldVal.toString());
- break;
- case FilterParameter::PARABSPERC:
- ((AbsPercWidget *)stdfieldwidgets.at(i))->setValue(fpi.fieldVal.toDouble(),fpi.min,fpi.max);
- break;
- case FilterParameter::PARCOLOR:
- ((QColorButton *)stdfieldwidgets.at(i))->setColor(QColor(fpi.fieldVal.toUInt()));
- break;
- case FilterParameter::PARENUM:
- ((EnumWidget *)stdfieldwidgets.at(i))->setEnum(fpi.fieldVal.toUInt());
- break;
- case FilterParameter::PARMESH:
- if(NULL != fpi.pointerVal)
- ((MeshEnumWidget *)stdfieldwidgets.at(i))->setMesh((MeshModel *)(fpi.pointerVal));
- else
- {
- int index = fpi.fieldVal.toInt();
- //if a mesh exists at this index leave it otherwise pick 0
- if(index >= ((MeshEnumWidget *)stdfieldwidgets.at(i))->getSize() ) index = 0;
-
- ((MeshEnumWidget *)stdfieldwidgets.at(i))->setEnum(index);
-
- }
- break;
- case FilterParameter::PARFLOATLIST:
- {
- QList list = fpi.fieldVal.toList();
- ((QVariantListWidget *)stdfieldwidgets.at(i))->setList(list);
- }
- break;
- case FilterParameter::PARDYNFLOAT:
- {
- float initVal = (float)fpi.fieldVal.toDouble();
- ((DynamicFloatWidget *)stdfieldwidgets.at(i))->setValue(initVal);
- }
- break;
- case FilterParameter::PAROPENFILENAME:
- case FilterParameter::PARSAVEFILENAME:
- ((GetFileNameWidget *)stdfieldwidgets.at(i))->setFileName(fpi.fieldVal.toString());
- break;
- default: assert(0);
-
- }
+ {
+ RichParameter* fpi= parList.at(i);
+ if (fpi != NULL)
+ stdfieldwidgets[i]->resetValue();
}
-
}
/* creates widgets for the standard parameters */
@@ -209,6 +159,7 @@ void MeshlabStdDialog::loadFrameContent(MeshDocument *mdPt)
if(isDynamic())
{
previewCB = new QCheckBox("Preview", qf);
+ previewCB->setCheckState(Qt::Unchecked);
gridLayout->addWidget(previewCB, buttonRow+0,0,Qt::AlignBottom);
connect(previewCB,SIGNAL(toggled(bool)),this,SLOT( togglePreview() ));
buttonRow++;
@@ -234,237 +185,28 @@ void MeshlabStdDialog::loadFrameContent(MeshDocument *mdPt)
this->adjustSize();
}
-void StdParFrame::loadFrameContent(FilterParameterSet &curParSet,MeshDocument *mdPt)
+//void StdParFrame::loadFrameContent(ParameterDeclarationSet &curParSet,MeshDocument *mdPt)
+void StdParFrame::loadFrameContent(RichParameterSet &curParSet,MeshDocument *mdPt)
{
if(layout()) delete layout();
- QGridLayout *gridLayout = new QGridLayout(this);
- setLayout(gridLayout);
-// gridLayout->setColumnStretch(0,1);
-// gridLayout->setColumnStretch(1,1);
-// gridLayout->setColumnStretch(2,2);
+ QGridLayout * vLayout = new QGridLayout(this);
+ //vLayout->setAlignment(Qt::AlignLeading);
+ vLayout->setAlignment(Qt::AlignLeading);
+ setLayout(vLayout);
- QCheckBox *qcb;
- QLineEdit *qle;
- QLabel *ql;
- AbsPercWidget *apw;
- QColorButton *qcbt;
- QLayout *layout;
- MeshEnumWidget *mew;
- DynamicFloatWidget *dfw;
- Point3fWidget *p3w;
+ //QLabel *ql;
- QList &parList =curParSet.paramList;
+ QList &parList =curParSet.paramList;
QString descr;
-
+ RichWidgetInterfaceConstructor rwc(this);
for(int i = 0; i < parList.count(); i++)
{
- const FilterParameter &fpi=parList.at(i);
- ql = new QLabel(""+fpi.fieldToolTip +"",this);
- ql->setTextFormat(Qt::RichText);
- ql->setWordWrap(true);
- ql->setVisible(false);
- ql->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
- ql->setMinimumWidth(250);
- ql->setMaximumWidth(QWIDGETSIZE_MAX);
- gridLayout->addWidget(ql,i,3,1,1,Qt::AlignTop);
- helpList.push_back(ql);
-
- switch(fpi.fieldType)
- {
- case FilterParameter::PARBOOL:
- qcb = new QCheckBox(fpi.fieldDesc,this);
- qcb->setToolTip(fpi.fieldToolTip);
- if(fpi.fieldVal.toBool()) qcb->setCheckState(Qt::Checked);
- gridLayout->addWidget(qcb,i,0,1,2,Qt::AlignTop);
- stdfieldwidgets.push_back(qcb);
- connect(qcb,SIGNAL(stateChanged(int)),this,SIGNAL(parameterChanged()));
- break;
-
- case FilterParameter::PARFLOAT:
- ql = new QLabel(fpi.fieldDesc,this);
- ql->setToolTip(fpi.fieldToolTip);
- qle = new QLineEdit(QString::number(fpi.fieldVal.toDouble(),'g',3),this); // better formatting of floating point numbers
- gridLayout->addWidget(ql,i,0,Qt::AlignTop);
- gridLayout->addWidget(qle,i,1,Qt::AlignTop);
- stdfieldwidgets.push_back(qle);
- connect(qle,SIGNAL(editingFinished()),this,SIGNAL(parameterChanged()));
- break;
- case FilterParameter::PARINT:
- case FilterParameter::PARSTRING:
- ql = new QLabel(fpi.fieldDesc,this);
- ql->setToolTip(fpi.fieldToolTip);
-
- qle = new QLineEdit(fpi.fieldVal.toString(),this);
-
- gridLayout->addWidget(ql,i,0,Qt::AlignTop);
- gridLayout->addWidget(qle,i,1,Qt::AlignTop);
-
- stdfieldwidgets.push_back(qle);
- connect(qle,SIGNAL(editingFinished()),this,SIGNAL(parameterChanged()));
- break;
- case FilterParameter::PARABSPERC:
- descr = fpi.fieldDesc + " (abs and %)";
- ql = new QLabel(descr ,this);
- ql->setToolTip(fpi.fieldToolTip);
-
- apw = new AbsPercWidget(this,float(fpi.fieldVal.toDouble()),fpi.min,fpi.max);
- gridLayout->addWidget(ql,i,0,Qt::AlignTop);
- gridLayout->addLayout(apw,i,1,Qt::AlignTop);
-
- stdfieldwidgets.push_back(apw);
-
- break;
- case FilterParameter::PARCOLOR:
- ql = new QLabel(fpi.fieldDesc,this);
- ql->setToolTip(fpi.fieldToolTip);
-
- qcbt = new QColorButton(this,QColor(fpi.fieldVal.toUInt()));
- gridLayout->addWidget(ql,i,0,Qt::AlignTop);
- gridLayout->addLayout(qcbt,i,1,Qt::AlignTop);
-
- stdfieldwidgets.push_back(qcbt);
- connect(qcbt,SIGNAL(dialogParamChanged()),this,SIGNAL(parameterChanged()));
-
- break;
- case FilterParameter::PARENUM:
- ql = new QLabel(fpi.fieldDesc,this);
- ql->setToolTip(fpi.fieldToolTip);
-
- layout = new EnumWidget(this, fpi.fieldVal.toUInt(), fpi.enumValues);
- gridLayout->addWidget(ql,i,0,Qt::AlignTop);
- gridLayout->addLayout(layout,i,1,Qt::AlignTop);
-
- stdfieldwidgets.push_back(layout);
- connect(layout,SIGNAL(dialogParamChanged()),this,SIGNAL(parameterChanged()));
-
- break;
-
- case FilterParameter::PARMESH:
- {
- assert(mdPt);
- ql = new QLabel(fpi.fieldDesc,this);
- ql->setToolTip(fpi.fieldToolTip);
-
- MeshModel *defaultModel = 0;
- int position = fpi.fieldVal.toInt();
-
- //if there was no pointer try to use the position value to find the mesh in the mesh document
- if(NULL == (fpi.pointerVal) &&
- position >= 0 &&
- position < mdPt->meshList.size() )
- {
- //get the model from the position in the meshDocument
- defaultModel = mdPt->getMesh(position);
- } else //use the pointer provided
- defaultModel = (MeshModel *)(fpi.pointerVal);
-
- mew = new MeshEnumWidget(this, defaultModel, *mdPt);
-
- gridLayout->addWidget(ql,i,0,Qt::AlignTop);
- gridLayout->addLayout(mew,i,1,Qt::AlignTop);
- stdfieldwidgets.push_back(mew);
- }
- break;
-
- case FilterParameter::PARFLOATLIST:
- {
- ql = new QLabel(fpi.fieldDesc,this);
- ql->setToolTip(fpi.fieldToolTip);
-
- QToolButton *addButton = new QToolButton(this);
- addButton->setText("Add Row");
- QToolButton *removeButton = new QToolButton(this);
- removeButton->setText("Remove Row");
-
- QVBoxLayout *leftLayout = new QVBoxLayout(this);
- leftLayout->addWidget(ql);
- leftLayout->addWidget(addButton);
- leftLayout->addWidget(removeButton);
-
- QList list = fpi.fieldVal.toList();
-
- layout = new QVariantListWidget(this, list);
- gridLayout->addLayout(leftLayout,i,0,Qt::AlignTop);
- gridLayout->addLayout(layout,i,1,Qt::AlignTop);
-
- connect(addButton, SIGNAL(clicked()), layout, SLOT(addRow()));
- connect(removeButton, SIGNAL(clicked()), layout, SLOT(removeRow()));
-
- stdfieldwidgets.push_back(layout);
- }
- break;
-
- case FilterParameter::PARDYNFLOAT :
- ql = new QLabel(fpi.fieldDesc ,this);
- ql->setToolTip(fpi.fieldToolTip);
-
- dfw = new DynamicFloatWidget(this,float(fpi.fieldVal.toDouble()),fpi.min,fpi.max,0);
- //dfw = new DynamicFloatWidget(this,float(fpi.fieldVal.toDouble()),fpi.min,fpi.max,fpi.mask);
- gridLayout->addWidget(ql,i,0,Qt::AlignTop);
- gridLayout->addLayout(dfw,i,1,Qt::AlignTop);
-
- stdfieldwidgets.push_back(dfw);
- connect(dfw,SIGNAL(dialogParamChanged()),this,SIGNAL( parameterChanged()));
- break;
-
-
- case FilterParameter::PARPOINT3F :
- {
- ql = new QLabel(fpi.fieldDesc ,this);
- ql->setToolTip(fpi.fieldToolTip);
-
- Point3f point;
- QList pointVals = fpi.fieldVal.toList();
- assert(pointVals.size()==3);
- for(int ii=0;ii<3;++ii)
- point[ii]=pointVals[ii].toDouble();
-
- p3w = new Point3fWidget(this,point,fpi.fieldDesc,gla);
- gridLayout->addWidget(ql,i,0,Qt::AlignTop);
- gridLayout->addLayout(p3w,i,1,Qt::AlignTop);
- stdfieldwidgets.push_back(p3w);
- }
- break;
-
-
- case FilterParameter::PAROPENFILENAME:
- {
- ql = new QLabel(fpi.fieldDesc,this);
- ql->setToolTip(fpi.fieldToolTip);
-
- QString defaultFileName = fpi.fieldVal.toString();
-
- GetFileNameWidget *fileNameWidget = new GetFileNameWidget(
- this, defaultFileName, true, fpi.enumValues.back());
-
- gridLayout->addWidget(ql, i, 0, Qt::AlignTop);
- gridLayout->addLayout(fileNameWidget, i, 1, Qt::AlignTop);
-
- stdfieldwidgets.push_back(fileNameWidget);
- }
- break;
-
- case FilterParameter::PARSAVEFILENAME:
- {
- ql = new QLabel(fpi.fieldDesc,this);
- ql->setToolTip(fpi.fieldToolTip);
-
- QString defaultFileName = fpi.fieldVal.toString();
-
- GetFileNameWidget *fileNameWidget = new GetFileNameWidget(
- this, defaultFileName, false, fpi.enumValues.back());
-
- gridLayout->addWidget(ql, i, 0, Qt::AlignTop);
- gridLayout->addLayout(fileNameWidget, i, 1, Qt::AlignTop);
-
- stdfieldwidgets.push_back(fileNameWidget);
- }
- break;
-
-
- default: assert(0);
- } //end case
+ RichParameter* fpi=parList.at(i);
+ fpi->accept(rwc);
+ //vLayout->addWidget(rwc.lastCreated,i,0,1,1,Qt::AlignTop);
+ stdfieldwidgets.push_back(rwc.lastCreated);
+ helpList.push_back(rwc.lastCreated->helpLab);
} // end for each parameter
showNormal();
adjustSize();
@@ -487,60 +229,24 @@ void MeshlabStdDialog::toggleHelp()
this->adjustSize();
}
-void StdParFrame::readValues(FilterParameterSet &curParSet)
+//void StdParFrame::readValues(ParameterDeclarationSet &curParSet)
+void StdParFrame::readValues(RichParameterSet &curParSet)
{
- QList &parList =curParSet.paramList;
-
- for(int i = 0; i < parList.count(); i++)
- {
- QString sname = parList.at(i).fieldName;
- switch(parList.at(i).fieldType)
- {
- case FilterParameter::PARBOOL:
- curParSet.setBool(sname,((QCheckBox *)stdfieldwidgets[i])->checkState() == Qt::Checked);
- break;
- case FilterParameter::PARINT:
- curParSet.setInt(sname,((QLineEdit *)stdfieldwidgets[i])->text().toInt());
- break;
- case FilterParameter::PARFLOAT:
- curParSet.setFloat(sname,((QLineEdit *)stdfieldwidgets[i])->text().toFloat());
- break;
- case FilterParameter::PARABSPERC:
- curParSet.setAbsPerc(sname,((AbsPercWidget *)stdfieldwidgets[i])->getValue());
- break;
- case FilterParameter::PARSTRING:
- curParSet.setString(sname,((QLineEdit *)stdfieldwidgets[i])->text());
- break;
- case FilterParameter::PARCOLOR:
- curParSet.setColor(sname,((QColorButton *)stdfieldwidgets[i])->getColor());
- break;
- case FilterParameter::PARENUM:
- curParSet.setEnum(sname,((EnumWidget *)stdfieldwidgets[i])->getEnum());
- break;
- case FilterParameter::PARMESH:
- curParSet.setMesh(sname,((MeshEnumWidget *)stdfieldwidgets[i])->getMesh(), ((MeshEnumWidget *)stdfieldwidgets[i])->getEnum());
- break;
- case FilterParameter::PARFLOATLIST:
- curParSet.findParameter(sname)->fieldVal = ((QVariantListWidget *)stdfieldwidgets[i])->getList();
- break;
- case FilterParameter::PARDYNFLOAT:
- curParSet.findParameter(sname)->fieldVal = ((DynamicFloatWidget *)stdfieldwidgets[i])->getValue();
- break;
- case FilterParameter::PAROPENFILENAME:
- curParSet.setOpenFileName(sname, ((GetFileNameWidget *)stdfieldwidgets[i])->getFileName());
- break;
- case FilterParameter::PARSAVEFILENAME:
- curParSet.setSaveFileName(sname, ((GetFileNameWidget *)stdfieldwidgets[i])->getFileName());
- break;
- case FilterParameter::PARPOINT3F:
- curParSet.setPoint3f(sname,((Point3fWidget *)stdfieldwidgets[i])->getValue());
- break;
- default:
- assert(0);
- }
- }
+ QList &parList =curParSet.paramList;
+ assert(parList.size() == stdfieldwidgets.size());
+ QVector::iterator it = stdfieldwidgets.begin();
+ for(int i = 0; i < parList.count(); i++)
+ {
+ QString sname = parList.at(i)->name;
+ curParSet.setValue(sname,(*it)->getWidgetValue());
+ ++it;
+ }
}
+StdParFrame::~StdParFrame()
+{
+
+}
/* click event for the apply button of the standard plugin window */
// If the filter has some dynamic parameters
@@ -551,13 +257,20 @@ void MeshlabStdDialog::applyClick()
{
QAction *q = curAction;
stdParFrame->readValues(curParSet);
-
- //int mask = 0;//curParSet.getDynamicFloatMask();
+
+ ////int mask = 0;//curParSet.getDynamicFloatMask();
if(curmask) meshState.apply(curModel);
- curmwi->executeFilter(q, curParSet, false);
+ //PreView Caching: if the apply parameters are the same to those used in the preview mode
+ //we don't need to reapply the filter to the mesh
+ bool equal = (curParSet == prevParSet);
+ if ((curParSet == prevParSet) && (validcache))
+ meshCacheState.apply(curModel);
+ else
+ curmwi->executeFilter(q, curParSet, false);
if(curmask) meshState.create(curmask, curModel);
+ if(this->curgla) this->curgla->update();
}
@@ -566,15 +279,30 @@ void MeshlabStdDialog::applyDynamic()
if(!previewCB->isChecked()) return;
QAction *q = curAction;
stdParFrame->readValues(curParSet);
+ //for cache mechanism
+ //needed to allocate the required memory space in prevParSet
+ //it called the operator=(RichParameterSet) function defined in RichParameterSet
+ prevParSet = curParSet;
+ stdParFrame->readValues(prevParSet);
// Restore the
meshState.apply(curModel);
curmwi->executeFilter(q, curParSet, true);
+
+ validcache = true;
+ meshCacheState.create(curmask,curModel);
+
+ if(this->curgla) this->curgla->update();
}
void MeshlabStdDialog::togglePreview()
{
- if(previewCB->isChecked()) applyDynamic();
- else meshState.apply(curModel);
+ if(previewCB->isChecked())
+ {
+ applyDynamic();
+ }
+ else
+ meshState.apply(curModel);
+
curgla->update();
}
@@ -596,13 +324,30 @@ void MeshlabStdDialog::closeEvent(QCloseEvent * event)
{
closeClick();
}
+
+MeshlabStdDialog::~MeshlabStdDialog()
+{
+ delete stdParFrame;
+ if(isDynamic())
+ delete previewCB;
+}
+
+
/******************************************/
// AbsPercWidget Implementation
/******************************************/
- AbsPercWidget::AbsPercWidget(QWidget *p, double defaultv, double minVal, double maxVal):QGridLayout(NULL)
+
+
+//QGridLayout(NULL)
+ AbsPercWidget::AbsPercWidget(QWidget *p, RichAbsPerc* rabs):MeshLabWidget(p,rabs)
+
{
- m_min = minVal;
- m_max = maxVal;
+ AbsPercDecoration* absd = reinterpret_cast(rp->pd);
+ m_min = absd->min;
+ m_max = absd->max;
+
+ fieldDesc = new QLabel(rp->pd->fieldDesc + " (abs and %)",p);
+ fieldDesc->setToolTip(rp->pd->tooltip);
absSB = new QDoubleSpinBox(p);
percSB = new QDoubleSpinBox(p);
@@ -614,7 +359,8 @@ void MeshlabStdDialog::closeEvent(QCloseEvent * event)
//qDebug("log range is %f ",log10(fabs(m_max-m_min)));
absSB->setDecimals(decimals);
absSB->setSingleStep((m_max-m_min)/100.0);
- absSB->setValue(defaultv);
+ float defaultv = rp->pd->defVal->getAbsPerc();
+ absSB->setValue(defaultv);
percSB->setMinimum(-200);
percSB->setMaximum(200);
@@ -624,38 +370,47 @@ void MeshlabStdDialog::closeEvent(QCloseEvent * event)
QLabel *absLab=new QLabel(" world unit");
QLabel *percLab=new QLabel(" perc on"+QString("(%1 .. %2)").arg(m_min).arg(m_max)+"");
- this->addWidget(absLab,0,0,Qt::AlignHCenter);
- this->addWidget(percLab,0,1,Qt::AlignHCenter);
+ int row = gridLay->rowCount() - 1;
+ gridLay->addWidget(fieldDesc,row,0,Qt::AlignHCenter);
- this->addWidget(absSB,1,0);
- this->addWidget(percSB,1,1,Qt::AlignTop);
+ QGridLayout* lay = new QGridLayout(p);
+ lay->addWidget(absLab,0,0,Qt::AlignHCenter);
+ lay->addWidget(percLab,0,1,Qt::AlignHCenter);
+ lay->addWidget(absSB,1,0,Qt::AlignTop);
+ lay->addWidget(percSB,1,1,Qt::AlignTop);
+
+ gridLay->addLayout(lay,row,1,Qt::AlignTop);
connect(absSB,SIGNAL(valueChanged(double)),this,SLOT(on_absSB_valueChanged(double)));
connect(percSB,SIGNAL(valueChanged(double)),this,SLOT(on_percSB_valueChanged(double)));
+ connect(this,SIGNAL(dialogParamChanged()),p,SLOT(parameterChanged()));
}
AbsPercWidget::~AbsPercWidget()
{
delete absSB;
delete percSB;
+ delete fieldDesc;
}
void AbsPercWidget::on_absSB_valueChanged(double newv)
{
percSB->setValue((100*(newv - m_min))/(m_max - m_min));
+ emit dialogParamChanged();
}
void AbsPercWidget::on_percSB_valueChanged(double newv)
{
absSB->setValue((m_max - m_min)*0.01*newv + m_min);
+ emit dialogParamChanged();
}
-float AbsPercWidget::getValue()
-{
- return float(absSB->value());
-}
+//float AbsPercWidget::getValue()
+//{
+// return float(absSB->value());
+//}
void AbsPercWidget::setValue(float val, float minV, float maxV)
{
@@ -665,12 +420,36 @@ void AbsPercWidget::setValue(float val, float minV, float maxV)
m_max=maxV;
}
+void AbsPercWidget::collectWidgetValue()
+{
+ rp->val->set(AbsPercValue(float(absSB->value())));
+}
+
+void AbsPercWidget::resetWidgetValue()
+{
+ const AbsPercDecoration* absd = reinterpret_cast(&(rp->pd));
+ setValue(rp->pd->defVal->getAbsPerc(),absd->min,absd->max);
+}
+
+
/******************************************/
// Point3fWidget Implementation
/******************************************/
-Point3fWidget::Point3fWidget(QWidget *p, Point3f defaultv, QString _paramName, QWidget *gla_curr):QHBoxLayout(NULL)
+
+
+//QHBoxLayout(NULL)
+Point3fWidget::Point3fWidget(QWidget *p, RichPoint3f* rpf, QWidget *gla_curr): MeshLabWidget(p,rpf)
{
- paramName = _paramName;
+
+ paramName = rpf->name;
+ int row = gridLay->rowCount() - 1;
+
+ descLab = new QLabel(rpf->pd->fieldDesc,p);
+ descLab->setToolTip(rpf->pd->fieldDesc);
+ gridLay->addWidget(descLab,row,0,Qt::AlignTop);
+
+ QHBoxLayout* lay = new QHBoxLayout(p);
+
for(int i =0;i<3;++i)
{
coordSB[i]= new QLineEdit(p);
@@ -685,9 +464,9 @@ Point3fWidget::Point3fWidget(QWidget *p, Point3f defaultv, QString _paramName, Q
coordSB[i]->setValidator(new QDoubleValidator(p));
coordSB[i]->setAlignment(Qt::AlignRight);
//this->addWidget(coordSB[i],1,Qt::AlignHCenter);
- this->addWidget(coordSB[i]);
+ lay->addWidget(coordSB[i]);
}
- this->setValue(paramName,defaultv);
+ this->setValue(paramName,rp->pd->defVal->getPoint3f());
if(gla_curr) // if we have a connection to the current glarea we can setup the additional button for getting the current view direction.
{
getPoint3Button = new QPushButton("Get",p);
@@ -696,7 +475,7 @@ Point3fWidget::Point3fWidget(QWidget *p, Point3f defaultv, QString _paramName, Q
getPoint3Button->setFlat(true);
//getPoint3Button->setMinimumWidth(getPoint3Button->sizeHint().width());
//this->addWidget(getPoint3Button,0,Qt::AlignHCenter);
- this->addWidget(getPoint3Button);
+ lay->addWidget(getPoint3Button);
QStringList names;
names << "View Dir";
names << "View Pos";
@@ -707,7 +486,7 @@ Point3fWidget::Point3fWidget(QWidget *p, Point3f defaultv, QString _paramName, Q
getPoint3Combo->addItems(names);
//getPoint3Combo->setMinimumWidth(getPoint3Combo->sizeHint().width());
//this->addWidget(getPoint3Combo,0,Qt::AlignHCenter);
- this->addWidget(getPoint3Combo);
+ lay->addWidget(getPoint3Combo);
connect(getPoint3Button,SIGNAL(clicked()),this,SLOT(getPoint()));
connect(getPoint3Combo,SIGNAL(currentIndexChanged(int)),this,SLOT(getPoint()));
@@ -719,6 +498,7 @@ Point3fWidget::Point3fWidget(QWidget *p, Point3f defaultv, QString _paramName, Q
connect(this,SIGNAL(askSurfacePos(QString)),gla_curr,SLOT(sendSurfacePos(QString)));
connect(this,SIGNAL(askCameraPos(QString)),gla_curr,SLOT(sendCameraPos(QString)));
}
+ gridLay->addLayout(lay,row,1,Qt::AlignTop);
}
void Point3fWidget::getPoint()
@@ -751,67 +531,64 @@ vcg::Point3f Point3fWidget::getValue()
return Point3f(coordSB[0]->text().toFloat(),coordSB[1]->text().toFloat(),coordSB[2]->text().toFloat());
}
-/******************************************/
-// QColorButton Implementation
-/******************************************/
-QColorButton::QColorButton(QWidget *p, QColor newColor):QHBoxLayout()
+void Point3fWidget::collectWidgetValue()
{
- colorLabel = new QLabel(p);
- colorButton = new QPushButton(p);
- colorButton->setAutoFillBackground(true);
- colorButton->setFlat(true);
- setColor(newColor);
- this->addWidget(colorLabel);
- this->addWidget(colorButton);
- connect(colorButton,SIGNAL(clicked()),this,SLOT(pickColor()));
+ rp->val->set(Point3fValue(vcg::Point3f(coordSB[0]->text().toFloat(),coordSB[1]->text().toFloat(),coordSB[2]->text().toFloat())));
}
-QColor QColorButton::getColor()
+void Point3fWidget::resetWidgetValue()
{
- return currentColor;
+ for(unsigned int ii = 0; ii < 3;++ii)
+ coordSB[ii]->setText(QString::number(rp->pd->defVal->getPoint3f()[ii],'g',3));
}
-void QColorButton::setColor(QColor newColor)
-{
- currentColor=newColor;
- colorLabel->setText("("+currentColor.name()+")");
- QPalette palette(currentColor);
- colorButton->setPalette(palette);
+
+
+
+
+ComboWidget::ComboWidget(QWidget *p, RichParameter* rpar) :MeshLabWidget(p,rpar) {
}
-void QColorButton::pickColor()
+void ComboWidget::Init(QWidget *p,int defaultEnum, QStringList values)
{
- QColor newColor=QColorDialog::getColor(QColor(255,255,255,255));
- if(newColor.isValid()) setColor(newColor);
- emit dialogParamChanged();
+ enumLabel = new QLabel(p);
+ enumLabel->setText(rp->pd->fieldDesc);
+ enumCombo = new QComboBox(p);
+ enumCombo->addItems(values);
+ setIndex(defaultEnum);
+ int row = gridLay->rowCount() - 1;
+ gridLay->addWidget(enumLabel,row,0,Qt::AlignTop);
+ gridLay->addWidget(enumCombo,row,1,Qt::AlignTop);
+ connect(enumCombo,SIGNAL(activated(int)),this,SIGNAL(dialogParamChanged()));
+ connect(this,SIGNAL(dialogParamChanged()),p,SIGNAL(parameterChanged()));
+}
+
+void ComboWidget::setIndex(int newEnum)
+{
+ enumCombo->setCurrentIndex(newEnum);
+}
+
+int ComboWidget::getIndex()
+{
+ return enumCombo->currentIndex();
+}
+
+ComboWidget::~ComboWidget()
+{
+ delete enumCombo;
+ delete enumLabel;
}
/******************************************/
//EnumWidget Implementation
/******************************************/
-EnumWidget::EnumWidget(QWidget *p, int defaultEnum, QStringList values) {
- Init(p,defaultEnum,values);
- connect(enumCombo,SIGNAL(activated(int)),this,SIGNAL(dialogParamChanged()));
-}
-void EnumWidget::Init(QWidget *p, int defaultEnum, QStringList values)
+EnumWidget::EnumWidget(QWidget *p, RichEnum* rpar)
+:ComboWidget(p,rpar)
{
- enumLabel = new QLabel(p);
- enumCombo = new QComboBox(p);
- enumCombo->addItems(values);
- setEnum(defaultEnum);
- this->addWidget(enumLabel);
- this->addWidget(enumCombo);
-}
-
-int EnumWidget::getEnum()
-{
- return enumCombo->currentIndex();
-}
-
-void EnumWidget::setEnum(int newEnum)
-{
- enumCombo->setCurrentIndex(newEnum);
+ //you MUST call it!!!!
+ Init(p,rpar->pd->defVal->getEnum(),reinterpret_cast(rpar->pd)->enumvalues);
+ //assert(enumCombo != NULL);
}
int EnumWidget::getSize()
@@ -820,22 +597,38 @@ int EnumWidget::getSize()
}
+void EnumWidget::collectWidgetValue()
+{
+ rp->val->set(EnumValue(enumCombo->currentIndex()));
+}
+
+void EnumWidget::resetWidgetValue()
+{
+ //lned->setText(QString::number(rp->val->getFloat(),'g',3));
+ enumCombo->setCurrentIndex(rp->pd->defVal->getEnum());
+}
+
+
/******************************************/
//MeshEnumWidget Implementation
/******************************************/
-MeshEnumWidget::MeshEnumWidget(QWidget *p, MeshModel *defaultMesh, MeshDocument &_md)
+
+
+MeshWidget::MeshWidget(QWidget *p, RichMesh* rpar)
+:ComboWidget(p,rpar)
{
- md=&_md;
+ md=reinterpret_cast(rp->pd)->meshdoc;
+
QStringList meshNames;
//make the default mesh Index be 0
- int defaultMeshIndex = -1;
+ defaultMeshIndex = -1;
for(int i=0;imeshList.size();++i)
{
QString shortName(QFileInfo(md->meshList.at(i)->fileName.c_str()).fileName());
meshNames.push_back(shortName);
- if(md->meshList.at(i) == defaultMesh) defaultMeshIndex = i;
+ if(md->meshList.at(i) == rp->pd->defVal->getMesh()) defaultMeshIndex = i;
}
//add a blank choice because there is no default available
@@ -847,7 +640,7 @@ MeshEnumWidget::MeshEnumWidget(QWidget *p, MeshModel *defaultMesh, MeshDocument
Init(p,defaultMeshIndex,meshNames);
}
-MeshModel * MeshEnumWidget::getMesh()
+MeshModel * MeshWidget::getMesh()
{
//test to make sure index is in bounds
int index = enumCombo->currentIndex();
@@ -856,19 +649,30 @@ MeshModel * MeshEnumWidget::getMesh()
else return NULL;
}
-void MeshEnumWidget::setMesh(MeshModel * newMesh)
+void MeshWidget::setMesh(MeshModel * newMesh)
{
for(int i=0; i < md->meshList.size(); ++i)
{
- if(md->meshList.at(i) == newMesh) setEnum(i);
+ if(md->meshList.at(i) == newMesh) setIndex(i);
}
}
+void MeshWidget::collectWidgetValue()
+{
+ rp->val->set(MeshValue(md->meshList.at(enumCombo->currentIndex())));
+}
+
+void MeshWidget::resetWidgetValue()
+{
+ enumCombo->setCurrentIndex(defaultMeshIndex);
+}
/******************************************
QVariantListWidget Implementation
******************************************/
+
+/*
QVariantListWidget::QVariantListWidget(QWidget *parent, QList &values)
{
tableWidget = new QTableWidget(parent);
@@ -936,10 +740,13 @@ void QVariantListWidget::removeRow()
}
}
}
+*/
/******************************************
GetFileNameButton Implementation
******************************************/
+
+/*
GetFileNameWidget::GetFileNameWidget(QWidget *parent,
QString &defaultString, bool getOpenFileName, QString fileExtension) : QVBoxLayout(parent)
{
@@ -955,6 +762,7 @@ GetFileNameWidget::GetFileNameWidget(QWidget *parent,
addWidget(fileNameLabel);
connect(launchFileNameDialogButton, SIGNAL(clicked()), this, SLOT(launchGetFileNameDialog()));
+
}
GetFileNameWidget::~GetFileNameWidget()
@@ -984,8 +792,9 @@ void GetFileNameWidget::launchGetFileNameDialog()
void GetFileNameWidget::setFileName(QString newName){
_fileName = newName;
}
+*/
-GenericParamDialog::GenericParamDialog(QWidget *p, FilterParameterSet *_curParSet, QString title, MeshDocument *_meshDocument)
+GenericParamDialog::GenericParamDialog(QWidget *p, RichParameterSet *_curParSet, QString title, MeshDocument *_meshDocument)
: QDialog(p) {
stdParFrame=NULL;
curParSet=_curParSet;
@@ -1044,29 +853,44 @@ void GenericParamDialog::getAccept()
accept();
}
+GenericParamDialog::~GenericParamDialog()
+{
+ delete stdParFrame;
+}
/******************************************/
// DynamicFloatWidget Implementation
/******************************************/
-DynamicFloatWidget::DynamicFloatWidget(QWidget *p, double defaultv, double _minVal, double _maxVal, int _mask):QGridLayout(NULL)
+
+
+//QGridLayout(NULL)
+DynamicFloatWidget::DynamicFloatWidget(QWidget *p, RichDynamicFloat* rdf):MeshLabWidget(p,rdf)
{
- mask = _mask;
- minVal = _minVal;
- maxVal = _maxVal;
+ minVal = reinterpret_cast(rdf->pd)->min;
+ maxVal = reinterpret_cast(rdf->pd)->max;
valueLE = new QLineEdit(p);
valueSlider = new QSlider(Qt::Horizontal,p);
-
+ fieldDesc = new QLabel(rp->pd->fieldDesc);
valueSlider->setMinimum(0);
valueSlider->setMaximum(100);
- valueSlider->setValue(floatToInt(defaultv));
- valueLE->setValidator(new QDoubleValidator (minVal, maxVal, 5, valueLE));
- valueLE->setText(QString::number(defaultv));
+ valueSlider->setValue(floatToInt(rp->pd->defVal->getFloat()));
+ const DynamicFloatDecoration* dfd = reinterpret_cast(&(rp->pd));
+ valueLE->setValidator(new QDoubleValidator (dfd->min,dfd->max, 5, valueLE));
+ valueLE->setText(QString::number(rp->pd->defVal->getFloat()));
- this->addWidget(valueLE,0,0,Qt::AlignHCenter);
- this->addWidget(valueSlider,0,1,Qt::AlignHCenter);
+
+ int row = gridLay->rowCount() - 1;
+ gridLay->addWidget(fieldDesc,row,0,Qt::AlignTop);
+
+ QHBoxLayout* lay = new QHBoxLayout(p);
+ lay->addWidget(valueLE,0,Qt::AlignHCenter);
+ lay->addWidget(valueSlider,0,Qt::AlignHCenter);
+ gridLay->addLayout(lay,row,1,Qt::AlignTop);
connect(valueLE,SIGNAL(textChanged(const QString &)),this,SLOT(setValue()));
connect(valueSlider,SIGNAL(valueChanged(int)),this,SLOT(setValue(int)));
+ connect(this,SIGNAL(dialogParamChanged()),p,SIGNAL(parameterChanged()));
+
}
DynamicFloatWidget::~DynamicFloatWidget()
@@ -1076,6 +900,7 @@ DynamicFloatWidget::~DynamicFloatWidget()
float DynamicFloatWidget::getValue()
{
return float(valueLE->text().toDouble());
+
}
void DynamicFloatWidget::setValue(float newVal)
@@ -1108,3 +933,296 @@ int DynamicFloatWidget::floatToInt(float val)
return int (100.0f*(val-minVal)/(maxVal-minVal));
}
+void DynamicFloatWidget::collectWidgetValue()
+{
+ rp->val->set(DynamicFloatValue(valueLE->text().toFloat()));
+}
+
+void DynamicFloatWidget::resetWidgetValue()
+{
+ valueLE->setText(QString::number(rp->pd->defVal->getFloat()));
+}
+
+/****************************/
+Value& MeshLabWidget::getWidgetValue()
+{
+ collectWidgetValue();
+ return *(rp->val);
+}
+
+
+void MeshLabWidget::resetValue()
+{
+ rp->val->set(*rp->pd->defVal);
+ resetWidgetValue();
+}
+
+MeshLabWidget::MeshLabWidget( QWidget* p,RichParameter* rpar )
+:QWidget(p),rp(rpar)
+{
+ if (rp!= NULL)
+ {
+ helpLab = new QLabel(""+rpar->pd->tooltip +"",p);
+ helpLab->setTextFormat(Qt::RichText);
+ helpLab->setWordWrap(true);
+ helpLab->setVisible(false);
+ helpLab->setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Preferred);
+ helpLab->setMinimumWidth(250);
+ helpLab->setMaximumWidth(QWIDGETSIZE_MAX);
+ gridLay = qobject_cast(p->layout());
+ assert(gridLay != 0);
+ int row = gridLay->rowCount();
+ gridLay->addWidget(helpLab,row,3,1,1,Qt::AlignTop);
+ }
+}
+
+void MeshLabWidget::InitRichParameter(RichParameter* rpar)
+{
+ rp = rpar;
+}
+
+MeshLabWidget::~MeshLabWidget()
+{
+ //delete rp;
+ delete helpLab;
+}
+
+//connect(qcb,SIGNAL(stateChanged(int)),this,SIGNAL(parameterChanged()));
+BoolWidget::BoolWidget( QWidget* p,RichBool* rb )
+:MeshLabWidget(p,rb)
+{
+ cb = new QCheckBox(rp->pd->fieldDesc,p);
+ cb->setToolTip(rp->pd->tooltip);
+ cb->setChecked(rp->pd->defVal->getBool());
+
+ //gridlay->addWidget(this,i,0,1,1,Qt::AlignTop);
+
+ int row = gridLay->rowCount() -1 ;
+ gridLay->addWidget(cb,row,0,1,2,Qt::AlignTop);
+ connect(cb,SIGNAL(stateChanged(int)),this,SIGNAL(parameterChanged()));
+
+}
+
+void BoolWidget::collectWidgetValue()
+{
+ rp->val->set(BoolValue(cb->isChecked()));
+}
+
+void BoolWidget::resetWidgetValue()
+{
+ cb->setChecked(rp->val->getBool());
+}
+
+BoolWidget::~BoolWidget()
+{
+ delete cb;
+}
+
+//connect(qle,SIGNAL(editingFinished()),this,SIGNAL(parameterChanged()));
+LineEditWidget::LineEditWidget( QWidget* p,RichParameter* rpar )
+:MeshLabWidget(p,rpar)
+{
+ lab = new QLabel(rp->pd->fieldDesc,this);
+ lned = new QLineEdit(this);
+ int row = gridLay->rowCount() -1;
+
+ lab->setToolTip(rp->pd->tooltip);
+ gridLay->addWidget(lab,row,0,Qt::AlignTop);
+ gridLay->addWidget(lned,row,1,Qt::AlignTop);
+ connect(lned,SIGNAL(editingFinished()),this,SIGNAL(parameterChanged()));
+}
+
+LineEditWidget::~LineEditWidget()
+{
+ delete lned;
+ delete lab;
+}
+IntWidget::IntWidget( QWidget* p,RichInt* rpar )
+:LineEditWidget(p,rpar)
+{
+ lned->setText(QString::number(rp->pd->defVal->getInt()));
+}
+
+void IntWidget::collectWidgetValue()
+{
+ rp->val->set(IntValue(lned->text().toInt()));
+}
+
+void IntWidget::resetWidgetValue()
+{
+ lned->setText(QString::number(rp->val->getInt()));
+}
+
+//
+FloatWidget::FloatWidget( QWidget* p,RichFloat* rpar )
+:LineEditWidget(p,rpar)
+{
+ lned->setText(QString::number(rp->pd->defVal->getFloat(),'g',3));
+}
+
+void FloatWidget::collectWidgetValue()
+{
+ rp->val->set(FloatValue(lned->text().toFloat()));
+}
+
+void FloatWidget::resetWidgetValue()
+{
+ lned->setText(QString::number(rp->val->getFloat(),'g',3));
+}
+
+
+StringWidget::StringWidget( QWidget* p,RichString* rpar )
+:LineEditWidget(p,rpar)
+{
+ lned->setText(rp->pd->defVal->getString());
+}
+
+void StringWidget::collectWidgetValue()
+{
+ rp->val->set(StringValue(lned->text()));
+}
+
+void StringWidget::resetWidgetValue()
+{
+ lned->setText(rp->val->getString());
+}
+
+
+//Matrix44fWidget::Matrix44fWidget( QWidget* p,RichMatrix44f* rpar )
+//:MeshLabWidget(p,rb)
+//{
+//}
+//
+//void Matrix44fWidget::collectWidgetValue()
+//{
+//}
+//
+//void Matrix44fWidget::resetWidgetValue()
+//{
+//}
+
+
+/*
+FloatListWidget::FloatListWidget( QWidget* p,RichMesh* rpar )
+:MeshLabWidget(p,rb)
+{
+}
+
+
+void FloatListWidget::collectWidgetValue()
+{
+}
+
+void FloatListWidget::resetWidgetValue()
+{
+}
+
+OpenFileWidget::OpenFileWidget( QWidget* p,RichMesh* rpar )
+:MeshLabWidget(p,rb)
+{
+}
+
+void OpenFileWidget::collectWidgetValue()
+{
+}
+
+void OpenFileWidget::resetWidgetValue()
+{
+}
+*/
+
+SaveFileWidget::SaveFileWidget( QWidget* p,RichSaveFile* rpar )
+:MeshLabWidget(p,rpar)
+{
+}
+
+
+void SaveFileWidget::collectWidgetValue()
+{
+}
+
+void SaveFileWidget::resetWidgetValue()
+{
+}
+
+/*
+ql = new QLabel(fpi.fieldDesc,this);
+ql->setToolTip(fpi.fieldToolTip);
+
+qcbt = new QColorButton(this,QColor(fpi.fieldVal.toUInt()));
+gridLayout->addWidget(ql,i,0,Qt::AlignTop);
+gridLayout->addLayout(qcbt,i,1,Qt::AlignTop);
+
+stdfieldwidgets.push_back(qcbt);
+connect(qcbt,SIGNAL(dialogParamChanged()),this,SIGNAL(parameterChanged()));
+*/
+
+/******************************************/
+// ColorWidget Implementation
+/******************************************/
+
+
+ColorWidget::ColorWidget(QWidget *p, RichColor* newColor)
+:MeshLabWidget(p,newColor),pickcol()
+{
+
+ colorLabel = new QLabel(p);
+ descLabel = new QLabel(rp->pd->fieldDesc,p);
+ colorButton = new QPushButton(p);
+ colorButton->setAutoFillBackground(true);
+ colorButton->setFlat(true);
+ const QColor cl = rp->pd->defVal->getColor();
+ updateColorInfo(cl);
+ int row = gridLay->rowCount() - 1;
+ gridLay->addWidget(descLabel,row,0,Qt::AlignTop);
+
+ QHBoxLayout* lay = new QHBoxLayout(p);
+ lay->addWidget(colorLabel);
+ lay->addWidget(colorButton);
+
+ gridLay->addLayout(lay,row,1,Qt::AlignTop);
+ pickcol = rp->pd->defVal->getColor();
+ connect(colorButton,SIGNAL(clicked()),this,SLOT(pickColor()));
+ connect(this,SIGNAL(dialogParamChanged()),p,SIGNAL(parameterChanged()));
+}
+
+void ColorWidget::updateColorInfo(const ColorValue& newColor)
+{
+ QColor col = newColor.getColor();
+ colorLabel->setText("("+col.name()+")");
+ QPalette palette(col);
+ colorButton->setPalette(palette);
+}
+
+void ColorWidget::pickColor()
+{
+ pickcol =QColorDialog::getColor(rp->pd->defVal->getColor());
+ if(pickcol.isValid())
+ updateColorInfo(ColorValue(pickcol));
+ emit dialogParamChanged();
+}
+
+void ColorWidget::resetWidgetValue()
+{
+ QColor cl = rp->pd->defVal->getColor();
+ pickcol = cl;
+ updateColorInfo(cl);
+}
+
+void ColorWidget::collectWidgetValue()
+{
+ rp->val->set(ColorValue(pickcol));
+}
+
+ColorWidget::~ColorWidget()
+{
+ delete colorButton;
+ delete colorLabel;
+ delete descLabel;
+}
+
+/*
+void GetFileNameWidget::launchGetFileNameDialog()
+{
+
+}*/
diff --git a/src/meshlab/stdpardialog.h b/src/meshlab/stdpardialog.h
index 4e3fa07a4..f1fd2967a 100644
--- a/src/meshlab/stdpardialog.h
+++ b/src/meshlab/stdpardialog.h
@@ -90,49 +90,188 @@ Added standard plugin window support
#include "meshmodel.h"
#include "filterparameter.h"
#include "interfaces.h"
+#include
-/// Widget to enter a color.
-class QColorButton : public QHBoxLayout
+class MeshLabWidget : public QWidget
+{
+ Q_OBJECT
+public:
+ MeshLabWidget(QWidget* p,RichParameter* rpar);
+
+ virtual void resetWidgetValue() = 0;
+ virtual void collectWidgetValue() = 0;
+ virtual ~MeshLabWidget();
+ void resetValue();
+ Value& getWidgetValue();
+
+ RichParameter* rp;
+ QLabel* helpLab;
+signals:
+ void parameterChanged();
+protected:
+ QGridLayout* gridLay;
+ void InitRichParameter(RichParameter* rpar);
+};
+
+class BoolWidget : public MeshLabWidget
+{
+ QCheckBox* cb;
+public:
+ BoolWidget(QWidget* p,RichBool* rb);
+ ~BoolWidget();
+ void collectWidgetValue();
+ void resetWidgetValue();
+};
+
+
+class LineEditWidget : public MeshLabWidget
+{
+protected:
+ QLabel* lab;
+ QLineEdit* lned;
+public:
+
+ LineEditWidget(QWidget* p,RichParameter* rpar);
+ ~LineEditWidget();
+ virtual void collectWidgetValue() = 0;
+ virtual void resetWidgetValue() = 0;
+};
+
+
+
+class IntWidget : public LineEditWidget
+{
+public:
+ IntWidget(QWidget* p,RichInt* rpar);
+ ~IntWidget(){}
+ void collectWidgetValue();
+ void resetWidgetValue();
+};
+
+
+
+class FloatWidget : public LineEditWidget
+{
+public:
+ FloatWidget(QWidget* p,RichFloat* rpar);
+ ~FloatWidget(){}
+ void collectWidgetValue();
+ void resetWidgetValue();
+};
+
+
+
+class StringWidget : public LineEditWidget
+{
+public:
+ StringWidget(QWidget* p,RichString* rpar);
+ ~StringWidget(){}
+ void collectWidgetValue();
+ void resetWidgetValue();
+};
+
+//class Matrix44fWidget : public MeshLabWidget
+//{
+//public:
+// Matrix44fWidget(QWidget* p,RichMatrix44f* rpar);
+//
+// void collectWidgetValue();
+// void resetWidgetValue();
+//};
+
+/*
+class FloatListWidget : public MeshLabWidget
+{
+public:
+ FloatListWidget(QWidget* p,RichFloatList* rpar);
+
+ void collectWidgetValue();
+ void resetWidgetValue();
+};
+*/
+
+/*
+class OpenFileWidget : public MeshLabWidget
+{
+public:
+ OpenFileWidget(QWidget* p,RichOpenFile* rpar);
+
+ void collectWidgetValue();
+ void resetWidgetValue();
+};
+*/
+
+
+class SaveFileWidget : public MeshLabWidget
+{
+public:
+ SaveFileWidget(QWidget* p,RichSaveFile* rpar);
+
+ void collectWidgetValue();
+ void resetWidgetValue();
+};
+
+
+/// Widget to enter a color.
+// public QHBoxLayout,
+class ColorWidget : public MeshLabWidget
{
Q_OBJECT
- QPushButton *colorButton;
- QLabel *colorLabel;
- QColor currentColor;
+ QPushButton* colorButton;
+ QLabel* colorLabel;
+ QLabel* descLabel;
+ QColor pickcol;
+
public:
- QColorButton(QWidget *p, QColor newColor);
- QColor getColor();
- void setColor(QColor newColor);
-
+ ColorWidget(QWidget *p, RichColor* newColor);
+ ~ColorWidget();
+
+ void collectWidgetValue();
+ void resetWidgetValue();
+
+private:
+ void updateColorInfo(const ColorValue& newColor);
+
signals:
void dialogParamChanged();
private slots:
void pickColor();
};
+
+
/// Widget to enter a value as a percentage or as an absolute value.
/// You have to specify the default value and the range of the possible values.
/// The default value is expressed in ABSolute units (e.g. it should be in the min..max range.
-class AbsPercWidget : public QGridLayout
+
+//public QGridLayout
+class AbsPercWidget : public MeshLabWidget
{
Q_OBJECT
public:
- AbsPercWidget(QWidget *p, double defaultv, double minVal, double maxVal);
+ AbsPercWidget(QWidget *p,RichAbsPerc* rabs);
~AbsPercWidget();
+
+ void collectWidgetValue();
+ void resetWidgetValue();
- float getValue();
+private:
void setValue(float val, float minV, float maxV);
public slots:
void on_absSB_valueChanged(double newv);
void on_percSB_valueChanged(double newv);
+signals:
+ void dialogParamChanged();
protected:
QDoubleSpinBox *absSB;
QDoubleSpinBox *percSB;
+ QLabel* fieldDesc;
float m_min;
float m_max;
};
@@ -143,15 +282,20 @@ protected:
/// if at the creation you provide a pointer to a GLArea (the mesh viewing window)
/// the widget exposes a button for getting the current view directiont
-class Point3fWidget : public QHBoxLayout
+//public QHBoxLayout,
+class Point3fWidget : public MeshLabWidget
{
Q_OBJECT
public:
- Point3fWidget(QWidget *p, vcg::Point3f defaultv, QString _paramName, QWidget *gla);
+ Point3fWidget(QWidget *p, RichPoint3f* rpf, QWidget *gla);
~Point3fWidget();
QString paramName;
vcg::Point3f getValue();
+
+ void collectWidgetValue();
+ void resetWidgetValue();
+
public slots:
void getPoint();
void setValue(QString name, vcg::Point3f val);
@@ -160,22 +304,30 @@ public:
void askViewPos(QString);
void askSurfacePos(QString);
void askCameraPos(QString);
+
protected:
QLineEdit * coordSB[3];
QComboBox *getPoint3Combo;
QPushButton *getPoint3Button;
+ QLabel* descLab;
};
-class DynamicFloatWidget : public QGridLayout
+
+
+//public QGridLayout,
+class DynamicFloatWidget : public MeshLabWidget
{
Q_OBJECT
public:
- DynamicFloatWidget(QWidget *p, double defaultv, double minVal, double maxVal, int mask);
+ DynamicFloatWidget(QWidget *p, RichDynamicFloat* rdf);
~DynamicFloatWidget();
float getValue();
void setValue(float val, float minV, float maxV);
+
+ void collectWidgetValue();
+ void resetWidgetValue();
public slots:
void setValue(int newv);
@@ -189,6 +341,7 @@ public:
protected:
QLineEdit *valueLE;
QSlider *valueSlider;
+ QLabel* fieldDesc;
float minVal;
float maxVal;
int mask;
@@ -197,6 +350,138 @@ private :
int floatToInt(float val);
};
+
+
+class ComboWidget : public MeshLabWidget
+{
+ Q_OBJECT
+protected:
+ QComboBox *enumCombo;
+ QLabel *enumLabel;
+public:
+ ComboWidget(QWidget *p, RichParameter* rpar);
+ ~ComboWidget();
+ void Init(QWidget *p,int newEnum, QStringList values);
+ virtual void collectWidgetValue() = 0;
+ virtual void resetWidgetValue() = 0;
+
+ int getIndex();
+ void setIndex(int newEnum);
+
+signals:
+ void dialogParamChanged();
+};
+
+/// Widget to select an entry from a list
+
+//public QHBoxLayout
+class EnumWidget : public ComboWidget
+{
+ Q_OBJECT
+
+public:
+ EnumWidget(QWidget *p, RichEnum* rpar);
+ ~EnumWidget(){};
+
+ void collectWidgetValue();
+ void resetWidgetValue();
+
+ //returns the number of items in the list
+ int getSize();
+};
+
+
+/// Widget to select a Layer the current one
+class MeshWidget : public ComboWidget
+{
+private:
+ MeshDocument *md;
+ int defaultMeshIndex;
+public:
+ MeshWidget(QWidget *p, RichMesh* defaultMesh);
+ ~MeshWidget(){};
+ void collectWidgetValue();
+ void resetWidgetValue();
+
+ MeshModel * getMesh();
+ void setMesh(MeshModel * newMesh);
+};
+
+
+/*
+class QVariantListWidget : public MeshLabWidget
+{
+ Q_OBJECT
+public:
+ QVariantListWidget(QWidget *parent, QList &values);
+
+ //get the values listed in this widget
+ QList getList();
+
+ //set the values this widget lists
+ void setList(QList &values);
+
+ public slots:
+ //add a new row for input at the end
+ void addRow();
+
+ //remove the last row of the table widget
+ void removeRow();
+
+ void collectWidgetValue();
+ void resetWidgetValue();
+
+private:
+ QTableWidget *tableWidget;
+
+};
+*/
+
+
+/*
+//public QVBoxLayout
+class GetFileNameWidget : public MeshLabWidget
+{
+ Q_OBJECT
+public:
+ GetFileNameWidget(QWidget *parent, QString &defaultString, bool getOpenFileName, QString fileExtension = QString("*.*"));
+
+ ~GetFileNameWidget();
+
+ //set the values this widget lists
+ QString getFileName();
+
+ //set the name to be something else
+ void setFileName(QString newName);
+
+ public slots:
+ //add a new row for input at the end
+ void launchGetFileNameDialog();
+
+ void collectWidgetValue();
+ void resetWidgetValue();
+private:
+
+ //open or save filename
+ bool _getOpenFileName;
+
+ //label to display the current value of _filename
+ QLabel *fileNameLabel;
+
+ //button to launch the get filename dialog
+ QPushButton *launchFileNameDialogButton;
+
+ //the filename colected by the fileName dialog
+ QString _fileName;
+
+ //the extension of the files to look for
+ QString _fileExtension;
+
+};
+*/
+
+/*---------------------------------*/
+
/*
This class is used to automatically create a frame from a set of parameters.
it is used mostly for creating the main dialog of the filters, but it is used also
@@ -209,119 +494,24 @@ class StdParFrame : public QFrame
public:
StdParFrame(QWidget *p, QWidget *gla=0);
- void loadFrameContent(FilterParameterSet &curParSet,MeshDocument *mdPt = 0);
- void readValues(FilterParameterSet &curParSet);
- void resetValues(FilterParameterSet &curParSet);
+ void loadFrameContent(RichParameterSet &curParSet,MeshDocument *mdPt = 0);
+ void readValues(RichParameterSet &curParSet);
+ void resetValues(RichParameterSet &curParSet);
void toggleHelp();
- QVector stdfieldwidgets;
+ QVector stdfieldwidgets;
QVector helpList;
-private:
+
QWidget *gla; // used for having a link to the glarea that spawned the parameter asking.
-
+ ~StdParFrame();
signals:
void dynamicFloatChanged(int mask);
void parameterChanged();
};
-/// Widget to select an entry from a list
-class EnumWidget : public QHBoxLayout
-{
- Q_OBJECT
-protected:
- QComboBox *enumCombo;
- QLabel *enumLabel;
- public:
- EnumWidget(){};
- EnumWidget(QWidget *p, int newEnum, QStringList values);
- void Init(QWidget *p, int newEnum, QStringList values);
- int getEnum();
- void setEnum(int newEnum);
-
- //returns the number of items in the list
- int getSize();
- signals:
- void dialogParamChanged();
-};
-
-
-
-/// Widget to select a Layer the current one
-class MeshEnumWidget : public EnumWidget
-{
-private:
- MeshDocument *md;
-public:
- MeshEnumWidget(QWidget *p, MeshModel *defaultMesh, MeshDocument &md);
-
- MeshModel * getMesh();
- void setMesh(MeshModel * newMesh);
-};
-
-
-class QVariantListWidget : public QHBoxLayout
-{
- Q_OBJECT
-public:
- QVariantListWidget(QWidget *parent, QList &values);
-
- //get the values listed in this widget
- QList getList();
-
- //set the values this widget lists
- void setList(QList &values);
-
-public slots:
- //add a new row for input at the end
- void addRow();
-
- //remove the last row of the table widget
- void removeRow();
-
-private:
- QTableWidget *tableWidget;
-
-};
-
-class GetFileNameWidget : public QVBoxLayout
-{
- Q_OBJECT
-public:
- GetFileNameWidget(QWidget *parent, QString &defaultString, bool getOpenFileName, QString fileExtension = QString("*.*"));
-
- ~GetFileNameWidget();
-
- //set the values this widget lists
- QString getFileName();
-
- //set the name to be something else
- void setFileName(QString newName);
-
-public slots:
- //add a new row for input at the end
- void launchGetFileNameDialog();
-
-private:
-
- //open or save filename
- bool _getOpenFileName;
-
- //label to display the current value of _filename
- QLabel *fileNameLabel;
-
- //button to launch the get filename dialog
- QPushButton *launchFileNameDialogButton;
-
- //the filename colected by the fileName dialog
- QString _fileName;
-
- //the extension of the files to look for
- QString _fileExtension;
-
-};
// This class provide a modal dialog box for asking a generic parameter set
// It can be used by anyone needing for some values in a structred form and having some integrated help
@@ -329,9 +519,10 @@ class GenericParamDialog: public QDialog
{
Q_OBJECT
public:
- GenericParamDialog(QWidget *p, FilterParameterSet *_curParSet, QString title=QString(), MeshDocument *_meshDocument = 0);
-
- FilterParameterSet *curParSet;
+ GenericParamDialog(QWidget *p, RichParameterSet *_curParSet, QString title=QString(), MeshDocument *_meshDocument = 0);
+ ~GenericParamDialog();
+
+ RichParameterSet *curParSet;
StdParFrame *stdParFrame;
void createFrame();
@@ -359,6 +550,7 @@ class MeshlabStdDialog : public QDockWidget
public:
MeshlabStdDialog(QWidget *p);
+ ~MeshlabStdDialog();
void clearValues();
void createFrame();
@@ -375,24 +567,63 @@ private slots:
void togglePreview();
void applyDynamic();
-protected:
+public:
QFrame *qf;
StdParFrame *stdParFrame;
QAction *curAction;
MeshModelState meshState;
+ MeshModelState meshCacheState;
QCheckBox *previewCB;
void closeEvent ( QCloseEvent * event );
-public:
+
int curmask;
MeshModel *curModel;
MeshDocument * curMeshDoc;
MeshFilterInterface *curmfi;
MainWindowInterface *curmwi;
QWidget * curgla;
- FilterParameterSet curParSet;
-
+ RichParameterSet curParSet;
+ RichParameterSet prevParSet;
+ bool validcache;
};
+
+
+//QWidget* parent parameter says to the class who will destroy the MeshLabWidget object that it had created
+//RichWidgetConstructor shouldn't destroy anything
+
+class RichWidgetInterfaceConstructor : public Visitor
+{
+public:
+ RichWidgetInterfaceConstructor(QWidget* parent):par(parent),lastCreated(NULL){}
+
+ void visit(RichBool& pd) {lastCreated = new BoolWidget(par,&pd);};
+ void visit(RichInt& pd) {lastCreated = new IntWidget(par,&pd);};
+ void visit(RichFloat& pd){lastCreated = new FloatWidget(par,&pd);};
+ void visit(RichString& pd){lastCreated = new StringWidget(par,&pd);};
+ void visit(RichMatrix44f& pd){assert(0);/*TO BE IMPLEMENTED*/ /*lastCreated = new Matrix44fWidget(par,&pd);*/};
+ void visit(RichPoint3f& pd){lastCreated = new Point3fWidget(par,&pd,reinterpret_cast(par)->gla);};
+ void visit(RichColor& pd){lastCreated = new ColorWidget(par,&pd);};
+ void visit(RichColor4b& pd){assert(0);/*TO BE IMPLEMENTED*/ /*lastCreated = new Color4bWidget(par,&pd);*/};
+ void visit(RichAbsPerc& pd){lastCreated = new AbsPercWidget(par,&pd);};
+ void visit(RichEnum& pd){lastCreated = new EnumWidget(par,&pd);};
+ void visit(RichFloatList& pd){assert(0);/*TO BE IMPLEMENTED*/ /*lastCreated = new FloatListWidget(par,&pd);*/};
+ void visit(RichDynamicFloat& pd){lastCreated = new DynamicFloatWidget(par,&pd);};
+ void visit(RichOpenFile& pd){assert(0);/*TO BE IMPLEMENTED*/ /*lastCreated = new OpenFileWidget(par,&pd);*/};
+ void visit(RichSaveFile& pd){lastCreated = new SaveFileWidget(par,&pd);};
+ void visit(RichMesh& pd){lastCreated = new MeshWidget(par,&pd);};
+
+ ~RichWidgetInterfaceConstructor() {}
+
+ void setParentWidget(QWidget* parent) {par = parent;}
+ MeshLabWidget* lastCreated;
+private:
+ QWidget* par;
+
+};
+
+
+
#endif
diff --git a/src/meshlabplugins/edit_pickpoints/pickpointsDialog.cpp b/src/meshlabplugins/edit_pickpoints/pickpointsDialog.cpp
index 8ee6e5115..213e1ae2d 100644
--- a/src/meshlabplugins/edit_pickpoints/pickpointsDialog.cpp
+++ b/src/meshlabplugins/edit_pickpoints/pickpointsDialog.cpp
@@ -643,8 +643,8 @@ void PickPointsDialog::renameHighlightedPoint(){
const QString newName = "newName";
- FilterParameterSet parameterSet;
- parameterSet.addString(newName, name, "New Name", "Enter the new name");
+ RichParameterSet parameterSet;
+ parameterSet.addParam(new RichString(newName, name, "New Name", "Enter the new name"));
GenericParamDialog getNameDialog(this,¶meterSet);
getNameDialog.setWindowModality(Qt::WindowModal);
diff --git a/src/meshlabplugins/editalign/align/align_parameter.cpp b/src/meshlabplugins/editalign/align/align_parameter.cpp
index 1c2c61b29..f7a7c87fb 100644
--- a/src/meshlabplugins/editalign/align/align_parameter.cpp
+++ b/src/meshlabplugins/editalign/align/align_parameter.cpp
@@ -27,8 +27,8 @@ using namespace vcg;
AlignParameter::AlignParameter(){}
-// given a FilterParameterSet get back the alignment parameter (dual of the buildParemeterSet)
-void AlignParameter::buildAlignParameters(FilterParameterSet &fps , AlignPair::Param &app)
+// given a RichParameterSet get back the alignment parameter (dual of the buildParemeterSet)
+void AlignParameter::buildAlignParameters(RichParameterSet &fps , AlignPair::Param &app)
{
app.SampleNum=fps.getInt("SampleNum");
app.MinDistAbs=fps.getFloat("MinDistAbs");
@@ -39,18 +39,18 @@ void AlignParameter::buildAlignParameters(FilterParameterSet &fps , AlignPair::P
app.MatchMode=fps.getBool("MatchMode")? AlignPair::Param::MMRigid : AlignPair::Param::MMClassic;
}
-// given an alignment parameter builds the corresponding FilterParameterSet (dual of the retrieveParemeterSet)
-void AlignParameter::buildFilterParameterSet(AlignPair::Param &app, FilterParameterSet &fps)
+// given an alignment parameter builds the corresponding RichParameterSet (dual of the retrieveParemeterSet)
+void AlignParameter::buildRichParameterSet(AlignPair::Param &app, RichParameterSet &fps)
{
fps.clear();
- fps.addInt("SampleNum",app.SampleNum,"Sample Number","Number of samples that we try to choose at each ICP iteration");
- fps.addFloat("MinDistAbs",app.MinDistAbs,"Minimal Starting Distance","For all the chosen sample on one mesh we consider for ICP only the samples nearer than this value."
+ fps.addParam(new RichInt("SampleNum",app.SampleNum,"Sample Number","Number of samples that we try to choose at each ICP iteration"));
+ fps.addParam(new RichFloat("MinDistAbs",app.MinDistAbs,"Minimal Starting Distance","For all the chosen sample on one mesh we consider for ICP only the samples nearer than this value."
"If MSD is too large outliers could be included, if it is too small convergence will be very slow. "
"A good guess is needed here, suggested values are in the range of 10-100 times of the device scanning error."
- "This value is also dynamically changed by the 'Reduce Distance Factor'");
- fps.addFloat("TrgDistAbs",app.TrgDistAbs,"Target Distance","When 50% of the chosen samples are below this distance we consider the two mesh aligned. Usually it should be a value lower than the error of the scanning device. ");
- fps.addInt("MaxIterNum",app.MaxIterNum,"Max Iteration Num","The maximum number of iteration that the ICP is allowed to perform.");
- fps.addBool("SampleMode",app.SampleMode == AlignPair::Param::SMNormalEqualized,"Normal Equalized Sampling","if true (default) the sample points of icp are choosen with a distribution uniform with respect to the normals of the surface. Otherwise they are distributed in a spatially uniform way.");
- fps.addFloat("ReduceFactor",app.ReduceFactor,"MSD Reduce Factor","At each ICP iteration the Minimal Starting Distance is reduced to be 5 times the percentile of the sample distances (e.g. if RF is 0.9 the new Minimal Starting Distance is 5 times the value such that 90% of the sample lies at a distance lower than .");
- fps.addBool("MatchMode",app.MatchMode == AlignPair::Param::MMRigid,"Rigid matching","If true the ICP is cosntrained to perform matching only throug roto-translations (no scaling allowed). If false a more relaxed transformation matrix is allowed (scaling and shearing can appear).");
+ "This value is also dynamically changed by the 'Reduce Distance Factor'"));
+ fps.addParam(new RichFloat("TrgDistAbs",app.TrgDistAbs,"Target Distance","When 50% of the chosen samples are below this distance we consider the two mesh aligned. Usually it should be a value lower than the error of the scanning device. "));
+ fps.addParam(new RichInt("MaxIterNum",app.MaxIterNum,"Max Iteration Num","The maximum number of iteration that the ICP is allowed to perform."));
+ fps.addParam(new RichBool("SampleMode",app.SampleMode == AlignPair::Param::SMNormalEqualized,"Normal Equalized Sampling","if true (default) the sample points of icp are choosen with a distribution uniform with respect to the normals of the surface. Otherwise they are distributed in a spatially uniform way."));
+ fps.addParam(new RichFloat("ReduceFactor",app.ReduceFactor,"MSD Reduce Factor","At each ICP iteration the Minimal Starting Distance is reduced to be 5 times the percentile of the sample distances (e.g. if RF is 0.9 the new Minimal Starting Distance is 5 times the value such that 90% of the sample lies at a distance lower than ."));
+ fps.addParam(new RichBool("MatchMode",app.MatchMode == AlignPair::Param::MMRigid,"Rigid matching","If true the ICP is cosntrained to perform matching only throug roto-translations (no scaling allowed). If false a more relaxed transformation matrix is allowed (scaling and shearing can appear)."));
}
diff --git a/src/meshlabplugins/editalign/align/align_parameter.h b/src/meshlabplugins/editalign/align/align_parameter.h
index 02462bf7f..33d32e202 100644
--- a/src/meshlabplugins/editalign/align/align_parameter.h
+++ b/src/meshlabplugins/editalign/align/align_parameter.h
@@ -29,10 +29,10 @@ class AlignParameter {
public:
//translates the filter parameters into align parameters
- static void buildAlignParameters(FilterParameterSet &fps, vcg::AlignPair::Param &app);
+ static void buildAlignParameters(RichParameterSet &fps, vcg::AlignPair::Param &app);
//translates the align parameters into filter parameters
- static void buildFilterParameterSet(vcg::AlignPair::Param &app, FilterParameterSet &fps);
+ static void buildRichParameterSet(vcg::AlignPair::Param &app, RichParameterSet &fps);
private:
//no need to have an instance of this class
diff --git a/src/meshlabplugins/editalign/editalign.cpp b/src/meshlabplugins/editalign/editalign.cpp
index 879de719c..fae5937de 100644
--- a/src/meshlabplugins/editalign/editalign.cpp
+++ b/src/meshlabplugins/editalign/editalign.cpp
@@ -230,9 +230,9 @@ void EditAlignPlugin:: alignParamCurrent()
{
assert(currentArc());
- FilterParameterSet alignParamSet;
+ RichParameterSet alignParamSet;
QString titleString=QString("Current Arc (%1 -> %2) Alignment Parameters").arg(currentArc()->MovName).arg(currentArc()->FixName);
- AlignParameter::buildFilterParameterSet(currentArc()->ap, alignParamSet);
+ AlignParameter::buildRichParameterSet(currentArc()->ap, alignParamSet);
GenericParamDialog ad(alignDialog,&alignParamSet,titleString);
int result=ad.exec();
@@ -244,8 +244,8 @@ void EditAlignPlugin:: alignParamCurrent()
void EditAlignPlugin:: alignParam()
{
- FilterParameterSet alignParamSet;
- AlignParameter::buildFilterParameterSet(defaultAP, alignParamSet);
+ RichParameterSet alignParamSet;
+ AlignParameter::buildRichParameterSet(defaultAP, alignParamSet);
GenericParamDialog ad(alignDialog,&alignParamSet,"Default Alignment Parameters");
int result=ad.exec();
diff --git a/src/meshlabplugins/filter_ao/filter_ao.cpp b/src/meshlabplugins/filter_ao/filter_ao.cpp
index 81a2217dc..2825461e5 100644
--- a/src/meshlabplugins/filter_ao/filter_ao.cpp
+++ b/src/meshlabplugins/filter_ao/filter_ao.cpp
@@ -117,27 +117,27 @@ const int AmbientOcclusionPlugin::getRequirements(QAction *action)
return 0;
}
-void AmbientOcclusionPlugin::initParameterSet(QAction *action, MeshModel &m, FilterParameterSet &parlst)
+void AmbientOcclusionPlugin::initParameterSet(QAction *action, MeshModel &m, RichParameterSet &parlst)
{
switch(ID(action))
{
case FP_FACE_AMBIENT_OCCLUSION:
case FP_VERT_AMBIENT_OCCLUSION:
- parlst.addFloat("dirBias",0,"Directional Bias [0..1]","The balance between a uniform and a directionally biased set of lighting direction
:"
+ parlst.addParam(new RichFloat("dirBias",0,"Directional Bias [0..1]","The balance between a uniform and a directionally biased set of lighting direction
:"
" - 0 means light came only uniformly from any direction
"
" - 1 means that all the light cames from the specified cone of directions
"
- " - other values mix the two set of lighting directions ");
- parlst.addInt ("reqViews",AMBOCC_DEFAULT_NUM_VIEWS,"Requested views", "Number of different views uniformly placed around the mesh. More views means better accuracy at the cost of increased calculation time");
- parlst.addPoint3f("coneDir",Point3f(0,1,0),"Lighting Direction", "Number of different views placed around the mesh. More views means better accuracy at the cost of increased calculation time");
- parlst.addFloat("coneAngle",30,"Cone amplitude", "Number of different views uniformly placed around the mesh. More views means better accuracy at the cost of increased calculation time");
- parlst.addBool("useGPU",AMBOCC_USEGPU_BY_DEFAULT,"Use GPU acceleration","In order to use GPU-Mode, your hardware must support FBOs, FP32 Textures and Shaders. Normally increases the performance by a factor of 4x-5x");
- parlst.addBool("useVBO",AMBOCC_USEVBO_BY_DEFAULT,"Use VBO if supported","By using VBO, Meshlab loads all the vertex structure in the VRam, greatly increasing rendering speed (for both CPU and GPU mode). Disable it if problem occurs");
- parlst.addInt ("depthTexSize",AMBOCC_DEFAULT_TEXTURE_SIZE,"Depth texture size(should be 2^n)", "Defines the depth texture size used to compute occlusion from each point of view. Higher values means better accuracy usually with low impact on performance");
+ " - other values mix the two set of lighting directions "));
+ parlst.addParam(new RichInt ("reqViews",AMBOCC_DEFAULT_NUM_VIEWS,"Requested views", "Number of different views uniformly placed around the mesh. More views means better accuracy at the cost of increased calculation time"));
+ parlst.addParam(new RichPoint3f("coneDir",Point3f(0,1,0),"Lighting Direction", "Number of different views placed around the mesh. More views means better accuracy at the cost of increased calculation time"));
+ parlst.addParam(new RichFloat("coneAngle",30,"Cone amplitude", "Number of different views uniformly placed around the mesh. More views means better accuracy at the cost of increased calculation time"));
+ parlst.addParam(new RichBool("useGPU",AMBOCC_USEGPU_BY_DEFAULT,"Use GPU acceleration","In order to use GPU-Mode, your hardware must support FBOs, FP32 Textures and Shaders. Normally increases the performance by a factor of 4x-5x"));
+ parlst.addParam(new RichBool("useVBO",AMBOCC_USEVBO_BY_DEFAULT,"Use VBO if supported","By using VBO, Meshlab loads all the vertex structure in the VRam, greatly increasing rendering speed (for both CPU and GPU mode). Disable it if problem occurs"));
+ parlst.addParam(new RichInt ("depthTexSize",AMBOCC_DEFAULT_TEXTURE_SIZE,"Depth texture size(should be 2^n)", "Defines the depth texture size used to compute occlusion from each point of view. Higher values means better accuracy usually with low impact on performance"));
break;
default: assert(0);
}
}
-bool AmbientOcclusionPlugin::applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & par, vcg::CallBackPos *cb)
+bool AmbientOcclusionPlugin::applyFilter(QAction *filter, MeshModel &m, RichParameterSet & par, vcg::CallBackPos *cb)
{
if(ID(filter)==FP_FACE_AMBIENT_OCCLUSION ) perFace=true;
else perFace = false;
diff --git a/src/meshlabplugins/filter_ao/filter_ao.h b/src/meshlabplugins/filter_ao/filter_ao.h
index c6b858f18..bae48d231 100644
--- a/src/meshlabplugins/filter_ao/filter_ao.h
+++ b/src/meshlabplugins/filter_ao/filter_ao.h
@@ -86,10 +86,10 @@ public:
virtual void initParameterSet(QAction *,
MeshModel &/*m*/,
- FilterParameterSet & /*parent*/);
+ RichParameterSet & /*parent*/);
virtual bool applyFilter (QAction *filter,
MeshModel &m,
- FilterParameterSet & /*parent*/,
+ RichParameterSet & /*parent*/,
vcg::CallBackPos * cb) ;
void initTextures (void);
void initGL (vcg::CallBackPos *cb,
diff --git a/src/meshlabplugins/filter_autoalign/filter_autoalign.cpp b/src/meshlabplugins/filter_autoalign/filter_autoalign.cpp
index 8f4655ff4..bde265784 100644
--- a/src/meshlabplugins/filter_autoalign/filter_autoalign.cpp
+++ b/src/meshlabplugins/filter_autoalign/filter_autoalign.cpp
@@ -84,8 +84,8 @@ const QString FilterAutoalign::filterInfo(FilterIDType filterId) const
// - the string shown in the dialog
// - the default value
// - a possibly long string describing the meaning of that parameter (shown as a popup help in the dialog)
-void FilterAutoalign::initParameterSet(QAction *action,MeshDocument & md/*m*/, FilterParameterSet & parlst)
-//void ExtraSamplePlugin::initParList(QAction *action, MeshModel &m, FilterParameterSet &parlst)
+void FilterAutoalign::initParameterSet(QAction *action,MeshDocument & md/*m*/, RichParameterSet & parlst)
+//void ExtraSamplePlugin::initParList(QAction *action, MeshModel &m, RichParameterSet &parlst)
{
MeshModel *target;
switch(ID(action)) {
@@ -94,19 +94,19 @@ void FilterAutoalign::initParameterSet(QAction *action,MeshDocument & md/*m*/, F
foreach (target, md.meshList)
if (target != md.mm()) break;
- parlst.addMesh ("FirstMesh", md.mm(), "First Mesh",
- "The mesh were the coplanar bases are sampled (it will contain the trasformation)");
- parlst.addMesh ("SecondMesh", target, "Second Mesh",
- "The mesh were similar coplanar based are searched.");
- parlst.addFloat("overlapping",0.5f,"Estimated fraction of the\n first mesh overlapped by the second");
- parlst.addFloat("tolerance [0.0,1.0]",0.3f,"Error tolerance");
+ parlst.addParam(new RichMesh ("FirstMesh", md.mm(),&md, "First Mesh",
+ "The mesh were the coplanar bases are sampled (it will contain the trasformation)"));
+ parlst.addParam(new RichMesh ("SecondMesh", target,&md, "Second Mesh",
+ "The mesh were similar coplanar based are searched."));
+ parlst.addParam(new RichFloat("overlapping",0.5f,"Estimated fraction of the\n first mesh overlapped by the second"));
+ parlst.addParam(new RichFloat("tolerance [0.0,1.0]",0.3f,"Error tolerance"));
break;
default : assert(0);
}
}
// The Real Core Function doing the actual mesh processing.
-bool FilterAutoalign::applyFilter(QAction *filter, MeshDocument &md, FilterParameterSet & par, vcg::CallBackPos *cb)
+bool FilterAutoalign::applyFilter(QAction *filter, MeshDocument &md, RichParameterSet & par, vcg::CallBackPos *cb)
{
vcg::tri::FourPCS *fpcs ;
bool res;
diff --git a/src/meshlabplugins/filter_autoalign/filter_autoalign.h b/src/meshlabplugins/filter_autoalign/filter_autoalign.h
index 7f50fe7ec..3bd4fc403 100644
--- a/src/meshlabplugins/filter_autoalign/filter_autoalign.h
+++ b/src/meshlabplugins/filter_autoalign/filter_autoalign.h
@@ -53,9 +53,9 @@ public:
virtual const QString filterInfo(FilterIDType filter) const;
virtual bool autoDialog(QAction *) {return true;}
virtual const FilterClass getClass(QAction *);
- virtual void initParameterSet(QAction *,MeshDocument &/*m*/, FilterParameterSet & /*parent*/);
- virtual bool applyFilter(QAction *filter, MeshDocument &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
- virtual bool applyFilter(QAction *filter, MeshModel &, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) { assert(0); return false;} ;
+ virtual void initParameterSet(QAction *,MeshDocument &/*m*/, RichParameterSet & /*parent*/);
+ virtual bool applyFilter(QAction *filter, MeshDocument &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual bool applyFilter(QAction *filter, MeshModel &, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) { assert(0); return false;} ;
};
#endif
diff --git a/src/meshlabplugins/filter_clean/align_tools.cpp b/src/meshlabplugins/filter_clean/align_tools.cpp
index 45a81f40a..c61f4c84c 100644
--- a/src/meshlabplugins/filter_clean/align_tools.cpp
+++ b/src/meshlabplugins/filter_clean/align_tools.cpp
@@ -50,23 +50,23 @@ const QString AlignTools::MeshToMove = "MeshToMove";
AlignTools::AlignTools(){}
-void AlignTools::buildParameterSet(FilterParameterSet & parlst)
+void AlignTools::buildParameterSet(MeshDocument &md,RichParameterSet & parlst)
{
vcg::AlignPair::Param ICPParameters;
- AlignParameter::buildFilterParameterSet(ICPParameters, parlst);
+ AlignParameter::buildRichParameterSet(ICPParameters, parlst);
- parlst.addBool(UseMarkers, true, "Use Markers for Alignment","if true (default), then use the user picked markers to do an alignment (or pre alignment if you also use ICP).");
- parlst.addBool(AllowScaling, false, "Scale the mesh","if true (false by default), in addition to the alignment, scale the mesh based on the points picked");
+ parlst.addParam(new RichBool(UseMarkers, true, "Use Markers for Alignment","if true (default), then use the user picked markers to do an alignment (or pre alignment if you also use ICP)."));
+ parlst.addParam(new RichBool(AllowScaling, false, "Scale the mesh","if true (false by default), in addition to the alignment, scale the mesh based on the points picked"));
- parlst.addBool(UseICP, true, "Use ICP for Alignment","if true (default), then use the ICP to align the two meshes.");
+ parlst.addParam(new RichBool(UseICP, true, "Use ICP for Alignment","if true (default), then use the ICP to align the two meshes."));
- parlst.addMesh (StuckMesh, 0, "Stuck Mesh",
- "The mesh that will not move.");
- parlst.addMesh (MeshToMove, 1, "Mesh to Move",
- "The mesh that will move to fit close to the Stuck Mesh.");
+ parlst.addParam(new RichMesh (StuckMesh, md.mm(), &md,"Stuck Mesh",
+ "The mesh that will not move."));
+ parlst.addParam(new RichMesh (MeshToMove, md.mm(), &md, "Mesh to Move",
+ "The mesh that will move to fit close to the Stuck Mesh."));
}
-bool AlignTools::setupThenAlign(MeshModel &/*mm*/, FilterParameterSet & par)
+bool AlignTools::setupThenAlign(MeshModel &/*mm*/, RichParameterSet & par)
{
//mesh that wont move
MeshModel *stuckModel = par.getMesh(StuckMesh);
@@ -163,7 +163,7 @@ bool AlignTools::setupThenAlign(MeshModel &/*mm*/, FilterParameterSet & par)
bool AlignTools::align(MeshModel *stuckModel, PickedPoints *stuckPickedPoints,
MeshModel *modelToMove, PickedPoints *modelToMovePickedPoints,
GLArea *modelToMoveGLArea,
- FilterParameterSet &filterParameters,
+ RichParameterSet &filterParameters,
QWidget *parentWidget, bool confirm)
{
vcg::Matrix44f result;
diff --git a/src/meshlabplugins/filter_clean/align_tools.h b/src/meshlabplugins/filter_clean/align_tools.h
index dfb4945a6..d2a0a80fa 100644
--- a/src/meshlabplugins/filter_clean/align_tools.h
+++ b/src/meshlabplugins/filter_clean/align_tools.h
@@ -19,66 +19,66 @@
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt) *
* for more details. *
* *
-****************************************************************************/
-
-/*
- * This class will will hold useful things for doing alignment of meshes
- *
- * @author Oscar Barney
- *
- */
-
-#ifndef ALIGN_TOOLS_H
-#define ALIGN_TOOLS_H
-
-#include
-
-#include
-#include
-#include
-
-#include
-#include
-
-class AlignTools : public QObject
-{
- Q_OBJECT
-
-public:
- static const QString FilterName;
- static const QString UseMarkers;
- static const QString AllowScaling;
- static const QString UseICP;
- static const QString StuckMesh;
- static const QString MeshToMove;
-
- //make the default parameter set for this filter
- static void buildParameterSet(FilterParameterSet & parlst);
-
- //setup all the parameters and then call align
- static bool setupThenAlign(MeshModel &mm, FilterParameterSet & par);
-
- /*
- * stuckModel - the mesh one that stays put
- * modelToMove - the mesh to be moved into place
- * modelToMoveGLArea - so we can update the position of the model
- * parentWidget - the widget that should be the parent of the confirm dialog window
- * confirm - whether to ask the user if they want the alignment to stay put
- *
- * return value - true if align was accepted or successful
- */
- static bool align(MeshModel *stuckModel, PickedPoints *stuckPickedPoints,
- MeshModel *modelToMove, PickedPoints *modelToMovePickedPoints,
- GLArea *modelToMoveGLArea,
- FilterParameterSet ¶meters,
- QWidget *parentWidget = 0, bool confirm = false);
-
- //returns the key applied if this transform is stored to perMeshAttribute
- static const std::string getKey() { return "TransformAppliedKey"; }
-
-protected:
- AlignTools();
-
-};
-
-#endif
+****************************************************************************/
+
+/*
+ * This class will will hold useful things for doing alignment of meshes
+ *
+ * @author Oscar Barney
+ *
+ */
+
+#ifndef ALIGN_TOOLS_H
+#define ALIGN_TOOLS_H
+
+#include
+
+#include
+#include
+#include
+
+#include
+#include
+
+class AlignTools : public QObject
+{
+ Q_OBJECT
+
+public:
+ static const QString FilterName;
+ static const QString UseMarkers;
+ static const QString AllowScaling;
+ static const QString UseICP;
+ static const QString StuckMesh;
+ static const QString MeshToMove;
+
+ //make the default parameter set for this filter
+ static void buildParameterSet(MeshDocument &md,RichParameterSet & parlst);
+
+ //setup all the parameters and then call align
+ static bool setupThenAlign(MeshModel &mm, RichParameterSet & par);
+
+ /*
+ * stuckModel - the mesh one that stays put
+ * modelToMove - the mesh to be moved into place
+ * modelToMoveGLArea - so we can update the position of the model
+ * parentWidget - the widget that should be the parent of the confirm dialog window
+ * confirm - whether to ask the user if they want the alignment to stay put
+ *
+ * return value - true if align was accepted or successful
+ */
+ static bool align(MeshModel *stuckModel, PickedPoints *stuckPickedPoints,
+ MeshModel *modelToMove, PickedPoints *modelToMovePickedPoints,
+ GLArea *modelToMoveGLArea,
+ RichParameterSet ¶meters,
+ QWidget *parentWidget = 0, bool confirm = false);
+
+ //returns the key applied if this transform is stored to perMeshAttribute
+ static const std::string getKey() { return "TransformAppliedKey"; }
+
+protected:
+ AlignTools();
+
+};
+
+#endif
diff --git a/src/meshlabplugins/filter_clean/cleanfilter.cpp b/src/meshlabplugins/filter_clean/cleanfilter.cpp
index ba8969aaa..f6c58a589 100644
--- a/src/meshlabplugins/filter_clean/cleanfilter.cpp
+++ b/src/meshlabplugins/filter_clean/cleanfilter.cpp
@@ -232,62 +232,63 @@ const int CleanFilter::getRequirements(QAction *action)
}
-void CleanFilter::initParameterSet(QAction *action,MeshModel &m, FilterParameterSet & parlst)
+void CleanFilter::initParameterSet(QAction *action,MeshDocument &md, RichParameterSet & parlst)
{
pair qualityRange;
switch(ID(action))
{
case FP_BALL_PIVOTING :
- parlst.addAbsPerc("BallRadius",(float)maxDiag1,0,m.cm.bbox.Diag(),"Pivoting Ball radius (0 autoguess)","The radius of the ball pivoting (rolling) over the set of points. Gaps that are larger than the ball radius will not be filled; similarly the small pits that are smaller than the ball radius will be filled.");
- parlst.addFloat("Clustering",20.0f,"Clustering radius (% of ball radius)","To avoid the creation of too small triangles, if a vertex is found too close to a previous one, it is clustered/merged with it."); parlst.addFloat("CreaseThr", 90.0f,"Angle Threshold (degrees)","If we encounter a crease angle that is too large we should stop the ball rolling");
- parlst.addBool("DeleteFaces",false,"Delete intial set of faces","if true all the initial faces of the mesh are deleted and the whole surface is rebuilt from scratch, other wise the current faces are used as a starting point. Useful if you run multiple times the algorithm with an incrasing ball radius.");
+ parlst.addParam(new RichAbsPerc("BallRadius",(float)maxDiag1,0,md.mm()->cm.bbox.Diag(),"Pivoting Ball radius (0 autoguess)","The radius of the ball pivoting (rolling) over the set of points. Gaps that are larger than the ball radius will not be filled; similarly the small pits that are smaller than the ball radius will be filled."));
+ parlst.addParam(new RichFloat("Clustering",20.0f,"Clustering radius (% of ball radius)","To avoid the creation of too small triangles, if a vertex is found too close to a previous one, it is clustered/merged with it."));
+ parlst.addParam(new RichFloat("CreaseThr", 90.0f,"Angle Threshold (degrees)","If we encounter a crease angle that is too large we should stop the ball rolling"));
+ parlst.addParam(new RichBool("DeleteFaces",false,"Delete intial set of faces","if true all the initial faces of the mesh are deleted and the whole surface is rebuilt from scratch, other wise the current faces are used as a starting point. Useful if you run multiple times the algorithm with an incrasing ball radius."));
break;
case FP_REMOVE_ISOLATED_DIAMETER:
- parlst.addAbsPerc("MinComponentDiag",m.cm.bbox.Diag()/10.0,0,m.cm.bbox.Diag(),"Enter max diameter of isolated pieces","Delete all the connected components (floating pieces) with a diameter smaller than the specified one");
+ parlst.addParam(new RichAbsPerc("MinComponentDiag",md.mm()->cm.bbox.Diag()/10.0,0,md.mm()->cm.bbox.Diag(),"Enter max diameter of isolated pieces","Delete all the connected components (floating pieces) with a diameter smaller than the specified one"));
break;
case FP_REMOVE_ISOLATED_COMPLEXITY:
- parlst.addInt("MinComponentSize",(int)minCC,"Enter minimum conn. comp size:","Delete all the connected components (floating pieces) composed by a number of triangles smaller than the specified one");
+ parlst.addParam(new RichInt("MinComponentSize",(int)minCC,"Enter minimum conn. comp size:","Delete all the connected components (floating pieces) composed by a number of triangles smaller than the specified one"));
break;
case FP_REMOVE_WRT_Q:
- qualityRange=tri::Stat::ComputePerVertexQualityMinMax(m.cm);
- parlst.addAbsPerc("MaxQualityThr",(float)val1, qualityRange.first, qualityRange.second,"Delete all vertices with quality under:");
+ qualityRange=tri::Stat::ComputePerVertexQualityMinMax(md.mm()->cm);
+ parlst.addParam(new RichAbsPerc("MaxQualityThr",(float)val1, qualityRange.first, qualityRange.second,"Delete all vertices with quality under:"));
break;
case FP_ALIGN_WITH_PICKED_POINTS :
- AlignTools::buildParameterSet(parlst);
+ AlignTools::buildParameterSet(md,parlst);
break;
case FP_SELECTBYANGLE :
{
- parlst.addDynamicFloat("anglelimit",
+ parlst.addParam(new RichDynamicFloat("anglelimit",
75.0f, 0.0f, 180.0f,
"angle threshold (deg)",
- "faces with normal at higher angle w.r.t. the view direction are selected");
- parlst.addBool ("usecamera",
+ "faces with normal at higher angle w.r.t. the view direction are selected"));
+ parlst.addParam(new RichBool ("usecamera",
false,
"Use ViewPoint from Mesh Camera",
- "Uses the ViewPoint from the camera associated to the current mesh\n if there is no camera, an error occurs");
- parlst.addPoint3f("viewpoint",
+ "Uses the ViewPoint from the camera associated to the current mesh\n if there is no camera, an error occurs"));
+ parlst.addParam(new RichPoint3f("viewpoint",
Point3f(0.0f, 0.0f, 0.0f),
"ViewPoint",
- "if UseCamera is true, this value is ignored");
+ "if UseCamera is true, this value is ignored"));
}
break;
case FP_MERGE_CLOSE_VERTEX :
- parlst.addAbsPerc("Threshold",m.cm.bbox.Diag()/10000.0,0,m.cm.bbox.Diag()/100.0,"Merging distance","All the vertices that closer than this threshold are merged toghether. Use very small values, default values is 1/10000 of bounding box diagonal. ");
+ parlst.addParam(new RichAbsPerc("Threshold",md.mm()->cm.bbox.Diag()/10000.0,0,md.mm()->cm.bbox.Diag()/100.0,"Merging distance","All the vertices that closer than this threshold are merged toghether. Use very small values, default values is 1/10000 of bounding box diagonal. "));
break;
case FP_REMOVE_TVERTEX_COLLAPSE :
case FP_REMOVE_TVERTEX_FLIP :
- parlst.addFloat(
- "Threshold", 40, "Ratio", "Detects faces where the base/height ratio is lower than this value");
- parlst.addBool(
- "Repeat", true, "Iterate until convergence", "Iterates the algorithm until it reaches convergence");
+ parlst.addParam(new RichFloat(
+ "Threshold", 40, "Ratio", "Detects faces where the base/height ratio is lower than this value"));
+ parlst.addParam(new RichBool(
+ "Repeat", true, "Iterate until convergence", "Iterates the algorithm until it reaches convergence"));
break;
default: assert(0);
}
}
-bool CleanFilter::applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & par, vcg::CallBackPos * cb)
+bool CleanFilter::applyFilter(QAction *filter, MeshModel &m, RichParameterSet & par, vcg::CallBackPos * cb)
{
switch(ID(filter))
{
diff --git a/src/meshlabplugins/filter_clean/cleanfilter.h b/src/meshlabplugins/filter_clean/cleanfilter.h
index eafb626bd..26dc27591 100644
--- a/src/meshlabplugins/filter_clean/cleanfilter.h
+++ b/src/meshlabplugins/filter_clean/cleanfilter.h
@@ -110,8 +110,8 @@ MeshFilterInterface::Remeshing;
virtual const int getRequirements(QAction *);
virtual bool autoDialog(QAction *);
- virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*parent*/);
- virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual void initParameterSet(QAction *,MeshDocument &/*m*/, RichParameterSet & /*parent*/);
+ virtual bool applyFilter(QAction *filter, MeshModel &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
};
diff --git a/src/meshlabplugins/filter_colorize/meshcolorize.cpp b/src/meshlabplugins/filter_colorize/meshcolorize.cpp
index 46b93205a..2d71a1805 100644
--- a/src/meshlabplugins/filter_colorize/meshcolorize.cpp
+++ b/src/meshlabplugins/filter_colorize/meshcolorize.cpp
@@ -151,19 +151,20 @@ const int ExtraMeshColorizePlugin::getRequirements(QAction *action)
}
-void ExtraMeshColorizePlugin::initParameterSet(QAction *a,MeshModel &m, FilterParameterSet & par) {
+void ExtraMeshColorizePlugin::initParameterSet(QAction *a,MeshModel &m, RichParameterSet & par) {
switch(ID(a))
{
case CP_FACE_SMOOTH:
case CP_VERTEX_SMOOTH:
- par.addInt("iteration",1,tr("Iteration"),tr("the number ofiteration of the smoothing algorithm"));
+ //par.addInt("iteration",1,tr("Iteration"),tr("the number ofiteration of the smoothing algorithm"));
+ par.addParam(new RichInt("iteration",1,tr("Iteration"),tr("the number ofiteration of the smoothing algorithm")));
break;
case CP_TRIANGLE_QUALITY: {
QStringList metrics;
metrics.push_back("area/max side");
metrics.push_back("inradius/circumradius");
metrics.push_back("mean ratio");
- par.addEnum("Metric", 0, metrics, tr("Metric:"), tr("Choose a metric to compute triangle quality."));
+ par.addParam(new RichEnum("Metric", 0, metrics, tr("Metric:"), tr("Choose a metric to compute triangle quality.")));
break;
}
case CP_DISCRETE_CURVATURE: {
@@ -172,19 +173,18 @@ void ExtraMeshColorizePlugin::initParameterSet(QAction *a,MeshModel &m, FilterPa
curvNameList.push_back("Gaussian Curvature");
curvNameList.push_back("RMS Curvature");
curvNameList.push_back("ABS Curvature");
- par.addEnum("CurvatureType", 0, curvNameList, tr("Type:"), tr("Choose the curvatures. Mean and Gaussian curvature are computed according the technique described in the Desbrun et al. paper.
"
- "Absolute curvature is defined as |H|+|K| and RMS curvature as sqrt(4* H^2 - 2K) as explained in
Improved curvature estimation for watershed segmentation of 3-dimensional meshes by S. Pulla, A. Razdan, G. Farin. "));
+ par.addParam(new RichEnum("CurvatureType", 0, curvNameList, tr("Type:"), tr("Choose the curvatures. Mean and Gaussian curvature are computed according the technique described in the Desbrun et al. paper.
"
+ "Absolute curvature is defined as |H|+|K| and RMS curvature as sqrt(4* H^2 - 2K) as explained in
Improved curvature estimation for watershed segmentation of 3-dimensional meshes by S. Pulla, A. Razdan, G. Farin. ")));
break;
}
case CP_MAP_QUALITY_INTO_COLOR :
{
pair minmax = tri::Stat::ComputePerVertexQualityMinMax(m.cm);
- par.addFloat("minVal",minmax.first,"Min","The value that will be mapped with the lower end of the scale (blue)");
- par.addFloat("maxVal",minmax.second,"Max","The value that will be mapped with the upper end of the scale (red)");
- par.addDynamicFloat("perc",0,0,100,"Percentile Crop [0..100]","If not zero this value will be used for a percentile cropping of the quality values.
If this parameter is set to P the value V for which P% of the vertices have a quality lower(greater) than V is used as min (max) value.
The automated percentile cropping is very useful for automatically discarding outliers.");
- par.addBool("zeroSym",false,"Zero Simmetric","If true the min max range will be enlarged to be symmertic (so that green is always Zero)");
-
+ par.addParam(new RichFloat("minVal",minmax.first,"Min","The value that will be mapped with the lower end of the scale (blue)"));
+ par.addParam(new RichFloat("maxVal",minmax.second,"Max","The value that will be mapped with the upper end of the scale (red)"));
+ par.addParam(new RichDynamicFloat("perc",0,0,100,"Percentile Crop [0..100]","If not zero this value will be used for a percentile cropping of the quality values.
If this parameter is set to P the value V for which P% of the vertices have a quality lower(greater) than V is used as min (max) value.
The automated percentile cropping is very useful for automatically discarding outliers."));
+ par.addParam(new RichBool("zeroSym",false,"Zero Simmetric","If true the min max range will be enlarged to be symmertic (so that green is always Zero)"));
}
break;
@@ -192,7 +192,7 @@ void ExtraMeshColorizePlugin::initParameterSet(QAction *a,MeshModel &m, FilterPa
}
}
-bool ExtraMeshColorizePlugin::applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & par, vcg::CallBackPos *cb)
+bool ExtraMeshColorizePlugin::applyFilter(QAction *filter, MeshModel &m, RichParameterSet & par, vcg::CallBackPos *cb)
{
switch(ID(filter)) {
case CP_MAP_QUALITY_INTO_COLOR :
diff --git a/src/meshlabplugins/filter_colorize/meshcolorize.h b/src/meshlabplugins/filter_colorize/meshcolorize.h
index defc31bd5..6b4a5d0ed 100644
--- a/src/meshlabplugins/filter_colorize/meshcolorize.h
+++ b/src/meshlabplugins/filter_colorize/meshcolorize.h
@@ -127,9 +127,9 @@ public:
virtual const FilterClass getClass(QAction *);
virtual bool autoDialog(QAction *);
- virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*parent*/);
+ virtual void initParameterSet(QAction *,MeshModel &/*m*/, RichParameterSet & /*parent*/);
virtual const int getRequirements(QAction *);
- virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual bool applyFilter(QAction *filter, MeshModel &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
};
diff --git a/src/meshlabplugins/filter_create/filter_create.cpp b/src/meshlabplugins/filter_create/filter_create.cpp
index 60cf7d721..dc02cad15 100644
--- a/src/meshlabplugins/filter_create/filter_create.cpp
+++ b/src/meshlabplugins/filter_create/filter_create.cpp
@@ -81,17 +81,17 @@ const QString FilterCreate::filterInfo(FilterIDType filterId) const
// - the string shown in the dialog
// - the default value
// - a possibly long string describing the meaning of that parameter (shown as a popup help in the dialog)
-void FilterCreate::initParameterSet(QAction *action,MeshModel &m, FilterParameterSet & parlst)
+void FilterCreate::initParameterSet(QAction *action,MeshModel &m, RichParameterSet & parlst)
{
switch(ID(action)) {
case CR_BOX :
- parlst.addFloat("size",1,"Scale factor","Scales the new mesh");
+ parlst.addParam(new RichFloat("size",1,"Scale factor","Scales the new mesh"));
break;
case CR_CONE:
- parlst.addFloat("r0",1,"Radius 1","Radius of the bottom circumference");
- parlst.addFloat("r1",2,"Radius 2","Radius of the top circumference");
- parlst.addFloat("h",3,"Height","Height of the Cone");
+ parlst.addParam(new RichFloat("r0",1,"Radius 1","Radius of the bottom circumference"));
+ parlst.addParam(new RichFloat("r1",2,"Radius 2","Radius of the top circumference"));
+ parlst.addParam(new RichFloat("h",3,"Height","Height of the Cone"));
break;
default : return;
}
@@ -99,7 +99,7 @@ void FilterCreate::initParameterSet(QAction *action,MeshModel &m, FilterParamete
// The Real Core Function doing the actual mesh processing.
// Move Vertex of a random quantity
-bool FilterCreate::applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & par, vcg::CallBackPos *cb)
+bool FilterCreate::applyFilter(QAction *filter, MeshModel &m, RichParameterSet & par, vcg::CallBackPos *cb)
{
switch(ID(filter)) {
case CR_TETRAHEDRON :
diff --git a/src/meshlabplugins/filter_create/filter_create.h b/src/meshlabplugins/filter_create/filter_create.h
index 7173dfb2e..d9664d1a8 100644
--- a/src/meshlabplugins/filter_create/filter_create.h
+++ b/src/meshlabplugins/filter_create/filter_create.h
@@ -43,8 +43,8 @@ public:
virtual const QString filterInfo(FilterIDType filter) const;
virtual const FilterClass getClass(QAction *);
virtual bool autoDialog(QAction *);
- virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*parent*/);
- virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual void initParameterSet(QAction *,MeshModel &/*m*/, RichParameterSet & /*parent*/);
+ virtual bool applyFilter(QAction *filter, MeshModel &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
virtual const int getRequirements(QAction *action);
};
diff --git a/src/meshlabplugins/filter_isoparametrization/filter_isoparametrization.cpp b/src/meshlabplugins/filter_isoparametrization/filter_isoparametrization.cpp
index 58e7e6321..84aff88a5 100644
--- a/src/meshlabplugins/filter_isoparametrization/filter_isoparametrization.cpp
+++ b/src/meshlabplugins/filter_isoparametrization/filter_isoparametrization.cpp
@@ -97,40 +97,40 @@ const int FilterIsoParametrization::getRequirements(QAction *action)
return MeshModel::MM_UNKNOWN;
}
-void FilterIsoParametrization::initParameterSet(QAction *a, MeshDocument& /*md*/, FilterParameterSet & par)
+void FilterIsoParametrization::initParameterSet(QAction *a, MeshDocument& /*md*/, RichParameterSet & par)
{
switch(ID(a))
{
case ISOP_PARAM:
{
- par.addInt("targetAbstractMinFaceNum",100,"Abstract Min Mesh Size",
+ par.addParam(new RichInt("targetAbstractMinFaceNum",100,"Abstract Min Mesh Size",
"This number and the following one indicate the range face number of the abstract mesh that is used for the parametrization process.
"
"The algorithm will choose the abstract mesh with the best number of triangles within the specified interval.
"
"If the mesh has a very simple structure this range can be very low and strict;"
"for a roughly spherical object if you specify a range of [8,8] faces you get a octahedral abstract mesh, e.g. a geometry image.
"
- "Large numbers (greater than 400) are usually not of practical use.");
- par.addInt("targetAbstractMaxFaceNum",200,"Abstract Max Mesh Size", "See above.");
+ "Large numbers (greater than 400) are usually not of practical use."));
+ par.addParam(new RichInt("targetAbstractMaxFaceNum",200,"Abstract Max Mesh Size", "See above."));
QStringList stopCriteriaList;
stopCriteriaList.push_back("Best Heuristic");
stopCriteriaList.push_back("Area + Angle");
stopCriteriaList.push_back("Regularity");
stopCriteriaList.push_back("L2");
- par.addEnum("stopCriteria", 0, stopCriteriaList, tr("Optimization Criteria"),
+ par.addParam(new RichEnum("stopCriteria", 0, stopCriteriaList, tr("Optimization Criteria"),
tr(""
"Choose a metric to stop the parametrization within the interval
"
"1: Best Heuristic : stop considering both isometry and number of faces of base domain
"
"2: Area + Angle : stop at minimum area and angle distorsion
"
"3: Regularity : stop at minimum number of irregular vertices
"
- "4: L2 : stop at minimum OneWay L2 Stretch Eff"));
+ "4: L2 : stop at minimum OneWay L2 Stretch Eff")));
- //par.addDynamicFloat("convergenceSpeed", 1, 1,4, "Convergence Speed", "This parameter controls the convergence speed/precision of the optimization of the texture coordinates. Larger the number slower the processing and ,eventually, slighly better results");
- par.addInt("convergenceSpeed",2, "Convergence Speed", "This parameter controls the convergence speed/precision of the optimization of the texture coordinates. Larger the number slower the processing and ,eventually, slighly better results");
+ //par.addParam(new RichDynamicFloat("convergenceSpeed", 1, 1,4, "Convergence Speed", "This parameter controls the convergence speed/precision of the optimization of the texture coordinates. Larger the number slower the processing and ,eventually, slighly better results");
+ par.addParam(new RichInt("convergenceSpeed",2, "Convergence Speed", "This parameter controls the convergence speed/precision of the optimization of the texture coordinates. Larger the number slower the processing and ,eventually, slighly better results"));
break;
}
case ISOP_REMESHING :
- par.addInt("SamplingRate",10,"Sampling Rate", "This specify the sampling rate for remeshing.");
+ par.addParam(new RichInt("SamplingRate",10,"Sampling Rate", "This specify the sampling rate for remeshing."));
break;
}
@@ -191,7 +191,7 @@ void FilterIsoParametrization::PrintStats(CMeshO *mesh)
Log("stdDev Edge:%d",stdEi);
}
-bool FilterIsoParametrization::applyFilter(QAction *filter, MeshDocument& md, FilterParameterSet & par, vcg::CallBackPos *cb)
+bool FilterIsoParametrization::applyFilter(QAction *filter, MeshDocument& md, RichParameterSet & par, vcg::CallBackPos *cb)
{
(void) par;
MeshModel* m = md.mm(); //get current mesh from document
diff --git a/src/meshlabplugins/filter_isoparametrization/filter_isoparametrization.h b/src/meshlabplugins/filter_isoparametrization/filter_isoparametrization.h
index 92ab38e57..10d56681a 100644
--- a/src/meshlabplugins/filter_isoparametrization/filter_isoparametrization.h
+++ b/src/meshlabplugins/filter_isoparametrization/filter_isoparametrization.h
@@ -61,9 +61,9 @@ class FilterIsoParametrization : public QObject, public MeshFilterInterface
virtual const int getRequirements(QAction *);
virtual bool autoDialog(QAction *);
- virtual void initParameterSet(QAction *,MeshDocument&, FilterParameterSet & /*parent*/);
- virtual bool applyFilter(QAction *filter, MeshDocument&, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb);
- virtual bool applyFilter(QAction *, MeshModel &, FilterParameterSet & , vcg::CallBackPos *) { assert(0); return false;}
+ virtual void initParameterSet(QAction *,MeshDocument&, RichParameterSet & /*parent*/);
+ virtual bool applyFilter(QAction *filter, MeshDocument&, RichParameterSet & /*parent*/, vcg::CallBackPos * cb);
+ virtual bool applyFilter(QAction *, MeshModel &, RichParameterSet & , vcg::CallBackPos *) { assert(0); return false;}
int postCondition(QAction* filter) const;
int getPreConditions(QAction *) const;
void PrintStats(CMeshO *mesh);
diff --git a/src/meshlabplugins/filter_meshing/meshfilter.cpp b/src/meshlabplugins/filter_meshing/meshfilter.cpp
index 83cbb0961..9ea89614b 100644
--- a/src/meshlabplugins/filter_meshing/meshfilter.cpp
+++ b/src/meshlabplugins/filter_meshing/meshfilter.cpp
@@ -240,7 +240,8 @@ const int ExtraMeshFilterPlugin::getRequirements(QAction *action)
// return
// true if has some parameters
// false is has no params
-void ExtraMeshFilterPlugin::initParameterSet(QAction *action, MeshModel &m, FilterParameterSet &parlst)
+
+void ExtraMeshFilterPlugin::initParameterSet(QAction *action, MeshModel &m, RichParameterSet &parlst)
{
float maxVal;
QStringList methods;
@@ -250,63 +251,63 @@ void ExtraMeshFilterPlugin::initParameterSet(QAction *action, MeshModel &m, Filt
methods.push_back("Taubin approximation");
methods.push_back("Principal Component Analysis");
methods.push_back("Normal Cycles");
- parlst.addEnum("Method", 0, methods, tr("Method:"), tr("Choose a method"));
- parlst.addBool("Autoclean",true,QString("Remove Unreferenced Vertices"));
+ parlst.addParam(new RichEnum("Method", 0, methods, tr("Method:"), tr("Choose a method")));
+ parlst.addParam(new RichBool("Autoclean",true,QString("Remove Unreferenced Vertices")));
break;
case FP_QUADRIC_SIMPLIFICATION:
- parlst.addInt ("TargetFaceNum", (m.cm.sfn>0) ? m.cm.sfn/2 : m.cm.fn/2,"Target number of faces", "The desired final number of faces.");
- parlst.addFloat("TargetPerc", 0,"Percentage reduction (0..1)", "If non zero, this parameter specifies the desired final size of the mesh as a percentage of the initial size.");
- parlst.addFloat("QualityThr",lastq_QualityThr,"Quality threshold","Quality threshold for penalizing bad shaped faces.
The value is in the range [0..1]\n 0 accept any kind of face (no penalties),\n 0.5 penalize faces with quality < 0.5, proportionally to their shape\n");
- parlst.addBool ("PreserveBoundary",lastq_PreserveBoundary,"Preserve Boundary of the mesh","The simplification process tries not to destroy mesh boundaries");
- parlst.addBool ("PreserveNormal",lastq_PreserveNormal,"Preserve Normal","Try to avoid face flipping effects and try to preserve the original orientation of the surface");
- parlst.addBool ("OptimalPlacement",lastq_OptimalPlacement,"Optimal position of simplified vertices","Each collapsed vertex is placed in the position minimizing the quadric error.\n It can fail (creating bad spikes) in case of very flat areas. \nIf disabled edges are collapsed onto one of the two original vertices and the final mesh is composed by a subset of the original vertices. ");
- parlst.addBool ("PlanarQuadric",lastq_PlanarQuadric,"Planar Simplification","Add additional simplification constraints that improves the quality of the simplification of the planar portion of the mesh.");
- parlst.addBool ("QualityWeight",lastq_QualityWeight,"Weighted Simplification","Use the Per-Vertex quality as a weighting factor for the simplification. The weight is used as a error amplification value, so a vertex with a high quality value will not be simplified and a portion of the mesh with low quality values will be aggressively simplified.");
- parlst.addBool ("AutoClean",true,"Post-simplification cleaning","After the simplification an additional set of steps is performed to clean the mesh (unreferenced vertices, bad faces, etc)");
- parlst.addBool ("Selected",m.cm.sfn>0,"Simplify only selected faces","The simplification is applied only to the selected set of faces.\n Take care of the target number of faces!");
+ parlst.addParam(new RichInt ("TargetFaceNum", (m.cm.sfn>0) ? m.cm.sfn/2 : m.cm.fn/2,"Target number of faces", "The desired final number of faces."));
+ parlst.addParam(new RichFloat("TargetPerc", 0,"Percentage reduction (0..1)", "If non zero, this parameter specifies the desired final size of the mesh as a percentage of the initial size."));
+ parlst.addParam(new RichFloat("QualityThr",lastq_QualityThr,"Quality threshold","Quality threshold for penalizing bad shaped faces.
The value is in the range [0..1]\n 0 accept any kind of face (no penalties),\n 0.5 penalize faces with quality < 0.5, proportionally to their shape\n"));
+ parlst.addParam(new RichBool ("PreserveBoundary",lastq_PreserveBoundary,"Preserve Boundary of the mesh","The simplification process tries not to destroy mesh boundaries"));
+ parlst.addParam(new RichBool ("PreserveNormal",lastq_PreserveNormal,"Preserve Normal","Try to avoid face flipping effects and try to preserve the original orientation of the surface"));
+ parlst.addParam(new RichBool ("OptimalPlacement",lastq_OptimalPlacement,"Optimal position of simplified vertices","Each collapsed vertex is placed in the position minimizing the quadric error.\n It can fail (creating bad spikes) in case of very flat areas. \nIf disabled edges are collapsed onto one of the two original vertices and the final mesh is composed by a subset of the original vertices. "));
+ parlst.addParam(new RichBool ("PlanarQuadric",lastq_PlanarQuadric,"Planar Simplification","Add additional simplification constraints that improves the quality of the simplification of the planar portion of the mesh."));
+ parlst.addParam(new RichBool ("QualityWeight",lastq_QualityWeight,"Weighted Simplification","Use the Per-Vertex quality as a weighting factor for the simplification. The weight is used as a error amplification value, so a vertex with a high quality value will not be simplified and a portion of the mesh with low quality values will be aggressively simplified."));
+ parlst.addParam(new RichBool ("AutoClean",true,"Post-simplification cleaning","After the simplification an additional set of steps is performed to clean the mesh (unreferenced vertices, bad faces, etc)"));
+ parlst.addParam(new RichBool ("Selected",m.cm.sfn>0,"Simplify only selected faces","The simplification is applied only to the selected set of faces.\n Take care of the target number of faces!"));
break;
case FP_QUADRIC_TEXCOORD_SIMPLIFICATION:
- parlst.addInt ("TargetFaceNum", (m.cm.sfn>0) ? m.cm.sfn/2 : m.cm.fn/2,"Target number of faces");
- parlst.addFloat("TargetPerc", 0,"Percentage reduction (0..1)", "If non zero, this parameter specifies the desired final size of the mesh as a percentage of the initial mesh.");
- parlst.addFloat("QualityThr",lastqtex_QualityThr,"Quality threshold","Quality threshold for penalizing bad shaped faces.
The value is in the range [0..1]\n 0 accept any kind of face (no penalties),\n 0.5 penalize faces with quality < 0.5, proportionally to their shape\n");
- parlst.addFloat("Extratcoordw",lastqtex_extratw,"Texture Weight","Additional weight for each extra Texture Coordinates for every (selected) vertex");
- parlst.addBool ("PreserveBoundary",lastq_PreserveBoundary,"Preserve Boundary of the mesh","The simplification process tries not to destroy mesh boundaries");
- parlst.addBool ("OptimalPlacement",lastq_OptimalPlacement,"Optimal position of simplified vertices","Each collapsed vertex is placed in the position minimizing the quadric error.\n It can fail (creating bad spikes) in case of very flat areas. \nIf disabled edges are collapsed onto one of the two original vertices and the final mesh is composed by a subset of the original vertices. ");
- parlst.addBool ("PreserveNormal",lastq_PreserveNormal,"Preserve Normal","Try to avoid face flipping effects and try to preserve the original orientation of the surface");
- parlst.addBool ("PlanarQuadric",lastq_PlanarQuadric,"Planar Simplification","Add additional simplification constraints that improves the quality of the simplification of the planar portion of the mesh.");
- parlst.addBool ("Selected",m.cm.sfn>0,"Simplify only selected faces","The simplification is applied only to the selected set of faces.\n Take care of the target number of faces!");
+ parlst.addParam(new RichInt ("TargetFaceNum", (m.cm.sfn>0) ? m.cm.sfn/2 : m.cm.fn/2,"Target number of faces"));
+ parlst.addParam(new RichFloat("TargetPerc", 0,"Percentage reduction (0..1)", "If non zero, this parameter specifies the desired final size of the mesh as a percentage of the initial mesh."));
+ parlst.addParam(new RichFloat("QualityThr",lastqtex_QualityThr,"Quality threshold","Quality threshold for penalizing bad shaped faces.
The value is in the range [0..1]\n 0 accept any kind of face (no penalties),\n 0.5 penalize faces with quality < 0.5, proportionally to their shape\n"));
+ parlst.addParam(new RichFloat("Extratcoordw",lastqtex_extratw,"Texture Weight","Additional weight for each extra Texture Coordinates for every (selected) vertex"));
+ parlst.addParam(new RichBool ("PreserveBoundary",lastq_PreserveBoundary,"Preserve Boundary of the mesh","The simplification process tries not to destroy mesh boundaries"));
+ parlst.addParam(new RichBool ("OptimalPlacement",lastq_OptimalPlacement,"Optimal position of simplified vertices","Each collapsed vertex is placed in the position minimizing the quadric error.\n It can fail (creating bad spikes) in case of very flat areas. \nIf disabled edges are collapsed onto one of the two original vertices and the final mesh is composed by a subset of the original vertices. "));
+ parlst.addParam(new RichBool ("PreserveNormal",lastq_PreserveNormal,"Preserve Normal","Try to avoid face flipping effects and try to preserve the original orientation of the surface"));
+ parlst.addParam(new RichBool ("PlanarQuadric",lastq_PlanarQuadric,"Planar Simplification","Add additional simplification constraints that improves the quality of the simplification of the planar portion of the mesh."));
+ parlst.addParam(new RichBool ("Selected",m.cm.sfn>0,"Simplify only selected faces","The simplification is applied only to the selected set of faces.\n Take care of the target number of faces!"));
break;
case FP_CLOSE_HOLES:
- parlst.addInt ("MaxHoleSize",(int)30,"Max size to be closed ","The size is expressed as number of edges composing the hole boundary");
- parlst.addBool("Selected",m.cm.sfn>0,"Close holes with selected faces","Only the holes with at least one of the boundary faces selected are closed");
- parlst.addBool("NewFaceSelected",true,"Select the newly created faces","After closing a hole the faces that have been created are left selected. Any previous selection is lost. Useful for example for smoothing the newly created holes.");
- parlst.addBool("SelfIntersection",true,"Prevent creation of selfIntersecting faces","When closing an holes it tries to prevent the creation of faces that intersect faces adjacent to the boundary of the hole. It is an heuristic, non intersetcting hole filling can be NP-complete.");
+ parlst.addParam(new RichInt ("MaxHoleSize",(int)30,"Max size to be closed ","The size is expressed as number of edges composing the hole boundary"));
+ parlst.addParam(new RichBool("Selected",m.cm.sfn>0,"Close holes with selected faces","Only the holes with at least one of the boundary faces selected are closed"));
+ parlst.addParam(new RichBool("NewFaceSelected",true,"Select the newly created faces","After closing a hole the faces that have been created are left selected. Any previous selection is lost. Useful for example for smoothing the newly created holes."));
+ parlst.addParam(new RichBool("SelfIntersection",true,"Prevent creation of selfIntersecting faces","When closing an holes it tries to prevent the creation of faces that intersect faces adjacent to the boundary of the hole. It is an heuristic, non intersetcting hole filling can be NP-complete."));
break;
case FP_LOOP_SS:
case FP_BUTTERFLY_SS:
case FP_MIDPOINT:
maxVal = m.cm.bbox.Diag();
- parlst.addAbsPerc("Threshold",maxVal*0.01,0,maxVal,"Edge Threshold", "All the edges longer than this threshold will be refined.
Setting this value to zero will force an uniform refinement.");
- parlst.addBool ("Selected",m.cm.sfn>0,"Affect only selected faces");
+ parlst.addParam(new RichAbsPerc("Threshold",maxVal*0.01,0,maxVal,"Edge Threshold", "All the edges longer than this threshold will be refined.
Setting this value to zero will force an uniform refinement."));
+ parlst.addParam(new RichBool ("Selected",m.cm.sfn>0,"Affect only selected faces"));
break;
case FP_REMOVE_FACES_BY_EDGE:
maxVal = m.cm.bbox.Diag();
- parlst.addAbsPerc("Threshold",maxVal*0.01,0,maxVal,"Edge Threshold", "All the faces with an edge longer than this threshold will be deleted. Useful for removing long skinny faces obtained by bad triangulation of range maps.");
- parlst.addBool ("Selected",m.cm.sfn>0,"Affect only selected faces");
+ parlst.addParam(new RichAbsPerc("Threshold",maxVal*0.01,0,maxVal,"Edge Threshold", "All the faces with an edge longer than this threshold will be deleted. Useful for removing long skinny faces obtained by bad triangulation of range maps."));
+ parlst.addParam(new RichBool ("Selected",m.cm.sfn>0,"Affect only selected faces"));
break;
case FP_CLUSTERING:
maxVal = m.cm.bbox.Diag();
- parlst.addAbsPerc("Threshold",maxVal*0.01,0,maxVal,"Cell Size", "The size of the cell of the clustering grid. Smaller the cell finer the resulting mesh. For obtaining a very coarse mesh use larger values.");
- parlst.addBool ("Selected",m.cm.sfn>0,"Affect only selected faces");
+ parlst.addParam(new RichAbsPerc("Threshold",maxVal*0.01,0,maxVal,"Cell Size", "The size of the cell of the clustering grid. Smaller the cell finer the resulting mesh. For obtaining a very coarse mesh use larger values."));
+ parlst.addParam(new RichBool ("Selected",m.cm.sfn>0,"Affect only selected faces"));
break;
case FP_CYLINDER_UNWRAP:
- parlst.addFloat("startAngle", 0,"Start angle (deg)", "The starting angle of the unrolling process.");
- parlst.addFloat("endAngle",360,"End angle (deg)","The ending angle of the unrolling process. Quality threshold for penalizing bad shaped faces.
The value is in the range [0..1]\n 0 accept any kind of face (no penalties),\n 0.5 penalize faces with quality < 0.5, proportionally to their shape\n");
- parlst.addFloat("radius", 0,"Projection Radius", "If non zero, this parameter specifies the desired radius of the reference cylinder used for the projection. Changing this parameter affect the X horizontal scaling of the resulting mesh. If zero (default) the average distance of the mesh from the axis is chosen.");
+ parlst.addParam(new RichFloat("startAngle", 0,"Start angle (deg)", "The starting angle of the unrolling process."));
+ parlst.addParam(new RichFloat("endAngle",360,"End angle (deg)","The ending angle of the unrolling process. Quality threshold for penalizing bad shaped faces.
The value is in the range [0..1]\n 0 accept any kind of face (no penalties),\n 0.5 penalize faces with quality < 0.5, proportionally to their shape\n"));
+ parlst.addParam(new RichFloat("radius", 0,"Projection Radius", "If non zero, this parameter specifies the desired radius of the reference cylinder used for the projection. Changing this parameter affect the X horizontal scaling of the resulting mesh. If zero (default) the average distance of the mesh from the axis is chosen."));
break;
case FP_NORMAL_EXTRAPOLATION:
- parlst.addInt ("K",(int)10,"Number of neigbors","The number of neighbors used to estimate and propagate normals.");
+ parlst.addParam(new RichInt ("K",(int)10,"Number of neigbors","The number of neighbors used to estimate and propagate normals."));
break;
}
}
@@ -346,7 +347,7 @@ bool ExtraMeshFilterPlugin::customDialog(QAction *action)
// It is called only for filters that have a not empty list of parameters and
// that do not use the autogenerated dialog, but want a personalized dialog.
-bool ExtraMeshFilterPlugin::getCustomParameters(QAction *action, QWidget * /*parent*/, MeshModel &m, FilterParameterSet & params, MainWindowInterface *mw)
+bool ExtraMeshFilterPlugin::getCustomParameters(QAction *action, QWidget * /*parent*/, MeshModel &m, RichParameterSet & params, MainWindowInterface *mw)
{
switch(ID(action))
{
@@ -363,7 +364,7 @@ bool ExtraMeshFilterPlugin::getCustomParameters(QAction *action, QWidget * /*par
return false;
Matrix44f matrixDlg = transformDialog->getTransformation();
- params.addMatrix44("Transform",matrixDlg);
+ params.addParam(new RichMatrix44f("Transform",matrixDlg));
mw->executeFilter(action,params, false);
break;
}
@@ -372,7 +373,7 @@ bool ExtraMeshFilterPlugin::getCustomParameters(QAction *action, QWidget * /*par
return true;
}
-bool ExtraMeshFilterPlugin::applyFilter(QAction *filter, MeshDocument &md, FilterParameterSet & par, vcg::CallBackPos *cb)
+bool ExtraMeshFilterPlugin::applyFilter(QAction *filter, MeshDocument &md, RichParameterSet & par, vcg::CallBackPos *cb)
{
MeshModel &m=*md.mm();
diff --git a/src/meshlabplugins/filter_meshing/meshfilter.h b/src/meshlabplugins/filter_meshing/meshfilter.h
index da71165e9..961285ae1 100644
--- a/src/meshlabplugins/filter_meshing/meshfilter.h
+++ b/src/meshlabplugins/filter_meshing/meshfilter.h
@@ -134,11 +134,11 @@ class ExtraMeshFilterPlugin : public QObject, public MeshFilterInterface
virtual bool autoDialog(QAction *) ;
virtual bool customDialog(QAction *filter);
- virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*parent*/);
- virtual bool getCustomParameters(QAction *action, QWidget * /*parent*/, MeshModel &/*m*/, FilterParameterSet & params, MainWindowInterface *mw);
+ virtual void initParameterSet(QAction *,MeshModel &/*m*/, RichParameterSet & /*parent*/);
+ virtual bool getCustomParameters(QAction *action, QWidget * /*parent*/, MeshModel &/*m*/, RichParameterSet & params, MainWindowInterface *mw);
virtual const int getRequirements(QAction *);
- virtual bool applyFilter(QAction *filter, MeshDocument &md, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
- virtual bool applyFilter(QAction */*filter*/, MeshModel &, FilterParameterSet & /*parent*/, vcg::CallBackPos *) { assert(0); return false;} ;
+ virtual bool applyFilter(QAction *filter, MeshDocument &md, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual bool applyFilter(QAction */*filter*/, MeshModel &, RichParameterSet & /*parent*/, vcg::CallBackPos *) { assert(0); return false;} ;
protected:
diff --git a/src/meshlabplugins/filter_meshing/transformDialog.cpp b/src/meshlabplugins/filter_meshing/transformDialog.cpp
index 7ccd9076a..95cc28aa1 100644
--- a/src/meshlabplugins/filter_meshing/transformDialog.cpp
+++ b/src/meshlabplugins/filter_meshing/transformDialog.cpp
@@ -384,8 +384,8 @@ void TransformDialog::on_applyButton_clicked() {
else matrix=matrix*currentMatrix;
Matrix44f matrixDlg = getTransformation();
- FilterParameterSet params;
- params.addMatrix44("Transform",matrixDlg);
+ RichParameterSet params;
+ params.addParam(new RichMatrix44f("Transform",matrixDlg));
curmwi->executeFilter(curact,params, false);
updateMatrixWidget();
// accept();
diff --git a/src/meshlabplugins/filter_mls/mlsplugin.cpp b/src/meshlabplugins/filter_mls/mlsplugin.cpp
index b24a27c51..525913c45 100644
--- a/src/meshlabplugins/filter_mls/mlsplugin.cpp
+++ b/src/meshlabplugins/filter_mls/mlsplugin.cpp
@@ -178,108 +178,108 @@ const QString MlsPlugin::filterInfo(FilterIDType filterId) const
// - the string shown in the dialog
// - the default value
// - a possibly long string describing the meaning of that parameter (shown as a popup help in the dialog)
-void MlsPlugin::initParameterSet(QAction* action, MeshDocument& md, FilterParameterSet& parlst)
-//void ExtraSamplePlugin::initParList(QAction *action, MeshModel &m, FilterParameterSet &parlst)
+void MlsPlugin::initParameterSet(QAction* action, MeshDocument& md, RichParameterSet& parlst)
+//void ExtraSamplePlugin::initParList(QAction *action, MeshModel &m, RichParameterSet &parlst)
{
int id = ID(action);
MeshModel *target = md.mm();
if (id == FP_SELECT_SMALL_COMPONENTS)
{
- parlst.addFloat("NbFaceRatio",
+ parlst.addParam(new RichFloat("NbFaceRatio",
0.1f,
"Small component ratio",
"This ratio (between 0 and 1) defines the meaning of small as the threshold ratio between the number of faces"
- "of the largest component and the other ones. A larger value will select more components.");
- parlst.addBool( "NonClosedOnly",
+ "of the largest component and the other ones. A larger value will select more components."));
+ parlst.addParam(new RichBool( "NonClosedOnly",
false,
"Select only non closed components",
- "");
+ ""));
return;
}
else if (id == FP_RADIUS_FROM_DENSITY)
{
- parlst.addInt("NbNeighbors",
+ parlst.addParam(new RichInt("NbNeighbors",
16,
"Number of neighbors",
- "Number of neighbors used to estimate the local density. Larger values lead to smoother variations.");
+ "Number of neighbors used to estimate the local density. Larger values lead to smoother variations."));
return;
}
if ((id & _PROJECTION_))
{
- parlst.addMesh( "ControlMesh", target, "Point set",
- "The point set (or mesh) which defines the MLS surface.");
- parlst.addMesh( "ProxyMesh", target, "Proxy Mesh",
- "The mesh that will be projected/resampled onto the MLS surface.");
+ parlst.addParam(new RichMesh( "ControlMesh", target,&md, "Point set",
+ "The point set (or mesh) which defines the MLS surface."));
+ parlst.addParam(new RichMesh( "ProxyMesh", target, &md, "Proxy Mesh",
+ "The mesh that will be projected/resampled onto the MLS surface."));
}
if ((id & _PROJECTION_) || (id & _COLORIZE_))
{
- parlst.addBool( "SelectionOnly",
+ parlst.addParam(new RichBool( "SelectionOnly",
target->cm.sfn>0,
"Selection only",
- "If checked, only selected vertices will be projected.");
+ "If checked, only selected vertices will be projected."));
}
if ( (id & _APSS_) || (id & _RIMLS_) )
{
- parlst.addFloat("FilterScale",
+ parlst.addParam(new RichFloat("FilterScale",
2.0,
"MLS - Filter scale",
"Scale of the spatial low pass filter.\n"
- "It is relative to the radius (local point spacing) of the vertices.");
- parlst.addFloat("ProjectionAccuracy",
+ "It is relative to the radius (local point spacing) of the vertices."));
+ parlst.addParam(new RichFloat("ProjectionAccuracy",
1e-4f,
"Projection - Accuracy (adv)",
"Threshold value used to stop the projections.\n"
- "This value is scaled by the mean point spacing to get the actual threshold.");
- parlst.addInt( "MaxProjectionIters",
+ "This value is scaled by the mean point spacing to get the actual threshold."));
+ parlst.addParam(new RichInt( "MaxProjectionIters",
15,
"Projection - Max iterations (adv)",
- "Max number of iterations for the projection.");
+ "Max number of iterations for the projection."));
}
if (id & _APSS_)
{
- parlst.addFloat("SphericalParameter",
+ parlst.addParam(new RichFloat("SphericalParameter",
1,
"MLS - Spherical parameter",
"Control the curvature of the fitted spheres: 0 is equivalent to a pure plane fit,"
"1 to a pure spherical fit, values between 0 and 1 gives intermediate results,"
"while others real values might give interresting results, but take care with extreme"
- "settings !");
+ "settings !"));
if (!(id & _COLORIZE_))
- parlst.addBool( "AccurateNormal",
+ parlst.addParam(new RichBool( "AccurateNormal",
true,
"Accurate normals",
"If checked, use the accurate MLS gradient instead of the local approximation"
- "to compute the normals.");
+ "to compute the normals."));
}
if (id & _RIMLS_)
{
- parlst.addFloat("SigmaN",
+ parlst.addParam(new RichFloat("SigmaN",
0.75,
"MLS - Sharpness",
"Width of the filter used by the normal refitting weight."
"This weight function is a Gaussian on the distance between two unit vectors:"
- "the current gradient and the input normal. Therefore, typical value range between 0.5 (sharp) to 2 (smooth).");
- parlst.addInt( "MaxRefittingIters",
+ "the current gradient and the input normal. Therefore, typical value range between 0.5 (sharp) to 2 (smooth)."));
+ parlst.addParam(new RichInt( "MaxRefittingIters",
3,
"MLS - Max fitting iterations",
- "Max number of fitting iterations. (0 or 1 is equivalent to the standard IMLS)");
+ "Max number of fitting iterations. (0 or 1 is equivalent to the standard IMLS)"));
}
if (id & _PROJECTION_)
{
- parlst.addInt( "MaxSubdivisions",
+ parlst.addParam(new RichInt( "MaxSubdivisions",
0,
"Refinement - Max subdivisions",
- "Max number of subdivisions.");
- parlst.addFloat("ThAngleInDegree",
+ "Max number of subdivisions."));
+ parlst.addParam(new RichFloat("ThAngleInDegree",
2,
"Refinement - Crease angle (degree)",
- "Threshold angle between two faces controlling the refinement.");
+ "Threshold angle between two faces controlling the refinement."));
}
if (id & _AFRONT_)
@@ -293,13 +293,13 @@ void MlsPlugin::initParameterSet(QAction* action, MeshDocument& md, FilterParame
if (id & _APSS_)
lst << "ApproxMean";
- parlst.addEnum("CurvatureType", CT_MEAN,
+ parlst.addParam(new RichEnum("CurvatureType", CT_MEAN,
lst,
"Curvature type",
QString("The type of the curvature to plot.")
- + ((id & _APSS_) ? "
ApproxMean uses the radius of the fitted sphere as an approximation of the mean curvature." : ""));
+ + ((id & _APSS_) ? "
ApproxMean uses the radius of the fitted sphere as an approximation of the mean curvature." : "")));
// if ((id & _APSS_))
-// parlst.addBool( "ApproxCurvature",
+// parlst.addParam(new RichBool( "ApproxCurvature",
// false,
// "Approx mean curvature",
// "If checked, use the radius of the fitted sphere as an approximation of the mean curvature.");
@@ -307,11 +307,11 @@ void MlsPlugin::initParameterSet(QAction* action, MeshDocument& md, FilterParame
if (id & _MCUBE_)
{
- parlst.addInt( "Resolution",
+ parlst.addParam(new RichInt( "Resolution",
200,
"Grid Resolution",
"The resolution of the grid on which we run the marching cubes."
- "This marching cube is memory friendly, so you can safely set large values up to 1000 or even more.");
+ "This marching cube is memory friendly, so you can safely set large values up to 1000 or even more."));
}
}
@@ -361,7 +361,7 @@ void UpdateFaceNormalFromVertex(MeshType& m)
}
}
-bool MlsPlugin::applyFilter(QAction* filter, MeshDocument& md, FilterParameterSet& par, vcg::CallBackPos* cb)
+bool MlsPlugin::applyFilter(QAction* filter, MeshDocument& md, RichParameterSet& par, vcg::CallBackPos* cb)
{
int id = ID(filter);
diff --git a/src/meshlabplugins/filter_mls/mlsplugin.h b/src/meshlabplugins/filter_mls/mlsplugin.h
index deaf826c8..ff8a81605 100644
--- a/src/meshlabplugins/filter_mls/mlsplugin.h
+++ b/src/meshlabplugins/filter_mls/mlsplugin.h
@@ -66,10 +66,10 @@ public:
virtual const QString filterInfo(FilterIDType filter) const;
const FilterClass getClass(QAction *a);
virtual bool autoDialog(QAction *) {return true;}
- virtual void initParameterSet(QAction *,MeshDocument &md, FilterParameterSet &parent);
+ virtual void initParameterSet(QAction *,MeshDocument &md, RichParameterSet &parent);
virtual const int getRequirements(QAction *action);
- virtual bool applyFilter(QAction *filter, MeshDocument &m, FilterParameterSet &parent, vcg::CallBackPos *cb) ;
- virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameterSet &parent, vcg::CallBackPos *cb)
+ virtual bool applyFilter(QAction *filter, MeshDocument &m, RichParameterSet &parent, vcg::CallBackPos *cb) ;
+ virtual bool applyFilter(QAction *filter, MeshModel &m, RichParameterSet &parent, vcg::CallBackPos *cb)
{assert(0); return false;}
};
diff --git a/src/meshlabplugins/filter_poisson/filter_poisson.cpp b/src/meshlabplugins/filter_poisson/filter_poisson.cpp
index fa9d25491..1b47cfe2a 100644
--- a/src/meshlabplugins/filter_poisson/filter_poisson.cpp
+++ b/src/meshlabplugins/filter_poisson/filter_poisson.cpp
@@ -99,44 +99,44 @@ const QString PoissonPlugin::filterInfo(FilterIDType filterId) const
// - the string shown in the dialog
// - the default value
// - a possibly long string describing the meaning of that parameter (shown as a popup help in the dialog)
-void PoissonPlugin::initParameterSet(QAction *action,MeshModel &m, FilterParameterSet & parlst)
-//void PoissonPlugin::initParList(QAction *action, MeshModel &m, FilterParameterSet &parlst)
+void PoissonPlugin::initParameterSet(QAction *action,MeshModel &m, RichParameterSet & parlst)
+//void PoissonPlugin::initParList(QAction *action, MeshModel &m, RichParameterSet &parlst)
{
switch(ID(action)) {
case FP_POISSON_RECON :
- //parlst.addBool ("RecomputeNormals",
+ //parlst.addParam(new RichBool ("RecomputeNormals",
// false,
// "Recompute normals",
// "Do not use the current normals, but recompute them from scratch considering the vertices of the mesh as an unstructured point cloud.");
- //parlst.addBool ("UseConfidence",
+ //parlst.addParam(new RichBool ("UseConfidence",
// true,
// "Use Quality",
// "Use the per vertex quality as a confidence value\n");
- parlst.addInt ("OctDepth",
+ parlst.addParam(new RichInt ("OctDepth",
6,
"Octree Depth",
- "Set the depth of the Octree used for extracting the final surface. Suggested range 5..10. Higher numbers mean higher precision in the reconstruction but also higher processing times. Be patient.\n");
- parlst.addInt ("SolverDivide",
+ "Set the depth of the Octree used for extracting the final surface. Suggested range 5..10. Higher numbers mean higher precision in the reconstruction but also higher processing times. Be patient.\n"));
+ parlst.addParam(new RichInt ("SolverDivide",
6,
"Solver Divide",
"This integer argument specifies the depth at which a block Gauss-Seidel solver is used to solve the Laplacian equation.\n"
"Using this parameter helps reduce the memory overhead at the cost of a small increase in reconstruction time. \n"
"In practice, the authors have found that for reconstructions of depth 9 or higher a subdivide depth of 7 or 8 can reduce the memory usage.\n"
- "The default value is 8.\n");
- parlst.addFloat ("SamplesPerNode",
+ "The default value is 8.\n"));
+ parlst.addParam(new RichFloat ("SamplesPerNode",
1.0,
"Samples per Node",
"This floating point value specifies the minimum number of sample points that should fall within an octree node as the octree\n"
"construction is adapted to sampling density. For noise-free samples, small values in the range [1.0 - 5.0] can be used.\n"
"For more noisy samples, larger values in the range [15.0 - 20.0] may be needed to provide a smoother, noise-reduced, reconstruction.\n"
- "The default value is 1.0.");
- parlst.addFloat ("Offset",
+ "The default value is 1.0."));
+ parlst.addParam(new RichFloat ("Offset",
1.0,
"Surface offsetting",
"This floating point value specifies a correction value for the isosurface threshold that is chosen.\n"
"Values < 1 means internal offsetting, >1 external offsetting."
"Good values are in the range 0.5 .. 2.\n"
- "The default value is 1.0 (no offsetting).");
+ "The default value is 1.0 (no offsetting)."));
break;
@@ -146,7 +146,7 @@ void PoissonPlugin::initParameterSet(QAction *action,MeshModel &m, FilterParamet
// The Real Core Function doing the actual mesh processing.
// Move Vertex of a random quantity
-bool PoissonPlugin::applyFilter(QAction *filter, MeshDocument &md, FilterParameterSet & par, vcg::CallBackPos *cb)
+bool PoissonPlugin::applyFilter(QAction *filter, MeshDocument &md, RichParameterSet & par, vcg::CallBackPos *cb)
{
MeshModel &m=*md.mm();
MeshModel &pm =*md.addNewMesh("Poisson mesh");
diff --git a/src/meshlabplugins/filter_poisson/filter_poisson.h b/src/meshlabplugins/filter_poisson/filter_poisson.h
index 038c9ed94..ca7619c5a 100644
--- a/src/meshlabplugins/filter_poisson/filter_poisson.h
+++ b/src/meshlabplugins/filter_poisson/filter_poisson.h
@@ -53,9 +53,9 @@ public:
virtual const QString filterName(FilterIDType filter) const;
virtual const QString filterInfo(FilterIDType filter) const;
virtual bool autoDialog(QAction *) {return true;}
- virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*parent*/);
- virtual bool applyFilter(QAction * /* filter */, MeshModel &, FilterParameterSet & /*parent*/, vcg::CallBackPos *) { assert(0); return false;} ;
- virtual bool applyFilter(QAction *filter, MeshDocument &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual void initParameterSet(QAction *,MeshModel &/*m*/, RichParameterSet & /*parent*/);
+ virtual bool applyFilter(QAction * /* filter */, MeshModel &, RichParameterSet & /*parent*/, vcg::CallBackPos *) { assert(0); return false;} ;
+ virtual bool applyFilter(QAction *filter, MeshDocument &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
virtual const FilterClass getClass(QAction *);
};
diff --git a/src/meshlabplugins/filter_sampling/filter_sampling.cpp b/src/meshlabplugins/filter_sampling/filter_sampling.cpp
index 6577b3af8..aefce0dea 100644
--- a/src/meshlabplugins/filter_sampling/filter_sampling.cpp
+++ b/src/meshlabplugins/filter_sampling/filter_sampling.cpp
@@ -425,78 +425,78 @@ const int FilterDocSampling::getRequirements(QAction *action)
// - the string shown in the dialog
// - the default value
// - a possibly long string describing the meaning of that parameter (shown as a popup help in the dialog)
-void FilterDocSampling::initParameterSet(QAction *action, MeshDocument & md, FilterParameterSet & parlst)
+void FilterDocSampling::initParameterSet(QAction *action, MeshDocument & md, RichParameterSet & parlst)
{
switch(ID(action)) {
case FP_MONTECARLO_SAMPLING :
- parlst.addInt ("SampleNum", md.mm()->cm.vn,
+ parlst.addParam(new RichInt ("SampleNum", md.mm()->cm.vn,
"Number of samples",
- "The desired number of samples. It can be smaller or larger than the mesh size, and according to the choosed sampling strategy it will try to adapt.");
- parlst.addBool("Weighted", false,
+ "The desired number of samples. It can be smaller or larger than the mesh size, and according to the choosed sampling strategy it will try to adapt."));
+ parlst.addParam(new RichBool("Weighted", false,
"Quality Weighted Sampling",
- "Use per vertex quality to drive the vertex sampling. The number of samples falling in each face is proportional to the face area multiplied by the average quality of the face vertices.");
+ "Use per vertex quality to drive the vertex sampling. The number of samples falling in each face is proportional to the face area multiplied by the average quality of the face vertices."));
break;
case FP_STRATIFIED_SAMPLING :
- parlst.addInt ("SampleNum", std::max(100000,md.mm()->cm.vn),
+ parlst.addParam(new RichInt ("SampleNum", std::max(100000,md.mm()->cm.vn),
"Number of samples",
- "The desired number of samples. It can be smaller or larger than the mesh size, and according to the choosed sampling strategy it will try to adapt.");
- parlst.addEnum("Sampling", 0,
+ "The desired number of samples. It can be smaller or larger than the mesh size, and according to the choosed sampling strategy it will try to adapt."));
+ parlst.addParam(new RichEnum("Sampling", 0,
QStringList() << "Similar Triangle" << "Dual Similar Triangle" << "Long Edge Subdiv" ,
tr("Element to sample:"),
tr( "Similar Triangle: each triangle is subdivided into similar triangles and the internal vertices of these triangles are considered. This sampling leave space around edges and vertices for separate sampling of these entities.
"
"Dual Similar Triangle: each triangle is subdivided into similar triangles and the internal vertices of these triangles are considered.
"
"Long Edge Subdiv each triangle is recursively subdivided along the longest edge.
"
- ));
+ )));
- parlst.addBool("Random", false,
+ parlst.addParam(new RichBool("Random", false,
"Random Sampling",
- "if true, for each (virtual) face we draw a random point, otherwise we pick the face midpoint.");
+ "if true, for each (virtual) face we draw a random point, otherwise we pick the face midpoint."));
break;
case FP_CLUSTERED_SAMPLING :{
float maxVal = md.mm()->cm.bbox.Diag();
- parlst.addAbsPerc("Threshold",maxVal*0.01,0,maxVal,"Cell Size", "The size of the cell of the clustering grid. Smaller the cell finer the resulting mesh. For obtaining a very coarse mesh use larger values.");
+ parlst.addParam(new RichAbsPerc("Threshold",maxVal*0.01,0,maxVal,"Cell Size", "The size of the cell of the clustering grid. Smaller the cell finer the resulting mesh. For obtaining a very coarse mesh use larger values."));
- parlst.addEnum("Sampling", 1,
+ parlst.addParam(new RichEnum("Sampling", 1,
QStringList() << "Average" << "Closest to center",
tr("Representative Strataegy:"),
tr( "Average: for each cell we take the average of the sample falling into. The resulting point is a new point.
"
"Closes to center: for each cell we take the sample that is closest to the center of the cell. Choosen vertices are a subset of the original ones.
"
- ));
- parlst.addBool ("Selected", false, "Selected",
- "If true only for the filter is applied only on the selected subset of the mesh.");
+ )));
+ parlst.addParam(new RichBool ("Selected", false, "Selected",
+ "If true only for the filter is applied only on the selected subset of the mesh."));
}
break;
case FP_ELEMENT_SUBSAMPLING :
- parlst.addEnum("Sampling", 0,
+ parlst.addParam(new RichEnum("Sampling", 0,
QStringList() << "Vertex" << "Edge" << "Face",
tr("Element to sample:"),
- tr("Choose what mesh element has to be used for the subsampling. At most one point sample will be added for each one of the chosen elements"));
- parlst.addInt("SampleNum", md.mm()->cm.vn/10, "Number of samples", "The desired number of elements that must be chosen. Being a subsampling of the original elements if this number should not be larger than the number of elements of the original mesh.");
+ tr("Choose what mesh element has to be used for the subsampling. At most one point sample will be added for each one of the chosen elements")));
+ parlst.addParam(new RichInt("SampleNum", md.mm()->cm.vn/10, "Number of samples", "The desired number of elements that must be chosen. Being a subsampling of the original elements if this number should not be larger than the number of elements of the original mesh."));
break;
case FP_POISSONDISK_SAMPLING :
- parlst.addInt("SampleNum", 1000, "Number of samples", "The desired number of samples. The ray of the disk is calculated according to the sampling density.");
- parlst.addAbsPerc("Radius", 0, 0, md.mm()->cm.bbox.Diag(), "Explicit Radius", "If not zero this parameter override the previous parameter to allow exact radius specification");
- parlst.addInt("MontecarloRate", 20, "MonterCarlo OverSampling", "The over-sampling rate that is used to generate the intial Montecarlo samples (e.g. if this parameter is x means that x * points will be used). The generated Poisson-disk samples are a subset of these initial Montecarlo samples. Larger this number slows the process but make it a bit more accurate.");
- parlst.addBool("Subsample", false, "Base Mesh Subsampling", "If true the original vertices of the base mesh are used as base set of points. In this case the SampleNum should be obviously much smaller than the original vertex number.");
+ parlst.addParam(new RichInt("SampleNum", 1000, "Number of samples", "The desired number of samples. The ray of the disk is calculated according to the sampling density."));
+ parlst.addParam(new RichAbsPerc("Radius", 0, 0, md.mm()->cm.bbox.Diag(), "Explicit Radius", "If not zero this parameter override the previous parameter to allow exact radius specification"));
+ parlst.addParam(new RichInt("MontecarloRate", 20, "MonterCarlo OverSampling", "The over-sampling rate that is used to generate the intial Montecarlo samples (e.g. if this parameter is x means that x * points will be used). The generated Poisson-disk samples are a subset of these initial Montecarlo samples. Larger this number slows the process but make it a bit more accurate."));
+ parlst.addParam(new RichBool("Subsample", false, "Base Mesh Subsampling", "If true the original vertices of the base mesh are used as base set of points. In this case the SampleNum should be obviously much smaller than the original vertex number."));
break;
case FP_VARIABLEDISK_SAMPLING :
- parlst.addInt("SampleNum", 1000, "Number of samples", "The desired number of samples. The ray of the disk is calculated according to the sampling density.");
- parlst.addAbsPerc("Radius", 0, 0, md.mm()->cm.bbox.Diag(), "Explicit Radius", "If not zero this parameter override the previous parameter to allow exact radius specification");
- parlst.addFloat("RadiusVariance", 2, "Radius Variance", "The radius of the disk is allowed to vary between r/var and r*var. If this parameter is 1 the sampling is the same of the Poisson Disk Sampling");
- parlst.addInt("MontecarloRate", 20, "MonterCarlo OverSampling", "The over-sampling rate that is used to generate the intial Montecarlo samples (e.g. if this parameter is x means that x * points will be used). The generated Poisson-disk samples are a subset of these initial Montecarlo samples. Larger this number slows the process but make it a bit more accurate.");
- parlst.addBool("Subsample", false, "Base Mesh Subsampling", "If true the original vertices of the base mesh are used as base set of points. In this case the SampleNum should be obviously much smaller than the original vertex number.");
+ parlst.addParam(new RichInt("SampleNum", 1000, "Number of samples", "The desired number of samples. The ray of the disk is calculated according to the sampling density."));
+ parlst.addParam(new RichAbsPerc("Radius", 0, 0, md.mm()->cm.bbox.Diag(), "Explicit Radius", "If not zero this parameter override the previous parameter to allow exact radius specification"));
+ parlst.addParam(new RichFloat("RadiusVariance", 2, "Radius Variance", "The radius of the disk is allowed to vary between r/var and r*var. If this parameter is 1 the sampling is the same of the Poisson Disk Sampling"));
+ parlst.addParam(new RichInt("MontecarloRate", 20, "MonterCarlo OverSampling", "The over-sampling rate that is used to generate the intial Montecarlo samples (e.g. if this parameter is x means that x * points will be used). The generated Poisson-disk samples are a subset of these initial Montecarlo samples. Larger this number slows the process but make it a bit more accurate."));
+ parlst.addParam(new RichBool("Subsample", false, "Base Mesh Subsampling", "If true the original vertices of the base mesh are used as base set of points. In this case the SampleNum should be obviously much smaller than the original vertex number."));
break;
case FP_TEXEL_SAMPLING :
- parlst.addInt ( "TextureW", 512, "Texture Width",
+ parlst.addParam(new RichInt ( "TextureW", 512, "Texture Width",
"A sample for each texel is generated, so the desired texture size is need, only samples for the texels falling inside some faces are generated.\n Setting this param to 256 means that you get at most 256x256 = 65536 samples).
"
- "If this parameter is 0 the size of the current texture is choosen.");
- parlst.addInt ( "TextureH", 512, "Texture Height",
- "A sample for each texel is generated, so the desired texture size is need, only samples for the texels falling inside some faces are generated.\n Setting this param to 256 means that you get at most 256x256 = 65536 samples)");
- parlst.addBool( "TextureSpace", false, "UV Space Sampling",
- "The generated texel samples have their UV coords as point positions. The resulting point set is has a square domain, the texels/points, even if on a flat domain retain the original vertex normal to help a better perception of the original provenience.");
- parlst.addBool( "RecoverColor", md.mm()->cm.textures.size()>0, "RecoverColor",
- "The generated point cloud has the current texture color");
+ "If this parameter is 0 the size of the current texture is choosen."));
+ parlst.addParam(new RichInt ( "TextureH", 512, "Texture Height",
+ "A sample for each texel is generated, so the desired texture size is need, only samples for the texels falling inside some faces are generated.\n Setting this param to 256 means that you get at most 256x256 = 65536 samples)"));
+ parlst.addParam(new RichBool( "TextureSpace", false, "UV Space Sampling",
+ "The generated texel samples have their UV coords as point positions. The resulting point set is has a square domain, the texels/points, even if on a flat domain retain the original vertex normal to help a better perception of the original provenience."));
+ parlst.addParam(new RichBool( "RecoverColor", md.mm()->cm.textures.size()>0, "RecoverColor",
+ "The generated point cloud has the current texture color"));
break;
case FP_HAUSDORFF_DISTANCE :
{
@@ -504,23 +504,23 @@ void FilterDocSampling::initParameterSet(QAction *action, MeshDocument & md, Fil
foreach (vertexMesh, md.meshList)
if (vertexMesh != md.mm()) break;
- parlst.addMesh ("SampledMesh", md.mm(), "Sampled Mesh",
- "The mesh whose surface is sampled. For each sample we search the closest point on the Target Mesh.");
- parlst.addMesh ("TargetMesh", vertexMesh, "Target Mesh",
- "The mesh that is sampled for the comparison.");
- parlst.addBool ("SaveSample", false, "Save Samples",
- "Save the position and distance of all the used samples on both the two surfaces, creating two new layers with two point clouds representing the used samples.");
- parlst.addBool ("SampleVert", true, "Sample Vertexes",
+ parlst.addParam(new RichMesh ("SampledMesh", md.mm(),&md, "Sampled Mesh",
+ "The mesh whose surface is sampled. For each sample we search the closest point on the Target Mesh."));
+ parlst.addParam(new RichMesh ("TargetMesh", vertexMesh,&md, "Target Mesh",
+ "The mesh that is sampled for the comparison."));
+ parlst.addParam(new RichBool ("SaveSample", false, "Save Samples",
+ "Save the position and distance of all the used samples on both the two surfaces, creating two new layers with two point clouds representing the used samples."));
+ parlst.addParam(new RichBool ("SampleVert", true, "Sample Vertexes",
"For the search of maxima it is useful to sample vertices and edges of the mesh with a greater care. "
"It is quite probably the the farthest points falls along edges or on mesh vertexes, and with uniform montecarlo sampling approaches"
"the probability of taking a sample over a vertex or an edge is theoretically null.
"
- "On the other hand this kind of sampling could make the overall sampling distribution slightly biased and slightly affects the cumulative results.");
- parlst.addBool ("SampleEdge", true, "Sample Edges", "See the above comment.");
- parlst.addBool ("SampleFace", true, "Sample Faces", "See the above comment.");
- parlst.addInt ("SampleNum", md.mm()->cm.vn, "Number of samples",
- "The desired number of samples. It can be smaller or larger than the mesh size, and according to the choosed sampling strategy it will try to adapt.");
- parlst.addAbsPerc("MaxDist", md.mm()->cm.bbox.Diag()/20.0, 0.0f, md.mm()->cm.bbox.Diag(),
- tr("Max Distance"), tr("Sample points for which we do not find anything whithin this distance are rejected and not considered neither for averaging nor for max."));
+ "On the other hand this kind of sampling could make the overall sampling distribution slightly biased and slightly affects the cumulative results."));
+ parlst.addParam(new RichBool ("SampleEdge", true, "Sample Edges", "See the above comment."));
+ parlst.addParam(new RichBool ("SampleFace", true, "Sample Faces", "See the above comment."));
+ parlst.addParam(new RichInt ("SampleNum", md.mm()->cm.vn, "Number of samples",
+ "The desired number of samples. It can be smaller or larger than the mesh size, and according to the choosed sampling strategy it will try to adapt."));
+ parlst.addParam(new RichAbsPerc("MaxDist", md.mm()->cm.bbox.Diag()/20.0, 0.0f, md.mm()->cm.bbox.Diag(),
+ tr("Max Distance"), tr("Sample points for which we do not find anything whithin this distance are rejected and not considered neither for averaging nor for max.")));
} break;
case FP_VERTEX_RESAMPLING:
{
@@ -528,50 +528,50 @@ void FilterDocSampling::initParameterSet(QAction *action, MeshDocument & md, Fil
foreach (vertexMesh, md.meshList)
if (vertexMesh != md.mm()) break;
- parlst.addMesh ("SourceMesh", md.mm(), "Source Mesh",
- "The mesh that contains the source data that we want to transfer.");
- parlst.addMesh ("TargetMesh", vertexMesh, "Target Mesh",
- "The mesh whose vertexes will receive the data from the source.");
- parlst.addBool ("GeomTransfer", false, "Transfer Geometry",
- "if enabled, the position of each vertex of the target mesh will be snapped onto the corresponding closest point on the source mesh");
- parlst.addBool ("ColorTransfer", true, "Transfer Color",
- "if enabled, the color of each vertex of the target mesh will become the color of the corresponding closest point on the source mesh");
- parlst.addBool ("QualityTransfer", false, "Transfer quality",
- "if enabled, the quality of each vertex of the target mesh will become the quality of the corresponding closest point on the source mesh");
+ parlst.addParam(new RichMesh ("SourceMesh", md.mm(),&md, "Source Mesh",
+ "The mesh that contains the source data that we want to transfer."));
+ parlst.addParam(new RichMesh ("TargetMesh", vertexMesh,&md, "Target Mesh",
+ "The mesh whose vertexes will receive the data from the source."));
+ parlst.addParam(new RichBool ("GeomTransfer", false, "Transfer Geometry",
+ "if enabled, the position of each vertex of the target mesh will be snapped onto the corresponding closest point on the source mesh"));
+ parlst.addParam(new RichBool ("ColorTransfer", true, "Transfer Color",
+ "if enabled, the color of each vertex of the target mesh will become the color of the corresponding closest point on the source mesh"));
+ parlst.addParam(new RichBool ("QualityTransfer", false, "Transfer quality",
+ "if enabled, the quality of each vertex of the target mesh will become the quality of the corresponding closest point on the source mesh"));
} break;
case FP_UNIFORM_MESH_RESAMPLING :
{
- parlst.addAbsPerc("CellSize", md.mm()->cm.bbox.Diag()/50.0, 0.0f, md.mm()->cm.bbox.Diag(),
- tr("Precision"), tr("Size of the cell, the default is 1/50 of the box diag. Smaller cells give better precision at a higher computational cost. Remember that halving the cell size means that you build a volume 8 times larger."));
+ parlst.addParam(new RichAbsPerc("CellSize", md.mm()->cm.bbox.Diag()/50.0, 0.0f, md.mm()->cm.bbox.Diag(),
+ tr("Precision"), tr("Size of the cell, the default is 1/50 of the box diag. Smaller cells give better precision at a higher computational cost. Remember that halving the cell size means that you build a volume 8 times larger.")));
- parlst.addAbsPerc("Offset", 0.0, -md.mm()->cm.bbox.Diag()/5.0f, md.mm()->cm.bbox.Diag()/5.0f,
+ parlst.addParam(new RichAbsPerc("Offset", 0.0, -md.mm()->cm.bbox.Diag()/5.0f, md.mm()->cm.bbox.Diag()/5.0f,
tr("Offset"), tr("Offset of the created surface (i.e. distance of the created surface from the original one).
"
"If offset is zero, the created surface passes on the original mesh itself. "
"Values greater than zero mean an external surface, and lower than zero mean an internal surface.
"
- "In practice this value is the threshold passed to the Marching Cube algorithm to extract the isosurface from the distance field representation."));
- parlst.addBool ("mergeCloseVert", false, "Clean Vertices",
- "If true the mesh generated by MC will be cleaned by unifying vertices that are almost coincident");
- parlst.addBool ("discretize", false, "Discretize",
+ "In practice this value is the threshold passed to the Marching Cube algorithm to extract the isosurface from the distance field representation.")));
+ parlst.addParam(new RichBool ("mergeCloseVert", false, "Clean Vertices",
+ "If true the mesh generated by MC will be cleaned by unifying vertices that are almost coincident"));
+ parlst.addParam(new RichBool ("discretize", false, "Discretize",
"If true the position of the intersected edge of the marching cube grid is not computed by linear interpolation, "
"but it is placed in fixed middle position. As a consequence the resampled object will look severely aliased by a stairstep appearance.
"
- "Useful only for simulating the output of 3D printing devices.");
+ "Useful only for simulating the output of 3D printing devices."));
- parlst.addBool ("multisample", false, "Multisample",
- "If true the distance field is more accurately compute by multisampling the volume (7 sample for each voxel). Much slower but less artifacts.");
- parlst.addBool ("absDist", false, "Absolute Distance",
+ parlst.addParam(new RichBool ("multisample", false, "Multisample",
+ "If true the distance field is more accurately compute by multisampling the volume (7 sample for each voxel). Much slower but less artifacts."));
+ parlst.addParam(new RichBool ("absDist", false, "Absolute Distance",
"If true a not signed distance field is computed. "
"In this case you have to choose a not zero Offset and a double surface is built around the original surface, inside and outside. "
- "Is useful to convrt thin floating surfaces into solid, thick meshes.. t");
+ "Is useful to convrt thin floating surfaces into solid, thick meshes.. t"));
} break;
case FP_VORONOI_CLUSTERING :
{
- parlst.addInt ("SampleNum", md.mm()->cm.vn/100, "Target vertex number",
- "The final number of vertices.");
- parlst.addInt ("RelaxIter", 1, "Relaxing Iterations",
- "The final number of vertices.");
- parlst.addInt ("RandSeed", 1, "Random Seed",
- "The final number of vertices.");
+ parlst.addParam(new RichInt ("SampleNum", md.mm()->cm.vn/100, "Target vertex number",
+ "The final number of vertices."));
+ parlst.addParam(new RichInt ("RelaxIter", 1, "Relaxing Iterations",
+ "The final number of vertices."));
+ parlst.addParam(new RichInt ("RandSeed", 1, "Random Seed",
+ "The final number of vertices."));
} break;
case FP_VORONOI_COLORING :
@@ -585,36 +585,36 @@ void FilterDocSampling::initParameterSet(QAction *action, MeshDocument & md, Fil
foreach (vertexMesh, md.meshList) // Search another mesh
if (vertexMesh != colorMesh) break;
- parlst.addMesh ("ColoredMesh", colorMesh, "To be Colored Mesh",
- "The mesh whose surface is colored. For each vertex of this mesh we decide the color according the below parameters.");
- parlst.addMesh ("VertexMesh", vertexMesh, "Vertex Mesh",
- "The mesh whose vertexes are used as seed points for the color computation. These seeds point are projected onto the above mesh.");
+ parlst.addParam(new RichMesh ("ColoredMesh", colorMesh,&md, "To be Colored Mesh",
+ "The mesh whose surface is colored. For each vertex of this mesh we decide the color according the below parameters."));
+ parlst.addParam(new RichMesh ("VertexMesh", vertexMesh,&md, "Vertex Mesh",
+ "The mesh whose vertexes are used as seed points for the color computation. These seeds point are projected onto the above mesh."));
if(ID(action) == FP_DISK_COLORING) {
float Diag = md.mm()->cm.bbox.Diag();
- parlst.addDynamicFloat("Radius", Diag/10.0f, 0.0f, Diag/3.0f, tr("Radius"),
- "the radius of the spheres centered in the VertexMesh seeds ");
- parlst.addBool("SampleRadius", false, "Use sample radius", "Use the radius that is stored in each sample of the vertex mesh. Useful for displaing the variable disk sampling results");
+ parlst.addParam(new RichDynamicFloat("Radius", Diag/10.0f, 0.0f, Diag/3.0f, tr("Radius"),
+ "the radius of the spheres centered in the VertexMesh seeds "));
+ parlst.addParam(new RichBool("SampleRadius", false, "Use sample radius", "Use the radius that is stored in each sample of the vertex mesh. Useful for displaing the variable disk sampling results"));
} else {
- parlst.addBool ("backward", false, "BackDistance",
- "If true the mesh is colored according the distance from the frontier of the voonoi diagram induced by the VertexMesh seeds.");
+ parlst.addParam(new RichBool ("backward", false, "BackDistance",
+ "If true the mesh is colored according the distance from the frontier of the voonoi diagram induced by the VertexMesh seeds."));
}
} break;
case FP_REGULAR_RECURSIVE_SAMPLING :
{
- parlst.addAbsPerc("CellSize", md.mm()->cm.bbox.Diag()/50.0, 0.0f, md.mm()->cm.bbox.Diag(),
- tr("Precision"), tr("Size of the cell, the default is 1/50 of the box diag. Smaller cells give better precision at a higher computational cost. Remember that halving the cell size means that you build a volume 8 times larger."));
+ parlst.addParam(new RichAbsPerc("CellSize", md.mm()->cm.bbox.Diag()/50.0, 0.0f, md.mm()->cm.bbox.Diag(),
+ tr("Precision"), tr("Size of the cell, the default is 1/50 of the box diag. Smaller cells give better precision at a higher computational cost. Remember that halving the cell size means that you build a volume 8 times larger.")));
- parlst.addAbsPerc("Offset", 0.0, -md.mm()->cm.bbox.Diag()/5.0f, md.mm()->cm.bbox.Diag()/5.0f,
+ parlst.addParam(new RichAbsPerc("Offset", 0.0, -md.mm()->cm.bbox.Diag()/5.0f, md.mm()->cm.bbox.Diag()/5.0f,
tr("Offset"), tr("Offset of the created surface (i.e. distance of the created surface from the original one).
"
"If offset is zero, the created surface passes on the original mesh itself. "
"Values greater than zero mean an external surface, and lower than zero mean an internal surface.
"
- "In practice this value is the threshold passed to the Marching Cube algorithm to extract the isosurface from the distance field representation."));
+ "In practice this value is the threshold passed to the Marching Cube algorithm to extract the isosurface from the distance field representation.")));
} break;
default : assert(0);
}
}
-bool FilterDocSampling::applyFilter(QAction *action, MeshDocument &md, FilterParameterSet & par, vcg::CallBackPos *cb)
+bool FilterDocSampling::applyFilter(QAction *action, MeshDocument &md, RichParameterSet & par, vcg::CallBackPos *cb)
{
switch(ID(action))
{
diff --git a/src/meshlabplugins/filter_sampling/filter_sampling.h b/src/meshlabplugins/filter_sampling/filter_sampling.h
index e105e619e..fdb9a71b2 100644
--- a/src/meshlabplugins/filter_sampling/filter_sampling.h
+++ b/src/meshlabplugins/filter_sampling/filter_sampling.h
@@ -67,10 +67,10 @@ public:
virtual const QString filterName(FilterIDType filter) const;
virtual const QString filterInfo(FilterIDType filter) const;
virtual bool autoDialog(QAction *) {return true;}
- virtual void initParameterSet(QAction *,MeshDocument &/*m*/, FilterParameterSet & /*parent*/);
- virtual bool applyFilter(QAction *filter, MeshDocument &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual void initParameterSet(QAction *,MeshDocument &/*m*/, RichParameterSet & /*parent*/);
+ virtual bool applyFilter(QAction *filter, MeshDocument &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
virtual const int getRequirements(QAction *action);
- virtual bool applyFilter(QAction * /* filter */, MeshModel &, FilterParameterSet & /*parent*/, vcg::CallBackPos *) { assert(0); return false;} ;
+ virtual bool applyFilter(QAction * /* filter */, MeshModel &, RichParameterSet & /*parent*/, vcg::CallBackPos *) { assert(0); return false;} ;
virtual const FilterClass getClass(QAction *);
};
diff --git a/src/meshlabplugins/filter_select/meshselect.cpp b/src/meshlabplugins/filter_select/meshselect.cpp
index 39dfac778..613622831 100644
--- a/src/meshlabplugins/filter_select/meshselect.cpp
+++ b/src/meshlabplugins/filter_select/meshselect.cpp
@@ -85,7 +85,7 @@ SelectionFilterPlugin::~SelectionFilterPlugin()
delete actionList.at(i);
}
}
-void SelectionFilterPlugin::initParameterSet(QAction *action, MeshModel &m, FilterParameterSet &parlst)
+void SelectionFilterPlugin::initParameterSet(QAction *action, MeshModel &m, RichParameterSet &parlst)
{
switch(ID(action))
{
@@ -95,27 +95,27 @@ void SelectionFilterPlugin::initParameterSet(QAction *action, MeshModel &m, Filt
float minq=minmax.first;
float maxq=minmax.second;
- parlst.addDynamicFloat("minQ", minq*0.75+maxq*.25, minq, maxq, tr("Min Quality"), tr("Minimum acceptable quality value") );
- parlst.addDynamicFloat("maxQ", minq*0.25+maxq*.75, minq, maxq, tr("Max Quality"), tr("Maximum acceptable quality value") );
- parlst.addBool("Inclusive", true, "Inclusive Sel.", "If true only the faces with all the vertices within the specified range are selected. Otherwise any face with at least one vertex within the range is selected.");
+ parlst.addParam(new RichDynamicFloat("minQ", minq*0.75+maxq*.25, minq, maxq, tr("Min Quality"), tr("Minimum acceptable quality value") ));
+ parlst.addParam(new RichDynamicFloat("maxQ", minq*0.25+maxq*.75, minq, maxq, tr("Max Quality"), tr("Maximum acceptable quality value") ));
+ parlst.addParam(new RichBool("Inclusive", true, "Inclusive Sel.", "If true only the faces with all the vertices within the specified range are selected. Otherwise any face with at least one vertex within the range is selected."));
}
break;
case FP_SELECT_BY_COLOR:
{
- parlst.addColor("Color",Color4b::Black, tr("Color To Select"), tr("Color that you want to be selected.") );
+ parlst.addParam(new RichColor("Color",Color4b::Black, tr("Color To Select"), tr("Color that you want to be selected.") ));
QStringList colorspace;
colorspace << "HSV" << "RGB";
- parlst.addEnum("ColorSpace", 0, colorspace, tr("Pick Color Space"), tr("The color space that the sliders will manipulate.") );
+ parlst.addParam(new RichEnum("ColorSpace", 0, colorspace, tr("Pick Color Space"), tr("The color space that the sliders will manipulate.") ));
QStringList mode;
mode << "Start Over" << "Add" << "Subtract";
- parlst.addEnum("Mode", 0, mode, tr("Mode:"), tr("The mode of this filter. Start Over clears the selection completely before selecting based on the color. Add just adds to the current selection bases on color and subtract takes away from the selection the triangles with a vertex matching the color.") );
+ parlst.addParam(new RichEnum("Mode", 0, mode, tr("Mode:"), tr("The mode of this filter. Start Over clears the selection completely before selecting based on the color. Add just adds to the current selection bases on color and subtract takes away from the selection the triangles with a vertex matching the color.") ));
- parlst.addDynamicFloat("PercentRH", 0.2f, 0.0f, 1.0f, tr("Variation from Red or Hue"), tr("A float between 0 and 1 that represents the percent variation from this color that will be selected. For example if the R was 200 and you put 0.1 then any color with R 200+-25.5 will be selected.") );
- parlst.addDynamicFloat("PercentGS", 0.2f, 0.0f, 1.0f, tr("Variation from Green or Saturation"), tr("A float between 0 and 1 that represents the percent variation from this color that will be selected. For example if the R was 200 and you put 0.1 then any color with R 200+-25.5 will be selected.") );
- parlst.addDynamicFloat("PercentBV", 0.2f, 0.0f, 1.0f, tr("Variation from Blue or Value"), tr("A float between 0 and 1 that represents the percent variation from this color that will be selected. For example if the R was 200 and you put 0.1 then any color with R 200+-25.5 will be selected.") );
+ parlst.addParam(new RichDynamicFloat("PercentRH", 0.2f, 0.0f, 1.0f, tr("Variation from Red or Hue"), tr("A float between 0 and 1 that represents the percent variation from this color that will be selected. For example if the R was 200 and you put 0.1 then any color with R 200+-25.5 will be selected.") ));
+ parlst.addParam(new RichDynamicFloat("PercentGS", 0.2f, 0.0f, 1.0f, tr("Variation from Green or Saturation"), tr("A float between 0 and 1 that represents the percent variation from this color that will be selected. For example if the R was 200 and you put 0.1 then any color with R 200+-25.5 will be selected.") ));
+ parlst.addParam(new RichDynamicFloat("PercentBV", 0.2f, 0.0f, 1.0f, tr("Variation from Blue or Value"), tr("A float between 0 and 1 that represents the percent variation from this color that will be selected. For example if the R was 200 and you put 0.1 then any color with R 200+-25.5 will be selected.") ));
}
break;
}
@@ -134,7 +134,7 @@ bool SelectionFilterPlugin::autoDialog(QAction *action)
}
-bool SelectionFilterPlugin::applyFilter(QAction *action, MeshModel &m, FilterParameterSet & par, vcg::CallBackPos * cb)
+bool SelectionFilterPlugin::applyFilter(QAction *action, MeshModel &m, RichParameterSet & par, vcg::CallBackPos * cb)
{
CMeshO::FaceIterator fi;
CMeshO::VertexIterator vi;
diff --git a/src/meshlabplugins/filter_select/meshselect.h b/src/meshlabplugins/filter_select/meshselect.h
index 1394eec0e..dd1e7a39c 100644
--- a/src/meshlabplugins/filter_select/meshselect.h
+++ b/src/meshlabplugins/filter_select/meshselect.h
@@ -62,11 +62,11 @@ class SelectionFilterPlugin : public QObject, public MeshFilterInterface
virtual const QString filterName(FilterIDType filter) const;
virtual const FilterClass getClass(QAction *) {return MeshFilterInterface::Selection;};
- void initParameterSet(QAction *action, MeshModel &m, FilterParameterSet &parlst);
+ void initParameterSet(QAction *action, MeshModel &m, RichParameterSet &parlst);
bool autoDialog(QAction *action);
virtual const int getRequirements(QAction *);
- virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual bool applyFilter(QAction *filter, MeshModel &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
};
#endif
diff --git a/src/meshlabplugins/filter_splitter/filter_splitter.cpp b/src/meshlabplugins/filter_splitter/filter_splitter.cpp
index c6b9901ff..bc38d0c8c 100644
--- a/src/meshlabplugins/filter_splitter/filter_splitter.cpp
+++ b/src/meshlabplugins/filter_splitter/filter_splitter.cpp
@@ -88,17 +88,17 @@ bool FilterSplitterPlugin::autoDialog(QAction *action)
}
// This function define the needed parameters for each filter.
-void FilterSplitterPlugin::initParameterSet(QAction *action, MeshDocument &/*m*/, FilterParameterSet & parlst)
+void FilterSplitterPlugin::initParameterSet(QAction *action, MeshDocument &/*m*/, RichParameterSet & parlst)
{
switch(ID(action))
{
case FP_SPLITSELECT :
{
- parlst.addBool ("DeleteOriginal",
+ parlst.addParam(new RichBool ("DeleteOriginal",
true,
"Delete original selection",
"Deletes the original selected faces, thus splitting the mesh among layers. \n\n"
- "if false, the selected faces are duplicated in the new layer");
+ "if false, the selected faces are duplicated in the new layer"));
}
break;
@@ -107,7 +107,7 @@ void FilterSplitterPlugin::initParameterSet(QAction *action, MeshDocument &/*m*/
}
// Core Function doing the actual mesh processing.
-bool FilterSplitterPlugin::applyFilter(QAction *filter, MeshDocument &md, FilterParameterSet & par, vcg::CallBackPos *)
+bool FilterSplitterPlugin::applyFilter(QAction *filter, MeshDocument &md, RichParameterSet & par, vcg::CallBackPos *)
{
CMeshO::FaceIterator fi;
int numFacesSel,numVertSel;
diff --git a/src/meshlabplugins/filter_splitter/filter_splitter.h b/src/meshlabplugins/filter_splitter/filter_splitter.h
index 67ce14702..5d222ba5d 100644
--- a/src/meshlabplugins/filter_splitter/filter_splitter.h
+++ b/src/meshlabplugins/filter_splitter/filter_splitter.h
@@ -43,9 +43,9 @@ public:
virtual const QString filterInfo(FilterIDType filter) const;
virtual bool autoDialog(QAction *);
virtual const FilterClass getClass(QAction *);
- virtual void initParameterSet(QAction *,MeshDocument &/*m*/, FilterParameterSet & /*parent*/);
- virtual bool applyFilter(QAction *filter, MeshDocument &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
- virtual bool applyFilter(QAction *, MeshModel &, FilterParameterSet &, vcg::CallBackPos * ) { assert(0); return false;} ;
+ virtual void initParameterSet(QAction *,MeshDocument &/*m*/, RichParameterSet & /*parent*/);
+ virtual bool applyFilter(QAction *filter, MeshDocument &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual bool applyFilter(QAction *, MeshModel &, RichParameterSet &, vcg::CallBackPos * ) { assert(0); return false;} ;
};
#endif
diff --git a/src/meshlabplugins/filter_unsharp/filter_unsharp.cpp b/src/meshlabplugins/filter_unsharp/filter_unsharp.cpp
index ae601ff08..55550db49 100644
--- a/src/meshlabplugins/filter_unsharp/filter_unsharp.cpp
+++ b/src/meshlabplugins/filter_unsharp/filter_unsharp.cpp
@@ -290,90 +290,92 @@ bool FilterUnsharp::autoDialog(QAction *action)
}
return false;
}
-void FilterUnsharp::initParameterSet(QAction *action, MeshModel &m, FilterParameterSet & parlst)
+
+void FilterUnsharp::initParameterSet(QAction *action, MeshDocument &md, RichParameterSet & parlst)
+//void FilterUnsharp::initParameterSet(QAction *action, MeshModel &m, RichParameterSet & parlst)
{
switch(ID(action))
{
case FP_CREASE_CUT :
- parlst.addFloat("angleDeg", 90.f, tr("Crease Angle (degree)"), tr("If the angle between the normals of two adjacent faces is larger that this threshold the edge is considered a creased and the mesh is cut along it."));
+ parlst.addParam(new RichFloat("angleDeg", 90.f, tr("Crease Angle (degree)"), tr("If the angle between the normals of two adjacent faces is larger that this threshold the edge is considered a creased and the mesh is cut along it.")));
break;
case FP_UNSHARP_NORMAL:
- parlst.addBool("recalc", false, tr("Recompute Normals"), tr("Recompute normals from scratch before the unsharp masking"));
- parlst.addFloat("weight", 0.3f, tr("Unsharp Weight"), tr("the unsharp weight wu in the unsharp mask equation:
woorig + wu (orig - lowpass)
"));
- parlst.addFloat("weightOrig", 1.f, tr("Original Weight"), tr("How much the original signal is used, e.g. the weight wo in the above unsharp mask equation.
Usually you should not need to change the default 1.0 value."));
- parlst.addInt("iterations", 5, "Smooth Iterations", tr("number of laplacian face smooth iterations in every run"));
+ parlst.addParam(new RichBool("recalc", false, tr("Recompute Normals"), tr("Recompute normals from scratch before the unsharp masking")));
+ parlst.addParam(new RichFloat("weight", 0.3f, tr("Unsharp Weight"), tr("the unsharp weight wu in the unsharp mask equation:
woorig + wu (orig - lowpass)
")));
+ parlst.addParam(new RichFloat("weightOrig", 1.f, tr("Original Weight"), tr("How much the original signal is used, e.g. the weight wo in the above unsharp mask equation.
Usually you should not need to change the default 1.0 value.")));
+ parlst.addParam(new RichInt("iterations", 5, "Smooth Iterations", tr("number of laplacian face smooth iterations in every run")));
break;
case FP_UNSHARP_GEOMETRY:
- parlst.addFloat("weight", 0.3f, tr("Unsharp Weight"), tr("the unsharp weight wu in the unsharp mask equation:
woorig + wu (orig - lowpass)
"));
- parlst.addFloat("weightOrig", 1.f, tr("Original Weight"), tr("How much the original signal is used, e.g. the weight wo in the above unsharp mask equation
Usually you should not need to change the default 1.0 value."));
- parlst.addInt("iterations", 5, "Smooth Iterations", tr("number ofiterations of laplacian smooth in every run"));
+ parlst.addParam(new RichFloat("weight", 0.3f, tr("Unsharp Weight"), tr("the unsharp weight wu in the unsharp mask equation:
woorig + wu (orig - lowpass)
")));
+ parlst.addParam(new RichFloat("weightOrig", 1.f, tr("Original Weight"), tr("How much the original signal is used, e.g. the weight wo in the above unsharp mask equation
Usually you should not need to change the default 1.0 value.")));
+ parlst.addParam(new RichInt("iterations", 5, "Smooth Iterations", tr("number ofiterations of laplacian smooth in every run")));
break;
case FP_UNSHARP_VERTEX_COLOR:
- parlst.addFloat("weight", 0.3f, tr("Unsharp Weight"), tr("the unsharp weight wu in the unsharp mask equation:
woorig + wu (orig - lowpass)
"));
- parlst.addFloat("weightOrig", 1.f, tr("Original Color Weight"), tr("How much the original signal is used, e.g. the weight wo in the above unsharp mask equation
Usually you should not need to change the default 1.0 value."));
- parlst.addInt("iterations", 5, "Smooth Iterations", tr("number of iterations of laplacian smooth in every run"));
+ parlst.addParam(new RichFloat("weight", 0.3f, tr("Unsharp Weight"), tr("the unsharp weight wu in the unsharp mask equation:
woorig + wu (orig - lowpass)
")));
+ parlst.addParam(new RichFloat("weightOrig", 1.f, tr("Original Color Weight"), tr("How much the original signal is used, e.g. the weight wo in the above unsharp mask equation
Usually you should not need to change the default 1.0 value.")));
+ parlst.addParam(new RichInt("iterations", 5, "Smooth Iterations", tr("number of iterations of laplacian smooth in every run")));
break;
case FP_UNSHARP_QUALITY:
- parlst.addFloat("weight", 0.3f, tr("Unsharp Weight"), tr("the unsharp weight wu in the unsharp mask equation:
woorig + wu (orig - lowpass)
"));
- parlst.addFloat("weightOrig", 1.f, tr("Original Weight"), tr("How much the original signal is used, e.g. the weight wo in the above unsharp mask equation
Usually you should not need to change the default 1.0 value."));
- parlst.addInt("iterations", 5, "Smooth Iterations", tr("number of iterations of laplacian smooth in every run"));
+ parlst.addParam(new RichFloat("weight", 0.3f, tr("Unsharp Weight"), tr("the unsharp weight wu in the unsharp mask equation:
woorig + wu (orig - lowpass)
")));
+ parlst.addParam(new RichFloat("weightOrig", 1.f, tr("Original Weight"), tr("How much the original signal is used, e.g. the weight wo in the above unsharp mask equation
Usually you should not need to change the default 1.0 value.")));
+ parlst.addParam(new RichInt("iterations", 5, "Smooth Iterations", tr("number of iterations of laplacian smooth in every run")));
break;
case FP_TWO_STEP_SMOOTH:
- parlst.addInt ("stepSmoothNum", (int) 3,"Smoothing steps", "The number of times that the whole algorithm (normal smoothing + vertex fitting) is iterated.");
- parlst.addFloat("normalThr", (float) 60,"Feature Angle Threshold (deg)", "Specify a threshold angle (0..90) for features that you want to be preserved.
Features forming angles LARGER than the specified threshold will be preserved.
0 -> no smoothing
90 -> all faces will be smoothed");
- parlst.addInt ("stepNormalNum", (int) 20,"Normal Smoothing steps", "Number of iterations of normal smoothing step. The larger the better and (the slower)");
- parlst.addInt ("stepFitNum", (int) 20,"Vertex Fitting steps", "Number of iterations of the vertex fitting procedure. )");
- parlst.addBool ("Selected",m.cm.sfn>0,"Affect only selected faces");
+ parlst.addParam(new RichInt ("stepSmoothNum", (int) 3,"Smoothing steps", "The number of times that the whole algorithm (normal smoothing + vertex fitting) is iterated."));
+ parlst.addParam(new RichFloat("normalThr", (float) 60,"Feature Angle Threshold (deg)", "Specify a threshold angle (0..90) for features that you want to be preserved.
Features forming angles LARGER than the specified threshold will be preserved.
0 -> no smoothing
90 -> all faces will be smoothed"));
+ parlst.addParam(new RichInt ("stepNormalNum", (int) 20,"Normal Smoothing steps", "Number of iterations of normal smoothing step. The larger the better and (the slower)"));
+ parlst.addParam(new RichInt ("stepFitNum", (int) 20,"Vertex Fitting steps", "Number of iterations of the vertex fitting procedure. )"));
+ parlst.addParam(new RichBool ("Selected",md.mm()->cm.sfn>0,"Affect only selected faces"));
break;
case FP_LAPLACIAN_SMOOTH:
- parlst.addInt ("stepSmoothNum", (int) 3,"Smoothing steps", "The number of times that the whole algorithm (normal smoothing + vertex fitting) is iterated.");
- parlst.addBool ("Boundary",true,"1D Boundary Smoothing", "if true the boundary edges are smoothed only by themselves (e.g. the polyline forming the boundary of the mesh is independently smoothed). Can reduce the shrinking on the border but can have strange effects on very small boundaries.");
- parlst.addBool ("Selected",m.cm.sfn>0,"Affect only selected faces");
+ parlst.addParam(new RichInt ("stepSmoothNum", (int) 3,"Smoothing steps", "The number of times that the whole algorithm (normal smoothing + vertex fitting) is iterated."));
+ parlst.addParam(new RichBool ("Boundary",true,"1D Boundary Smoothing", "if true the boundary edges are smoothed only by themselves (e.g. the polyline forming the boundary of the mesh is independently smoothed). Can reduce the shrinking on the border but can have strange effects on very small boundaries."));
+ parlst.addParam(new RichBool ("Selected",md.mm()->cm.sfn>0,"Affect only selected faces"));
break;
case FP_DEPTH_SMOOTH:
- parlst.addInt ("stepSmoothNum", (int) 3,"Smoothing steps", "The number of times that the whole algorithm (normal smoothing + vertex fitting) is iterated.");
- parlst.addPoint3f ("viewPoint", Point3f(0,0,0),"Smoothing steps", "The number of times that the whole algorithm (normal smoothing + vertex fitting) is iterated.");
- parlst.addBool ("Selected",m.cm.sfn>0,"Affect only selected faces");
+ parlst.addParam(new RichInt ("stepSmoothNum", (int) 3,"Smoothing steps", "The number of times that the whole algorithm (normal smoothing + vertex fitting) is iterated."));
+ parlst.addParam(new RichPoint3f ("viewPoint", Point3f(0,0,0),"Smoothing steps", "The number of times that the whole algorithm (normal smoothing + vertex fitting) is iterated."));
+ parlst.addParam(new RichBool ("Selected",md.mm()->cm.sfn>0,"Affect only selected faces"));
break;
case FP_DIRECTIONAL_PRESERVATION:
- parlst.addEnum("step", 0,
+ parlst.addParam(new RichEnum("step", 0,
QStringList() << "Store Vertex Position" << "Blend Vertex Position",
tr("Step:"),
tr("The purpose of this filter is to constrain any smoothing algorithm to moving vertices only along a give line of sight.
First you should store current vertex position, than after applying one of the many smoothing algorithms you should re start this filter and blend the original positions with the smoothed results.
"
- "Given a view point vp , the smoothed vertex position vs and the original position v, The new vertex position is computed as the projection of vs on the line connecting v and vp."));
- parlst.addPoint3f ("viewPoint", Point3f(0,0,0),"Viewpoint", "The position of the view point that is used to get the constraint direction.");
- parlst.addBool ("Selected",m.cm.sfn>0,"Affect only selected faces");
+ "Given a view point vp , the smoothed vertex position vs and the original position v, The new vertex position is computed as the projection of vs on the line connecting v and vp.")));
+ parlst.addParam(new RichPoint3f ("viewPoint", Point3f(0,0,0),"Viewpoint", "The position of the view point that is used to get the constraint direction."));
+ parlst.addParam(new RichBool ("Selected",md.mm()->cm.sfn>0,"Affect only selected faces"));
break;
case FP_TAUBIN_SMOOTH:
- parlst.addFloat("lambda", (float) 0.5,"Lambda", "The lambda parameter of the Taubin Smoothing algorithm");
- parlst.addFloat("mu", (float) -0.53,"mu", "The mu parameter of the Taubin Smoothing algorithm");
- parlst.addInt ("stepSmoothNum", (int) 10,"Smoothing steps", "The number of times that the taubin smoothing is iterated. Usually it requires a larger number of iteration than the classical laplacian");
- parlst.addBool ("Selected",m.cm.sfn>0,"Affect only selected faces");
+ parlst.addParam(new RichFloat("lambda", (float) 0.5,"Lambda", "The lambda parameter of the Taubin Smoothing algorithm"));
+ parlst.addParam(new RichFloat("mu", (float) -0.53,"mu", "The mu parameter of the Taubin Smoothing algorithm"));
+ parlst.addParam(new RichInt ("stepSmoothNum", (int) 10,"Smoothing steps", "The number of times that the taubin smoothing is iterated. Usually it requires a larger number of iteration than the classical laplacian"));
+ parlst.addParam(new RichBool ("Selected",md.mm()->cm.sfn>0,"Affect only selected faces"));
break;
case FP_SD_LAPLACIAN_SMOOTH:
{
- parlst.addInt ("stepSmoothNum", (int) 3,"Smoothing steps", "The number of times that the whole algorithm (normal smoothing + vertex fitting) is iterated.");
- float maxVal = m.cm.bbox.Diag()/10;
- parlst.addAbsPerc("delta",maxVal*0.01,0,maxVal,"delta", "");
- parlst.addBool ("Selected",m.cm.sfn>0,"Affect only selected faces");
+ parlst.addParam(new RichInt ("stepSmoothNum", (int) 3,"Smoothing steps", "The number of times that the whole algorithm (normal smoothing + vertex fitting) is iterated."));
+ float maxVal = md.mm()->cm.bbox.Diag()/10;
+ parlst.addParam(new RichAbsPerc("delta",maxVal*0.01,0,maxVal,"delta", ""));
+ parlst.addParam(new RichBool ("Selected",md.mm()->cm.sfn>0,"Affect only selected faces"));
}
break;
case FP_LINEAR_MORPH :
{
- parlst.addMesh ("TargetMesh", 1, "Target Mesh", "The mesh that is the morph target.");
+ parlst.addParam(new RichMesh ("TargetMesh", md.mm(), &md,"Target Mesh", "The mesh that is the morph target."));
- parlst.addDynamicFloat("PercentMorph", 0.0, -150, 250,
+ parlst.addParam(new RichDynamicFloat("PercentMorph", 0.0, -150, 250,
"% Morph", "The percent you want to morph toward (or away from) the target.
"
"0 means current mesh
"
"100 means targe mesh
"
- "<0 and >100 linearly extrapolate between the two mesh
");
+ "<0 and >100 linearly extrapolate between the two mesh
"));
}
break;
default : assert(0);
}
}
-bool FilterUnsharp::applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & par, vcg::CallBackPos * cb)
+bool FilterUnsharp::applyFilter(QAction *filter, MeshModel &m, RichParameterSet & par, vcg::CallBackPos * cb)
{
switch(ID(filter))
{
diff --git a/src/meshlabplugins/filter_unsharp/filter_unsharp.h b/src/meshlabplugins/filter_unsharp/filter_unsharp.h
index 20b0aeadf..06851baea 100644
--- a/src/meshlabplugins/filter_unsharp/filter_unsharp.h
+++ b/src/meshlabplugins/filter_unsharp/filter_unsharp.h
@@ -76,8 +76,8 @@ class FilterUnsharp : public QObject, public MeshFilterInterface
virtual bool autoDialog(QAction *);
virtual const FilterClass getClass(QAction *);
virtual const int getRequirements(QAction *);
- virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
- virtual void initParameterSet(QAction *action, MeshModel &/*m*/, FilterParameterSet & parlst);
+ virtual bool applyFilter(QAction *filter, MeshModel &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual void initParameterSet(QAction *action, MeshDocument &/*m*/, RichParameterSet & parlst);
virtual int postCondition( QAction* ) const;
virtual int getPreConditions(QAction *) const;
diff --git a/src/meshlabplugins/io_3ds/meshio.cpp b/src/meshlabplugins/io_3ds/meshio.cpp
index 5deb0fac4..087117788 100644
--- a/src/meshlabplugins/io_3ds/meshio.cpp
+++ b/src/meshlabplugins/io_3ds/meshio.cpp
@@ -96,7 +96,7 @@ using namespace vcg;
-bool ExtraMeshIOPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &, CallBackPos *cb, QWidget *parent)
+bool ExtraMeshIOPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &, CallBackPos *cb, QWidget *parent)
{
// initializing mask
mask = 0;
@@ -160,7 +160,7 @@ bool ExtraMeshIOPlugin::open(const QString &formatName, const QString &fileName,
return true;
}
-bool ExtraMeshIOPlugin::save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet &, vcg::CallBackPos *cb, QWidget *parent)
+bool ExtraMeshIOPlugin::save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet &, vcg::CallBackPos *cb, QWidget *parent)
{
QString errorMsgFormat = "Error encountered while exporting file %1:\n%2";
string filename = QFile::encodeName(fileName).constData ();
diff --git a/src/meshlabplugins/io_3ds/meshio.h b/src/meshlabplugins/io_3ds/meshio.h
index 86ec3f0a3..f6e7602e2 100644
--- a/src/meshlabplugins/io_3ds/meshio.h
+++ b/src/meshlabplugins/io_3ds/meshio.h
@@ -44,8 +44,8 @@ public:
QList exportFormats() const;
void GetExportMaskCapability(QString &format, int &capability, int &defaultBits) const;
- bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent=0);
- bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent= 0);
+ bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent=0);
+ bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent= 0);
};
#endif
diff --git a/src/meshlabplugins/io_base/baseio.cpp b/src/meshlabplugins/io_base/baseio.cpp
index 368874a8a..e800fa664 100644
--- a/src/meshlabplugins/io_base/baseio.cpp
+++ b/src/meshlabplugins/io_base/baseio.cpp
@@ -85,22 +85,23 @@
using namespace std;
using namespace vcg;
// initialize importing parameters
-void BaseMeshIOPlugin::initPreOpenParameter(const QString &formatName, const QString &/*filename*/, FilterParameterSet &parlst)
+void BaseMeshIOPlugin::initPreOpenParameter(const QString &formatName, const QString &/*filename*/, RichParameterSet &parlst)
{
if (formatName.toUpper() == tr("PTX"))
{
- parlst.addInt("meshindex",0,"Index of Range Map to be Imported","PTX files may contain more than one range map. 0 is the first range map. If the number if higher than the actual mesh number, the import will fail");
- parlst.addBool("anglecull",true,"Cull faces by angle","short");
- parlst.addFloat("angle",85.0,"Angle limit for face culling","short");
- parlst.addBool("usecolor",true,"import color","Read color from PTX, if color is not present, uses reflectance instead");
- parlst.addBool("pointcull",true,"delete unsampled points","Deletes unsampled points in the grid that are normally located in [0,0,0]");
- parlst.addBool("pointsonly",false,"Keep only points","Just import points, without triangulation");
- parlst.addBool("switchside",false,"Swap rows/columns","On some PTX, the rows and columns number are switched over");
- parlst.addBool("flipfaces",false,"Flip all faces","Flip the orientation of all the triangles");
+ parlst.addParam(new RichInt("meshindex",0,"Index of Range Map to be Imported",
+ "PTX files may contain more than one range map. 0 is the first range map. If the number if higher than the actual mesh number, the import will fail"));
+ parlst.addParam(new RichBool("anglecull",true,"Cull faces by angle","short"));
+ parlst.addParam(new RichFloat("angle",85.0,"Angle limit for face culling","short"));
+ parlst.addParam(new RichBool("usecolor",true,"import color","Read color from PTX, if color is not present, uses reflectance instead"));
+ parlst.addParam(new RichBool("pointcull",true,"delete unsampled points","Deletes unsampled points in the grid that are normally located in [0,0,0]"));
+ parlst.addParam(new RichBool("pointsonly",false,"Keep only points","Just import points, without triangulation"));
+ parlst.addParam(new RichBool("switchside",false,"Swap rows/columns","On some PTX, the rows and columns number are switched over"));
+ parlst.addParam(new RichBool("flipfaces",false,"Flip all faces","Flip the orientation of all the triangles"));
}
}
-bool BaseMeshIOPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &parlst, CallBackPos *cb, QWidget * /*parent*/)
+bool BaseMeshIOPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &parlst, CallBackPos *cb, QWidget * /*parent*/)
{
bool normalsUpdated = false;
@@ -171,14 +172,14 @@ bool BaseMeshIOPlugin::open(const QString &formatName, const QString &fileName,
{
tri::io::ImporterPTX::Info importparams;
- importparams.meshnum = parlst.getInt("meshindex");
- importparams.anglecull =parlst.getBool("anglecull");
- importparams.angle = parlst.getFloat("angle");
- importparams.savecolor = parlst.getBool("usecolor");
- importparams.pointcull = parlst.getBool("pointcull");
- importparams.pointsonly = parlst.getBool("pointsonly");
- importparams.switchside = parlst.getBool("switchside");
- importparams.flipfaces = parlst.getBool("flipfaces");
+ importparams.meshnum = parlst.findParameter("meshindex")->val->getInt();
+ importparams.anglecull =parlst.findParameter("anglecull")->val->getBool();
+ importparams.angle = parlst.findParameter("angle")->val->getFloat();
+ importparams.savecolor = parlst.findParameter("usecolor")->val->getBool();
+ importparams.pointcull = parlst.findParameter("pointcull")->val->getBool();
+ importparams.pointsonly = parlst.findParameter("pointsonly")->val->getBool();
+ importparams.switchside = parlst.findParameter("switchside")->val->getBool();
+ importparams.flipfaces = parlst.findParameter("flipfaces")->val->getBool();
// if color, add to mesh
if(importparams.savecolor)
@@ -239,7 +240,7 @@ bool BaseMeshIOPlugin::open(const QString &formatName, const QString &fileName,
return true;
}
-bool BaseMeshIOPlugin::save(const QString &formatName,const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet & par, CallBackPos *cb, QWidget */*parent*/)
+bool BaseMeshIOPlugin::save(const QString &formatName,const QString &fileName, MeshModel &m, const int mask, const RichParameterSet & par, CallBackPos *cb, QWidget */*parent*/)
{
QString errorMsgFormat = "Error encountered while exportering file %1:\n%2";
string filename = QFile::encodeName(fileName).constData ();
@@ -247,7 +248,7 @@ bool BaseMeshIOPlugin::save(const QString &formatName,const QString &fileName, M
string ex = formatName.toUtf8().data();
bool binaryFlag = false;
if(formatName.toUpper() == tr("STL") || formatName.toUpper() == tr("PLY"))
- binaryFlag = par.getBool("Binary");
+ binaryFlag = par.findParameter("Binary")->val->getBool();
if(formatName.toUpper() == tr("PLY"))
{
@@ -359,22 +360,22 @@ void BaseMeshIOPlugin::GetExportMaskCapability(QString &format, int &capability,
}
-void BaseMeshIOPlugin::initOpenParameter(const QString &format, MeshModel &/*m*/, FilterParameterSet &par)
+void BaseMeshIOPlugin::initOpenParameter(const QString &format, MeshModel &/*m*/, RichParameterSet &par)
{
if(format.toUpper() == tr("STL"))
- par.addBool("Unify",true, "Unify Duplicated Vertices",
- "The STL format is not an vertex-indexed format. Each triangle is composed by independent vertices, so, usually, duplicated vertices should be unified");
+ par.addParam(new RichBool("Unify",true, "Unify Duplicated Vertices",
+ "The STL format is not an vertex-indexed format. Each triangle is composed by independent vertices, so, usually, duplicated vertices should be unified"));
}
-void BaseMeshIOPlugin::initSaveParameter(const QString &format, MeshModel &/*m*/, FilterParameterSet &par)
+void BaseMeshIOPlugin::initSaveParameter(const QString &format, MeshModel &/*m*/, RichParameterSet &par)
{
if(format.toUpper() == tr("STL") || format.toUpper() == tr("PLY"))
- par.addBool("Binary",true, "Binary encoding",
- "Save the mesh using a binary encoding. If false the mesh is saved in a plain, readable ascii format");
+ par.addParam(new RichBool("Binary",true, "Binary encoding",
+ "Save the mesh using a binary encoding. If false the mesh is saved in a plain, readable ascii format"));
}
-void BaseMeshIOPlugin::applyOpenParameter(const QString &format, MeshModel &m, const FilterParameterSet &par)
+void BaseMeshIOPlugin::applyOpenParameter(const QString &format, MeshModel &m, const RichParameterSet &par)
{
if(format.toUpper() == tr("STL"))
- if(par.getBool("Unify"))
+ if(par.findParameter("Unify")->val->getBool())
tri::Clean::RemoveDuplicateVertex(m.cm);
}
diff --git a/src/meshlabplugins/io_base/baseio.h b/src/meshlabplugins/io_base/baseio.h
index ee8c2e509..f602e937a 100644
--- a/src/meshlabplugins/io_base/baseio.h
+++ b/src/meshlabplugins/io_base/baseio.h
@@ -54,13 +54,13 @@ public:
void GetExportMaskCapability(QString &format, int &capability, int &defaultBits) const;
- bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask,const FilterParameterSet & par, vcg::CallBackPos *cb=0, QWidget *parent=0);
- bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet & par, vcg::CallBackPos *cb=0, QWidget *parent= 0);
- virtual void initOpenParameter(const QString &format, MeshModel &/*m*/, FilterParameterSet & par);
- virtual void applyOpenParameter(const QString &format, MeshModel &m, const FilterParameterSet &par);
- void initPreOpenParameter(const QString &formatName, const QString &filename, FilterParameterSet &parlst);
+ bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask,const RichParameterSet & par, vcg::CallBackPos *cb=0, QWidget *parent=0);
+ bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet & par, vcg::CallBackPos *cb=0, QWidget *parent= 0);
+ virtual void initOpenParameter(const QString &format, MeshModel &/*m*/, RichParameterSet & par);
+ virtual void applyOpenParameter(const QString &format, MeshModel &m, const RichParameterSet &par);
+ void initPreOpenParameter(const QString &formatName, const QString &filename, RichParameterSet &parlst);
- virtual void initSaveParameter(const QString &format, MeshModel &/*m*/, FilterParameterSet & par);
+ virtual void initSaveParameter(const QString &format, MeshModel &/*m*/, RichParameterSet & par);
//const QString filterInfo(FilterIDType filter);
//const QString filterName(FilterIDType filter);
};
diff --git a/src/meshlabplugins/io_collada/io_collada.cpp b/src/meshlabplugins/io_collada/io_collada.cpp
index 6175994b0..876f7aa98 100644
--- a/src/meshlabplugins/io_collada/io_collada.cpp
+++ b/src/meshlabplugins/io_collada/io_collada.cpp
@@ -104,7 +104,7 @@
using namespace std;
using namespace vcg;
-bool ColladaIOPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &, CallBackPos *cb, QWidget *parent)
+bool ColladaIOPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &, CallBackPos *cb, QWidget *parent)
{
// initializing mask
mask = 0;
@@ -153,7 +153,7 @@ bool ColladaIOPlugin::open(const QString &formatName, const QString &fileName, M
return true;
}
-void ColladaIOPlugin::initPreOpenParameter(const QString &/*format*/, const QString &filename, FilterParameterSet & parlst)
+void ColladaIOPlugin::initPreOpenParameter(const QString &/*format*/, const QString &filename, RichParameterSet & parlst)
{
QTime t;
t.start();
@@ -178,13 +178,13 @@ void ColladaIOPlugin::initPreOpenParameter(const QString &/*format*/, const QStr
idList.push_back(idVal);
qDebug("Node %i geom id = '%s'",i,qPrintable(idVal));
}
- parlst.addEnum("geomnode", 0, idList, tr("geometry nodes"), tr("dsasdfads"));
+ parlst.addParam(new RichEnum("geomnode",0, idList, tr("geometry nodes"), tr("dsasdfads")));
qDebug("Time elapsed: %d ms", t.elapsed());
}
-bool ColladaIOPlugin::save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet &, vcg::CallBackPos *cb, QWidget *parent)
+bool ColladaIOPlugin::save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet &, vcg::CallBackPos *cb, QWidget *parent)
{
QString errorMsgFormat = "Error encountered while exportering file %1:\n%2";
string filename = QFile::encodeName(fileName).constData ();
diff --git a/src/meshlabplugins/io_collada/io_collada.h b/src/meshlabplugins/io_collada/io_collada.h
index a8e74b9ad..15c6255b5 100644
--- a/src/meshlabplugins/io_collada/io_collada.h
+++ b/src/meshlabplugins/io_collada/io_collada.h
@@ -63,9 +63,9 @@ class ColladaIOPlugin : public QObject, public MeshIOInterface
QList exportFormats() const;
void GetExportMaskCapability(QString &format, int &capability, int &defaultBits) const;
- void initPreOpenParameter(const QString &/*format*/, const QString &/*fileName*/, FilterParameterSet & /*par*/);
- bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &par, vcg::CallBackPos *cb=0, QWidget *parent=0);
- bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent= 0);
+ void initPreOpenParameter(const QString &/*format*/, const QString &/*fileName*/, RichParameterSet & /*par*/);
+ bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &par, vcg::CallBackPos *cb=0, QWidget *parent=0);
+ bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent= 0);
};
#endif
diff --git a/src/meshlabplugins/io_epoch/epoch_io.cpp b/src/meshlabplugins/io_epoch/epoch_io.cpp
index c9474d961..c8b8d401a 100644
--- a/src/meshlabplugins/io_epoch/epoch_io.cpp
+++ b/src/meshlabplugins/io_epoch/epoch_io.cpp
@@ -558,7 +558,7 @@ EpochIO::EpochIO()
delete epochDialog;
}
-bool EpochIO::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask,const FilterParameterSet & /*par*/, CallBackPos *cb, QWidget *parent)
+bool EpochIO::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask,const RichParameterSet & /*par*/, CallBackPos *cb, QWidget *parent)
{
EpochReconstruction er;
@@ -755,7 +755,7 @@ bool EpochIO::open(const QString &formatName, const QString &fileName, MeshModel
}
-bool EpochIO::save(const QString &/*formatName*/,const QString &/*fileName*/, MeshModel &/*m*/, const int /*mask*/, const FilterParameterSet &, vcg::CallBackPos * /*cb*/, QWidget *parent)
+bool EpochIO::save(const QString &/*formatName*/,const QString &/*fileName*/, MeshModel &/*m*/, const int /*mask*/, const RichParameterSet &, vcg::CallBackPos * /*cb*/, QWidget *parent)
{
QMessageBox::warning(parent, "Unknown type", "file's extension not supported!!!");
return false;
diff --git a/src/meshlabplugins/io_epoch/epoch_io.h b/src/meshlabplugins/io_epoch/epoch_io.h
index c50b80d6a..036d2caaa 100644
--- a/src/meshlabplugins/io_epoch/epoch_io.h
+++ b/src/meshlabplugins/io_epoch/epoch_io.h
@@ -66,8 +66,8 @@ public:
QString lastFileName;
void GetExportMaskCapability(QString &, int &, int &) const {assert(0); return ;}
- bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask,const FilterParameterSet & par, vcg::CallBackPos *cb=0, QWidget *parent=0);
- bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent= 0);
+ bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask,const RichParameterSet & par, vcg::CallBackPos *cb=0, QWidget *parent=0);
+ bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent= 0);
};
diff --git a/src/meshlabplugins/io_epoch/io_epoch.pro b/src/meshlabplugins/io_epoch/io_epoch.pro
index 6f4ca3c41..1d66d73c3 100644
--- a/src/meshlabplugins/io_epoch/io_epoch.pro
+++ b/src/meshlabplugins/io_epoch/io_epoch.pro
@@ -33,7 +33,7 @@ win32-msvc2008:LIBS += ../../external/lib/win32-msvc2008/bz2.lib
win32-g++:LIBS += ../../external/lib/win32-gcc/libbz2.a
linux-g++:LIBS += ../../external/lib/linux-g++/libbz2.a
-win32-msvc2005:INCLUDEPATH -= ../../external/bzip2-1.0.5
+win32-msvc2005:INCLUDEPATH += ../../external/bzip2-1.0.5
win32-msvc2008:INCLUDEPATH += ../../external/bzip2-1.0.5
win32-g++:INCLUDEPATH += ../../external/bzip2-1.0.5
linux-g++:INCLUDEPATH += ../../external/bzip2-1.0.5
diff --git a/src/meshlabplugins/io_epoch/scalar_image.cpp b/src/meshlabplugins/io_epoch/scalar_image.cpp
index 19b339deb..9399e51df 100644
--- a/src/meshlabplugins/io_epoch/scalar_image.cpp
+++ b/src/meshlabplugins/io_epoch/scalar_image.cpp
@@ -44,10 +44,11 @@
//#include "epoch.h"
//#include "radial_distortion.h"
//#include "epoch_camera.h"
+#include
#include
#include "scalar_image.h"
-#include
+
using namespace std;
/*
diff --git a/src/meshlabplugins/io_expe/io_expe.cpp b/src/meshlabplugins/io_expe/io_expe.cpp
index 996bd0818..ad5a4457c 100644
--- a/src/meshlabplugins/io_expe/io_expe.cpp
+++ b/src/meshlabplugins/io_expe/io_expe.cpp
@@ -42,14 +42,14 @@ using namespace vcg;
// initialize importing parameters
-// void ExpeIOPlugin::initPreOpenParameter(const QString &formatName, const QString &filename, FilterParameterSet &parlst)
+// void ExpeIOPlugin::initPreOpenParameter(const QString &formatName, const QString &filename, RichParameterSet &parlst)
// {
// parlst.addBool("pointsonly",false,"Keep only points","Just import points, without triangulation");
// parlst.addBool("flipfaces",false,"Flip all faces","Flip the orientation of all the triangles");
// }
-bool ExpeIOPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &parlst, CallBackPos *cb, QWidget *parent)
+bool ExpeIOPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &parlst, CallBackPos *cb, QWidget *parent)
{
// initializing mask
mask = 0;
@@ -107,7 +107,7 @@ bool ExpeIOPlugin::open(const QString &formatName, const QString &fileName, Mesh
return true;
}
-bool ExpeIOPlugin::save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet &, vcg::CallBackPos *cb, QWidget *parent)
+bool ExpeIOPlugin::save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet &, vcg::CallBackPos *cb, QWidget *parent)
{
QString errorMsgFormat = "Error encountered while exporting file %1:\n%2";
string filename = QFile::encodeName(fileName).constData ();
diff --git a/src/meshlabplugins/io_expe/io_expe.h b/src/meshlabplugins/io_expe/io_expe.h
index 123de59f5..314871d17 100644
--- a/src/meshlabplugins/io_expe/io_expe.h
+++ b/src/meshlabplugins/io_expe/io_expe.h
@@ -40,9 +40,9 @@ public:
QList exportFormats() const;
virtual void GetExportMaskCapability(QString &format, int &capability, int &defaultBits) const;
-// void initPreOpenParameter(const QString &/*format*/, const QString &/*fileName*/, FilterParameterSet & /*par*/);
- bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent=0);
- bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet &, vcg::CallBackPos *cb, QWidget *parent);
+// void initPreOpenParameter(const QString &/*format*/, const QString &/*fileName*/, RichParameterSet & /*par*/);
+ bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent=0);
+ bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet &, vcg::CallBackPos *cb, QWidget *parent);
};
#endif
diff --git a/src/meshlabplugins/io_gts/io_gts.cpp b/src/meshlabplugins/io_gts/io_gts.cpp
index 616ab1949..ec7cda85e 100644
--- a/src/meshlabplugins/io_gts/io_gts.cpp
+++ b/src/meshlabplugins/io_gts/io_gts.cpp
@@ -41,14 +41,14 @@ using namespace vcg;
// initialize importing parameters
-// void GtsIOPlugin::initPreOpenParameter(const QString &formatName, const QString &filename, FilterParameterSet &parlst)
+// void GtsIOPlugin::initPreOpenParameter(const QString &formatName, const QString &filename, RichParameterSet &parlst)
// {
// parlst.addBool("pointsonly",false,"Keep only points","Just import points, without triangulation");
// parlst.addBool("flipfaces",false,"Flip all faces","Flip the orientation of all the triangles");
// }
-bool GtsIOPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &parlst, CallBackPos *cb, QWidget *parent)
+bool GtsIOPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &parlst, CallBackPos *cb, QWidget *parent)
{
// initializing mask
mask = 0;
@@ -96,7 +96,7 @@ bool GtsIOPlugin::open(const QString &formatName, const QString &fileName, MeshM
return true;
}
-bool GtsIOPlugin::save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet &, vcg::CallBackPos *cb, QWidget *parent)
+bool GtsIOPlugin::save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet &, vcg::CallBackPos *cb, QWidget *parent)
{
QString errorMsgFormat = "Error encountered while exporting file %1:\n%2";
string filename = QFile::encodeName(fileName).constData ();
diff --git a/src/meshlabplugins/io_gts/io_gts.h b/src/meshlabplugins/io_gts/io_gts.h
index 447cdea61..9196030e4 100644
--- a/src/meshlabplugins/io_gts/io_gts.h
+++ b/src/meshlabplugins/io_gts/io_gts.h
@@ -40,9 +40,9 @@ public:
QList exportFormats() const;
virtual void GetExportMaskCapability(QString &format, int &capability, int &defaultBits) const;
-// void initPreOpenParameter(const QString &/*format*/, const QString &/*fileName*/, FilterParameterSet & /*par*/);
- bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent=0);
- bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet &, vcg::CallBackPos *cb, QWidget *parent);
+// void initPreOpenParameter(const QString &/*format*/, const QString &/*fileName*/, RichParameterSet & /*par*/);
+ bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent=0);
+ bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet &, vcg::CallBackPos *cb, QWidget *parent);
};
#endif
diff --git a/src/meshlabplugins/io_pdb/io_pdb.cpp b/src/meshlabplugins/io_pdb/io_pdb.cpp
index a368ece96..ba0c3ae8d 100644
--- a/src/meshlabplugins/io_pdb/io_pdb.cpp
+++ b/src/meshlabplugins/io_pdb/io_pdb.cpp
@@ -53,31 +53,31 @@ using namespace std;
using namespace vcg;
// initialize importing parameters
-void PDBIOPlugin::initPreOpenParameter(const QString &formatName, const QString &/*filename*/, FilterParameterSet &parlst)
+void PDBIOPlugin::initPreOpenParameter(const QString &formatName, const QString &/*filename*/, RichParameterSet &parlst)
{
if (formatName.toUpper() == tr("PDB"))
{
- parlst.addBool("usecolors",true,"Use Atoms colors","Atoms are colored according to atomic type");
- parlst.addBool("justpoints",false,"SURFACE: Atoms as Points","Atoms are created as points, no surface is built. Overrides all subsequential surface parameters");
- parlst.addBool("justspheres",true,"SURFACE: Atoms as Spheres","Atoms are created as intersecting spheres, no interpolation surface is built. Overrides all subsequential surface parameters");
- parlst.addBool("interpspheres",false,"SURFACE: Atoms as Jointed Spheres","Atoms are created as spheres, joining surface is built. Overrides all subsequential surface parameters");
- parlst.addBool("metaballs",false,"SURFACE: Atoms as Metaballs","Atoms are created as blobby interpolation surface, refer to BLINN Metaballs article. Overrides all subsequential surface parameters");
- parlst.addFloat("voxelsize",0.25,"Surface Resolution","is used by Jointed Spheres and Metaball");
- parlst.addFloat("blobby",2.0,"Blobbyness factor","is used by Metaball");
+ parlst.addParam(new RichBool("usecolors",true,"Use Atoms colors","Atoms are colored according to atomic type"));
+ parlst.addParam(new RichBool("justpoints",false,"SURFACE: Atoms as Points","Atoms are created as points, no surface is built. Overrides all subsequential surface parameters"));
+ parlst.addParam(new RichBool("justspheres",true,"SURFACE: Atoms as Spheres","Atoms are created as intersecting spheres, no interpolation surface is built. Overrides all subsequential surface parameters"));
+ parlst.addParam(new RichBool("interpspheres",false,"SURFACE: Atoms as Jointed Spheres","Atoms are created as spheres, joining surface is built. Overrides all subsequential surface parameters"));
+ parlst.addParam(new RichBool("metaballs",false,"SURFACE: Atoms as Metaballs","Atoms are created as blobby interpolation surface, refer to BLINN Metaballs article. Overrides all subsequential surface parameters"));
+ parlst.addParam(new RichFloat("voxelsize",0.25,"Surface Resolution","is used by Jointed Spheres and Metaball"));
+ parlst.addParam(new RichFloat("blobby",2.0,"Blobbyness factor","is used by Metaball"));
/*
- parlst.addInt("meshindex",0,"Index of Range Map to be Imported","PTX files may contain more than one range map. 0 is the first range map. If the number if higher than the actual mesh number, the import will fail");
- parlst.addBool("anglecull",true,"Cull faces by angle","short");
- parlst.addFloat("angle",85.0,"Angle limit for face culling","short");
- parlst.addBool("usecolor",true,"import color","Read color from PTX, if color is not present, uses reflectance instead");
- parlst.addBool("pointcull",true,"delete unsampled points","Deletes unsampled points in the grid that are normally located in [0,0,0]");
- parlst.addBool("pointsonly",false,"Keep only points","Just import points, without triangulation");
- parlst.addBool("switchside",false,"Swap rows/columns","On some PTX, the rows and columns number are switched over");
- parlst.addBool("flipfaces",false,"Flip all faces","Flip the orientation of all the triangles");
+ parlst.addParam(new RichInt("meshindex",0,"Index of Range Map to be Imported","PTX files may contain more than one range map. 0 is the first range map. If the number if higher than the actual mesh number, the import will fail");
+ parlst.addParam(new RichBool("anglecull",true,"Cull faces by angle","short");
+ parlst.addParam(new RichFloat("angle",85.0,"Angle limit for face culling","short");
+ parlst.addParam(new RichBool("usecolor",true,"import color","Read color from PTX, if color is not present, uses reflectance instead");
+ parlst.addParam(new RichBool("pointcull",true,"delete unsampled points","Deletes unsampled points in the grid that are normally located in [0,0,0]");
+ parlst.addParam(new RichBool("pointsonly",false,"Keep only points","Just import points, without triangulation");
+ parlst.addParam(new RichBool("switchside",false,"Swap rows/columns","On some PTX, the rows and columns number are switched over");
+ parlst.addParam(new RichBool("flipfaces",false,"Flip all faces","Flip the orientation of all the triangles");
*/
}
}
-bool PDBIOPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &parlst, CallBackPos *cb, QWidget * /*parent*/)
+bool PDBIOPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &parlst, CallBackPos *cb, QWidget * /*parent*/)
{
bool normalsUpdated = false;
@@ -144,7 +144,7 @@ bool PDBIOPlugin::open(const QString &formatName, const QString &fileName, MeshM
return true;
}
-bool PDBIOPlugin::save(const QString &formatName,const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet & par, CallBackPos *cb, QWidget */*parent*/)
+bool PDBIOPlugin::save(const QString &formatName,const QString &fileName, MeshModel &m, const int mask, const RichParameterSet & par, CallBackPos *cb, QWidget */*parent*/)
{
assert(0);
return false;
@@ -182,7 +182,7 @@ void PDBIOPlugin::GetExportMaskCapability(QString &format, int &capability, int
return;
}
-void PDBIOPlugin::initOpenParameter(const QString &format, MeshModel &/*m*/, FilterParameterSet &par)
+void PDBIOPlugin::initOpenParameter(const QString &format, MeshModel &/*m*/, RichParameterSet &par)
{
/*
if(format.toUpper() == tr("STL"))
@@ -190,7 +190,7 @@ void PDBIOPlugin::initOpenParameter(const QString &format, MeshModel &/*m*/, Fil
"The STL format is not an vertex-indexed format. Each triangle is composed by independent vertices, so, usually, duplicated vertices should be unified");
*/
}
-void PDBIOPlugin::initSaveParameter(const QString &format, MeshModel &/*m*/, FilterParameterSet &par)
+void PDBIOPlugin::initSaveParameter(const QString &format, MeshModel &/*m*/, RichParameterSet &par)
{
/*
if(format.toUpper() == tr("STL") || format.toUpper() == tr("PLY"))
@@ -198,7 +198,7 @@ void PDBIOPlugin::initSaveParameter(const QString &format, MeshModel &/*m*/, Fil
"Save the mesh using a binary encoding. If false the mesh is saved in a plain, readable ascii format");
*/
}
-void PDBIOPlugin::applyOpenParameter(const QString &format, MeshModel &m, const FilterParameterSet &par)
+void PDBIOPlugin::applyOpenParameter(const QString &format, MeshModel &m, const RichParameterSet &par)
{
/*
if(format.toUpper() == tr("STL"))
@@ -211,7 +211,7 @@ Q_EXPORT_PLUGIN(PDBIOPlugin)
//---------- PDB READER -----------//
-bool PDBIOPlugin::parsePDB(const std::string &filename, CMeshO &m, const FilterParameterSet &parlst, CallBackPos *cb)
+bool PDBIOPlugin::parsePDB(const std::string &filename, CMeshO &m, const RichParameterSet &parlst, CallBackPos *cb)
{
int atomNumber=0;
int atomIndex;
diff --git a/src/meshlabplugins/io_pdb/io_pdb.h b/src/meshlabplugins/io_pdb/io_pdb.h
index 9aa3a97be..b98570d58 100644
--- a/src/meshlabplugins/io_pdb/io_pdb.h
+++ b/src/meshlabplugins/io_pdb/io_pdb.h
@@ -41,16 +41,16 @@ public:
void GetExportMaskCapability(QString &format, int &capability, int &defaultBits) const;
- bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask,const FilterParameterSet & par, vcg::CallBackPos *cb=0, QWidget *parent=0);
- bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet & par, vcg::CallBackPos *cb=0, QWidget *parent= 0);
- virtual void initOpenParameter(const QString &format, MeshModel &/*m*/, FilterParameterSet & par);
- virtual void applyOpenParameter(const QString &format, MeshModel &m, const FilterParameterSet &par);
- void initPreOpenParameter(const QString &formatName, const QString &filename, FilterParameterSet &parlst);
+ bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask,const RichParameterSet & par, vcg::CallBackPos *cb=0, QWidget *parent=0);
+ bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet & par, vcg::CallBackPos *cb=0, QWidget *parent= 0);
+ virtual void initOpenParameter(const QString &format, MeshModel &/*m*/, RichParameterSet & par);
+ virtual void applyOpenParameter(const QString &format, MeshModel &m, const RichParameterSet &par);
+ void initPreOpenParameter(const QString &formatName, const QString &filename, RichParameterSet &parlst);
- virtual void initSaveParameter(const QString &format, MeshModel &/*m*/, FilterParameterSet & par);
+ virtual void initSaveParameter(const QString &format, MeshModel &/*m*/, RichParameterSet & par);
//---------- PDB READER -----------//
- bool parsePDB(const std::string &filename, CMeshO &m, const FilterParameterSet &parlst, vcg::CallBackPos *cb=0);
+ bool parsePDB(const std::string &filename, CMeshO &m, const RichParameterSet &parlst, vcg::CallBackPos *cb=0);
void mysscanf(const char* st, const char* format, float *f);
float getAtomRadius(const char* atomicElementCharP);
vcg::Color4b getAtomColor(const char* atomicElementCharP);
diff --git a/src/meshlabplugins/io_tri/io_tri.cpp b/src/meshlabplugins/io_tri/io_tri.cpp
index 31611c484..71a824217 100755
--- a/src/meshlabplugins/io_tri/io_tri.cpp
+++ b/src/meshlabplugins/io_tri/io_tri.cpp
@@ -39,16 +39,16 @@ using namespace vcg;
bool parseTRI(const std::string &filename, CMeshO &m);
-void TriIOPlugin::initPreOpenParameter(const QString &format, const QString &/*fileName*/, FilterParameterSet & parlst)
+void TriIOPlugin::initPreOpenParameter(const QString &format, const QString &/*fileName*/, RichParameterSet & parlst)
{
if(format.toUpper() == tr("ASC"))
{
- parlst.addInt("rowToSkip",0,"Header Row to be skipped","The number of lines that must be skipped at the beginning of the file.");
- parlst.addBool("triangulate", true, "Grid triangulation", "if true it assumes that the points are arranged in a complete xy grid and it tries to perform a naive height field triangulation of the input data. Lenght of the lines is detected automatically by searching x jumps. If the input point cloud data is not arranged as a xy regular height field, no triangles are created.");
+ parlst.addParam(new RichInt("rowToSkip",0,"Header Row to be skipped","The number of lines that must be skipped at the beginning of the file."));
+ parlst.addParam(new RichBool("triangulate", true, "Grid triangulation", "if true it assumes that the points are arranged in a complete xy grid and it tries to perform a naive height field triangulation of the input data. Lenght of the lines is detected automatically by searching x jumps. If the input point cloud data is not arranged as a xy regular height field, no triangles are created."));
}
}
-bool TriIOPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &parlst, CallBackPos *cb, QWidget *parent)
+bool TriIOPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &parlst, CallBackPos *cb, QWidget *parent)
{
bool result;
if(formatName.toUpper() == tr("TRI"))
@@ -75,7 +75,7 @@ bool TriIOPlugin::open(const QString &formatName, const QString &fileName, MeshM
return result;
}
-bool TriIOPlugin::save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet &, vcg::CallBackPos *cb, QWidget *parent)
+bool TriIOPlugin::save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet &, vcg::CallBackPos *cb, QWidget *parent)
{
assert(0);
return false;
diff --git a/src/meshlabplugins/io_tri/io_tri.h b/src/meshlabplugins/io_tri/io_tri.h
index 3df67261e..e3a8cfa9d 100755
--- a/src/meshlabplugins/io_tri/io_tri.h
+++ b/src/meshlabplugins/io_tri/io_tri.h
@@ -44,10 +44,10 @@ public:
QList importFormats() const;
QList exportFormats() const;
virtual void GetExportMaskCapability(QString &format, int &capability, int &defaultBits) const;
- virtual void initPreOpenParameter(const QString &/*format*/, const QString &/*fileName*/, FilterParameterSet & /*par*/);
+ virtual void initPreOpenParameter(const QString &/*format*/, const QString &/*fileName*/, RichParameterSet & /*par*/);
- bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent=0);
- bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet &, vcg::CallBackPos *cb, QWidget *parent);
+ bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent=0);
+ bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet &, vcg::CallBackPos *cb, QWidget *parent);
};
#endif
diff --git a/src/meshlabplugins/io_u3d/io_u3d.cpp b/src/meshlabplugins/io_u3d/io_u3d.cpp
index f6219bc85..01d6cd952 100644
--- a/src/meshlabplugins/io_u3d/io_u3d.cpp
+++ b/src/meshlabplugins/io_u3d/io_u3d.cpp
@@ -46,7 +46,7 @@ U3DIOPlugin::U3DIOPlugin()
}
-bool U3DIOPlugin::open(const QString & /*formatName*/, const QString &/*fileName*/, MeshModel &/*m*/, int& /*mask*/, const FilterParameterSet &, CallBackPos */*cb*/, QWidget */*parent*/)
+bool U3DIOPlugin::open(const QString & /*formatName*/, const QString &/*fileName*/, MeshModel &/*m*/, int& /*mask*/, const RichParameterSet &, CallBackPos */*cb*/, QWidget */*parent*/)
{
return false;
}
@@ -66,7 +66,7 @@ QString U3DIOPlugin::computePluginsPath()
}
-bool U3DIOPlugin::save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet & par, vcg::CallBackPos */*cb*/, QWidget *parent)
+bool U3DIOPlugin::save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet & par, vcg::CallBackPos */*cb*/, QWidget *parent)
{
vcg::tri::Allocator::CompactVertexVector(m.cm);
vcg::tri::Allocator::CompactFaceVector(m.cm);
@@ -191,22 +191,22 @@ void U3DIOPlugin::GetExportMaskCapability(QString &format, int &capability, int
// avoidExponentialNotation(p.Z(),bboxdiag));
//}
-void U3DIOPlugin::initSaveParameter(const QString &format, MeshModel &m, FilterParameterSet &par)
+void U3DIOPlugin::initSaveParameter(const QString &format, MeshModel &m, RichParameterSet &par)
{
_param._campar = new vcg::tri::io::u3dparametersclasses::Movie15Parameters::CameraParameters(m.cm.bbox.Center(),m.cm.bbox.Diag());
//vcg::Point3f pos = avoidExponentialNotation(_param._campar->_obj_pos,_param._campar->_obj_bbox_diag);
vcg::Point3f pos = _param._campar->_obj_pos;
vcg::Point3f dir(0.0f,0.0f,-1.0f * _param._campar->_obj_bbox_diag);
- par.addPoint3f("position_val",dir, "Camera Position",
- "The position in which the camera is set. The default value is derived by the 3d mesh's bounding box.");
+ par.addParam(new RichPoint3f("position_val",dir, "Camera Position",
+ "The position in which the camera is set. The default value is derived by the 3d mesh's bounding box."));
//vcg::Point3f dir(0.0f,0.0f,avoidExponentialNotation(-1.0f * _param._campar->_obj_bbox_diag,_param._campar->_obj_bbox_diag));
- par.addPoint3f("target_val",pos, "Camera target point",
- "The point towards the camera is seeing. The default value is derived by the 3d mesh's bounding box.");
- par.addFloat("fov_val",60.0f,"Camera's FOV Angle 0..180","Camera's FOV Angle. The values' range is between 0-180 degree. The default value is 60.");
- par.addInt("compression_val",500,"U3D quality 0..1000","U3D mesh's compression ratio. The values' range is between 0-1000 degree. The default value is 500.");
+ par.addParam(new RichPoint3f("target_val",pos, "Camera target point",
+ "The point towards the camera is seeing. The default value is derived by the 3d mesh's bounding box."));
+ par.addParam(new RichFloat("fov_val",60.0f,"Camera's FOV Angle 0..180","Camera's FOV Angle. The values' range is between 0-180 degree. The default value is 60."));
+ par.addParam(new RichInt("compression_val",500,"U3D quality 0..1000","U3D mesh's compression ratio. The values' range is between 0-1000 degree. The default value is 500."));
}
-void U3DIOPlugin::saveParameters(const FilterParameterSet &par)
+void U3DIOPlugin::saveParameters(const RichParameterSet &par)
{
vcg::Point3f from_target_to_camera = vcg::Point3f(- par.getPoint3f(QString("position_val")) + par.getPoint3f(QString("target_val")));
vcg::tri::io::u3dparametersclasses::Movie15Parameters::CameraParameters* sw = _param._campar;
diff --git a/src/meshlabplugins/io_u3d/io_u3d.h b/src/meshlabplugins/io_u3d/io_u3d.h
index c7324155f..d6cbbf0fc 100644
--- a/src/meshlabplugins/io_u3d/io_u3d.h
+++ b/src/meshlabplugins/io_u3d/io_u3d.h
@@ -47,16 +47,16 @@ class U3DIOPlugin : public QObject, public MeshIOInterface
virtual void GetExportMaskCapability(QString &format, int &capability, int &defaultBits) const;
- bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent=0);
- bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent= 0);
+ bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent=0);
+ bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent= 0);
- void initSaveParameter(const QString &format, MeshModel &/*m*/, FilterParameterSet &par);
+ void initSaveParameter(const QString &format, MeshModel &/*m*/, RichParameterSet &par);
private:
QString computePluginsPath();
- void saveParameters(const FilterParameterSet &par);
+ void saveParameters(const RichParameterSet &par);
vcg::tri::io::u3dparametersclasses::Movie15Parameters _param;
};
diff --git a/src/meshlabplugins/io_x3d/io_x3d.cpp b/src/meshlabplugins/io_x3d/io_x3d.cpp
index 9b3bae00f..74f807d1b 100644
--- a/src/meshlabplugins/io_x3d/io_x3d.cpp
+++ b/src/meshlabplugins/io_x3d/io_x3d.cpp
@@ -79,7 +79,7 @@
using namespace std;
using namespace vcg;
-bool IoX3DPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &, CallBackPos *cb, QWidget *parent)
+bool IoX3DPlugin::open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &, CallBackPos *cb, QWidget *parent)
{
// initializing mask
mask = 0;
@@ -170,7 +170,7 @@ bool IoX3DPlugin::open(const QString &formatName, const QString &fileName, MeshM
}
-bool IoX3DPlugin::save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet &, vcg::CallBackPos *cb, QWidget *parent)
+bool IoX3DPlugin::save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet &, vcg::CallBackPos *cb, QWidget *parent)
{
QString errorMsgFormat = "Error encountered while exportering file:\n%1\n\nError details: %2";
string filename = QFile::encodeName(fileName).constData ();
diff --git a/src/meshlabplugins/io_x3d/io_x3d.h b/src/meshlabplugins/io_x3d/io_x3d.h
index 251eb0da9..109fa0efe 100644
--- a/src/meshlabplugins/io_x3d/io_x3d.h
+++ b/src/meshlabplugins/io_x3d/io_x3d.h
@@ -49,8 +49,8 @@ public:
virtual void GetExportMaskCapability(QString &format, int &capability, int &defaultBits) const;
- bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const FilterParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent=0);
- bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const FilterParameterSet &, vcg::CallBackPos *cb, QWidget *parent);
+ bool open(const QString &formatName, const QString &fileName, MeshModel &m, int& mask, const RichParameterSet &, vcg::CallBackPos *cb=0, QWidget *parent=0);
+ bool save(const QString &formatName, const QString &fileName, MeshModel &m, const int mask, const RichParameterSet &, vcg::CallBackPos *cb, QWidget *parent);
};
#endif
diff --git a/src/meshlabplugins/meshdecorate/meshdecorate.cpp b/src/meshlabplugins/meshdecorate/meshdecorate.cpp
index 2a74bc519..ec412e9f5 100644
--- a/src/meshlabplugins/meshdecorate/meshdecorate.cpp
+++ b/src/meshlabplugins/meshdecorate/meshdecorate.cpp
@@ -76,7 +76,7 @@ const QString ExtraMeshDecoratePlugin::ST(FilterIDType filter) const
return QString("error!");
}
-void ExtraMeshDecoratePlugin::Decorate(QAction *a, MeshModel &m, FilterParameterSet */*rm*/, GLArea *gla, QFont qf)
+void ExtraMeshDecoratePlugin::Decorate(QAction *a, MeshModel &m, RichParameterSet */*rm*/, GLArea *gla, QFont qf)
{
glPushMatrix();
glMultMatrix(m.cm.Tr);
diff --git a/src/meshlabplugins/meshdecorate/meshdecorate.h b/src/meshlabplugins/meshdecorate/meshdecorate.h
index 4a6764b8a..37ff3d3df 100644
--- a/src/meshlabplugins/meshdecorate/meshdecorate.h
+++ b/src/meshlabplugins/meshdecorate/meshdecorate.h
@@ -178,7 +178,7 @@ public:
QHash isMeshOk;
- virtual void Decorate(QAction *a, MeshModel &m, FilterParameterSet *, GLArea *gla,QFont qf);
+ virtual void Decorate(QAction *a, MeshModel &m, RichParameterSet *, GLArea *gla,QFont qf);
virtual bool StartDecorate(QAction * /*mode*/, MeshModel &/*m*/, GLArea * /*parent*/);
};
diff --git a/src/meshlabserver/mainserver.cpp b/src/meshlabserver/mainserver.cpp
index f01f26b60..c25b0fe01 100644
--- a/src/meshlabserver/mainserver.cpp
+++ b/src/meshlabserver/mainserver.cpp
@@ -132,7 +132,7 @@ bool Open(MeshModel &mm, QString fileName)
int mask = 0;
- FilterParameterSet prePar;
+ RichParameterSet prePar;
pCurrentIOPlugin->initPreOpenParameter(extension, fileName,prePar);
if (!pCurrentIOPlugin->open(extension, fileName, mm ,mask,prePar))
@@ -174,7 +174,7 @@ bool Save(MeshModel *mm, int mask, QString fileName)
MeshIOInterface* pCurrentIOPlugin = meshIOPlugins[idx-1];
// optional saving parameters (like ascii/binary encoding)
- FilterParameterSet savePar;
+ RichParameterSet savePar;
pCurrentIOPlugin->initSaveParameter(extension, *mm, savePar);
if (!pCurrentIOPlugin->save(extension, fileName, *mm ,mask, savePar))
@@ -203,8 +203,9 @@ bool Script(MeshDocument &meshDocument, QString scriptfile){
scriptPtr.open(scriptfile);
printf("Starting Script of %i actions",scriptPtr.actionList.size());
FilterScript::iterator ii;
- for(ii = scriptPtr.actionList.begin();ii!= scriptPtr.actionList.end();++ii){
- FilterParameterSet &par = (*ii).second;
+ for(ii = scriptPtr.actionList.begin();ii!= scriptPtr.actionList.end();++ii)
+ {
+ RichParameterSet &par = (*ii).second;
QString &name = (*ii).first;
printf("filter: %s\n",qPrintable((*ii).first));
@@ -213,31 +214,6 @@ bool Script(MeshDocument &meshDocument, QString scriptfile){
iFilter->setLog(NULL);
int req = iFilter->getRequirements(action);
mm.updateDataMask(req);
-
-
-
- //make sure the PARMESH parameters are initialized
- FilterParameterSet ¶meterSet = (*ii).second;
- for(int i = 0; i < parameterSet.paramList.size(); i++)
- {
- //get a modifieable reference
- FilterParameter ¶meter = parameterSet.paramList[i];
-
- //if this is a mesh paramter and the index is valid
- if(parameter.fieldType == FilterParameter::PARMESH)
- {
- if( parameter.fieldVal.toInt() < meshDocument.size() &&
- parameter.fieldVal.toInt() >= 0 )
- {
- parameter.pointerVal = meshDocument.getMesh(parameter.fieldVal.toInt());
- } else
- {
- printf("Meshes loaded: %i, meshes asked for: %i \n", meshDocument.size(), parameter.fieldVal.toInt() );
- printf("One of the filters in the script needs more meshes than you have loaded.\n");
- exit(-1);
- }
- }
- }
bool ret = iFilter->applyFilter( action, meshDocument, (*ii).second, NULL);
//iFilter->applyFilter( action, mm, (*ii).second, QCallBack );
diff --git a/src/sample/block.off b/src/sample/block.off
index b14a886ab..a18ba8711 100644
--- a/src/sample/block.off
+++ b/src/sample/block.off
@@ -1,2137 +1,2137 @@
OFF
2132 4272 0
--0.165639 -5.573223 -18.999933
--0.461723 -6.632682 -18.999977
--1.123145 -5.856486 -18.999767
-1.337052 -5.619015 -19.000029
-0.762372 -6.350244 -18.999895
-2.820900 -5.742386 -18.999819
-2.408428 -6.366748 -18.999821
-4.120584 -5.888971 -18.999855
-4.075361 -6.620109 -18.999723
-5.162054 -5.604235 -18.999794
-4.564273 -6.432123 -18.999977
-5.177588 -6.145572 -18.999548
--1.476656 -4.572156 -18.999788
--2.073483 -5.835238 -18.999626
--2.616405 -4.620805 -18.999660
--0.231328 -4.398811 -18.999969
-0.882585 -4.640382 -19.000013
-2.276970 -4.703317 -19.000065
-3.658001 -4.746932 -19.000027
-4.911416 -4.703702 -18.999893
-6.026997 -5.384893 -18.999716
-6.311928 -4.527776 -18.999842
-6.883448 -4.824081 -18.999786
--2.944314 -3.165492 -18.999743
--3.878798 -4.092359 -18.999636
--3.977383 -3.167244 -18.999697
--1.602759 -3.083865 -19.000050
--0.533028 -3.338088 -19.000050
-0.747356 -3.399177 -19.000040
-2.094094 -3.433646 -19.000071
-3.477786 -3.443073 -19.000105
-4.843198 -3.434270 -19.000044
-6.201754 -3.419271 -18.999908
-7.346195 -3.962304 -18.999708
-7.205399 -3.473065 -18.999910
-7.773500 -3.648923 -18.999828
--4.186573 -1.976305 -18.999887
--4.798323 -2.368695 -18.999729
--5.006764 -1.656656 -18.999937
--3.002518 -1.741401 -18.999868
--1.917867 -1.963628 -19.000002
--0.635057 -2.025666 -19.000088
-0.701450 -2.058856 -19.000067
-2.070887 -2.067044 -19.000055
-3.448277 -2.068965 -19.000088
-4.820169 -2.071731 -19.000107
-6.094645 -2.116445 -18.999996
-7.086842 -2.324033 -18.999861
-7.802579 -2.716221 -19.000017
--4.415977 -0.716459 -18.999849
--5.179081 -0.746684 -18.999792
--3.275583 -0.744755 -18.999821
--2.014131 -0.664914 -18.999922
--0.677856 -0.679602 -19.000038
-0.691577 -0.687734 -19.000061
-2.068966 -0.689655 -19.000048
-3.448277 -0.689655 -19.000057
-4.820041 -0.692442 -19.000082
-6.094861 -0.736049 -19.000027
-7.068658 -0.935413 -18.999882
-7.805267 -1.405900 -18.999884
--4.419942 0.746970 -18.999763
--5.201444 0.504959 -18.999733
--3.397708 0.595431 -18.999805
--2.056776 0.677680 -18.999928
--0.687734 0.691576 -19.000017
-0.689656 0.689656 -19.000044
-2.068966 0.689656 -19.000032
-3.446356 0.687735 -19.000015
-4.810293 0.684958 -19.000025
-6.083338 0.654945 -19.000025
-7.068028 0.477729 -18.999941
-7.786904 0.107304 -18.999905
--4.538282 1.938491 -18.999763
--5.003533 1.713495 -18.999290
--3.571108 1.923630 -18.999743
--2.075072 2.049625 -18.999943
--0.689655 2.068966 -19.000042
-0.689656 2.068966 -19.000063
-2.067045 2.067045 -19.000021
-3.434908 2.062380 -18.999950
-4.759802 2.039359 -18.999901
-6.000494 2.036689 -18.999926
-7.062859 1.973648 -18.999969
-7.787110 1.630417 -18.999935
--4.777190 2.401598 -18.999893
--4.342964 3.377796 -18.999943
--3.637575 3.038409 -18.999880
--2.063604 3.313786 -18.999937
--0.710220 3.420887 -19.000029
-0.666008 3.441584 -19.000093
-2.045688 3.437157 -19.000040
-3.392011 3.418610 -18.999918
-4.650108 3.397501 -18.999823
-5.674852 3.215365 -18.999809
-6.814051 3.379959 -18.999891
-8.068855 3.130511 -19.000080
--3.204801 4.177232 -18.999821
--2.708986 4.863453 -18.999645
--2.178935 4.494017 -18.999790
--0.781654 4.635417 -18.999968
-0.525132 4.698227 -19.000046
-1.902239 4.709037 -19.000050
-3.311563 4.717488 -18.999939
-4.344522 4.539327 -18.999840
-5.612260 4.739365 -18.999855
-6.657412 4.681859 -18.999718
-7.600099 3.945461 -18.999701
--1.890565 5.407166 -18.999786
--1.280917 6.293409 -18.999954
--0.973609 5.590141 -18.999937
-0.199929 5.697699 -18.999987
-1.529724 5.636674 -19.000013
-3.030383 5.703650 -18.999973
-4.500709 5.768940 -18.999914
-5.364489 6.029878 -18.999949
-6.033417 5.590828 -18.999685
--0.241275 6.696087 -18.999952
-1.037525 6.362198 -18.999889
-2.663652 6.375185 -18.999886
-4.185058 6.585073 -18.999950
-4.804520 6.330125 -18.999788
--0.421235 -6.656398 -17.394541
--1.325104 -6.282555 -18.999352
-0.679138 -6.941752 -18.998863
-2.219468 -7.013837 -18.999493
-3.523093 -6.803488 -18.999224
-4.469324 -6.485635 -18.998613
-5.353630 -6.048399 -17.350197
--2.210487 -5.760900 -18.996775
--3.023957 -5.085801 -18.999786
-6.141503 -5.516292 -18.998859
-6.865561 -4.854255 -17.475771
--3.731118 -4.322264 -18.997108
--4.339971 -3.406544 -18.999203
-7.481360 -4.116399 -18.998747
-7.969987 -3.332854 -18.999718
--4.728674 -2.563595 -17.297010
--5.031064 -1.596630 -18.129869
-8.411844 -2.353575 -18.999949
--5.208095 -0.470022 -17.866573
-8.757138 -1.012049 -18.999840
--5.185600 0.701961 -17.534266
-8.808786 0.585674 -18.999817
--5.011068 1.673966 -17.017660
-8.491404 2.150793 -18.999369
--4.722659 2.579336 -18.998030
--4.282218 3.503800 -17.424923
-8.044873 3.200831 -17.962170
--3.780249 4.254243 -18.999582
--2.970770 5.149286 -18.998568
-6.869936 4.852803 -18.998613
-7.500493 4.090209 -17.228884
--2.067351 5.850922 -18.999632
--1.364075 6.261341 -17.414753
-5.385894 6.027542 -18.328382
-6.195252 5.467305 -17.418821
--0.437590 6.653239 -18.997763
-0.715309 6.946962 -18.999067
-2.253762 7.011704 -18.999500
-3.566900 6.792746 -18.999182
-4.551359 6.448752 -18.204193
--0.410703 -6.661936 -15.520120
--1.355857 -6.264984 -16.619106
-0.723711 -6.942080 -16.014507
-1.991220 -7.027766 -16.342434
-3.315130 -6.860070 -16.499054
-4.440370 -6.502453 -16.750357
-5.340881 -6.054998 -15.630901
--2.255679 -5.725521 -15.740212
--3.022705 -5.097826 -16.715780
-6.135752 -5.513404 -16.506947
-6.863369 -4.856042 -15.683711
--3.722247 -4.328760 -15.713997
--4.295989 -3.474068 -16.517559
-7.501554 -4.089353 -16.818617
-8.053320 -3.185141 -16.612186
--4.717000 -2.594954 -15.620216
--5.030748 -1.610578 -16.584778
-8.512047 -2.073994 -16.704716
--5.203835 -0.526693 -16.117393
-8.806722 -0.652415 -16.739500
--5.196726 0.593576 -15.773910
-8.783015 0.846560 -16.582325
--5.017540 1.658304 -15.395155
-8.503728 2.097052 -16.305576
--4.713121 2.605515 -16.397495
--4.270517 3.519660 -15.651779
-8.066547 3.163192 -15.880778
--3.695637 4.363139 -16.583355
--3.008401 5.108599 -15.770120
-6.906489 4.807900 -16.490080
-7.536606 4.038611 -15.443035
--2.225489 5.745513 -16.678457
--1.363050 6.262885 -15.499363
-5.377783 6.035960 -16.676319
-6.183223 5.477926 -15.659595
--0.390271 6.668847 -15.842120
-0.736952 6.943652 -16.126841
-2.001362 7.026815 -16.344479
-3.324223 6.858053 -16.382347
-4.452676 6.496666 -16.346155
--0.408345 -6.663945 -13.954590
--1.404649 -6.241850 -14.862558
-0.750153 -6.947196 -14.328809
-2.050089 -7.024825 -14.520862
-3.320537 -6.858996 -14.731099
-4.424042 -6.508613 -15.046970
-5.322532 -6.065605 -14.121890
--2.274212 -5.711545 -14.154254
--3.039441 -5.079315 -14.894130
-6.133159 -5.517176 -14.851393
-6.860979 -4.858759 -14.133094
--3.719398 -4.332030 -14.156790
--4.285974 -3.491872 -14.866487
-7.510243 -4.077416 -15.059217
-8.060410 -3.174897 -14.742910
--4.714750 -2.600443 -14.127056
--5.020209 -1.647209 -14.990906
-8.524588 -2.042871 -14.667617
--5.197890 -0.577524 -14.606171
-8.804032 -0.665392 -14.637739
--5.198924 0.568878 -14.301943
-8.794391 0.733384 -14.563951
--5.022644 1.642696 -13.918367
-8.526978 2.029423 -14.486143
--4.707623 2.619859 -14.834816
--4.262901 3.532387 -14.144992
-8.087508 3.120808 -14.308061
--3.689566 4.370242 -14.888531
--2.998945 5.117379 -14.158689
-6.908790 4.808465 -14.833581
-7.547887 4.023495 -13.954211
--2.227340 5.744803 -14.877048
--1.346685 6.272311 -13.957561
-5.366254 6.040805 -15.014498
-6.180680 5.480055 -14.133834
--0.372490 6.674899 -14.307992
-0.766306 6.948890 -14.450423
-2.070075 7.024910 -14.496114
-3.334786 6.856692 -14.617575
-4.443177 6.501784 -14.721889
--0.318432 -6.695818 -12.163453
--1.397950 -6.246614 -13.344915
-0.823404 -6.958866 -12.637669
-2.053232 -7.023069 -12.946634
-3.313560 -6.858580 -13.092209
-4.414396 -6.511841 -13.444628
-5.312486 -6.072024 -12.391240
--2.265884 -5.717878 -12.649908
--3.040109 -5.078373 -13.439447
-6.121315 -5.526526 -13.305403
-6.846072 -4.873465 -12.415820
--3.729314 -4.321495 -12.677643
--4.286255 -3.491529 -13.393528
-7.500516 -4.090383 -13.478516
-8.055758 -3.186780 -13.169513
--4.707448 -2.613953 -12.464479
--5.017308 -1.657663 -13.363405
-8.515320 -2.078118 -13.051853
--5.193908 -0.627830 -12.985748
-8.794633 -0.745398 -12.995745
--5.205478 0.504980 -12.559045
-8.801219 0.664622 -13.034389
--5.019536 1.655098 -12.191317
-8.549723 1.958513 -12.951862
--4.704885 2.627878 -13.334602
--4.261400 3.534135 -12.619902
-8.111174 3.075566 -12.749157
--3.687815 4.372269 -13.432957
--3.003130 5.113585 -12.698553
-6.917823 4.798900 -13.298219
-7.572776 3.990231 -12.247713
--2.222056 5.749259 -13.381355
--1.321282 6.285887 -12.211472
-5.377876 6.033880 -13.485123
-6.203483 5.460897 -12.443540
--0.267109 6.711230 -12.500576
-0.847614 6.961692 -12.779180
-2.072503 7.022956 -12.870871
-3.388499 6.844315 -12.868088
-4.484243 6.484571 -13.064227
--0.400608 -6.675842 -10.000947
--1.367807 -6.261198 -11.601811
-0.891959 -6.969805 -10.002173
-2.111283 -7.016342 -10.002074
-3.299979 -6.861220 -10.002430
-4.379614 -6.526729 -11.461821
-5.276550 -6.099892 -10.001004
--2.257809 -5.722184 -11.058659
--3.038298 -5.082352 -11.920617
-6.122053 -5.525905 -11.515967
-6.853882 -4.865211 -10.782982
--3.755836 -4.287035 -11.108328
--4.316311 -3.437725 -11.722515
-7.466073 -4.135733 -11.576698
-8.020292 -3.251613 -11.017416
--4.716969 -2.594116 -10.000961
--4.999873 -1.719877 -11.342630
-8.503738 -2.100134 -11.068405
--5.189658 -0.725674 -10.001967
-8.786741 -0.777212 -11.326254
--5.204514 0.603583 -10.001227
-8.802476 0.611000 -11.369303
--4.964613 1.876791 -10.000495
-8.560858 1.909610 -11.149176
--4.689806 2.659680 -11.644715
--4.241360 3.564041 -11.021438
-8.137661 3.018310 -10.812011
--3.687264 4.374627 -11.898881
--2.964126 5.151313 -11.181742
-6.936994 4.779319 -11.518385
-7.583722 3.980274 -10.000742
--2.223717 5.746185 -11.777360
--1.401633 6.243301 -10.002298
-5.428456 6.003206 -11.656769
-6.224125 5.443000 -10.799882
--0.285183 6.713306 -10.002426
-0.964337 6.977686 -10.001996
-2.133778 7.014220 -10.001637
-3.348632 6.854147 -10.001760
-4.504269 6.478266 -11.048509
--0.720948 -6.928852 -9.999931
--1.594241 -6.136552 -10.000312
-0.439274 -6.867991 -9.999896
-1.688904 -7.000162 -10.000152
-2.840354 -6.923121 -10.000202
-4.260046 -6.563911 -10.000011
-5.445410 -6.305882 -9.999956
--2.289205 -5.689465 -10.000236
--3.070853 -5.058268 -10.001080
-6.214115 -5.449193 -10.000143
-6.858390 -4.849928 -9.999802
--3.758603 -4.267620 -10.000113
--4.246625 -3.552272 -10.000269
-7.516863 -4.075599 -10.000308
-8.166223 -2.951466 -9.999951
--4.986446 -2.756034 -10.000077
--4.985199 -1.747506 -9.999954
-8.590415 -1.782308 -9.999966
--5.193737 -0.356820 -9.999608
-8.806740 -0.471123 -10.000157
--5.117985 1.087395 -9.999471
-8.766995 0.880242 -10.000215
--5.302761 2.162848 -9.999762
-8.481910 2.150902 -9.999894
--4.563984 2.940450 -10.000133
--4.124532 3.750248 -10.000196
-8.072631 3.128069 -9.999865
--3.655359 4.413848 -10.546494
--3.022754 5.092469 -10.000499
-6.863836 4.852492 -9.999966
-7.821033 4.206524 -9.999940
--2.219922 5.747849 -10.000394
--1.646290 6.094517 -10.000150
-5.422164 6.014023 -10.000038
-6.230863 5.428445 -9.999673
--0.538707 6.608978 -10.000111
-0.854227 6.945774 -10.000006
-2.015121 7.002833 -10.000026
-3.094553 6.886382 -9.999997
-4.439874 6.495217 -9.999701
--8.197086 -9.997589 -9.999541
--8.199067 -9.999600 -8.716067
--8.199409 -8.696136 -9.997756
--5.781787 -9.997543 -9.999446
--6.421419 -9.999472 -9.997104
--4.375885 -9.997828 -9.999455
--4.955079 -9.999506 -9.997752
--3.006303 -9.997700 -9.999463
--3.561000 -9.999508 -9.997672
--1.652116 -9.997658 -9.999422
--2.173668 -9.999477 -9.997780
--0.245533 -9.997670 -9.999454
--0.784858 -9.999476 -9.997809
-1.145544 -9.997683 -9.999497
-0.591992 -9.999488 -9.997816
-2.520945 -9.997649 -9.999510
-1.965135 -9.999486 -9.997804
-3.908123 -9.997543 -9.999378
-3.348468 -9.999459 -9.997861
-5.308175 -9.997520 -9.999248
-4.730516 -9.999423 -9.997422
-6.678235 -9.997456 -9.999186
-6.109396 -9.999385 -9.997457
-8.080564 -9.997587 -9.999315
-7.500117 -9.999391 -9.997400
-9.617836 -9.997139 -9.999391
-9.001713 -9.999300 -9.997132
-11.797565 -9.057693 -10.000415
-10.597147 -9.999520 -9.998665
-11.799543 -8.799160 -9.997790
-11.799539 -9.998816 -9.998493
-11.799337 -9.038968 -8.606289
--8.198895 -7.742308 -9.999577
--8.199457 -7.628617 -9.257527
--6.284545 -7.792484 -9.999421
--4.766076 -7.805584 -9.999451
--3.413266 -7.854074 -9.999515
--2.270303 -8.138656 -9.999458
--0.871405 -7.838208 -9.999558
-0.722910 -8.127664 -9.999661
-2.045268 -8.146546 -9.999733
-3.346699 -8.054918 -9.999661
-4.978243 -7.632292 -9.999560
-6.414917 -7.733258 -9.999399
-7.753506 -7.708609 -9.999392
-9.273371 -7.692310 -9.999468
-10.817455 -7.789749 -9.999403
-11.799412 -7.779394 -9.999247
-11.799374 -8.133942 -8.664234
--8.198868 -6.315583 -9.999582
--8.199468 -5.925711 -9.996849
--6.563265 -6.374945 -9.999517
--4.937477 -6.410377 -9.999699
--3.769089 -6.645193 -9.999577
--2.309842 -6.564626 -9.999692
-6.466720 -6.127551 -9.999690
-7.717245 -6.186673 -9.999544
-9.146501 -6.146393 -9.999430
-10.777307 -6.236406 -9.999344
-11.799574 -6.395100 -9.999305
-11.799397 -6.882066 -8.766532
--8.197493 -4.905184 -9.999464
--8.199444 -4.531807 -9.996873
--6.661044 -5.053992 -9.999547
--5.173023 -5.397469 -9.999743
--3.614792 -5.279174 -9.999962
-7.822600 -4.723773 -9.999763
-9.148055 -4.696765 -9.999522
-10.772377 -4.827792 -9.999338
-11.799680 -5.023424 -9.999307
-11.799520 -5.529768 -8.802168
--8.197610 -3.625628 -9.999538
--8.199486 -3.165943 -9.997169
--6.794203 -3.993701 -9.999626
--5.025950 -4.000316 -9.999805
-9.154870 -2.849803 -9.999709
-10.765962 -3.353853 -9.999418
-11.799719 -3.640823 -9.999392
-11.799555 -4.148968 -8.806036
--8.197663 -2.200317 -9.999600
--8.199505 -1.782159 -9.997161
--6.389792 -2.682891 -9.999742
-9.465948 -1.309395 -9.999745
-10.767172 -1.890117 -9.999478
-11.799747 -2.254328 -9.999434
-11.799583 -2.761179 -8.812508
--8.197810 -0.848804 -9.999594
--8.199508 -0.407458 -9.997053
--6.713641 -1.252895 -9.999747
-9.470627 0.042371 -9.999876
-10.783956 -0.492653 -9.999573
-11.799766 -0.870305 -9.999471
-11.799607 -1.372826 -8.815663
--8.197782 0.504463 -9.999574
--8.199501 0.971744 -9.997130
--6.811318 0.162145 -9.999670
-9.457400 1.391088 -9.999795
-10.785440 0.876938 -9.999584
-11.799765 0.510227 -9.999487
-11.799617 0.012581 -8.814260
--8.197620 1.962345 -9.999605
--8.199506 2.359677 -9.997253
--6.497678 1.852556 -9.999640
-9.395690 2.701666 -9.999727
-10.788474 2.240891 -9.999500
-11.799747 1.889653 -9.999460
-11.799599 1.391442 -8.815294
--8.197556 3.367060 -9.999596
--8.199503 3.748702 -9.997163
--6.622739 3.377849 -9.999564
--4.939245 3.324420 -9.999815
-9.075632 4.154729 -9.999699
-10.797721 3.634703 -9.999436
-11.799722 3.268076 -9.999415
-11.799573 2.768099 -8.814678
--8.197506 4.759051 -9.999463
--8.199454 5.140103 -9.996816
--6.603458 4.752068 -9.999467
--4.876116 4.687325 -9.999647
--3.596853 4.470874 -10.000001
-7.849902 5.360943 -9.999687
-9.483107 5.400774 -9.999507
-10.781439 4.975497 -9.999344
-11.799677 4.646227 -9.999357
-11.799533 4.148460 -8.808810
--8.197443 6.167029 -9.999425
--8.199409 6.531978 -9.997680
--6.604771 6.149668 -9.999390
--4.936182 6.135021 -9.999449
--3.572213 6.092749 -9.999702
--2.451163 5.953185 -9.999896
-6.402214 6.673689 -9.999610
-7.945500 6.708607 -9.999544
-9.209959 6.438878 -9.999479
-10.795531 6.279743 -9.999340
-11.799589 6.021252 -9.999226
-11.799470 5.520098 -8.804151
--8.198523 7.587330 -9.999629
--8.199303 7.724271 -8.980122
--6.594853 7.664030 -9.999280
--5.036320 7.640518 -9.999417
--3.597762 7.712246 -9.999355
--2.270836 7.726063 -9.999474
--0.922407 7.756612 -9.999634
-0.655862 8.068737 -9.999626
-1.925484 8.155303 -9.999682
-3.192561 8.125588 -9.999692
-4.854494 7.877717 -9.999579
-6.407773 8.204655 -9.999369
-7.555892 7.894943 -9.999517
-8.989082 7.847031 -9.999428
-10.603476 7.721271 -9.999468
-11.799506 7.418404 -9.999415
-11.799397 6.877194 -8.799346
--8.199263 8.903291 -9.999499
--8.199424 9.997242 -8.599353
--6.731197 9.997187 -9.999447
--5.286429 9.997339 -9.999399
--3.873603 9.997865 -9.999288
--2.493809 9.997478 -9.999219
--1.129630 9.997541 -9.999272
-0.257248 9.997542 -9.999388
-1.641368 9.997647 -9.999502
-3.017100 9.997674 -9.999477
-4.419827 9.997665 -9.999426
-5.835939 9.997657 -9.999381
-7.191218 9.997732 -9.999430
-8.577856 9.997912 -9.999694
-10.125374 9.997486 -9.999679
-11.799546 8.793805 -9.999454
-11.799381 8.257704 -8.761130
--8.197162 9.999694 -9.997536
--5.842711 9.999352 -9.997362
--4.418329 9.999475 -9.997643
--3.038747 9.999500 -9.997452
--1.665510 9.999434 -9.997465
--0.284061 9.999464 -9.997411
-1.094400 9.999503 -9.997859
-2.470650 9.999520 -9.997791
-3.856460 9.999516 -9.997779
-5.245696 9.999507 -9.997786
-6.628714 9.999508 -9.997760
-8.016776 9.999541 -9.997634
-9.464401 9.999571 -9.998288
-11.798951 9.999917 -9.997349
-11.799402 9.315673 -8.675556
--8.198434 -9.999648 -7.275680
--8.199415 -9.008153 -8.183144
--6.535277 -9.999402 -7.615333
--4.974464 -9.999445 -7.764457
--3.569772 -9.999507 -7.744366
--2.201797 -9.999516 -7.681486
--0.678205 -9.999609 -7.678342
-0.720812 -9.999534 -7.758585
-2.002483 -9.999392 -7.709468
-3.358394 -9.999538 -7.650822
-4.784429 -9.999563 -7.705940
-6.140139 -9.999550 -7.698178
-7.521829 -9.999500 -7.680385
-9.007818 -9.999413 -7.628045
-10.608386 -9.999270 -7.831657
-11.799378 -9.999377 -8.044714
-11.799425 -8.888695 -7.639390
--8.199463 -7.607832 -7.807794
-11.799430 -7.715961 -7.507819
--8.199475 -6.133699 -7.660379
-11.799476 -6.394962 -7.538971
--8.199500 -4.755322 -7.633470
-11.799466 -5.022318 -7.543217
--8.199518 -3.389469 -7.641518
-11.799461 -3.595009 -7.567367
--8.199512 -2.018294 -7.650225
-11.799475 -2.114996 -7.625445
--8.199518 -0.652008 -7.666768
-11.799520 -0.739170 -7.610875
--8.199518 0.718899 -7.679207
-11.799486 0.617350 -7.588253
--8.199525 2.073963 -7.680296
-11.799434 2.017823 -7.625350
--8.199538 3.550204 -7.660015
-11.799444 3.405694 -7.607674
--8.199531 5.009249 -7.675735
-11.799396 4.784847 -7.568297
--8.199511 6.333641 -7.650737
-11.799357 6.061503 -7.568983
--8.199471 7.734221 -7.516476
-11.799384 7.356416 -7.587458
--8.199567 9.173730 -7.057881
-11.799429 8.684653 -7.640934
--8.199142 9.999617 -7.637571
--6.296588 9.999453 -7.771146
--4.752046 9.999473 -7.762884
--3.384683 9.999565 -7.749969
--2.106153 9.999585 -7.687098
--0.694825 9.999597 -7.668640
-0.710558 9.999669 -7.723806
-1.988463 9.999670 -7.727983
-3.367740 9.999622 -7.728632
-4.866497 9.999627 -7.728609
-6.327654 9.999587 -7.730477
-7.733594 9.999537 -7.709217
-9.232080 9.999465 -7.644510
-10.816275 9.999367 -7.719549
-11.799520 9.998780 -7.696483
--8.197535 -9.999454 -5.876680
--8.199384 -9.997172 -6.648834
--6.615159 -9.999591 -6.172308
--4.928238 -9.999508 -6.287317
--3.493124 -9.999625 -6.290891
--2.396800 -9.999622 -6.545432
--0.931823 -9.999562 -6.182242
-1.278400 -9.999836 -5.987411
-2.066704 -9.999538 -6.002573
-3.121100 -9.999532 -6.412695
-4.922377 -9.999692 -6.000663
-6.268679 -9.999669 -6.097210
-7.593183 -9.999622 -6.181079
-9.093877 -9.999564 -6.156287
-10.763025 -9.999396 -6.294472
-11.799572 -9.999108 -6.694769
-11.799508 -8.815783 -6.345116
--8.199471 -7.647173 -6.365884
-11.799492 -7.558034 -6.179054
--8.199493 -6.210351 -6.230461
-11.799470 -6.223871 -6.213104
--8.199518 -4.872240 -6.195818
-11.799449 -4.840047 -6.258850
--8.199504 -3.440536 -6.058222
-11.799455 -3.104877 -6.374187
--8.199571 -1.904626 -6.408732
-11.799479 -1.503608 -6.644092
--8.199664 -0.488334 -6.579994
-11.799407 -0.206462 -6.528683
--8.199561 0.826927 -6.558948
-11.799545 1.034986 -6.599732
--8.199677 2.090771 -6.503613
-11.799541 2.516534 -6.622082
--8.199618 3.778229 -6.316415
-11.799479 4.065857 -6.285263
--8.199558 5.195997 -6.611563
-11.799401 5.281944 -6.523500
--8.199549 6.319622 -6.324531
-11.799391 6.328523 -6.305669
--8.199545 7.696940 -6.106700
-11.799361 7.548317 -6.319578
--8.199562 9.997359 -5.592088
-11.799398 8.803955 -6.274086
--8.199135 9.999597 -6.202177
--6.549465 9.999495 -6.322655
--4.876023 9.999579 -6.275066
--3.540742 9.999563 -6.314503
--2.587391 9.999701 -6.367679
--1.332323 9.999681 -5.968807
-0.394105 9.999797 -5.834267
-1.522830 9.999822 -5.994208
-2.656445 9.999740 -5.940061
-4.309387 9.999720 -6.268180
-6.101918 9.999698 -6.246173
-7.610718 9.999632 -6.211280
-9.132327 9.999571 -6.150370
-10.771190 9.999393 -6.209607
-11.799554 9.999144 -6.305787
--8.197595 -9.999343 -4.504618
--8.199450 -9.997026 -5.266454
--6.631415 -9.999523 -4.845931
--4.941531 -9.999628 -4.975726
--3.662716 -9.999701 -5.211709
--1.940732 -9.999906 -4.722961
--0.645099 -9.998431 -5.521235
--1.598355 -8.841139 -4.971010
-0.798045 -9.998487 -5.942139
-2.019213 -9.438328 -6.019917
-3.224112 -9.998937 -5.865794
-4.545057 -9.999508 -5.360658
-5.387156 -9.999788 -4.821813
-6.392444 -9.999743 -4.652799
-7.634109 -9.999722 -4.654175
-9.116672 -9.999655 -4.744941
-10.775377 -9.999466 -4.892883
-11.799663 -9.999146 -5.310978
-11.799561 -8.806577 -4.974324
--8.199500 -7.661956 -4.976057
--0.543789 -7.701827 -5.553311
--1.542051 -7.184879 -5.009714
-0.646769 -7.906864 -5.923930
-2.029990 -7.931121 -6.030923
-3.285709 -8.127055 -5.846401
-4.392823 -8.553043 -5.442753
-5.402434 -8.986953 -4.827029
-11.799483 -7.536067 -4.814019
--8.199533 -6.254948 -4.795567
--0.527092 -6.065255 -5.560897
--1.563319 -5.613705 -4.992757
-0.710227 -6.233649 -5.934304
-2.059214 -6.282635 -6.031727
-3.469013 -6.274006 -5.803403
-4.576782 -6.586240 -5.352248
-5.610687 -6.981803 -4.682505
-11.799457 -6.214878 -4.912851
--8.199594 -4.948255 -4.608037
--0.660150 -4.410936 -5.510384
--1.734805 -4.511937 -4.863873
-0.687797 -4.767218 -5.932472
-2.096220 -4.800875 -6.029942
-3.526148 -4.702438 -5.790080
-4.878107 -4.632379 -5.195413
-5.805358 -5.122348 -4.514281
-11.799598 -4.772633 -5.058008
--8.199823 -3.812617 -4.649699
--8.199636 -2.744853 -5.355632
--8.197799 -3.803494 -4.671632
--6.570097 -3.037490 -5.197766
--5.579249 -3.911978 -4.574214
--4.481239 -3.057892 -5.190363
--3.686859 -3.993152 -4.504757
--2.887286 -3.156627 -5.131179
--2.198124 -4.007034 -4.487400
--1.394477 -3.196192 -5.103760
--0.417270 -3.049803 -5.599401
-0.704127 -3.310611 -5.934994
-2.103781 -3.385201 -6.030068
-3.483100 -3.357221 -5.796082
-4.704433 -2.866597 -5.280302
-5.864598 -4.061251 -4.428973
-5.112216 -3.321455 -5.027540
-7.010955 -4.103302 -4.414215
-8.136370 -3.069519 -5.183742
-8.856155 -4.027049 -4.485490
-9.960790 -3.003553 -5.225338
-10.610147 -3.918534 -4.569955
-11.798901 -3.011030 -5.229120
-11.799867 -3.959053 -4.521823
-11.799586 -3.334645 -5.561627
--8.199663 -1.601270 -5.805870
--7.004556 -1.965991 -5.694755
--4.845649 -1.964663 -5.701309
--3.270373 -1.996202 -5.692004
--1.878373 -2.087085 -5.661844
--0.271080 -2.078768 -5.657950
-0.689090 -2.017582 -5.931833
-2.086140 -2.030938 -6.029613
-3.355649 -1.497195 -5.818519
-3.824382 -2.043119 -5.667521
-6.120123 -2.106119 -5.655799
-7.734968 -2.044835 -5.678695
-9.451074 -1.914524 -5.720321
-11.076477 -1.838660 -5.744744
-11.799584 -1.916953 -5.702216
--8.199286 -0.265202 -6.022649
--6.819282 -0.707609 -5.990512
--4.985128 -0.710446 -5.993889
--3.432094 -0.675685 -5.996766
--2.005813 -0.700454 -5.996704
--0.657409 -0.737507 -5.994256
-0.983770 -0.642090 -5.987838
-1.873320 -0.349933 -6.018587
-2.461001 -0.601646 -5.989651
-4.776545 -0.725026 -5.992097
-6.143940 -0.744991 -5.992860
-7.602170 -0.724354 -5.994216
-9.183177 -0.653566 -6.000018
-11.012054 -0.649617 -5.990694
-11.799411 -0.882933 -5.953003
--8.199474 1.071286 -5.926068
--6.786499 0.677417 -5.992784
--4.989926 0.655453 -6.000698
--3.446477 0.718845 -5.994532
--2.005364 0.734130 -5.993684
--0.644731 0.706743 -5.995169
-1.269274 0.555561 -5.995363
-2.152885 0.593043 -5.999925
-3.450587 0.746895 -5.993968
-4.773715 0.714711 -5.997985
-6.168500 0.678442 -5.998556
-7.619453 0.683036 -5.996651
-9.192253 0.689896 -5.994837
-10.951191 0.604808 -5.993295
-11.799452 0.196182 -6.011107
--8.199618 2.074471 -5.640577
--7.064785 1.960899 -5.697335
--5.192454 1.939865 -5.711124
--3.571444 2.043488 -5.678872
--1.995842 2.090984 -5.660890
--0.116349 1.962943 -5.693911
-0.740772 1.063983 -5.928383
-2.093983 2.059163 -6.031731
-3.468668 1.566100 -5.800748
-3.913185 2.182983 -5.632794
-6.030447 2.104294 -5.660509
-7.466060 1.972247 -5.698761
-9.088945 1.958584 -5.701531
-11.797971 1.896790 -5.724948
-11.799903 1.091409 -5.908539
--8.199558 3.150676 -5.113977
--8.197059 2.999491 -5.228165
--5.742509 3.027697 -5.208352
--3.936587 3.084698 -5.174985
--1.445709 3.282105 -5.054072
--0.690656 2.457887 -5.489321
-0.639774 3.374856 -5.923337
-2.054134 3.374554 -6.033294
-3.472083 3.269565 -5.799263
-4.485263 2.668436 -5.386291
-5.145700 3.387022 -4.988523
-7.072347 3.136822 -5.146075
-8.731404 3.038434 -5.199675
-10.499704 2.983730 -5.229940
-11.799774 2.862498 -5.285520
--8.199397 3.950810 -4.551408
--8.199591 4.978357 -5.210742
--6.523861 3.917865 -4.571984
--4.594098 3.939095 -4.552960
--2.199405 4.016731 -4.479439
--1.995391 3.774898 -4.665979
--0.830999 4.698313 -5.437511
--1.696721 5.170595 -4.902378
-0.596438 4.734746 -5.921164
-2.046080 4.820583 -6.032212
-3.461160 4.740631 -5.804372
-4.765977 4.333749 -5.251219
-5.726037 3.915006 -4.549861
-5.905932 4.130647 -4.378312
-7.961712 3.998636 -4.505661
-9.758068 3.873410 -4.607570
-11.799082 3.798213 -4.677949
-11.799646 4.162864 -5.098303
-11.799519 5.314621 -5.097996
--8.199535 6.524733 -5.261577
--0.553185 6.460670 -5.553912
--1.545043 6.794877 -5.014001
-0.661656 6.281158 -5.933097
-2.087543 6.357923 -6.030626
-3.410282 6.363924 -5.814029
-4.576826 6.192546 -5.348296
-5.565046 5.569194 -4.694882
-11.799391 6.606434 -5.193122
--8.199544 7.675134 -4.790676
--0.382301 8.204876 -5.620165
--1.419057 8.504014 -5.090134
-0.778209 8.043856 -5.944695
-2.127000 8.096928 -6.026480
-3.435947 8.361120 -5.802789
-4.565781 8.251176 -5.350781
-5.533244 7.577791 -4.726126
-11.799347 7.592454 -5.026506
--8.199542 9.996933 -4.196853
--0.437395 9.998920 -5.603590
--1.584876 9.999116 -4.974419
-0.770631 9.997920 -5.938691
-1.987703 9.997864 -6.025558
-3.201761 9.998964 -5.858583
-4.364268 9.999458 -5.445886
-5.479857 9.998835 -4.773780
-11.799443 8.805692 -4.886413
--8.197565 9.999346 -4.797266
--6.631770 9.999530 -4.939600
--5.036590 9.999560 -4.927760
--3.773880 9.999400 -5.013918
--2.277126 9.999526 -4.414088
-6.069315 9.999655 -4.944575
-7.544839 9.999699 -4.852163
-9.112121 9.999648 -4.761281
-10.766150 9.999446 -4.817117
-11.799642 9.999104 -4.917832
--8.197641 -9.999402 -3.126711
--8.199480 -9.997170 -3.885499
--6.588301 -9.999567 -3.570392
--5.072336 -9.999645 -4.052226
--2.866430 -9.999930 -3.801252
--2.412564 -9.357492 -4.293720
--3.028481 -9.079852 -3.590806
-6.197879 -9.999116 -4.120582
-6.835500 -9.999697 -3.277542
-7.621456 -9.999774 -2.990151
-9.111020 -9.999665 -3.254164
-10.771660 -9.999491 -3.504080
-11.799707 -9.999188 -3.930399
-11.799583 -8.807912 -3.598260
--8.199523 -7.674762 -3.536762
--2.361834 -8.124373 -4.347000
--3.033801 -7.352487 -3.586731
-6.322771 -7.789248 -3.985450
-6.870165 -8.651746 -3.244329
-11.799481 -7.548273 -3.467424
--8.199649 -6.310259 -2.946718
--2.413518 -6.259798 -4.301591
--3.120787 -6.024586 -3.456293
-6.642772 -4.840271 -3.591432
-7.089234 -6.588894 -2.874066
-11.799521 -6.207240 -3.613254
--8.199626 -5.315460 -2.816435
--8.199123 -4.621104 -3.871041
--7.260527 -5.172211 -3.077703
--6.489940 -4.556766 -3.930886
--5.179650 -5.127740 -3.145799
--4.529086 -4.666463 -3.801405
--3.506083 -5.321787 -2.832660
--2.881927 -4.681994 -3.780630
--2.258030 -4.976668 -4.433399
-6.445264 -4.657769 -3.814674
-7.189353 -5.394221 -2.651037
-7.563098 -4.857209 -3.560855
-9.417271 -5.312036 -2.825609
-9.812925 -4.685348 -3.783669
-11.799013 -5.298687 -2.878169
-11.799575 -4.584157 -3.898080
-11.799633 -5.610482 -3.139058
-11.799736 -5.005306 -4.162315
--8.199666 4.674420 -3.778543
--8.197265 4.690930 -3.775462
--5.520702 4.604403 -3.872566
--2.886908 4.703106 -3.759455
--2.420707 4.215529 -4.277692
-6.188191 4.380233 -4.108079
-6.640664 4.870828 -3.555306
-8.852288 4.690730 -3.781252
-10.593409 4.581908 -3.904963
-11.799790 4.523964 -3.956898
--8.199712 5.340882 -2.772119
--8.199623 6.142515 -3.969742
--6.569314 5.171231 -3.076136
--4.526580 5.122713 -3.145898
--3.414523 5.208680 -3.014136
--2.586777 5.680388 -4.133974
--3.101949 6.643367 -3.496661
-6.385056 6.263601 -3.907426
-7.030930 5.217946 -2.966196
-7.192600 5.401879 -2.666035
-9.859942 5.255906 -2.948375
-11.798919 5.229507 -3.009560
-11.799566 5.576705 -3.541719
-11.799438 6.424042 -3.866938
--8.199581 7.670190 -3.416277
--2.322645 7.381025 -4.387779
--2.954607 8.185115 -3.690625
-6.296511 8.518814 -4.008304
-6.927417 7.283313 -3.149089
-11.799394 7.612821 -3.619348
--8.199574 9.996961 -2.816848
--2.258032 8.897277 -4.444929
--2.896036 9.998099 -3.761736
-6.295086 9.999528 -3.993782
-6.975959 9.999047 -3.087096
-11.799501 8.806191 -3.493371
--8.197633 9.999267 -3.420323
--6.597630 9.999555 -3.565479
--5.260849 9.999516 -3.894366
--3.306535 9.999495 -3.169240
-7.423060 9.999597 -3.444577
-9.070394 9.999636 -3.364267
-10.764064 9.999467 -3.436397
-11.799677 9.999133 -3.537862
--8.197683 -9.999428 -1.745003
--8.199496 -9.997220 -2.502029
--6.595037 -9.999610 -2.230302
--4.649723 -9.999649 -2.795427
--3.440007 -9.999244 -2.949142
--3.868423 -9.999454 -2.017212
-7.565646 -9.999818 -1.685884
-7.283952 -9.999390 -2.478088
-9.128228 -9.999671 -1.868508
-10.770383 -9.999474 -2.114452
-11.799734 -9.999207 -2.550586
-11.799602 -8.809131 -2.220782
--8.199553 -7.699334 -2.066964
--3.565838 -8.849984 -2.726726
--3.981808 -8.869972 -1.681317
-7.357527 -7.945731 -2.300289
-11.799492 -7.582936 -2.035713
--8.199670 -6.544492 -1.424438
--3.586994 -6.740130 -2.686603
--3.979078 -5.762631 -1.724067
-7.468341 -6.584023 -1.994340
-11.799441 -6.588094 -1.980923
--8.199616 -5.761811 -1.749310
--7.265851 -5.669053 -2.041334
--4.827281 -5.710837 -1.961370
-7.488700 -5.689359 -1.953416
-8.877826 -5.711863 -1.911163
-11.076009 -5.754364 -1.788857
-11.799593 -5.722426 -1.841136
--8.199502 5.793691 -1.643805
--8.199743 6.374563 -2.467070
--7.022589 5.653299 -2.069438
--3.776528 5.589815 -2.234186
--3.676234 5.457607 -2.497708
--3.988530 5.787000 -1.644971
-7.592824 5.797828 -1.611118
-7.344422 6.103498 -2.323589
-9.281547 5.755380 -1.784792
-11.067721 5.747159 -1.828817
-11.799597 5.699470 -1.923620
-11.799562 6.668055 -2.240345
--8.199613 7.689158 -2.021921
--3.569395 7.419164 -2.728603
--3.960927 7.963889 -1.772748
-7.352831 7.922623 -2.310428
-11.799465 7.595367 -2.151416
--8.199580 9.996964 -1.438756
--3.481771 9.079801 -2.888183
--3.914362 9.998879 -1.964471
-7.413295 9.998059 -2.149808
-11.799539 8.808967 -2.098512
--8.197672 9.999278 -2.038773
--6.647517 9.999584 -2.130324
--4.890908 9.999578 -2.337504
-7.434996 9.999544 -2.104868
-8.858668 9.999474 -2.148045
-10.765622 9.999448 -2.063958
-11.799701 9.999151 -2.157599
--8.197706 -9.999446 -0.370404
--8.199528 -9.997251 -1.119840
--6.646825 -9.999621 -0.814520
--5.133657 -9.999701 -1.318348
--4.160445 -9.999633 -0.859341
-7.593559 -9.998395 -1.608640
-7.750620 -9.999620 -0.840944
-8.902712 -9.999626 -0.428918
-10.765934 -9.999448 -0.697232
-11.799752 -9.999210 -1.169555
-11.799613 -8.813197 -0.837518
--8.199554 -7.700875 -0.652790
--4.197826 -8.771147 -0.561384
-7.650217 -7.221619 -1.390286
-7.788566 -8.607541 -0.615467
-11.799491 -7.640605 -0.629750
--8.199769 -6.547227 -0.044602
--4.195515 -5.997615 -0.590282
-7.674257 -5.872370 -1.270953
-7.818276 -6.015651 -0.297058
-11.799412 -6.650712 -0.593172
--8.199703 -6.009687 -0.459218
--6.831578 -5.986816 -0.775560
--5.176999 -5.998647 -0.699936
-8.704158 -5.990420 -0.735459
-10.941131 -5.997840 -0.631741
-11.799377 -5.963696 -0.834179
--8.199658 6.020744 -0.310751
--8.199599 6.552494 -1.177571
--6.829805 5.970607 -0.831946
--4.985057 5.903795 -1.184989
--4.190019 5.985622 -0.621282
-7.630058 6.594994 -1.480723
-7.769473 5.964656 -0.740573
-8.809499 6.020234 -0.452149
-11.001914 5.991692 -0.632089
-11.799571 5.950428 -0.899059
-11.799513 6.586768 -0.676583
--8.199570 7.696561 -0.663149
--4.192334 8.453691 -0.661321
-7.649990 8.488600 -1.404368
-7.801488 7.392091 -0.467919
-11.799460 7.596734 -0.703268
--8.199554 9.996956 -0.059296
--4.208280 9.999487 -0.457902
-7.632094 9.999632 -1.440138
-7.824550 9.999273 -0.314720
-11.799555 8.812249 -0.723596
--8.197688 9.999276 -0.661298
--6.633120 9.999596 -0.731441
--5.208707 9.999684 -0.783758
-8.773975 9.999633 -0.861566
-10.802381 9.999455 -0.713570
-11.799714 9.999182 -0.785225
--8.197686 -9.999451 1.010939
--8.199541 -9.997275 0.260243
--6.615919 -9.999615 0.589153
--5.262418 -9.999700 -0.007006
--4.209271 -9.999540 0.433489
-8.779774 -9.999577 1.415871
-7.824505 -9.999371 0.331457
-10.742769 -9.999483 0.797123
-11.799760 -9.999220 0.212846
-11.799611 -8.815681 0.536668
--8.199557 -7.696405 0.725159
--4.193613 -8.468247 0.649148
-7.798675 -7.350070 0.498136
-11.799520 -7.637108 0.626647
--8.199504 -6.481462 1.294399
--4.199493 -5.996171 0.544490
-7.760544 -5.957045 0.805830
-11.799439 -6.607526 0.605803
--8.199629 -5.957602 0.895889
--6.777077 -6.005857 0.596030
--5.031775 -5.996729 0.636892
-8.938672 -5.986028 0.794650
-10.848825 -5.997306 0.635572
-11.799419 -6.008822 0.373658
--8.200001 5.933025 1.035385
--8.199828 6.552780 0.180893
--6.764019 6.001985 0.588188
--5.129140 6.026583 0.126953
--4.200074 6.001789 0.516684
-8.849153 5.925123 1.118087
-7.812254 6.013496 0.354384
-10.911695 5.988643 0.664857
-11.799494 6.011581 0.171386
-11.799451 6.576842 0.497613
--8.199492 7.685225 0.709118
--4.198419 8.757403 0.554094
-7.784419 8.616837 0.641178
-11.799432 7.609749 0.578961
--8.199509 9.996929 1.321673
--4.164239 9.999508 0.836725
-7.746129 9.999648 0.873186
-11.799561 8.808537 0.648856
--8.197680 9.999266 0.730803
--6.542542 9.999572 0.734784
--5.273170 9.999640 0.387865
-8.985755 9.999613 1.158257
-10.688242 9.999451 0.658293
-11.799711 9.999186 0.598196
--8.197648 -9.999448 2.395411
--8.199549 -9.997281 1.640028
--6.605830 -9.999605 2.045255
--4.876506 -9.999592 1.610004
--3.920527 -9.998597 1.946740
-7.626151 -9.999424 1.463730
-7.832772 -9.999577 2.421417
-7.411798 -9.999217 2.153311
-9.377962 -9.999535 2.682787
-10.740405 -9.999465 2.167935
-11.799745 -9.999239 1.599765
-11.799598 -8.813943 1.913549
--8.199590 -7.683833 2.085014
--3.964387 -7.981873 1.762923
-7.643512 -8.503314 1.425363
-7.356836 -7.937525 2.302709
-11.799526 -7.607205 1.969600
--8.199491 -6.327385 2.585447
--4.001865 -5.805374 1.600292
-7.625906 -6.541778 1.489108
-7.343409 -6.082851 2.326025
-11.799542 -6.621174 1.995070
--8.199359 -5.638630 2.111626
--6.985033 -5.734489 1.856313
--3.880680 -5.704399 1.957182
-7.530046 -5.749290 1.817499
-9.581915 -5.606774 2.200391
-11.798736 -5.704845 1.942552
-11.799788 -5.870092 1.271592
--8.199745 5.649374 2.050942
--8.199661 6.474492 1.546607
--7.044656 5.711822 1.918720
--4.950350 5.807649 1.648982
--3.988319 5.772532 1.692573
-7.660441 5.858665 1.332667
-7.433918 5.641847 2.093051
-7.462678 6.582858 2.009177
-9.206911 5.572658 2.257581
-11.798150 5.702778 1.949545
-11.799784 5.911854 1.076341
-11.799452 6.649951 1.729318
--8.199503 7.682948 2.117119
--3.983454 8.864017 1.676720
-7.648629 7.220486 1.397030
-7.356742 7.947940 2.301305
-11.799465 7.579891 1.948669
--8.199507 9.997415 2.704021
--3.876131 9.999337 1.996297
-7.588977 9.998880 1.628080
-7.244533 9.999221 2.553261
-11.799548 8.805694 2.031880
--8.197663 9.999352 2.115082
--6.666515 9.999545 2.026457
--4.659828 9.999501 2.286154
-7.997352 9.999605 2.050205
-9.524428 9.999669 2.505622
-10.758471 9.999419 2.153772
-11.799698 9.999148 1.989041
--8.197604 -9.999436 3.777625
--8.199542 -9.997276 3.018459
--6.613389 -9.999603 3.488493
--4.903197 -9.999599 3.343227
--3.484757 -9.032300 2.883624
--3.232062 -9.999564 3.306391
--2.898742 -9.403237 3.752528
-7.514289 -9.999701 3.862231
-6.952609 -9.999518 3.119586
-9.228271 -9.999551 3.612877
-10.791119 -9.999423 3.447059
-11.799726 -9.999217 2.977890
-11.799569 -8.813658 3.304755
--8.199584 -7.670146 3.460722
--3.574334 -7.421838 2.720092
--2.955174 -8.181083 3.689918
-6.929611 -7.282344 3.145288
-11.799459 -7.601341 3.513390
--8.199472 -6.097076 4.004302
--3.668883 -6.094775 2.507122
--3.106965 -6.651191 3.490491
-6.989048 -5.820842 3.030916
-11.799523 -6.413495 3.838398
--8.199566 -5.202332 3.007745
--7.310356 -5.254818 2.941412
--4.878685 -5.253971 2.941320
--3.437903 -5.216196 2.984052
-7.142684 -5.352290 2.759473
-9.171059 -5.224774 2.997767
-11.799118 -5.143877 3.134670
-11.799718 -5.521446 3.394627
--8.199678 5.163284 3.076580
--8.199640 6.266432 3.062677
--8.197410 5.233962 2.990004
--5.655044 5.262937 2.932223
--3.589515 6.744640 2.681872
--3.526234 5.344194 2.796168
--3.123183 6.025649 3.453053
-7.115854 5.316240 2.797781
-7.069099 6.633917 2.914916
-8.659121 5.242633 2.947301
-10.493149 5.202950 3.027650
-11.799786 5.280582 2.874469
-11.799526 6.204838 3.562408
--8.199533 7.669547 3.572965
--3.572335 8.836848 2.712472
--3.035518 7.339932 3.584669
-6.870486 8.661427 3.243575
-11.799454 7.538053 3.402397
--8.199501 9.997368 4.086070
--3.441025 9.999057 2.948609
--3.043382 9.046356 3.571433
-6.829948 9.999537 3.286023
-11.799528 8.805180 3.408148
--8.197643 9.999428 3.486793
--6.608270 9.999547 3.379310
--4.656811 9.999462 3.515515
--2.852458 9.999164 3.816640
-7.679753 9.999552 3.556726
-9.301382 9.999568 3.488949
-10.795737 9.999445 3.493431
-11.799670 9.999133 3.364438
--8.197533 -9.999407 5.158651
--8.199509 -9.997257 4.397439
--6.614145 -9.999590 4.871537
--4.890576 -9.999644 4.716255
--3.387088 -9.999677 4.570394
--2.261416 -8.855969 4.442127
--2.437099 -9.999797 4.273759
--1.475395 -9.998314 5.060349
-6.314816 -9.999750 3.969246
-6.372498 -9.999758 5.163692
-5.514348 -9.999109 4.746866
-7.894446 -9.999682 5.250923
-9.104705 -9.999614 4.976558
-10.778880 -9.999447 4.779432
-11.799697 -9.999177 4.349587
-11.799519 -8.811727 4.694307
--8.199552 -7.677637 4.819081
--2.326875 -7.348844 4.383356
--1.414021 -8.229893 5.094482
-6.304777 -8.513800 3.997373
-5.519537 -7.706742 4.738986
-11.799383 -7.601138 4.959494
--8.199544 -6.518438 5.266372
--2.592307 -5.674323 4.129151
--1.572373 -6.586298 4.992676
-6.379261 -6.271595 3.913774
-5.564940 -5.660277 4.694994
-11.799389 -6.610602 5.180979
--8.199607 -4.633092 3.829645
--8.199579 -4.940305 5.222962
--8.198113 -4.658551 3.816161
--5.562227 -4.641238 3.832510
--2.897785 -4.716269 3.746663
--2.415937 -4.210419 4.282786
--1.687272 -5.075503 4.909489
-6.191103 -4.383311 4.104564
-5.777611 -3.965346 4.504145
-6.656023 -4.862808 3.557405
-8.718608 -4.682957 3.789617
-10.767363 -4.562404 3.922218
-11.799873 -4.548215 3.924178
-11.799562 -5.320532 5.055294
--8.199165 -3.881455 4.612430
--6.509099 -3.935783 4.554987
--4.377144 -3.943481 4.548967
--2.163820 -3.983776 4.510769
--1.936068 -3.714067 4.715118
-5.914590 -4.138125 4.370803
-8.125601 -3.986704 4.517064
-10.043089 -3.834943 4.643246
-11.799370 -3.964401 4.528506
-11.799733 -4.273866 5.016637
--8.199439 4.553471 3.948913
--8.199603 3.820593 4.636240
--8.199636 4.944487 4.649948
--6.525842 4.589891 3.898226
--8.198012 3.793169 4.675235
--4.569866 4.691994 3.773846
--5.742564 3.892035 4.593493
--2.888156 4.688345 3.772836
--3.804736 3.994417 4.504154
--2.265120 4.988791 4.426857
--2.240862 4.052150 4.446306
--1.783468 4.621441 4.826989
-6.324891 4.535066 3.956394
-5.781214 3.975436 4.501049
-5.694842 5.037789 4.596434
-7.607679 4.786399 3.656248
-6.934111 4.000844 4.495538
-9.714689 4.656276 3.814215
-8.652557 3.995179 4.507631
-11.799059 4.635889 3.852334
-10.731492 3.947613 4.539780
-11.799675 4.923650 4.178159
-11.799873 3.935280 4.538691
-11.799614 4.736063 5.045347
--8.199549 6.251171 4.807276
--2.413476 6.279981 4.301875
--1.572040 5.738152 4.986212
-6.585310 4.772292 3.674067
-5.582396 6.822455 4.694520
-11.799458 6.217318 4.913799
--8.199501 7.659194 5.002742
--2.355846 8.124399 4.355531
--1.519149 7.398329 5.026831
-6.312459 7.750959 3.994457
-5.399946 8.697538 4.829699
-11.799453 7.525975 4.752891
--8.199476 9.997221 5.467452
--2.407282 9.595368 4.296461
--1.555586 9.016800 5.002069
-6.196377 9.999150 4.122355
-5.359331 9.999829 4.844940
-11.799500 8.803800 4.783926
--8.197597 9.999513 4.869787
--6.603934 9.999537 4.755031
--4.828739 9.999626 4.711396
--3.150458 9.999444 4.755021
--1.955161 9.999261 4.709900
-6.579113 9.999763 4.931122
-8.032317 9.999701 5.081255
-9.130602 9.999653 4.918978
-10.772133 9.999453 4.835412
-11.799621 9.999120 4.740206
--8.198836 -9.999576 6.599982
--8.199536 -9.997142 5.790784
--6.593763 -9.999537 6.273440
--4.891569 -9.999576 6.165531
--3.407455 -9.999640 6.159891
--2.140768 -9.999674 6.057826
--0.253161 -9.996292 5.681166
--0.732826 -9.999672 5.443184
-1.168884 -9.999240 5.995071
-0.893293 -9.999910 5.943188
-2.445173 -9.998594 5.992521
-2.018133 -9.999987 6.001723
-3.710248 -9.999373 5.709534
-3.452814 -9.999612 6.443748
-4.602591 -9.999867 5.316617
-5.026127 -9.999751 6.284465
-6.527148 -9.999660 6.639332
-7.692792 -9.999639 6.365069
-9.155256 -9.999598 6.332682
-10.780894 -9.999430 6.153181
-11.799646 -9.999138 5.728943
-11.799455 -8.807916 6.074277
--8.199540 -7.701340 6.132294
--0.465143 -7.326340 5.585181
-0.806051 -7.705533 5.947732
-2.167661 -7.864732 6.018025
-3.433831 -8.227327 5.801888
-4.556376 -8.772090 5.355238
-11.799363 -7.562963 6.270380
--8.199543 -6.317929 6.325528
--0.569042 -5.741171 5.545783
-0.715764 -6.124307 5.935107
-2.085078 -6.265229 6.028141
-3.470301 -6.420700 5.801060
-4.564419 -6.928053 5.354861
-11.799391 -6.329367 6.303913
--8.199546 -5.187172 6.618011
--0.773766 -4.194862 5.462619
-0.651937 -4.668273 5.928223
-2.091592 -4.790364 6.030248
-3.507766 -4.776062 5.794158
-4.796176 -4.906463 5.236584
-11.799401 -5.285198 6.519322
--8.199609 -2.849556 5.297946
--8.199624 -3.664600 6.327331
--7.251609 -3.079662 5.171209
--4.840324 -3.046456 5.196449
--3.173756 -3.090742 5.169651
--1.333320 -3.167730 5.128797
--0.438994 -2.975902 5.591105
-0.667161 -3.273909 5.930734
-2.098407 -3.376037 6.030735
-3.477165 -3.369145 5.797413
-4.670855 -2.839583 5.295374
-5.183542 -3.422887 4.963670
-7.854371 -3.120899 5.156997
-9.480741 -2.963974 5.247348
-11.798720 -2.907257 5.284715
-11.799572 -3.233733 5.598043
-11.799516 -4.090414 6.263210
--8.199569 -1.777986 5.752754
--8.199684 -2.073697 6.565345
--7.264945 -2.072580 5.655783
--4.892786 -1.973478 5.698500
--3.397542 -1.971724 5.698974
--1.919820 -2.045193 5.674397
--0.264450 -2.066415 5.661018
-0.684231 -2.010216 5.931263
-2.083226 -2.029805 6.030014
-3.356159 -1.497632 5.818394
-3.826452 -2.049183 5.665979
-6.057512 -2.160626 5.639706
-7.597582 -2.099295 5.663253
-9.218068 -1.914662 5.719605
-11.075790 -1.797488 5.752544
-11.799682 -1.879533 5.710035
-11.799459 -2.611259 6.542984
--8.199503 -0.491903 6.007307
--8.199680 -0.705138 6.566795
--6.826282 -0.832144 5.976810
--4.986693 -0.758232 5.991442
--3.454064 -0.674392 5.996832
--2.017308 -0.693402 5.996998
--0.659782 -0.731215 5.994454
-0.981827 -0.639725 5.987810
-1.873149 -0.349767 6.018599
-2.461390 -0.602868 5.989574
-4.776151 -0.726427 5.991949
-6.136178 -0.749839 5.992536
-7.583019 -0.730423 5.993953
-9.158060 -0.643490 6.002358
-10.940804 -0.600352 5.999825
-11.799425 -0.848953 5.961709
-11.799377 -1.265357 6.655302
--8.199269 0.869105 5.962118
--8.199540 0.631636 6.536277
--6.759963 0.557422 6.009027
--4.964341 0.624918 6.007119
--3.428904 0.722607 5.994528
--2.003873 0.735437 5.993473
--0.644371 0.707168 5.995105
-1.269206 0.556508 5.995347
-2.153611 0.594159 5.999916
-3.452286 0.744381 5.994117
-4.780762 0.707640 5.998236
-6.183371 0.673867 5.998772
-7.648952 0.686417 5.996594
-9.206982 0.702172 5.994337
-10.908156 0.670501 5.988912
-11.799513 0.354212 6.009020
-11.799365 0.022660 6.588048
--8.199455 2.091788 5.646234
--8.199589 2.000721 6.361542
--6.981493 1.869726 5.731795
--4.996750 1.946730 5.711601
--3.401004 2.079662 5.668446
--1.987114 2.107888 5.656106
--0.118843 1.966891 5.693007
-0.741546 1.063469 5.928512
-2.095185 2.057822 6.031780
-3.456326 1.679935 5.791945
-4.656799 2.079864 5.661766
-6.081037 2.044723 5.677777
-7.585537 1.976333 5.697745
-9.258666 2.020109 5.684668
-11.799003 1.903737 5.716467
-11.799769 1.238652 5.876719
-11.799578 1.322360 6.558140
--8.199514 2.990314 5.212738
--8.199485 3.491012 6.027864
--7.336644 2.954827 5.248124
--5.272383 3.020040 5.215442
--3.525569 3.152794 5.135769
--1.510501 3.319746 5.026337
--0.666315 2.442990 5.499047
-0.644604 3.381651 5.924020
-2.057189 3.366446 6.033311
-3.485343 3.235444 5.796387
-4.504560 2.662781 5.382405
-5.050210 3.268426 5.061302
-7.345608 3.085526 5.173554
-9.039054 3.076751 5.178569
-11.799359 3.113237 5.160700
-11.799804 3.108680 5.573142
-11.799582 2.963363 6.427597
--8.199545 4.871060 6.191875
--0.726174 4.991884 5.482443
-0.627673 4.824507 5.924534
-2.046442 4.808081 6.031816
-3.469420 4.650023 5.802474
-4.831454 4.137271 5.218531
-11.799453 4.831713 6.259270
--8.199493 6.209351 6.230690
--0.526029 6.782165 5.560700
-0.658040 6.393522 5.926639
-2.061201 6.358305 6.030103
-3.382344 6.218768 5.820481
-4.600585 5.819009 5.338509
-11.799470 6.223872 6.213105
--8.199493 7.644015 6.393284
--0.508467 8.557963 5.564147
-0.659633 8.134601 5.918595
-1.972727 8.050250 6.028858
-3.331390 8.060669 5.831500
-4.510781 7.713500 5.379684
-11.799459 7.548244 6.118355
--8.199451 9.997745 6.856752
--0.844982 9.998706 5.412596
-0.430627 9.998777 5.869935
-1.678644 9.998960 6.026149
-2.947410 9.998911 5.917114
-4.347351 9.999228 5.467326
-11.799460 8.816775 6.153218
--8.197533 9.999701 6.268875
--6.607411 9.999584 6.158972
--4.915001 9.999562 6.138621
--3.383697 9.999627 6.176419
--2.011267 9.999591 6.131787
--0.351281 9.999445 6.123900
-1.223312 9.999739 5.973482
-2.379461 9.999793 5.972810
-3.753112 9.999563 6.374414
-5.314850 9.999664 6.072073
-6.652303 9.999625 6.451530
-7.715760 9.999647 6.286867
-9.132211 9.999601 6.316644
-10.763255 9.999510 6.223470
-11.799530 9.999296 6.123329
--8.198895 -9.999526 8.006126
--8.199519 -9.192599 7.175292
--6.417950 -9.999429 7.756643
--4.815599 -9.999453 7.633683
--3.368346 -9.999523 7.684534
--2.000195 -9.999560 7.687109
--0.651669 -9.999557 7.686626
-0.729027 -9.999627 7.627478
-2.094055 -9.999655 7.697778
-3.410515 -9.999652 7.762918
-4.816259 -9.999615 7.719515
-6.363036 -9.999561 7.719858
-7.744698 -9.999474 7.763176
-9.226645 -9.999427 7.762900
-10.766292 -9.999480 7.554846
-11.799546 -9.999265 7.098374
-11.799364 -8.772797 7.439370
--8.199441 -7.722961 7.545415
-11.799382 -7.433131 7.563033
--8.199511 -6.311924 7.660977
-11.799376 -6.120613 7.570129
--8.199534 -4.980803 7.686372
-11.799411 -4.844180 7.568948
--8.199574 -3.520487 7.683812
-11.799455 -3.479200 7.604340
--8.199579 -2.040208 7.697154
-11.799455 -2.102558 7.648109
--8.199542 -0.651625 7.692732
-11.799451 -0.746140 7.619711
--8.199515 0.718359 7.687811
-11.799507 0.617562 7.602089
--8.199542 2.063252 7.668056
-11.799526 2.025604 7.617967
--8.199553 3.418680 7.652824
-11.799480 3.516902 7.571071
--8.199521 4.779530 7.644626
-11.799485 4.961886 7.544385
--8.199498 6.158218 7.669830
-11.799493 6.338737 7.540397
--8.199495 7.630288 7.840914
-11.799438 7.662631 7.459908
--8.199335 9.016942 8.308546
-11.799427 8.887952 7.486588
--8.198661 9.999797 7.692573
--6.609943 9.999473 7.675223
--5.050881 9.999443 7.642745
--3.590057 9.999554 7.715032
--2.193910 9.999576 7.722970
--0.766948 9.999570 7.703002
-0.704516 9.999436 7.683696
-2.062999 9.999517 7.713124
-3.369528 9.999482 7.718036
-4.775780 9.999557 7.701522
-6.202618 9.999552 7.708895
-7.517828 9.999548 7.762272
-8.951915 9.999498 7.802186
-10.592942 9.999502 7.731933
-11.799470 9.999449 7.539344
--8.198413 -9.999622 9.998239
--8.199584 -9.997097 8.707922
--6.213819 -9.999378 9.997805
--4.750348 -9.999394 9.997395
--3.315425 -9.999398 9.997358
--1.930486 -9.999413 9.997904
--0.552704 -9.999448 9.997867
-0.825830 -9.999471 9.997808
-2.205785 -9.999476 9.997803
-3.581178 -9.999465 9.997853
-4.964279 -9.999454 9.997849
-6.355896 -9.999468 9.997790
-7.745800 -9.999449 9.997847
-9.219168 -9.999370 9.997507
-10.843001 -9.999401 9.998410
-11.799453 -9.999250 8.419680
-11.799330 -8.519844 8.719084
--8.199432 -7.614718 9.009619
-11.799362 -7.090093 8.787507
--8.199415 -6.347914 9.996894
-11.799490 -5.723805 8.804754
--8.199486 -4.960229 9.997334
-11.799552 -4.354128 8.811058
--8.199503 -3.580727 9.997179
-11.799592 -2.975622 8.817688
--8.199525 -2.189095 9.996919
-11.799616 -1.596662 8.818361
--8.199529 -0.807254 9.997140
-11.799514 -0.218284 8.818473
--8.199525 0.566889 9.997272
-11.799629 1.164615 8.819294
--8.199523 1.950375 9.997380
-11.799609 2.553452 8.815332
--8.199507 3.328820 9.997098
-11.799586 3.942916 8.809958
--8.199467 4.705613 9.997397
-11.799554 5.326713 8.805850
--8.199488 6.104328 9.997167
-11.799493 6.694594 8.800132
--8.199504 7.567066 9.998184
-11.799426 7.989631 8.709000
--8.199445 8.779883 9.998020
-11.799459 8.997715 8.581887
--8.199387 9.999408 8.970480
--6.777565 9.999531 9.998397
--5.365391 9.999403 9.997413
--3.927644 9.999436 9.997842
--2.536396 9.999489 9.997868
--1.153995 9.999486 9.997896
-0.234385 9.999497 9.997862
-1.620074 9.999511 9.997829
-2.996753 9.999506 9.997827
-4.375471 9.999478 9.997868
-5.757544 9.999440 9.997920
-7.132275 9.999399 9.997419
-8.527854 9.999317 9.997542
-10.039479 9.999365 9.997566
-11.799401 9.999590 9.997819
--8.199564 -8.624424 9.999681
--6.482371 -9.997217 9.999541
--5.009321 -9.997786 9.999495
--3.630431 -9.997612 9.999303
--2.297617 -9.997481 9.999337
--0.940568 -9.997551 9.999459
-0.457845 -9.997609 9.999485
-1.841860 -9.997621 9.999490
-3.231818 -9.997558 9.999452
-4.660732 -9.997554 9.999393
-6.066957 -9.997600 9.999438
-7.458948 -9.997618 9.999593
-8.955096 -9.997232 9.999422
-10.518956 -9.997651 9.999676
-11.799704 -9.998227 10.000151
--8.198829 -7.149347 9.999371
--6.551334 -7.616679 9.999355
--5.045575 -7.794369 9.999452
--3.682493 -7.796916 9.999565
--2.651813 -8.004390 9.999441
--1.378949 -7.670482 9.999584
-0.122412 -8.052332 9.999581
-1.507608 -8.146821 9.999683
-2.823739 -8.121555 9.999640
-4.427471 -7.765769 9.999485
-6.067692 -7.768857 9.999388
-7.508152 -7.692230 9.999501
-9.000263 -7.626652 9.999393
-10.605927 -7.816845 9.999273
-11.799420 -8.022960 9.999205
--8.197575 -5.749109 9.999455
--6.643966 -6.198463 9.999369
--5.056807 -6.328191 9.999640
--3.930152 -6.506070 9.999598
--2.585245 -6.364953 9.999727
--1.460860 -6.202265 9.999833
--0.357494 -6.693348 9.999821
-1.138199 -6.990582 9.999727
-2.235683 -6.994594 9.999871
-3.593463 -6.768392 9.999779
-4.751307 -6.798151 9.999775
-6.025942 -6.443050 9.999696
-5.528597 -5.939122 9.999930
-7.558318 -6.300421 9.999571
-9.092954 -6.171248 9.999442
-10.767450 -6.283085 9.999371
-11.799585 -6.599038 9.999393
--8.197687 -4.363800 9.999595
--6.697226 -4.857450 9.999515
--5.376136 -5.217707 9.999482
--3.866692 -4.970774 9.999804
--2.965106 -5.140057 10.000067
--2.223149 -5.747599 10.000653
-6.219190 -5.438278 9.999787
-7.498934 -5.093988 9.999743
-6.860356 -4.856116 10.000163
-9.124454 -4.846385 9.999537
-10.780791 -4.890007 9.999356
-11.799676 -5.216230 9.999317
--8.197745 -3.046002 9.999527
--6.892328 -3.718954 9.999606
--5.276845 -3.657884 9.999616
--4.180528 -3.647812 10.000177
--3.662360 -4.407913 10.000999
-7.746449 -4.151927 10.000130
-9.069589 -3.501289 9.999720
-8.096116 -3.080591 10.000010
-10.784621 -3.539178 9.999447
-11.799721 -3.836383 9.999422
--8.197820 -1.599533 9.999390
--6.565421 -2.334403 9.999640
--5.346675 -2.324520 9.999730
--4.556663 -2.960433 10.000019
-9.389369 -1.907399 9.999751
-8.491092 -2.123599 9.999962
-10.775268 -2.164165 9.999501
-11.799750 -2.455609 9.999463
--8.197861 -0.247850 9.999347
--6.811171 -0.788280 9.999574
--5.667758 -1.283189 9.999701
-9.426335 -0.674212 9.999802
-8.770505 -0.854926 10.000260
-10.819429 -0.812561 9.999546
-11.799530 -1.076964 9.999483
--8.197721 1.113538 9.999526
--6.695457 0.706579 9.999656
--5.198022 0.223380 9.999601
-9.478483 0.755854 9.999822
-8.804891 0.498223 10.000130
-10.802117 0.521933 9.999569
-11.799535 0.299132 9.999496
--8.197616 2.553666 9.999619
--6.393997 2.191061 9.999769
--5.000073 1.690724 10.000030
-9.444489 2.119722 9.999681
-8.584241 1.806372 9.999890
-10.801788 1.891360 9.999513
-11.799761 1.679014 9.999472
--8.197587 3.914190 9.999598
--6.641249 3.536174 9.999636
--4.655480 2.713439 10.000096
--4.657337 3.752016 10.000007
--4.307789 3.458856 10.000555
-9.188093 3.669265 9.999661
-8.154366 2.976876 9.999822
-10.794128 3.321449 9.999415
-11.799740 3.061862 9.999424
--8.197502 5.291067 9.999585
--6.616482 4.885984 9.999526
--4.725832 4.918136 9.999666
--3.679889 4.376944 10.000923
--3.099369 5.011426 10.000212
--3.064500 5.058109 10.613419
-8.030270 5.100888 9.999699
-6.850599 4.858488 9.999699
-7.510542 4.084056 10.000174
-9.593278 5.261938 9.999496
-10.780684 4.822471 9.999332
-11.799705 4.447821 9.999357
--8.197726 6.714377 9.999689
--6.594540 6.283097 9.999458
--4.882166 6.177976 9.999474
--3.349746 6.217818 9.999723
--2.410607 5.608188 10.000583
--2.016270 6.351987 10.000078
--1.431322 6.233377 10.001153
-6.741755 6.431904 9.999672
-5.665489 6.333992 9.999810
-6.222313 5.441659 9.999949
-8.098748 6.600520 9.999571
-9.288901 6.398204 9.999512
-10.805679 6.209039 9.999350
-11.799641 5.828120 9.999256
--8.197885 8.074722 9.999633
--6.428494 7.779856 9.999462
--4.823626 7.636750 9.999390
--3.368710 7.697879 9.999340
--1.972622 7.782469 9.999458
--0.149931 6.745010 10.000200
--0.092688 7.790108 9.999634
-1.114905 6.985478 9.999789
-1.470623 8.122133 9.999679
-2.146079 6.999486 9.999908
-2.783982 8.133174 9.999678
-3.373640 6.824813 9.999860
-4.075569 8.034867 9.999547
-4.595573 6.421569 9.999683
-5.526074 7.681545 9.999496
-6.786095 8.085253 9.999398
-7.832828 7.832361 9.999531
-9.238482 7.831200 9.999429
-10.784788 7.631334 9.999335
-11.799516 7.217441 9.999315
--8.197994 9.998039 9.999844
--6.316532 9.997849 9.999547
--4.802325 9.997334 9.999498
--3.356526 9.997637 9.999380
--1.969724 9.997608 9.999352
--0.555346 9.997558 9.999425
-0.885156 9.997589 9.999476
-2.274942 9.997643 9.999504
-3.647022 9.997624 9.999489
-5.030220 9.997557 9.999452
-6.392834 9.997459 9.999316
-7.729717 9.997419 9.999293
-9.153417 9.997105 9.999487
-10.741776 9.996381 9.999431
-11.799560 8.470680 9.999248
--0.404709 -6.664995 11.554741
--1.382784 -6.251769 10.795120
-0.758790 -6.947167 10.947076
-2.039844 -7.016795 10.698895
-3.220670 -6.881452 10.001741
-4.436515 -6.513659 10.000566
-5.375319 -6.037236 11.440392
--2.232946 -5.739280 11.858047
--2.974597 -5.142347 11.167279
-6.210507 -5.454947 10.788593
-6.937014 -4.779386 11.518373
--3.678247 -4.384391 11.881513
--4.227842 -3.585689 10.988430
-7.584970 -3.978674 10.001174
-8.138568 -3.016685 10.814351
--4.684201 -2.675569 11.642596
--4.935275 -1.960181 10.000401
-8.562464 -1.904815 11.151234
--5.203216 -0.619530 10.000870
-8.803132 -0.607090 11.372915
--5.190219 0.720567 10.001980
-8.786640 0.779945 11.332220
--4.999945 1.719525 11.342272
-8.502203 2.106539 11.078352
--4.722423 2.576716 10.002184
--4.316759 3.437123 11.722026
-8.020063 3.251772 11.025887
--3.754797 4.288280 11.125069
--3.038214 5.082627 11.927536
-6.854202 4.864918 10.777021
-7.466840 4.134807 11.576744
--2.259727 5.720581 11.106215
--1.422524 6.230896 11.805859
-5.346220 6.057312 10.000598
-6.118587 5.528689 11.459556
--0.474733 6.641531 11.076231
-0.727077 6.940412 10.731045
-1.983538 7.019841 10.670968
-3.138229 6.896154 10.001928
-4.286364 6.570463 10.001639
--0.386615 -6.670319 13.475606
--1.388303 -6.249818 12.549366
-0.774231 -6.950734 13.097659
-2.064777 -7.023451 12.924847
-3.283530 -6.866714 12.629443
-4.365408 -6.536121 12.098398
-5.356597 -6.047819 13.278268
--2.231516 -5.741513 13.418161
--3.003114 -5.113668 12.698648
-6.196295 -5.467237 12.424162
-6.916834 -4.800122 13.298300
--3.686411 -4.373683 13.432901
--4.257881 -3.540490 12.610509
-7.572799 -3.990224 12.247914
-8.111888 -3.074136 12.748497
--4.704855 -2.627928 13.334713
--5.019505 -1.655190 12.191307
-8.549565 -1.958790 12.952046
--5.205462 -0.505181 12.559058
-8.801131 -0.665640 13.034342
--5.193910 0.627844 12.985631
-8.794641 0.744803 12.996449
--5.017103 1.658659 13.363552
-8.515674 2.076982 13.051427
--4.707131 2.614586 12.464544
--4.287261 3.489819 13.393639
-8.055944 3.186260 13.169722
--3.729252 4.321498 12.677428
--3.040948 5.077468 13.439370
-6.846666 4.872763 12.415679
-7.500609 4.090317 13.478500
--2.273808 5.711595 12.666708
--1.418305 6.234737 13.542205
-5.255364 6.106658 12.051708
-6.113030 5.533993 13.270182
--0.423342 6.658939 13.146818
-0.738872 6.947048 13.005163
-2.036195 7.025925 12.920578
-3.261397 6.871166 12.773114
-4.294405 6.561888 12.483998
--0.374150 -6.674630 15.087572
--1.370976 -6.258703 14.150152
-0.794503 -6.954881 14.730463
-2.091165 -7.023341 14.509645
-3.357184 -6.849730 14.314513
-4.437776 -6.503430 13.938549
-5.361373 -6.043685 14.826402
--2.227391 -5.744702 14.897988
--3.000783 -5.115834 14.158653
-6.176470 -5.483632 14.115022
-6.908572 -4.808744 14.833733
--3.690112 -4.369470 14.888336
--4.262735 -3.532651 14.144856
-7.548069 -4.023251 13.954201
-8.087588 -3.120667 14.307747
--4.707644 -2.620190 14.834729
--5.022691 -1.642535 13.918309
-8.527472 -2.027699 14.485723
--5.198924 -0.568150 14.301660
-8.794381 -0.733092 14.563501
--5.197902 0.576914 14.606277
-8.803965 0.665841 14.637280
--5.020350 1.646544 14.990965
-8.524565 2.043013 14.667359
--4.714475 2.601211 14.127140
--4.284865 3.493964 14.866563
-8.060459 3.174640 14.743015
--3.719708 4.331664 14.156874
--3.039497 5.079156 14.894168
-6.861058 4.858750 14.133147
-7.510722 4.076589 15.059595
--2.277096 5.709506 14.174766
--1.407040 6.240535 15.058189
-5.301427 6.079387 13.935813
-6.132848 5.517341 14.832022
--0.408837 6.664481 14.742353
-0.779073 6.953539 14.599014
-2.083631 7.023739 14.500589
-3.347586 6.851555 14.431849
-4.413405 6.512699 14.294495
--0.366315 -6.675437 16.952600
--1.356122 -6.266800 15.764019
-0.815215 -6.957287 16.577135
-2.161530 -7.021439 16.301128
-3.385474 -6.841762 15.941924
-4.455472 -6.495527 15.447703
-5.380936 -6.033587 16.425529
--2.211912 -5.756092 16.725527
--3.007405 -5.109622 15.770016
-6.180608 -5.480015 15.632506
-6.906437 -4.808105 16.490269
--3.695539 -4.363213 16.583389
--4.269347 -3.521611 15.651614
-7.536598 -4.038703 15.443009
-8.065992 -3.164154 15.880507
--4.712896 -2.606183 16.396795
--5.017803 -1.657165 15.394910
-8.503810 -2.097330 16.303724
--5.196722 -0.593522 15.773882
-8.783051 -0.846449 16.580355
--5.203835 0.527139 16.116684
-8.806689 0.652656 16.737356
--5.031038 1.609452 16.585714
-8.511791 2.074951 16.702953
--4.717294 2.594346 15.620203
--4.295251 3.475438 16.517382
-8.051929 3.187948 16.610466
--3.722175 4.328541 15.714138
--3.021608 5.098919 16.712322
-6.863254 4.856207 15.684073
-7.500587 4.090698 16.817381
--2.257318 5.724251 15.757606
--1.354491 6.266243 16.891415
-5.333356 6.059585 15.417947
-6.135925 5.513280 16.483198
--0.426569 6.655771 16.392332
-0.784891 6.953658 16.395918
-2.146489 7.021384 16.306808
-3.389823 6.841252 16.052271
-4.449823 6.498085 15.758986
--0.582788 -6.595362 18.999664
--1.337664 -6.273612 17.618839
-0.530260 -6.905825 18.999544
-2.142637 -7.035214 18.998800
-3.483616 -6.820990 17.795616
-4.481755 -6.483364 17.184540
-5.391660 -6.023991 18.109457
--2.048834 -5.864153 18.999622
--2.968259 -5.151852 18.998568
-6.197755 -5.465113 17.394392
-6.867369 -4.855500 18.998432
--3.777458 -4.257582 18.999603
--4.283327 -3.501937 17.420820
-7.500039 -4.090722 17.229153
-8.042489 -3.205632 17.944044
--4.723695 -2.576720 18.998041
--5.011132 -1.673518 17.018755
-8.489552 -2.157534 18.999357
--5.185596 -0.700739 17.542685
-8.808784 -0.587110 18.999815
--5.207325 0.475031 17.873302
-8.757147 1.012802 18.999838
--5.030905 1.596845 18.131798
-8.410816 2.356683 18.999828
--4.728800 2.563359 17.297136
--4.339964 3.406822 18.999193
-7.969231 3.333843 18.999538
--3.731256 4.322196 18.997101
--3.022273 5.087537 18.999786
-6.865243 4.854503 17.475479
-7.480693 4.117693 18.998926
--2.198368 5.769955 18.996733
--1.316561 6.285483 18.999405
-5.368109 6.039005 17.140402
-6.153033 5.506114 18.998512
--0.501538 6.623068 18.432381
-0.510158 6.900224 18.999151
-2.037757 7.035807 18.998833
-3.438720 6.833452 18.997044
-4.472171 6.486749 17.630827
--0.419758 -6.162887 18.999804
--1.282530 -6.291184 19.000019
-0.562139 -6.360853 18.999802
-2.038842 -6.409124 18.999769
-3.582752 -6.784072 18.999821
-4.618444 -6.427100 18.999357
-5.360695 -6.032370 18.999912
--1.754393 -5.401208 18.999821
--2.672531 -4.862156 18.999655
-6.033245 -5.590606 18.999575
-6.715732 -4.704179 18.999634
--3.192754 -4.103057 18.999834
--4.343695 -3.376343 18.999968
-7.595253 -3.952276 18.999590
-8.052598 -3.162439 19.000080
--4.783033 -2.383818 18.999943
--5.007696 -1.697596 18.999117
-7.794069 -1.794174 18.999931
--5.203384 -0.477181 18.999594
-7.800010 -0.308560 18.999905
--5.176605 0.766331 18.999802
-7.797681 1.261689 18.999886
--5.004079 1.667275 18.999912
-7.815713 2.694906 18.999962
--4.797422 2.371113 18.999693
--3.994534 3.244930 18.999672
-7.790813 3.620349 18.999851
--3.886195 4.082253 18.999613
--2.646888 4.701065 18.999615
-6.876835 4.830838 18.999680
-7.265234 3.943586 18.999613
--2.059459 5.845382 18.999544
--1.151431 5.951427 18.999699
-5.214048 6.124995 18.999561
-5.965988 5.382691 18.999603
--0.673609 6.553061 18.999987
--0.084724 6.745022 18.999687
-1.398876 6.395272 18.999702
-3.084863 6.880538 18.999796
-4.412638 6.501444 18.999855
--0.678799 -5.391832 18.999899
-0.624825 -5.640241 18.999811
-2.052987 -5.707369 18.999916
-3.590884 -5.735614 18.999847
-4.758963 -5.866226 18.999826
--1.816533 -4.281603 18.999872
--0.374683 -4.300263 18.999992
-0.707510 -4.605871 18.999968
-2.069934 -4.703549 19.000027
-3.477571 -4.730026 19.000025
-4.746855 -4.898595 18.999897
-5.802374 -5.026480 18.999874
--3.359482 -2.825997 18.999943
--1.797490 -2.946874 19.000059
--0.588214 -3.283223 19.000071
-0.725950 -3.387789 19.000040
-2.073682 -3.430963 19.000071
-3.451158 -3.440566 19.000107
-4.804687 -3.475805 19.000051
-5.996051 -3.555539 18.999928
-6.891012 -3.772015 18.999899
--4.377805 -1.581656 18.999771
--3.165847 -1.570790 18.999832
--2.012611 -1.890440 18.999987
--0.652232 -2.008012 19.000082
-0.699707 -2.057180 19.000067
-2.070887 -2.067044 19.000055
-3.448277 -2.068965 19.000088
-4.821134 -2.092548 19.000111
-6.073223 -2.234985 19.000036
-7.088723 -2.562591 18.999964
--4.430764 -0.064294 18.999807
--3.347905 -0.511969 18.999792
--2.036382 -0.634434 18.999926
--0.682413 -0.676416 19.000036
-0.691577 -0.687734 19.000061
-2.068966 -0.689655 19.000048
-3.448277 -0.689655 19.000057
-4.821197 -0.713177 19.000078
-6.090087 -0.863216 19.000029
-7.053500 -1.236549 18.999943
--4.446630 1.270488 18.999842
--3.383532 0.891842 18.999809
--2.059218 0.718773 18.999933
--0.687734 0.691576 19.000017
-0.689656 0.689656 19.000044
-2.068966 0.689656 19.000032
-3.446356 0.687735 19.000015
-4.813130 0.664608 19.000019
-6.084222 0.526794 18.999983
-7.074152 0.216041 18.999884
--4.258647 2.340764 18.999874
--3.325603 2.157415 18.999838
--2.052379 2.092137 18.999941
--0.689655 2.068966 19.000042
-0.689656 2.068966 19.000063
-2.067045 2.067045 19.000021
-3.437917 2.056599 18.999952
-4.777792 2.010435 18.999905
-6.039190 1.921396 18.999910
-7.061870 1.631720 18.999866
--3.185593 3.481377 18.999651
--1.963875 3.433903 18.999916
--0.680453 3.440811 19.000031
-0.690856 3.442599 19.000092
-2.081156 3.435752 19.000036
-3.423676 3.391321 18.999916
-4.741650 3.290211 18.999826
-5.819085 3.001389 18.999819
-7.040553 3.181136 18.999777
--1.752769 4.904328 18.999651
--0.654389 4.739786 18.999931
-0.642986 4.715181 19.000040
-2.066998 4.729179 19.000032
-3.471437 4.671422 18.999910
-4.536838 4.367679 18.999815
-6.036970 4.302793 18.999722
--0.626406 5.825130 18.999796
-0.468965 5.713502 18.999750
-1.813095 5.665907 18.999962
-3.389557 5.721221 18.999929
-4.737714 5.529325 18.999819
+-0.165639 -5.57322 -18.9999
+-0.461723 -6.63268 -19
+-1.12314 -5.85649 -18.9998
+1.33705 -5.61902 -19
+0.762372 -6.35024 -18.9999
+2.8209 -5.74239 -18.9998
+2.40843 -6.36675 -18.9998
+4.12058 -5.88897 -18.9999
+4.07536 -6.62011 -18.9997
+5.16205 -5.60424 -18.9998
+4.56427 -6.43212 -19
+5.17759 -6.14557 -18.9995
+-1.47666 -4.57216 -18.9998
+-2.07348 -5.83524 -18.9996
+-2.61641 -4.6208 -18.9997
+-0.231328 -4.39881 -19
+0.882585 -4.64038 -19
+2.27697 -4.70332 -19.0001
+3.658 -4.74693 -19
+4.91142 -4.7037 -18.9999
+6.027 -5.38489 -18.9997
+6.31193 -4.52778 -18.9998
+6.88345 -4.82408 -18.9998
+-2.94431 -3.16549 -18.9997
+-3.8788 -4.09236 -18.9996
+-3.97738 -3.16724 -18.9997
+-1.60276 -3.08386 -19
+-0.533028 -3.33809 -19
+0.747356 -3.39918 -19
+2.09409 -3.43365 -19.0001
+3.47779 -3.44307 -19.0001
+4.8432 -3.43427 -19
+6.20175 -3.41927 -18.9999
+7.3462 -3.9623 -18.9997
+7.2054 -3.47306 -18.9999
+7.7735 -3.64892 -18.9998
+-4.18657 -1.97631 -18.9999
+-4.79832 -2.3687 -18.9997
+-5.00676 -1.65666 -18.9999
+-3.00252 -1.7414 -18.9999
+-1.91787 -1.96363 -19
+-0.635057 -2.02567 -19.0001
+0.70145 -2.05886 -19.0001
+2.07089 -2.06704 -19.0001
+3.44828 -2.06896 -19.0001
+4.82017 -2.07173 -19.0001
+6.09465 -2.11645 -19
+7.08684 -2.32403 -18.9999
+7.80258 -2.71622 -19
+-4.41598 -0.716459 -18.9998
+-5.17908 -0.746684 -18.9998
+-3.27558 -0.744755 -18.9998
+-2.01413 -0.664914 -18.9999
+-0.677856 -0.679602 -19
+0.691577 -0.687734 -19.0001
+2.06897 -0.689655 -19
+3.44828 -0.689655 -19.0001
+4.82004 -0.692442 -19.0001
+6.09486 -0.736049 -19
+7.06866 -0.935413 -18.9999
+7.80527 -1.4059 -18.9999
+-4.41994 0.74697 -18.9998
+-5.20144 0.504959 -18.9997
+-3.39771 0.595431 -18.9998
+-2.05678 0.67768 -18.9999
+-0.687734 0.691576 -19
+0.689656 0.689656 -19
+2.06897 0.689656 -19
+3.44636 0.687735 -19
+4.81029 0.684958 -19
+6.08334 0.654945 -19
+7.06803 0.477729 -18.9999
+7.7869 0.107304 -18.9999
+-4.53828 1.93849 -18.9998
+-5.00353 1.7135 -18.9993
+-3.57111 1.92363 -18.9997
+-2.07507 2.04962 -18.9999
+-0.689655 2.06897 -19
+0.689656 2.06897 -19.0001
+2.06704 2.06704 -19
+3.43491 2.06238 -19
+4.7598 2.03936 -18.9999
+6.00049 2.03669 -18.9999
+7.06286 1.97365 -19
+7.78711 1.63042 -18.9999
+-4.77719 2.4016 -18.9999
+-4.34296 3.3778 -18.9999
+-3.63757 3.03841 -18.9999
+-2.0636 3.31379 -18.9999
+-0.71022 3.42089 -19
+0.666008 3.44158 -19.0001
+2.04569 3.43716 -19
+3.39201 3.41861 -18.9999
+4.65011 3.3975 -18.9998
+5.67485 3.21536 -18.9998
+6.81405 3.37996 -18.9999
+8.06886 3.13051 -19.0001
+-3.2048 4.17723 -18.9998
+-2.70899 4.86345 -18.9996
+-2.17894 4.49402 -18.9998
+-0.781654 4.63542 -19
+0.525132 4.69823 -19
+1.90224 4.70904 -19
+3.31156 4.71749 -18.9999
+4.34452 4.53933 -18.9998
+5.61226 4.73937 -18.9999
+6.65741 4.68186 -18.9997
+7.6001 3.94546 -18.9997
+-1.89057 5.40717 -18.9998
+-1.28092 6.29341 -19
+-0.973609 5.59014 -18.9999
+0.199929 5.6977 -19
+1.52972 5.63667 -19
+3.03038 5.70365 -19
+4.50071 5.76894 -18.9999
+5.36449 6.02988 -18.9999
+6.03342 5.59083 -18.9997
+-0.241275 6.69609 -19
+1.03753 6.3622 -18.9999
+2.66365 6.37519 -18.9999
+4.18506 6.58507 -19
+4.80452 6.33012 -18.9998
+-0.421235 -6.6564 -17.3945
+-1.3251 -6.28256 -18.9994
+0.679138 -6.94175 -18.9989
+2.21947 -7.01384 -18.9995
+3.52309 -6.80349 -18.9992
+4.46932 -6.48563 -18.9986
+5.35363 -6.0484 -17.3502
+-2.21049 -5.7609 -18.9968
+-3.02396 -5.0858 -18.9998
+6.1415 -5.51629 -18.9989
+6.86556 -4.85426 -17.4758
+-3.73112 -4.32226 -18.9971
+-4.33997 -3.40654 -18.9992
+7.48136 -4.1164 -18.9987
+7.96999 -3.33285 -18.9997
+-4.72867 -2.5636 -17.297
+-5.03106 -1.59663 -18.1299
+8.41184 -2.35357 -18.9999
+-5.2081 -0.470022 -17.8666
+8.75714 -1.01205 -18.9998
+-5.1856 0.701961 -17.5343
+8.80879 0.585674 -18.9998
+-5.01107 1.67397 -17.0177
+8.4914 2.15079 -18.9994
+-4.72266 2.57934 -18.998
+-4.28222 3.5038 -17.4249
+8.04487 3.20083 -17.9622
+-3.78025 4.25424 -18.9996
+-2.97077 5.14929 -18.9986
+6.86994 4.8528 -18.9986
+7.50049 4.09021 -17.2289
+-2.06735 5.85092 -18.9996
+-1.36407 6.26134 -17.4148
+5.38589 6.02754 -18.3284
+6.19525 5.46731 -17.4188
+-0.43759 6.65324 -18.9978
+0.715309 6.94696 -18.9991
+2.25376 7.0117 -18.9995
+3.5669 6.79275 -18.9992
+4.55136 6.44875 -18.2042
+-0.410703 -6.66194 -15.5201
+-1.35586 -6.26498 -16.6191
+0.723711 -6.94208 -16.0145
+1.99122 -7.02777 -16.3424
+3.31513 -6.86007 -16.4991
+4.44037 -6.50245 -16.7504
+5.34088 -6.055 -15.6309
+-2.25568 -5.72552 -15.7402
+-3.02271 -5.09783 -16.7158
+6.13575 -5.5134 -16.5069
+6.86337 -4.85604 -15.6837
+-3.72225 -4.32876 -15.714
+-4.29599 -3.47407 -16.5176
+7.50155 -4.08935 -16.8186
+8.05332 -3.18514 -16.6122
+-4.717 -2.59495 -15.6202
+-5.03075 -1.61058 -16.5848
+8.51205 -2.07399 -16.7047
+-5.20384 -0.526693 -16.1174
+8.80672 -0.652415 -16.7395
+-5.19673 0.593576 -15.7739
+8.78302 0.84656 -16.5823
+-5.01754 1.6583 -15.3952
+8.50373 2.09705 -16.3056
+-4.71312 2.60552 -16.3975
+-4.27052 3.51966 -15.6518
+8.06655 3.16319 -15.8808
+-3.69564 4.36314 -16.5834
+-3.0084 5.1086 -15.7701
+6.90649 4.8079 -16.4901
+7.53661 4.03861 -15.443
+-2.22549 5.74551 -16.6785
+-1.36305 6.26289 -15.4994
+5.37778 6.03596 -16.6763
+6.18322 5.47793 -15.6596
+-0.390271 6.66885 -15.8421
+0.736952 6.94365 -16.1268
+2.00136 7.02681 -16.3445
+3.32422 6.85805 -16.3823
+4.45268 6.49667 -16.3462
+-0.408345 -6.66395 -13.9546
+-1.40465 -6.24185 -14.8626
+0.750153 -6.9472 -14.3288
+2.05009 -7.02483 -14.5209
+3.32054 -6.859 -14.7311
+4.42404 -6.50861 -15.047
+5.32253 -6.06561 -14.1219
+-2.27421 -5.71154 -14.1543
+-3.03944 -5.07932 -14.8941
+6.13316 -5.51718 -14.8514
+6.86098 -4.85876 -14.1331
+-3.7194 -4.33203 -14.1568
+-4.28597 -3.49187 -14.8665
+7.51024 -4.07742 -15.0592
+8.06041 -3.1749 -14.7429
+-4.71475 -2.60044 -14.1271
+-5.02021 -1.64721 -14.9909
+8.52459 -2.04287 -14.6676
+-5.19789 -0.577524 -14.6062
+8.80403 -0.665392 -14.6377
+-5.19892 0.568878 -14.3019
+8.79439 0.733384 -14.564
+-5.02264 1.6427 -13.9184
+8.52698 2.02942 -14.4861
+-4.70762 2.61986 -14.8348
+-4.2629 3.53239 -14.145
+8.08751 3.12081 -14.3081
+-3.68957 4.37024 -14.8885
+-2.99894 5.11738 -14.1587
+6.90879 4.80847 -14.8336
+7.54789 4.0235 -13.9542
+-2.22734 5.7448 -14.877
+-1.34669 6.27231 -13.9576
+5.36625 6.0408 -15.0145
+6.18068 5.48005 -14.1338
+-0.37249 6.6749 -14.308
+0.766306 6.94889 -14.4504
+2.07008 7.02491 -14.4961
+3.33479 6.85669 -14.6176
+4.44318 6.50178 -14.7219
+-0.318432 -6.69582 -12.1635
+-1.39795 -6.24661 -13.3449
+0.823404 -6.95887 -12.6377
+2.05323 -7.02307 -12.9466
+3.31356 -6.85858 -13.0922
+4.4144 -6.51184 -13.4446
+5.31249 -6.07202 -12.3912
+-2.26588 -5.71788 -12.6499
+-3.04011 -5.07837 -13.4394
+6.12132 -5.52653 -13.3054
+6.84607 -4.87347 -12.4158
+-3.72931 -4.3215 -12.6776
+-4.28625 -3.49153 -13.3935
+7.50052 -4.09038 -13.4785
+8.05576 -3.18678 -13.1695
+-4.70745 -2.61395 -12.4645
+-5.01731 -1.65766 -13.3634
+8.51532 -2.07812 -13.0519
+-5.19391 -0.62783 -12.9857
+8.79463 -0.745398 -12.9957
+-5.20548 0.50498 -12.559
+8.80122 0.664622 -13.0344
+-5.01954 1.6551 -12.1913
+8.54972 1.95851 -12.9519
+-4.70489 2.62788 -13.3346
+-4.2614 3.53414 -12.6199
+8.11117 3.07557 -12.7492
+-3.68781 4.37227 -13.433
+-3.00313 5.11358 -12.6986
+6.91782 4.7989 -13.2982
+7.57278 3.99023 -12.2477
+-2.22206 5.74926 -13.3814
+-1.32128 6.28589 -12.2115
+5.37788 6.03388 -13.4851
+6.20348 5.4609 -12.4435
+-0.267109 6.71123 -12.5006
+0.847614 6.96169 -12.7792
+2.0725 7.02296 -12.8709
+3.3885 6.84432 -12.8681
+4.48424 6.48457 -13.0642
+-0.400608 -6.67584 -10.0009
+-1.36781 -6.2612 -11.6018
+0.891959 -6.9698 -10.0022
+2.11128 -7.01634 -10.0021
+3.29998 -6.86122 -10.0024
+4.37961 -6.52673 -11.4618
+5.27655 -6.09989 -10.001
+-2.25781 -5.72218 -11.0587
+-3.0383 -5.08235 -11.9206
+6.12205 -5.52591 -11.516
+6.85388 -4.86521 -10.783
+-3.75584 -4.28703 -11.1083
+-4.31631 -3.43773 -11.7225
+7.46607 -4.13573 -11.5767
+8.02029 -3.25161 -11.0174
+-4.71697 -2.59412 -10.001
+-4.99987 -1.71988 -11.3426
+8.50374 -2.10013 -11.0684
+-5.18966 -0.725674 -10.002
+8.78674 -0.777212 -11.3263
+-5.20451 0.603583 -10.0012
+8.80248 0.611 -11.3693
+-4.96461 1.87679 -10.0005
+8.56086 1.90961 -11.1492
+-4.68981 2.65968 -11.6447
+-4.24136 3.56404 -11.0214
+8.13766 3.01831 -10.812
+-3.68726 4.37463 -11.8989
+-2.96413 5.15131 -11.1817
+6.93699 4.77932 -11.5184
+7.58372 3.98027 -10.0007
+-2.22372 5.74618 -11.7774
+-1.40163 6.2433 -10.0023
+5.42846 6.00321 -11.6568
+6.22412 5.443 -10.7999
+-0.285183 6.71331 -10.0024
+0.964337 6.97769 -10.002
+2.13378 7.01422 -10.0016
+3.34863 6.85415 -10.0018
+4.50427 6.47827 -11.0485
+-0.720948 -6.92885 -9.99993
+-1.59424 -6.13655 -10.0003
+0.439274 -6.86799 -9.9999
+1.6889 -7.00016 -10.0002
+2.84035 -6.92312 -10.0002
+4.26005 -6.56391 -10
+5.44541 -6.30588 -9.99996
+-2.28921 -5.68947 -10.0002
+-3.07085 -5.05827 -10.0011
+6.21412 -5.44919 -10.0001
+6.85839 -4.84993 -9.9998
+-3.7586 -4.26762 -10.0001
+-4.24662 -3.55227 -10.0003
+7.51686 -4.0756 -10.0003
+8.16622 -2.95147 -9.99995
+-4.98645 -2.75603 -10.0001
+-4.9852 -1.74751 -9.99995
+8.59042 -1.78231 -9.99997
+-5.19374 -0.35682 -9.99961
+8.80674 -0.471123 -10.0002
+-5.11798 1.08739 -9.99947
+8.767 0.880242 -10.0002
+-5.30276 2.16285 -9.99976
+8.48191 2.1509 -9.99989
+-4.56398 2.94045 -10.0001
+-4.12453 3.75025 -10.0002
+8.07263 3.12807 -9.99986
+-3.65536 4.41385 -10.5465
+-3.02275 5.09247 -10.0005
+6.86384 4.85249 -9.99997
+7.82103 4.20652 -9.99994
+-2.21992 5.74785 -10.0004
+-1.64629 6.09452 -10.0001
+5.42216 6.01402 -10
+6.23086 5.42844 -9.99967
+-0.538707 6.60898 -10.0001
+0.854227 6.94577 -10
+2.01512 7.00283 -10
+3.09455 6.88638 -10
+4.43987 6.49522 -9.9997
+-8.19709 -9.99759 -9.99954
+-8.19907 -9.9996 -8.71607
+-8.19941 -8.69614 -9.99776
+-5.78179 -9.99754 -9.99945
+-6.42142 -9.99947 -9.9971
+-4.37589 -9.99783 -9.99946
+-4.95508 -9.99951 -9.99775
+-3.0063 -9.9977 -9.99946
+-3.561 -9.99951 -9.99767
+-1.65212 -9.99766 -9.99942
+-2.17367 -9.99948 -9.99778
+-0.245533 -9.99767 -9.99945
+-0.784858 -9.99948 -9.99781
+1.14554 -9.99768 -9.9995
+0.591992 -9.99949 -9.99782
+2.52095 -9.99765 -9.99951
+1.96513 -9.99949 -9.9978
+3.90812 -9.99754 -9.99938
+3.34847 -9.99946 -9.99786
+5.30818 -9.99752 -9.99925
+4.73052 -9.99942 -9.99742
+6.67824 -9.99746 -9.99919
+6.1094 -9.99938 -9.99746
+8.08056 -9.99759 -9.99932
+7.50012 -9.99939 -9.9974
+9.61784 -9.99714 -9.99939
+9.00171 -9.9993 -9.99713
+11.7976 -9.05769 -10.0004
+10.5971 -9.99952 -9.99866
+11.7995 -8.79916 -9.99779
+11.7995 -9.99882 -9.99849
+11.7993 -9.03897 -8.60629
+-8.1989 -7.74231 -9.99958
+-8.19946 -7.62862 -9.25753
+-6.28454 -7.79248 -9.99942
+-4.76608 -7.80558 -9.99945
+-3.41327 -7.85407 -9.99951
+-2.2703 -8.13866 -9.99946
+-0.871405 -7.83821 -9.99956
+0.72291 -8.12766 -9.99966
+2.04527 -8.14655 -9.99973
+3.3467 -8.05492 -9.99966
+4.97824 -7.63229 -9.99956
+6.41492 -7.73326 -9.9994
+7.75351 -7.70861 -9.99939
+9.27337 -7.69231 -9.99947
+10.8175 -7.78975 -9.9994
+11.7994 -7.77939 -9.99925
+11.7994 -8.13394 -8.66423
+-8.19887 -6.31558 -9.99958
+-8.19947 -5.92571 -9.99685
+-6.56326 -6.37495 -9.99952
+-4.93748 -6.41038 -9.9997
+-3.76909 -6.64519 -9.99958
+-2.30984 -6.56463 -9.99969
+6.46672 -6.12755 -9.99969
+7.71725 -6.18667 -9.99954
+9.1465 -6.14639 -9.99943
+10.7773 -6.23641 -9.99934
+11.7996 -6.3951 -9.9993
+11.7994 -6.88207 -8.76653
+-8.19749 -4.90518 -9.99946
+-8.19944 -4.53181 -9.99687
+-6.66104 -5.05399 -9.99955
+-5.17302 -5.39747 -9.99974
+-3.61479 -5.27917 -9.99996
+7.8226 -4.72377 -9.99976
+9.14806 -4.69676 -9.99952
+10.7724 -4.82779 -9.99934
+11.7997 -5.02342 -9.99931
+11.7995 -5.52977 -8.80217
+-8.19761 -3.62563 -9.99954
+-8.19949 -3.16594 -9.99717
+-6.7942 -3.9937 -9.99963
+-5.02595 -4.00032 -9.99981
+9.15487 -2.8498 -9.99971
+10.766 -3.35385 -9.99942
+11.7997 -3.64082 -9.99939
+11.7996 -4.14897 -8.80604
+-8.19766 -2.20032 -9.9996
+-8.1995 -1.78216 -9.99716
+-6.38979 -2.68289 -9.99974
+9.46595 -1.30939 -9.99975
+10.7672 -1.89012 -9.99948
+11.7997 -2.25433 -9.99943
+11.7996 -2.76118 -8.81251
+-8.19781 -0.848804 -9.99959
+-8.19951 -0.407458 -9.99705
+-6.71364 -1.25289 -9.99975
+9.47063 0.042371 -9.99988
+10.784 -0.492653 -9.99957
+11.7998 -0.870305 -9.99947
+11.7996 -1.37283 -8.81566
+-8.19778 0.504463 -9.99957
+-8.1995 0.971744 -9.99713
+-6.81132 0.162145 -9.99967
+9.4574 1.39109 -9.99979
+10.7854 0.876938 -9.99958
+11.7998 0.510227 -9.99949
+11.7996 0.012581 -8.81426
+-8.19762 1.96235 -9.99961
+-8.19951 2.35968 -9.99725
+-6.49768 1.85256 -9.99964
+9.39569 2.70167 -9.99973
+10.7885 2.24089 -9.9995
+11.7997 1.88965 -9.99946
+11.7996 1.39144 -8.81529
+-8.19756 3.36706 -9.9996
+-8.1995 3.7487 -9.99716
+-6.62274 3.37785 -9.99956
+-4.93925 3.32442 -9.99981
+9.07563 4.15473 -9.9997
+10.7977 3.6347 -9.99944
+11.7997 3.26808 -9.99942
+11.7996 2.7681 -8.81468
+-8.19751 4.75905 -9.99946
+-8.19945 5.1401 -9.99682
+-6.60346 4.75207 -9.99947
+-4.87612 4.68733 -9.99965
+-3.59685 4.47087 -10
+7.8499 5.36094 -9.99969
+9.48311 5.40077 -9.99951
+10.7814 4.9755 -9.99934
+11.7997 4.64623 -9.99936
+11.7995 4.14846 -8.80881
+-8.19744 6.16703 -9.99942
+-8.19941 6.53198 -9.99768
+-6.60477 6.14967 -9.99939
+-4.93618 6.13502 -9.99945
+-3.57221 6.09275 -9.9997
+-2.45116 5.95319 -9.9999
+6.40221 6.67369 -9.99961
+7.9455 6.70861 -9.99954
+9.20996 6.43888 -9.99948
+10.7955 6.27974 -9.99934
+11.7996 6.02125 -9.99923
+11.7995 5.5201 -8.80415
+-8.19852 7.58733 -9.99963
+-8.1993 7.72427 -8.98012
+-6.59485 7.66403 -9.99928
+-5.03632 7.64052 -9.99942
+-3.59776 7.71225 -9.99936
+-2.27084 7.72606 -9.99947
+-0.922407 7.75661 -9.99963
+0.655862 8.06874 -9.99963
+1.92548 8.1553 -9.99968
+3.19256 8.12559 -9.99969
+4.85449 7.87772 -9.99958
+6.40777 8.20465 -9.99937
+7.55589 7.89494 -9.99952
+8.98908 7.84703 -9.99943
+10.6035 7.72127 -9.99947
+11.7995 7.4184 -9.99942
+11.7994 6.87719 -8.79935
+-8.19926 8.90329 -9.9995
+-8.19942 9.99724 -8.59935
+-6.7312 9.99719 -9.99945
+-5.28643 9.99734 -9.9994
+-3.8736 9.99786 -9.99929
+-2.49381 9.99748 -9.99922
+-1.12963 9.99754 -9.99927
+0.257248 9.99754 -9.99939
+1.64137 9.99765 -9.9995
+3.0171 9.99767 -9.99948
+4.41983 9.99767 -9.99943
+5.83594 9.99766 -9.99938
+7.19122 9.99773 -9.99943
+8.57786 9.99791 -9.99969
+10.1254 9.99749 -9.99968
+11.7995 8.79381 -9.99945
+11.7994 8.2577 -8.76113
+-8.19716 9.99969 -9.99754
+-5.84271 9.99935 -9.99736
+-4.41833 9.99947 -9.99764
+-3.03875 9.9995 -9.99745
+-1.66551 9.99943 -9.99747
+-0.284061 9.99946 -9.99741
+1.0944 9.9995 -9.99786
+2.47065 9.99952 -9.99779
+3.85646 9.99952 -9.99778
+5.2457 9.99951 -9.99779
+6.62871 9.99951 -9.99776
+8.01678 9.99954 -9.99763
+9.4644 9.99957 -9.99829
+11.799 9.99992 -9.99735
+11.7994 9.31567 -8.67556
+-8.19843 -9.99965 -7.27568
+-8.19942 -9.00815 -8.18314
+-6.53528 -9.9994 -7.61533
+-4.97446 -9.99944 -7.76446
+-3.56977 -9.99951 -7.74437
+-2.2018 -9.99952 -7.68149
+-0.678205 -9.99961 -7.67834
+0.720812 -9.99953 -7.75858
+2.00248 -9.99939 -7.70947
+3.35839 -9.99954 -7.65082
+4.78443 -9.99956 -7.70594
+6.14014 -9.99955 -7.69818
+7.52183 -9.9995 -7.68039
+9.00782 -9.99941 -7.62805
+10.6084 -9.99927 -7.83166
+11.7994 -9.99938 -8.04471
+11.7994 -8.88869 -7.63939
+-8.19946 -7.60783 -7.80779
+11.7994 -7.71596 -7.50782
+-8.19948 -6.1337 -7.66038
+11.7995 -6.39496 -7.53897
+-8.1995 -4.75532 -7.63347
+11.7995 -5.02232 -7.54322
+-8.19952 -3.38947 -7.64152
+11.7995 -3.59501 -7.56737
+-8.19951 -2.01829 -7.65023
+11.7995 -2.115 -7.62544
+-8.19952 -0.652008 -7.66677
+11.7995 -0.73917 -7.61088
+-8.19952 0.718899 -7.67921
+11.7995 0.61735 -7.58825
+-8.19952 2.07396 -7.6803
+11.7994 2.01782 -7.62535
+-8.19954 3.5502 -7.66002
+11.7994 3.40569 -7.60767
+-8.19953 5.00925 -7.67573
+11.7994 4.78485 -7.5683
+-8.19951 6.33364 -7.65074
+11.7994 6.0615 -7.56898
+-8.19947 7.73422 -7.51648
+11.7994 7.35642 -7.58746
+-8.19957 9.17373 -7.05788
+11.7994 8.68465 -7.64093
+-8.19914 9.99962 -7.63757
+-6.29659 9.99945 -7.77115
+-4.75205 9.99947 -7.76288
+-3.38468 9.99957 -7.74997
+-2.10615 9.99959 -7.6871
+-0.694825 9.9996 -7.66864
+0.710558 9.99967 -7.72381
+1.98846 9.99967 -7.72798
+3.36774 9.99962 -7.72863
+4.8665 9.99963 -7.72861
+6.32765 9.99959 -7.73048
+7.73359 9.99954 -7.70922
+9.23208 9.99946 -7.64451
+10.8163 9.99937 -7.71955
+11.7995 9.99878 -7.69648
+-8.19753 -9.99945 -5.87668
+-8.19938 -9.99717 -6.64883
+-6.61516 -9.99959 -6.17231
+-4.92824 -9.99951 -6.28732
+-3.49312 -9.99963 -6.29089
+-2.3968 -9.99962 -6.54543
+-0.931823 -9.99956 -6.18224
+1.2784 -9.99984 -5.98741
+2.0667 -9.99954 -6.00257
+3.1211 -9.99953 -6.41269
+4.92238 -9.99969 -6.00066
+6.26868 -9.99967 -6.09721
+7.59318 -9.99962 -6.18108
+9.09388 -9.99956 -6.15629
+10.763 -9.9994 -6.29447
+11.7996 -9.99911 -6.69477
+11.7995 -8.81578 -6.34512
+-8.19947 -7.64717 -6.36588
+11.7995 -7.55803 -6.17905
+-8.19949 -6.21035 -6.23046
+11.7995 -6.22387 -6.2131
+-8.19952 -4.87224 -6.19582
+11.7994 -4.84005 -6.25885
+-8.1995 -3.44054 -6.05822
+11.7995 -3.10488 -6.37419
+-8.19957 -1.90463 -6.40873
+11.7995 -1.50361 -6.64409
+-8.19966 -0.488334 -6.57999
+11.7994 -0.206462 -6.52868
+-8.19956 0.826927 -6.55895
+11.7995 1.03499 -6.59973
+-8.19968 2.09077 -6.50361
+11.7995 2.51653 -6.62208
+-8.19962 3.77823 -6.31641
+11.7995 4.06586 -6.28526
+-8.19956 5.196 -6.61156
+11.7994 5.28194 -6.5235
+-8.19955 6.31962 -6.32453
+11.7994 6.32852 -6.30567
+-8.19954 7.69694 -6.1067
+11.7994 7.54832 -6.31958
+-8.19956 9.99736 -5.59209
+11.7994 8.80396 -6.27409
+-8.19913 9.9996 -6.20218
+-6.54947 9.99949 -6.32266
+-4.87602 9.99958 -6.27507
+-3.54074 9.99956 -6.3145
+-2.58739 9.9997 -6.36768
+-1.33232 9.99968 -5.96881
+0.394105 9.9998 -5.83427
+1.52283 9.99982 -5.99421
+2.65645 9.99974 -5.94006
+4.30939 9.99972 -6.26818
+6.10192 9.9997 -6.24617
+7.61072 9.99963 -6.21128
+9.13233 9.99957 -6.15037
+10.7712 9.99939 -6.20961
+11.7996 9.99914 -6.30579
+-8.19759 -9.99934 -4.50462
+-8.19945 -9.99703 -5.26645
+-6.63141 -9.99952 -4.84593
+-4.94153 -9.99963 -4.97573
+-3.66272 -9.9997 -5.21171
+-1.94073 -9.99991 -4.72296
+-0.645099 -9.99843 -5.52123
+-1.59836 -8.84114 -4.97101
+0.798045 -9.99849 -5.94214
+2.01921 -9.43833 -6.01992
+3.22411 -9.99894 -5.86579
+4.54506 -9.99951 -5.36066
+5.38716 -9.99979 -4.82181
+6.39244 -9.99974 -4.6528
+7.63411 -9.99972 -4.65417
+9.11667 -9.99965 -4.74494
+10.7754 -9.99947 -4.89288
+11.7997 -9.99915 -5.31098
+11.7996 -8.80658 -4.97432
+-8.1995 -7.66196 -4.97606
+-0.543789 -7.70183 -5.55331
+-1.54205 -7.18488 -5.00971
+0.646769 -7.90686 -5.92393
+2.02999 -7.93112 -6.03092
+3.28571 -8.12706 -5.8464
+4.39282 -8.55304 -5.44275
+5.40243 -8.98695 -4.82703
+11.7995 -7.53607 -4.81402
+-8.19953 -6.25495 -4.79557
+-0.527092 -6.06526 -5.5609
+-1.56332 -5.61371 -4.99276
+0.710227 -6.23365 -5.9343
+2.05921 -6.28264 -6.03173
+3.46901 -6.27401 -5.8034
+4.57678 -6.58624 -5.35225
+5.61069 -6.9818 -4.68251
+11.7995 -6.21488 -4.91285
+-8.19959 -4.94826 -4.60804
+-0.66015 -4.41094 -5.51038
+-1.7348 -4.51194 -4.86387
+0.687797 -4.76722 -5.93247
+2.09622 -4.80088 -6.02994
+3.52615 -4.70244 -5.79008
+4.87811 -4.63238 -5.19541
+5.80536 -5.12235 -4.51428
+11.7996 -4.77263 -5.05801
+-8.19982 -3.81262 -4.6497
+-8.19964 -2.74485 -5.35563
+-8.1978 -3.80349 -4.67163
+-6.5701 -3.03749 -5.19777
+-5.57925 -3.91198 -4.57421
+-4.48124 -3.05789 -5.19036
+-3.68686 -3.99315 -4.50476
+-2.88729 -3.15663 -5.13118
+-2.19812 -4.00703 -4.4874
+-1.39448 -3.19619 -5.10376
+-0.41727 -3.0498 -5.5994
+0.704127 -3.31061 -5.93499
+2.10378 -3.3852 -6.03007
+3.4831 -3.35722 -5.79608
+4.70443 -2.8666 -5.2803
+5.8646 -4.06125 -4.42897
+5.11222 -3.32146 -5.02754
+7.01095 -4.1033 -4.41422
+8.13637 -3.06952 -5.18374
+8.85616 -4.02705 -4.48549
+9.96079 -3.00355 -5.22534
+10.6101 -3.91853 -4.56995
+11.7989 -3.01103 -5.22912
+11.7999 -3.95905 -4.52182
+11.7996 -3.33465 -5.56163
+-8.19966 -1.60127 -5.80587
+-7.00456 -1.96599 -5.69476
+-4.84565 -1.96466 -5.70131
+-3.27037 -1.9962 -5.692
+-1.87837 -2.08709 -5.66184
+-0.27108 -2.07877 -5.65795
+0.68909 -2.01758 -5.93183
+2.08614 -2.03094 -6.02961
+3.35565 -1.4972 -5.81852
+3.82438 -2.04312 -5.66752
+6.12012 -2.10612 -5.6558
+7.73497 -2.04484 -5.6787
+9.45107 -1.91452 -5.72032
+11.0765 -1.83866 -5.74474
+11.7996 -1.91695 -5.70222
+-8.19929 -0.265202 -6.02265
+-6.81928 -0.707609 -5.99051
+-4.98513 -0.710446 -5.99389
+-3.43209 -0.675685 -5.99677
+-2.00581 -0.700454 -5.9967
+-0.657409 -0.737507 -5.99426
+0.98377 -0.64209 -5.98784
+1.87332 -0.349933 -6.01859
+2.461 -0.601646 -5.98965
+4.77655 -0.725026 -5.9921
+6.14394 -0.744991 -5.99286
+7.60217 -0.724354 -5.99422
+9.18318 -0.653566 -6.00002
+11.0121 -0.649617 -5.99069
+11.7994 -0.882933 -5.953
+-8.19947 1.07129 -5.92607
+-6.7865 0.677417 -5.99278
+-4.98993 0.655453 -6.0007
+-3.44648 0.718845 -5.99453
+-2.00536 0.73413 -5.99368
+-0.644731 0.706743 -5.99517
+1.26927 0.555561 -5.99536
+2.15288 0.593043 -5.99993
+3.45059 0.746895 -5.99397
+4.77372 0.714711 -5.99798
+6.1685 0.678442 -5.99856
+7.61945 0.683036 -5.99665
+9.19225 0.689896 -5.99484
+10.9512 0.604808 -5.9933
+11.7995 0.196182 -6.01111
+-8.19962 2.07447 -5.64058
+-7.06479 1.9609 -5.69733
+-5.19245 1.93986 -5.71112
+-3.57144 2.04349 -5.67887
+-1.99584 2.09098 -5.66089
+-0.116349 1.96294 -5.69391
+0.740772 1.06398 -5.92838
+2.09398 2.05916 -6.03173
+3.46867 1.5661 -5.80075
+3.91318 2.18298 -5.63279
+6.03045 2.10429 -5.66051
+7.46606 1.97225 -5.69876
+9.08895 1.95858 -5.70153
+11.798 1.89679 -5.72495
+11.7999 1.09141 -5.90854
+-8.19956 3.15068 -5.11398
+-8.19706 2.99949 -5.22817
+-5.74251 3.0277 -5.20835
+-3.93659 3.0847 -5.17498
+-1.44571 3.2821 -5.05407
+-0.690656 2.45789 -5.48932
+0.639774 3.37486 -5.92334
+2.05413 3.37455 -6.03329
+3.47208 3.26957 -5.79926
+4.48526 2.66844 -5.38629
+5.1457 3.38702 -4.98852
+7.07235 3.13682 -5.14607
+8.7314 3.03843 -5.19968
+10.4997 2.98373 -5.22994
+11.7998 2.8625 -5.28552
+-8.1994 3.95081 -4.55141
+-8.19959 4.97836 -5.21074
+-6.52386 3.91787 -4.57198
+-4.5941 3.9391 -4.55296
+-2.1994 4.01673 -4.47944
+-1.99539 3.7749 -4.66598
+-0.830999 4.69831 -5.43751
+-1.69672 5.1706 -4.90238
+0.596438 4.73475 -5.92116
+2.04608 4.82058 -6.03221
+3.46116 4.74063 -5.80437
+4.76598 4.33375 -5.25122
+5.72604 3.91501 -4.54986
+5.90593 4.13065 -4.37831
+7.96171 3.99864 -4.50566
+9.75807 3.87341 -4.60757
+11.7991 3.79821 -4.67795
+11.7996 4.16286 -5.0983
+11.7995 5.31462 -5.098
+-8.19954 6.52473 -5.26158
+-0.553185 6.46067 -5.55391
+-1.54504 6.79488 -5.014
+0.661656 6.28116 -5.9331
+2.08754 6.35792 -6.03063
+3.41028 6.36392 -5.81403
+4.57683 6.19255 -5.3483
+5.56505 5.56919 -4.69488
+11.7994 6.60643 -5.19312
+-8.19954 7.67513 -4.79068
+-0.382301 8.20488 -5.62016
+-1.41906 8.50401 -5.09013
+0.778209 8.04386 -5.94469
+2.127 8.09693 -6.02648
+3.43595 8.36112 -5.80279
+4.56578 8.25118 -5.35078
+5.53324 7.57779 -4.72613
+11.7993 7.59245 -5.02651
+-8.19954 9.99693 -4.19685
+-0.437395 9.99892 -5.60359
+-1.58488 9.99912 -4.97442
+0.770631 9.99792 -5.93869
+1.9877 9.99786 -6.02556
+3.20176 9.99896 -5.85858
+4.36427 9.99946 -5.44589
+5.47986 9.99883 -4.77378
+11.7994 8.80569 -4.88641
+-8.19757 9.99935 -4.79727
+-6.63177 9.99953 -4.9396
+-5.03659 9.99956 -4.92776
+-3.77388 9.9994 -5.01392
+-2.27713 9.99953 -4.41409
+6.06931 9.99965 -4.94457
+7.54484 9.9997 -4.85216
+9.11212 9.99965 -4.76128
+10.7662 9.99945 -4.81712
+11.7996 9.9991 -4.91783
+-8.19764 -9.9994 -3.12671
+-8.19948 -9.99717 -3.8855
+-6.5883 -9.99957 -3.57039
+-5.07234 -9.99965 -4.05223
+-2.86643 -9.99993 -3.80125
+-2.41256 -9.35749 -4.29372
+-3.02848 -9.07985 -3.59081
+6.19788 -9.99912 -4.12058
+6.8355 -9.9997 -3.27754
+7.62146 -9.99977 -2.99015
+9.11102 -9.99967 -3.25416
+10.7717 -9.99949 -3.50408
+11.7997 -9.99919 -3.9304
+11.7996 -8.80791 -3.59826
+-8.19952 -7.67476 -3.53676
+-2.36183 -8.12437 -4.347
+-3.0338 -7.35249 -3.58673
+6.32277 -7.78925 -3.98545
+6.87016 -8.65175 -3.24433
+11.7995 -7.54827 -3.46742
+-8.19965 -6.31026 -2.94672
+-2.41352 -6.2598 -4.30159
+-3.12079 -6.02459 -3.45629
+6.64277 -4.84027 -3.59143
+7.08923 -6.58889 -2.87407
+11.7995 -6.20724 -3.61325
+-8.19963 -5.31546 -2.81644
+-8.19912 -4.6211 -3.87104
+-7.26053 -5.17221 -3.0777
+-6.48994 -4.55677 -3.93089
+-5.17965 -5.12774 -3.1458
+-4.52909 -4.66646 -3.8014
+-3.50608 -5.32179 -2.83266
+-2.88193 -4.68199 -3.78063
+-2.25803 -4.97667 -4.4334
+6.44526 -4.65777 -3.81467
+7.18935 -5.39422 -2.65104
+7.5631 -4.85721 -3.56085
+9.41727 -5.31204 -2.82561
+9.81293 -4.68535 -3.78367
+11.799 -5.29869 -2.87817
+11.7996 -4.58416 -3.89808
+11.7996 -5.61048 -3.13906
+11.7997 -5.00531 -4.16231
+-8.19967 4.67442 -3.77854
+-8.19726 4.69093 -3.77546
+-5.5207 4.6044 -3.87257
+-2.88691 4.70311 -3.75945
+-2.42071 4.21553 -4.27769
+6.18819 4.38023 -4.10808
+6.64066 4.87083 -3.55531
+8.85229 4.69073 -3.78125
+10.5934 4.58191 -3.90496
+11.7998 4.52396 -3.9569
+-8.19971 5.34088 -2.77212
+-8.19962 6.14252 -3.96974
+-6.56931 5.17123 -3.07614
+-4.52658 5.12271 -3.1459
+-3.41452 5.20868 -3.01414
+-2.58678 5.68039 -4.13397
+-3.10195 6.64337 -3.49666
+6.38506 6.2636 -3.90743
+7.03093 5.21795 -2.9662
+7.1926 5.40188 -2.66603
+9.85994 5.25591 -2.94837
+11.7989 5.22951 -3.00956
+11.7996 5.5767 -3.54172
+11.7994 6.42404 -3.86694
+-8.19958 7.67019 -3.41628
+-2.32264 7.38102 -4.38778
+-2.95461 8.18511 -3.69062
+6.29651 8.51881 -4.0083
+6.92742 7.28331 -3.14909
+11.7994 7.61282 -3.61935
+-8.19957 9.99696 -2.81685
+-2.25803 8.89728 -4.44493
+-2.89604 9.9981 -3.76174
+6.29509 9.99953 -3.99378
+6.97596 9.99905 -3.0871
+11.7995 8.80619 -3.49337
+-8.19763 9.99927 -3.42032
+-6.59763 9.99955 -3.56548
+-5.26085 9.99952 -3.89437
+-3.30654 9.99949 -3.16924
+7.42306 9.9996 -3.44458
+9.07039 9.99964 -3.36427
+10.7641 9.99947 -3.4364
+11.7997 9.99913 -3.53786
+-8.19768 -9.99943 -1.745
+-8.1995 -9.99722 -2.50203
+-6.59504 -9.99961 -2.2303
+-4.64972 -9.99965 -2.79543
+-3.44001 -9.99924 -2.94914
+-3.86842 -9.99945 -2.01721
+7.56565 -9.99982 -1.68588
+7.28395 -9.99939 -2.47809
+9.12823 -9.99967 -1.86851
+10.7704 -9.99947 -2.11445
+11.7997 -9.99921 -2.55059
+11.7996 -8.80913 -2.22078
+-8.19955 -7.69933 -2.06696
+-3.56584 -8.84998 -2.72673
+-3.98181 -8.86997 -1.68132
+7.35753 -7.94573 -2.30029
+11.7995 -7.58294 -2.03571
+-8.19967 -6.54449 -1.42444
+-3.58699 -6.74013 -2.6866
+-3.97908 -5.76263 -1.72407
+7.46834 -6.58402 -1.99434
+11.7994 -6.58809 -1.98092
+-8.19962 -5.76181 -1.74931
+-7.26585 -5.66905 -2.04133
+-4.82728 -5.71084 -1.96137
+7.4887 -5.68936 -1.95342
+8.87783 -5.71186 -1.91116
+11.076 -5.75436 -1.78886
+11.7996 -5.72243 -1.84114
+-8.1995 5.79369 -1.64381
+-8.19974 6.37456 -2.46707
+-7.02259 5.6533 -2.06944
+-3.77653 5.58982 -2.23419
+-3.67623 5.45761 -2.49771
+-3.98853 5.787 -1.64497
+7.59282 5.79783 -1.61112
+7.34442 6.1035 -2.32359
+9.28155 5.75538 -1.78479
+11.0677 5.74716 -1.82882
+11.7996 5.69947 -1.92362
+11.7996 6.66806 -2.24035
+-8.19961 7.68916 -2.02192
+-3.5694 7.41916 -2.7286
+-3.96093 7.96389 -1.77275
+7.35283 7.92262 -2.31043
+11.7995 7.59537 -2.15142
+-8.19958 9.99696 -1.43876
+-3.48177 9.0798 -2.88818
+-3.91436 9.99888 -1.96447
+7.41329 9.99806 -2.14981
+11.7995 8.80897 -2.09851
+-8.19767 9.99928 -2.03877
+-6.64752 9.99958 -2.13032
+-4.89091 9.99958 -2.3375
+7.435 9.99954 -2.10487
+8.85867 9.99947 -2.14805
+10.7656 9.99945 -2.06396
+11.7997 9.99915 -2.1576
+-8.19771 -9.99945 -0.370404
+-8.19953 -9.99725 -1.11984
+-6.64682 -9.99962 -0.81452
+-5.13366 -9.9997 -1.31835
+-4.16045 -9.99963 -0.859341
+7.59356 -9.99839 -1.60864
+7.75062 -9.99962 -0.840944
+8.90271 -9.99963 -0.428918
+10.7659 -9.99945 -0.697232
+11.7998 -9.99921 -1.16955
+11.7996 -8.8132 -0.837518
+-8.19955 -7.70087 -0.65279
+-4.19783 -8.77115 -0.561384
+7.65022 -7.22162 -1.39029
+7.78857 -8.60754 -0.615467
+11.7995 -7.6406 -0.62975
+-8.19977 -6.54723 -0.044602
+-4.19552 -5.99761 -0.590282
+7.67426 -5.87237 -1.27095
+7.81828 -6.01565 -0.297058
+11.7994 -6.65071 -0.593172
+-8.1997 -6.00969 -0.459218
+-6.83158 -5.98682 -0.77556
+-5.177 -5.99865 -0.699936
+8.70416 -5.99042 -0.735459
+10.9411 -5.99784 -0.631741
+11.7994 -5.9637 -0.834179
+-8.19966 6.02074 -0.310751
+-8.1996 6.55249 -1.17757
+-6.8298 5.97061 -0.831946
+-4.98506 5.90379 -1.18499
+-4.19002 5.98562 -0.621282
+7.63006 6.59499 -1.48072
+7.76947 5.96466 -0.740573
+8.8095 6.02023 -0.452149
+11.0019 5.99169 -0.632089
+11.7996 5.95043 -0.899059
+11.7995 6.58677 -0.676583
+-8.19957 7.69656 -0.663149
+-4.19233 8.45369 -0.661321
+7.64999 8.4886 -1.40437
+7.80149 7.39209 -0.467919
+11.7995 7.59673 -0.703268
+-8.19955 9.99696 -0.059296
+-4.20828 9.99949 -0.457902
+7.63209 9.99963 -1.44014
+7.82455 9.99927 -0.31472
+11.7996 8.81225 -0.723596
+-8.19769 9.99928 -0.661298
+-6.63312 9.9996 -0.731441
+-5.20871 9.99968 -0.783758
+8.77398 9.99963 -0.861566
+10.8024 9.99946 -0.71357
+11.7997 9.99918 -0.785225
+-8.19769 -9.99945 1.01094
+-8.19954 -9.99728 0.260243
+-6.61592 -9.99961 0.589153
+-5.26242 -9.9997 -0.007006
+-4.20927 -9.99954 0.433489
+8.77977 -9.99958 1.41587
+7.8245 -9.99937 0.331457
+10.7428 -9.99948 0.797123
+11.7998 -9.99922 0.212846
+11.7996 -8.81568 0.536668
+-8.19956 -7.6964 0.725159
+-4.19361 -8.46825 0.649148
+7.79868 -7.35007 0.498136
+11.7995 -7.63711 0.626647
+-8.1995 -6.48146 1.2944
+-4.19949 -5.99617 0.54449
+7.76054 -5.95705 0.80583
+11.7994 -6.60753 0.605803
+-8.19963 -5.9576 0.895889
+-6.77708 -6.00586 0.59603
+-5.03177 -5.99673 0.636892
+8.93867 -5.98603 0.79465
+10.8488 -5.99731 0.635572
+11.7994 -6.00882 0.373658
+-8.2 5.93302 1.03539
+-8.19983 6.55278 0.180893
+-6.76402 6.00199 0.588188
+-5.12914 6.02658 0.126953
+-4.20007 6.00179 0.516684
+8.84915 5.92512 1.11809
+7.81225 6.0135 0.354384
+10.9117 5.98864 0.664857
+11.7995 6.01158 0.171386
+11.7995 6.57684 0.497613
+-8.19949 7.68523 0.709118
+-4.19842 8.7574 0.554094
+7.78442 8.61684 0.641178
+11.7994 7.60975 0.578961
+-8.19951 9.99693 1.32167
+-4.16424 9.99951 0.836725
+7.74613 9.99965 0.873186
+11.7996 8.80854 0.648856
+-8.19768 9.99927 0.730803
+-6.54254 9.99957 0.734784
+-5.27317 9.99964 0.387865
+8.98575 9.99961 1.15826
+10.6882 9.99945 0.658293
+11.7997 9.99919 0.598196
+-8.19765 -9.99945 2.39541
+-8.19955 -9.99728 1.64003
+-6.60583 -9.99961 2.04525
+-4.87651 -9.99959 1.61
+-3.92053 -9.9986 1.94674
+7.62615 -9.99942 1.46373
+7.83277 -9.99958 2.42142
+7.4118 -9.99922 2.15331
+9.37796 -9.99953 2.68279
+10.7404 -9.99946 2.16793
+11.7997 -9.99924 1.59976
+11.7996 -8.81394 1.91355
+-8.19959 -7.68383 2.08501
+-3.96439 -7.98187 1.76292
+7.64351 -8.50331 1.42536
+7.35684 -7.93752 2.30271
+11.7995 -7.6072 1.9696
+-8.19949 -6.32738 2.58545
+-4.00186 -5.80537 1.60029
+7.62591 -6.54178 1.48911
+7.34341 -6.08285 2.32603
+11.7995 -6.62117 1.99507
+-8.19936 -5.63863 2.11163
+-6.98503 -5.73449 1.85631
+-3.88068 -5.7044 1.95718
+7.53005 -5.74929 1.8175
+9.58191 -5.60677 2.20039
+11.7987 -5.70484 1.94255
+11.7998 -5.87009 1.27159
+-8.19975 5.64937 2.05094
+-8.19966 6.47449 1.54661
+-7.04466 5.71182 1.91872
+-4.95035 5.80765 1.64898
+-3.98832 5.77253 1.69257
+7.66044 5.85866 1.33267
+7.43392 5.64185 2.09305
+7.46268 6.58286 2.00918
+9.20691 5.57266 2.25758
+11.7982 5.70278 1.94955
+11.7998 5.91185 1.07634
+11.7995 6.64995 1.72932
+-8.1995 7.68295 2.11712
+-3.98345 8.86402 1.67672
+7.64863 7.22049 1.39703
+7.35674 7.94794 2.30131
+11.7995 7.57989 1.94867
+-8.19951 9.99741 2.70402
+-3.87613 9.99934 1.9963
+7.58898 9.99888 1.62808
+7.24453 9.99922 2.55326
+11.7995 8.80569 2.03188
+-8.19766 9.99935 2.11508
+-6.66651 9.99955 2.02646
+-4.65983 9.9995 2.28615
+7.99735 9.99961 2.0502
+9.52443 9.99967 2.50562
+10.7585 9.99942 2.15377
+11.7997 9.99915 1.98904
+-8.1976 -9.99944 3.77763
+-8.19954 -9.99728 3.01846
+-6.61339 -9.9996 3.48849
+-4.9032 -9.9996 3.34323
+-3.48476 -9.0323 2.88362
+-3.23206 -9.99956 3.30639
+-2.89874 -9.40324 3.75253
+7.51429 -9.9997 3.86223
+6.95261 -9.99952 3.11959
+9.22827 -9.99955 3.61288
+10.7911 -9.99942 3.44706
+11.7997 -9.99922 2.97789
+11.7996 -8.81366 3.30475
+-8.19958 -7.67015 3.46072
+-3.57433 -7.42184 2.72009
+-2.95517 -8.18108 3.68992
+6.92961 -7.28234 3.14529
+11.7995 -7.60134 3.51339
+-8.19947 -6.09708 4.0043
+-3.66888 -6.09478 2.50712
+-3.10697 -6.65119 3.49049
+6.98905 -5.82084 3.03092
+11.7995 -6.4135 3.8384
+-8.19957 -5.20233 3.00775
+-7.31036 -5.25482 2.94141
+-4.87868 -5.25397 2.94132
+-3.4379 -5.2162 2.98405
+7.14268 -5.35229 2.75947
+9.17106 -5.22477 2.99777
+11.7991 -5.14388 3.13467
+11.7997 -5.52145 3.39463
+-8.19968 5.16328 3.07658
+-8.19964 6.26643 3.06268
+-8.19741 5.23396 2.99
+-5.65504 5.26294 2.93222
+-3.58951 6.74464 2.68187
+-3.52623 5.34419 2.79617
+-3.12318 6.02565 3.45305
+7.11585 5.31624 2.79778
+7.0691 6.63392 2.91492
+8.65912 5.24263 2.9473
+10.4931 5.20295 3.02765
+11.7998 5.28058 2.87447
+11.7995 6.20484 3.56241
+-8.19953 7.66955 3.57296
+-3.57234 8.83685 2.71247
+-3.03552 7.33993 3.58467
+6.87049 8.66143 3.24358
+11.7995 7.53805 3.4024
+-8.1995 9.99737 4.08607
+-3.44103 9.99906 2.94861
+-3.04338 9.04636 3.57143
+6.82995 9.99954 3.28602
+11.7995 8.80518 3.40815
+-8.19764 9.99943 3.48679
+-6.60827 9.99955 3.37931
+-4.65681 9.99946 3.51552
+-2.85246 9.99916 3.81664
+7.67975 9.99955 3.55673
+9.30138 9.99957 3.48895
+10.7957 9.99944 3.49343
+11.7997 9.99913 3.36444
+-8.19753 -9.99941 5.15865
+-8.19951 -9.99726 4.39744
+-6.61414 -9.99959 4.87154
+-4.89058 -9.99964 4.71626
+-3.38709 -9.99968 4.57039
+-2.26142 -8.85597 4.44213
+-2.4371 -9.9998 4.27376
+-1.47539 -9.99831 5.06035
+6.31482 -9.99975 3.96925
+6.3725 -9.99976 5.16369
+5.51435 -9.99911 4.74687
+7.89445 -9.99968 5.25092
+9.1047 -9.99961 4.97656
+10.7789 -9.99945 4.77943
+11.7997 -9.99918 4.34959
+11.7995 -8.81173 4.69431
+-8.19955 -7.67764 4.81908
+-2.32687 -7.34884 4.38336
+-1.41402 -8.22989 5.09448
+6.30478 -8.5138 3.99737
+5.51954 -7.70674 4.73899
+11.7994 -7.60114 4.95949
+-8.19954 -6.51844 5.26637
+-2.59231 -5.67432 4.12915
+-1.57237 -6.5863 4.99268
+6.37926 -6.2716 3.91377
+5.56494 -5.66028 4.69499
+11.7994 -6.6106 5.18098
+-8.19961 -4.63309 3.82964
+-8.19958 -4.94031 5.22296
+-8.19811 -4.65855 3.81616
+-5.56223 -4.64124 3.83251
+-2.89778 -4.71627 3.74666
+-2.41594 -4.21042 4.28279
+-1.68727 -5.0755 4.90949
+6.1911 -4.38331 4.10456
+5.77761 -3.96535 4.50415
+6.65602 -4.86281 3.5574
+8.71861 -4.68296 3.78962
+10.7674 -4.5624 3.92222
+11.7999 -4.54821 3.92418
+11.7996 -5.32053 5.05529
+-8.19917 -3.88145 4.61243
+-6.5091 -3.93578 4.55499
+-4.37714 -3.94348 4.54897
+-2.16382 -3.98378 4.51077
+-1.93607 -3.71407 4.71512
+5.91459 -4.13812 4.3708
+8.1256 -3.9867 4.51706
+10.0431 -3.83494 4.64325
+11.7994 -3.9644 4.52851
+11.7997 -4.27387 5.01664
+-8.19944 4.55347 3.94891
+-8.1996 3.82059 4.63624
+-8.19964 4.94449 4.64995
+-6.52584 4.58989 3.89823
+-8.19801 3.79317 4.67523
+-4.56987 4.69199 3.77385
+-5.74256 3.89204 4.59349
+-2.88816 4.68834 3.77284
+-3.80474 3.99442 4.50415
+-2.26512 4.98879 4.42686
+-2.24086 4.05215 4.44631
+-1.78347 4.62144 4.82699
+6.32489 4.53507 3.95639
+5.78121 3.97544 4.50105
+5.69484 5.03779 4.59643
+7.60768 4.7864 3.65625
+6.93411 4.00084 4.49554
+9.71469 4.65628 3.81421
+8.65256 3.99518 4.50763
+11.7991 4.63589 3.85233
+10.7315 3.94761 4.53978
+11.7997 4.92365 4.17816
+11.7999 3.93528 4.53869
+11.7996 4.73606 5.04535
+-8.19955 6.25117 4.80728
+-2.41348 6.27998 4.30188
+-1.57204 5.73815 4.98621
+6.58531 4.77229 3.67407
+5.5824 6.82245 4.69452
+11.7995 6.21732 4.9138
+-8.1995 7.65919 5.00274
+-2.35585 8.1244 4.35553
+-1.51915 7.39833 5.02683
+6.31246 7.75096 3.99446
+5.39995 8.69754 4.8297
+11.7995 7.52598 4.75289
+-8.19948 9.99722 5.46745
+-2.40728 9.59537 4.29646
+-1.55559 9.0168 5.00207
+6.19638 9.99915 4.12235
+5.35933 9.99983 4.84494
+11.7995 8.8038 4.78393
+-8.1976 9.99951 4.86979
+-6.60393 9.99954 4.75503
+-4.82874 9.99963 4.7114
+-3.15046 9.99944 4.75502
+-1.95516 9.99926 4.7099
+6.57911 9.99976 4.93112
+8.03232 9.9997 5.08125
+9.1306 9.99965 4.91898
+10.7721 9.99945 4.83541
+11.7996 9.99912 4.74021
+-8.19884 -9.99958 6.59998
+-8.19954 -9.99714 5.79078
+-6.59376 -9.99954 6.27344
+-4.89157 -9.99958 6.16553
+-3.40745 -9.99964 6.15989
+-2.14077 -9.99967 6.05783
+-0.253161 -9.99629 5.68117
+-0.732826 -9.99967 5.44318
+1.16888 -9.99924 5.99507
+0.893293 -9.99991 5.94319
+2.44517 -9.99859 5.99252
+2.01813 -9.99999 6.00172
+3.71025 -9.99937 5.70953
+3.45281 -9.99961 6.44375
+4.60259 -9.99987 5.31662
+5.02613 -9.99975 6.28446
+6.52715 -9.99966 6.63933
+7.69279 -9.99964 6.36507
+9.15526 -9.9996 6.33268
+10.7809 -9.99943 6.15318
+11.7996 -9.99914 5.72894
+11.7995 -8.80792 6.07428
+-8.19954 -7.70134 6.13229
+-0.465143 -7.32634 5.58518
+0.806051 -7.70553 5.94773
+2.16766 -7.86473 6.01802
+3.43383 -8.22733 5.80189
+4.55638 -8.77209 5.35524
+11.7994 -7.56296 6.27038
+-8.19954 -6.31793 6.32553
+-0.569042 -5.74117 5.54578
+0.715764 -6.12431 5.93511
+2.08508 -6.26523 6.02814
+3.4703 -6.4207 5.80106
+4.56442 -6.92805 5.35486
+11.7994 -6.32937 6.30391
+-8.19955 -5.18717 6.61801
+-0.773766 -4.19486 5.46262
+0.651937 -4.66827 5.92822
+2.09159 -4.79036 6.03025
+3.50777 -4.77606 5.79416
+4.79618 -4.90646 5.23658
+11.7994 -5.2852 6.51932
+-8.19961 -2.84956 5.29795
+-8.19962 -3.6646 6.32733
+-7.25161 -3.07966 5.17121
+-4.84032 -3.04646 5.19645
+-3.17376 -3.09074 5.16965
+-1.33332 -3.16773 5.1288
+-0.438994 -2.9759 5.5911
+0.667161 -3.27391 5.93073
+2.09841 -3.37604 6.03074
+3.47716 -3.36914 5.79741
+4.67086 -2.83958 5.29537
+5.18354 -3.42289 4.96367
+7.85437 -3.1209 5.157
+9.48074 -2.96397 5.24735
+11.7987 -2.90726 5.28472
+11.7996 -3.23373 5.59804
+11.7995 -4.09041 6.26321
+-8.19957 -1.77799 5.75275
+-8.19968 -2.0737 6.56534
+-7.26495 -2.07258 5.65578
+-4.89279 -1.97348 5.6985
+-3.39754 -1.97172 5.69897
+-1.91982 -2.04519 5.6744
+-0.26445 -2.06642 5.66102
+0.684231 -2.01022 5.93126
+2.08323 -2.0298 6.03001
+3.35616 -1.49763 5.81839
+3.82645 -2.04918 5.66598
+6.05751 -2.16063 5.63971
+7.59758 -2.09929 5.66325
+9.21807 -1.91466 5.7196
+11.0758 -1.79749 5.75254
+11.7997 -1.87953 5.71003
+11.7995 -2.61126 6.54298
+-8.1995 -0.491903 6.00731
+-8.19968 -0.705138 6.56679
+-6.82628 -0.832144 5.97681
+-4.98669 -0.758232 5.99144
+-3.45406 -0.674392 5.99683
+-2.01731 -0.693402 5.997
+-0.659782 -0.731215 5.99445
+0.981827 -0.639725 5.98781
+1.87315 -0.349767 6.0186
+2.46139 -0.602868 5.98957
+4.77615 -0.726427 5.99195
+6.13618 -0.749839 5.99254
+7.58302 -0.730423 5.99395
+9.15806 -0.64349 6.00236
+10.9408 -0.600352 5.99983
+11.7994 -0.848953 5.96171
+11.7994 -1.26536 6.6553
+-8.19927 0.869105 5.96212
+-8.19954 0.631636 6.53628
+-6.75996 0.557422 6.00903
+-4.96434 0.624918 6.00712
+-3.4289 0.722607 5.99453
+-2.00387 0.735437 5.99347
+-0.644371 0.707168 5.9951
+1.26921 0.556508 5.99535
+2.15361 0.594159 5.99992
+3.45229 0.744381 5.99412
+4.78076 0.70764 5.99824
+6.18337 0.673867 5.99877
+7.64895 0.686417 5.99659
+9.20698 0.702172 5.99434
+10.9082 0.670501 5.98891
+11.7995 0.354212 6.00902
+11.7994 0.02266 6.58805
+-8.19946 2.09179 5.64623
+-8.19959 2.00072 6.36154
+-6.98149 1.86973 5.73179
+-4.99675 1.94673 5.7116
+-3.401 2.07966 5.66845
+-1.98711 2.10789 5.65611
+-0.118843 1.96689 5.69301
+0.741546 1.06347 5.92851
+2.09519 2.05782 6.03178
+3.45633 1.67993 5.79194
+4.6568 2.07986 5.66177
+6.08104 2.04472 5.67778
+7.58554 1.97633 5.69774
+9.25867 2.02011 5.68467
+11.799 1.90374 5.71647
+11.7998 1.23865 5.87672
+11.7996 1.32236 6.55814
+-8.19951 2.99031 5.21274
+-8.19948 3.49101 6.02786
+-7.33664 2.95483 5.24812
+-5.27238 3.02004 5.21544
+-3.52557 3.15279 5.13577
+-1.5105 3.31975 5.02634
+-0.666315 2.44299 5.49905
+0.644604 3.38165 5.92402
+2.05719 3.36645 6.03331
+3.48534 3.23544 5.79639
+4.50456 2.66278 5.3824
+5.05021 3.26843 5.0613
+7.34561 3.08553 5.17355
+9.03905 3.07675 5.17857
+11.7994 3.11324 5.1607
+11.7998 3.10868 5.57314
+11.7996 2.96336 6.4276
+-8.19954 4.87106 6.19187
+-0.726174 4.99188 5.48244
+0.627673 4.82451 5.92453
+2.04644 4.80808 6.03182
+3.46942 4.65002 5.80247
+4.83145 4.13727 5.21853
+11.7995 4.83171 6.25927
+-8.19949 6.20935 6.23069
+-0.526029 6.78217 5.5607
+0.65804 6.39352 5.92664
+2.0612 6.3583 6.0301
+3.38234 6.21877 5.82048
+4.60058 5.81901 5.33851
+11.7995 6.22387 6.21311
+-8.19949 7.64401 6.39328
+-0.508467 8.55796 5.56415
+0.659633 8.1346 5.91859
+1.97273 8.05025 6.02886
+3.33139 8.06067 5.8315
+4.51078 7.7135 5.37968
+11.7995 7.54824 6.11835
+-8.19945 9.99774 6.85675
+-0.844982 9.99871 5.4126
+0.430627 9.99878 5.86994
+1.67864 9.99896 6.02615
+2.94741 9.99891 5.91711
+4.34735 9.99923 5.46733
+11.7995 8.81678 6.15322
+-8.19753 9.9997 6.26888
+-6.60741 9.99958 6.15897
+-4.915 9.99956 6.13862
+-3.3837 9.99963 6.17642
+-2.01127 9.99959 6.13179
+-0.351281 9.99944 6.1239
+1.22331 9.99974 5.97348
+2.37946 9.99979 5.97281
+3.75311 9.99956 6.37441
+5.31485 9.99966 6.07207
+6.6523 9.99963 6.45153
+7.71576 9.99965 6.28687
+9.13221 9.9996 6.31664
+10.7633 9.99951 6.22347
+11.7995 9.9993 6.12333
+-8.1989 -9.99953 8.00613
+-8.19952 -9.1926 7.17529
+-6.41795 -9.99943 7.75664
+-4.8156 -9.99945 7.63368
+-3.36835 -9.99952 7.68453
+-2.0002 -9.99956 7.68711
+-0.651669 -9.99956 7.68663
+0.729027 -9.99963 7.62748
+2.09405 -9.99965 7.69778
+3.41052 -9.99965 7.76292
+4.81626 -9.99961 7.71951
+6.36304 -9.99956 7.71986
+7.7447 -9.99947 7.76318
+9.22665 -9.99943 7.7629
+10.7663 -9.99948 7.55485
+11.7995 -9.99926 7.09837
+11.7994 -8.7728 7.43937
+-8.19944 -7.72296 7.54541
+11.7994 -7.43313 7.56303
+-8.19951 -6.31192 7.66098
+11.7994 -6.12061 7.57013
+-8.19953 -4.9808 7.68637
+11.7994 -4.84418 7.56895
+-8.19957 -3.52049 7.68381
+11.7995 -3.4792 7.60434
+-8.19958 -2.04021 7.69715
+11.7995 -2.10256 7.64811
+-8.19954 -0.651625 7.69273
+11.7995 -0.74614 7.61971
+-8.19952 0.718359 7.68781
+11.7995 0.617562 7.60209
+-8.19954 2.06325 7.66806
+11.7995 2.0256 7.61797
+-8.19955 3.41868 7.65282
+11.7995 3.5169 7.57107
+-8.19952 4.77953 7.64463
+11.7995 4.96189 7.54438
+-8.1995 6.15822 7.66983
+11.7995 6.33874 7.5404
+-8.1995 7.63029 7.84091
+11.7994 7.66263 7.45991
+-8.19934 9.01694 8.30855
+11.7994 8.88795 7.48659
+-8.19866 9.9998 7.69257
+-6.60994 9.99947 7.67522
+-5.05088 9.99944 7.64275
+-3.59006 9.99955 7.71503
+-2.19391 9.99958 7.72297
+-0.766948 9.99957 7.703
+0.704516 9.99944 7.6837
+2.063 9.99952 7.71312
+3.36953 9.99948 7.71804
+4.77578 9.99956 7.70152
+6.20262 9.99955 7.7089
+7.51783 9.99955 7.76227
+8.95191 9.9995 7.80219
+10.5929 9.9995 7.73193
+11.7995 9.99945 7.53934
+-8.19841 -9.99962 9.99824
+-8.19958 -9.9971 8.70792
+-6.21382 -9.99938 9.9978
+-4.75035 -9.99939 9.99739
+-3.31542 -9.9994 9.99736
+-1.93049 -9.99941 9.9979
+-0.552704 -9.99945 9.99787
+0.82583 -9.99947 9.99781
+2.20579 -9.99948 9.9978
+3.58118 -9.99946 9.99785
+4.96428 -9.99945 9.99785
+6.3559 -9.99947 9.99779
+7.7458 -9.99945 9.99785
+9.21917 -9.99937 9.99751
+10.843 -9.9994 9.99841
+11.7995 -9.99925 8.41968
+11.7993 -8.51984 8.71908
+-8.19943 -7.61472 9.00962
+11.7994 -7.09009 8.78751
+-8.19942 -6.34791 9.99689
+11.7995 -5.7238 8.80475
+-8.19949 -4.96023 9.99733
+11.7996 -4.35413 8.81106
+-8.1995 -3.58073 9.99718
+11.7996 -2.97562 8.81769
+-8.19952 -2.1891 9.99692
+11.7996 -1.59666 8.81836
+-8.19953 -0.807254 9.99714
+11.7995 -0.218284 8.81847
+-8.19952 0.566889 9.99727
+11.7996 1.16462 8.81929
+-8.19952 1.95037 9.99738
+11.7996 2.55345 8.81533
+-8.19951 3.32882 9.9971
+11.7996 3.94292 8.80996
+-8.19947 4.70561 9.9974
+11.7996 5.32671 8.80585
+-8.19949 6.10433 9.99717
+11.7995 6.69459 8.80013
+-8.1995 7.56707 9.99818
+11.7994 7.98963 8.709
+-8.19944 8.77988 9.99802
+11.7995 8.99771 8.58189
+-8.19939 9.99941 8.97048
+-6.77757 9.99953 9.9984
+-5.36539 9.9994 9.99741
+-3.92764 9.99944 9.99784
+-2.5364 9.99949 9.99787
+-1.154 9.99949 9.9979
+0.234385 9.9995 9.99786
+1.62007 9.99951 9.99783
+2.99675 9.99951 9.99783
+4.37547 9.99948 9.99787
+5.75754 9.99944 9.99792
+7.13228 9.9994 9.99742
+8.52785 9.99932 9.99754
+10.0395 9.99936 9.99757
+11.7994 9.99959 9.99782
+-8.19956 -8.62442 9.99968
+-6.48237 -9.99722 9.99954
+-5.00932 -9.99779 9.99949
+-3.63043 -9.99761 9.9993
+-2.29762 -9.99748 9.99934
+-0.940568 -9.99755 9.99946
+0.457845 -9.99761 9.99949
+1.84186 -9.99762 9.99949
+3.23182 -9.99756 9.99945
+4.66073 -9.99755 9.99939
+6.06696 -9.9976 9.99944
+7.45895 -9.99762 9.99959
+8.9551 -9.99723 9.99942
+10.519 -9.99765 9.99968
+11.7997 -9.99823 10.0002
+-8.19883 -7.14935 9.99937
+-6.55133 -7.61668 9.99936
+-5.04558 -7.79437 9.99945
+-3.68249 -7.79692 9.99957
+-2.65181 -8.00439 9.99944
+-1.37895 -7.67048 9.99958
+0.122412 -8.05233 9.99958
+1.50761 -8.14682 9.99968
+2.82374 -8.12156 9.99964
+4.42747 -7.76577 9.99949
+6.06769 -7.76886 9.99939
+7.50815 -7.69223 9.9995
+9.00026 -7.62665 9.99939
+10.6059 -7.81684 9.99927
+11.7994 -8.02296 9.9992
+-8.19757 -5.74911 9.99946
+-6.64397 -6.19846 9.99937
+-5.05681 -6.32819 9.99964
+-3.93015 -6.50607 9.9996
+-2.58524 -6.36495 9.99973
+-1.46086 -6.20226 9.99983
+-0.357494 -6.69335 9.99982
+1.1382 -6.99058 9.99973
+2.23568 -6.99459 9.99987
+3.59346 -6.76839 9.99978
+4.75131 -6.79815 9.99977
+6.02594 -6.44305 9.9997
+5.5286 -5.93912 9.99993
+7.55832 -6.30042 9.99957
+9.09295 -6.17125 9.99944
+10.7675 -6.28308 9.99937
+11.7996 -6.59904 9.99939
+-8.19769 -4.3638 9.99959
+-6.69723 -4.85745 9.99951
+-5.37614 -5.21771 9.99948
+-3.86669 -4.97077 9.9998
+-2.96511 -5.14006 10.0001
+-2.22315 -5.7476 10.0007
+6.21919 -5.43828 9.99979
+7.49893 -5.09399 9.99974
+6.86036 -4.85612 10.0002
+9.12445 -4.84639 9.99954
+10.7808 -4.89001 9.99936
+11.7997 -5.21623 9.99932
+-8.19775 -3.046 9.99953
+-6.89233 -3.71895 9.99961
+-5.27684 -3.65788 9.99962
+-4.18053 -3.64781 10.0002
+-3.66236 -4.40791 10.001
+7.74645 -4.15193 10.0001
+9.06959 -3.50129 9.99972
+8.09612 -3.08059 10
+10.7846 -3.53918 9.99945
+11.7997 -3.83638 9.99942
+-8.19782 -1.59953 9.99939
+-6.56542 -2.3344 9.99964
+-5.34667 -2.32452 9.99973
+-4.55666 -2.96043 10
+9.38937 -1.9074 9.99975
+8.49109 -2.1236 9.99996
+10.7753 -2.16417 9.9995
+11.7998 -2.45561 9.99946
+-8.19786 -0.24785 9.99935
+-6.81117 -0.78828 9.99957
+-5.66776 -1.28319 9.9997
+9.42634 -0.674212 9.9998
+8.7705 -0.854926 10.0003
+10.8194 -0.812561 9.99955
+11.7995 -1.07696 9.99948
+-8.19772 1.11354 9.99953
+-6.69546 0.706579 9.99966
+-5.19802 0.22338 9.9996
+9.47848 0.755854 9.99982
+8.80489 0.498223 10.0001
+10.8021 0.521933 9.99957
+11.7995 0.299132 9.9995
+-8.19762 2.55367 9.99962
+-6.394 2.19106 9.99977
+-5.00007 1.69072 10
+9.44449 2.11972 9.99968
+8.58424 1.80637 9.99989
+10.8018 1.89136 9.99951
+11.7998 1.67901 9.99947
+-8.19759 3.91419 9.9996
+-6.64125 3.53617 9.99964
+-4.65548 2.71344 10.0001
+-4.65734 3.75202 10
+-4.30779 3.45886 10.0006
+9.18809 3.66927 9.99966
+8.15437 2.97688 9.99982
+10.7941 3.32145 9.99942
+11.7997 3.06186 9.99942
+-8.1975 5.29107 9.99959
+-6.61648 4.88598 9.99953
+-4.72583 4.91814 9.99967
+-3.67989 4.37694 10.0009
+-3.09937 5.01143 10.0002
+-3.0645 5.05811 10.6134
+8.03027 5.10089 9.9997
+6.8506 4.85849 9.9997
+7.51054 4.08406 10.0002
+9.59328 5.26194 9.9995
+10.7807 4.82247 9.99933
+11.7997 4.44782 9.99936
+-8.19773 6.71438 9.99969
+-6.59454 6.2831 9.99946
+-4.88217 6.17798 9.99947
+-3.34975 6.21782 9.99972
+-2.41061 5.60819 10.0006
+-2.01627 6.35199 10.0001
+-1.43132 6.23338 10.0012
+6.74176 6.4319 9.99967
+5.66549 6.33399 9.99981
+6.22231 5.44166 9.99995
+8.09875 6.60052 9.99957
+9.2889 6.3982 9.99951
+10.8057 6.20904 9.99935
+11.7996 5.82812 9.99926
+-8.19788 8.07472 9.99963
+-6.42849 7.77986 9.99946
+-4.82363 7.63675 9.99939
+-3.36871 7.69788 9.99934
+-1.97262 7.78247 9.99946
+-0.149931 6.74501 10.0002
+-0.092688 7.79011 9.99963
+1.1149 6.98548 9.99979
+1.47062 8.12213 9.99968
+2.14608 6.99949 9.99991
+2.78398 8.13317 9.99968
+3.37364 6.82481 9.99986
+4.07557 8.03487 9.99955
+4.59557 6.42157 9.99968
+5.52607 7.68154 9.9995
+6.7861 8.08525 9.9994
+7.83283 7.83236 9.99953
+9.23848 7.8312 9.99943
+10.7848 7.63133 9.99934
+11.7995 7.21744 9.99932
+-8.19799 9.99804 9.99984
+-6.31653 9.99785 9.99955
+-4.80232 9.99733 9.9995
+-3.35653 9.99764 9.99938
+-1.96972 9.99761 9.99935
+-0.555346 9.99756 9.99942
+0.885156 9.99759 9.99948
+2.27494 9.99764 9.9995
+3.64702 9.99762 9.99949
+5.03022 9.99756 9.99945
+6.39283 9.99746 9.99932
+7.72972 9.99742 9.99929
+9.15342 9.9971 9.99949
+10.7418 9.99638 9.99943
+11.7996 8.47068 9.99925
+-0.404709 -6.665 11.5547
+-1.38278 -6.25177 10.7951
+0.75879 -6.94717 10.9471
+2.03984 -7.0168 10.6989
+3.22067 -6.88145 10.0017
+4.43651 -6.51366 10.0006
+5.37532 -6.03724 11.4404
+-2.23295 -5.73928 11.858
+-2.9746 -5.14235 11.1673
+6.21051 -5.45495 10.7886
+6.93701 -4.77939 11.5184
+-3.67825 -4.38439 11.8815
+-4.22784 -3.58569 10.9884
+7.58497 -3.97867 10.0012
+8.13857 -3.01669 10.8144
+-4.6842 -2.67557 11.6426
+-4.93528 -1.96018 10.0004
+8.56246 -1.90481 11.1512
+-5.20322 -0.61953 10.0009
+8.80313 -0.60709 11.3729
+-5.19022 0.720567 10.002
+8.78664 0.779945 11.3322
+-4.99995 1.71952 11.3423
+8.5022 2.10654 11.0784
+-4.72242 2.57672 10.0022
+-4.31676 3.43712 11.722
+8.02006 3.25177 11.0259
+-3.7548 4.28828 11.1251
+-3.03821 5.08263 11.9275
+6.8542 4.86492 10.777
+7.46684 4.13481 11.5767
+-2.25973 5.72058 11.1062
+-1.42252 6.2309 11.8059
+5.34622 6.05731 10.0006
+6.11859 5.52869 11.4596
+-0.474733 6.64153 11.0762
+0.727077 6.94041 10.731
+1.98354 7.01984 10.671
+3.13823 6.89615 10.0019
+4.28636 6.57046 10.0016
+-0.386615 -6.67032 13.4756
+-1.3883 -6.24982 12.5494
+0.774231 -6.95073 13.0977
+2.06478 -7.02345 12.9248
+3.28353 -6.86671 12.6294
+4.36541 -6.53612 12.0984
+5.3566 -6.04782 13.2783
+-2.23152 -5.74151 13.4182
+-3.00311 -5.11367 12.6986
+6.19629 -5.46724 12.4242
+6.91683 -4.80012 13.2983
+-3.68641 -4.37368 13.4329
+-4.25788 -3.54049 12.6105
+7.5728 -3.99022 12.2479
+8.11189 -3.07414 12.7485
+-4.70485 -2.62793 13.3347
+-5.01951 -1.65519 12.1913
+8.54957 -1.95879 12.952
+-5.20546 -0.505181 12.5591
+8.80113 -0.66564 13.0343
+-5.19391 0.627844 12.9856
+8.79464 0.744803 12.9964
+-5.0171 1.65866 13.3636
+8.51567 2.07698 13.0514
+-4.70713 2.61459 12.4645
+-4.28726 3.48982 13.3936
+8.05594 3.18626 13.1697
+-3.72925 4.3215 12.6774
+-3.04095 5.07747 13.4394
+6.84667 4.87276 12.4157
+7.50061 4.09032 13.4785
+-2.27381 5.7116 12.6667
+-1.41831 6.23474 13.5422
+5.25536 6.10666 12.0517
+6.11303 5.53399 13.2702
+-0.423342 6.65894 13.1468
+0.738872 6.94705 13.0052
+2.0362 7.02593 12.9206
+3.2614 6.87117 12.7731
+4.2944 6.56189 12.484
+-0.37415 -6.67463 15.0876
+-1.37098 -6.2587 14.1502
+0.794503 -6.95488 14.7305
+2.09117 -7.02334 14.5096
+3.35718 -6.84973 14.3145
+4.43778 -6.50343 13.9385
+5.36137 -6.04368 14.8264
+-2.22739 -5.7447 14.898
+-3.00078 -5.11583 14.1587
+6.17647 -5.48363 14.115
+6.90857 -4.80874 14.8337
+-3.69011 -4.36947 14.8883
+-4.26273 -3.53265 14.1449
+7.54807 -4.02325 13.9542
+8.08759 -3.12067 14.3077
+-4.70764 -2.62019 14.8347
+-5.02269 -1.64253 13.9183
+8.52747 -2.0277 14.4857
+-5.19892 -0.56815 14.3017
+8.79438 -0.733092 14.5635
+-5.1979 0.576914 14.6063
+8.80396 0.665841 14.6373
+-5.02035 1.64654 14.991
+8.52456 2.04301 14.6674
+-4.71448 2.60121 14.1271
+-4.28486 3.49396 14.8666
+8.06046 3.17464 14.743
+-3.71971 4.33166 14.1569
+-3.0395 5.07916 14.8942
+6.86106 4.85875 14.1331
+7.51072 4.07659 15.0596
+-2.2771 5.70951 14.1748
+-1.40704 6.24053 15.0582
+5.30143 6.07939 13.9358
+6.13285 5.51734 14.832
+-0.408837 6.66448 14.7424
+0.779073 6.95354 14.599
+2.08363 7.02374 14.5006
+3.34759 6.85155 14.4318
+4.4134 6.5127 14.2945
+-0.366315 -6.67544 16.9526
+-1.35612 -6.2668 15.764
+0.815215 -6.95729 16.5771
+2.16153 -7.02144 16.3011
+3.38547 -6.84176 15.9419
+4.45547 -6.49553 15.4477
+5.38094 -6.03359 16.4255
+-2.21191 -5.75609 16.7255
+-3.00741 -5.10962 15.77
+6.18061 -5.48001 15.6325
+6.90644 -4.8081 16.4903
+-3.69554 -4.36321 16.5834
+-4.26935 -3.52161 15.6516
+7.5366 -4.0387 15.443
+8.06599 -3.16415 15.8805
+-4.7129 -2.60618 16.3968
+-5.0178 -1.65717 15.3949
+8.50381 -2.09733 16.3037
+-5.19672 -0.593522 15.7739
+8.78305 -0.846449 16.5804
+-5.20384 0.527139 16.1167
+8.80669 0.652656 16.7374
+-5.03104 1.60945 16.5857
+8.51179 2.07495 16.703
+-4.71729 2.59435 15.6202
+-4.29525 3.47544 16.5174
+8.05193 3.18795 16.6105
+-3.72217 4.32854 15.7141
+-3.02161 5.09892 16.7123
+6.86325 4.85621 15.6841
+7.50059 4.0907 16.8174
+-2.25732 5.72425 15.7576
+-1.35449 6.26624 16.8914
+5.33336 6.05959 15.4179
+6.13592 5.51328 16.4832
+-0.426569 6.65577 16.3923
+0.784891 6.95366 16.3959
+2.14649 7.02138 16.3068
+3.38982 6.84125 16.0523
+4.44982 6.49809 15.759
+-0.582788 -6.59536 18.9997
+-1.33766 -6.27361 17.6188
+0.53026 -6.90583 18.9995
+2.14264 -7.03521 18.9988
+3.48362 -6.82099 17.7956
+4.48175 -6.48336 17.1845
+5.39166 -6.02399 18.1095
+-2.04883 -5.86415 18.9996
+-2.96826 -5.15185 18.9986
+6.19775 -5.46511 17.3944
+6.86737 -4.8555 18.9984
+-3.77746 -4.25758 18.9996
+-4.28333 -3.50194 17.4208
+7.50004 -4.09072 17.2292
+8.04249 -3.20563 17.944
+-4.72369 -2.57672 18.998
+-5.01113 -1.67352 17.0188
+8.48955 -2.15753 18.9994
+-5.1856 -0.700739 17.5427
+8.80878 -0.58711 18.9998
+-5.20732 0.475031 17.8733
+8.75715 1.0128 18.9998
+-5.0309 1.59685 18.1318
+8.41082 2.35668 18.9998
+-4.7288 2.56336 17.2971
+-4.33996 3.40682 18.9992
+7.96923 3.33384 18.9995
+-3.73126 4.3222 18.9971
+-3.02227 5.08754 18.9998
+6.86524 4.8545 17.4755
+7.48069 4.11769 18.9989
+-2.19837 5.76996 18.9967
+-1.31656 6.28548 18.9994
+5.36811 6.039 17.1404
+6.15303 5.50611 18.9985
+-0.501538 6.62307 18.4324
+0.510158 6.90022 18.9992
+2.03776 7.03581 18.9988
+3.43872 6.83345 18.997
+4.47217 6.48675 17.6308
+-0.419758 -6.16289 18.9998
+-1.28253 -6.29118 19
+0.562139 -6.36085 18.9998
+2.03884 -6.40912 18.9998
+3.58275 -6.78407 18.9998
+4.61844 -6.4271 18.9994
+5.36069 -6.03237 18.9999
+-1.75439 -5.40121 18.9998
+-2.67253 -4.86216 18.9997
+6.03325 -5.59061 18.9996
+6.71573 -4.70418 18.9996
+-3.19275 -4.10306 18.9998
+-4.3437 -3.37634 19
+7.59525 -3.95228 18.9996
+8.0526 -3.16244 19.0001
+-4.78303 -2.38382 18.9999
+-5.0077 -1.6976 18.9991
+7.79407 -1.79417 18.9999
+-5.20338 -0.477181 18.9996
+7.80001 -0.30856 18.9999
+-5.17661 0.766331 18.9998
+7.79768 1.26169 18.9999
+-5.00408 1.66727 18.9999
+7.81571 2.69491 19
+-4.79742 2.37111 18.9997
+-3.99453 3.24493 18.9997
+7.79081 3.62035 18.9999
+-3.88619 4.08225 18.9996
+-2.64689 4.70107 18.9996
+6.87683 4.83084 18.9997
+7.26523 3.94359 18.9996
+-2.05946 5.84538 18.9995
+-1.15143 5.95143 18.9997
+5.21405 6.125 18.9996
+5.96599 5.38269 18.9996
+-0.673609 6.55306 19
+-0.084724 6.74502 18.9997
+1.39888 6.39527 18.9997
+3.08486 6.88054 18.9998
+4.41264 6.50144 18.9999
+-0.678799 -5.39183 18.9999
+0.624825 -5.64024 18.9998
+2.05299 -5.70737 18.9999
+3.59088 -5.73561 18.9998
+4.75896 -5.86623 18.9998
+-1.81653 -4.2816 18.9999
+-0.374683 -4.30026 19
+0.70751 -4.60587 19
+2.06993 -4.70355 19
+3.47757 -4.73003 19
+4.74685 -4.89859 18.9999
+5.80237 -5.02648 18.9999
+-3.35948 -2.826 18.9999
+-1.79749 -2.94687 19.0001
+-0.588214 -3.28322 19.0001
+0.72595 -3.38779 19
+2.07368 -3.43096 19.0001
+3.45116 -3.44057 19.0001
+4.80469 -3.47581 19.0001
+5.99605 -3.55554 18.9999
+6.89101 -3.77202 18.9999
+-4.37781 -1.58166 18.9998
+-3.16585 -1.57079 18.9998
+-2.01261 -1.89044 19
+-0.652232 -2.00801 19.0001
+0.699707 -2.05718 19.0001
+2.07089 -2.06704 19.0001
+3.44828 -2.06896 19.0001
+4.82113 -2.09255 19.0001
+6.07322 -2.23499 19
+7.08872 -2.56259 19
+-4.43076 -0.064294 18.9998
+-3.3479 -0.511969 18.9998
+-2.03638 -0.634434 18.9999
+-0.682413 -0.676416 19
+0.691577 -0.687734 19.0001
+2.06897 -0.689655 19
+3.44828 -0.689655 19.0001
+4.8212 -0.713177 19.0001
+6.09009 -0.863216 19
+7.0535 -1.23655 18.9999
+-4.44663 1.27049 18.9998
+-3.38353 0.891842 18.9998
+-2.05922 0.718773 18.9999
+-0.687734 0.691576 19
+0.689656 0.689656 19
+2.06897 0.689656 19
+3.44636 0.687735 19
+4.81313 0.664608 19
+6.08422 0.526794 19
+7.07415 0.216041 18.9999
+-4.25865 2.34076 18.9999
+-3.3256 2.15741 18.9998
+-2.05238 2.09214 18.9999
+-0.689655 2.06897 19
+0.689656 2.06897 19.0001
+2.06704 2.06704 19
+3.43792 2.0566 19
+4.77779 2.01044 18.9999
+6.03919 1.9214 18.9999
+7.06187 1.63172 18.9999
+-3.18559 3.48138 18.9997
+-1.96388 3.4339 18.9999
+-0.680453 3.44081 19
+0.690856 3.4426 19.0001
+2.08116 3.43575 19
+3.42368 3.39132 18.9999
+4.74165 3.29021 18.9998
+5.81909 3.00139 18.9998
+7.04055 3.18114 18.9998
+-1.75277 4.90433 18.9997
+-0.654389 4.73979 18.9999
+0.642986 4.71518 19
+2.067 4.72918 19
+3.47144 4.67142 18.9999
+4.53684 4.36768 18.9998
+6.03697 4.30279 18.9997
+-0.626406 5.82513 18.9998
+0.468965 5.7135 18.9998
+1.81309 5.66591 19
+3.38956 5.72122 18.9999
+4.73771 5.52933 18.9998
3 0 1 2
3 0 3 4
3 1 0 4
diff --git a/src/sampleplugins/filterborder/filterborder.cpp b/src/sampleplugins/filterborder/filterborder.cpp
index b5704527f..9d4952b85 100644
--- a/src/sampleplugins/filterborder/filterborder.cpp
+++ b/src/sampleplugins/filterborder/filterborder.cpp
@@ -97,14 +97,14 @@ const int FilterBorder::getRequirements(QAction *action)
return 0;
}
-void FilterBorder::initParameterSet(QAction *action,MeshModel &m, FilterParameterSet & parlst)
+void FilterBorder::initParameterSet(QAction *action,MeshModel &m, RichParameterSet & parlst)
{
pair qualityRange;
switch(ID(action))
{
case FP_REMOVE_BORDER_FACE :
- parlst.addInt("IterationNum",1,"Iteration","Number of times that the removal of face border is iterated.");
- parlst.addBool("DeleteVertices",true,"Delete unreferenced vertices","Remove the vertexes that remains unreferneced after the face removal.");
+ parlst.addParam(new RichInt("IterationNum",1,"Iteration","Number of times that the removal of face border is iterated."));
+ parlst.addParam(new RichBool("DeleteVertices",true,"Delete unreferenced vertices","Remove the vertexes that remains unreferneced after the face removal."));
break;
default: assert(0);
}
@@ -112,7 +112,7 @@ void FilterBorder::initParameterSet(QAction *action,MeshModel &m, FilterParamete
-bool FilterBorder::applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & par, vcg::CallBackPos * cb)
+bool FilterBorder::applyFilter(QAction *filter, MeshModel &m, RichParameterSet & par, vcg::CallBackPos * cb)
{
CMeshO::FaceIterator fi;
CMeshO::VertexIterator vi;
diff --git a/src/sampleplugins/filterborder/filterborder.h b/src/sampleplugins/filterborder/filterborder.h
index ab49079bf..cd4f26f2a 100644
--- a/src/sampleplugins/filterborder/filterborder.h
+++ b/src/sampleplugins/filterborder/filterborder.h
@@ -65,8 +65,8 @@ class FilterBorder : public QObject, public MeshFilterInterface
virtual const int getRequirements(QAction *);
virtual bool autoDialog(QAction *) {return true;}
- virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*parent*/);
- virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual void initParameterSet(QAction *,MeshModel &/*m*/, RichParameterSet & /*parent*/);
+ virtual bool applyFilter(QAction *filter, MeshModel &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
protected:
diff --git a/src/sampleplugins/filtercreateiso/filtercreateiso.cpp b/src/sampleplugins/filtercreateiso/filtercreateiso.cpp
index bc3a81476..b067fdd99 100644
--- a/src/sampleplugins/filtercreateiso/filtercreateiso.cpp
+++ b/src/sampleplugins/filtercreateiso/filtercreateiso.cpp
@@ -96,7 +96,7 @@ const int FilterCreateIso::getRequirements(QAction *action)
return 0;
}
-bool FilterCreateIso::applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & par, vcg::CallBackPos * cb)
+bool FilterCreateIso::applyFilter(QAction *filter, MeshModel &m, RichParameterSet & par, vcg::CallBackPos * cb)
{
CMeshO::FaceIterator fi;
CMeshO::VertexIterator vi;
@@ -127,13 +127,13 @@ bool FilterCreateIso::applyFilter(QAction *filter, MeshModel &m, FilterParameter
}
return true;
}
-void FilterCreateIso::initParameterSet(QAction *action,MeshModel &m, FilterParameterSet & parlst)
+void FilterCreateIso::initParameterSet(QAction *action,MeshModel &m, RichParameterSet & parlst)
{
pair qualityRange;
switch(ID(action))
{
case FP_CREATEISO :
- parlst.addInt("Resolution",64,"Grid Resolution","Resolution of the side of the cubic grid used for the volume creation");
+ parlst.addParam(new RichInt("Resolution",64,"Grid Resolution","Resolution of the side of the cubic grid used for the volume creation"));
break;
default: assert(0);
}
diff --git a/src/sampleplugins/filtercreateiso/filtercreateiso.h b/src/sampleplugins/filtercreateiso/filtercreateiso.h
index fe1ff5eea..7a3afd871 100644
--- a/src/sampleplugins/filtercreateiso/filtercreateiso.h
+++ b/src/sampleplugins/filtercreateiso/filtercreateiso.h
@@ -64,9 +64,9 @@ class FilterCreateIso : public QObject, public MeshFilterInterface
virtual const FilterClass getClass(QAction *);
virtual const int getRequirements(QAction *);
virtual bool autoDialog(QAction *) {return true;}
- virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*parent*/);
+ virtual void initParameterSet(QAction *,MeshModel &/*m*/, RichParameterSet & /*parent*/);
- virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual bool applyFilter(QAction *filter, MeshModel &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
protected:
diff --git a/src/sampleplugins/filtergeodesic/filtergeodesic.cpp b/src/sampleplugins/filtergeodesic/filtergeodesic.cpp
index 1f861b92e..9ba57098d 100644
--- a/src/sampleplugins/filtergeodesic/filtergeodesic.cpp
+++ b/src/sampleplugins/filtergeodesic/filtergeodesic.cpp
@@ -105,7 +105,7 @@ const int FilterGeodesic::getRequirements(QAction *action)
return 0;
}
-bool FilterGeodesic::applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & par, vcg::CallBackPos * /*cb*/)
+bool FilterGeodesic::applyFilter(QAction *filter, MeshModel &m, RichParameterSet & par, vcg::CallBackPos * /*cb*/)
{
CMeshO::FaceIterator fi;
CMeshO::VertexIterator vi;
@@ -189,12 +189,12 @@ bool FilterGeodesic::applyFilter(QAction *filter, MeshModel &m, FilterParameterS
return true;
}
-void FilterGeodesic::initParameterSet(QAction *action,MeshModel &m, FilterParameterSet & parlst)
+void FilterGeodesic::initParameterSet(QAction *action,MeshModel &m, RichParameterSet & parlst)
{
switch(ID(action))
{
case FP_QUALITY_POINT_GEODESIC :
- parlst.addPoint3f("startPoint",m.cm.bbox.min,"Starting point","The starting point from which geodesic distance has to be computed. If it is not a surface vertex, the closest vertex to the specified point is used as starting seed point.");
+ parlst.addParam(new RichPoint3f("startPoint",m.cm.bbox.min,"Starting point","The starting point from which geodesic distance has to be computed. If it is not a surface vertex, the closest vertex to the specified point is used as starting seed point."));
break;
default: assert(0);
}
diff --git a/src/sampleplugins/filtergeodesic/filtergeodesic.h b/src/sampleplugins/filtergeodesic/filtergeodesic.h
index 53308d208..5e19cb21d 100644
--- a/src/sampleplugins/filtergeodesic/filtergeodesic.h
+++ b/src/sampleplugins/filtergeodesic/filtergeodesic.h
@@ -68,9 +68,9 @@ class FilterGeodesic : public QObject, public MeshFilterInterface
virtual const FilterClass getClass(QAction *);
virtual const int getRequirements(QAction *);
- virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual bool applyFilter(QAction *filter, MeshModel &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
virtual bool autoDialog(QAction *) ;
- virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*parent*/);
+ virtual void initParameterSet(QAction *,MeshModel &/*m*/, RichParameterSet & /*parent*/);
protected:
diff --git a/src/sampleplugins/sampledecoration/sampledecorate.cpp b/src/sampleplugins/sampledecoration/sampledecorate.cpp
index 329b0ab07..8beb6a933 100644
--- a/src/sampleplugins/sampledecoration/sampledecorate.cpp
+++ b/src/sampleplugins/sampledecoration/sampledecorate.cpp
@@ -53,7 +53,7 @@ const QString SampleMeshDecoratePlugin::Info(QAction *action)
return QString();
}
-void SampleMeshDecoratePlugin::initGlobalParameterSet(QAction *, FilterParameterSet *parset)
+void SampleMeshDecoratePlugin::initGlobalParameterSet(QAction *, RichParameterSet *parset)
{
if(parset->findParameter("CubeMapPath")!= NULL)
{
@@ -63,7 +63,7 @@ void SampleMeshDecoratePlugin::initGlobalParameterSet(QAction *, FilterParameter
QString cubemapDirPath = MainWindowInterface::getBaseDirPath() + QString("/textures/cubemaps/uffizi.jpg");
//parset->addString("CubeMapPath", "/Users/cignoni/devel/meshlab/src/meshlab/textures/cubemaps/uffizi.jpg");
- parset->addString("CubeMapPath", cubemapDirPath);
+ parset->addParam(new RichString("CubeMapPath", cubemapDirPath));
}
@@ -77,7 +77,7 @@ const QString SampleMeshDecoratePlugin::ST(FilterIDType filter) const
return QString("error!");
}
-void SampleMeshDecoratePlugin::Decorate(QAction *a, MeshModel &m, FilterParameterSet *par, GLArea *gla, QFont /*qf*/)
+void SampleMeshDecoratePlugin::Decorate(QAction *a, MeshModel &m, RichParameterSet *par, GLArea *gla, QFont /*qf*/)
{
assert(par);
static QString lastname("unitialized");
diff --git a/src/sampleplugins/sampledecoration/sampledecorate.h b/src/sampleplugins/sampledecoration/sampledecorate.h
index ee46d52ea..5a8b516ee 100644
--- a/src/sampleplugins/sampledecoration/sampledecorate.h
+++ b/src/sampleplugins/sampledecoration/sampledecorate.h
@@ -72,8 +72,8 @@ public:
QList actions () const {return actionList;}
- virtual void Decorate(QAction *a, MeshModel &m, FilterParameterSet * /*parent*/ par, GLArea *gla,QFont qf);
- virtual void initGlobalParameterSet(QAction *, FilterParameterSet * /*globalparam*/);
+ virtual void Decorate(QAction *a, MeshModel &m, RichParameterSet * /*parent*/ par, GLArea *gla,QFont qf);
+ virtual void initGlobalParameterSet(QAction *, RichParameterSet * /*globalparam*/);
};
diff --git a/src/sampleplugins/samplefilter/samplefilter.cpp b/src/sampleplugins/samplefilter/samplefilter.cpp
index 6b54d5923..0605c162d 100644
--- a/src/sampleplugins/samplefilter/samplefilter.cpp
+++ b/src/sampleplugins/samplefilter/samplefilter.cpp
@@ -102,19 +102,19 @@ const ExtraSamplePlugin::FilterClass ExtraSamplePlugin::getClass(QAction *a)
// - the string shown in the dialog
// - the default value
// - a possibly long string describing the meaning of that parameter (shown as a popup help in the dialog)
-void ExtraSamplePlugin::initParameterSet(QAction *action,MeshModel &m, FilterParameterSet & parlst)
+void ExtraSamplePlugin::initParameterSet(QAction *action,MeshModel &m, RichParameterSet & parlst)
{
switch(ID(action)) {
case FP_MOVE_VERTEX :
- parlst.addBool ("UpdateNormals",
+ parlst.addParam(new RichBool ("UpdateNormals",
true,
"Recompute normals",
"Toggle the recomputation of the normals after the random displacement.\n\n"
- "If disabled the face normals will remains unchanged resulting in a visually pleasant effect.");
- parlst.addAbsPerc("Displacement",
+ "If disabled the face normals will remains unchanged resulting in a visually pleasant effect."));
+ parlst.addParam(new RichAbsPerc("Displacement",
m.cm.bbox.Diag()/100.0,0,m.cm.bbox.Diag(),
"Max displacement",
- "The vertex are displaced of a vector whose norm is bounded by this value");
+ "The vertex are displaced of a vector whose norm is bounded by this value"));
break;
default : assert(0);
@@ -123,7 +123,7 @@ void ExtraSamplePlugin::initParameterSet(QAction *action,MeshModel &m, FilterPar
// The Real Core Function doing the actual mesh processing.
// Move Vertex of a random quantity
-bool ExtraSamplePlugin::applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & par, vcg::CallBackPos *cb)
+bool ExtraSamplePlugin::applyFilter(QAction *filter, MeshModel &m, RichParameterSet & par, vcg::CallBackPos *cb)
{
//MeshModel &m=*md->mm();
srand(time(NULL));
diff --git a/src/sampleplugins/samplefilter/samplefilter.h b/src/sampleplugins/samplefilter/samplefilter.h
index 24472bd56..05f73555b 100644
--- a/src/sampleplugins/samplefilter/samplefilter.h
+++ b/src/sampleplugins/samplefilter/samplefilter.h
@@ -52,8 +52,8 @@ public:
virtual const QString filterName(FilterIDType filter) const;
virtual const QString filterInfo(FilterIDType filter) const;
virtual bool autoDialog(QAction *) {return true;}
- virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*parent*/);
- virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual void initParameterSet(QAction *,MeshModel &/*m*/, RichParameterSet & /*parent*/);
+ virtual bool applyFilter(QAction *filter, MeshModel &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
virtual int postCondition( QAction* ) const {return MeshModel::MM_VERTCOORD | MeshModel::MM_FACENORMAL | MeshModel::MM_VERTNORMAL;};
const FilterClass getClass(QAction *a);
diff --git a/src/sampleplugins/samplefilterdoc/samplefilterdoc.cpp b/src/sampleplugins/samplefilterdoc/samplefilterdoc.cpp
index 948c952eb..2bfb5eeab 100644
--- a/src/sampleplugins/samplefilterdoc/samplefilterdoc.cpp
+++ b/src/sampleplugins/samplefilterdoc/samplefilterdoc.cpp
@@ -83,24 +83,24 @@ const QString SampleFilterDocPlugin::filterInfo(FilterIDType filterId) const
// - the string shown in the dialog
// - the default value
// - a long string describing the meaning of that parameter (shown as a popup help in the dialog)
-void SampleFilterDocPlugin::initParameterSet(QAction *action,MeshDocument & /*m*/, FilterParameterSet & parlst)
+void SampleFilterDocPlugin::initParameterSet(QAction *action,MeshDocument & /*m*/, RichParameterSet & parlst)
{
switch(ID(action)) {
case FP_FLATTEN :
- parlst.addBool ("MergeVisible",
+ parlst.addParam(new RichBool ("MergeVisible",
true,
"Merge Only Visible Layers",
"Merge the vertices that are duplicated among different layers.
"
- "Very useful when the layers are spliced portions of a single big mesh.");
- parlst.addBool ("DeleteLayer",
+ "Very useful when the layers are spliced portions of a single big mesh."));
+ parlst.addParam(new RichBool ("DeleteLayer",
true,
"Delete Layers ",
- "Delete all the merged layers.
If all layers are visible only a single layer will remain after the invocation of this filter");
- parlst.addBool ("MergeVertices",
+ "Delete all the merged layers.
If all layers are visible only a single layer will remain after the invocation of this filter"));
+ parlst.addParam(new RichBool ("MergeVertices",
true,
"Merge duplicate vertices",
"Merge the vertices that are duplicated among different layers. \n\n"
- "Very useful when the layers are spliced portions of a single big mesh.");
+ "Very useful when the layers are spliced portions of a single big mesh."));
break;
default : assert(0);
@@ -108,7 +108,7 @@ void SampleFilterDocPlugin::initParameterSet(QAction *action,MeshDocument & /*m*
}
// The Real Core Function doing the actual mesh processing.
-bool SampleFilterDocPlugin::applyFilter(QAction *filter, MeshDocument &md, FilterParameterSet & par, vcg::CallBackPos *cb)
+bool SampleFilterDocPlugin::applyFilter(QAction *filter, MeshDocument &md, RichParameterSet & par, vcg::CallBackPos *cb)
{
switch(ID(filter)) {
diff --git a/src/sampleplugins/samplefilterdoc/samplefilterdoc.h b/src/sampleplugins/samplefilterdoc/samplefilterdoc.h
index 185061f41..6f7cc39ef 100644
--- a/src/sampleplugins/samplefilterdoc/samplefilterdoc.h
+++ b/src/sampleplugins/samplefilterdoc/samplefilterdoc.h
@@ -53,9 +53,9 @@ public:
virtual const QString filterInfo(FilterIDType filter) const;
virtual bool autoDialog(QAction *) {return true;}
virtual const FilterClass getClass(QAction *);
- virtual void initParameterSet(QAction *,MeshDocument &/*m*/, FilterParameterSet & /*parent*/);
- virtual bool applyFilter(QAction *filter, MeshDocument &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
- virtual bool applyFilter(QAction */*filter*/, MeshModel &, FilterParameterSet & /*parent*/, vcg::CallBackPos *) { assert(0); return false;} ;
+ virtual void initParameterSet(QAction *,MeshDocument &/*m*/, RichParameterSet & /*parent*/);
+ virtual bool applyFilter(QAction *filter, MeshDocument &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual bool applyFilter(QAction */*filter*/, MeshModel &, RichParameterSet & /*parent*/, vcg::CallBackPos *) { assert(0); return false;} ;
};
#endif
diff --git a/src/sampleplugins/samplefilterdyn/samplefilterdyn.cpp b/src/sampleplugins/samplefilterdyn/samplefilterdyn.cpp
index d0aadd926..dacf6a182 100644
--- a/src/sampleplugins/samplefilterdyn/samplefilterdyn.cpp
+++ b/src/sampleplugins/samplefilterdyn/samplefilterdyn.cpp
@@ -96,24 +96,24 @@ const MeshFilterInterface::FilterClass ExtraSampleDynPlugin::getClass(QAction *)
// when the user press apply the current stored state is updated.
// when the user press close the mesh state is restored to the one before the startup of the filter.
-void ExtraSampleDynPlugin::initParameterSet(QAction *action,MeshModel &m, FilterParameterSet & parlst)
+void ExtraSampleDynPlugin::initParameterSet(QAction *action,MeshModel &m, RichParameterSet & parlst)
{
switch(ID(action)) {
case FP_VERTEX_COLOR_NOISE :
- parlst.addColor ("baseColor",
+ parlst.addParam(new RichColor ("baseColor",
Color4b::Black,
"BaseColor",
- "The base color that is added to the mesh.");
+ "The base color that is added to the mesh."));
- parlst.addDynamicFloat("percentage",
+ parlst.addParam(new RichDynamicFloat("percentage",
0.5, 0, 1,
"Alpha",
- "The random color is blended with the current one with the specified alpha");
+ "The random color is blended with the current one with the specified alpha"));
- parlst.addDynamicFloat("frequency",
+ parlst.addParam(new RichDynamicFloat("frequency",
20, 1, 200,
"Noisy Frequency",
- "The frequency of the Noise on the mesh. Higher numbers means smaller spots.");
+ "The frequency of the Noise on the mesh. Higher numbers means smaller spots."));
break;
default : assert(0);
@@ -122,7 +122,7 @@ void ExtraSampleDynPlugin::initParameterSet(QAction *action,MeshModel &m, Filter
// The Real Core Function doing the actual mesh processing.
// It changes the color of the mesh according to a perlin noise function
-bool ExtraSampleDynPlugin::applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & par, vcg::CallBackPos *cb)
+bool ExtraSampleDynPlugin::applyFilter(QAction *filter, MeshModel &m, RichParameterSet & par, vcg::CallBackPos *cb)
{
const Color4b baseColor = par.getColor4b("baseColor");
const float percentage = par.getDynamicFloat("percentage");
diff --git a/src/sampleplugins/samplefilterdyn/samplefilterdyn.h b/src/sampleplugins/samplefilterdyn/samplefilterdyn.h
index 15353d9fd..09c4d08c3 100644
--- a/src/sampleplugins/samplefilterdyn/samplefilterdyn.h
+++ b/src/sampleplugins/samplefilterdyn/samplefilterdyn.h
@@ -42,9 +42,9 @@ public:
virtual const QString filterName(FilterIDType filter) const;
virtual const QString filterInfo(FilterIDType filter) const;
virtual bool autoDialog(QAction *) {return true;}
- virtual void initParameterSet(QAction *,MeshModel &/*m*/, FilterParameterSet & /*parent*/);
+ virtual void initParameterSet(QAction *,MeshModel &/*m*/, RichParameterSet & /*parent*/);
virtual int postCondition( QAction* ) const {return MeshModel::MM_VERTCOLOR;};
- virtual bool applyFilter(QAction *filter, MeshModel &m, FilterParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
+ virtual bool applyFilter(QAction *filter, MeshModel &m, RichParameterSet & /*parent*/, vcg::CallBackPos * cb) ;
virtual const FilterClass getClass(QAction *);
};