#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "configs/settings_base.h"
#include "console/command_line_processor.h"
#include "console/main_control.h"
#include "gcode/gcode_command.h"
#include "gcode/gcode_meta.h"
#include "geometry/mesh/closed_mesh.h"
#include "geometry/mesh/mesh_base.h"
#include "geometry/mesh/open_mesh.h"
#include "geometry/segment_base.h"
#include "ornlslicer/build_info.h"
#include "part/part.h"
#include "threading/mesh_loader.h"
#include "units/unit.h"
#include "utilities/constants.h"
#include "utilities/enums.h"
#include "utilities/qt_json_conversion.h"
#include "utilities/runtime_diagnostics.h"
#include "windows/main_window.h"
int main(int argc, char* argv[]) {
QCoreApplication::setAttribute(Qt::AA_UseDesktopOpenGL);
// Register the meta type so we can use queued signals/slots.
qRegisterMetaType("QSharedPointer");
qRegisterMetaType("QSharedPointer");
qRegisterMetaType("QSharedPointer");
qRegisterMetaType("QSharedPointer");
qRegisterMetaType(
"QVector");
qRegisterMetaType("Distance");
qRegisterMetaType("Velocity");
qRegisterMetaType("Acceleration");
qRegisterMetaType("Angle");
qRegisterMetaType("Time");
qRegisterMetaType("Temperature");
qRegisterMetaType("Voltage");
qRegisterMetaType("Mass");
qRegisterMetaType("QHash");
qRegisterMetaType("QList");
qRegisterMetaType("QList");
qRegisterMetaType("QList");
qRegisterMetaType("StatusUpdateStepType");
qRegisterMetaType("GcodeCommand");
qRegisterMetaType("GcodeMeta");
qRegisterMetaType("fifojson");
qRegisterMetaType("nlohmann::json");
qRegisterMetaType("quintptr");
qRegisterMetaType("MeshData");
qRegisterMetaType("qintptr");
// Register the message handler so all output is printed in the main window as well.
QCommandLineParser parser;
if (argc > 1) {
QCoreApplication ca(argc, argv);
QCoreApplication::setApplicationName("ornlslicer");
QCoreApplication::setOrganizationName("ornl");
QCoreApplication::setApplicationVersion(QString::fromUtf8(ORNL::BuildInfo::Version));
QSharedPointer options = QSharedPointer::create();
ORNL::CommandLineConverter clc;
clc.setupCommandLineParser(parser);
parser.process(ca);
bool setupResult = clc.convertOptions(parser, options);
if (setupResult) {
ORNL::Diagnostics::logRuntimeSummary(QStringLiteral("cli"));
ORNL::MainControl* control = new ORNL::MainControl(options);
QObject::connect(control, &ORNL::MainControl::finished, &ca, &QCoreApplication::quit, Qt::QueuedConnection);
control->run();
int ret = ca.exec();
delete control;
return ret;
}
return parser.isSet(ORNL::Constants::ConsoleOptionStrings::kVersion) ? 0 : 1;
}
else {
QApplication a(argc, argv);
QApplication::setStyle(QStyleFactory::create("fusion"));
QApplication::setApplicationName("ornlslicer");
QApplication::setOrganizationName("ornl");
QApplication::setApplicationVersion(QString::fromUtf8(ORNL::BuildInfo::Version));
QApplication::setApplicationDisplayName(QString("ORNLSlicer-") + QString::fromUtf8(ORNL::BuildInfo::Version));
ORNL::Diagnostics::logRuntimeSummary(QStringLiteral("gui"));
Q_INIT_RESOURCE(icons);
Q_INIT_RESOURCE(shaders);
Q_INIT_RESOURCE(styles);
Q_INIT_RESOURCE(configs);
// Get the instance of the main window and show it.
ORNL::MainWindow* w = ORNL::MainWindow::getInstance();
w->show();
int ret = a.exec();
delete w;
return ret;
}
}