95 lines
3.4 KiB
C++
95 lines
3.4 KiB
C++
#include <QApplication>
|
|
#include <QSurfaceFormat>
|
|
#include <QIcon>
|
|
#include <QCommandLineParser>
|
|
#include <QTimer>
|
|
#include "CloudViewMainWindow.h"
|
|
|
|
#define APP_VERSION "1.2.0"
|
|
|
|
int main(int argc, char* argv[])
|
|
{
|
|
QApplication app(argc, argv);
|
|
|
|
// 设置 OpenGL 格式 - 使用 2.1 版本以确保固定管线兼容
|
|
QSurfaceFormat format;
|
|
format.setDepthBufferSize(24);
|
|
format.setStencilBufferSize(8);
|
|
format.setVersion(2, 1); // 使用 OpenGL 2.1 以确保固定管线函数可用
|
|
format.setSamples(4); // 抗锯齿
|
|
QSurfaceFormat::setDefaultFormat(format);
|
|
|
|
// 设置应用信息
|
|
app.setApplicationName("CloudView");
|
|
app.setOrganizationName("CloudView");
|
|
app.setApplicationVersion(APP_VERSION);
|
|
|
|
QCommandLineParser parser;
|
|
parser.setApplicationDescription("CloudView point cloud and shape viewer");
|
|
parser.addHelpOption();
|
|
parser.addVersionOption();
|
|
|
|
QCommandLineOption cloudOption(
|
|
QStringList() << "cloud" << "point-cloud",
|
|
"Load a point cloud or segment file. Positional files are treated the same way.",
|
|
"file");
|
|
QCommandLineOption bboxOption(
|
|
QStringList() << "bbox",
|
|
"Load a bounding-box JSON file.",
|
|
"file");
|
|
QCommandLineOption circleOption(
|
|
QStringList() << "circle",
|
|
"Load a circle data file. Row format: {x,y,z}-{r,p,y}-{radius}.",
|
|
"file");
|
|
QCommandLineOption rectangleOption(
|
|
QStringList() << "rectangle",
|
|
"Load a rectangle data file. Row format: {x,y,z}-{r,p,y}-{width,height}.",
|
|
"file");
|
|
QCommandLineOption surfaceOption(
|
|
QStringList() << "surface",
|
|
"Load a surface data file. Row format: {x,y,z}-{length,width} or {x,y,z}-{r,p,y}-{length,width}.",
|
|
"file");
|
|
QCommandLineOption triangleOption(
|
|
QStringList() << "triangle",
|
|
"Load a triangle data file. Row format: {x,y,z}-{x,y,z}-{x,y,z}.",
|
|
"file");
|
|
QCommandLineOption sequenceOption(
|
|
QStringList() << "sequence" << "sequential",
|
|
"Display startup files one at a time. Closing the window loads the next file.");
|
|
|
|
parser.addOption(cloudOption);
|
|
parser.addOption(bboxOption);
|
|
parser.addOption(circleOption);
|
|
parser.addOption(rectangleOption);
|
|
parser.addOption(surfaceOption);
|
|
parser.addOption(triangleOption);
|
|
parser.addOption(sequenceOption);
|
|
parser.addPositionalArgument("files", "Point cloud or segment files to load.");
|
|
parser.process(app);
|
|
|
|
CloudViewMainWindow::StartupFiles startupFiles;
|
|
startupFiles.displayFiles = parser.values(cloudOption);
|
|
startupFiles.displayFiles.append(parser.positionalArguments());
|
|
startupFiles.bboxFiles = parser.values(bboxOption);
|
|
startupFiles.circleFiles = parser.values(circleOption);
|
|
startupFiles.rectangleFiles = parser.values(rectangleOption);
|
|
startupFiles.surfaceFiles = parser.values(surfaceOption);
|
|
startupFiles.triangleFiles = parser.values(triangleOption);
|
|
startupFiles.sequential = parser.isSet(sequenceOption);
|
|
|
|
// 设置应用程序图标
|
|
app.setWindowIcon(QIcon(":/logo.png"));
|
|
|
|
// 创建并显示主窗口
|
|
CloudViewMainWindow mainWindow;
|
|
mainWindow.setWindowTitle(QString("点云查看器 v%1").arg(APP_VERSION));
|
|
mainWindow.resize(1280, 720);
|
|
mainWindow.show();
|
|
|
|
QTimer::singleShot(0, &mainWindow, [&mainWindow, startupFiles]() {
|
|
mainWindow.loadStartupFiles(startupFiles);
|
|
});
|
|
|
|
return app.exec();
|
|
}
|