v2.0.0
Loading...
Searching...
No Matches
dipoleobject.h
Go to the documentation of this file.
1//=============================================================================================================
34
35#ifndef DIPOLEOBJECT_H
36#define DIPOLEOBJECT_H
37
38//=============================================================================================================
39// INCLUDES
40//=============================================================================================================
41
43
44#include <QMatrix4x4>
45#include <QVector3D>
46#include <vector>
47#include <memory>
49
50// Forward-declare QRhi types so that this header stays QRhi-free
51class QRhi;
52class QRhiBuffer;
53class QRhiResourceUpdateBatch;
54
55//=============================================================================================================
63{
64public:
67
68 void load(const INVERSELIB::ECDSet &ecdSet);
69
70 // Apply a transformation matrix to all dipoles
71 void applyTransform(const QMatrix4x4 &trans);
72
73 void updateBuffers(QRhi *rhi, QRhiResourceUpdateBatch *u);
74
75 QRhiBuffer* vertexBuffer() const;
76 QRhiBuffer* indexBuffer() const;
77 QRhiBuffer* instanceBuffer() const;
78
79 int indexCount() const { return m_indexCount; }
80 int instanceCount() const { return m_instanceCount; }
81
82 bool isVisible() const { return m_visible; }
83 void setVisible(bool visible) { m_visible = visible; }
84
85 QVector3D debugFirstDipolePosition() const; // For debugging
86
87 void setSelected(int index, bool selected);
88
89 //=========================================================================================================
98 int intersect(const QVector3D &rayOrigin, const QVector3D &rayDir, float &dist) const;
99
100private:
101 void createGeometry();
102
104 struct GpuBuffers;
105 std::unique_ptr<GpuBuffers> m_gpu;
106
107 int m_indexCount = 0;
108 int m_instanceCount = 0;
109 bool m_visible = true;
110
114 struct VertexData {
115 float x, y, z;
116 float nx, ny, nz;
117 };
118
122 // Instance data: Model Matrix (4x4) + Color (vec4)
123 struct InstanceData {
124 float model[16];
125 float color[4];
126 float isSelected; // 1.0 = selected, 0.0 = not
127 };
128
129 QByteArray m_vertexData;
130 QByteArray m_indexData;
131 QByteArray m_instanceData;
132
133 bool m_geometryDirty = false;
134 bool m_instancesDirty = false;
135
136 std::vector<QVector4D> m_originalColors;
137};
138
139#endif // DIPOLEOBJECT_H
disp3D_rhi library export/import macros.
#define DISP3DRHISHARED_EXPORT
FiffDigPointSet class declaration.
Interleaved vertex attributes (position, normal, color, curvature) for brain surface GPU upload.
QRhiBuffer * instanceBuffer() const
int instanceCount() const
void updateBuffers(QRhi *rhi, QRhiResourceUpdateBatch *u)
int indexCount() const
void setVisible(bool visible)
void load(const INVERSELIB::ECDSet &ecdSet)
QRhiBuffer * indexBuffer() const
QRhiBuffer * vertexBuffer() const
void applyTransform(const QMatrix4x4 &trans)
bool isVisible() const
Holds a set of Electric Current Dipoles.
Definition ecd_set.h:81