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.
AppFlow/FITK_Interface/FITKInterfaceMesh/FITKUnstructuredFluidMeshVT...

88 lines
2.4 KiB
C++

#include "FITKUnstructuredFluidMeshVTK.h"
#include "FITKUnstructuredMeshVTK.h"
#include "FITK_Interface/FITKInterfaceModel/FITKAbstractElement.h"
#include "FITKMeshVTKMap.h"
#include <vtkUnstructuredGrid.h>
namespace Interface
{
FITKUnstructuredFluidMeshVTK::FITKUnstructuredFluidMeshVTK()
{
//对象创建
_fieldMesh = new FITKUnstructuredMeshVTK;
_boundaryMeshManager = new FITKBoundaryMeshVTKManager;
}
FITKUnstructuredFluidMeshVTK::~FITKUnstructuredFluidMeshVTK()
{
//释放对象
if (_fieldMesh) delete _fieldMesh;
if (_boundaryMeshManager) delete _boundaryMeshManager;
}
FITKUnstructuredMeshVTK* FITKUnstructuredFluidMeshVTK::getFieldMesh()
{
return _fieldMesh;
}
FITKBoundaryMeshVTKManager* FITKUnstructuredFluidMeshVTK::getBoundaryMeshManager()
{
return _boundaryMeshManager;
}
void FITKUnstructuredFluidMeshVTK::clearMesh()
{
if (_boundaryMeshManager)
_boundaryMeshManager->clear();
if (_fieldMesh)
_fieldMesh->clearMesh();
}
FITKBoundaryMeshVTK::FITKBoundaryMeshVTK(FITKUnstructuredMeshVTK* fieldmesh)
:_fieldMesh(fieldmesh)
{
//获取节点
_vtkDataSet = vtkUnstructuredGrid::New();
if (_fieldMesh == nullptr) return;
vtkUnstructuredGrid* fg = _fieldMesh->getGrid();
if (fg == nullptr) return;
//节点共用
_vtkDataSet->SetPoints(fg->GetPoints());
}
void FITKBoundaryMeshVTK::appendElement(FITKAbstractElement* element)
{
if (element == nullptr || _fieldMesh == nullptr) return;
Interface::FITKModelEnum::FITKEleType type = element->getEleType();
if (!eleTypeHash.contains(type)) return;
//追加到单元中
FITKElementList::appendElement(element);
int count = element->getNodeCount();
vtkIdList* idList = vtkIdList::New();
for (int i = 0; i < count; ++i)
{
//查找节点索引
const int nodeID = element->getNodeID(i);
const int index = _fieldMesh->getNodeIndexByID(nodeID);
idList->InsertNextId(index);
}
_vtkDataSet->InsertNextCell(eleTypeHash[type], idList);
}
vtkUnstructuredGrid* FITKBoundaryMeshVTK::getGrid()
{
return _vtkDataSet;
}
FITKBoundaryMeshVTK::~FITKBoundaryMeshVTK()
{
if (_vtkDataSet != nullptr) _vtkDataSet->Delete();
}
}