2023-05-08 06:32:41 +00:00
|
|
|
|
#ifndef MESHSET_H_
|
|
|
|
|
#define MESHSET_H_
|
|
|
|
|
|
|
|
|
|
#include "meshDataAPI.h"
|
|
|
|
|
#include "DataProperty/ComponentBase.h"
|
|
|
|
|
#include <QString>
|
|
|
|
|
#include <QMultiHash>
|
|
|
|
|
#include <QColor>
|
2023-07-04 06:33:32 +00:00
|
|
|
|
#include <QMap>
|
2023-05-08 06:32:41 +00:00
|
|
|
|
|
|
|
|
|
class vtkDataSet;
|
|
|
|
|
class vtkUnstructuredGrid;
|
|
|
|
|
class vtkIdTypeArray;
|
|
|
|
|
|
|
|
|
|
namespace MeshData
|
|
|
|
|
{
|
|
|
|
|
enum SetType
|
|
|
|
|
{
|
|
|
|
|
None = 0,
|
|
|
|
|
Node,
|
|
|
|
|
Element,
|
|
|
|
|
Family,
|
|
|
|
|
BCZone,
|
|
|
|
|
UserDef = 101,
|
|
|
|
|
EndType = 100000,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
class SetMember;
|
|
|
|
|
|
|
|
|
|
class MESHDATAAPI MeshSet : public DataProperty::ComponentBase
|
|
|
|
|
{
|
|
|
|
|
public :
|
|
|
|
|
//构造函数
|
|
|
|
|
MeshSet(QString name, SetType type);
|
|
|
|
|
MeshSet();
|
|
|
|
|
~MeshSet();
|
|
|
|
|
//获取最大ID
|
|
|
|
|
//int static getMaxID();
|
|
|
|
|
//重置最大ID
|
|
|
|
|
//void static resetMaxID();
|
|
|
|
|
///设置ID,谨慎调用
|
|
|
|
|
//void setID(int id) override;
|
|
|
|
|
///设置类型
|
|
|
|
|
void setType(SetType t);
|
|
|
|
|
///获取类型
|
|
|
|
|
SetType getSetType();
|
|
|
|
|
///获取颜色
|
|
|
|
|
QColor getColor();
|
|
|
|
|
//添加成员
|
|
|
|
|
void appendMember(int ker, int id);
|
|
|
|
|
//获取Kernal ID列表
|
|
|
|
|
QList<int> getKernals();
|
|
|
|
|
//根据kernal ID获取成员
|
|
|
|
|
QList<int> getKernalMembers(int k);
|
|
|
|
|
//获取数量
|
|
|
|
|
int getAllCount();
|
|
|
|
|
//临时保存MemberID,当void setKeneralID(int id)时清空,指定为Keneral为id的的子集
|
|
|
|
|
void appendTempMem(int m);
|
|
|
|
|
//设置Kenenal, 与 void appendTempMem(int m)配合使用
|
|
|
|
|
void setKeneralID(int id);
|
|
|
|
|
//是否包含kernal
|
|
|
|
|
bool isContainsKernal(int id);
|
|
|
|
|
//设置可见性
|
|
|
|
|
void isVisible(bool v);
|
|
|
|
|
//获取可见性
|
|
|
|
|
bool isVisible();
|
|
|
|
|
//合并组件
|
|
|
|
|
void merge(MeshSet* set);
|
|
|
|
|
//减去组件
|
|
|
|
|
void cut(MeshSet* set);
|
|
|
|
|
//md5
|
|
|
|
|
void dataToStream(QDataStream* s) override;
|
|
|
|
|
//写出到XML文件
|
|
|
|
|
virtual QDomElement& writeToProjectFile(QDomDocument* doc, QDomElement* parent) override;
|
|
|
|
|
//从XML文件读取数据
|
|
|
|
|
virtual void readDataFromProjectFile(QDomElement* e) override;
|
|
|
|
|
//写出二进制文件
|
|
|
|
|
virtual void writeBinaryFile(QDataStream* dataStream);
|
|
|
|
|
//读入二进制文件
|
|
|
|
|
virtual void readBinaryFile(QDataStream* dataStream);
|
|
|
|
|
//生成可以显示的模型, 每个实例只能调用一次
|
|
|
|
|
virtual void generateDisplayDataSet();
|
|
|
|
|
//获取显示模型
|
|
|
|
|
virtual vtkDataSet* getDisplayDataSet();
|
|
|
|
|
//字符串转化为枚举
|
|
|
|
|
static SetType stringToSettype(QString s);
|
|
|
|
|
//枚举转字符串
|
|
|
|
|
static QString setTypeToString(SetType);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
SetType _type{ None };
|
|
|
|
|
bool _visible{ true };
|
|
|
|
|
|
|
|
|
|
QMultiHash<int, int> _members{}; //keneralID - node/elementID
|
|
|
|
|
|
|
|
|
|
QList<int> _tempMemberID{};
|
|
|
|
|
|
|
|
|
|
vtkDataSet* _displayDataSet{};
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
// static int maxID;
|
|
|
|
|
};
|
|
|
|
|
|
2023-07-04 06:33:32 +00:00
|
|
|
|
//用于流体网格边界信息存储。边界由多个单元的一个或多个面组成。
|
|
|
|
|
class MESHDATAAPI BoundMeshSet : public MeshSet
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
BoundMeshSet();
|
|
|
|
|
~BoundMeshSet() = default;
|
|
|
|
|
void setCellFaces(const QMap<int, QVector<int>> cellFaces);
|
|
|
|
|
QMap<int, QVector<int>> getCellFaces();
|
|
|
|
|
protected:
|
|
|
|
|
//key为单元索引,value为该单元的面索引
|
|
|
|
|
QMap<int, QVector<int>> m_CellFaces{};
|
2023-05-08 06:32:41 +00:00
|
|
|
|
|
2023-07-04 06:33:32 +00:00
|
|
|
|
};
|
2023-05-08 06:32:41 +00:00
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|