Browse Source

sceneconverter: add a --remove-duplicates option.

pull/449/head
Vladimír Vondruš 6 years ago
parent
commit
add966e0bd
  1. 1
      src/Magnum/MeshTools/CMakeLists.txt
  2. 21
      src/Magnum/MeshTools/sceneconverter.cpp

1
src/Magnum/MeshTools/CMakeLists.txt

@ -123,6 +123,7 @@ if(WITH_SCENECONVERTER)
add_executable(magnum-sceneconverter sceneconverter.cpp) add_executable(magnum-sceneconverter sceneconverter.cpp)
target_link_libraries(magnum-sceneconverter PRIVATE target_link_libraries(magnum-sceneconverter PRIVATE
Magnum Magnum
MagnumMeshTools
MagnumTrade) MagnumTrade)
set_target_properties(magnum-sceneconverter PROPERTIES FOLDER "Magnum/MeshTools") set_target_properties(magnum-sceneconverter PROPERTIES FOLDER "Magnum/MeshTools")

21
src/Magnum/MeshTools/sceneconverter.cpp

@ -33,6 +33,7 @@
#include <Corrade/Utility/String.h> #include <Corrade/Utility/String.h>
#include "Magnum/PixelFormat.h" #include "Magnum/PixelFormat.h"
#include "Magnum/MeshTools/RemoveDuplicates.h"
#include "Magnum/Trade/AbstractImporter.h" #include "Magnum/Trade/AbstractImporter.h"
#include "Magnum/Trade/MeshData.h" #include "Magnum/Trade/MeshData.h"
#include "Magnum/Trade/MeshObjectData3D.h" #include "Magnum/Trade/MeshObjectData3D.h"
@ -66,7 +67,7 @@ information.
@code{.sh} @code{.sh}
magnum-sceneconverter [-h|--help] [--importer IMPORTER] magnum-sceneconverter [-h|--help] [--importer IMPORTER]
[--converter CONVERTER]... [--plugin-dir DIR] [--converter CONVERTER]... [--plugin-dir DIR] [--remove-duplicates]
[-i|--importer-options key=val,key2=val2,] [-i|--importer-options key=val,key2=val2,]
[-c|--converter-options key=val,key2=val2,]... [--info] [-v|--verbose] [-c|--converter-options key=val,key2=val2,]... [--info] [-v|--verbose]
[--profile] [--] input output [--profile] [--] input output
@ -81,6 +82,8 @@ Arguments:
@ref Trade::AnySceneImporter "AnySceneImporter") @ref Trade::AnySceneImporter "AnySceneImporter")
- `--converter CONVERTER` --- scene converter plugin(s) - `--converter CONVERTER` --- scene converter plugin(s)
- `--plugin-dir DIR` --- override base plugin dir - `--plugin-dir DIR` --- override base plugin dir
- `--remove-duplicates` --- remove duplicate vertices using
@ref MeshTools::removeDuplicates(const Trade::MeshData&) after import
- `-i`, `--importer-options key=val,key2=val2,` --- configuration options to - `-i`, `--importer-options key=val,key2=val2,` --- configuration options to
pass to the importer pass to the importer
- `-c`, `--converter-options key=val,key2=val2,` --- configuration options - `-c`, `--converter-options key=val,key2=val2,` --- configuration options
@ -154,6 +157,7 @@ int main(int argc, char** argv) {
.addOption("importer", "AnySceneImporter").setHelp("importer", "scene importer plugin") .addOption("importer", "AnySceneImporter").setHelp("importer", "scene importer plugin")
.addArrayOption("converter").setHelp("converter", "scene converter plugin(s)") .addArrayOption("converter").setHelp("converter", "scene converter plugin(s)")
.addOption("plugin-dir").setHelp("plugin-dir", "override base plugin dir", "DIR") .addOption("plugin-dir").setHelp("plugin-dir", "override base plugin dir", "DIR")
.addBooleanOption("remove-duplicates").setHelp("remove-duplicates", "remove duplicate vertices in the mesh after import")
.addOption('i', "importer-options").setHelp("importer-options", "configuration options to pass to the importer", "key=val,key2=val2,…") .addOption('i', "importer-options").setHelp("importer-options", "configuration options to pass to the importer", "key=val,key2=val2,…")
.addArrayOption('c', "converter-options").setHelp("converter-options", "configuration options to pass to the converter(s)", "key=val,key2=val2,…") .addArrayOption('c', "converter-options").setHelp("converter-options", "configuration options to pass to the converter(s)", "key=val,key2=val2,…")
.addBooleanOption("info").setHelp("info", "print info about the input file and exit") .addBooleanOption("info").setHelp("info", "print info about the input file and exit")
@ -361,13 +365,24 @@ save its output; if no --converter is specified, AnySceneConverter is used.)")
} }
} }
std::chrono::high_resolution_clock::duration conversionTime;
/* Remove duplicates, if requested */
if(args.isSet("remove-duplicates")) {
const UnsignedInt beforeVertexCount = mesh->vertexCount();
{
Duration d{conversionTime};
mesh = MeshTools::removeDuplicates(*std::move(mesh));
}
if(args.isSet("verbose"))
Debug{} << "Duplicate removal:" << beforeVertexCount << "->" << mesh->vertexCount() << "vertices";
}
/* Load converter plugin */ /* Load converter plugin */
PluginManager::Manager<Trade::AbstractSceneConverter> converterManager{ PluginManager::Manager<Trade::AbstractSceneConverter> converterManager{
args.value("plugin-dir").empty() ? std::string{} : args.value("plugin-dir").empty() ? std::string{} :
Utility::Directory::join(args.value("plugin-dir"), Trade::AbstractSceneConverter::pluginSearchPaths()[0])}; Utility::Directory::join(args.value("plugin-dir"), Trade::AbstractSceneConverter::pluginSearchPaths()[0])};
std::chrono::high_resolution_clock::duration conversionTime;
/* Assume there's always one passed --converter option less, and the last /* Assume there's always one passed --converter option less, and the last
is implicitly AnySceneConverter. All converters except the last one are is implicitly AnySceneConverter. All converters except the last one are
expected to support ConvertMesh and the mesh is "piped" from one to the expected to support ConvertMesh and the mesh is "piped" from one to the

Loading…
Cancel
Save