ceshi/plugins/CA_PhysicalField/BoundarySetting.h

172 lines
4.8 KiB
C++

#ifndef BOUNDARYSETTING_H
#define BOUNDARYSETTING_H
#include <QDebug>
#include <QString>
#include <QUuid>
#include <public/services/PreProcessingService.h>
#include <public/services/VisualWidgetService.h>
#include <utils/ServiceRegistry.h>
#include<iostream>
#include <fstream>
#include<string>
#include<sstream>
#include<vtkProperty.h>
#include <vtkPolyDataMapper.h>
#include <vtkRenderWindow.h>
#include "vtkCamera.h"
#include "vtkActor.h"
#include "vtkRenderer.h"
#include "PropPickerInteractionStyle.h"
#include<vtkPoints.h>
#include<vtkPolyData.h>
#include<vtkCellData.h>
#include<vtkCellArray.h>
#include<vtkQuad.h>
#include<vtkRenderWindowInteractor.h>
#include<vtkHexahedron.h>
#include <vtkAutoInit.h>
#include<vtkUnstructuredGrid.h>
#include<vtkDataSetMapper.h>
#include <QToolButton>
#include <vtkCellPicker.h>
#include <vtkVertexGlyphFilter.h>
#include <vtkSphereSource.h>
#include <set>
#include <vtkCell.h>
#include <vtkIdList.h>
#include <vtkDoubleArray.h>
#include <vtkMapper.h>
#include <vtkInformation.h>
#include <vtkInformationObjectBaseVectorKey.h>
#include <QFile>
#include <vtkQuad.h>
#include <vtkMath.h>
#include <vtkLine.h>
#include <vtkCellArray.h>
#include <vtkLODActor.h>
#include <vtkAppendPolyData.h>
#include <vtkGlyph3D.h>
#include <vtkPointData.h>
#include <vtkCleanPolyData.h>
#include <vtkTextActor.h>
#include <vtkTextProperty.h>
#include <vtkVectorText.h>
#include <vtkLightCollection.h>
#include <vtkCollectionIterator.h>
#include <vtkLight.h>
#include <vtkFollower.h>
#include <public/struct/Mesh.h>
#include <vtkRendererCollection.h>
class PhysicalField;
class DisplacementLimitSettingWidget;
class DistributedLoadSettingWidget;
using namespace std;
class BoundarySetting
{
public:
BoundarySetting();
void setSelectMode();
vtkSmartPointer<vtkUnstructuredGrid> getCellStructure();
vtkSmartPointer<vtkUnstructuredGrid> getPointStructure();
void setBoundarySettingStatus(int type);
int getFaceNum();
private:
int m_faceNum;
vtkSmartPointer<vtkUnstructuredGrid> m_cellStructure;
vtkSmartPointer<vtkUnstructuredGrid> m_pointStructure;
QMap <int , int>m_faceToGridMap;
QVector<QVector<int> >m_gridFaceToCell;
QVector<QSet<int> >m_gridFaceToPoint;
QMap <int , int>m_pointIdToTruePointId;
QMap <int , int>m_truePointIdToPointId;
vtkSmartPointer<PropPickerInteractionStyle> m_picker;
vtkSmartPointer<vtkActor> m_pointActor;
vtkSmartPointer<vtkActor> m_faceActor;
VisualWidgetService *m_visualWidgetService;
DisplacementLimitSettingWidget *m_displacementLimitSettingWidget;
DistributedLoadSettingWidget *m_distributedLoadSettingWidget;
vtkSmartPointer<vtkPoints> m_points;
vtkSmartPointer<vtkCellArray> m_cells;
PhysicalField *m_physicalField;
//点的显示方式
int m_pointShowModel;
//被赋值过的点
QSet<int>m_allSelectedPoint;
//设置ux的点
QSet<int>m_uxSelectedPoint;
QMap<int,double>m_uxPoint;
//设置uy的点
QSet<int>m_uySelectedPoint;
QMap<int,double>m_uyPoint;
//设置uz的点
QSet<int>m_uzSelectedPoint;
QMap<int,double>m_uzPoint;
//面的显示方式
int m_faceShowModel;
//选赋值过的面
QSet<int>m_allSelectedFace;
//设置111的面
QSet<int>m_oneSelectedFace;
QMap<int,double>m_oneFace;
//设置222的面
QSet<int>m_twoSelectedFace;
QMap<int,double>m_twoFace;
//设置333的面
QSet<int>m_threeSelectedFace;
QMap<int,double>m_threeFace;
void select();
public:
int getFaceIdToGridId(int id);
int getPointIdToGridId(int id);
vtkSmartPointer<vtkActor> getPointActor();
//false 2D true 3D
void set3DType(bool is3DType);
//GridPoint
//0-ux,1-uy,2-uz
void setPointData(bool enable[3],double value[3]);
void batchSelectPoint(int id);
bool isSelectedPoint(int point);
//0-all,1-ux,2-uy,3-uz
void setPointShowModel(int type);
void clearSelectedPoint();
//GridFace
//0-111,1-222,2-333
void setFaceData(bool enable[3],double value[3]);
void batchSelectFace(int id);
bool isSelectedFace(int point);
//0-all,1-111,2-222,3-333
void setFaceShowModel(int type);
void clearSelectedFace();
void deleteFaceData();
void deletePointData();
bool setStructure(vtkSmartPointer<vtkUnstructuredGrid> cell, vtkSmartPointer<vtkUnstructuredGrid> point);
void setFaceToPoint(QVector<QSet<int>> point);
void setFaceToCell(QVector<QVector<int> > cell);
void setCellToGridMap(QMap<int, int> cellToGridMap);
void showPointData(int point);
void showFaceData(int faceId);
void setPhyicalField(PhysicalField *physicalField);
};
#endif // BOUNDARYSETTING_H