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.

194 lines
6.3 KiB
C++

#include "PostGraphProperty.h"
#include "PostGraphObjectBase.h"
#include "FITK_Interface/FITKInterfaceCFDPost/FITKAbstractCFDPostData.h"
#include <vtkDataSetMapper.h>
#include <vtkDataSet.h>
#include <vtkDataArray.h>
#include <vtkPointData.h>
#include <vtkCellData.h>
#include <vtkAssembly.h>
#include <vtkProp3DCollection.h>
#include <vtkActor.h>
#include <vtkProperty.h>
#include <vtkScalarBarWidget.h>
#include <vtkScalarBarActor.h>
#include <vtkProperty.h>
namespace Interface
{
PostGraphProperty::PostGraphProperty(PostGraphObjectBase* postGraphObj, FITKAbstractCFDPostData* postData) :
_postGraphObj(postGraphObj), _postData(postData)
{
}
PostGraphProperty::~PostGraphProperty()
{
}
void PostGraphProperty::setCurrentField(FITKPostFieldType type, QString fieldName, int componentIndex /*= -1*/)
{
if (_postData == nullptr)return;
QList<vtkMapper*> mappers = _postData->getMappers();
if (mappers.isEmpty())return;
_fieldType = type;
_fieldName = fieldName;
_componentIndex = componentIndex;
//qstring转char*
QByteArray name = fieldName.toLocal8Bit();
char* va = name.data();
for (vtkMapper* mapper : mappers) {
switch (_fieldType) {
case Interface::FITKPostFieldType::Post_None:mapper->SetScalarVisibility(false); break;
case Interface::FITKPostFieldType::Post_Point: {
mapper->SetScalarVisibility(true);
mapper->SetScalarModeToUsePointFieldData();
break;
}
case Interface::FITKPostFieldType::Post_Cell: {
mapper->SetScalarVisibility(true);
mapper->SetScalarModeToUseCellFieldData();
break;
}
}
mapper->SelectColorArray(va);
#if VTK_MAJOR_VERSION >= 8
mapper->SetArrayComponent(componentIndex);
#else
mapper->ColorByArrayComponent(va, componentIndex);
#endif
double range[2] = { 0,0 };
_postData->getRange(range, _fieldType, fieldName, componentIndex);
if (fabs(range[0] - range[1]) < 1e-6)
{
if (fabs(range[0]) < 1e-6)
{
range[0] = -1e-5;
range[1] = 1e-5;
}
else
{
range[0] -= range[0] * 0.0001;
range[1] += range[1] * 0.0001;
}
}
mapper->SetScalarRange(range);
mapper->Update();
}
vtkScalarBarWidget* scalarBar = _postData->getScalarBarWidget();
if (scalarBar == nullptr)return;
scalarBar->GetScalarBarActor()->SetTitle(va);
switch (_fieldType){
case Interface::FITKPostFieldType::Post_None: scalarBar->Off();break;
case Interface::FITKPostFieldType::Post_Point:
case Interface::FITKPostFieldType::Post_Cell: {
if (_isShowScalarBar)scalarBar->On();
else scalarBar->Off();
}
}
}
void PostGraphProperty::getCurrentField(FITKPostFieldType& type, QString& filedName, int& componentIndex)
{
type = _fieldType;
filedName = _fieldName;
componentIndex = _componentIndex;
}
void PostGraphProperty::setCurrentDisplayType(FITKPostDisplayType type)
{
if (_postGraphObj == nullptr)return;
for (vtkProp* a : _postGraphObj->getActors()) {
if (a == nullptr)continue;
vtkActor* actor = dynamic_cast<vtkActor*>(a);
if (actor == nullptr)continue;
vtkProperty* property = actor->GetProperty();
switch (type) {
case Interface::FITKPostDisplayType::Post_Point:property->SetRepresentationToPoints(); break;
case Interface::FITKPostDisplayType::Post_Edge:property->SetRepresentationToWireframe(); break;
case Interface::FITKPostDisplayType::Post_Face:property->SetRepresentationToSurface(); property->SetEdgeVisibility(false); break;
case Interface::FITKPostDisplayType::Post_FaceWithEdge:property->SetRepresentationToSurface(); property->SetEdgeVisibility(true); break;
}
}
}
FITKPostDisplayType PostGraphProperty::getCurrentDisplayType()
{
return _displayType;
}
void PostGraphProperty::hideScalarBarWidget()
{
vtkScalarBarWidget* scalarBar = _postData->getScalarBarWidget();
if (scalarBar == nullptr)return;
scalarBar->Off();
}
void PostGraphProperty::showScalarBarWidget()
{
vtkScalarBarWidget* scalarBar = _postData->getScalarBarWidget();
if (scalarBar == nullptr)return;
scalarBar->On();
}
void PostGraphProperty::setScalarBarWidgetIsShow(bool isShow)
{
_isShowScalarBar = isShow;
if (_postData == nullptr)return;
vtkScalarBarWidget* scalarBar = _postData->getScalarBarWidget();
if (scalarBar == nullptr)return;
if (_isShowScalarBar) {
scalarBar->On();
}
else {
scalarBar->Off();
}
}
bool PostGraphProperty::getScalarBarWidgetOnOrOff()
{
vtkScalarBarWidget* scalarBar = _postData->getScalarBarWidget();
if (scalarBar == nullptr)return false;
if (scalarBar->GetEnabled() == 1)return true;
else return false;
}
bool PostGraphProperty::getScalarBarWidgetIsShow()
{
return _isShowScalarBar;
}
void PostGraphProperty::setOpacity(double opacity)
{
if (_postGraphObj == nullptr)return;
for (vtkProp* a : _postGraphObj->getActors()) {
vtkActor* actor = dynamic_cast<vtkActor*>(a);
if (actor == nullptr)continue;
vtkProperty* prop = actor->GetProperty();
if (prop == nullptr)continue;
prop->SetOpacity(opacity);
}
}
double PostGraphProperty::getOpacity()
{
double opacity = 0.0;
if (_postGraphObj == nullptr)return opacity;
for (vtkProp* a : _postGraphObj->getActors()) {
vtkActor* actor = dynamic_cast<vtkActor*>(a);
if (actor == nullptr)continue;
vtkProperty* prop = actor->GetProperty();
if (prop == nullptr)continue;
opacity = prop->GetOpacity();
break;
}
return opacity;
}
}