v2.0.0
Loading...
Searching...
No Matches
digitizersettreeitem.cpp
Go to the documentation of this file.
1//=============================================================================================================
37
38//=============================================================================================================
39// INCLUDES
40//=============================================================================================================
41
43#include "digitizertreeitem.h"
44
45#include <fiff/fiff_constants.h>
46
47#include <QVector3D>
48#include <QDebug>
49
50//=============================================================================================================
51// DEFINE MEMBER METHODS
52//=============================================================================================================
53
55 const QList<FIFFLIB::FiffDigPoint> &digitizerPoints)
56 : QStandardItem(text)
57{
58 setCheckable(true);
59 setCheckState(Qt::Checked);
60
61 // Categorize points by kind
62 // Cardinal points are further split by ident (Nasion, LPA, RPA) but grouped together
63 QVector<QVector3D> cardinalPos, hpiPos, eegPos, extraPos;
64 QStringList cardinalNames, hpiNames, eegNames, extraNames;
65
66 int hpiIdx = 0, eegIdx = 0, extraIdx = 0;
67
68 for (const auto &p : digitizerPoints) {
69 QVector3D pos(p.r[0], p.r[1], p.r[2]);
70
71 switch (p.kind) {
73 cardinalPos.append(pos);
74 if (p.ident == FIFFV_POINT_NASION)
75 cardinalNames.append("Nasion");
76 else if (p.ident == FIFFV_POINT_LPA)
77 cardinalNames.append("LPA");
78 else if (p.ident == FIFFV_POINT_RPA)
79 cardinalNames.append("RPA");
80 else
81 cardinalNames.append(QString("Cardinal %1").arg(p.ident));
82 break;
83 }
84 case FIFFV_POINT_HPI:
85 hpiPos.append(pos);
86 hpiNames.append(QString("HPI %1").arg(++hpiIdx));
87 break;
88 case FIFFV_POINT_EEG:
89 eegPos.append(pos);
90 eegNames.append(QString("EEG %1").arg(++eegIdx));
91 break;
93 extraPos.append(pos);
94 extraNames.append(QString("Extra %1").arg(++extraIdx));
95 break;
96 default:
97 extraPos.append(pos);
98 extraNames.append(QString("Unknown %1").arg(extraPos.size()));
99 break;
100 }
101 }
102
103 // Create child items for each non-empty category
104 // Color and size scheme matches disp3D conventions
105 if (!cardinalPos.isEmpty()) {
106 auto *item = new DigitizerTreeItem("Cardinal",
108 cardinalPos,
109 cardinalNames,
110 QColor(0, 255, 0), // Green
111 0.002f); // 2mm
112 appendRow(item);
113 qDebug() << "DigitizerSetTreeItem: Cardinal points:" << cardinalPos.size();
114 }
115
116 if (!hpiPos.isEmpty()) {
117 auto *item = new DigitizerTreeItem("HPI",
119 hpiPos,
120 hpiNames,
121 QColor(128, 0, 0), // DarkRed
122 0.001f); // 1mm
123 appendRow(item);
124 qDebug() << "DigitizerSetTreeItem: HPI points:" << hpiPos.size();
125 }
126
127 if (!eegPos.isEmpty()) {
128 auto *item = new DigitizerTreeItem("EEG",
130 eegPos,
131 eegNames,
132 QColor(0, 255, 255), // Cyan
133 0.001f); // 1mm
134 appendRow(item);
135 qDebug() << "DigitizerSetTreeItem: EEG dig points:" << eegPos.size();
136 }
137
138 if (!extraPos.isEmpty()) {
139 auto *item = new DigitizerTreeItem("Extra",
141 extraPos,
142 extraNames,
143 QColor(255, 0, 255), // Magenta
144 0.001f); // 1mm
145 appendRow(item);
146 qDebug() << "DigitizerSetTreeItem: Extra/head shape points:" << extraPos.size();
147 }
148}
149
150//=============================================================================================================
151
153{
154 for (int i = 0; i < rowCount(); ++i) {
155 DigitizerTreeItem *item = dynamic_cast<DigitizerTreeItem*>(child(i));
156 if (item && static_cast<int>(item->pointKind()) == kind) {
157 return item;
158 }
159 }
160 return nullptr;
161}
162
163//=============================================================================================================
164
166{
167 int count = 0;
168 for (int i = 0; i < rowCount(); ++i) {
169 DigitizerTreeItem *item = dynamic_cast<DigitizerTreeItem*>(child(i));
170 if (item) {
171 count += item->positions().size();
172 }
173 }
174 return count;
175}
Fiff constants.
#define FIFFV_POINT_EXTRA
#define FIFFV_POINT_CARDINAL
#define FIFFV_POINT_RPA
#define FIFFV_POINT_EEG
#define FIFFV_POINT_LPA
#define FIFFV_POINT_HPI
#define FIFFV_POINT_NASION
DigitizerSetTreeItem class declaration.
DigitizerTreeItem class declaration.
DigitizerTreeItem * categoryItem(int kind) const
DigitizerSetTreeItem(const QString &text, const QList< FIFFLIB::FiffDigPoint > &digitizerPoints)
Digitizer point group tree item.
PointKind pointKind() const
const QVector< QVector3D > & positions() const