Bladeren bron

0422 云图

caizm 2 jaren geleden
bovenliggende
commit
a6b9112f3e

+ 42 - 9
CAE_Solution/src/VTK/Manager/ResultMeshManager.cpp

@@ -27,7 +27,7 @@
 #include "vtkPoints.h"
 
 
-ResultMeshManager* ResultMeshManager::m_pInstance = 0;
+//ResultMeshManager* ResultMeshManager::m_pInstance = 0;
 
 /**
   * @brief singleton methed, get class instance.
@@ -37,15 +37,15 @@ ResultMeshManager* ResultMeshManager::m_pInstance = 0;
   * @author zhaoyu
   * @date 20221202
   */
-ResultMeshManager* ResultMeshManager::getInstance()
-{
-    if (m_pInstance == 0)
-    {
-        m_pInstance = new ResultMeshManager;
-    }
-    return m_pInstance;
+//ResultMeshManager* ResultMeshManager::getInstance()
+//{
+//    if (m_pInstance == 0)
+//    {
+//        m_pInstance = new ResultMeshManager;
+//    }
+//    return m_pInstance;
 
-}
+//}
 
 /**
   * @brief the constructor.
@@ -2453,6 +2453,39 @@ void ResultMeshManager::SetXyplot2dSlicePosition(vector<double> p)
     }
     render_->Update();
 }
+
+/*
+ * @brief: get private scalar name
+ * @param: void
+ * @ret: scalarName
+ * @birth: created by czm in 20230421
+ */
+string ResultMeshManager::getScalarName()
+{
+    return this->scalarName_;
+}
+
+/*
+ * @brief: get private range
+ * @param: void
+ * @ret: range
+ * @birth: created by czm in 20230421
+ */
+double *ResultMeshManager::getRange()
+{
+    return this->range_;
+}
+
+/*
+ * @brief: get private meshobj_
+ * @param: void
+ * @ret: meshobj_
+ * @birth: created by czm in 20230421
+ */
+Mesh *ResultMeshManager::getMeshObj_()
+{
+    return this->meshObj_;
+}
 /**
   * @brief get xyplot2d unslice data
   *

+ 10 - 6
CAE_Solution/src/VTK/Manager/ResultMeshManager.h

@@ -4,13 +4,13 @@
 #include <vector>
 #include <map>
 #include <QStringList>
-#include "../display/contourdisplay.h"
-#include "../display/linedisplay.h"
+//#include "../display/contourdisplay.h"
+//#include "../display/linedisplay.h"
 //#include "vectorwidget.h"
 #include "../QVTKRenderer/qvtkrenderer.h"
 #include "../visualization_VTK/vtkVISAddUnGridDataSource.h"
 #include "../visualization_VTK/vtkVISUnSlice.h"
-#include "../display/solidsurfacewidget.h"
+//#include "../display/solidsurfacewidget.h"
 #include "../visualization_VTK/vtkVISUnStreamTrace.h"
 
 
@@ -35,11 +35,11 @@ class XYPlot_2D;
 
 class ResultMeshManager
 {
-private:
+public:
     ResultMeshManager();
-    static ResultMeshManager *m_pInstance;
+    //static ResultMeshManager *m_pInstance;
 public:
-    static ResultMeshManager* getInstance();
+    //static ResultMeshManager* getInstance();
     ~ResultMeshManager();
     bool LoadData(QString name);
 
@@ -134,6 +134,10 @@ public:
     void SetXyplot2dSlicePosition(vector<double> p);
     vector<vector<double>> GetXyplot2dUnsliceData();
     vector<string> GetXyplot2dAxisName();
+
+    string getScalarName();
+    double* getRange();
+    Mesh* getMeshObj_();
 private:
     int m_currId;
     Mesh *meshObj_;  //mesh object.

+ 21 - 0
CAE_Solution/src/VTK/QVTKRenderer/qvtkrenderer.cpp

@@ -35,6 +35,15 @@ QVTKRenderer::~QVTKRenderer()
         delete this->qvtkWidget;
         this->qvtkWidget = NULL;
     }
+
+    if(axes){
+        axes->Delete();
+        axes = NULL;
+    }
+    if(omWidget){
+        omWidget->Delete();
+        omWidget = NULL;
+    }
 }
 
 /*
@@ -57,6 +66,18 @@ void QVTKRenderer::init()
     surfaceVisible_ = true;
     curRenderMode_ = 1;
     curSelMode_ = EntitySelection;
+
+
+    axes = vtkAxesActor::New();
+    axes->SetPosition(0, 0, 0);
+    axes->SetTotalLength(2, 2, 2);
+    axes->SetShaftType(0);
+    axes->SetCylinderRadius(0.02);
+    omWidget = vtkOrientationMarkerWidget::New();
+    omWidget->SetOrientationMarker(axes);
+    omWidget->SetInteractor(renderWin->GetInteractor());
+    omWidget->SetEnabled(1);
+    omWidget->InteractiveOn();
 }
 
 /*

+ 6 - 0
CAE_Solution/src/VTK/QVTKRenderer/qvtkrenderer.h

@@ -23,6 +23,8 @@
 #include <QPixmap>
 #include <QByteArray>
 #include <QBuffer>
+#include <vtkAxesActor.h>
+#include <vtkOrientationMarkerWidget.h>
 
 
 class QVTKRenderer
@@ -88,6 +90,10 @@ public:
     bool surfaceVisible_;
     SelectionMode curSelMode_;
 
+private:
+    vtkAxesActor* axes;
+    vtkOrientationMarkerWidget* omWidget;
+
 //signals:
 //    void sendImgFile(QString img);
 

+ 90 - 16
CAE_Solution/src/VTK/display/contourdisplay.cpp

@@ -1,34 +1,52 @@
 #include "contourdisplay.h"
 #include <QDebug>
 
-
-ContourDisplay::ContourDisplay()
+/*
+ * @brief: the constructor
+ * @param:
+ * @ret:
+ * @birth: created by czm in 20230420
+ */
+ContourDisplay::ContourDisplay(ResultMeshManager* rs)
 {
     //ResultMeshManager::getInstance()->SetCotourWidget(static_cast<ContourDisplayW*>(m_pWidget));
     //ResultMeshManager::getInstance()->SetWidgetRange();       //设置从页面获取的范围 range maxrange minrange
     //ResultMeshManager::getInstance()->SetWidgetScalarName();   //获取页面上的combox的scalarname
-}
 
-ContourDisplay::~ContourDisplay()
-{
-}
+    this->Cmanager = rs;
+    if(this->Cmanager->getMeshObj_()!=NULL){
+        //this->Cmanager->SetNameTypeMap();//从mesh中获得(已调用)
+        nametype_map=this->Cmanager->GetNameTypeMap();//获取下面的判断ldt_name和ldt_type的容器
+        //ldt_name->setText(cbo_scalar->currentText()); //通过cbo_scalar的消息设置ldt里面的内容
+        //迭代nametype_map 根据cbo_scalar的内容找出int值,0-设置为"point scalar"  1-设置为"cell scalar"
 
-void ContourDisplay::updateFromInters()
-{
-    //update setting data from widgets.
-}
-
-void ContourDisplay::updateToInters()
-{
+        scalarname_vector = this->Cmanager->GetMeshScalarNameVec();//容器 cbo_scalar combox下拉框的选项
+        //range 需要设置窗口的minrange 和 maxrange 初始值为 0 0  range有值
 
+        //this->Cmanager->scalarName_  把cbo_scalar的值设置为scalarName_
+    }
 }
 
-void ContourDisplay::updateFromParams()
+/*
+ * @brief: the destructor
+ * @param:
+ * @ret:
+ * @birth: created by czm in 20230420
+ */
+ContourDisplay::~ContourDisplay()
 {
-    //update setting data from params.
+    this->Cmanager = NULL;
+    nametype_map.clear();
+    scalarname_vector.clear();
 }
 
-void ContourDisplay::contourdisplay_execute()
+/*
+ * @brief: get param for recvmsg and display contour
+ * @param:void
+ * @ret:void
+ * @birth: created by czm in 20230420
+ */
+void ContourDisplay::contourdisplay_execute(QString str)
 {
 
     //apply setting data.
@@ -38,5 +56,61 @@ void ContourDisplay::contourdisplay_execute()
 
     //ResultMeshManager::getInstance()->SetDisplayType(0);
     //ResultMeshManager::getInstance()->DisplayMeshByIndex(ResultMeshManager::getInstance()->GetCurrIndex());
+#if 0
+    Cmanager->ModifyScalarDisplay(str);//传入参数combox的current text(scalar name)
+    Cmanager->SetLevel(str);//传level的值,初始默认值为10
+    double* range;
+    Cmanager->SetRange(range);//传入云图的maxrange和minrange
+    Cmanager->SetDisplayType(0);//0 is contour; 2 is line; 3 is vector
+    Cmanager->DisplayMeshByIndex(Cmanager->GetCurrIndex());
+#endif
+}
+
+/*
+ * @brief: build contourMsg which need to be sent to java
+ * @param: void
+ * @ret: msgs
+ * @birth: created by czm in 20230421
+ */
+QString ContourDisplay::buildContourMsg()
+{
+    QString msg;
+    msg+="NameTypeMap(";
+    for(map<string,int>::iterator it=nametype_map.begin();it!=nametype_map.end();it++){
+        msg+=QString::fromStdString(it->first);
+        msg+=" ";
+        msg+=QString::number(it->second);
+        msg+=",";
+    }
+    msg.replace(msg.size()-1,1,")");
+    msg+="ScalarName_vector(";
+    for(int i=0;i<scalarname_vector.size();i++){
+        if(i == scalarname_vector.size()-1){
+            msg+=QString::fromStdString(scalarname_vector[i]);
+            msg+=")";
+        }
+        msg += QString::fromStdString(scalarname_vector[i]);
+        msg+=",";
+    }
+    msg += "MinRange(";
+    msg += QString::number(this->Cmanager->getRange()[0]);
+    msg += ")MaxRange(";
+    msg += QString::number(this->Cmanager->getRange()[1]);
+    msg += ")scalarName(";
+    msg +=  QString::fromStdString(this->Cmanager->getScalarName());
+    msg += ")";
+
+    return msg;
+}
+
+/*
+ * @brief: get its resultmeshManager
+ * @param: void
+ * @ret: ResultMeshManager*
+ * @birth: created by czm in 20230420
+ */
+ResultMeshManager* ContourDisplay::getResultMeshManager()
+{
+    return this->Cmanager;
 }
 

+ 10 - 6
CAE_Solution/src/VTK/display/contourdisplay.h

@@ -2,23 +2,27 @@
 #define CONTOURDISPLAY_H
 
 #include <QObject>
+#include <map>
+#include <string>
 #include "../Manager/ResultMeshManager.h"
 
 
 class ContourDisplay
 {
 public:
-    ContourDisplay();
+    ContourDisplay(ResultMeshManager* rs);
     ~ContourDisplay();
     QString getName() {
         return QObject::tr("Contour");
     }
-    void updateFromInters();
-    void updateFromParams();
-    void updateToInters();
-    void contourdisplay_execute();
+    virtual void contourdisplay_execute(QString);
+    QString buildContourMsg();
+
+    ResultMeshManager* getResultMeshManager();
 private:
-    //ResultMeshManager* Cmanager;
+    ResultMeshManager* Cmanager;
+     map<string,int> nametype_map;
+     vector<string> scalarname_vector;
 };
 
 #endif

+ 26 - 12
CAE_Solution/src/VTK/display/linedisplay.cpp

@@ -1,27 +1,30 @@
 #include "linedisplay.h"
 
 
-
-LineDisplay::LineDisplay()
+/*
+ * @brief: the constructor
+ * @param: ResultMeshManager
+ * @ret:
+ * @birth: created by czm in 20230422
+ */
+LineDisplay::LineDisplay(ResultMeshManager* rs)
 {
     //ResultMeshManager::getInstance()->SetLineWidget(static_cast<LineDisplayW*>(m_pWidget));
+    this->Cmanager = rs;
 }
 
+/*
+ * @brief: the destructor
+ * @param:
+ * @ret:
+ * @birth: created by czm in 20230422
+ */
 LineDisplay::~LineDisplay()
 {
+    this->Cmanager = NULL;
 }
 
 
-
-void LineDisplay::updateFromInters()
-{
-    //update setting data from widgets.
-}
-
-void LineDisplay::updateFromParams()
-{
-}
-
 void LineDisplay::linedisplay_execute()
 { 
     //string str = static_cast<LineDisplayW*>(m_pWidget)->GetScalarName();
@@ -35,3 +38,14 @@ void LineDisplay::linedisplay_execute()
     //}
 }
 
+/*
+ * @brief: get the resultmeshmanager
+ * @param: void
+ * @ret: resultmeshmanager
+ * @birth: created by czm in 20230422
+ */
+ResultMeshManager *LineDisplay::getResultMeshManager()
+{
+    return this->Cmanager;
+}
+

+ 4 - 5
CAE_Solution/src/VTK/display/linedisplay.h

@@ -9,14 +9,13 @@
 class LineDisplay
 {
 public:
-    LineDisplay();
+    LineDisplay(ResultMeshManager* rs);
     virtual ~LineDisplay();
     virtual QString getName() { return QObject::tr("Line"); }
-
-    virtual void updateFromInters();
-    virtual void updateFromParams();
     virtual void linedisplay_execute();
-private:
 
+    ResultMeshManager* getResultMeshManager();
+private:
+    ResultMeshManager* Cmanager;
 };
 

+ 81 - 32
CAE_Solution/src/main.cpp

@@ -21,6 +21,7 @@ VTK_MODULE_INIT(vtkRenderingFreeType)
 #include "widget.h"
 #include "threadPool_and_statemachine/dealWith/handlepool.h"
 #include "threadPool_and_statemachine/dealWith/vtkjsonobject.h"
+#include "VTK/Manager/ResultMeshManager.h"
 
 
 
@@ -35,51 +36,99 @@ int main(int argc, char *argv[])
     QSurfaceFormat::setDefaultFormat(QVTKOpenGLNativeWidget::defaultFormat());//必需
     qRegisterMetaType<std::string>("std::string");
     QApplication a(argc, argv);
-//    Widget w;
+        Widget w;
 
-//    w.resize(QApplication::desktop()->availableGeometry().size());//最大化
-//    w.move(0,0);
-//    w.show();
-//初始化状态机
-//    stateMachine* recvstate= new stateMachine("recvClient");
-//    QThread *thread_recvsate = new QThread();
-//    QThread *thread_sendstate = new QThread();
+        w.resize(QApplication::desktop()->availableGeometry().size());//最大化
+        w.move(0,0);
+        w.show();
+    //初始化状态机
+        stateMachine* recvstate= new stateMachine("recvClient");
+        QThread *thread_recvsate = new QThread();
+        QThread *thread_sendstate = new QThread();
 
-//    stateMachine* sendstate= new stateMachine("sendClient") ;
-//    handlePool *handle = new handlePool(&w);
+        stateMachine* sendstate= new stateMachine("sendClient") ;
+        handlePool *handle = new handlePool(&w);
 
-//    recvstate->moveToThread(thread_recvsate);
-//    thread_recvsate->start();
-//    sendstate->moveToThread(thread_sendstate);
-//    thread_sendstate->start();
+        recvstate->moveToThread(thread_recvsate);
+        thread_recvsate->start();
+        sendstate->moveToThread(thread_sendstate);
+        thread_sendstate->start();
 
 
 
-//    QObject::connect(handle,SIGNAL(sendImg_handlePoolToSendstate(std::string)),sendstate,SLOT(getImg_handlePoolToSendstate(std::string)));
-//    QObject::connect(recvstate,SIGNAL(sendmsg_recvstateTohandlePool(std::string)),handle,SLOT(getmsg_recvstateTohandlePool(std::string)));
-/*******************************************************************************/
-//    QVTKRenderer* render_ = new QVTKRenderer();
-//    render_->init();
+        QObject::connect(handle,SIGNAL(sendImg_handlePoolToSendstate(std::string)),sendstate,SLOT(getImg_handlePoolToSendstate(std::string)));
+        QObject::connect(recvstate,SIGNAL(sendmsg_recvstateTohandlePool(std::string)),handle,SLOT(getmsg_recvstateTohandlePool(std::string)));
+    /*******************************************************************************/
+//        QVTKRenderer* render_ = new QVTKRenderer();
+//        render_->init();
 
-//    QString m_filePath="F:\\czm\\vtkfile\\tfg.ugrid";
+    //    QString m_filePath="F:\\czm\\vtkfile\\tfg.ugrid";
 
-//    MeshManager *meshmanager = new MeshManager();
+    //    MeshManager *meshmanager = new MeshManager();
 
-//    bool f = meshmanager->LoadData(m_filePath);
+    //    bool f = meshmanager->LoadData(m_filePath);
 
-//    cout<<"f:"<<f<<endl;
-//    if(f){
-//        if(render_){
+    //    cout<<"f:"<<f<<endl;
+    //    if(f){
+    //        if(render_){
+    //            meshmanager->DisplayMesh(render_);
+    //            render_->ZoomToExtents();
+    //        }
+    //    }
+    //    handlePool hand;
+    //    hand.loadTecplotFile(m_filePath);
+    //    render_->GetRenderer()->AddActor(hand.actor);
+    //    render_->ZoomToExtents();
+       // w.addTab(render_->GetWidget(),"test");
+//        QString filePath = "C:\\Users\\Administrator\\Desktop\\Postprocess_Binary\\";
+//        QDir dir("C:\\Users\\Administrator\\Desktop\\Postprocess_Binary");
+//        dir.setFilter(QDir::Files);
+//        QStringList list = dir.entryList(QDir::Files);
+//        QStringList string_list;
+//        foreach (QFileInfo file, list) {
+//            if(file.fileName().split(".").back() == "plt"){
+//                string_list.append(file.fileName());
+//            }
+//        }
+
+//        ResultMeshManager* meshmanager =ResultMeshManager::getInstance();
+//        for(int i =0;i<string_list.size();i++){
+//            meshmanager->LoadData(filePath+string_list[i]);
+//            meshmanager->SetSaveIndex(i);
 //            meshmanager->DisplayMesh(render_);
-//            render_->ZoomToExtents();
 //        }
-//    }
-//    handlePool hand;
-//    hand.loadTecplotFile(m_filePath);
-//    render_->GetRenderer()->AddActor(hand.actor);
-//    render_->ZoomToExtents();
-//    w.addTab(render_->GetWidget(),"test");
 
 
+//    meshmanager->HideAllActors();
+//    meshmanager->ShowAll();
+//    double t =0.111;
+//    meshmanager->SetLevel(5);
+//    meshmanager->SetRange(&t);
+//    meshmanager->ModifyScalarDisplay("r");
+//    meshmanager->SetDisplayType(0);
+
+
+//    meshmanager->DisplayMeshByIndex(0);
+//    meshmanager->SetNameTypeMap();
+///////////////////////////////////////////////////////////////////////////////////
+      ///加载tecplot
+//    handlePool* hand = new handlePool();
+//    QString filePath = "C:\\Users\\Administrator\\Desktop\\Postprocess_Binary\\";
+//    QStringList fileName_list = hand->getFileNameList(filePath);
+//    ResultMeshManager *rsMeshManager = new ResultMeshManager();
+
+//    for(int i =0;i<fileName_list.size();i++){
+//        bool f =rsMeshManager->LoadData(filePath+fileName_list[i]);
+//        if(f){
+//            rsMeshManager->SetSaveIndex(i);
+//            if(render_){
+//                rsMeshManager->DisplayMesh(render_);
+//            }
+//        }
+//    }
+//    rsMeshManager->ShowAll();
+//    rsMeshManager->DisplayMeshByIndex(0);
+//    rsMeshManager->SetNameTypeMap();
+//    render_->ZoomToExtents();
     return a.exec();
 }

+ 161 - 50
CAE_Solution/src/threadPool_and_statemachine/dealWith/handlepool.cpp

@@ -67,20 +67,16 @@ void handlePool::operateRender(vtkJsonObject* object,QVTKRenderer* render_)
         delete object;
         object = NULL;
         return;
-        //render_->init();
-        //emit sendWidget_handlePoolToWidget(render_->GetWidget());
-
     }else if(object->action == "loaddata"){
         if(!map_render.contains(object->proId)){
             render_ = new QVTKRenderer();
             map_render.insert(object->proId,render_);
             render_->init();
             w->addTab(render_->GetWidget(),object->proId);
+        }else{
+            render_ = map_render.value(object->proId);
         }
-        render_ = map_render.value(object->proId);
         QString m_filePath = object->filePath;
-        //QString m_filePath="F:\\czm\\vtkfile\\tf.ugrid";
-        //QString m_filePath = "/cephfs/hcfd/solverdown/31f117acb7e74232a3267b091391eab2/hcfd/data_in";
         if(m_filePath.isEmpty()){
             cout<<"file path is Empty!"<<endl;
             return;
@@ -98,18 +94,6 @@ void handlePool::operateRender(vtkJsonObject* object,QVTKRenderer* render_)
             }
         }else{
             meshmanager = map_manager.value(object->proId);
-//            vtkActorCollection *allActor=render_->GetRenderer()->GetActors();
-//            vtkCollectionSimpleIterator pit;
-//            vtkActor *currActor = nullptr;
-//            for(allActor->InitTraversal(pit);(currActor = allActor->GetNextActor(pit));)
-//            {
-//                render_->GetRenderer()->RemoveActor(currActor);
-//                render_->GetRenderer()->GetRenderWindow()->Render();
-//            }
-//            //meshmanager->Clear();
-//            meshmanager =NULL;
-//            //delete meshmanager;
-//            meshmanager = new MeshManager();
             render_->CaptureWindowImages();
             if(!render_->img.isEmpty()){
                 std::string img_ = render_->img.toStdString();
@@ -120,11 +104,6 @@ void handlePool::operateRender(vtkJsonObject* object,QVTKRenderer* render_)
             object = NULL;
             return;
         }
-        //MeshManager *meshmanager = MeshManager::getInstance();
-
-
-        //cout<<"action:"<<action.toStdString()<<endl;
-        //render_->CaptureWindowImages();
     }else if(object->action == "zoomout"){//缩小
         if(!map_render.contains(object->proId))return;
         render_ = map_render.value(object->proId);
@@ -161,6 +140,13 @@ void handlePool::operateRender(vtkJsonObject* object,QVTKRenderer* render_)
         if(!map_render.contains(object->proId))return;
         render_ = map_render.value(object->proId);
         render_->camera_->RelocateToCenter();
+    }else if(object->action == "ResultImport"){//导入结果
+        if(!resultImport(object,render_))return;
+    }else if(object->action == "ContourDisplay"){
+        if(!result_contourdisplay(object,render_)){
+            cout<<"please import tecplot result!"<<endl;
+        }
+        return;
     }
     render_->CaptureWindowImages();
     if(!render_->img.isEmpty()){
@@ -172,33 +158,158 @@ void handlePool::operateRender(vtkJsonObject* object,QVTKRenderer* render_)
     object = NULL;
 }
 
-void handlePool::loadTecplotFile(QString fileName)
+//void handlePool::loadTecplotFile(QString fileName)
+//{
+//    vtkNew<vtkTecplotReader> reader;
+//    if (fileName == "") return;
+//    reader->SetFileName(fileName.toStdString().c_str());
+//    reader->Update();
+
+//    vtkNew<vtkAppendFilter> filter;
+//    filter->AddInputData(reader->GetOutput()->GetBlock(0));
+//    filter->Update();
+
+//    vtkUnstructuredGrid* grid = filter->GetOutput();
+//    vtkPoints* points = grid->GetPoints();
+//    vtkCellArray* cells = grid->GetCells();
+
+//    vtkNew<vtkPolyData> polydata;
+//    polydata->SetPoints(points);
+//    polydata->SetPolys(cells);
+
+//    vtkNew<vtkPolyDataMapper> mapper;
+//    mapper->SetInputData(polydata);
+//    mapper->Update();
+
+//    //to do
+//    vtkActor* actor_ = vtkActor::New();
+//    actor_->SetMapper(mapper);
+//    actor_->GetProperty()->SetColor(1, 1, 1);
+//    this->actor = actor_;
+//}
+
+/*
+ * @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=getFileNameList(object_->filePath);
+    if(fileName_list.isEmpty()){
+        cout<< "No Tecplot file is ready to read!"<<endl;
+        return false;
+    }
+    ResultMeshManager* rsMeshManager = NULL;
+    if(map_resultmanager.contains(object_->proId)){
+        rsMeshManager = map_resultmanager.value(object_->proId);
+        return true;//同一个proid加载不同的file或结果,要销毁上一个结果和记录
+        //怎样判断和上次加载的file或结果不同?//to do
+    }else{
+        rsMeshManager = new ResultMeshManager();
+        map_resultmanager.insert(object_->proId,rsMeshManager);
+        for(int i =0;i<fileName_list.size();i++){
+            bool f =rsMeshManager->LoadData(fileName_list[i]);
+            if(f){
+                rsMeshManager->SetSaveIndex(i);
+                if(renderer_){
+                    rsMeshManager->DisplayMesh(renderer_);
+                }
+            }
+        }
+        rsMeshManager->ShowAll();
+        rsMeshManager->DisplayMeshByIndex(0);
+        rsMeshManager->SetNameTypeMap();
+        renderer_->ZoomToExtents();
+    }
+    renderer_->CaptureWindowImages();
+    if(!renderer_->img.isEmpty()){
+        std::string img_ = renderer_->img.toStdString();
+        std::string json_ = object_->ToJson(img_);
+        emit sendImg_handlePoolToSendstate(json_);//信号
+    }
+    delete object_;
+    object_ = NULL;
+    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 *renderer_)
+{
+    ContourDisplay* condis = NULL;
+    if(map_resultmanager.contains(object_->proId)) return false;
+    if(map_contourdisplay.contains(object_->proId)){
+       condis = map_contourdisplay.value(object_->proId);
+       //condis->contourdisplay_execute();//需传入参数
+    }else{
+        condis = new ContourDisplay(map_resultmanager.value(object_->proId));
+        std::string json_= object_->ToJson(condis->buildContourMsg().toStdString());
+        emit sendImg_handlePoolToSendstate(json_);
+    }
+    delete object_;
+    object_ = NULL;
+    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: get map which save render
+ * @param: void
+ * @ret: QMap<QString, QVTKRenderer *>
+ * @birth: created by czm in 20230420
+ */
+QMap<QString, QVTKRenderer *> handlePool::getMapRender()
+{
+    return this->map_render;
+}
+
+/*
+ * @brief: get map which save ResultMeshManager
+ * @param: void
+ * @ret: QMap<QString, ResultMeshManager *>
+ * @birth: created by czm in 20230420
+ */
+QMap<QString, ResultMeshManager *> handlePool::getMapResultManager()
+{
+    return this->map_resultmanager;
+}
+
+/*
+ * @brief: get map which save meshmanager
+ * @param: void
+ * @ret: QMap<QString, MeshManager *>
+ * @birth: created by czm in 20230420
+ */
+QMap<QString, MeshManager *> handlePool::getMapManager()
 {
-    vtkNew<vtkTecplotReader> reader;
-    if (fileName == "") return;
-    reader->SetFileName(fileName.toStdString().c_str());
-    reader->Update();
-
-    vtkNew<vtkAppendFilter> filter;
-    filter->AddInputData(reader->GetOutput()->GetBlock(0));
-    filter->Update();
-
-    vtkUnstructuredGrid* grid = filter->GetOutput();
-    vtkPoints* points = grid->GetPoints();
-    vtkCellArray* cells = grid->GetCells();
-
-    vtkNew<vtkPolyData> polydata;
-    polydata->SetPoints(points);
-    polydata->SetPolys(cells);
-
-    vtkNew<vtkPolyDataMapper> mapper;
-    mapper->SetInputData(polydata);
-    mapper->Update();
-
-    //to do
-    vtkActor* actor_ = vtkActor::New();
-    actor_->SetMapper(mapper);
-    actor_->GetProperty()->SetColor(1, 1, 1);
-    this->actor = actor_;
+    return this->map_manager;
 }
 

+ 18 - 3
CAE_Solution/src/threadPool_and_statemachine/dealWith/handlepool.h

@@ -4,10 +4,15 @@
 #include <QObject>
 #include <QVector>
 #include <QTabWidget>
+#include <QDir>
+#include <iostream>
+#include <QStringList>
 #include "../../VTK/QVTKRenderer/qvtkrenderer.h"
 #include "../../VTK/Manager/meshmanager.h"
+#include "../../VTK/Manager/ResultMeshManager.h"
+#include "../../VTK/display/contourdisplay.h"
 #include "vtkjsonobject.h"
-
+using namespace std;
 
 class handlePool : public QObject
 {
@@ -18,12 +23,22 @@ public:
     ~handlePool();
 
     void operateRender(vtkJsonObject*,QVTKRenderer*);
-    void loadTecplotFile(QString);
+    //void loadTecplotFile(QString);
+    bool resultImport(vtkJsonObject*,QVTKRenderer*);
+    bool result_contourdisplay(vtkJsonObject*,QVTKRenderer*);
+    QStringList getFileNameList(QString);
 
 
-public:
+    QMap<QString,QVTKRenderer*> getMapRender();
+    QMap<QString,MeshManager*> getMapManager();
+    QMap<QString,ResultMeshManager*> getMapResultManager();
+
+
+private:
     QMap<QString,QVTKRenderer*> map_render;
     QMap<QString,MeshManager*> map_manager;
+    QMap<QString,ResultMeshManager*> map_resultmanager;
+    QMap<QString,ContourDisplay*> map_contourdisplay;
     QTabWidget* w;
     vtkActor* actor;
 

+ 41 - 0
CAE_Solution/tests/QVTKRender_test/tst_renderer.cpp

@@ -1,6 +1,9 @@
 #include <QtTest>
 #include <QCoreApplication>
 #include "tst_vtk.h"
+#include <vtkAxesActor.h>
+#include <vtkOrientationMarkerWidget.h>
+#include <vtkCubeSource.h>
 
 
 // add necessary includes here
@@ -63,8 +66,46 @@ void renderer::test_case1()
 
       renderer->AddActor(actor);
       renderer->SetBackground(.3, .6, .3); // Background color green
+
       renderWindow->Render();
       renderWindowInteractor->Start();
+
+    // 显示坐标系的vtk组件
+//        vtkSmartPointer<vtkAxesActor> axes_actor = vtkSmartPointer<vtkAxesActor>::New();
+//        axes_actor->SetPosition(0, 0, 0);
+//        axes_actor->SetTotalLength(2, 2, 2);
+//        axes_actor->SetShaftType(0);
+//        axes_actor->SetCylinderRadius(0.02);
+
+//        vtkSmartPointer<vtkCubeSource> cube = vtkSmartPointer<vtkCubeSource>::New();
+//        cube->SetXLength(3);
+//        cube->SetYLength(3);
+//        cube->SetZLength(3);
+//        vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
+//        mapper->SetInputConnection(cube->GetOutputPort());
+
+//        vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New();
+//        actor->SetMapper(mapper);
+//        vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();
+//        renderer->AddActor(actor);
+//        vtkSmartPointer<vtkRenderWindow> renWin = vtkSmartPointer<vtkRenderWindow>::New();
+//        renWin->AddRenderer(renderer);
+//        vtkSmartPointer<vtkRenderWindowInteractor> iren = vtkSmartPointer<vtkRenderWindowInteractor>::New();
+//        iren->SetRenderWindow(renWin);
+//        vtkSmartPointer<vtkInteractorStyleTrackballCamera> style = vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();
+//        iren->SetInteractorStyle(style);
+
+//        // 控制坐标系,使之随视角共同变化
+//        vtkSmartPointer<vtkOrientationMarkerWidget> widget = vtkSmartPointer<vtkOrientationMarkerWidget>::New();
+//        widget->SetOrientationMarker(axes_actor);
+//        widget->SetInteractor(iren);
+//        widget->SetEnabled(1);
+//        widget->InteractiveOn();
+
+//        renWin->SetSize(600, 600);
+//        renWin->Render();
+//        iren->Start();
+
 }
 
 QTEST_MAIN(renderer)