VOXCONVERT: added --dump command
parent
0877e7f2e0
commit
a3f89c8a59
|
@ -19,6 +19,10 @@ of options.
|
||||||
\fB\--crop\fR
|
\fB\--crop\fR
|
||||||
Reduces the volume sizes to their voxel boundaries.
|
Reduces the volume sizes to their voxel boundaries.
|
||||||
|
|
||||||
|
.TP
|
||||||
|
\fB\--dump\fR
|
||||||
|
Dump the scene graph of the input file.
|
||||||
|
|
||||||
.TP
|
.TP
|
||||||
\fB\--export-palette\fR
|
\fB\--export-palette\fR
|
||||||
Export the used palette data into an image. Use in combination with --src-palette.
|
Export the used palette data into an image. Use in combination with --src-palette.
|
||||||
|
|
|
@ -14,6 +14,7 @@ vengi (0.0.17.0-1) UNRELEASED; urgency=low
|
||||||
* Added --crop parameter that reduces the volumes to their real voxel sizes
|
* Added --crop parameter that reduces the volumes to their real voxel sizes
|
||||||
* Added --split option to cut volumes into smaller pieces
|
* Added --split option to cut volumes into smaller pieces
|
||||||
* Added --export-layers to export all the layers of a scene into single files
|
* Added --export-layers to export all the layers of a scene into single files
|
||||||
|
* Added --dump to dump the scene graph of the input file
|
||||||
|
|
||||||
* VoxEdit:
|
* VoxEdit:
|
||||||
* Fixed torus shape
|
* Fixed torus shape
|
||||||
|
|
|
@ -27,6 +27,7 @@ VoxConvert:
|
||||||
- Added `--crop` parameter that reduces the volumes to their real voxel sizes
|
- Added `--crop` parameter that reduces the volumes to their real voxel sizes
|
||||||
- Added `--split` option to cut volumes into smaller pieces
|
- Added `--split` option to cut volumes into smaller pieces
|
||||||
- Added `--export-layers` to export all the layers of a scene into single files
|
- Added `--export-layers` to export all the layers of a scene into single files
|
||||||
|
- Added `--dump` to dump the scene graph of the input file
|
||||||
|
|
||||||
VoxEdit:
|
VoxEdit:
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,6 @@ enum class SceneGraphNodeType {
|
||||||
Root,
|
Root,
|
||||||
Model,
|
Model,
|
||||||
ModelReference,
|
ModelReference,
|
||||||
Transform,
|
|
||||||
Group,
|
Group,
|
||||||
Camera,
|
Camera,
|
||||||
Unknown,
|
Unknown,
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "VoxConvert.h"
|
#include "VoxConvert.h"
|
||||||
#include "core/Color.h"
|
#include "core/Color.h"
|
||||||
|
#include "core/Enum.h"
|
||||||
#include "core/GameConfig.h"
|
#include "core/GameConfig.h"
|
||||||
#include "core/StringUtil.h"
|
#include "core/StringUtil.h"
|
||||||
#include "core/Tokenizer.h"
|
#include "core/Tokenizer.h"
|
||||||
|
@ -19,6 +20,7 @@
|
||||||
#include "core/TimeProvider.h"
|
#include "core/TimeProvider.h"
|
||||||
#include "voxel/MaterialColor.h"
|
#include "voxel/MaterialColor.h"
|
||||||
#include "voxel/RawVolume.h"
|
#include "voxel/RawVolume.h"
|
||||||
|
#include "voxelformat/SceneGraphNode.h"
|
||||||
#include "voxelformat/VolumeFormat.h"
|
#include "voxelformat/VolumeFormat.h"
|
||||||
#include "voxelformat/Format.h"
|
#include "voxelformat/Format.h"
|
||||||
#include "voxelformat/SceneGraph.h"
|
#include "voxelformat/SceneGraph.h"
|
||||||
|
@ -37,6 +39,7 @@ VoxConvert::VoxConvert(const metric::MetricPtr& metric, const io::FilesystemPtr&
|
||||||
app::AppState VoxConvert::onConstruct() {
|
app::AppState VoxConvert::onConstruct() {
|
||||||
const app::AppState state = Super::onConstruct();
|
const app::AppState state = Super::onConstruct();
|
||||||
registerArg("--crop").setDescription("Reduce the volumes to their real voxel sizes");
|
registerArg("--crop").setDescription("Reduce the volumes to their real voxel sizes");
|
||||||
|
registerArg("--dump").setDescription("Dump the scene graph of the input file");
|
||||||
registerArg("--export-layers").setDescription("Export all the layers of a scene into single files");
|
registerArg("--export-layers").setDescription("Export all the layers of a scene into single files");
|
||||||
registerArg("--export-palette").setDescription("Export the used palette data into an image. Use in combination with --src-palette");
|
registerArg("--export-palette").setDescription("Export the used palette data into an image. Use in combination with --src-palette");
|
||||||
registerArg("--filter").setDescription("Layer filter. For example '1-4,6'");
|
registerArg("--filter").setDescription("Layer filter. For example '1-4,6'");
|
||||||
|
@ -137,6 +140,7 @@ app::AppState VoxConvert::onInit() {
|
||||||
const bool changePivot = hasArg("--pivot");
|
const bool changePivot = hasArg("--pivot");
|
||||||
const bool cropVolumes = hasArg("--crop");
|
const bool cropVolumes = hasArg("--crop");
|
||||||
const bool splitVolumes = hasArg("--split");
|
const bool splitVolumes = hasArg("--split");
|
||||||
|
const bool dumpSceneGraph = hasArg("--dump");
|
||||||
|
|
||||||
Log::info("Options");
|
Log::info("Options");
|
||||||
if (voxelformat::isMeshFormat(outfile)) {
|
if (voxelformat::isMeshFormat(outfile)) {
|
||||||
|
@ -160,6 +164,7 @@ app::AppState VoxConvert::onInit() {
|
||||||
scriptParameters = getArgVal("--script");
|
scriptParameters = getArgVal("--script");
|
||||||
Log::info("* script: - %s", scriptParameters.c_str());
|
Log::info("* script: - %s", scriptParameters.c_str());
|
||||||
}
|
}
|
||||||
|
Log::info("* dump scene graph: - %s", (dumpSceneGraph ? "true" : "false"));
|
||||||
Log::info("* merge volumes: - %s", (mergeVolumes ? "true" : "false"));
|
Log::info("* merge volumes: - %s", (mergeVolumes ? "true" : "false"));
|
||||||
Log::info("* scale volumes: - %s", (scaleVolumes ? "true" : "false"));
|
Log::info("* scale volumes: - %s", (scaleVolumes ? "true" : "false"));
|
||||||
Log::info("* crop volumes: - %s", (cropVolumes ? "true" : "false"));
|
Log::info("* crop volumes: - %s", (cropVolumes ? "true" : "false"));
|
||||||
|
@ -197,7 +202,7 @@ app::AppState VoxConvert::onInit() {
|
||||||
Log::error("Could not open target file: %s", outfile.c_str());
|
Log::error("Could not open target file: %s", outfile.c_str());
|
||||||
return app::AppState::InitFailure;
|
return app::AppState::InitFailure;
|
||||||
}
|
}
|
||||||
} else if (!exportLayers && !exportPalette) {
|
} else if (!exportLayers && !exportPalette && !dumpSceneGraph) {
|
||||||
Log::error("No output specified");
|
Log::error("No output specified");
|
||||||
return app::AppState::InitFailure;
|
return app::AppState::InitFailure;
|
||||||
}
|
}
|
||||||
|
@ -247,6 +252,9 @@ app::AppState VoxConvert::onInit() {
|
||||||
Log::error("Failed to load given input file");
|
Log::error("Failed to load given input file");
|
||||||
return app::AppState::InitFailure;
|
return app::AppState::InitFailure;
|
||||||
}
|
}
|
||||||
|
if (dumpSceneGraph) {
|
||||||
|
dump(newSceneGraph);
|
||||||
|
}
|
||||||
for (voxel::SceneGraphNode &node : newSceneGraph) {
|
for (voxel::SceneGraphNode &node : newSceneGraph) {
|
||||||
sceneGraph.emplace(core::move(node));
|
sceneGraph.emplace(core::move(node));
|
||||||
}
|
}
|
||||||
|
@ -389,6 +397,38 @@ void VoxConvert::split(const glm::ivec3 &size, voxel::SceneGraph& sceneGraph) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VoxConvert::dumpNode_r(const voxel::SceneGraph& sceneGraph, int nodeId, int indent) {
|
||||||
|
const voxel::SceneGraphNode& node = sceneGraph.node(nodeId);
|
||||||
|
static const char* NodeTypeStr[] {
|
||||||
|
"Root",
|
||||||
|
"Model",
|
||||||
|
"ModelReference",
|
||||||
|
"Group",
|
||||||
|
"Camera",
|
||||||
|
"Unknown"
|
||||||
|
};
|
||||||
|
static_assert(core::enumVal(voxel::SceneGraphNodeType::Max) == lengthof(NodeTypeStr), "Array sizes don't match Max");
|
||||||
|
const voxel::SceneGraphNodeType type = node.type();
|
||||||
|
|
||||||
|
Log::info("%*sNode: %i (parent %i)", indent, " ", nodeId, node.parent());
|
||||||
|
Log::info("%*s |- name: %s", indent, " ", node.name().c_str());
|
||||||
|
Log::info("%*s |- type: %s", indent, " ", NodeTypeStr[core::enumVal(type)]);
|
||||||
|
if (type == voxel::SceneGraphNodeType::Model) {
|
||||||
|
Log::info("%*s |- volume: %s", indent, " ", node.volume() != nullptr ? node.volume()->region().toString().c_str() : "no volume");
|
||||||
|
}
|
||||||
|
for (const auto & entry : node.properties()) {
|
||||||
|
Log::info("%*s |- %s: %s", indent, " ", entry->key.c_str(), entry->value.c_str());
|
||||||
|
}
|
||||||
|
Log::info("%*s |- children: %i", indent, " ", (int)node.children().size());
|
||||||
|
for (int children : node.children()) {
|
||||||
|
dumpNode_r(sceneGraph, children, indent + 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void VoxConvert::dump(const voxel::SceneGraph& sceneGraph) {
|
||||||
|
dumpNode_r(sceneGraph, sceneGraph.root().id(), 0);
|
||||||
|
}
|
||||||
|
|
||||||
void VoxConvert::crop(voxel::SceneGraph& sceneGraph) {
|
void VoxConvert::crop(voxel::SceneGraph& sceneGraph) {
|
||||||
Log::info("Crop volumes");
|
Log::info("Crop volumes");
|
||||||
for (voxel::SceneGraphNode& node : sceneGraph) {
|
for (voxel::SceneGraphNode& node : sceneGraph) {
|
||||||
|
|
|
@ -35,6 +35,8 @@ protected:
|
||||||
void translate(const glm::ivec3& pos, voxel::SceneGraph& sceneGraph);
|
void translate(const glm::ivec3& pos, voxel::SceneGraph& sceneGraph);
|
||||||
void pivot(const glm::ivec3& pivot, voxel::SceneGraph& sceneGraph);
|
void pivot(const glm::ivec3& pivot, voxel::SceneGraph& sceneGraph);
|
||||||
void crop(voxel::SceneGraph& sceneGraph);
|
void crop(voxel::SceneGraph& sceneGraph);
|
||||||
|
void dumpNode_r(const voxel::SceneGraph& sceneGraph, int nodeId, int indent);
|
||||||
|
void dump(const voxel::SceneGraph& sceneGraph);
|
||||||
void filterVolumes(voxel::SceneGraph& sceneGraph);
|
void filterVolumes(voxel::SceneGraph& sceneGraph);
|
||||||
void exportLayersIntoSingleObjects(voxel::SceneGraph& sceneGraph, const core::String &inputfile);
|
void exportLayersIntoSingleObjects(voxel::SceneGraph& sceneGraph, const core::String &inputfile);
|
||||||
void split(const glm::ivec3 &size, voxel::SceneGraph& sceneGraph);
|
void split(const glm::ivec3 &size, voxel::SceneGraph& sceneGraph);
|
||||||
|
|
|
@ -26,9 +26,6 @@ static void recursiveAddNodes(const voxel::SceneGraph &sceneGraph, const voxel::
|
||||||
case voxel::SceneGraphNodeType::Camera:
|
case voxel::SceneGraphNodeType::Camera:
|
||||||
name = ICON_FA_CAMERA;
|
name = ICON_FA_CAMERA;
|
||||||
break;
|
break;
|
||||||
case voxel::SceneGraphNodeType::Transform:
|
|
||||||
name = ICON_FA_SLIDERS_H;
|
|
||||||
break;
|
|
||||||
case voxel::SceneGraphNodeType::Unknown:
|
case voxel::SceneGraphNodeType::Unknown:
|
||||||
name = ICON_FA_QUESTION_CIRCLE;
|
name = ICON_FA_QUESTION_CIRCLE;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue