Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
SurfaceMeshActor.h
Go to the documentation of this file.
1/* This file is part of MoDELib, distributed under GNU GPL v2. */
2#ifndef model_SurfaceMeshActor_H_
3#define model_SurfaceMeshActor_H_
4#include <QWidget>
5#include <QGroupBox>
6#include <QCheckBox>
7#include <QLineEdit>
8#include <QSlider>
9#include <QDoubleSpinBox>
10#include <QLabel>
11#include <vtkSmartPointer.h>
12#include <vtkPolyData.h>
13#include <vtkPolyDataMapper.h>
14#include <vtkPolyDataNormals.h>
15#include <vtkCleanPolyData.h>
16#include <vtkPlane.h>
17#include <vtkClipPolyData.h>
18#include <vtkActor.h>
19#include <vtkLight.h>
20#include <vtkRenderer.h>
21#include <vtkGenericOpenGLRenderWindow.h>
23#include <SurfaceMeshGeometry.h>
24
25namespace model
26{
27 class SurfaceMeshActor : public QWidget
28 {
29 vtkGenericOpenGLRenderWindow *const renderWindow;
30 vtkRenderer *const renderer;
31 const DefectiveCrystal<3> &defectiveCrystal;
32 SurfaceMeshGeometry referenceGeometry;
33 SurfaceMeshGeometry geometry;
34 std::vector<Eigen::Vector3d> displacement;
35 bool frameAvailable = false;
36 bool dirty = true;
37 bool validDisplacement = false;
38 bool clippingEnabled = false;
39 Eigen::Vector3d appliedClipCenter = Eigen::Vector3d::Zero();
40 Eigen::Vector3d appliedClipNormal = Eigen::Vector3d::UnitX();
41 double clipTravel = 0.0;
42
43 std::map<size_t, QCheckBox *> externalFaceChecks;
44 std::map<size_t, QCheckBox *> internalFaceChecks;
45 std::set<size_t> selectedFaceIDs() const;
46 void compute();
47 void applyDisplacement();
48 void render();
49 void updateLighting();
50 void moveClipPlane();
51 void reportError(const std::exception &error);
52
53 public:
54 QCheckBox *const showSurface;
55 QLineEdit *const meshSizeEdit;
56 QDoubleSpinBox *const amplification;
57 QCheckBox *const showEdges;
58 QLabel *const status;
59 QCheckBox *const clipSurface;
60 QLineEdit *const clipCenterEdit;
61 QLineEdit *const clipNormalEdit;
62 QLabel *const clipStatus;
63 QSlider *const clipPositionSlider;
64 QLabel *const clipOffsetLabel;
65 QGroupBox *const externalFaces;
66 QGroupBox *const internalFaces;
67 std::vector<QCheckBox *> microstructuresCheck;
68 const vtkSmartPointer<vtkPolyData> polyData;
69 const vtkSmartPointer<vtkPlane> clipPlane;
70 const vtkSmartPointer<vtkClipPolyData> clipper;
71 const vtkSmartPointer<vtkCleanPolyData> shadingMesh;
72 const vtkSmartPointer<vtkPolyDataNormals> normals;
73 const vtkSmartPointer<vtkPolyDataMapper> mapper;
74 const vtkSmartPointer<vtkActor> actor;
75 const vtkSmartPointer<vtkLight> reliefLight;
76
77 SurfaceMeshActor(vtkGenericOpenGLRenderWindow *window, vtkRenderer *renderer, const DefectiveCrystal<3> &crystal);
78 ~SurfaceMeshActor() override;
79 void rebuild();
80 void updateClipping();
81 // Called after initializeConfiguration for every successful frame load, including playback.
82 // Rendering is left to the owning viewer, avoiding reentrant frame-load rendering.
84 };
85} // namespace model
86#endif
const vtkSmartPointer< vtkLight > reliefLight
const vtkSmartPointer< vtkPolyDataMapper > mapper
std::vector< QCheckBox * > microstructuresCheck
QLineEdit *const clipNormalEdit
QSlider *const clipPositionSlider
SurfaceMeshActor(vtkGenericOpenGLRenderWindow *window, vtkRenderer *renderer, const DefectiveCrystal< 3 > &crystal)
const vtkSmartPointer< vtkPolyData > polyData
QGroupBox *const externalFaces
QCheckBox *const clipSurface
const vtkSmartPointer< vtkPlane > clipPlane
const vtkSmartPointer< vtkPolyDataNormals > normals
QGroupBox *const internalFaces
QLineEdit *const clipCenterEdit
QCheckBox *const showEdges
const vtkSmartPointer< vtkCleanPolyData > shadingMesh
QCheckBox *const showSurface
QLineEdit *const meshSizeEdit
const vtkSmartPointer< vtkActor > actor
const vtkSmartPointer< vtkClipPolyData > clipper
QDoubleSpinBox *const amplification