Utils/CloudView/main.cpp

95 lines
3.4 KiB
C++
Raw Normal View History

2026-07-11 18:33:31 +08:00
#include <QApplication>
#include <QSurfaceFormat>
#include <QIcon>
#include <QCommandLineParser>
#include <QTimer>
#include "CloudViewMainWindow.h"
2026-02-19 00:45:00 +08:00
2026-07-11 18:33:31 +08:00
#define APP_VERSION "1.2.0"
2026-02-19 00:45:00 +08:00
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");
2026-07-11 18:33:31 +08:00
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"));
2026-02-19 00:45:00 +08:00
// 创建并显示主窗口
CloudViewMainWindow mainWindow;
2026-07-11 18:33:31 +08:00
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();
}