Răsfoiți Sursa

0505 解决矢量“Ma"不显示问题,实体表面

caizm 2 ani în urmă
părinte
comite
552852ed68

+ 3 - 5
CAE_Solution/src/VTK/display/contourdisplay.cpp

@@ -33,7 +33,7 @@ ContourDisplay::~ContourDisplay()
 
 /*
  * @brief: get param for recvmsg and display contour
- * @param:void
+ * @param: vtkJsonObject
  * @ret:void
  * @birth: created by czm in 20230420
  */
@@ -56,16 +56,14 @@ void ContourDisplay::contourdisplay_execute(vtkJsonObject* jsonObj_)
     Cmanager->contourWidget_->SetRange(jsonObj_->cd_struct->range);
 
     Cmanager->ModifyScalarDisplay(Cmanager->contourWidget_->GetScalarName());//传入参数combox的current text(scalar name)
-    qDebug()<<"range:"<<QString::number(Cmanager->contourWidget_->GetRange()[0])<<" "<<QString::number(Cmanager->contourWidget_->GetRange()[1]);
+
     this->range[0] = Cmanager->contourWidget_->GetRange()[0];
     this->range[1] = Cmanager->contourWidget_->GetRange()[1];
 
     Cmanager->SetLevel(Cmanager->contourWidget_->GetLevel());//传level的值,初始默认值为10
-    qDebug()<<"level:"<<QString::number(jsonObj_->cd_struct->level);
+
     Cmanager->SetRange(jsonObj_->cd_struct->range);//传入云图的maxrange和minrange
-    qDebug()<<"range:"<<QString::number(jsonObj_->cd_struct->range[0])<<"  "<<QString::number(jsonObj_->cd_struct->range[1]);
 
-    qDebug()<<"scalarname:"<<QString::fromStdString(tmp_scalarname);
     Cmanager->SetDisplayType(0);//0 is contour; 2 is line; 3 is vector  判断显示
     Cmanager->DisplayMeshByIndex(0);//只显示实体、云图、等值线、矢量
     //Cmanager->HideAllUnshadeMeshActors();//隐藏实体调hideallunshademeshactors接口

+ 43 - 4
CAE_Solution/src/VTK/display/solidsurfacewidget.cpp

@@ -1,16 +1,34 @@
 #include "solidsurfacewidget.h"
 
-SolidSurface::SolidSurface()
+/*
+ * @brief: the constructor
+ * @param:
+ * @ret:
+ * @birth: created by czm in 20230505
+ */
+SolidSurface::SolidSurface(ResultMeshManager* rs)
 {
-//ResultMeshManager::getInstance()->SetSurfaceSolidWidget(static_cast<SolidSurfaceWidget*>(m_pWidget));
+    this->Cmanager = rs;
 }
 
+/*
+ * @brief: the destructor
+ * @param:
+ * @ret:
+ * @birth: created by czm in 20230505
+ */
 SolidSurface::~SolidSurface()
 {
+    this->Cmanager = NULL;//不析构,Cmanager存在handPool中map,调用handPool析构函数时析构
 }
 
-
-void SolidSurface::solidsurfce_execute()
+/*
+ * @brief: get param for recvmsg and display solidsurface
+ * @param: vtkJsonObject
+ * @ret: void
+ * @birth: created by czm in 20230505
+ */
+void SolidSurface::solidsurfce_execute(vtkJsonObject* jsonObj_)
 {
     //apply setting data.
 //    ResultMeshManager::getInstance()->SetSurfaceShowHideFlag(static_cast<SolidSurfaceWidget*>(m_pWidget)->GetShowHideState());
@@ -18,6 +36,27 @@ void SolidSurface::solidsurfce_execute()
 //        ResultMeshManager::getInstance()->SetSurfaceTransparency(static_cast<SolidSurfaceWidget*>(m_pWidget)->GetTransparency());
 //        ResultMeshManager::getInstance()->DisplayMeshByIndex(ResultMeshManager::getInstance()->GetCurrIndex());
 
+    this->Cmanager->solidSurfaceW_->SetShowHideState(jsonObj_->sf_struct->showhidestate);
+    this->Cmanager->SetSurfaceShowHideFlag(this->Cmanager->solidSurfaceW_->GetShowHideState());
+
+    this->Cmanager->solidSurfaceW_->Setcolor(jsonObj_->sf_struct->r,jsonObj_->sf_struct->g,jsonObj_->sf_struct->b);
+    this->Cmanager->SetSurfaceColor(this->Cmanager->solidSurfaceW_->GetColor());
+
+    this->Cmanager->solidSurfaceW_->SetTransparency(jsonObj_->sf_struct->transparency);
+    this->Cmanager->SetSurfaceTransparency(this->Cmanager->solidSurfaceW_->GetTransparency());
+
+    this->Cmanager->DisplayMeshByIndex(0);
+}
+
+/*
+ * @brief: get its resultmeshManager
+ * @param: void
+ * @ret: ResultMeshManager*
+ * @birth: created by czm in 20230505
+ */
+ResultMeshManager *SolidSurface::getResultMeshManager()
+{
+    return this->Cmanager;
 }
 
 

+ 7 - 3
CAE_Solution/src/VTK/display/solidsurfacewidget.h

@@ -1,16 +1,20 @@
 #pragma once
 #include <QObject>
 #include "../Manager/ResultMeshManager.h"
+#include "../../threadPool_and_statemachine/dealWith/vtkjsonobject.h"
+#include "../widget/solidsurfaceDisplaywidget.h"
 
 class SolidSurface
 {
 public:
-    SolidSurface();
+    SolidSurface(ResultMeshManager* rs);
     virtual ~SolidSurface();
     virtual QString getName() { return QObject::tr("SolidSurface"); }
 
-    virtual void solidsurfce_execute();
-private:
+    virtual void solidsurfce_execute(vtkJsonObject*);
 
+    ResultMeshManager* getResultMeshManager();
+private:
+    ResultMeshManager* Cmanager;
 };
 

+ 6 - 3
CAE_Solution/src/VTK/display/vectordisplay.cpp

@@ -37,9 +37,12 @@ void Vectordisplay::vectordisplay_execute(vtkJsonObject* object)
     //ResultMeshManager::getInstance()->SetVectorScaleFactor(static_cast<VectorW*>(m_pWidget)->GetScaleFactor());
     //ResultMeshManager::getInstance()->SetVectorScalarIndex(static_cast<VectorW*>(m_pWidget)->GetUVWIndex());
     Cmanager->vectorWidget_->SetScaleFactor(object->vc_struct->scaleFactor);
-    string value_U = object->vc_struct->dataU;
-    string value_V = object->vc_struct->dataV;
-    string value_W = object->vc_struct->dataW;
+    QString u_ = QString(QLatin1String(object->vc_struct->dataU));
+    string value_U = u_.toStdString();
+    QString v_ = QString(QLatin1String(object->vc_struct->dataV));
+    string value_V = v_.toStdString();
+    QString w_ = QString(QLatin1String(object->vc_struct->dataW));
+    string value_W = w_.toStdString();
     int index_u = find(Cmanager->vectorWidget_->dataU.begin(),Cmanager->vectorWidget_->dataU.end(),value_U)-Cmanager->vectorWidget_->dataU.begin();
     int index_v = find(Cmanager->vectorWidget_->dataV.begin(),Cmanager->vectorWidget_->dataV.end(),value_V)-Cmanager->vectorWidget_->dataV.begin();
     int index_w = find(Cmanager->vectorWidget_->dataW.begin(),Cmanager->vectorWidget_->dataW.end(),value_W)-Cmanager->vectorWidget_->dataW.begin();

+ 1 - 1
CAE_Solution/src/VTK/display/vectordisplay.h

@@ -9,7 +9,7 @@ class Vectordisplay
 public:
     Vectordisplay(ResultMeshManager* rs);
     virtual ~Vectordisplay();
-    virtual QString getName() { return QObject::tr("Contour"); }
+    virtual QString getName() { return QObject::tr("vector"); }
 
     virtual void vectordisplay_execute(vtkJsonObject*);
 

+ 9 - 25
CAE_Solution/src/VTK/widget/solidsurfaceDisplaywidget.cpp

@@ -16,6 +16,10 @@ SolidSurfaceWidget::SolidSurfaceWidget()
 */
 {
     showHideState = true;
+    number_r = 0;
+    number_g = 0;
+    number_b = 1;
+    number_transparency = 1;
 }
 
 /**
@@ -27,14 +31,11 @@ SolidSurfaceWidget::SolidSurfaceWidget()
  * @author HeJingJing
  * @date 20230104
  */
-void SolidSurfaceWidget::Setcolor(QColor color)
+void SolidSurfaceWidget::Setcolor(double r,double g,double b)
 {
-    //   ldt_r->setText(QString::number(color.red()/255.0));
-    //   ldt_g->setText(QString::number(color.green()/255.0));
-    //   ldt_b->setText(QString::number(color.blue()/255.0));
-    number_r = color.red()/255.0;
-    number_g = color.green()/255.0;
-    number_b = color.blue()/255.0;
+    number_r = r;
+    number_g = g;
+    number_b = b;
 }
 
 /**
@@ -49,9 +50,6 @@ void SolidSurfaceWidget::Setcolor(QColor color)
 vector<double> SolidSurfaceWidget::GetColor()
 {
     vector<double> vec;
-    //    vec.push_back(ldt_r->text().toDouble());
-    //    vec.push_back(ldt_g->text().toDouble());
-    //    vec.push_back(ldt_b->text().toDouble());
     vec.push_back(number_r);
     vec.push_back(number_g);
     vec.push_back(number_b);
@@ -68,9 +66,6 @@ vector<double> SolidSurfaceWidget::GetColor()
  */
 void SolidSurfaceWidget::SetColor(vector<double> color)
 {
-    //    ldt_r->setText(QString::number(color.at(0)));
-    //    ldt_g->setText(QString::number(color.at(1)));
-    //    ldt_b->setText(QString::number(color.at(2)));
     number_r = color.at(0);
     number_g = color.at(1);
     number_b = color.at(2);
@@ -86,7 +81,6 @@ void SolidSurfaceWidget::SetColor(vector<double> color)
  */
 void SolidSurfaceWidget::SetTransparency(double value)
 {
-    //    ldt_trans->setText(QString::number(value));
     number_transparency = value;
 }
 
@@ -102,9 +96,6 @@ void SolidSurfaceWidget::SetTransparency(double value)
  */
 double SolidSurfaceWidget::GetTransparency()
 {
-    //    double value = ldt_trans->text().toDouble();
-
-    //    return value;
     return number_transparency;
 }
 
@@ -119,13 +110,7 @@ double SolidSurfaceWidget::GetTransparency()
  */
 bool SolidSurfaceWidget::GetShowHideState()
 {
-    //    if (rbt_show->isChecked())
-    //    {
     return showHideState;
-    //    }else
-    //    {
-    //        return false;
-    //    }
 }
 /**
  * @brief the destructor.
@@ -138,7 +123,6 @@ bool SolidSurfaceWidget::GetShowHideState()
  */
 SolidSurfaceWidget::~SolidSurfaceWidget()
 {
-    showHideState = true;
 }
 /**
  * @brief
@@ -151,6 +135,6 @@ SolidSurfaceWidget::~SolidSurfaceWidget()
  */
 void SolidSurfaceWidget::SetShowHideState(bool flag)
 {
-   showHideState = flag;
+    this->showHideState = flag;
 }
 

+ 1 - 1
CAE_Solution/src/VTK/widget/solidsurfaceDisplaywidget.h

@@ -10,7 +10,7 @@ class SolidSurfaceWidget
 public:
     SolidSurfaceWidget();
     ~SolidSurfaceWidget();
-    void Setcolor(QColor color);
+    void Setcolor(double r,double g,double b);
     vector<double> GetColor();
     void SetColor(vector<double> color);
     void SetTransparency(double value);

+ 48 - 2
CAE_Solution/src/threadPool_and_statemachine/dealWith/handlepool.cpp

@@ -25,6 +25,8 @@ handlePool::handlePool(QTabWidget *w)
     this->w=w;
     map_contourdisplay.clear();
     map_linedisplay.clear();
+    map_vectordisplay.clear();
+    map_solidsdisplay.clear();
     qmapManager.clear();
     qmapRender.clear();
     qmapResultmanager.clear();
@@ -45,6 +47,8 @@ handlePool::~handlePool()
     qDeleteAll(qmapManager);
     qDeleteAll(map_contourdisplay);
     qDeleteAll(map_linedisplay);
+    qDeleteAll(map_vectordisplay);
+    qDeleteAll(map_solidsdisplay);
     qDeleteAll(qmapResultmanager);
     contour_sendrange_flag = false;
     line_sendrange_flag = false;
@@ -136,6 +140,11 @@ void handlePool::operateRender(vtkJsonObject* object,QVTKRenderer* render_)
             cout<<"please import tecplot result first!"<<endl;
         }
         return;
+    }else if(object->action == "SolidSurfaceDisplay"){//显示实体表面
+        if(!result_solidsurfacedisplay(object,render_)){
+            cout<<"please import tecplot result first!"<<endl;
+        }
+        return;
     }
     send_picture(object,render_);//发送图片
 }
@@ -267,7 +276,7 @@ bool handlePool::resultImport(vtkJsonObject *object_, QVTKRenderer *renderer_)
         rsMeshManager->InitWidgetsParameter();
         renderer_->ZoomToExtents();
     }
-
+/*********************************************/
     ContourDisplayW *contourdw = new ContourDisplayW();//云图窗口参数初始化
     rsMeshManager->SetCotourWidget(contourdw);
     rsMeshManager->SetWidgetRange();
@@ -279,6 +288,9 @@ bool handlePool::resultImport(vtkJsonObject *object_, QVTKRenderer *renderer_)
     VectorW *vecdW = new VectorW();//矢量窗口初始化参数
     rsMeshManager->SetVectorWidget(vecdW);
 
+    SolidSurfaceWidget* solidfW = new SolidSurfaceWidget();//实体表面窗口初始化参数
+    rsMeshManager->SetSurfaceSolidWidget(solidfW);
+/********************************************/
     renderer_->widgetFlag = QVTKRenderer::WidgetModel::ResultModel;//设置当前窗口模型状态
     if(qmapResultmanager.contains(object_->proId)){//加载不同的结果文件
         delete qmapResultmanager.value(object_->proId);
@@ -291,6 +303,7 @@ bool handlePool::resultImport(vtkJsonObject *object_, QVTKRenderer *renderer_)
     emit sendImg_handlePoolToSendstate(object_->ToJson("importResult_contour",buildResultImport_msg("Contour",rsMeshManager)));//发送云图结果数据
     emit sendImg_handlePoolToSendstate(object_->ToJson("importResult_line",buildResultImport_msg("Line",rsMeshManager)));//发送等值线结果数据
     emit sendImg_handlePoolToSendstate(object_->ToJson("importResult_vector",buildResultImport_msg("Vector",rsMeshManager)));//发送矢量结果数据
+    emit sendImg_handlePoolToSendstate(object_->ToJson("importResult_solidsurface",buildResultImport_msg("Solidsurface",rsMeshManager)));//发送矢量结果数据
     send_picture(object_,renderer_);
     return true;
 }
@@ -358,7 +371,7 @@ bool handlePool::result_linedisplay(vtkJsonObject *object_,QVTKRenderer* render_
  * @brief: analysis msg about vectordisplay
  * @param: object and render
  * @ret: bool
- * @birth: created by czmm in 20230504
+ * @birth: created by czm in 20230504
  */
 bool handlePool::result_vectordisplay(vtkJsonObject *object_, QVTKRenderer *render_)
 {
@@ -377,6 +390,29 @@ bool handlePool::result_vectordisplay(vtkJsonObject *object_, QVTKRenderer *rend
     return true;
 }
 
+/*
+ * @brief: analysis msg about solidsurfacedisplay
+ * @param: object and render
+ * @ret: bool
+ * @birth: created by czm in 20230505
+ */
+bool handlePool::result_solidsurfacedisplay(vtkJsonObject *object_, QVTKRenderer *render_)
+{
+    SolidSurface *solidfdis = NULL;
+    if(!qmapResultmanager.contains(object_->proId))return false;
+    render_ = qmapRender[object_->proId];
+    if(map_solidsdisplay.contains(object_->proId)){
+        solidfdis = map_solidsdisplay[object_->proId];//to do
+    }else{
+        solidfdis = new SolidSurface(qmapResultmanager[object_->proId]->resultMeshManager_);
+        map_solidsdisplay.insert(object_->proId,solidfdis);
+    }
+    solidfdis->solidsurfce_execute(object_);
+
+    send_picture(object_,render_);
+    return true;
+}
+
 /*
  * @brief: save the tecplot filename into QStringList
  * @param: filePath
@@ -469,6 +505,16 @@ QMap<QString,string> handlePool::buildResultImport_msg(QString type,ResultMeshMa
         msg = to_string(cmanager->vectorWidget_->current_scalefactor);
         map_tmp.insert("scaleFactor",msg);
         msg.clear();
+    }else if(type == "Solidsurface"){
+        map_tmp.insert("r",to_string(cmanager->solidSurfaceW_->number_r));
+        map_tmp.insert("g",to_string(cmanager->solidSurfaceW_->number_g));
+        map_tmp.insert("b",to_string(cmanager->solidSurfaceW_->number_b));;
+        map_tmp.insert("transparency",to_string(cmanager->solidSurfaceW_->GetTransparency()));
+        if(cmanager->solidSurfaceW_->GetShowHideState()){
+            map_tmp.insert("showHideState",QString("true").toStdString());
+        }else{
+            map_tmp.insert("showHideState",QString("false").toStdString());
+        }
     }
     return map_tmp;
 }

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

@@ -21,6 +21,7 @@
 #include "../../VTK/widget/streamDisplaywidget.h"
 #include "../../VTK/widget/vectorDisplaywidget.h"
 #include "../../VTK/display/vectordisplay.h"
+#include "../../VTK/display/solidsurfacewidget.h"
 #include <map>
 #include <QMap>
 #include <string>
@@ -43,6 +44,7 @@ public:
     bool result_contourdisplay(vtkJsonObject*, QVTKRenderer *);
     bool result_linedisplay(vtkJsonObject*, QVTKRenderer *);
     bool result_vectordisplay(vtkJsonObject*, QVTKRenderer *);
+    bool result_solidsurfacedisplay(vtkJsonObject*, QVTKRenderer *);
     //QStringList getFileNameList(QString);
     QMap<QString,string> buildResultImport_msg(QString,ResultMeshManager*);
     void send_picture(vtkJsonObject*,QVTKRenderer*);
@@ -62,6 +64,7 @@ private:
     QMap<QString,ContourDisplay*> map_contourdisplay;
     QMap<QString,LineDisplay*> map_linedisplay;
     QMap<QString,Vectordisplay*> map_vectordisplay;
+    QMap<QString,SolidSurface*> map_solidsdisplay;
     QTabWidget* w;
     bool contour_sendrange_flag;
     bool line_sendrange_flag;

+ 49 - 0
CAE_Solution/src/threadPool_and_statemachine/dealWith/vtkjsonobject.cpp

@@ -163,6 +163,13 @@ std::string vtkJsonObject::ToJson(std::string type,QMap<QString,string> file)
         json.insert("dataV",QString::fromStdString(file["dataV"]));
         json.insert("dataW",QString::fromStdString(file["dataW"]));
         json.insert("scaleFactor",QString::fromStdString(file["scaleFactor"]));
+    }else if(type == "importResult_solidsurface"){
+        json.insert("msgType","solidsurface_param");
+        json.insert("r",QString::fromStdString(file["r"]));
+        json.insert("g",QString::fromStdString(file["g"]));
+        json.insert("b",QString::fromStdString(file["b"]));
+        json.insert("transparency",QString::fromStdString(file["transparency"]));
+        json.insert("showHideState",QString::fromStdString(file["showHideState"]));
     }
 
     QJsonDocument document;
@@ -295,6 +302,48 @@ void vtkJsonObject::FromParamJson(string param)
                         }
                     }
                 }
+                if(this->action == "SolidSurfaceDisplay"){
+                    this->sf_struct = (struct solidsurfaceDisplay_struct*)malloc(sizeof(struct solidsurfaceDisplay_struct));
+                    if(object_.contains("r")){
+                        QJsonValue value = object_.value("r");
+                        if(value.isString()){
+                            QString r = value.toString();
+                            this->sf_struct->r= r.toDouble();
+                        }
+                    }
+                    if(object_.contains("g")){
+                        QJsonValue value = object_.value("g");
+                        if(value.isString()){
+                            QString g = value.toString();
+                            this->sf_struct->g= g.toDouble();
+                        }
+                    }
+                    if(object_.contains("b")){
+                        QJsonValue value = object_.value("b");
+                        if(value.isString()){
+                            QString b = value.toString();
+                            this->sf_struct->b= b.toDouble();
+                        }
+                    }
+                    if(object_.contains("transparency")){
+                        QJsonValue value = object_.value("transparency");
+                        if(value.isString()){
+                            QString transparency = value.toString();
+                            this->sf_struct->transparency= transparency.toDouble();
+                        }
+                    }
+                    if(object_.contains("showHideState")){
+                        QJsonValue value = object_.value("showHideState");
+                        if(value.isBool()){
+                            bool showHideState = value.toBool();
+                            if(showHideState){
+                                this->sf_struct->showhidestate = true;
+                            }else{
+                                this->sf_struct->showhidestate = false;
+                            }
+                        }
+                    }
+                }
             }
         }
     }

+ 17 - 4
CAE_Solution/src/threadPool_and_statemachine/dealWith/vtkjsonobject.h

@@ -16,6 +16,7 @@
 using namespace std;
 struct contourDisplay_struct;
 struct vectorDisplay_struct;
+struct solidsurfaceDisplay_struct;
 class vtkJsonObject
 {
 public:
@@ -39,6 +40,7 @@ public:
     struct contourDisplay_struct *cd_struct;//contour
     struct contourDisplay_struct *ld_struct;//line
     struct vectorDisplay_struct *vc_struct;//vector
+    struct solidsurfaceDisplay_struct *sf_struct;//solidsurface
 private:
     QString fileName;
 };
@@ -50,7 +52,7 @@ struct contourDisplay_struct
 public:
     int level;
     //string scalarName;
-    char scalarName[5];
+    char scalarName[6];
     double range[2];
 //}contourDisplay_struct,lineDisplay_struct;
 };
@@ -60,9 +62,20 @@ struct vectorDisplay_struct
 {
 public:
     double scaleFactor;
-    char dataU[2];
-    char dataV[2];
-    char dataW[2];
+    char dataU[5];
+    char dataV[5];
+    char dataW[5];
+};
+
+//实体表面msg结构体
+struct solidsurfaceDisplay_struct
+{
+public:
+    double r;
+    double g;
+    double b;
+    double transparency;
+    bool showhidestate;
 };
 
 #endif // VTKJSONOBJECT_H