修正了模型保存时,可能会替换内置模型

pull/1/head
剑古敛锋 2024-07-23 10:30:50 +08:00
parent 49781f86a8
commit 8f64808f65
1 changed files with 122 additions and 150 deletions

View File

@ -22,15 +22,16 @@
#include <vtkDataSetSurfaceFilter.h>
#include "MainWindow/MainWindow.h"
#include "MainWindow/SubWindowManager.h"
#include "Settings/BusAPI.h"
namespace MeshData
{
VTKdataExchange::VTKdataExchange(const QString &fileName, MeshOperation operation, GUI::MainWindow *mw, int modelId) : MeshThreadBase(fileName, operation, mw),
_fileName(fileName),
_meshData(MeshData::getInstance()),
_operation(operation),
_modelId(modelId)
namespace MeshData {
VTKdataExchange::VTKdataExchange(const QString& fileName, MeshOperation operation,
GUI::MainWindow* mw, int modelId)
: MeshThreadBase(fileName, operation, mw)
, _fileName(fileName)
, _meshData(MeshData::getInstance())
, _operation(operation)
, _modelId(modelId)
{
}
@ -44,46 +45,37 @@ namespace MeshData
QString suffix = info.suffix().toLower();
vtkDataSet* dataset = nullptr;
if (suffix == "vtk")
{
if(suffix == "vtk") {
dataset = readVTK();
}
else if (suffix == "stl")
{
} else if(suffix == "stl") {
dataset = readSTL();
}
else if (suffix == "dat")
{
} else if(suffix == "dat") {
dataset = readTecplot();
}
if (dataset != nullptr)
{
if(dataset != nullptr) {
// 网格面片三角化
emit _mainwindow->printMessage(Common::Message::Normal,u8"surface triangulation .....");
// vtkSmartPointer<vtkDataSetSurfaceFilter> surfaceFilter = vtkSmartPointer<vtkDataSetSurfaceFilter>::New();
// surfaceFilter->SetInputData(dataset);
// surfaceFilter->Update();
// dataset = surfaceFilter->GetOutput();
// emit _mainwindow->printMessage(Common::Message::Normal,
// u8"surface triangulation .....");
MeshKernal* k = new MeshKernal;
k->setName(name);
k->setPath(path);
if(QFile(path).exists()) {
QString appworkpath = Setting::BusAPI::instance()->getApplicationExePath();
if(path.contains(appworkpath)) {
QString emptyStr;
k->setPath(emptyStr);
}
}
int nKernal = _meshData->getKernalCount();
for (int iKernal = 0; iKernal < nKernal; ++iKernal)
{
for(int iKernal = 0; iKernal < nKernal; ++iKernal) {
if(!_threadRuning)
return false;
MeshKernal* temp = _meshData->getKernalAt(iKernal);
if (temp->getPath() == path)
{ ///< MG same file update
if(temp->getPath() == path) { ///< MG same file update
_meshData->removeKernalAt(iKernal);
break;
}
}
k->setMeshData(dataset);
_meshData->appendMeshKernal(k);
return true;
@ -115,9 +107,10 @@ namespace MeshData
return nullptr;
QTextCodec* codec = QTextCodec::codecForName("GB18030");
QByteArray ba = codec->fromUnicode(_fileName);
_stlReader = vtkSmartPointer<vtkSTLReader>::New();
_stlReader->SetFileName(ba);
_stlReader->SetMerging(true);
_stlReader->SetFileName(_fileName.toLocal8Bit().constData());
// _stlReader->SetMerging(true);
_stlReader->Update();
return _stlReader->GetOutput();
}
@ -137,8 +130,7 @@ namespace MeshData
if(nblock <= 0)
return nullptr;
vtkAppendFilter* filter = vtkAppendFilter::New();
for (int i = 0; i < nblock; ++i)
{
for(int i = 0; i < nblock; ++i) {
vtkDataSet* dataset = vtkDataSet::SafeDownCast(mudataset->GetBlock(i));
filter->AddInputData(dataset);
}
@ -154,16 +146,11 @@ namespace MeshData
QString path = info.filePath();
QString suffix = info.suffix().toLower();
if (suffix == "vtk")
{
if(suffix == "vtk") {
return writeVTK();
}
else if (suffix == "stl")
{
} else if(suffix == "stl") {
return writeSTL();
}
else if (suffix == "dat")
{
} else if(suffix == "dat") {
return false;
}
return false;
@ -173,8 +160,7 @@ namespace MeshData
{
ModuleBase::ThreadTask::run();
bool result = false;
switch (_operation)
{
switch(_operation) {
case MESH_READ:
emit showInformation(tr("Import VTK Mesh File From \"%1\"").arg(_fileName));
result = read();
@ -194,26 +180,20 @@ namespace MeshData
QByteArray ba = codec->fromUnicode(_fileName);
vtkUnstructuredGrid* ungird = vtkUnstructuredGrid::New();
vtkSmartPointer<vtkAppendFilter> filter = vtkSmartPointer<vtkAppendFilter>::New();
if (_modelId > 0)
{
if(_modelId > 0) {
MeshKernal* kernal = _meshData->getKernalByID(_modelId);
if (kernal != nullptr)
{
if(kernal != nullptr) {
vtkDataSet* dataset = kernal->getMeshData();
if(dataset != nullptr)
filter->AddInputData(dataset);
}
}
else
{
} else {
const int n = _meshData->getKernalCount();
for (int i = 0; i < n; ++i)
{
for(int i = 0; i < n; ++i) {
if(!_threadRuning)
return false;
MeshKernal* kernal = _meshData->getKernalAt(i);
if (kernal != nullptr)
{
if(kernal != nullptr) {
vtkDataSet* dataset = kernal->getMeshData();
if(dataset != nullptr)
filter->AddInputData(dataset);
@ -221,9 +201,10 @@ namespace MeshData
}
}
filter->Update();
ungird->CopyStructure(filter->GetOutput());
vtkSmartPointer<vtkUnstructuredGridWriter> writer = vtkSmartPointer<vtkUnstructuredGridWriter>::New();
writer->SetInputData(ungird);
// ungird->CopyStructure(filter->GetOutput());
vtkSmartPointer<vtkUnstructuredGridWriter> writer =
vtkSmartPointer<vtkUnstructuredGridWriter>::New();
writer->SetInputData(filter->GetOutput());
writer->SetFileTypeToBinary();
writer->SetFileName(_fileName.toLocal8Bit().constData());
writer->Write();
@ -239,29 +220,23 @@ namespace MeshData
qDebug() << " VTKdataExchange::writeSTL start ";
QTextCodec* codec = QTextCodec::codecForName("GB18030");
QByteArray ba = codec->fromUnicode(_fileName);
vtkUnstructuredGrid *ungird = vtkUnstructuredGrid::New();
// vtkSmartPointer<vtkAppendFilter> filter = vtkSmartPointer<vtkAppendFilter>::New();
vtkSmartPointer<vtkGeometryFilter> cellToPointFilter = vtkSmartPointer<vtkGeometryFilter>::New();
if (_modelId > 0)
{
vtkSmartPointer<vtkGeometryFilter> cellToPointFilter =
vtkSmartPointer<vtkGeometryFilter>::New();
if(_modelId > 0) {
MeshKernal* kernal = _meshData->getKernalByID(_modelId);
if (kernal != nullptr)
{
if(kernal != nullptr) {
vtkDataSet* dataset = kernal->getMeshData();
if (dataset != nullptr)
if(dataset != nullptr) {
cellToPointFilter->AddInputData(dataset);
}
}
else
{
} else {
const int n = _meshData->getKernalCount();
for (int i = 0; i < n; ++i)
{
for(int i = 0; i < n; ++i) {
if(!_threadRuning)
return false;
MeshKernal* kernal = _meshData->getKernalAt(i);
if (kernal != nullptr)
{
if(kernal != nullptr) {
vtkDataSet* dataset = kernal->getMeshData();
if(dataset != nullptr)
cellToPointFilter->AddInputData(dataset);
@ -269,30 +244,27 @@ namespace MeshData
}
}
cellToPointFilter->Update();
// ungird->CopyStructure(filter->GetOutput());
// qDebug()<<"ungird , cell Count : "+QString::number(ungird->GetNumberOfCells());
vtkSmartPointer<vtkPolyData> inpolyData = vtkSmartPointer<vtkPolyData>::New();
inpolyData = cellToPointFilter->GetOutput();
if(nullptr == inpolyData) {
qDebug() << "inpolyData ,nullptr : ";
} else {
qDebug()<<"inpolyData , cell Count : "+QString::number(inpolyData->GetNumberOfCells());
qDebug() << "inpolyData , cell Count : "
+ QString::number(inpolyData->GetNumberOfCells());
}
vtkSmartPointer<vtkSTLWriter> writer = vtkSmartPointer<vtkSTLWriter>::New();
writer->SetInputConnection(cellToPointFilter->GetOutputPort());
// writer->SetInputData(ungird);
writer->SetFileTypeToBinary();
writer->SetFileName(_fileName.toLocal8Bit().constData());
writer->Write();
qDebug() << " VTKdataExchange::writeSTL finish !!!! " + ba;
QFile outfile(_fileName);
return outfile.exists(); // 判断文件是否存在
return true;
}
bool VTKdataExchange::writeTecplot()
{
return false;
}
}
} // namespace MeshData