mirror of
https://github.com/lucaspalomodevelop/meshlab.git
synced 2026-03-20 11:26:11 +00:00
class of nxs builder plugin
This commit is contained in:
parent
a586d36781
commit
7a9576f97d
@ -68,7 +68,8 @@ public:
|
||||
PointSet = 0x08000,
|
||||
Measure = 0x10000, /*!< Filters that compute measures and information on meshes.*/
|
||||
Polygonal = 0x20000, /*!< Filters that works on polygonal and quad meshes.*/
|
||||
Camera = 0x40000 /*!< Filters that works on shot of mesh and raster.*/
|
||||
Camera = 0x40000, /*!< Filters that works on shot of mesh and raster.*/
|
||||
Other = 0x80000
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -358,159 +358,164 @@ public:
|
||||
private:
|
||||
WordActionsMapAccessor wama;
|
||||
//////// ToolBars ///////////////
|
||||
QToolBar *mainToolBar;
|
||||
QToolBar *decoratorToolBar;
|
||||
QToolBar *editToolBar;
|
||||
QToolBar *filterToolBar;
|
||||
QToolBar *searchToolBar;
|
||||
QToolBar* mainToolBar;
|
||||
QToolBar* decoratorToolBar;
|
||||
QToolBar* editToolBar;
|
||||
QToolBar* filterToolBar;
|
||||
QToolBar* searchToolBar;
|
||||
MLRenderingGlobalToolbar* globrendtoolbar;
|
||||
///////// Menus ///////////////
|
||||
QMenu *fileMenu;
|
||||
QMenu *filterMenu;
|
||||
QMenu* fileMenu;
|
||||
QMenu* filterMenu;
|
||||
QMenu* recentProjMenu;
|
||||
QMenu* recentFileMenu;
|
||||
|
||||
QMenu *filterMenuSelect;
|
||||
QMenu *filterMenuClean;
|
||||
QMenu *filterMenuCreate;
|
||||
QMenu *filterMenuRemeshing;
|
||||
QMenu *filterMenuPolygonal;
|
||||
QMenu *filterMenuColorize;
|
||||
QMenu *filterMenuSmoothing;
|
||||
QMenu *filterMenuQuality;
|
||||
QMenu *filterMenuMeshLayer;
|
||||
QMenu *filterMenuRasterLayer;
|
||||
QMenu *filterMenuNormal;
|
||||
QMenu *filterMenuRangeMap;
|
||||
QMenu *filterMenuPointSet;
|
||||
QMenu *filterMenuSampling;
|
||||
QMenu *filterMenuTexture;
|
||||
QMenu *filterMenuCamera;
|
||||
QMenu* filterMenuSelect;
|
||||
QMenu* filterMenuClean;
|
||||
QMenu* filterMenuCreate;
|
||||
QMenu* filterMenuRemeshing;
|
||||
QMenu* filterMenuPolygonal;
|
||||
QMenu* filterMenuColorize;
|
||||
QMenu* filterMenuSmoothing;
|
||||
QMenu* filterMenuQuality;
|
||||
QMenu* filterMenuMeshLayer;
|
||||
QMenu* filterMenuRasterLayer;
|
||||
QMenu* filterMenuNormal;
|
||||
QMenu* filterMenuRangeMap;
|
||||
QMenu* filterMenuPointSet;
|
||||
QMenu* filterMenuSampling;
|
||||
QMenu* filterMenuTexture;
|
||||
QMenu* filterMenuCamera;
|
||||
QMenu* filterMenuOther;
|
||||
|
||||
QMenu *editMenu;
|
||||
QMenu* editMenu;
|
||||
|
||||
//Render Menu and SubMenu ////
|
||||
QMenu *shadersMenu;
|
||||
QMenu *renderMenu;
|
||||
QMenu* shadersMenu;
|
||||
QMenu* renderMenu;
|
||||
|
||||
//View Menu and SubMenu //////
|
||||
QMenu *viewMenu;
|
||||
QMenu *toolBarMenu;
|
||||
QMenu* viewMenu;
|
||||
QMenu* toolBarMenu;
|
||||
//////////////////////////////
|
||||
QMenu *windowsMenu;
|
||||
QMenu *preferencesMenu;
|
||||
QMenu *helpMenu;
|
||||
QMenu *splitModeMenu;
|
||||
QMenu *viewFromMenu;
|
||||
QMenu *trackballStepMenu;
|
||||
QMenu* windowsMenu;
|
||||
QMenu* preferencesMenu;
|
||||
QMenu* helpMenu;
|
||||
QMenu* splitModeMenu;
|
||||
QMenu* viewFromMenu;
|
||||
QMenu* trackballStepMenu;
|
||||
//////////// Split/Unsplit Menu from handle///////////
|
||||
QMenu *handleMenu;
|
||||
QMenu *splitMenu;
|
||||
QMenu *unSplitMenu;
|
||||
QMenu* handleMenu;
|
||||
QMenu* splitMenu;
|
||||
QMenu* unSplitMenu;
|
||||
////////// Search Shortcut ////////////////
|
||||
QShortcut* searchShortCut;
|
||||
MyToolButton* searchButton;
|
||||
SearchMenu* searchMenu;
|
||||
|
||||
//////////// Actions Menu File ///////////////////////
|
||||
QAction *newProjectAct;
|
||||
QAction *openProjectAct, *appendProjectAct, *saveProjectAct;
|
||||
QAction *importMeshAct, *exportMeshAct, *exportMeshAsAct;
|
||||
QAction *importRasterAct;
|
||||
QAction *closeProjectAct;
|
||||
QAction *reloadMeshAct;
|
||||
QAction *reloadAllMeshAct;
|
||||
QAction *saveSnapshotAct;
|
||||
QAction *recentFileActs[MAXRECENTFILES];
|
||||
QAction *recentProjActs[MAXRECENTFILES];
|
||||
QAction *exitAct;
|
||||
QAction* newProjectAct;
|
||||
QAction* openProjectAct;
|
||||
QAction* appendProjectAct;
|
||||
QAction* saveProjectAct;
|
||||
QAction* importMeshAct;
|
||||
QAction* exportMeshAct;
|
||||
QAction* exportMeshAsAct;
|
||||
QAction* importRasterAct;
|
||||
QAction* closeProjectAct;
|
||||
QAction* reloadMeshAct;
|
||||
QAction* reloadAllMeshAct;
|
||||
QAction* saveSnapshotAct;
|
||||
QAction* recentFileActs[MAXRECENTFILES];
|
||||
QAction* recentProjActs[MAXRECENTFILES];
|
||||
QAction* exitAct;
|
||||
//////
|
||||
QAction *lastFilterAct;
|
||||
QAction *runFilterScriptAct;
|
||||
QAction *showFilterScriptAct;
|
||||
QAction* lastFilterAct;
|
||||
QAction* runFilterScriptAct;
|
||||
QAction* showFilterScriptAct;
|
||||
//QAction* showFilterEditAct;
|
||||
/////////// Actions Menu Edit /////////////////////
|
||||
QAction *suspendEditModeAct;
|
||||
QAction* suspendEditModeAct;
|
||||
|
||||
///////////Actions Menu View ////////////////////////
|
||||
QAction *fullScreenAct;
|
||||
QAction *showToolbarStandardAct;
|
||||
QAction *showInfoPaneAct;
|
||||
QAction *showTrackBallAct;
|
||||
QAction *resetTrackBallAct;
|
||||
QAction *showLayerDlgAct;
|
||||
QAction *showRasterAct;
|
||||
QAction* fullScreenAct;
|
||||
QAction* showToolbarStandardAct;
|
||||
QAction* showInfoPaneAct;
|
||||
QAction* showTrackBallAct;
|
||||
QAction* resetTrackBallAct;
|
||||
QAction* showLayerDlgAct;
|
||||
QAction* showRasterAct;
|
||||
///////////Actions Menu Windows /////////////////////
|
||||
QAction *windowsTileAct;
|
||||
QAction *windowsCascadeAct;
|
||||
QAction *windowsNextAct;
|
||||
QAction *closeAllAct;
|
||||
QAction *setSplitHAct;
|
||||
QAction *setSplitVAct;
|
||||
QActionGroup *setSplitGroupAct;
|
||||
QAction *setUnsplitAct;
|
||||
QAction* windowsTileAct;
|
||||
QAction* windowsCascadeAct;
|
||||
QAction* windowsNextAct;
|
||||
QAction* closeAllAct;
|
||||
QAction* setSplitHAct;
|
||||
QAction* setSplitVAct;
|
||||
QActionGroup* setSplitGroupAct;
|
||||
QAction* setUnsplitAct;
|
||||
///////////Actions Menu Windows -> Split/UnSplit from Handle ////////////////////////
|
||||
QActionGroup *splitGroupAct;
|
||||
QActionGroup *unsplitGroupAct;
|
||||
QActionGroup* splitGroupAct;
|
||||
QActionGroup* unsplitGroupAct;
|
||||
|
||||
QAction *splitUpAct;
|
||||
QAction *splitDownAct;
|
||||
QAction* splitUpAct;
|
||||
QAction* splitDownAct;
|
||||
|
||||
QAction *unsplitUpAct;
|
||||
QAction *unsplitDownAct;
|
||||
QAction* unsplitUpAct;
|
||||
QAction* unsplitDownAct;
|
||||
|
||||
QAction *splitRightAct;
|
||||
QAction *splitLeftAct;
|
||||
QAction* splitRightAct;
|
||||
QAction* splitLeftAct;
|
||||
|
||||
QAction *unsplitRightAct;
|
||||
QAction *unsplitLeftAct;
|
||||
QAction* unsplitRightAct;
|
||||
QAction* unsplitLeftAct;
|
||||
|
||||
///////////Actions Menu Windows -> View From ////////////////////////
|
||||
QActionGroup *viewFromGroupAct;
|
||||
QAction *viewTopAct;
|
||||
QAction *viewBottomAct;
|
||||
QAction *viewLeftAct;
|
||||
QAction *viewRightAct;
|
||||
QAction *viewFrontAct;
|
||||
QAction *viewBackAct;
|
||||
QAction *viewTopYAct;
|
||||
QAction *viewBottomYAct;
|
||||
QAction *viewLeftYAct;
|
||||
QAction *viewRightYAct;
|
||||
QAction *viewFrontYAct;
|
||||
QAction *viewBackYAct;
|
||||
QAction *viewFromMeshAct;
|
||||
QAction *viewFromRasterAct;
|
||||
QAction *readViewFromFileAct;
|
||||
QAction *saveViewToFileAct;
|
||||
QActionGroup* viewFromGroupAct;
|
||||
QAction* viewTopAct;
|
||||
QAction* viewBottomAct;
|
||||
QAction* viewLeftAct;
|
||||
QAction* viewRightAct;
|
||||
QAction* viewFrontAct;
|
||||
QAction* viewBackAct;
|
||||
QAction* viewTopYAct;
|
||||
QAction* viewBottomYAct;
|
||||
QAction* viewLeftYAct;
|
||||
QAction* viewRightYAct;
|
||||
QAction* viewFrontYAct;
|
||||
QAction* viewBackYAct;
|
||||
QAction* viewFromMeshAct;
|
||||
QAction* viewFromRasterAct;
|
||||
QAction* readViewFromFileAct;
|
||||
QAction* saveViewToFileAct;
|
||||
|
||||
QAction *toggleOrthoAct;
|
||||
QAction* toggleOrthoAct;
|
||||
|
||||
QActionGroup *trackballStepGroupAct;
|
||||
QAction *trackballStepHP;
|
||||
QAction *trackballStepHM;
|
||||
QAction *trackballStepVP;
|
||||
QAction *trackballStepVM;
|
||||
QAction *trackballStepSP;
|
||||
QAction *trackballStepSM;
|
||||
QActionGroup* trackballStepGroupAct;
|
||||
QAction* trackballStepHP;
|
||||
QAction* trackballStepHM;
|
||||
QAction* trackballStepVP;
|
||||
QAction* trackballStepVM;
|
||||
QAction* trackballStepSP;
|
||||
QAction* trackballStepSM;
|
||||
|
||||
|
||||
///////////Actions Menu Windows -> Link/Copy/Paste View ////////////////////////
|
||||
public:
|
||||
QAction *linkViewersAct;
|
||||
QAction* linkViewersAct;
|
||||
private:
|
||||
QAction *copyShotToClipboardAct;
|
||||
QAction *pasteShotFromClipboardAct;
|
||||
QAction* copyShotToClipboardAct;
|
||||
QAction* pasteShotFromClipboardAct;
|
||||
|
||||
///////////Actions Menu Preferences /////////////////
|
||||
QAction *setCustomizeAct;
|
||||
QAction* setCustomizeAct;
|
||||
///////////Actions Menu Help ////////////////////////
|
||||
QAction *aboutAct;
|
||||
QAction *aboutPluginsAct;
|
||||
QAction *submitBugAct;
|
||||
QAction *onlineHelpAct;
|
||||
QAction *onscreenHelpAct;
|
||||
QAction *checkUpdatesAct;
|
||||
QAction* aboutAct;
|
||||
QAction* aboutPluginsAct;
|
||||
QAction* submitBugAct;
|
||||
QAction* onlineHelpAct;
|
||||
QAction* onscreenHelpAct;
|
||||
QAction* checkUpdatesAct;
|
||||
////////////////////////////////////////////////////
|
||||
static QString getDecoratedFileName(const QString& name);
|
||||
|
||||
|
||||
@ -744,6 +744,8 @@ void MainWindow::fillFilterMenu()
|
||||
filterMenu->addMenu(filterMenuTexture);
|
||||
filterMenuCamera = new MenuWithToolTip(tr("Camera"), this);
|
||||
filterMenu->addMenu(filterMenuCamera);
|
||||
filterMenuOther = new MenuWithToolTip(tr("Other"), this);
|
||||
filterMenu->addMenu(filterMenuOther);
|
||||
|
||||
|
||||
//this is used just to fill the menus with alhabetical order
|
||||
@ -761,89 +763,72 @@ void MainWindow::fillFilterMenu()
|
||||
QAction *filterAction = iFilter->getFilterAction(p.first);
|
||||
QString tooltip = iFilter->filterInfo(filterAction) + "<br>" + getDecoratedFileName(filterAction->data().toString());
|
||||
filterAction->setToolTip(tooltip);
|
||||
//connect(filterAction, SIGNAL(hovered()), this, SLOT(showActionMenuTooltip()) );
|
||||
connect(filterAction, SIGNAL(triggered()), this, SLOT(startFilter()));
|
||||
|
||||
int filterClass = iFilter->getClass(filterAction);
|
||||
if (filterClass & FilterPlugin::FaceColoring)
|
||||
{
|
||||
if (filterClass & FilterPlugin::FaceColoring) {
|
||||
filterMenuColorize->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::VertexColoring)
|
||||
{
|
||||
if (filterClass & FilterPlugin::VertexColoring) {
|
||||
filterMenuColorize->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::MeshColoring)
|
||||
{
|
||||
if (filterClass & FilterPlugin::MeshColoring) {
|
||||
filterMenuColorize->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::Selection)
|
||||
{
|
||||
if (filterClass & FilterPlugin::Selection) {
|
||||
filterMenuSelect->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::Cleaning)
|
||||
{
|
||||
if (filterClass & FilterPlugin::Cleaning) {
|
||||
filterMenuClean->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::Remeshing)
|
||||
{
|
||||
if (filterClass & FilterPlugin::Remeshing) {
|
||||
filterMenuRemeshing->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::Smoothing)
|
||||
{
|
||||
if (filterClass & FilterPlugin::Smoothing) {
|
||||
filterMenuSmoothing->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::Normal)
|
||||
{
|
||||
if (filterClass & FilterPlugin::Normal) {
|
||||
filterMenuNormal->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::Quality)
|
||||
{
|
||||
if (filterClass & FilterPlugin::Quality) {
|
||||
filterMenuQuality->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::Measure)
|
||||
{
|
||||
if (filterClass & FilterPlugin::Measure) {
|
||||
filterMenuQuality->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::Layer)
|
||||
{
|
||||
if (filterClass & FilterPlugin::Layer) {
|
||||
filterMenuMeshLayer->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::RasterLayer)
|
||||
{
|
||||
if (filterClass & FilterPlugin::RasterLayer) {
|
||||
filterMenuRasterLayer->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::MeshCreation)
|
||||
{
|
||||
if (filterClass & FilterPlugin::MeshCreation) {
|
||||
filterMenuCreate->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::RangeMap)
|
||||
{
|
||||
if (filterClass & FilterPlugin::RangeMap) {
|
||||
filterMenuRangeMap->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::PointSet)
|
||||
{
|
||||
if (filterClass & FilterPlugin::PointSet) {
|
||||
filterMenuPointSet->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::Sampling)
|
||||
{
|
||||
if (filterClass & FilterPlugin::Sampling) {
|
||||
filterMenuSampling->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::Texture)
|
||||
{
|
||||
if (filterClass & FilterPlugin::Texture) {
|
||||
filterMenuTexture->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::Polygonal)
|
||||
{
|
||||
if (filterClass & FilterPlugin::Polygonal) {
|
||||
filterMenuPolygonal->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::Camera)
|
||||
{
|
||||
if (filterClass & FilterPlugin::Camera) {
|
||||
filterMenuCamera->addAction(filterAction);
|
||||
}
|
||||
if (filterClass & FilterPlugin::Other) {
|
||||
filterMenuOther->addAction(filterAction);
|
||||
}
|
||||
|
||||
// MeshFilterInterface::Generic :
|
||||
if (filterClass == 0)
|
||||
{
|
||||
if (filterClass == 0) {
|
||||
filterMenu->addAction(filterAction);
|
||||
}
|
||||
//if(!filterAction->icon().isNull())
|
||||
|
||||
@ -1223,7 +1223,7 @@ void OpenFileWidget::selectFile()
|
||||
//OpenFileDecoration* dec = reinterpret_cast<OpenFileDecoration*>(rp->pd);
|
||||
RichOpenFile* dec = reinterpret_cast<RichOpenFile*>(rp);
|
||||
QString ext;
|
||||
QString fl = QFileDialog::getOpenFileName(this,tr("Open"),rp->value().getString(), dec->exts.join(" "));
|
||||
QString fl = QFileDialog::getOpenFileName(this,tr("Open"),rp->value().getString(), dec->exts.join(";;"));
|
||||
collectWidgetValue();
|
||||
updateFileName(fl);
|
||||
StringValue fileName(fl);
|
||||
|
||||
@ -23,6 +23,17 @@
|
||||
|
||||
#include "filter_nxs_builder.h"
|
||||
|
||||
#include <QTextStream>
|
||||
#include <QTemporaryDir>
|
||||
#include <nxsbuild/nexusbuilder.h>
|
||||
#include <nxsbuild/meshstream.h>
|
||||
#include <nxsbuild/vcgloader.h>
|
||||
#include <nxsbuild/kdtree.h>
|
||||
|
||||
#include <nxsbuild/nexusbuilder.h>
|
||||
#include <common/traversal.h>
|
||||
#include <nxsedit/extractor.h>
|
||||
|
||||
/**
|
||||
* @brief
|
||||
* Constructor usually performs only two simple tasks of filling the two lists
|
||||
@ -81,7 +92,7 @@ QString NxsBuilderPlugin::filterInfo(ActionIDType filterId) const
|
||||
{
|
||||
switch(filterId) {
|
||||
case FP_NXS_BUILDER :
|
||||
return "Move the vertices of the mesh of a random quantity.";
|
||||
return "Create a nxs file starting from a obj, ply or stl.";
|
||||
default :
|
||||
assert(0);
|
||||
return "Unknown Filter";
|
||||
@ -99,7 +110,8 @@ NxsBuilderPlugin::FilterClass NxsBuilderPlugin::getClass(const QAction *a) const
|
||||
{
|
||||
switch(ID(a)) {
|
||||
case FP_NXS_BUILDER :
|
||||
return FilterPlugin::Smoothing;
|
||||
case FP_NXS_COMPRESS:
|
||||
return FilterPlugin::Other;
|
||||
default :
|
||||
assert(0);
|
||||
return FilterPlugin::Generic;
|
||||
@ -112,7 +124,7 @@ NxsBuilderPlugin::FilterClass NxsBuilderPlugin::getClass(const QAction *a) const
|
||||
*/
|
||||
FilterPlugin::FilterArity NxsBuilderPlugin::filterArity(const QAction*) const
|
||||
{
|
||||
return SINGLE_MESH;
|
||||
return NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -130,7 +142,7 @@ int NxsBuilderPlugin::getPreConditions(const QAction*) const
|
||||
*/
|
||||
int NxsBuilderPlugin::postCondition(const QAction*) const
|
||||
{
|
||||
return MeshModel::MM_VERTCOORD | MeshModel::MM_FACENORMAL | MeshModel::MM_VERTNORMAL;
|
||||
return MeshModel::MM_NONE;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -143,18 +155,39 @@ int NxsBuilderPlugin::postCondition(const QAction*) const
|
||||
* @param action
|
||||
* @param m
|
||||
*/
|
||||
RichParameterList NxsBuilderPlugin::initParameterList(const QAction *action, const MeshModel &m)
|
||||
RichParameterList NxsBuilderPlugin::initParameterList(const QAction *action, const MeshModel &)
|
||||
{
|
||||
RichParameterList parlst;
|
||||
RichParameterList params;
|
||||
switch(ID(action)) {
|
||||
case FP_NXS_BUILDER :
|
||||
parlst.addParam(RichBool ("UpdateNormals", true, "Recompute normals", "Toggle the recomputation of the normals after the random displacement.\n\nIf disabled the face normals will remains unchanged resulting in a visually pleasant effect."));
|
||||
parlst.addParam(RichAbsPerc("Displacement", m.cm.bbox.Diag()/100.0f,0.0f,m.cm.bbox.Diag(), "Max displacement", "The vertex are displaced of a vector whose norm is bounded by this value"));
|
||||
params.addParam(RichOpenFile("input_file", "", {"*.ply", "*.obj", "*.stl", "*.tsp"}, "", ""));
|
||||
params.addParam(RichSaveFile("out_file", "", "*.nxs", "", ""));
|
||||
params.addParam(RichInt("node_faces", 1<<15, "Node faces", "Number of faces per patch"));
|
||||
params.addParam(RichInt("top_node_faces", 4096, "Top node faces", "Number of triangles in the top node"));
|
||||
params.addParam(RichInt("tex_quality", 100, "Texture quality [0-100]", "jpg texture quality"));
|
||||
params.addParam(RichInt("ram", 2000, "Ram buffer", "Max ram used (in MegaBytes)", true));
|
||||
params.addParam(RichInt("skiplevels", 0, "Skip levels", "Decimation skipped for n levels"));
|
||||
params.addParam(RichPoint3f("origin", Point3m(0,0,0), "Origin", "new origin for the model"));
|
||||
params.addParam(RichBool("center", false, "Center", "Set origin in the bounding box center", true));
|
||||
params.addParam(RichBool("pow_2_textures", false, "Pow 2 textures", "Create textures to be power of 2", true));
|
||||
params.addParam(RichBool("deepzoom", false, "Deepzoom", "Save each node and texture to a separated file", true));
|
||||
params.addParam(RichDynamicFloat("adaptive", 0.333, 0, 1, "Adaptive", "Split nodes adaptively"));
|
||||
break;
|
||||
case FP_NXS_COMPRESS:
|
||||
params.addParam(RichOpenFile("input_file", "", {"*.nxs"}, "", ""));
|
||||
params.addParam(RichSaveFile("out_file", "", "*.nxz", "", ""));
|
||||
params.addParam(RichFloat("nxz_vertex_quantization", 0.0, "NXZ Vertex quantization", "absolute side of quantization grid (uses quantization factor, instead)", false, "NXZ parameters"));
|
||||
params.addParam(RichInt("vertex_bits", 0, "Vertex bits", "number of bits in vertex coordinates when compressing (uses quantization factor, instead)", false, "NXZ parameters"));
|
||||
params.addParam(RichFloat("quantization_factor", 0.1, "Quantization factor", "Quantization as a factor of error", false, "NXZ parameters"));
|
||||
params.addParam(RichInt("luma_bits", 6, "Luma bits", "Quantization of luma channel", true, "NXZ parameters"));
|
||||
params.addParam(RichInt("chroma_bits", 6, "Chroma bits", "Quantization of chroma channel", true, "NXZ parameters"));
|
||||
params.addParam(RichInt("alpha_bits", 5, "Alpha bits", "Quantization of alpha channel", true, "NXZ parameters"));
|
||||
params.addParam(RichInt("normal_bits", 10, "Normal bits", "Quantization of normals", true, "NXZ parameters"));
|
||||
params.addParam(RichFloat("textures_precision", 0.25, "Textures precision", "Quantization of textures, precision in pixels per unit", true, "NXZ parameters"));
|
||||
default :
|
||||
assert(0);
|
||||
}
|
||||
return parlst;
|
||||
return params;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -166,15 +199,16 @@ RichParameterList NxsBuilderPlugin::initParameterList(const QAction *action, con
|
||||
* @return true if the filter has been applied correctly, false otherwise
|
||||
*/
|
||||
std::map<std::string, QVariant> NxsBuilderPlugin::applyFilter(
|
||||
const QAction * action,
|
||||
const RichParameterList & par,
|
||||
MeshDocument &md,
|
||||
const QAction* action,
|
||||
const RichParameterList& par,
|
||||
MeshDocument&,
|
||||
unsigned int& /*postConditionMask*/,
|
||||
vcg::CallBackPos *cb)
|
||||
vcg::CallBackPos* cb)
|
||||
{
|
||||
switch(ID(action)) {
|
||||
case FP_NXS_BUILDER :
|
||||
vertexDisplacement(md, cb, par.getBool("UpdateNormals"), par.getAbsPerc("Displacement"));
|
||||
break;
|
||||
case FP_NXS_COMPRESS:
|
||||
break;
|
||||
default :
|
||||
wrongActionCalled(action);
|
||||
@ -182,35 +216,4 @@ std::map<std::string, QVariant> NxsBuilderPlugin::applyFilter(
|
||||
return std::map<std::string, QVariant>();
|
||||
}
|
||||
|
||||
void NxsBuilderPlugin::vertexDisplacement(
|
||||
MeshDocument &md,
|
||||
vcg::CallBackPos *cb,
|
||||
bool updateNormals,
|
||||
Scalarm max_displacement)
|
||||
{
|
||||
CMeshO &m = md.mm()->cm;
|
||||
srand(time(NULL));
|
||||
|
||||
for(unsigned int i = 0; i< m.vert.size(); i++){
|
||||
// Typical usage of the callback for showing a nice progress bar in the bottom.
|
||||
// First parameter is a 0..100 number indicating percentage of completion, the second is an info string.
|
||||
cb(100*i/m.vert.size(), "Randomly Displacing...");
|
||||
|
||||
Scalarm rndax = (Scalarm(2.0*rand())/RAND_MAX - 1.0 ) *max_displacement;
|
||||
Scalarm rnday = (Scalarm(2.0*rand())/RAND_MAX - 1.0 ) *max_displacement;
|
||||
Scalarm rndaz = (Scalarm(2.0*rand())/RAND_MAX - 1.0 ) *max_displacement;
|
||||
m.vert[i].P() += Point3m(rndax,rnday,rndaz);
|
||||
}
|
||||
|
||||
// Log function dump textual info in the lower part of the MeshLab screen.
|
||||
log("Successfully displaced %i vertices",m.vn);
|
||||
|
||||
// to access to the parameters of the filter dialog simply use the getXXXX function of the FilterParameter Class
|
||||
if(updateNormals){
|
||||
vcg::tri::UpdateNormal<CMeshO>::PerVertexNormalizedPerFace(m);
|
||||
}
|
||||
|
||||
vcg::tri::UpdateBounding<CMeshO>::Box(m);
|
||||
}
|
||||
|
||||
MESHLAB_PLUGIN_NAME_EXPORTER(FilterSamplePlugin)
|
||||
MESHLAB_PLUGIN_NAME_EXPORTER(NxsBuilderPlugin)
|
||||
|
||||
@ -28,13 +28,11 @@
|
||||
|
||||
class NxsBuilderPlugin : public QObject, public FilterPlugin
|
||||
{
|
||||
//keep these three lines unchanged
|
||||
Q_OBJECT
|
||||
MESHLAB_PLUGIN_IID_EXPORTER(FILTER_PLUGIN_IID)
|
||||
Q_INTERFACES(NxsBuilderPlugin)
|
||||
Q_INTERFACES(FilterPlugin)
|
||||
|
||||
public:
|
||||
//enum used to give an ID to every filter implemented in the plugin
|
||||
enum FileterIds {
|
||||
FP_NXS_BUILDER,
|
||||
FP_NXS_COMPRESS
|
||||
@ -58,13 +56,6 @@ public:
|
||||
MeshDocument &md,
|
||||
unsigned int& postConditionMask,
|
||||
vcg::CallBackPos * cb);
|
||||
|
||||
private:
|
||||
void vertexDisplacement(
|
||||
MeshDocument &md,
|
||||
vcg::CallBackPos *cb,
|
||||
bool updateNormals,
|
||||
Scalarm max_displacement);
|
||||
};
|
||||
|
||||
#endif //MESHLAB_FILTER_NXS_BUILDER_H
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user