You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

171 lines
6.6 KiB
C++

#include "ToolBarFilter.h"
#include "OperatorsInterface/GraphEventOperator.h"
#include "PostGraphAdaptor/PostGraphObjectBase.h"
#include "PostGraphAdaptor/PostGraphProperty.h"
#include "PostGraphAdaptor/PostGraphObjectManager.h"
#include "FITK_Interface/FITKInterfaceCFDPost/FITKAbstractCFDPostData.h"
#include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPost3DManager.h"
#include "FITK_Interface/FITKInterfaceCFDPost/FITKCFDPostData.h"
#include "FITK_Kernel/FITKAppFramework/FITKAppFramework.h"
#include "FITK_Kernel/FITKAppFramework/FITKGlobalData.h"
#include "FITK_Kernel/FITKCore/FITKOperatorRepo.h"
namespace GUI
{
ToolBarFilter::ToolBarFilter(QWidget* parent) :
ToolBarBase(parent)
{
_isoSurfAction = createAction("actionIsosurfCreate", "://icons/isosurf.png");
this->addAction(_isoSurfAction);
_vectorfAction = createAction("actionGlyphCreate", "://icons/vector.png");
this->addAction(_vectorfAction);
_clipAction = createAction("actionClipCreate", "://icons/clip.png");
this->addAction(_clipAction);
_sliceAction = createAction("actionSliceCreate", "://icons/slice.png");
this->addAction(_sliceAction);
_streamlineSurfAction = createAction("actionStreamlineCreate", "://icons/streamline.png");
this->addAction(_streamlineSurfAction);
_thresholdAction = createAction("actionThresholdCreate", "");
this->addAction(_thresholdAction);
_deformAction = createAction("actionDeformCreate", "://icons/deform.svg");
this->addAction(_deformAction);
QAction* action = createAction("actionProbeCreate", "");
this->addAction(action);
this->addSeparator();
updateCurrentGraphObj(-1);
}
ToolBarFilter::~ToolBarFilter()
{
}
void ToolBarFilter::updateCurrentGraphObj(int objID)
{
_currentDataID = objID;
updateIsoSurf();
updateVector();
updateClip();
updateSlice();
updateStreamLine();
updateThreshold();
updateDeform();
}
void ToolBarFilter::updateIsoSurf()
{
_isoSurfAction->setEnabled(false);
Interface::FITKAbstractCFDPostData* currentData = _postDataManager->getDataByID(_currentDataID);
if (currentData == nullptr)return;
//判断当前数据是否可见
if (currentData->isEnable() == false)return;
QStringList pointList = currentData->getPointDataArray();
QStringList contourList = {};
//点标量数据
for (QString point : pointList) {
Interface::FITKPostVariableType type = currentData->getVariableType(Interface::FITKPostFieldType::Post_Point, point);
if (type == Interface::FITKPostVariableType::Post_Scalar) contourList.append(point);
}
//判断当前数据是否有可用标量
if (contourList.isEmpty() == false) {
_isoSurfAction->setEnabled(true);
}
}
void ToolBarFilter::updateVector()
{
_vectorfAction->setEnabled(false);
Interface::FITKAbstractCFDPostData* currentData = _postDataManager->getDataByID(_currentDataID);
if (currentData == nullptr)return;
//判断当前数据是否可见
if (currentData->isEnable() == false)return;
_vectorfAction->setEnabled(true);
}
void ToolBarFilter::updateClip()
{
_clipAction->setEnabled(false);
Interface::FITKAbstractCFDPostData* currentData = _postDataManager->getDataByID(_currentDataID);
if (currentData == nullptr)return;
//判断当前数据是否可见
if (currentData->isEnable() == false)return;
_clipAction->setEnabled(true);
}
void ToolBarFilter::updateSlice()
{
_sliceAction->setEnabled(false);
Interface::FITKAbstractCFDPostData* currentData = _postDataManager->getDataByID(_currentDataID);
if (currentData == nullptr)return;
//判断当前数据是否可见
if (currentData->isEnable() == false)return;
_sliceAction->setEnabled(true);
}
void ToolBarFilter::updateStreamLine()
{
_streamlineSurfAction->setEnabled(false);
Interface::FITKAbstractCFDPostData* currentData = _postDataManager->getDataByID(_currentDataID);
if (currentData == nullptr)return;
//判断当前数据是否可见
if (currentData->isEnable() == false)return;
//获取矢量
QStringList vectorList = {};
QStringList pointDataArray = currentData->getPointDataArray();
for (QString point : pointDataArray) {
Interface::FITKPostVariableType type = currentData->getVariableType(Interface::FITKPostFieldType::Post_Point, point);
if (type == Interface::FITKPostVariableType::Post_Vector) {
vectorList.append(point);
}
}
QStringList cellDataArray = currentData->getCellDataArray();
for (QString cell : cellDataArray) {
Interface::FITKPostVariableType type = currentData->getVariableType(Interface::FITKPostFieldType::Post_Cell, cell);
if (type == Interface::FITKPostVariableType::Post_Vector) {
vectorList.append(cell);
}
}
//判断当前数据是否有可用矢量
if (vectorList.isEmpty() == false) {
_streamlineSurfAction->setEnabled(true);
}
}
void ToolBarFilter::updateThreshold()
{
_thresholdAction->setEnabled(false);
Interface::FITKAbstractCFDPostData* currentData = _postDataManager->getDataByID(_currentDataID);
if (currentData == nullptr)return;
//判断当前数据是否可见
if (currentData->isEnable() == false)return;
_thresholdAction->setEnabled(true);
}
void ToolBarFilter::updateDeform()
{
_deformAction->setEnabled(false);
Interface::FITKAbstractCFDPostData* currentData = _postDataManager->getDataByID(_currentDataID);
if (currentData == nullptr)return;
//判断当前数据是否可见
if (currentData->isEnable() == false)return;
//添加变量
int vectorNum = 0;
QStringList pointDataArray = currentData->getPointDataArray();
for (QString pointData : pointDataArray) {
Interface::FITKPostVariableType type = currentData->getVariableType(Interface::FITKPostFieldType::Post_Point, pointData);
if (type == Interface::FITKPostVariableType::Post_Error || type == Interface::FITKPostVariableType::Post_Scalar)continue;
vectorNum++;
}
if (vectorNum <= 0)return;
_deformAction->setEnabled(true);
}
}