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/FITKInterfaceModel/FITKElementList.h

166 lines
4.7 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.

/**
*
* @file FITKElementList.h
* @brief 单元列表类声明
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-02-28
*
*/
#ifndef __FITK_ELEMENTLIST_H__
#define __FITK_ELEMENTLIST_H__
#include "FITKInterfaceModelAPI.h"
#include "FITK_Kernel/FITKCore/FITKAbstractObject.hpp"
#include <QList>
#include <QMap>
namespace Interface
{
class FITKAbstractElement;
/**
* @brief 单元列表类,存储网格单元
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-02-28
*/
class FITKInerfaceModelAPI FITKElementList //: public Core::FITKAbstractObject
{
public:
/**
* @brief Construct a new FITKElementList object
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-02-28
*/
explicit FITKElementList() = default;
/**
* @brief Destroy the FITKElementList object
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-02-28
*/
virtual ~FITKElementList() = 0;
/**
* @brief 追加单元
* @param[i] element 单元指针
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-02-28
*/
virtual void appendElement(FITKAbstractElement* element);
/**
* @brief 根据索引获取单元ID
* @param[i] index 索引
* @return int
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-02-28
*/
int getEleIDByIndex(const int index);
/**
* @brief 根据ID获取单元索引
* @param[i] id 单元ID
* @return int
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-02-28
*/
int getEleIndexByID(const int id) const;
/**
* @brief 获取第index个单元
* @param[i] index 单元索引
* @return FITKAbstractElement*
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-02-28
*/
FITKAbstractElement* getElementAt(const int index);
/**
* @brief 根据ID获取单元
* @param[i] id 单元ID
* @return FITKAbstractElement*
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-02-28
*/
FITKAbstractElement* getElementByID(const int id);
/**
* @brief 获取单元数量
* @return int
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-02-28
*/
int getElementCount();
/**
* @brief 单元反向
* @param id 单元ID
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-04-03
*/
virtual void reverseEleByID(const int id);
/**
* @brief 单元反向
* @param index 单元索引
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-04-03
*/
virtual void reverseEleByIndex(const int index);
template<class T>
/**
* @brief 获取第index个单元强制转换成T类型
* @param[i] index 单元索引
* @return T*
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-02-28
*/
T* getTElementAt(const int index)
{
return dynamic_cast<T*>(this->getElementAt(index));
}
template<class T>
/**
* @brief 根据ID获取单元并强制转化为T类型
* @param[i] id 单元id
* @return T*
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-02-28
*/
T* getTElementByID(const int id)
{
return dynamic_cast<T*>(this->getElementAt(id));
}
/**
* @brief 获取单元最大id
* @return int
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-03-28
*/
int getElementMaxID();
/**
* @brief 移除全部单元
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-03-28
*/
void removeAllElement();
protected:
/**
* @brief 单元列表
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-02-28
*/
QList<FITKAbstractElement*> _elementList{};
/**
* @brief 辅助存储id与索引的映射关系
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-02-28
*/
QMap <int, int> _idIndexMap{};
/**
* @brief 辅助存储, 最大单元ID
* @author LiBaojun (libaojunqd@foxmail.com)
* @date 2024-03-22
*/
int _eleMaxID = 0;
};
}
#endif //