From 7e6f2b435dce137effc087b26f7c128da1c21129 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=89=91=E5=8F=A4=E6=95=9B=E9=94=8B?= <3045316072@qq.com> Date: Wed, 3 Apr 2024 11:34:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=90=9E=E5=AE=9A=E4=BA=86=E7=82=B9=E4=BA=91?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=EF=BC=88pcd)=E7=9A=84=20=E4=BF=9D=E5=AD=98?= =?UTF-8?q?=E4=B8=8E=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PointClouddataExchange.cpp | 31 +++++++++++-------- .../VTKdataExchange.cpp | 2 -- .../meshDataExchangePlugin.cpp | 15 ++++++--- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/src/PluginMeshDataExchange/PointClouddataExchange.cpp b/src/PluginMeshDataExchange/PointClouddataExchange.cpp index 623b279..1180761 100644 --- a/src/PluginMeshDataExchange/PointClouddataExchange.cpp +++ b/src/PluginMeshDataExchange/PointClouddataExchange.cpp @@ -27,7 +27,7 @@ #include #include #include - +#include // debug #include "Common/DebugLogger.h" @@ -114,13 +114,12 @@ namespace MeshData { } bool PointClouddataExchange::write() { + QFileInfo info(_fileName); - if (!info.exists()) - return false; QString name = info.fileName(); QString path = info.filePath(); QString suffix = info.suffix().toLower(); - DebugInfo("PointClouddataExchange::writePCD FileName :%s \n",_fileName.toUtf8().constData()); + if (suffix == "pcd") { return writePCD(); @@ -219,18 +218,19 @@ namespace MeshData { { QTextCodec *codec = QTextCodec::codecForName("GB18030"); QByteArray ba = codec->fromUnicode(_fileName); - vtkUnstructuredGrid *ungird = vtkUnstructuredGrid::New(); - vtkSmartPointer filter = vtkSmartPointer::New(); - // 使用 vtkGeometryFilter 提取几何信息并转换为 vtkPolyData - vtkSmartPointer geometryFilter = vtkSmartPointer::New(); + DebugInfo("PointClouddataExchange::writePCD FileName :%s ",ba); - DebugInfo("PointClouddataExchange::writePCD Filter prepare :ok \n"); + // 使用 vtkGeometryFilter 提取几何信息并转换为 vtkPolyData + vtkSmartPointer geometryFilter = vtkSmartPointer::New(); + + DebugInfo("PointClouddataExchange::writePCD Filter prepare :ok modelID :%d\n",_modelId); if (_modelId > 0) { MeshKernal *kernal = _meshData->getKernalByID(_modelId); if (kernal != nullptr) { + vtkDataSet *dataset = kernal->getMeshData(); if (dataset != nullptr) geometryFilter->AddInputData(dataset); @@ -239,6 +239,7 @@ namespace MeshData { else { const int n = _meshData->getKernalCount(); + for (int i = 0; i < n; ++i) { if (!_threadRuning) @@ -247,16 +248,19 @@ namespace MeshData { if (kernal != nullptr) { vtkDataSet *dataset = kernal->getMeshData(); + DebugInfo("PointClouddataExchange::writePCD writer over : iKernal %d , %d is nullptr ,points Count %d\n",i,(int)(dataset==nullptr),dataset->GetNumberOfPoints()); if (dataset != nullptr) geometryFilter->AddInputData(dataset); } } } - filter->Update(); - vtkSmartPointer polyData = geometryFilter->GetOutput(); + geometryFilter->Update(); + vtkSmartPointer outputDataSet = geometryFilter->GetOutput(); + DebugInfo("PointClouddataExchange::writePCD writer over :ok outputDataSet Point Count : %d\n",outputDataSet->GetNumberOfPoints()); + // 将输出的点云数据集转换为 PCL 格式 pcl::PointCloud::Ptr cloud_with_rgba(new pcl::PointCloud); - pcl::io::vtkPolyDataToPointCloud(polyData,*cloud_with_rgba); - DebugInfo("PointClouddataExchange::writePCD writer prepare :ok \n"); + pcl::io::vtkPolyDataToPointCloud(outputDataSet,*cloud_with_rgba); + DebugInfo("PointClouddataExchange::writePCD writer over :ok cloud_with_rgba Point Count : %d\n",cloud_with_rgba->size()); std::string outFileName=ba.data(); pcl::io::savePCDFileBinary(outFileName,*cloud_with_rgba); DebugInfo("PointClouddataExchange::writePCD writer over :ok \n"); @@ -293,6 +297,7 @@ namespace MeshData { if (kernal != nullptr) { vtkDataSet *dataset = kernal->getMeshData(); + if (dataset != nullptr) geometryFilter->AddInputData(dataset); } diff --git a/src/PluginMeshDataExchange/VTKdataExchange.cpp b/src/PluginMeshDataExchange/VTKdataExchange.cpp index f8018fe..4b982c1 100644 --- a/src/PluginMeshDataExchange/VTKdataExchange.cpp +++ b/src/PluginMeshDataExchange/VTKdataExchange.cpp @@ -133,8 +133,6 @@ namespace MeshData bool VTKdataExchange::write() { QFileInfo info(_fileName); - if (!info.exists()) - return false; QString name = info.fileName(); QString path = info.filePath(); QString suffix = info.suffix().toLower(); diff --git a/src/PluginMeshDataExchange/meshDataExchangePlugin.cpp b/src/PluginMeshDataExchange/meshDataExchangePlugin.cpp index 9a6d86a..4a7310a 100644 --- a/src/PluginMeshDataExchange/meshDataExchangePlugin.cpp +++ b/src/PluginMeshDataExchange/meshDataExchangePlugin.cpp @@ -338,10 +338,12 @@ bool MESHDATAEXCHANGEPLUGINAPI FOAMexportMesh(QString AbFileName, int id) return false; } -bool MESHDATAEXCHANGEPLUGINAPI XYZimportPCL(QString AbFileName, int modelId) +bool MESHDATAEXCHANGEPLUGINAPI XYZimportPCL(QString AbFileName, int id) { - - + auto xyzReader = new MeshData::PointClouddataExchange( + AbFileName, MeshData::MESH_READ, MeshData::MeshDataExchangePlugin::getMWpt(), id); + ModuleBase::ThreadControl* tc = new ModuleBase::ThreadControl(xyzReader); + emit tc->threadStart(); // emit MSHwriter->start(); return false; } @@ -354,9 +356,12 @@ bool MESHDATAEXCHANGEPLUGINAPI PCDimportPCL(QString AbFileName, int id) return false; } -bool MESHDATAEXCHANGEPLUGINAPI PLYimportPCL(QString AbFileName, int modelId) +bool MESHDATAEXCHANGEPLUGINAPI PLYimportPCL(QString AbFileName, int id) { - + auto plyReader = new MeshData::PointClouddataExchange( + AbFileName, MeshData::MESH_READ, MeshData::MeshDataExchangePlugin::getMWpt(), id); + ModuleBase::ThreadControl* tc = new ModuleBase::ThreadControl(plyReader); + emit tc->threadStart(); // emit MSHwriter->start(); return false; }