mirror of
https://github.com/lucaspalomodevelop/meshlab.git
synced 2026-03-15 09:04:36 +00:00
862 lines
26 KiB
C++
862 lines
26 KiB
C++
/****************************************************************************
|
|
* MeshLab o o *
|
|
* A versatile mesh processing toolbox o o *
|
|
* _ O _ *
|
|
* Copyright(C) 2004-2008 \/)\/ *
|
|
* Visual Computing Lab /\/| *
|
|
* ISTI - Italian National Research Council | *
|
|
* \ *
|
|
* All rights reserved. *
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
* This program is distributed in the hope that it will be useful, *
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
|
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt) *
|
|
* for more details. *
|
|
* *
|
|
****************************************************************************/
|
|
|
|
#ifndef MESHLAB_FILTERPARAMETER_H
|
|
#define MESHLAB_FILTERPARAMETER_H
|
|
#include <QtCore>
|
|
#include <QtXml>
|
|
|
|
#include <QMap>
|
|
#include<QString>
|
|
#include <QPair>
|
|
#include <QAction>
|
|
#include <vcg/math/matrix44.h>
|
|
#include <vcg/space/color4.h>
|
|
#include <vcg/math/shot.h>
|
|
#include <wrap/callback.h>
|
|
|
|
#include "xmlfilterinfo.h"
|
|
|
|
class MeshModel;
|
|
class MeshDocument;
|
|
|
|
//enum TypeId {BOOL,INT,FLOAT,STRING,MATRIX44F,POINT3F,COLOR,ENUM,MESH,GROUP,FILENAME};
|
|
//
|
|
//class Binding
|
|
//{
|
|
//public:
|
|
// TypeId tid;
|
|
// QString name;
|
|
// QString value;
|
|
//};
|
|
//
|
|
//class BindingSet
|
|
//{
|
|
//public:
|
|
// QList<Binding> binds;
|
|
//
|
|
// bool declare(const TypeId id,const QString& nm,const QString& val);
|
|
//};
|
|
//
|
|
//class Environment
|
|
//{
|
|
//public:
|
|
// BindingSet globals;
|
|
// BindingSet locals;
|
|
//
|
|
// int evalInt(const QString& val,bool& conv) const;
|
|
// float evalFloat(const QString& val,bool& conv) const;
|
|
// bool evalBool(const QString& val,bool& conv) const;
|
|
//};
|
|
//
|
|
//class Decoration
|
|
//{
|
|
//public:
|
|
// QString fieldDesc;
|
|
// QString tooltip;
|
|
//};
|
|
|
|
class Value
|
|
{
|
|
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 vcg::Shotf getShotf() const { assert(0); return vcg::Shotf(); }
|
|
virtual QColor getColor() const { assert(0); return QColor(); }
|
|
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<float> getFloatList() const { assert(0); return QList<float>(); }
|
|
virtual float getDynamicFloat() const { assert(0); return float(); }
|
|
virtual QString getFileName() const { assert(0); return QString(); }
|
|
|
|
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 isShotf() const { return false; }
|
|
virtual bool isColor() 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; }
|
|
|
|
|
|
virtual QString typeName() const = 0;
|
|
virtual void set(const Value& p) = 0;
|
|
virtual ~Value() {}
|
|
};
|
|
|
|
class BoolValue : public Value
|
|
{
|
|
public:
|
|
BoolValue(const bool val);
|
|
inline bool getBool() const { return pval; }
|
|
inline bool isBool() const { return true; }
|
|
inline QString typeName() const { return QString("Bool"); }
|
|
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 QString typeName() const { return QString("Int"); }
|
|
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 QString typeName() const { return QString("Float"); }
|
|
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 QString typeName() const { return QString("String"); }
|
|
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) {}
|
|
Matrix44fValue(const vcg::Matrix44d& val) :pval(vcg::Matrix44f::Construct(val)) {}
|
|
inline vcg::Matrix44f getMatrix44f() const { return pval; }
|
|
inline bool isMatrix44f() const { return true; }
|
|
inline QString typeName() const { return QString("Matrix44f"); }
|
|
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) {}
|
|
Point3fValue(const vcg::Point3d& val) : pval(vcg::Point3f::Construct(val)) {}
|
|
inline vcg::Point3f getPoint3f() const { return pval; }
|
|
inline bool isPoint3f() const { return true; }
|
|
inline QString typeName() const { return QString("Point3f"); }
|
|
inline void set(const Value& p) { pval = p.getPoint3f(); }
|
|
~Point3fValue() {}
|
|
private:
|
|
vcg::Point3f pval;
|
|
};
|
|
|
|
class ShotfValue : public Value
|
|
{
|
|
public:
|
|
ShotfValue(const vcg::Shotf& val) : pval(val) {}
|
|
inline vcg::Shotf getShotf() const { return pval; }
|
|
inline bool isShotf() const { return true; }
|
|
inline QString typeName() const { return QString("Shotf"); }
|
|
inline void set(const Value& p) { pval = p.getShotf(); }
|
|
~ShotfValue() {}
|
|
private:
|
|
vcg::Shotf pval;
|
|
};
|
|
|
|
class ColorValue : public Value
|
|
{
|
|
public:
|
|
ColorValue(QColor val) :pval(val) {}
|
|
inline QColor getColor() const { return pval; }
|
|
inline bool isColor() const { return true; }
|
|
inline QString typeName() const { return QString("Color"); }
|
|
inline void set(const Value& p) { pval = p.getColor(); }
|
|
~ColorValue() {}
|
|
private:
|
|
QColor pval;
|
|
};
|
|
|
|
class AbsPercValue : public FloatValue
|
|
{
|
|
public:
|
|
AbsPercValue(const float val) :FloatValue(val) {}
|
|
inline float getAbsPerc() const { return getFloat(); }
|
|
inline QString typeName() const { return QString("AbsPerc"); }
|
|
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; }
|
|
inline QString typeName() const { return QString("Enum"); }
|
|
~EnumValue() {}
|
|
};
|
|
|
|
class FloatListValue : public Value
|
|
{
|
|
public:
|
|
FloatListValue(QList<float>& val) :pval(val) {}
|
|
inline QList<float> getFloatList() const { return pval; }
|
|
inline void set(const Value& p) { pval = p.getFloatList(); }
|
|
inline QString typeName() const { return QString("FloatList"); }
|
|
inline bool isFloatList() const { return true; }
|
|
~FloatListValue() {}
|
|
private:
|
|
QList<float> pval;
|
|
};
|
|
|
|
class DynamicFloatValue : public FloatValue
|
|
{
|
|
public:
|
|
DynamicFloatValue(const float val) :FloatValue(val) {}
|
|
inline float getDynamicFloat() const { return getFloat(); }
|
|
inline bool isDynamicFloat() const { return true; }
|
|
inline QString typeName() const { return QString("DynamicFloat"); }
|
|
~DynamicFloatValue() {}
|
|
};
|
|
|
|
class FileValue : public Value
|
|
{
|
|
public:
|
|
FileValue(QString filename) :pval(filename) {}
|
|
inline QString getFileName() const { return pval; }
|
|
inline bool isFileName() const { return true; }
|
|
inline QString typeName() const { return QString("FileName"); }
|
|
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 QString typeName() const { return QString("Mesh"); }
|
|
inline void set(const Value& p) { pval = p.getMesh(); }
|
|
~MeshValue() {}
|
|
|
|
private:
|
|
MeshModel* pval;
|
|
};
|
|
|
|
/*************************/
|
|
|
|
//class ParameterDeclaration
|
|
//{
|
|
//public:
|
|
// const QString name;
|
|
// Value* val;
|
|
//
|
|
// virtual void accept(Visitor& v) = 0;
|
|
// virtual bool operator==(const ParameterDeclaration& rp) = 0;
|
|
// virtual ~RichParameter();
|
|
//};
|
|
//
|
|
//class BoolDeclaration
|
|
//{
|
|
//public:
|
|
// BoolDeclaration(const QString nm,const bool defval);
|
|
// bool operator==(const ParameterDeclaration& rp);
|
|
// void accept(Visitor& v);
|
|
// ~BoolDeclaration();
|
|
//};
|
|
//
|
|
//class IntDeclaration
|
|
//{
|
|
//public:
|
|
// IntDeclaration(const QString nm,const bool defval);
|
|
// bool operator==(const ParameterDeclaration& rp);
|
|
// void accept(Visitor& v);
|
|
// ~IntDeclaration();
|
|
//};
|
|
|
|
|
|
/******************************/
|
|
|
|
class ParameterDecoration
|
|
{
|
|
public:
|
|
QString fieldDesc;
|
|
QString tooltip;
|
|
Value* defVal;
|
|
|
|
ParameterDecoration(Value* defvalue, const QString desc = QString(), const QString tltip = QString());
|
|
|
|
virtual ~ParameterDecoration();
|
|
|
|
};
|
|
|
|
class BoolDecoration : public ParameterDecoration
|
|
{
|
|
public:
|
|
BoolDecoration(BoolValue* defvalue, const QString desc = QString(), const QString tltip = QString());
|
|
~BoolDecoration() {}
|
|
};
|
|
|
|
class IntDecoration : public ParameterDecoration
|
|
{
|
|
public:
|
|
IntDecoration(IntValue* defvalue, const QString desc = QString(), const QString tltip = QString());
|
|
~IntDecoration() {}
|
|
};
|
|
|
|
class FloatDecoration : public ParameterDecoration
|
|
{
|
|
public:
|
|
FloatDecoration(FloatValue* defvalue, const QString desc = QString(), const QString tltip = QString());
|
|
~FloatDecoration() {}
|
|
};
|
|
|
|
class StringDecoration : public ParameterDecoration
|
|
{
|
|
public:
|
|
StringDecoration(StringValue* defvalue, const QString desc = QString(), const QString tltip = QString());
|
|
~StringDecoration() {}
|
|
};
|
|
|
|
class Matrix44fDecoration : public ParameterDecoration
|
|
{
|
|
public:
|
|
Matrix44fDecoration(Matrix44fValue* defvalue, const QString desc = QString(), const QString tltip = QString());
|
|
~Matrix44fDecoration() {}
|
|
};
|
|
|
|
class Point3fDecoration : public ParameterDecoration
|
|
{
|
|
public:
|
|
Point3fDecoration(Point3fValue* defvalue, const QString desc = QString(), const QString tltip = QString());
|
|
~Point3fDecoration() {}
|
|
};
|
|
|
|
class ShotfDecoration : public ParameterDecoration
|
|
{
|
|
public:
|
|
ShotfDecoration(ShotfValue* defvalue, const QString desc = QString(), const QString tltip = QString());
|
|
~ShotfDecoration() {}
|
|
};
|
|
|
|
class ColorDecoration : public ParameterDecoration
|
|
{
|
|
public:
|
|
ColorDecoration(ColorValue* defvalue, const QString desc = QString(), const QString tltip = QString());
|
|
~ColorDecoration() {}
|
|
};
|
|
|
|
class AbsPercDecoration : public ParameterDecoration
|
|
{
|
|
public:
|
|
AbsPercDecoration(AbsPercValue* defvalue, const float minVal, const float maxVal, const QString desc = QString(), const QString tltip = QString());
|
|
float min;
|
|
float max;
|
|
~AbsPercDecoration() {}
|
|
};
|
|
|
|
class EnumDecoration : public ParameterDecoration
|
|
{
|
|
public:
|
|
EnumDecoration(EnumValue* defvalue, QStringList values, const QString desc = QString(), const QString tltip = QString());
|
|
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());
|
|
~DynamicFloatDecoration() {};
|
|
float min;
|
|
float max;
|
|
};
|
|
|
|
class SaveFileDecoration : public ParameterDecoration
|
|
{
|
|
public:
|
|
SaveFileDecoration(FileValue* defvalue, const QString extension, const QString desc = QString(), const QString tltip = QString());
|
|
~SaveFileDecoration() {}
|
|
|
|
QString ext;
|
|
};
|
|
|
|
class OpenFileDecoration : public ParameterDecoration
|
|
{
|
|
public:
|
|
OpenFileDecoration(FileValue* directorydefvalue, const QStringList extensions, const QString desc = QString(), const QString tltip = QString());
|
|
~OpenFileDecoration() {}
|
|
|
|
QStringList exts;
|
|
};
|
|
|
|
|
|
class MeshDecoration : public ParameterDecoration
|
|
{
|
|
public:
|
|
MeshDecoration(MeshValue* defvalue, MeshDocument* doc, const QString desc = QString(), const QString tltip = QString());
|
|
|
|
MeshDecoration(int meshind, MeshDocument* doc, const QString desc = QString(), const QString tltip = QString());
|
|
|
|
//WARNING: IT SHOULD BE USED ONLY BY MESHLABSERVER!!!!!!!
|
|
MeshDecoration(int meshind, const QString desc = QString(), const QString tltip = QString());
|
|
|
|
~MeshDecoration() {}
|
|
|
|
MeshDocument* meshdoc;
|
|
int meshindex;
|
|
};
|
|
|
|
/******************************/
|
|
class RichBool;
|
|
class RichInt;
|
|
class RichFloat;
|
|
class RichString;
|
|
class RichMatrix44f;
|
|
class RichPoint3f;
|
|
class RichShotf;
|
|
class RichColor;
|
|
class RichAbsPerc;
|
|
class RichEnum;
|
|
class RichFloatList;
|
|
class RichDynamicFloat;
|
|
class RichOpenFile;
|
|
class RichSaveFile;
|
|
class RichMesh;
|
|
|
|
|
|
class Visitor
|
|
{
|
|
public:
|
|
|
|
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(RichShotf& pd) = 0;
|
|
virtual void visit(RichColor& 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;
|
|
|
|
virtual ~Visitor() {}
|
|
};
|
|
|
|
class RichParameter
|
|
{
|
|
public:
|
|
const QString name;
|
|
|
|
Value* val;
|
|
|
|
ParameterDecoration* pd;
|
|
|
|
RichParameter(const QString nm, Value* v, ParameterDecoration* prdec, bool isxmlpar = false);
|
|
virtual void accept(Visitor& v) = 0;
|
|
virtual bool operator==(const RichParameter& rp) = 0;
|
|
virtual ~RichParameter();
|
|
|
|
inline bool isDerivedFromXMLParam() { return isxmlparam; }
|
|
inline void setIsDerivedFromXMLParam(bool derived) { isxmlparam = derived; }
|
|
|
|
private:
|
|
bool isxmlparam;
|
|
};
|
|
|
|
|
|
class RichBool : public RichParameter
|
|
{
|
|
public:
|
|
RichBool(const QString nm, const bool defval);
|
|
RichBool(const QString nm, const bool defval, const QString desc);
|
|
RichBool(const QString nm, const bool defval, const QString desc, const QString tltip);
|
|
RichBool(const QString nm, const bool val, const bool defval, const QString desc, const QString tltip, bool isxmlpar = false);
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
|
|
~RichBool();
|
|
};
|
|
|
|
class RichInt : public RichParameter
|
|
{
|
|
public:
|
|
RichInt(const QString nm, const int defval, const QString desc = QString(), const QString tltip = QString());
|
|
RichInt(const QString nm, const int val, const int defval, const QString desc = QString(), const QString tltip = QString(), bool isxmlpar = false);
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
~RichInt();
|
|
};
|
|
|
|
class RichFloat : public RichParameter
|
|
{
|
|
public:
|
|
RichFloat(const QString nm, const float defval, const QString desc = QString(), const QString tltip = QString());
|
|
RichFloat(const QString nm, const float val, const float defval, const QString desc = QString(), const QString tltip = QString(), bool isxmlpar = false);
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
~RichFloat();
|
|
};
|
|
|
|
class RichString : public RichParameter
|
|
{
|
|
public:
|
|
RichString(const QString nm, const QString defval, const QString desc, const QString tltip);
|
|
RichString(const QString nm, const QString defval);
|
|
RichString(const QString nm, const QString defval, const QString desc);
|
|
RichString(const QString nm, const QString val, const QString defval, const QString desc, const QString tltip, bool isxmlpar = false);
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
~RichString();
|
|
};
|
|
|
|
class RichMatrix44f : public RichParameter
|
|
{
|
|
public:
|
|
RichMatrix44f(const QString nm, const vcg::Matrix44f& defval, const QString desc = QString(), const QString tltip = QString());
|
|
RichMatrix44f(const QString nm, const vcg::Matrix44d& defval, const QString desc = QString(), const QString tltip = QString());
|
|
RichMatrix44f(const QString nm, const vcg::Matrix44f& val, const vcg::Matrix44f& defval, const QString desc = QString(), const QString tltip = QString(), bool isxmlpar = false);
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
~RichMatrix44f();
|
|
};
|
|
|
|
class RichPoint3f : public RichParameter
|
|
{
|
|
public:
|
|
RichPoint3f(const QString nm, const vcg::Point3f defval, const QString desc = QString(), const QString tltip = QString());
|
|
RichPoint3f(const QString nm, const vcg::Point3d defval, const QString desc = QString(), const QString tltip = QString());
|
|
RichPoint3f(const QString nm, const vcg::Point3f val, const vcg::Point3f defval, const QString desc = QString(), const QString tltip = QString(), bool isxmlpar = false);
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
~RichPoint3f();
|
|
};
|
|
class RichShotf : public RichParameter
|
|
{
|
|
public:
|
|
RichShotf(const QString nm, const vcg::Shotf defval, const QString desc = QString(), const QString tltip = QString());
|
|
RichShotf(const QString nm, const vcg::Shotf val, const vcg::Shotf defval, const QString desc = QString(), const QString tltip = QString(), bool isxmlpar = false);
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
~RichShotf();
|
|
};
|
|
|
|
class RichColor : public RichParameter
|
|
{
|
|
public:
|
|
RichColor(const QString nm, const QColor defval);
|
|
RichColor(const QString nm, const QColor defval, const QString desc);
|
|
RichColor(const QString nm, const QColor defval, const QString desc, const QString tltip);
|
|
RichColor(const QString nm, const QColor val, const QColor defval, const QString desc, const QString tltip, bool isxmlpar = false);
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
~RichColor();
|
|
|
|
};
|
|
|
|
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());
|
|
RichAbsPerc(const QString nm, const float val, const float defval, const float minval, const float maxval, const QString desc = QString(), const QString tltip = QString(), bool isxmlpar = false);
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
~RichAbsPerc();
|
|
};
|
|
|
|
class RichEnum : public RichParameter
|
|
{
|
|
public:
|
|
RichEnum(const QString nm, const int defval, const QStringList values, const QString desc = QString(), const QString tltip = QString());
|
|
RichEnum(const QString nm, const int val, const int defval, const QStringList values, const QString desc = QString(), const QString tltip = QString(), bool isxmlpar = false);
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
~RichEnum();
|
|
};
|
|
|
|
class RichMesh : public RichParameter
|
|
{
|
|
public:
|
|
|
|
//lastCreated = new RichMesh(pd.name, pd.val->getMesh(), dec->defVal->getMesh(), dec->meshdoc, dec->fieldDesc, dec->tooltip, pd.isDerivedFromXMLParam());
|
|
//else
|
|
// lastCreated = new RichMesh(pd.name, dec->meshindex, pd.isDerivedFromXMLParam());
|
|
RichMesh(const QString nm, MeshModel* defval, MeshDocument* doc, const QString desc = QString(), const QString tltip = QString());
|
|
RichMesh(const QString nm, MeshModel* val, MeshModel* defval, MeshDocument* doc, const QString desc = QString(), const QString tltip = QString(), bool isxmlpar = false);
|
|
|
|
RichMesh(const QString nm, int meshindex, MeshDocument* doc, const QString desc = QString(), const QString tltip = QString());
|
|
|
|
//WARNING: IT SHOULD BE USED ONLY BY MESHLABSERVER!!!!!!!
|
|
RichMesh(const QString nm, int meshind, bool isxmlpar = false);
|
|
RichMesh(const QString nm, int meshind, const QString desc = QString(), const QString tltip = QString(), bool isxmlpar = false);
|
|
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
~RichMesh();
|
|
|
|
int meshindex;
|
|
};
|
|
|
|
class RichFloatList : public RichParameter
|
|
{
|
|
public:
|
|
RichFloatList(const QString nm, FloatListValue* v, FloatListDecoration* prdec);
|
|
RichFloatList(const QString nm, FloatListValue* val, FloatListValue* v, FloatListDecoration* prdec, bool isxmlpar = false);
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
~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());
|
|
RichDynamicFloat(const QString nm, const float val, const float defval, const float minval, const float maxval, const QString desc = QString(), const QString tltip = QString(), bool isxmlpar = false);
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
~RichDynamicFloat();
|
|
|
|
};
|
|
|
|
class RichOpenFile : public RichParameter
|
|
{
|
|
public:
|
|
RichOpenFile(const QString nm, const QString directorydefval, const QStringList exts, const QString desc = QString(), const QString tltip = QString(), bool isxmlpar = false);
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
~RichOpenFile();
|
|
};
|
|
|
|
class RichSaveFile : public RichParameter
|
|
{
|
|
public:
|
|
RichSaveFile(const QString nm, const QString filedefval, const QString ext, const QString desc = QString(), const QString tltip = QString(), bool isxmlpar = false);
|
|
void accept(Visitor& v);
|
|
bool operator==(const RichParameter& rb);
|
|
~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(RichShotf& pd);
|
|
void visit(RichColor& 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 RichParameterAdapter
|
|
{
|
|
public:
|
|
static bool create(const QDomElement& np, RichParameter** par);
|
|
static bool create(const QString & namepreamble, const MLXMLPluginInfo::XMLMap & xmlparam, RichParameter ** par);
|
|
|
|
static QString convertToStringValue(RichParameter& rp);
|
|
};
|
|
|
|
class RichParameterValueToStringVisitor : public Visitor
|
|
{
|
|
public:
|
|
RichParameterValueToStringVisitor() : stringvalue() {}
|
|
|
|
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(RichShotf& pd);
|
|
void visit(RichColor& 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);
|
|
|
|
~RichParameterValueToStringVisitor() {}
|
|
|
|
QString stringvalue;
|
|
};
|
|
|
|
|
|
class RichParameterXMLVisitor : public Visitor
|
|
{
|
|
public:
|
|
RichParameterXMLVisitor(QDomDocument& doc) : docdom(doc) {}
|
|
|
|
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(RichShotf& pd);
|
|
void visit(RichColor& 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);
|
|
|
|
~RichParameterXMLVisitor() {}
|
|
|
|
QDomDocument docdom;
|
|
QDomElement parElem;
|
|
private:
|
|
void fillRichParameterAttribute(const QString& type, const QString& name, const QString& desc, const QString& tooltip, bool isxmlpar);
|
|
void fillRichParameterAttribute(const QString& type, const QString& name, const QString& val, const QString& desc, const QString& tooltip, bool isxmlpar);
|
|
};
|
|
|
|
class RichParameterSet
|
|
{
|
|
|
|
public:
|
|
RichParameterSet();
|
|
RichParameterSet(const RichParameterSet& rps);
|
|
// The data is just a list of Parameters
|
|
//QMap<QString, FilterParameter *> paramMap;
|
|
QList<RichParameter*> paramList;
|
|
bool isEmpty() const;
|
|
//RichParameter* findParameter(QString name);
|
|
RichParameter* findParameter(QString name) const;
|
|
bool hasParameter(QString name) const;
|
|
|
|
|
|
RichParameterSet& operator=(const RichParameterSet& rps);
|
|
RichParameterSet& copy(const RichParameterSet& rps);
|
|
RichParameterSet& join(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();
|
|
|
|
void setValue(const QString name, const Value& val);
|
|
|
|
bool getBool(QString name) const;
|
|
int getInt(QString name) const;
|
|
float getFloat(QString name) const;
|
|
QString getString(QString name) const;
|
|
vcg::Matrix44f getMatrix44(QString name) const;
|
|
vcg::Matrix44<MESHLAB_SCALAR> getMatrix44m(QString name) const;
|
|
vcg::Point3f getPoint3f(QString name) const;
|
|
vcg::Point3<MESHLAB_SCALAR> getPoint3m(QString name) const;
|
|
vcg::Shotf getShotf(QString name) const;
|
|
vcg::Shot<MESHLAB_SCALAR> getShotm(QString name) const;
|
|
QColor getColor(QString name) const;
|
|
vcg::Color4b getColor4b(QString name) const;
|
|
float getAbsPerc(QString name) const;
|
|
int getEnum(QString name) const;
|
|
MeshModel* getMesh(QString name) const;
|
|
QList<float> getFloatList(QString name) const;
|
|
float getDynamicFloat(QString name) const;
|
|
QString getOpenFileName(QString name) const;
|
|
QString getSaveFileName(QString name) const;
|
|
|
|
|
|
~RichParameterSet();
|
|
};
|
|
|
|
/****************************/
|
|
|
|
|
|
|
|
#endif |