ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
BundlerCommand.cpp
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #include "BundlerCommand.h"
9 
10 #include "BundlerFilter.h"
11 
12 static const char COMMAND_BUNDLER[] =
13  "BUNDLER_IMPORT"; // Import Bundler file + orthorectification
14 static const char COMMAND_BUNDLER_ALT_KEYPOINTS[] = "ALT_KEYPOINTS";
15 static const char COMMAND_BUNDLER_SCALE_FACTOR[] = "SCALE_FACTOR";
16 static const char COMMAND_BUNDLER_UNDISTORT[] = "UNDISTORT";
17 static const char COMMAND_BUNDLER_COLOR_DTM[] = "COLOR_DTM";
18 
20  : ccCommandLineInterface::Command("Bundler", COMMAND_BUNDLER) {}
21 
23  cmd.print("[BUNDLER]");
24  if (cmd.arguments().empty())
25  return cmd.error(
26  QObject::tr("Missing parameter: filename after \"-%1\"")
27  .arg(COMMAND_BUNDLER));
28 
29  // open specified file
30  QString bundlerFilename(cmd.arguments().takeFirst());
31  cmd.print(QObject::tr("Importing Bundler file: '%1'").arg(bundlerFilename));
32 
33  QString altKeypointsFilename;
34  bool undistortImages = false;
35  bool generateColoredDTM = false;
36  unsigned coloredDTMVerticesCount = 0;
37  float scaleFactor = 1.0f;
38 
39  // inner loop for Bundler import options
40  while (!cmd.arguments().empty()) {
41  QString argument = cmd.arguments().front();
44  // local option confirmed, we can move on
45  cmd.arguments().pop_front();
46 
47  if (cmd.arguments().empty())
48  return cmd.error(
49  QObject::tr("Missing parameter: filename after \"-%1\"")
51  altKeypointsFilename = cmd.arguments().takeFirst();
53  argument, COMMAND_BUNDLER_SCALE_FACTOR)) {
54  // local option confirmed, we can move on
55  cmd.arguments().pop_front();
56 
57  if (cmd.arguments().empty())
58  return cmd.error(
59  QObject::tr("Missing parameter: value after \"-%1\"")
61  bool conversionOk = false;
62  scaleFactor = cmd.arguments().takeFirst().toFloat(&conversionOk);
63  if (!conversionOk)
64  return cmd.error(
65  QObject::tr("Invalid parameter: value after \"-%1\"")
68  argument, COMMAND_BUNDLER_UNDISTORT)) {
69  // local option confirmed, we can move on
70  cmd.arguments().pop_front();
71 
72  undistortImages = true;
74  argument, COMMAND_BUNDLER_COLOR_DTM)) {
75  // local option confirmed, we can move on
76  cmd.arguments().pop_front();
77 
78  if (cmd.arguments().empty())
79  return cmd.error(QObject::tr("Missing parameter: vertices "
80  "count after \"-%1\"")
82  bool conversionOk = false;
83  coloredDTMVerticesCount =
84  cmd.arguments().takeFirst().toUInt(&conversionOk);
85  if (!conversionOk)
86  return cmd.error(QObject::tr("Invalid parameter: vertices "
87  "count after \"-%1\"")
89  generateColoredDTM = true;
90  } else {
91  break; // as soon as we encounter an unrecognized argument, we
92  // break the local loop to go back to the main one!
93  }
94  }
95 
96  ccHObject tempContainer;
98  parameters.alwaysDisplayLoadDialog = false;
99  BundlerFilter().loadFileExtended(qPrintable(bundlerFilename), tempContainer,
100  parameters, altKeypointsFilename,
101  undistortImages, generateColoredDTM,
102  coloredDTMVerticesCount, scaleFactor);
103  return true;
104 }
static const char COMMAND_BUNDLER_ALT_KEYPOINTS[]
static const char COMMAND_BUNDLER_COLOR_DTM[]
static const char COMMAND_BUNDLER[]
static const char COMMAND_BUNDLER_SCALE_FACTOR[]
static const char COMMAND_BUNDLER_UNDISTORT[]
virtual bool process(ccCommandLineInterface &cmd) override
Main process.
Noah Snavely's Bundler output file filter.
Definition: BundlerFilter.h:15
CC_FILE_ERROR loadFileExtended(const QString &filename, ccHObject &container, LoadParameters &parameters, const QString &altKeypointsFilename=QString(), bool undistortImages=false, bool generateColoredDTM=false, unsigned coloredDTMVerticesCount=1000000, float scaleFactor=1.0f)
Specific load method.
Command line interface.
virtual QStringList & arguments()=0
Returns the list of arguments.
virtual void print(const QString &message) const =0
virtual bool error(const QString &message) const =0
static bool IsCommand(const QString &token, const char *command)
Test whether a command line token is a valid command keyword or not.
Hierarchical CLOUDVIEWER Object.
Definition: ecvHObject.h:25
Generic loading parameters.
Definition: FileIOFilter.h:51