/
klischa
/
AstraScanner2
Обзор
Документация
Войти
/
klischa
/
AstraScanner2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/settings/SettingsManager.h
221 строка
8 KB
k k
refactor: capture subsystem overhaul
15 июл 2026, 11:17
15 июл 2026, 11:17
1123c30
Код
Авторство
О чём код?
#ifndef SETTINGSMANAGER_H #define SETTINGSMANAGER_H #include <QObject> #include <QSettings> #include <QString> #include "../project/ProjectManager.h" // Тонкая обёртка над QSettings с типизированными геттерами/сеттерами для // пользовательских параметров приложения. Все значения хранятся в реестре // (Windows) или в ~/.config/AstraScanner/AstraScanner.conf (Unix) через // QSettings с organization "AstraScanner" и application "AstraScanner". // // Используется как singleton: SettingsManager::instance(). Сигнал // settingsChanged эмитится после каждой записи — GUI может подписаться, чтобы // обновить UI без перезапуска. class SettingsManager : public QObject { Q_OBJECT public: static SettingsManager &instance(); // Явное уничтожение синглтона (для корректного завершения) static void destroyInstance(); // --- Сканирование --- int scanTimeoutSec() const; void setScanTimeoutSec(int seconds); double voxelLeafSize() const; // метры void setVoxelLeafSize(double meters); int frameSkip() const; // каждый N-й кадр добавляется в облако void setFrameSkip(int n); double depthMin() const; // метры — минимальная дистанция сбора точек void setDepthMin(double meters); double depthMax() const; // метры — максимальная дистанция сбора точек void setDepthMax(double meters); bool colorCameraEnabled() const; // вкл/выкл RGB-камеру void setColorCameraEnabled(bool enabled); bool mirrorRgb() const; // зеркалирование RGB-превью void setMirrorRgb(bool enabled); // --- Фильтры (дефолты) --- int sorMeanK() const; void setSorMeanK(int k); double sorStddevMul() const; void setSorStddevMul(double m); double rorRadius() const; // метры void setRorRadius(double meters); int rorMinNeighbors() const; void setRorMinNeighbors(int n); // --- ICP-регистрация (объединение сканов) --- double icpMaxCorrespondenceDistance() const; // метры void setIcpMaxCorrespondenceDistance(double meters); int icpMaxIterations() const; void setIcpMaxIterations(int n); bool icpSkipNonConverged() const; void setIcpSkipNonConverged(bool skip); double icpVoxelLeafOut() const; // метры, 0 = без децимации void setIcpVoxelLeafOut(double meters); // --- Poisson-реконструкция --- int poissonDepth() const; // typical 8..10 void setPoissonDepth(int depth); double poissonPointWeight() const; // screenedPoissonWeight void setPoissonPointWeight(double w); double poissonSamplesPerNode() const; void setPoissonSamplesPerNode(double n); double poissonNormalRadius() const; // метры; 0 → k-nearest void setPoissonNormalRadius(double meters); int poissonKNearest() const; // если normalRadius == 0 void setPoissonKNearest(int k); // --- Пути --- QString projectsDirectory() const; void setProjectsDirectory(const QString &path); QString lastExportDirectory() const; void setLastExportDirectory(const QString &path); // --- Постобработка (PR #1) --- // Удаление фона double backgroundDistanceThreshold() const; // метры void setBackgroundDistanceThreshold(double meters); int backgroundMaxIterations() const; void setBackgroundMaxIterations(int n); // Сегментация float segmentationClusterTolerance() const; // метры void setSegmentationClusterTolerance(float meters); int segmentationMinClusterSize() const; void setSegmentationMinClusterSize(int n); int segmentationMaxClusterSize() const; void setSegmentationMaxClusterSize(int n); // Сглаживание меша int smoothingNumIterations() const; void setSmoothingNumIterations(int n); float smoothingConvergence() const; void setSmoothingConvergence(float value); // --- Постобработка (PR #2) --- // Упрощение меша float meshSimplificationTargetReduction() const; void setMeshSimplificationTargetReduction(float value); // Закрытие дыр float meshHoleFillingMaxHoleSize() const; // метры void setMeshHoleFillingMaxHoleSize(float meters); // --- Оптический трекинг по маркерам --- double markerSizeMm() const; // Размер маркера в миллиметрах void setMarkerSizeMm(double mm); int markerInitCount() const; // Количество маркеров для инициализации карты void setMarkerInitCount(int count); // Параметры для настройки детектора маркеров (для отладки) float markerMinArea() const; void setMarkerMinArea(float area); float markerMaxArea() const; void setMarkerMaxArea(float area); float markerMinCircularity() const; void setMarkerMinCircularity(float circularity); float markerMinConvexity() const; void setMarkerMinConvexity(float convexity); float markerMinInertiaRatio() const; void setMarkerMinInertiaRatio(float inertia); // --- CCTag параметры --- QString markerDetectorType() const; // "Circular" или "CCTag" void setMarkerDetectorType(const QString& type); int cctagNumRings() const; // 3 или 4 void setCctagNumRings(int rings); float cctagMinIdentProba() const; // 1e-6 ... 1.0 void setCctagMinIdentProba(float proba); // --- Показ маркеров (исправление #14) --- bool showMarkers() const; void setShowMarkers(bool show); // --- Режим трекинга --- TrackingMode trackingMode() const; void setTrackingMode(TrackingMode mode); // --- CUDA для нейросети --- bool useCudaForNeural() const; void setUseCudaForNeural(bool use); // --- Neural + ICP confirm --- bool neuralIcpConfirmEnabled() const; void setNeuralIcpConfirmEnabled(bool enabled); double neuralIcpConfirmMaxCorrespondenceDistance() const; void setNeuralIcpConfirmMaxCorrespondenceDistance(double meters); int neuralIcpConfirmMaxIterations() const; void setNeuralIcpConfirmMaxIterations(int iterations); double neuralIcpConfirmMaxFitness() const; void setNeuralIcpConfirmMaxFitness(double fitness); double neuralIcpConfirmMaxCorrectionTranslation() const; void setNeuralIcpConfirmMaxCorrectionTranslation(double meters); double neuralIcpConfirmMaxCorrectionRotationDeg() const; void setNeuralIcpConfirmMaxCorrectionRotationDeg(double degrees); // Принудительная синхронизация на диск (QSettings делает это сам, но // иногда нужно вызвать явно перед выходом). void sync(); // Сброс всех настроек на значения по умолчанию (для тестов). // Очищает QSettings и пересоздает singleton. static void reset(); signals: void settingsChanged(const QString &key); private: // Статический указатель для синглтона (для явного контроля lifecycle) static SettingsManager* s_instance; SettingsManager(); mutable QMutex m_settingsMutex; SettingsManager(const SettingsManager &) = delete; SettingsManager &operator=(const SettingsManager &) = delete; template <typename T> void setValue(const QString &key, const T &value); QSettings m_settings; }; #endif // SETTINGSMANAGER_H