|
@@ -1,491 +0,0 @@
|
|
|
-#include "handlepool.h"
|
|
|
-#include <iostream>
|
|
|
-#include <vtkTecplotReader.h>
|
|
|
-#include <vtkAppendFilter.h>
|
|
|
-#include <vtkMultiBlockDataSet.h>
|
|
|
-#include <vtkUnstructuredGrid.h>
|
|
|
-#include <vtkNew.h>
|
|
|
-#include <vtkSphereSource.h>
|
|
|
-#include <vtkPolyDataMapper.h>
|
|
|
-#include <vtkActor.h>
|
|
|
-
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief:the constructor
|
|
|
- * @param:
|
|
|
- * @ret:
|
|
|
- * @birth: creadted by czm in 20230406
|
|
|
- */
|
|
|
-handlePool::handlePool(QObject *parent) : QObject(parent)
|
|
|
-{
|
|
|
-}
|
|
|
-
|
|
|
-handlePool::handlePool(QTabWidget *w)
|
|
|
-{
|
|
|
- this->w=w;
|
|
|
- map_contourdisplay.clear();
|
|
|
- map_linedisplay.clear();
|
|
|
- qmapManager.clear();
|
|
|
- qmapRender.clear();
|
|
|
- qmapResultmanager.clear();
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief:the destructor
|
|
|
- * @param:
|
|
|
- * @ret:
|
|
|
- * @birth: creadted by czm in 20230406
|
|
|
- */
|
|
|
-handlePool::~handlePool()
|
|
|
-{
|
|
|
- qDeleteAll(qmapRender);
|
|
|
- qDeleteAll(qmapManager);
|
|
|
- qDeleteAll(map_contourdisplay);
|
|
|
- qDeleteAll(map_linedisplay);
|
|
|
- qDeleteAll(qmapResultmanager);
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: handle msg from recvstate(slot)(处理来自接收状态机的消息,槽函数)
|
|
|
- * @param:recv msg
|
|
|
- * @ret:void
|
|
|
- * @birth: creadted by czm in 20230406
|
|
|
- */
|
|
|
-void handlePool::getmsg_recvstateTohandlePool(std::string recvmsg)
|
|
|
-{
|
|
|
- std::cout<<"recvmsg"<<recvmsg<<std::endl;
|
|
|
- vtkJsonObject* json_object = new vtkJsonObject();
|
|
|
- QVTKRenderer* render_=NULL;
|
|
|
- json_object->FromJSON(recvmsg);
|
|
|
-
|
|
|
- operateRender(json_object,render_);//解析命令
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: Operate render according to commands(根据命令操作render)
|
|
|
- * @param: jsonObject->action render
|
|
|
- * @ret:void
|
|
|
- * @birth: creadted by czm in 20230406
|
|
|
- */
|
|
|
-void handlePool::operateRender(vtkJsonObject* object,QVTKRenderer* render_)
|
|
|
-{
|
|
|
- if(object->action == "init"){
|
|
|
- delete object;
|
|
|
- object = NULL;
|
|
|
- return;
|
|
|
- }else if(object->action == "loaddata"){
|
|
|
- judgeLoaddata(object,render_);
|
|
|
- return;
|
|
|
- }else if(object->action == "zoomout"){//缩小
|
|
|
- if(!qmapRender.contains(object->proId))return;
|
|
|
- render_ = qmapRender.value(object->proId);
|
|
|
- render_->camera_->ZoomOut();
|
|
|
- }else if(object->action == "zoomin"){
|
|
|
- if(!qmapRender.contains(object->proId))return;
|
|
|
- render_ = qmapRender.value(object->proId);
|
|
|
- render_->camera_->ZoomIn();
|
|
|
- }else if(object->action == "AlignToPlusAxisX"){//正x轴对齐
|
|
|
- if(!qmapRender.contains(object->proId))return;
|
|
|
- render_ = qmapRender.value(object->proId);
|
|
|
- render_->camera_->AlignToPlusAxisX();
|
|
|
- }else if(object->action == "AlignToPlusAxisY"){//正y轴对齐
|
|
|
- if(!qmapRender.contains(object->proId))return;
|
|
|
- render_ = qmapRender.value(object->proId);
|
|
|
- render_->camera_->AlignToPlusAxisY();
|
|
|
- }else if(object->action == "AlignToPlusAxisZ"){//正z轴对齐
|
|
|
- if(!qmapRender.contains(object->proId))return;
|
|
|
- render_ = qmapRender.value(object->proId);
|
|
|
- render_->camera_->AlignToPlusAxisZ();
|
|
|
- }else if(object->action == "AlignToMinusAxisX"){//负x轴对齐
|
|
|
- if(!qmapRender.contains(object->proId))return;
|
|
|
- render_ = qmapRender.value(object->proId);
|
|
|
- render_->camera_->AlignToMinusAxisX();
|
|
|
- }else if(object->action == "AlignToMinusAxisY"){//负y轴对齐
|
|
|
- if(!qmapRender.contains(object->proId))return;
|
|
|
- render_ = qmapRender.value(object->proId);
|
|
|
- render_->camera_->AlignToMinusAxisY();
|
|
|
- }else if(object->action == "AlignToMinusAxisZ"){//负z轴对齐
|
|
|
- if(!qmapRender.contains(object->proId))return;
|
|
|
- render_ = qmapRender.value(object->proId);
|
|
|
- render_->camera_->AlignToMinusAxisZ();
|
|
|
- }else if(object->action == "TransformToIsometric"){//等距视图
|
|
|
- if(!qmapRender.contains(object->proId))return;
|
|
|
- render_ = qmapRender.value(object->proId);
|
|
|
- render_->camera_->TransformToIsometric();
|
|
|
- }else if(object->action == "ResultImport"){//导入结果
|
|
|
- resultImport(object,render_);
|
|
|
- return;
|
|
|
- }else if(object->action == "ContourDisplay"){//显示云图
|
|
|
- if(!result_contourdisplay(object,render_)){
|
|
|
- cout<<"please import tecplot result first!"<<endl;
|
|
|
- }
|
|
|
- return;
|
|
|
- }else if(object->action == "LineDisplay"){//显示等值线图
|
|
|
- if(!result_linedisplay(object,render_)){
|
|
|
- cout<<"please import tecplot result first!"<<endl;
|
|
|
- }
|
|
|
- return;
|
|
|
- }
|
|
|
- send_picture(object,render_);//发送图片
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: deal with msg about loaddata
|
|
|
- * @param: vtkJsonObject QVTKRenderer
|
|
|
- * @ret: bool
|
|
|
- * @birth: created by czm in 20230425
|
|
|
- */
|
|
|
-void handlePool::judgeLoaddata(vtkJsonObject *object, QVTKRenderer *render_)
|
|
|
-{
|
|
|
- if(!qmapRender.contains(object->proId)){//判断有无窗口
|
|
|
- render_ = new QVTKRenderer();
|
|
|
- qmapRender.insert(object->proId,render_);
|
|
|
- render_->init();
|
|
|
- w->addTab(render_->GetWidget(),object->proId);
|
|
|
- }else{
|
|
|
- render_ = qmapRender.value(object->proId);
|
|
|
- auto flag = render_->widgetFlag;
|
|
|
- if(flag == QVTKRenderer::WidgetModel::NoModel){
|
|
|
- }else if(flag == QVTKRenderer::WidgetModel::UgridModel){//判断窗口当前模型
|
|
|
- if(qmapManager.value(object->proId)->filePath == object->filePath){
|
|
|
- send_picture(object,render_);
|
|
|
- return;
|
|
|
- }
|
|
|
- render_->HideAllActors();
|
|
|
- render_->RemoveAllActors();
|
|
|
- }else if(flag == QVTKRenderer::WidgetModel::ResultModel){
|
|
|
- render_->HideAllActors();
|
|
|
- render_->RemoveAllActors();
|
|
|
- }
|
|
|
- }
|
|
|
- //QString m_filePath = object->filePath;//测试路径
|
|
|
- QString m_filePath = "F:\\czm\\vtkfile\\tfg.ugrid";
|
|
|
- QFileInfo fileinfo_(m_filePath);
|
|
|
- if(!fileinfo_.isFile()){
|
|
|
- cout<<"file path is Empty!"<<endl;
|
|
|
- send_picture(object,render_);
|
|
|
- return;
|
|
|
- }
|
|
|
- MeshManager* meshmanager = NULL;
|
|
|
-
|
|
|
- meshmanager = new MeshManager();
|
|
|
-
|
|
|
- bool f = meshmanager->LoadData(m_filePath);
|
|
|
- if(f){
|
|
|
- if(render_){
|
|
|
- meshmanager->DisplayMesh(render_);
|
|
|
- render_->ZoomToExtents();
|
|
|
- }
|
|
|
- }
|
|
|
- qmapRender.value(object->proId)->widgetFlag = QVTKRenderer::WidgetModel::UgridModel;//设置widget中有模型
|
|
|
- if(!qmapManager.contains(object->proId)){//判断加载模型和当前模型是不是一样
|
|
|
- qmapManager.insert(object->proId,set_map_meshManager(object,meshmanager));
|
|
|
- }else{
|
|
|
- delete qmapManager.value(object->proId);//析构原来的
|
|
|
- qmapManager[object->proId] = (set_map_meshManager(object,meshmanager));
|
|
|
- }
|
|
|
- send_picture(object,render_);
|
|
|
-}
|
|
|
-
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: import result file
|
|
|
- * @param: vtkobject* and renderer
|
|
|
- * @ret: void
|
|
|
- * @birth: created by czm in 20230420
|
|
|
- */
|
|
|
-bool handlePool::resultImport(vtkJsonObject *object_, QVTKRenderer *renderer_)
|
|
|
-{
|
|
|
- QStringList fileName_list=object_->getFileName().split(",");
|
|
|
- if(fileName_list.isEmpty()){
|
|
|
- cout<< "No Tecplot file is ready to read!"<<endl;
|
|
|
- return false;
|
|
|
- }
|
|
|
- //判断有无窗口
|
|
|
- if(!qmapRender.contains(object_->proId)){
|
|
|
- renderer_ = new QVTKRenderer();
|
|
|
- qmapRender.insert(object_->proId,renderer_);
|
|
|
- renderer_->init();
|
|
|
- w->addTab(renderer_->GetWidget(),object_->proId);
|
|
|
- renderer_->widgetFlag = QVTKRenderer::WidgetModel::NoModel;
|
|
|
- }else{
|
|
|
- renderer_ = qmapRender[object_->proId];
|
|
|
- auto flag = renderer_->widgetFlag;
|
|
|
- if(flag==QVTKRenderer::WidgetModel::UgridModel){
|
|
|
- renderer_ = qmapRender.value(object_->proId);
|
|
|
- renderer_->HideAllActors();
|
|
|
- renderer_->RemoveAllActors();
|
|
|
- }else if(flag ==QVTKRenderer::WidgetModel::ResultModel){
|
|
|
- if(qmapResultmanager.value(object_->proId)->fileName == object_->getFileName()){//to do 详细比对文件名
|
|
|
- send_picture(object_,renderer_);
|
|
|
- return true;
|
|
|
- }
|
|
|
- //qmapResultmanager.value(object_->proId)->resultMeshManager_->HideAllActors();
|
|
|
-// renderer_->HideAllActors();
|
|
|
-// renderer_->RemoveAllActors();
|
|
|
- }
|
|
|
- }
|
|
|
- object_->filePath = "C:\\Users\\Administrator\\Desktop\\Postprocess_Binary";//测试路径
|
|
|
- QDir dir(object_->filePath);
|
|
|
- if(!dir.exists()){
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- ResultMeshManager* rsMeshManager = new ResultMeshManager();
|
|
|
- rsMeshManager->Clear();
|
|
|
- bool flag = true;
|
|
|
- for(int i =0;i<fileName_list.size();i++){
|
|
|
- bool f =rsMeshManager->LoadData(object_->filePath+"/"+fileName_list[i]);
|
|
|
- if(f){
|
|
|
- rsMeshManager->SetSaveIndex(i);
|
|
|
- if(renderer_){
|
|
|
- rsMeshManager->DisplayMesh(renderer_);
|
|
|
- }
|
|
|
- }else{
|
|
|
- flag = false;
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- if(flag)
|
|
|
- {
|
|
|
- rsMeshManager->HideAllActors();
|
|
|
- rsMeshManager->ShowAll();
|
|
|
- rsMeshManager->DisplayMeshByIndex(0);
|
|
|
- rsMeshManager->SetNameTypeMap();
|
|
|
- rsMeshManager->InitWidgetsParameter();
|
|
|
- renderer_->ZoomToExtents();
|
|
|
- }
|
|
|
-
|
|
|
-// ContourDisplayW *contourdw = new ContourDisplayW();//云图窗口参数初始化
|
|
|
-// rsMeshManager->SetCotourWidget(contourdw);
|
|
|
-// rsMeshManager->SetWidgetRange();
|
|
|
-// rsMeshManager->SetWidgetScalarName();
|
|
|
-
|
|
|
- LineDisplayW *linedw = new LineDisplayW();//等值线
|
|
|
- rsMeshManager->SetLineWidget(linedw);
|
|
|
-
|
|
|
- renderer_->widgetFlag = QVTKRenderer::WidgetModel::ResultModel;//设置当前窗口模型状态
|
|
|
- if(qmapResultmanager.contains(object_->proId)){//加载不同的结果文件
|
|
|
- delete qmapResultmanager.value(object_->proId);
|
|
|
- qmapResultmanager[object_->proId] = (set_map_resultManager(object_,rsMeshManager));
|
|
|
- }else{
|
|
|
- qmapResultmanager[object_->proId]=(set_map_resultManager(object_,rsMeshManager));
|
|
|
- }
|
|
|
- emit sendImg_handlePoolToSendstate(object_->ToJson("importResult_contour",buildResultImport_msg(rsMeshManager)));//发送结果数据
|
|
|
- emit sendImg_handlePoolToSendstate(object_->ToJson("importResult_line",buildResultImport_msg(rsMeshManager)));//发送结果数据
|
|
|
-
|
|
|
- send_picture(object_,renderer_);
|
|
|
- return true;
|
|
|
-}
|
|
|
-/*
|
|
|
- * @brief: analysis msg about contourdisplay
|
|
|
- * @param: object and render
|
|
|
- * @ret: bool
|
|
|
- * @birth: created by czm in 20230421
|
|
|
- */
|
|
|
-bool handlePool::result_contourdisplay(vtkJsonObject *object_,QVTKRenderer* render_)
|
|
|
-{
|
|
|
- ContourDisplay* condis = NULL;
|
|
|
-
|
|
|
- if(!qmapResultmanager.contains(object_->proId)) return false;
|
|
|
- render_ = qmapRender[object_->proId];
|
|
|
- if(map_contourdisplay.contains(object_->proId)){
|
|
|
- condis = map_contourdisplay.value(object_->proId);//to do
|
|
|
- }else{
|
|
|
- condis = new ContourDisplay(qmapResultmanager[object_->proId]->resultMeshManager_);
|
|
|
- map_contourdisplay.insert(object_->proId,condis);
|
|
|
- }
|
|
|
- condis->contourdisplay_execute(object_);
|
|
|
- send_picture(object_,render_);
|
|
|
-
|
|
|
- return true;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: analysis msg about linedisplay
|
|
|
- * @param: object
|
|
|
- * @ret: bool
|
|
|
- * @birth: created by czm in 20230424
|
|
|
- */
|
|
|
-bool handlePool::result_linedisplay(vtkJsonObject *object_,QVTKRenderer* render_)
|
|
|
-{
|
|
|
- LineDisplay* linedis = NULL;
|
|
|
- if(!qmapResultmanager.contains(object_->proId))return false;
|
|
|
- render_ = qmapRender[object_->proId];
|
|
|
- if(map_linedisplay.contains(object_->proId)){
|
|
|
- linedis = map_linedisplay.value(object_->proId);
|
|
|
- }else{
|
|
|
- linedis = new LineDisplay(qmapResultmanager[object_->proId]->resultMeshManager_);
|
|
|
- map_linedisplay.insert(object_->proId,linedis);
|
|
|
- }
|
|
|
- linedis->linedisplay_execute(object_);
|
|
|
- send_picture(object_,render_);
|
|
|
- return true;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: save the tecplot filename into QStringList
|
|
|
- * @param: filePath
|
|
|
- * @ret: QStringList
|
|
|
- * @birth: created by czm in 20230420
|
|
|
- */
|
|
|
-//QStringList handlePool::getFileNameList(QString filePath)
|
|
|
-//{
|
|
|
-// QStringList string_list;
|
|
|
-// QDir dir(filePath); //需不需要加"\\"?
|
|
|
-// if(!dir.exists()){
|
|
|
-// cout <<"filePath error!please check again!"<<endl;
|
|
|
-// return string_list;
|
|
|
-// }
|
|
|
-// dir.setFilter(QDir::Files);
|
|
|
-// QStringList list = dir.entryList(QDir::Files);
|
|
|
-// foreach (QFileInfo file, list) {
|
|
|
-// if(file.fileName().split(".").back() == "plt"){
|
|
|
-// string_list.append(file.fileName());
|
|
|
-// }
|
|
|
-// }
|
|
|
-// return string_list;
|
|
|
-//}
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: build result file mash which need to be sent to java
|
|
|
- * @param: resultmeshManager
|
|
|
- * @ret: msg(QString)
|
|
|
- * @birth: created by czm in 20230424
|
|
|
- */
|
|
|
-QMap<QString,string> handlePool::buildResultImport_msg(ResultMeshManager *cmanager)
|
|
|
-{
|
|
|
- QMap<QString,string> map_tmp;
|
|
|
- cmanager->SetNameTypeMap();
|
|
|
- map<string,int> map_ = cmanager->GetNameTypeMap();
|
|
|
- string msg;
|
|
|
- for(map<string,int>::iterator it=map_.begin();it!=map_.end();it++){
|
|
|
- msg+=removeSpaces(it->first);
|
|
|
- msg+="#";
|
|
|
- msg+=to_string(it->second);//0-point scalar 1-cell scalar
|
|
|
- msg+=",";
|
|
|
- }
|
|
|
- msg = msg.erase(msg.size()-1);
|
|
|
- map_tmp.insert("nameTypes",msg);
|
|
|
- msg.clear();
|
|
|
- for(int i=0;i<cmanager->GetMeshScalarNameVec().size();i++){
|
|
|
- msg += removeSpaces(cmanager->GetMeshScalarNameVec()[i]);
|
|
|
- msg += ",";
|
|
|
- }
|
|
|
- msg = msg.erase(msg.size()-1);
|
|
|
- map_tmp.insert("scalarNames",msg);
|
|
|
- msg.clear();
|
|
|
-
|
|
|
- msg = to_string(cmanager->getRange()[0]);
|
|
|
- map_tmp.insert("range0",msg);
|
|
|
- msg.clear();
|
|
|
- msg = to_string(cmanager->getRange()[1]);
|
|
|
- map_tmp.insert("range1",msg);
|
|
|
- msg.clear();
|
|
|
- msg = cmanager->GetMeshScalarNameVec()[0];
|
|
|
- map_tmp.insert("scalarName",removeSpaces(msg));
|
|
|
- return map_tmp;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: send picture
|
|
|
- * @param: vtkJsonObject QVTKRenderer
|
|
|
- * @ret: void
|
|
|
- * @birth: created by czm in 20230425
|
|
|
- */
|
|
|
-void handlePool::send_picture(vtkJsonObject *object, QVTKRenderer *render_)
|
|
|
-{
|
|
|
- render_->CaptureWindowImages();
|
|
|
- if(!render_->img.isEmpty()){
|
|
|
- std::string img_ = render_->img.toStdString();
|
|
|
- QMap<QString,string> map;
|
|
|
- map["img"] = img_;
|
|
|
- std::string json_ = object->ToJson("img",map);
|
|
|
- emit sendImg_handlePoolToSendstate(json_);//信号
|
|
|
- }
|
|
|
- delete object;
|
|
|
- object = NULL;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: remove string's spaces
|
|
|
- * @param: string
|
|
|
- * @ret: string
|
|
|
- * @birth: created by czm in 20230426
|
|
|
- */
|
|
|
-string handlePool::removeSpaces(string str)//删除字符串中的\u0000
|
|
|
-{
|
|
|
- QChar h0 = 0x00;
|
|
|
- QString str_;
|
|
|
- if(QString::fromStdString(str).contains(h0)){
|
|
|
- str_=QString::fromStdString(str).replace(h0,"");
|
|
|
- }
|
|
|
- return str_.toStdString();
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: get map which save qvtkrender
|
|
|
- * @param: void
|
|
|
- * @ret: QMap<QString, QVTKRenderer *>
|
|
|
- * @birth: created by czm in 20230420
|
|
|
- */
|
|
|
-QMap<QString, QVTKRenderer *> handlePool::getMapRender()
|
|
|
-{
|
|
|
- return this->qmapRender;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: get map which save ResultMeshManager
|
|
|
- * @param: void
|
|
|
- * @ret: QMap<QString, ResultMeshManager *>
|
|
|
- * @birth: created by czm in 20230420
|
|
|
- */
|
|
|
-QMap<QString, pid_resultManager *> handlePool::getMapResultManager()
|
|
|
-{
|
|
|
- return this->qmapResultmanager;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: create a pid_meshManager
|
|
|
- * @param: vtkJsonObject MeshManager
|
|
|
- * @ret: map_meshManager
|
|
|
- * @birth: created by czm in 20230425
|
|
|
- */
|
|
|
-pid_meshManager *handlePool::set_map_meshManager(vtkJsonObject *object, MeshManager *mmanager_)
|
|
|
-{
|
|
|
- pid_meshManager* meshManager_p = new pid_meshManager();
|
|
|
- meshManager_p->meshManager_ = mmanager_;
|
|
|
- meshManager_p->fileName = object->getFileName();
|
|
|
- meshManager_p->filePath = object->filePath;
|
|
|
- return meshManager_p;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: create a pid_resultManager
|
|
|
- * @param: vtkJsonObject ResultMeshManager
|
|
|
- * @ret: pid_resultManager
|
|
|
- * @birth: created by czm in 20230425
|
|
|
- */
|
|
|
-pid_resultManager *handlePool::set_map_resultManager(vtkJsonObject *object, ResultMeshManager *rmanager_)
|
|
|
-{
|
|
|
- pid_resultManager *resultManager_p = new pid_resultManager();
|
|
|
- resultManager_p->resultMeshManager_ = rmanager_;
|
|
|
- resultManager_p->fileName = object->getFileName();
|
|
|
- resultManager_p->filePath = object->filePath;
|
|
|
- return resultManager_p;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * @brief: get map which save meshmanager
|
|
|
- * @param: void
|
|
|
- * @ret: QMap<QString, MeshManager *>
|
|
|
- * @birth: created by czm in 20230420
|
|
|
- */
|
|
|
-QMap<QString, pid_meshManager *> handlePool::getMapManager()
|
|
|
-{
|
|
|
- return this->qmapManager;
|
|
|
-}
|
|
|
-
|