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.
480 lines
16 KiB
C++
480 lines
16 KiB
C++
/*****************************************************************//**
|
|
* @file FITKFluidVTKGraphObjectModel.h
|
|
* @brief Shape graph object 3D model for VTK graph widget.
|
|
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-05
|
|
*********************************************************************/
|
|
|
|
#ifndef __FITKFLUIDVTKGRAPHOBJECTMODEL_H__
|
|
#define __FITKFLUIDVTKGRAPHOBJECTMODEL_H__
|
|
|
|
#include "FITKFluidVTKGraphObject3D.h"
|
|
|
|
#include "FITKFluidVTKGraphAdaptorAPI.h"
|
|
|
|
#include <QVector>
|
|
|
|
// Forward declaration
|
|
class vtkPolyData;
|
|
class vtkUnstructuredGrid;
|
|
class vtkDataSet;
|
|
class vtkDoubleArray;
|
|
|
|
class FITKGraphActor;
|
|
|
|
namespace Interface
|
|
{
|
|
class FITKAbsGeoCommand;
|
|
class FITKGeometryMeshVS;
|
|
class FITKVirtualTopoManager;
|
|
}
|
|
|
|
namespace Exchange
|
|
{
|
|
class FITKFluidVTKShapeColorMap;
|
|
}
|
|
|
|
namespace Exchange
|
|
{
|
|
class FITKFluidVTKGraphObjectSelect;
|
|
}
|
|
|
|
namespace Exchange
|
|
{
|
|
/**
|
|
* @brief Shape graph object 3D model for VTK graph widget.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-05
|
|
*/
|
|
class FITKFLUIDGRAPHADAPTORAPI FITKFluidVTKGraphObjectModel : public FITKFluidVTKGraphObject3D
|
|
{
|
|
// Regist
|
|
FITKGraphRegist(FITKFluidVTKGraphObjectModel, FITKFluidVTKGraphObject3D);
|
|
FITKCLASS(Exchange, FITKFluidVTKGraphObjectModel);
|
|
|
|
public:
|
|
/**
|
|
* @brief Constructor.
|
|
* @param modelData: The shape model data object need to exchange
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-05
|
|
*/
|
|
FITKFluidVTKGraphObjectModel(Interface::FITKAbsGeoCommand* modelData);
|
|
|
|
/**
|
|
* @brief Destructor.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-05
|
|
*/
|
|
~FITKFluidVTKGraphObjectModel();
|
|
|
|
/**
|
|
* @brief Update all graph actors.[override]
|
|
* @param forceUpdate: Force update[default]
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-07-24
|
|
*/
|
|
void update(bool forceUpdate = false) override;
|
|
|
|
/**
|
|
* @brief Show or hide graph object.[override]
|
|
* @param visibility: The visibility of graph object
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-14
|
|
*/
|
|
void setVisible(bool visibility) override;
|
|
|
|
/**
|
|
* @brief Show or hide the shape by the given type and flag.[override]
|
|
* @param type: The shape type
|
|
* @param visible: The visibility
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-14
|
|
*/
|
|
void setViewMode(FITKFluidVTKCommons::ShapeMeshViewMode type, bool visible) override;
|
|
|
|
/**
|
|
* @brief Enable or disable transparent.[override]
|
|
* @param isOn: Enable or disable
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-07-30
|
|
*/
|
|
void setTransparent(bool isOn) override;
|
|
|
|
/**
|
|
* @brief Set the color for single edge, face or solid.[override]
|
|
* @param color: The color
|
|
* @param type: The shape mesh type
|
|
* @param index: The shape id
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-11
|
|
*/
|
|
void setColor(QColor color, FITKFluidVTKCommons::ShapeType type, int index) override;
|
|
|
|
/**
|
|
* @brief Highlight the graph actors.[override]
|
|
* @param type: The shape type need to be highlighted[default]
|
|
* @param color: The given color for highlighting this time[default]
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-07-23
|
|
*/
|
|
void highlight(FITKFluidVTKCommons::ShapeType type = FITKFluidVTKCommons::ShapeTypeNone, QColor color = QColor()) override;
|
|
|
|
/**
|
|
* @brief Dis-highlight the graph actors.[override]
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-07-23
|
|
*/
|
|
void disHighlight() override;
|
|
|
|
/**
|
|
* @brief Advanced highlight mode for highlighting part of the graph actors.[override]
|
|
* @param type: The type of the model need to be highlighted
|
|
* @param indice: The given indice of the model component need to be highlight
|
|
* @param color: The given color for highlighting this time[default]
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-07-23
|
|
*/
|
|
void advanceHighlight(FITKFluidVTKCommons::ShapeType type, QVector<int> indice, QColor color = QColor()) override;
|
|
|
|
/**
|
|
* @brief Dis-highlight the graph actors if the graph object is in advanced highlighting mode.[override]
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-07-23
|
|
*/
|
|
void disAdvanceHighlight() override;
|
|
|
|
/**
|
|
* @brief Get the number of components of the given type.[override]
|
|
* @param type: The shape type
|
|
* @return The count
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-07-22
|
|
*/
|
|
int getNumberOf(FITKFluidVTKCommons::ShapeType type) override;
|
|
|
|
// For picking.
|
|
//@{
|
|
/**
|
|
* @brief Set if the graph object pickable mode.[override]
|
|
* @param mode: The pickable mode
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-06
|
|
*/
|
|
void setPickMode(FITKFluidVTKCommons::ShapePickMode mode) override;
|
|
|
|
/**
|
|
* @brief Get the shape id by the given shape type and VTK cell id.[override]
|
|
* @param vtkCellId: The VTK cell id in shape data
|
|
* @param topAbsShapeType: The shape type of the given ID( the same as TopAbs_ShapeEnum )
|
|
* @return The shape id
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-07-19
|
|
*/
|
|
int getShapeIdByVTKCellId(int vtkCellId, FITKFluidVTKCommons::ShapeAbsEnum topAbsShapeType) override;
|
|
|
|
/**
|
|
* @brief Get the VTK cell indice by the given shape type and shape id.[override]
|
|
* @param shapeId: The shape id in shape data
|
|
* @param topAbsShapeType: The shape type of the given ID( the same as TopAbs_ShapeEnum )
|
|
* @return The cell indice[const]
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-06
|
|
*/
|
|
const QVector<int> getVTKCellIdsByShapeId(int shapeId, FITKFluidVTKCommons::ShapeAbsEnum topAbsShapeType) override;
|
|
|
|
/**
|
|
* @brief Get the VTK cell indice by the given shape type and cell id in VTK.[override]
|
|
* @param cellId: The cell id in VTK
|
|
* @param topAbsShapeType: The shape type of the given ID( the same as TopAbs_ShapeEnum )
|
|
* @return The cell indice[const]
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-06
|
|
*/
|
|
const QVector<int> getVTKCellIdsByVTKCellId(int cellId, FITKFluidVTKCommons::ShapeAbsEnum topAbsShapeType) override;
|
|
//@}
|
|
|
|
// For highlighting.
|
|
//@{
|
|
/**
|
|
* @brief Get the VTK mesh grid by the given mesh type.[override]
|
|
* @param type: The shape's VTK mesh type
|
|
* @return The vtkDataSet object of the given type of mesh
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-06
|
|
*/
|
|
vtkDataSet* getMesh(FITKFluidVTKCommons::ShapeType type) override;
|
|
//@}
|
|
|
|
// Test function
|
|
//@{
|
|
/**
|
|
* @brief Test function.[override]
|
|
* @param details: The input information
|
|
* @return Is success
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-06
|
|
*/
|
|
bool test(QVariant& details) override;
|
|
//@}
|
|
|
|
private:
|
|
/**
|
|
* @brief Initialize.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-05
|
|
*/
|
|
void init();
|
|
|
|
/**
|
|
* @brief Convert the trianglation data to a vtkDataSet.
|
|
* @return Is valid
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-08-12
|
|
*/
|
|
bool meshVSToVtkDataSet();
|
|
|
|
// Split shape data and save the id map.
|
|
//@{
|
|
/**
|
|
* @brief Create the shape's vertice grid data.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-08-12
|
|
*/
|
|
void createVertexGrid();
|
|
|
|
/**
|
|
* @brief Create the shape's edge grid data.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-08-12
|
|
*/
|
|
void createEdgeGrid();
|
|
|
|
/**
|
|
* @brief Create the shape's face grid data.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-08-12
|
|
*/
|
|
void createFaceGrid();
|
|
|
|
/**
|
|
* @brief Create the shape's solid and face ID map.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-06
|
|
*/
|
|
void initializeSolidFaceMap();
|
|
//@}
|
|
|
|
/**
|
|
* @brief Generate the data set by the shape data.
|
|
* @return Is OK
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-07-24
|
|
*/
|
|
bool generateDataSet();
|
|
|
|
/**
|
|
* @brief Generate the shape with the vtkDataSet.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-05
|
|
*/
|
|
void generateGraph();
|
|
|
|
/**
|
|
* @brief Clear all data set.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-07-24
|
|
*/
|
|
void clearData();
|
|
|
|
private:
|
|
/**
|
|
* @brief The shape data of the model.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-08-12
|
|
*/
|
|
Interface::FITKGeometryMeshVS* m_triData{ nullptr };
|
|
|
|
/**
|
|
* @brief The topo manager of the shape agent.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-08-13
|
|
*/
|
|
Interface::FITKVirtualTopoManager* m_topoMgr{ nullptr };
|
|
|
|
// For colors.
|
|
//@{
|
|
/**
|
|
* @brief The color map key words for showing default model color.[const]
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-11
|
|
*/
|
|
const QString c_defaultArrName = "Default";
|
|
|
|
/**
|
|
* @brief The model extractor for normal or advanced highlight.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-07-23
|
|
*/
|
|
FITKFluidVTKGraphObjectSelect* m_highlightSelector{ nullptr };
|
|
|
|
/**
|
|
* @brief The color map for vertex data set.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-11
|
|
*/
|
|
FITKFluidVTKShapeColorMap* m_colorMapVertex{ nullptr };
|
|
|
|
/**
|
|
* @brief The color map for edge data set.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-11
|
|
*/
|
|
FITKFluidVTKShapeColorMap* m_colorMapEdge{ nullptr };
|
|
|
|
/**
|
|
* @brief The color map for face data set.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-11
|
|
*/
|
|
FITKFluidVTKShapeColorMap* m_colorMapFace{ nullptr };
|
|
//@}
|
|
|
|
/**
|
|
* @brief The model vertice grid data for VTK.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-05
|
|
*/
|
|
vtkUnstructuredGrid* m_gridVertex{ nullptr };
|
|
|
|
/**
|
|
* @brief The model edges grid data for VTK.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-05
|
|
*/
|
|
vtkUnstructuredGrid* m_gridEdge{ nullptr };
|
|
|
|
/**
|
|
* @brief The model faces grid data for VTK.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-05
|
|
*/
|
|
vtkPolyData* m_gridFace{ nullptr };
|
|
|
|
/**
|
|
* @brief The normals for the face points.( For better visualization. )
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-08-01
|
|
*/
|
|
vtkDoubleArray* m_normalFacePoint{ nullptr };
|
|
|
|
/**
|
|
* @brief The model actor for vertice.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-05
|
|
*/
|
|
FITKGraphActor* m_fActorVertex{ nullptr };
|
|
|
|
/**
|
|
* @brief The model actor for edges.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-05
|
|
*/
|
|
FITKGraphActor* m_fActorEdge{ nullptr };
|
|
|
|
/**
|
|
* @brief The model actor for faces.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-05
|
|
*/
|
|
FITKGraphActor* m_fActorFace{ nullptr };
|
|
|
|
// For picking.
|
|
//@{
|
|
// VTK -> Shape
|
|
//@{
|
|
/**
|
|
* @brief The id array for getting the vertex id of picked vertex cell.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-06
|
|
*/
|
|
QVector<int> m_cellIdVertexIdMap;
|
|
|
|
/**
|
|
* @brief The id array for getting the edge id of picked cell.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-06
|
|
*/
|
|
QVector<int> m_cellIdEdgeIdMap;
|
|
|
|
/**
|
|
* @brief The id array for getting the face id of picked cell.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-06
|
|
*/
|
|
QVector<int> m_cellIdFaceIdMap;
|
|
//@}
|
|
|
|
// Shape -> Shape ( Find children )
|
|
//@{
|
|
/**
|
|
* @brief The ID hash for getting the solid id of the picked face cell.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-06
|
|
*/
|
|
QHash<int, int> m_faceSolidIdMap;
|
|
|
|
// Shape -> VTK
|
|
//@{
|
|
/**
|
|
* @brief The id array for getting the cell id with vertex id.
|
|
* The key is the shape id of vertex in indexed map,
|
|
* the values are the VTK cell id in vtkDataSet.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-06
|
|
*/
|
|
QHash<int, int> m_vertexIdCellIdMap;
|
|
|
|
/**
|
|
* @brief The id array for getting the cell id with edge id.
|
|
* The key is the shape id of edge in indexed map,
|
|
* the values are the VTK cell id in vtkDataSet.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-06
|
|
*/
|
|
QHash<int, int> m_edgeIdCellIdMap;
|
|
|
|
/**
|
|
* @brief The solid and face id map.
|
|
* The key is the shape id of solid in indexed map,
|
|
* the values are the shape face ids in indexed map.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-06
|
|
*/
|
|
QHash<int, QVector<int>> m_solidFaceIdsHash;
|
|
//@}
|
|
|
|
/**
|
|
* @brief The solid and face id map.
|
|
* The key is the shape id of face in indexed map,
|
|
* the values are the VTK cell ids in vtkDataSet.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-06-06
|
|
*/
|
|
QHash<int, QVector<int>> m_faceCellIdsHash;
|
|
//@}
|
|
//@}
|
|
|
|
/**
|
|
* @brief The hash code of the shape.
|
|
* @author ChengHaotian (yeguangbaozi@foxmail.com)
|
|
* @date 2024-07-25
|
|
*/
|
|
int m_hashCode = -1;
|
|
|
|
};
|
|
} // namespace Exchange
|
|
|
|
#endif // __FITKFLUIDVTKGRAPHOBJECTMODEL_H__
|