修正了模型保存时,可能会替换内置模型
parent
49781f86a8
commit
8f64808f65
|
|
@ -22,68 +22,60 @@
|
||||||
#include <vtkDataSetSurfaceFilter.h>
|
#include <vtkDataSetSurfaceFilter.h>
|
||||||
#include "MainWindow/MainWindow.h"
|
#include "MainWindow/MainWindow.h"
|
||||||
#include "MainWindow/SubWindowManager.h"
|
#include "MainWindow/SubWindowManager.h"
|
||||||
|
#include "Settings/BusAPI.h"
|
||||||
|
|
||||||
|
namespace MeshData {
|
||||||
namespace MeshData
|
VTKdataExchange::VTKdataExchange(const QString& fileName, MeshOperation operation,
|
||||||
{
|
GUI::MainWindow* mw, int modelId)
|
||||||
VTKdataExchange::VTKdataExchange(const QString &fileName, MeshOperation operation, GUI::MainWindow *mw, int modelId) : MeshThreadBase(fileName, operation, mw),
|
: MeshThreadBase(fileName, operation, mw)
|
||||||
_fileName(fileName),
|
, _fileName(fileName)
|
||||||
_meshData(MeshData::getInstance()),
|
, _meshData(MeshData::getInstance())
|
||||||
_operation(operation),
|
, _operation(operation)
|
||||||
_modelId(modelId)
|
, _modelId(modelId)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VTKdataExchange::read()
|
bool VTKdataExchange::read()
|
||||||
{
|
{
|
||||||
QFileInfo info(_fileName);
|
QFileInfo info(_fileName);
|
||||||
if (!info.exists())
|
if(!info.exists())
|
||||||
return false;
|
return false;
|
||||||
QString name = info.fileName();
|
QString name = info.fileName();
|
||||||
QString path = info.filePath();
|
QString path = info.filePath();
|
||||||
QString suffix = info.suffix().toLower();
|
QString suffix = info.suffix().toLower();
|
||||||
vtkDataSet *dataset = nullptr;
|
vtkDataSet* dataset = nullptr;
|
||||||
|
|
||||||
if (suffix == "vtk")
|
if(suffix == "vtk") {
|
||||||
{
|
|
||||||
dataset = readVTK();
|
dataset = readVTK();
|
||||||
}
|
} else if(suffix == "stl") {
|
||||||
else if (suffix == "stl")
|
|
||||||
{
|
|
||||||
dataset = readSTL();
|
dataset = readSTL();
|
||||||
}
|
} else if(suffix == "dat") {
|
||||||
else if (suffix == "dat")
|
|
||||||
{
|
|
||||||
dataset = readTecplot();
|
dataset = readTecplot();
|
||||||
}
|
}
|
||||||
if (dataset != nullptr)
|
if(dataset != nullptr) {
|
||||||
{
|
|
||||||
// 网格面片三角化
|
// 网格面片三角化
|
||||||
emit _mainwindow->printMessage(Common::Message::Normal,u8"surface triangulation .....");
|
// emit _mainwindow->printMessage(Common::Message::Normal,
|
||||||
|
// u8"surface triangulation .....");
|
||||||
// vtkSmartPointer<vtkDataSetSurfaceFilter> surfaceFilter = vtkSmartPointer<vtkDataSetSurfaceFilter>::New();
|
MeshKernal* k = new MeshKernal;
|
||||||
// surfaceFilter->SetInputData(dataset);
|
|
||||||
// surfaceFilter->Update();
|
|
||||||
// dataset = surfaceFilter->GetOutput();
|
|
||||||
|
|
||||||
|
|
||||||
MeshKernal *k = new MeshKernal;
|
|
||||||
k->setName(name);
|
k->setName(name);
|
||||||
k->setPath(path);
|
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();
|
int nKernal = _meshData->getKernalCount();
|
||||||
for (int iKernal = 0; iKernal < nKernal; ++iKernal)
|
for(int iKernal = 0; iKernal < nKernal; ++iKernal) {
|
||||||
{
|
if(!_threadRuning)
|
||||||
if (!_threadRuning)
|
|
||||||
return false;
|
return false;
|
||||||
MeshKernal *temp = _meshData->getKernalAt(iKernal);
|
MeshKernal* temp = _meshData->getKernalAt(iKernal);
|
||||||
if (temp->getPath() == path)
|
if(temp->getPath() == path) { ///< MG same file update
|
||||||
{ ///< MG same file update
|
|
||||||
_meshData->removeKernalAt(iKernal);
|
_meshData->removeKernalAt(iKernal);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
k->setMeshData(dataset);
|
k->setMeshData(dataset);
|
||||||
_meshData->appendMeshKernal(k);
|
_meshData->appendMeshKernal(k);
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -91,13 +83,13 @@ namespace MeshData
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
vtkDataSet *VTKdataExchange::readVTK()
|
vtkDataSet* VTKdataExchange::readVTK()
|
||||||
{
|
{
|
||||||
if (!_threadRuning)
|
if(!_threadRuning)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
QTextCodec *codec = QTextCodec::codecForName("GB18030");
|
QTextCodec* codec = QTextCodec::codecForName("GB18030");
|
||||||
QByteArray ba = codec->fromUnicode(_fileName);
|
QByteArray ba = codec->fromUnicode(_fileName);
|
||||||
_vtkReader = vtkSmartPointer<vtkDataSetReader>::New();
|
_vtkReader = vtkSmartPointer<vtkDataSetReader>::New();
|
||||||
_vtkReader->SetFileName(ba);
|
_vtkReader->SetFileName(ba);
|
||||||
_vtkReader->SetReadAllColorScalars(false);
|
_vtkReader->SetReadAllColorScalars(false);
|
||||||
_vtkReader->SetReadAllScalars(false);
|
_vtkReader->SetReadAllScalars(false);
|
||||||
|
|
@ -109,37 +101,37 @@ namespace MeshData
|
||||||
return dataset;
|
return dataset;
|
||||||
}
|
}
|
||||||
|
|
||||||
vtkDataSet *VTKdataExchange::readSTL()
|
vtkDataSet* VTKdataExchange::readSTL()
|
||||||
{
|
{
|
||||||
if (!_threadRuning)
|
if(!_threadRuning)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
QTextCodec *codec = QTextCodec::codecForName("GB18030");
|
QTextCodec* codec = QTextCodec::codecForName("GB18030");
|
||||||
QByteArray ba = codec->fromUnicode(_fileName);
|
QByteArray ba = codec->fromUnicode(_fileName);
|
||||||
_stlReader = vtkSmartPointer<vtkSTLReader>::New();
|
|
||||||
_stlReader->SetFileName(ba);
|
_stlReader = vtkSmartPointer<vtkSTLReader>::New();
|
||||||
_stlReader->SetMerging(true);
|
_stlReader->SetFileName(_fileName.toLocal8Bit().constData());
|
||||||
|
// _stlReader->SetMerging(true);
|
||||||
_stlReader->Update();
|
_stlReader->Update();
|
||||||
return _stlReader->GetOutput();
|
return _stlReader->GetOutput();
|
||||||
}
|
}
|
||||||
|
|
||||||
vtkDataSet *VTKdataExchange::readTecplot()
|
vtkDataSet* VTKdataExchange::readTecplot()
|
||||||
{
|
{
|
||||||
if (!_threadRuning)
|
if(!_threadRuning)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
QTextCodec *codec = QTextCodec::codecForName("GB18030");
|
QTextCodec* codec = QTextCodec::codecForName("GB18030");
|
||||||
QByteArray ba = codec->fromUnicode(_fileName);
|
QByteArray ba = codec->fromUnicode(_fileName);
|
||||||
_tecplotReader = vtkSmartPointer<vtkTecplotReader>::New();
|
_tecplotReader = vtkSmartPointer<vtkTecplotReader>::New();
|
||||||
_tecplotReader->SetFileName(ba);
|
_tecplotReader->SetFileName(ba);
|
||||||
_tecplotReader->Update();
|
_tecplotReader->Update();
|
||||||
vtkMultiBlockDataSet *mudataset = _tecplotReader->GetOutput();
|
vtkMultiBlockDataSet* mudataset = _tecplotReader->GetOutput();
|
||||||
// blockDataSet = mudataset;//add for multi zone test
|
// blockDataSet = mudataset;//add for multi zone test
|
||||||
const int nblock = mudataset->GetNumberOfBlocks();
|
const int nblock = mudataset->GetNumberOfBlocks();
|
||||||
if (nblock <= 0)
|
if(nblock <= 0)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
vtkAppendFilter *filter = vtkAppendFilter::New();
|
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));
|
||||||
vtkDataSet *dataset = vtkDataSet::SafeDownCast(mudataset->GetBlock(i));
|
|
||||||
filter->AddInputData(dataset);
|
filter->AddInputData(dataset);
|
||||||
}
|
}
|
||||||
filter->Update(); // put multi zone together
|
filter->Update(); // put multi zone together
|
||||||
|
|
@ -150,20 +142,15 @@ namespace MeshData
|
||||||
bool VTKdataExchange::write()
|
bool VTKdataExchange::write()
|
||||||
{
|
{
|
||||||
QFileInfo info(_fileName);
|
QFileInfo info(_fileName);
|
||||||
QString name = info.fileName();
|
QString name = info.fileName();
|
||||||
QString path = info.filePath();
|
QString path = info.filePath();
|
||||||
QString suffix = info.suffix().toLower();
|
QString suffix = info.suffix().toLower();
|
||||||
|
|
||||||
if (suffix == "vtk")
|
if(suffix == "vtk") {
|
||||||
{
|
|
||||||
return writeVTK();
|
return writeVTK();
|
||||||
}
|
} else if(suffix == "stl") {
|
||||||
else if (suffix == "stl")
|
|
||||||
{
|
|
||||||
return writeSTL();
|
return writeSTL();
|
||||||
}
|
} else if(suffix == "dat") {
|
||||||
else if (suffix == "dat")
|
|
||||||
{
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -173,57 +160,51 @@ namespace MeshData
|
||||||
{
|
{
|
||||||
ModuleBase::ThreadTask::run();
|
ModuleBase::ThreadTask::run();
|
||||||
bool result = false;
|
bool result = false;
|
||||||
switch (_operation)
|
switch(_operation) {
|
||||||
{
|
case MESH_READ:
|
||||||
case MESH_READ:
|
emit showInformation(tr("Import VTK Mesh File From \"%1\"").arg(_fileName));
|
||||||
emit showInformation(tr("Import VTK Mesh File From \"%1\"").arg(_fileName));
|
result = read();
|
||||||
result = read();
|
setReadResult(result);
|
||||||
setReadResult(result);
|
break;
|
||||||
break;
|
case MESH_WRITE:
|
||||||
case MESH_WRITE:
|
emit showInformation(tr("Export VTK Mesh File To \"%1\"").arg(_fileName));
|
||||||
emit showInformation(tr("Export VTK Mesh File To \"%1\"").arg(_fileName));
|
result = write();
|
||||||
result = write();
|
setWriteResult(result);
|
||||||
setWriteResult(result);
|
break;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
defaultMeshFinished();
|
defaultMeshFinished();
|
||||||
}
|
}
|
||||||
bool VTKdataExchange::writeVTK()
|
bool VTKdataExchange::writeVTK()
|
||||||
{
|
{
|
||||||
QTextCodec *codec = QTextCodec::codecForName("GB18030");
|
QTextCodec* codec = QTextCodec::codecForName("GB18030");
|
||||||
QByteArray ba = codec->fromUnicode(_fileName);
|
QByteArray ba = codec->fromUnicode(_fileName);
|
||||||
vtkUnstructuredGrid *ungird = vtkUnstructuredGrid::New();
|
vtkUnstructuredGrid* ungird = vtkUnstructuredGrid::New();
|
||||||
vtkSmartPointer<vtkAppendFilter> filter = vtkSmartPointer<vtkAppendFilter>::New();
|
vtkSmartPointer<vtkAppendFilter> filter = vtkSmartPointer<vtkAppendFilter>::New();
|
||||||
if (_modelId > 0)
|
if(_modelId > 0) {
|
||||||
{
|
MeshKernal* kernal = _meshData->getKernalByID(_modelId);
|
||||||
MeshKernal *kernal = _meshData->getKernalByID(_modelId);
|
if(kernal != nullptr) {
|
||||||
if (kernal != nullptr)
|
vtkDataSet* dataset = kernal->getMeshData();
|
||||||
{
|
if(dataset != nullptr)
|
||||||
vtkDataSet *dataset = kernal->getMeshData();
|
|
||||||
if (dataset != nullptr)
|
|
||||||
filter->AddInputData(dataset);
|
filter->AddInputData(dataset);
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
const int n = _meshData->getKernalCount();
|
const int n = _meshData->getKernalCount();
|
||||||
for (int i = 0; i < n; ++i)
|
for(int i = 0; i < n; ++i) {
|
||||||
{
|
if(!_threadRuning)
|
||||||
if (!_threadRuning)
|
|
||||||
return false;
|
return false;
|
||||||
MeshKernal *kernal = _meshData->getKernalAt(i);
|
MeshKernal* kernal = _meshData->getKernalAt(i);
|
||||||
if (kernal != nullptr)
|
if(kernal != nullptr) {
|
||||||
{
|
vtkDataSet* dataset = kernal->getMeshData();
|
||||||
vtkDataSet *dataset = kernal->getMeshData();
|
if(dataset != nullptr)
|
||||||
if (dataset != nullptr)
|
|
||||||
filter->AddInputData(dataset);
|
filter->AddInputData(dataset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
filter->Update();
|
filter->Update();
|
||||||
ungird->CopyStructure(filter->GetOutput());
|
// ungird->CopyStructure(filter->GetOutput());
|
||||||
vtkSmartPointer<vtkUnstructuredGridWriter> writer = vtkSmartPointer<vtkUnstructuredGridWriter>::New();
|
vtkSmartPointer<vtkUnstructuredGridWriter> writer =
|
||||||
writer->SetInputData(ungird);
|
vtkSmartPointer<vtkUnstructuredGridWriter>::New();
|
||||||
|
writer->SetInputData(filter->GetOutput());
|
||||||
writer->SetFileTypeToBinary();
|
writer->SetFileTypeToBinary();
|
||||||
writer->SetFileName(_fileName.toLocal8Bit().constData());
|
writer->SetFileName(_fileName.toLocal8Bit().constData());
|
||||||
writer->Write();
|
writer->Write();
|
||||||
|
|
@ -232,67 +213,58 @@ namespace MeshData
|
||||||
bool VTKdataExchange::writeSTL()
|
bool VTKdataExchange::writeSTL()
|
||||||
{
|
{
|
||||||
QFile infile(_fileName);
|
QFile infile(_fileName);
|
||||||
if(infile.exists()){
|
if(infile.exists()) {
|
||||||
infile.remove();
|
infile.remove();
|
||||||
}
|
}
|
||||||
|
|
||||||
qDebug()<<" VTKdataExchange::writeSTL start ";
|
qDebug() << " VTKdataExchange::writeSTL start ";
|
||||||
QTextCodec *codec = QTextCodec::codecForName("GB18030");
|
QTextCodec* codec = QTextCodec::codecForName("GB18030");
|
||||||
QByteArray ba = codec->fromUnicode(_fileName);
|
QByteArray ba = codec->fromUnicode(_fileName);
|
||||||
vtkUnstructuredGrid *ungird = vtkUnstructuredGrid::New();
|
vtkSmartPointer<vtkGeometryFilter> cellToPointFilter =
|
||||||
// vtkSmartPointer<vtkAppendFilter> filter = vtkSmartPointer<vtkAppendFilter>::New();
|
vtkSmartPointer<vtkGeometryFilter>::New();
|
||||||
vtkSmartPointer<vtkGeometryFilter> cellToPointFilter = vtkSmartPointer<vtkGeometryFilter>::New();
|
if(_modelId > 0) {
|
||||||
if (_modelId > 0)
|
MeshKernal* kernal = _meshData->getKernalByID(_modelId);
|
||||||
{
|
if(kernal != nullptr) {
|
||||||
MeshKernal *kernal = _meshData->getKernalByID(_modelId);
|
vtkDataSet* dataset = kernal->getMeshData();
|
||||||
if (kernal != nullptr)
|
if(dataset != nullptr) {
|
||||||
{
|
|
||||||
vtkDataSet *dataset = kernal->getMeshData();
|
|
||||||
if (dataset != nullptr)
|
|
||||||
cellToPointFilter->AddInputData(dataset);
|
cellToPointFilter->AddInputData(dataset);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
const int n = _meshData->getKernalCount();
|
const int n = _meshData->getKernalCount();
|
||||||
for (int i = 0; i < n; ++i)
|
for(int i = 0; i < n; ++i) {
|
||||||
{
|
if(!_threadRuning)
|
||||||
if (!_threadRuning)
|
|
||||||
return false;
|
return false;
|
||||||
MeshKernal *kernal = _meshData->getKernalAt(i);
|
MeshKernal* kernal = _meshData->getKernalAt(i);
|
||||||
if (kernal != nullptr)
|
if(kernal != nullptr) {
|
||||||
{
|
vtkDataSet* dataset = kernal->getMeshData();
|
||||||
vtkDataSet *dataset = kernal->getMeshData();
|
if(dataset != nullptr)
|
||||||
if (dataset != nullptr)
|
|
||||||
cellToPointFilter->AddInputData(dataset);
|
cellToPointFilter->AddInputData(dataset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cellToPointFilter->Update();
|
cellToPointFilter->Update();
|
||||||
// ungird->CopyStructure(filter->GetOutput());
|
vtkSmartPointer<vtkPolyData> inpolyData = vtkSmartPointer<vtkPolyData>::New();
|
||||||
|
inpolyData = cellToPointFilter->GetOutput();
|
||||||
// qDebug()<<"ungird , cell Count : "+QString::number(ungird->GetNumberOfCells());
|
if(nullptr == inpolyData) {
|
||||||
vtkSmartPointer<vtkPolyData> inpolyData=vtkSmartPointer<vtkPolyData>::New();
|
qDebug() << "inpolyData ,nullptr : ";
|
||||||
inpolyData = cellToPointFilter->GetOutput();
|
} else {
|
||||||
if(nullptr==inpolyData){
|
qDebug() << "inpolyData , cell Count : "
|
||||||
qDebug()<<"inpolyData ,nullptr : ";
|
+ QString::number(inpolyData->GetNumberOfCells());
|
||||||
}else{
|
|
||||||
qDebug()<<"inpolyData , cell Count : "+QString::number(inpolyData->GetNumberOfCells());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vtkSmartPointer<vtkSTLWriter> writer = vtkSmartPointer<vtkSTLWriter>::New();
|
vtkSmartPointer<vtkSTLWriter> writer = vtkSmartPointer<vtkSTLWriter>::New();
|
||||||
writer->SetInputConnection(cellToPointFilter->GetOutputPort());
|
writer->SetInputConnection(cellToPointFilter->GetOutputPort());
|
||||||
// writer->SetInputData(ungird);
|
|
||||||
writer->SetFileTypeToBinary();
|
writer->SetFileTypeToBinary();
|
||||||
writer->SetFileName(_fileName.toLocal8Bit().constData());
|
writer->SetFileName(_fileName.toLocal8Bit().constData());
|
||||||
writer->Write();
|
writer->Write();
|
||||||
qDebug()<<" VTKdataExchange::writeSTL finish !!!! "+ba;
|
qDebug() << " VTKdataExchange::writeSTL finish !!!! " + ba;
|
||||||
QFile outfile(_fileName);
|
QFile outfile(_fileName);
|
||||||
return outfile.exists();// 判断文件是否存在
|
return outfile.exists(); // 判断文件是否存在
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
bool VTKdataExchange::writeTecplot()
|
bool VTKdataExchange::writeTecplot()
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
} // namespace MeshData
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue