/
klischa
/
AstraScanner2
Обзор
Документация
Войти
/
klischa
/
AstraScanner2
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/filters/PointCloudFilters.cpp
118 строк
4 KB
arena-agent
fix(critical): thread safety, memory leaks, and crash guards
20 июн 2026, 08:19
20 июн 2026, 08:19
97d9d92
Код
Авторство
О чём код?
#include "PointCloudFilters.h" #include "../services/CloudFiltersService.h" #include "../services/RegistrationService.h" #include "../services/ReconstructionService.h" #include "../services/MeshProcessingService.h" #include <QDebug> PointCloudFilters::PointCloudFilters(QObject *parent) : QObject(parent) { m_cloudFiltersService = new CloudFiltersService(this); m_registrationService = new RegistrationService(m_cloudFiltersService, this); m_reconstructionService = new ReconstructionService(this); m_meshProcessingService = new MeshProcessingService(this); // Forward signals from services to PointCloudFilters // (services emit Qt signals, which we re-emit – no duplicate callbacks) connect(m_cloudFiltersService, &CloudFiltersService::progressUpdated, this, &PointCloudFilters::progressUpdated); connect(m_cloudFiltersService, &CloudFiltersService::filterCompleted, this, &PointCloudFilters::filterCompleted); connect(m_registrationService, &RegistrationService::progressUpdated, this, &PointCloudFilters::progressUpdated); connect(m_reconstructionService, &ReconstructionService::progressUpdated, this, &PointCloudFilters::progressUpdated); connect(m_meshProcessingService, &MeshProcessingService::progressUpdated, this, &PointCloudFilters::progressUpdated); } pcl::PointCloud<pcl::PointXYZRGB>::Ptr PointCloudFilters::applyStatisticalOutlierRemoval( const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &cloud, int meanK, double stddevMulThresh) { return m_cloudFiltersService->applyStatisticalOutlierRemoval(cloud, meanK, stddevMulThresh); } pcl::PointCloud<pcl::PointXYZRGB>::Ptr PointCloudFilters::applyRadiusOutlierRemoval( const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &cloud, double radius, int minNeighbors) { return m_cloudFiltersService->applyRadiusOutlierRemoval(cloud, radius, minNeighbors); } pcl::PointCloud<pcl::PointXYZRGB>::Ptr PointCloudFilters::applyVoxelGrid( const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &cloud, float leafSize) { return m_cloudFiltersService->applyVoxelGrid(cloud, leafSize); } pcl::PointCloud<pcl::PointXYZRGB>::Ptr PointCloudFilters::applyMagicWand( const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &cloud, float leafSize, int meanK, double stddevMulThresh) { return m_cloudFiltersService->applyMagicWand(cloud, leafSize, meanK, stddevMulThresh); } pcl::PointCloud<pcl::PointXYZRGB>::Ptr PointCloudFilters::registerPointCloudsICP( const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &source, const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &target, double maxCorrespondenceDistance, int maximumIterations, bool *convergedOut) { return m_registrationService->registerPointCloudsICP(source, target, maxCorrespondenceDistance, maximumIterations, convergedOut); } pcl::PointCloud<pcl::PointXYZRGB>::Ptr PointCloudFilters::mergeScans( const std::vector<pcl::PointCloud<pcl::PointXYZRGB>::Ptr> &scans, const MergeParams ¶ms) { return m_registrationService->mergeScans(scans, params); } pcl::PolygonMesh PointCloudFilters::reconstructPoissonMesh( const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &cloud, const PoissonParams ¶ms) { return m_reconstructionService->reconstructPoissonMesh(cloud, params); } pcl::PointCloud<pcl::PointXYZRGB>::Ptr PointCloudFilters::removeBackgroundPlane( const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &cloud, float distanceThreshold, int maxIterations) { return m_cloudFiltersService->removeBackgroundPlane(cloud, distanceThreshold, maxIterations); } pcl::PointCloud<pcl::PointXYZRGB>::Ptr PointCloudFilters::applyRegionGrowingSegmentation( const pcl::PointCloud<pcl::PointXYZRGB>::Ptr &cloud, float clusterTolerance, int minClusterSize, int maxClusterSize) { return m_cloudFiltersService->applyRegionGrowingSegmentation(cloud, clusterTolerance, minClusterSize, maxClusterSize); } pcl::PolygonMesh PointCloudFilters::applyMeshSmoothing( const pcl::PolygonMesh &mesh, int numIterations, float convergence) { return m_meshProcessingService->applyMeshSmoothing(mesh, numIterations, convergence); } pcl::PolygonMesh PointCloudFilters::simplifyMesh( const pcl::PolygonMesh &mesh, float targetReduction) { return m_meshProcessingService->simplifyMesh(mesh, targetReduction); } pcl::PolygonMesh PointCloudFilters::fillMeshHoles( const pcl::PolygonMesh &mesh, float maxHoleSize) { return m_meshProcessingService->fillMeshHoles(mesh, maxHoleSize); }