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.
AppFlowPost/GUIWidget/ToolBarColorMapper.cpp

321 lines
14 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include "ToolBarColorMapper.h"
#include "TreeWidget.h"
#include "GUIComboBox.h"
#include "OperatorsInterface/GraphEventOperator.h"
#include "OperatorsInterface/ParaWidgetInterfaceOperator.h"
#include "PostGraphAdaptor/PostGraphObjectManager.h"
#include "PostGraphAdaptor/PostGraphObjectBase.h"
#include "PostGraphAdaptor/PostGraphProperty.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"
#include <QComboBox>
#include <QSignalBlocker>
Q_DECLARE_METATYPE(Interface::FITKPostDisplayType)
Q_DECLARE_METATYPE(Interface::FITKPostFieldType)
namespace GUI
{
ToolBarColorMapper::ToolBarColorMapper(QWidget * parent) :
ToolBarBase(parent)
{
_actionShowColorMap = createAction("actionShowColorMap", "://icons/counter.png", QString(tr("")));
_actionShowColorMap->setCheckable(true);
_actionShowColorMap->setEnabled(false);
this->addAction(_actionShowColorMap);
_actionEditColorMap = createAction("actionEditColorMap", "://icons/post.png", QString(tr("")));
_actionEditColorMap->setEnabled(false);
this->addAction(_actionEditColorMap);
_variableCombox = new GUIComboBox(this);
_variableCombox->setFixedWidth(130);
_variableCombox->setEnabled(false);
this->addWidget(_variableCombox);
_componentCombox = new GUIComboBox(this);
_componentCombox->setEnabled(false);
this->addWidget(_componentCombox);
_disPlayCombox = new GUIComboBox(this);
_disPlayCombox->setEnabled(false);
_disPlayCombox->addItem(QIcon("://icons/point.png"), QString(tr("Point")), QVariant::fromValue(Interface::FITKPostDisplayType::Post_Point));
_disPlayCombox->addItem(QIcon("://icons/wireFrame.png"), QString(tr("WireFrame")), QVariant::fromValue(Interface::FITKPostDisplayType::Post_Edge));
_disPlayCombox->addItem(QIcon("://icons/face.png"), QString(tr("Surface")), QVariant::fromValue(Interface::FITKPostDisplayType::Post_Face));
_disPlayCombox->addItem(QIcon("://icons/faceWithEdge.png"), QString(tr("Surface With Edge")), QVariant::fromValue(Interface::FITKPostDisplayType::Post_FaceWithEdge));
_disPlayCombox->setCurrentIndex(2);
this->addWidget(_disPlayCombox);
connect(_actionShowColorMap, SIGNAL(triggered()), this, SLOT(slotShowColorMapp()));
connect(_actionEditColorMap, SIGNAL(triggered()), this, SLOT(slotEditColorMapp()));
connect(_variableCombox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotVariableChange(int)));
connect(_componentCombox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotComponentChange(int)));
connect(_disPlayCombox, SIGNAL(currentIndexChanged(int)), this, SLOT(slotDisplayChange(int)));
}
ToolBarColorMapper::~ToolBarColorMapper()
{
this->clear();
}
void ToolBarColorMapper::updateCurrentGraphObj(int objID)
{
_currentDataID = objID;
updateShowColorMapp();
updateVariable();
updateComponent();
updateDisplayComboBox();
}
void ToolBarColorMapper::slotShowColorMapp()
{
Interface::PostGraphObjectBase* currentGraphObj = _postGraphManager->getGraphObjectBase(_currentDataID);
if (currentGraphObj == nullptr)return;
Interface::PostGraphProperty* property = currentGraphObj->getProperty();
if (property == nullptr)return;
//是否显示colormapper编辑按钮
if (_actionShowColorMap->isChecked()) {
_actionEditColorMap->setEnabled(true);
property->setScalarBarWidgetIsShow(true);
}
else {
_actionEditColorMap->setEnabled(false);
property->setScalarBarWidgetIsShow(false);
}
reRender();
}
void ToolBarColorMapper::slotEditColorMapp()
{
Interface::FITKAbstractCFDPostData* currentData = _postDataManager->getDataByID(_currentDataID);
if (currentData == nullptr)return;
int postDataId = currentData->getDataObjectID();
auto colorMapEditOper = FITKOPERREPO->getOperatorT<EventOper::ParaWidgetInterfaceOperator>("colorMapEdit");
if (colorMapEditOper == nullptr)return;
colorMapEditOper->setArgs("objID", postDataId);
colorMapEditOper->actionTriggered();
}
void ToolBarColorMapper::slotVariableChange(int index)
{
Q_UNUSED(index);
Interface::PostGraphObjectBase* currentGraphObj = _postGraphManager->getGraphObjectBase(_currentDataID);
if (currentGraphObj == nullptr)return;
QString name = _variableCombox->currentText();
Interface::FITKPostFieldType type = _variableCombox->currentData().value<Interface::FITKPostFieldType>();
Interface::PostGraphProperty* property = currentGraphObj->getProperty();
if (property) {
property->setCurrentField(type, name);
}
//是否开启场变量数值显示
if (name == SolidColor) {
_actionShowColorMap->setEnabled(false);
}
else {
_actionShowColorMap->setEnabled(true);
}
updateShowColorMapp();
updateComponent();
reRender();
}
void ToolBarColorMapper::slotComponentChange(int index)
{
Q_UNUSED(index);
Interface::PostGraphObjectBase* currentGraphObj = _postGraphManager->getGraphObjectBase(_currentDataID);
if (currentGraphObj == nullptr)return;
QString name = _variableCombox->currentText();
Interface::FITKPostFieldType type = _variableCombox->currentData().value<Interface::FITKPostFieldType>();
int compomentIndex = _componentCombox->currentData().toInt();
Interface::PostGraphProperty* property = currentGraphObj->getProperty();
if (property) {
property->setCurrentField(type, name, compomentIndex);
}
reRender();
}
void ToolBarColorMapper::slotDisplayChange(int index)
{
Q_UNUSED(index);
Interface::PostGraphObjectBase* currentGraphObj = _postGraphManager->getGraphObjectBase(_currentDataID);
if (currentGraphObj == nullptr)return;
Interface::PostGraphProperty* property = currentGraphObj->getProperty();
if (property == nullptr)return;
Interface::FITKPostDisplayType type = _disPlayCombox->currentData().value<Interface::FITKPostDisplayType>();
property->setCurrentDisplayType(type);
reRender();
}
void ToolBarColorMapper::updateShowColorMapp()
{
//默认关闭scalarBarWidget相关按钮
QSignalBlocker blocker1(_actionShowColorMap);
QSignalBlocker blocker2(_actionEditColorMap);
_actionShowColorMap->setEnabled(false);
_actionShowColorMap->setChecked(false);
_actionEditColorMap->setEnabled(false);
bool isShow = false;
Interface::PostGraphProperty* currentProperty = nullptr;
Interface::FITKPostFieldType currentFieldType;
QString currentFieldName = "";
int currentCompIndex = -1;
Interface::PostGraphObjectBase* currentGraphObj = _postGraphManager->getGraphObjectBase(_currentDataID);
Interface::FITKAbstractCFDPostData* currentData = _postDataManager->getDataByID(_currentDataID);
if (currentGraphObj) {
currentProperty = currentGraphObj->getProperty();
if (currentProperty) {
isShow = currentProperty->getScalarBarWidgetIsShow();
currentProperty->getCurrentField(currentFieldType, currentFieldName, currentCompIndex);
}
}
//关闭所有scalarBarWidget
for (int i = 0; i < _postGraphManager->getDataCount(); i++) {
Interface::PostGraphObjectAgent* agent = _postGraphManager->getDataByIndex(i);
if (agent == nullptr)continue;
Interface::PostGraphObjectBase* graphObj = agent->getGraphObject();
if (graphObj == nullptr)continue;
Interface::PostGraphProperty* postProperty = graphObj->getProperty();
if(postProperty == nullptr)continue;
//只隐藏scalarBarWidget不更改hideScalarBarWidget在property中的是否显示标签
postProperty->hideScalarBarWidget();
}
//判断当前数据scalarBarWidget是否显示
if (currentProperty && (currentFieldName != SolidColor) && currentData && currentData->isEnable()) {
_actionShowColorMap->setEnabled(true);
if (isShow) {
_actionEditColorMap->setEnabled(true);
currentProperty->setScalarBarWidgetIsShow(true);
_actionShowColorMap->setChecked(true);
}
else {
currentProperty->setScalarBarWidgetIsShow(false);
_actionShowColorMap->setChecked(false);
}
}
//刷新
reRender();
}
void ToolBarColorMapper::updateDisplayComboBox()
{
QSignalBlocker block(_disPlayCombox);
_disPlayCombox->setEnabled(false);
_disPlayCombox->setCurrentIndex(2);
Interface::PostGraphObjectBase* currentGraphObj = _postGraphManager->getGraphObjectBase(_currentDataID);
Interface::FITKAbstractCFDPostData* currentData = _postDataManager->getDataByID(_currentDataID);
if (currentData == nullptr)return;
if (currentGraphObj == nullptr)return;
if (!currentData->isEnable())return;
_disPlayCombox->setEnabled(true);
Interface::PostGraphProperty* property = currentGraphObj->getProperty();
Interface::FITKPostDisplayType type = property->getCurrentDisplayType();
_disPlayCombox->setCurrentIndex(_disPlayCombox->findData(QVariant::fromValue(type)));
}
void ToolBarColorMapper::updateVariable()
{
QSignalBlocker block(_variableCombox);
_variableCombox->setEnabled(false);
_variableCombox->clear();
Interface::PostGraphObjectBase* currentGraphObj = _postGraphManager->getGraphObjectBase(_currentDataID);
Interface::FITKAbstractCFDPostData* currentData = _postDataManager->getDataByID(_currentDataID);
if (currentData == nullptr)return;
if (currentGraphObj == nullptr)return;
//当前数据是否显示
if (!currentData->isEnable())return;
_variableCombox->setEnabled(true);
//获取当前的场数据
Interface::FITKPostFieldType currentFieldType;
QString currentFieldName = "";
int currentCompIndex = -1;
int currentIndex = 0;
if (currentGraphObj->getProperty()) {
currentGraphObj->getProperty()->getCurrentField(currentFieldType, currentFieldName, currentCompIndex);
}
int index = 0;
_variableCombox->addItem(QIcon("://icons/solidColor.png"), SolidColor,QVariant::fromValue(Interface::FITKPostFieldType::Post_None));
if (currentFieldName == SolidColor && currentFieldType == Interface::FITKPostFieldType::Post_None)currentIndex = index;
QStringList pointData = currentData->getPointDataArray();
for (auto array : pointData) {
index++;
_variableCombox->addItem(QIcon("://icons/nodeValue.png"), array, QVariant::fromValue(Interface::FITKPostFieldType::Post_Point));
if (currentFieldName == array && currentFieldType == Interface::FITKPostFieldType::Post_Point)currentIndex = index;
}
QStringList cellData = currentData->getCellDataArray();
for (auto array : cellData) {
index++;
_variableCombox->addItem(QIcon("://icons/cellValue.png"), array, QVariant::fromValue(Interface::FITKPostFieldType::Post_Cell));
if (currentFieldName == array && currentFieldType == Interface::FITKPostFieldType::Post_Cell)currentIndex = index;
}
_variableCombox->setCurrentIndex(currentIndex);
}
void ToolBarColorMapper::updateComponent()
{
QSignalBlocker block(_componentCombox);
_componentCombox->setEnabled(false);
_componentCombox->clear();
Interface::PostGraphObjectBase* currentGraphObj = _postGraphManager->getGraphObjectBase(_currentDataID);
Interface::FITKAbstractCFDPostData* currentData = _postDataManager->getDataByID(_currentDataID);
if (currentData == nullptr)return;
if (currentGraphObj == nullptr)return;
//当前数据是否是显示状态
if (!currentData->isEnable())return;
Interface::PostGraphProperty* postProperty = currentGraphObj->getProperty();
if (postProperty == nullptr)return;
//获取当前的场数据
Interface::FITKPostFieldType currentFieldType;
QString currentFieldName = "";
int currentCompIndex = -1;
if (postProperty) {
postProperty->getCurrentField(currentFieldType, currentFieldName, currentCompIndex);
}
Interface::FITKPostVariableType type = currentData->getVariableType(currentFieldType, currentFieldName);
switch (type){
case Interface::FITKPostVariableType::Post_Error:
case Interface::FITKPostVariableType::Post_Scalar:
break;
case Interface::FITKPostVariableType::Post_Vector: {
_componentCombox->addItem("magnitude", -1);
_componentCombox->addItem("X", 0);
_componentCombox->addItem("Y", 1);
_componentCombox->addItem("Z", 2);
_componentCombox->setEnabled(true);
break;
}
case Interface::FITKPostVariableType::Post_Tensor: {
int n = currentData->getVariableComponentCount(currentFieldType, currentFieldName);
for (int i = 1; i <= n; ++i) {
_componentCombox->addItem(QString("%1").arg(i), i - 1);
}
_componentCombox->setEnabled(true);
break;
}
}
if (_componentCombox->count() > 0) {
_componentCombox->setCurrentIndex(currentCompIndex + 1);
}
}
}