Computer Assited Medical Intervention Tool Kit  version 5.0
MeshComponent.h
Go to the documentation of this file.
1/*****************************************************************************
2 * $CAMITK_LICENCE_BEGIN$
3 *
4 * CamiTK - Computer Assisted Medical Intervention ToolKit
5 * (c) 2001-2021 Univ. Grenoble Alpes, CNRS, Grenoble INP, TIMC, 38000 Grenoble, France
6 *
7 * Visit http://camitk.imag.fr for more information
8 *
9 * This file is part of CamiTK.
10 *
11 * CamiTK is free software: you can redistribute it and/or modify
12 * it under the terms of the GNU Lesser General Public License version 3
13 * only, as published by the Free Software Foundation.
14 *
15 * CamiTK is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU Lesser General Public License version 3 for more details.
19 *
20 * You should have received a copy of the GNU Lesser General Public License
21 * version 3 along with CamiTK. If not, see <http://www.gnu.org/licenses/>.
22 *
23 * $CAMITK_LICENCE_END$
24 ****************************************************************************/
25
26#ifndef MESHCOMPONENT_H
27#define MESHCOMPONENT_H
28
29#include "Component.h"
30#include "MeshSelectionModel.h"
31
32#include <QTableView>
33
34class vtkPointSet;
35class vtkSelection;
36class vtkSelectionNode;
37
38class QTableView;
39class QComboBox;
40
41namespace camitk {
42
43class MeshDataModel;
44class MeshDataView;
45class MeshSelectionView;
46
54 Q_OBJECT
55public:
56
58 enum DataType {
59 SCALARS = 1,
60 VECTORS = 2,
61 TENSORS = 4,
62 OTHERS = 8
63 };
64
66 enum FieldType {
67 POINTS = 1,
68 CELLS = 2,
69 MESH = 4
70 };
71
78 THIRD_COMPONENT
79 //@TODO COLOR, ///< 3D data are represented as a specific color @TODO need to build a specific color map LUT containing as many colors as there is point/cell
80 };
81
86 UNSCALED_ARROW
87 };
88
95 MeshComponent(const QString& file);
96
106 MeshComponent(vtkSmartPointer<vtkPointSet> aPointSet, const QString& name);
107
116 MeshComponent(Component* parentComponent, vtkSmartPointer<vtkPointSet> aPointSet, const QString& name);
117
119 ~MeshComponent() override;
120
122 void pointPicked(vtkIdType pointId, bool) override;
123
125 void cellPicked(vtkIdType cellId, bool) override;
126
128 vtkIdType getPickedPointId();
129
131 vtkIdType getPickedCellId();
132
134 void updateProperty(QString, QVariant) override {}
135
137 unsigned int getNumberOfPropertyWidget() override;
138
140 QWidget* getPropertyWidgetAt(unsigned int i = 0) override;
141
143 QPixmap getIcon() override;
144
170 QList< vtkSmartPointer<vtkSelectionNode> >& getSelections();
171
177 unsigned int getNumberOfSelections() const;
178
184 vtkSmartPointer<vtkSelection> getActiveSelection() const;
185
194 vtkSmartPointer<vtkSelectionNode> getSelection(const QString& name) const;
195
204 vtkSmartPointer<vtkSelectionNode> getSelectionAt(unsigned int index) const;
205
212 int getSelectionIndex(const QString& name) const;
213
227 virtual int addSelection(const QString& name, int fieldType, int contentType, vtkSmartPointer< vtkAbstractArray > array, MeshSelectionModel::InsertionPolicy policy = MeshSelectionModel::REPLACE);
228
240 virtual int addToSelectedSelection(int fieldType, int contentType, vtkSmartPointer< vtkAbstractArray > array, MeshSelectionModel::InsertionPolicy policy = MeshSelectionModel::REPLACE);
241
260 int getNumberOfDataArray(int fieldFlag = POINTS | CELLS);
261
270 vtkSmartPointer<vtkDataArray> getDataArray(FieldType fieldType, const QString& arrayName);
271
280 vtkSmartPointer<vtkDataArray> getDataArray(FieldType fieldType, int index);
281
289 void addDataArray(FieldType fieldType, const QString& name, vtkSmartPointer<vtkDataArray> data);
290
297 void removeDataArray(FieldType fieldType, const QString& name);
298
305 void addPointData(const QString& name, vtkSmartPointer<vtkDataArray> data);
306
313 void addCellData(const QString& name, vtkSmartPointer<vtkDataArray> data);
314
316 MeshDataModel* getDataModel();
317
319 vtkSmartPointer<vtkFieldData> getFieldData(FieldType);
320
322 bool getDataRepresentationVisibility(FieldType, const QString&) ;
323
325 void setDataRepresentationVisibility(FieldType, const QString&, bool);
326
328 void setDataRepresentationOff(int dataType = SCALARS | VECTORS | TENSORS);
329
332
338 static const QMap< int, QString >& getFieldNames();
339
341 static const QString getFieldName(const FieldType);
342
344 static const QMap< int, QString >& getDataTypeNames();
345
347 static const QString getDataTypeName(const DataType);
348
350 static const DataType getDataType(vtkSmartPointer<vtkDataArray>);
351
356 static const QString getDataTypeName(vtkSmartPointer<vtkDataArray>);
357
359 static const QString getSpecificRepresentationName(const SpecificRepresentation);
360
365protected:
366
368 void initRepresentation(vtkSmartPointer<vtkPointSet>);
369
371 void initSelection();
372
374 void initData();
375
377 void initDynamicProperties();
378
379protected slots:
380
382 void changeSelectedSelection(const QItemSelection& selected, const QItemSelection& deselected);
383
385 void removeSelectedSelections();
386
388 void removeSelectedData();
389
391 void displayTypePolicyChanged(int);
392
394 void vectorRepresentationPolicyChanged(int);
395
396private:
397
399 void initRepresentation() override final {}
400
402 void init();
403
405 vtkIdType pickedPointId;
406
408 vtkIdType pickedCellId;
409
411 vtkSmartPointer<vtkSelection> currentSelection;
412
414 QList< vtkSmartPointer<vtkSelectionNode> > selectionList;
415
418
421
424
427
430
433
436
439
442
444 QWidget* dataWidget;
445
448
451
455 QMap<QString, vtkSmartPointer<vtkDataArray> > specific3DDataRepresentation;
456
459
461 QMap<vtkSmartPointer<vtkDataArray>, bool> dataRepresentationVisibility;
462
464 QStringList vectorActors;
465
467 void createDataRepresentation(FieldType, const QString&, SpecificRepresentation representation = VECTOR_3D) ;
468
469 // Returns the very specific name used for the additional prop that represent this data
470 const QString getDataPropName(FieldType, const QString&);
471
473 void setScalarDataRepresentationOn(vtkSmartPointer<vtkDataArray>);
474
476 static QMap< int, QString > initFieldNames();
477
479 static QMap< int, QString > initDataNames();
480
482 QAction* removeData;
483
485 QAction* inspectData;
486
487};
488
489}
490
491#endif // MESHCOMPONENT_H
#define CAMITK_API
Definition: CamiTKAPI.h:49
A Component represents something that could be included in the explorer view, the interactive 3D view...
Definition: sdk/libraries/core/component/Component.h:302
Basic component to manage any kind of mesh.
Definition: MeshComponent.h:53
QAction * inspectData
action to inspect data
Definition: MeshComponent.h:485
QList< vtkSmartPointer< vtkSelectionNode > > selectionList
list of selections
Definition: MeshComponent.h:414
QMap< vtkSmartPointer< vtkDataArray >, bool > dataRepresentationVisibility
map of visibility status of data
Definition: MeshComponent.h:461
QComboBox * insertionPolicyBox
combo box to select the selection insertion policy
Definition: MeshComponent.h:435
vtkSmartPointer< vtkSelection > currentSelection
manages current selection using vtk
Definition: MeshComponent.h:411
MeshDataModel * dataModel
data model (model as the M in Qt MVC design pattern)
Definition: MeshComponent.h:438
void initRepresentation() override final
the concrete building of the 3D objects (Slice/Geometry): none in this case, everything is done by in...
Definition: MeshComponent.h:399
QAction * removeData
action to remove data
Definition: MeshComponent.h:482
unsigned int numberOfCellDataSpecificRepresentation
number of specific 3D representation for cell data
Definition: MeshComponent.h:458
MeshDataView * dataView
data GUI View (view as the V in Qt MVC design pattern)
Definition: MeshComponent.h:441
void setVectorRepresentation(VectorRepresentation)
set the current mode of visualisation of 3D data vector (default is ARROW)
vtkIdType pickedCellId
the last picked cell
Definition: MeshComponent.h:408
SpecificRepresentation
3D data can be represented by 1 value in different ways
Definition: MeshComponent.h:73
@ SECOND_COMPONENT
Use only the value of the second component.
Definition: MeshComponent.h:77
@ VECTOR_3D
3D data are represented with 3D arrows or hedge hog (simple lines starting from the point or center o...
Definition: MeshComponent.h:74
@ FIRST_COMPONENT
Use only the value of the first component.
Definition: MeshComponent.h:76
@ NORM
3D data are represented in 1D using the norm of the three components
Definition: MeshComponent.h:75
QWidget * dataWidget
selection widget
Definition: MeshComponent.h:444
QComboBox * displayTypePolicyBox
combo box to select how to display vector data (data with 3 components)
Definition: MeshComponent.h:447
MeshSelectionModel * selectionModel
selection model (model as the M in Qt MVC design pattern)
Definition: MeshComponent.h:417
QAction * mergeSelection
action to merge selections
Definition: MeshComponent.h:429
void updateProperty(QString, QVariant) override
update property: no specific properties to manage, this is needed to avoid console warnings.
Definition: MeshComponent.h:134
QWidget * selectionWidget
selection widget
Definition: MeshComponent.h:423
MeshSelectionView * selectionView
selection GUI View (view as the V in Qt MVC design pattern)
Definition: MeshComponent.h:420
FieldType
Data fields can be applied to one of this.
Definition: MeshComponent.h:66
QAction * removeSelections
action to remove selections
Definition: MeshComponent.h:426
QAction * inspectSelection
action to inspect selection
Definition: MeshComponent.h:432
QStringList vectorActors
list of all vector data 3D actors' names (needed for cleaning up)
Definition: MeshComponent.h:464
vtkIdType pickedPointId
the last picked point
Definition: MeshComponent.h:405
QComboBox * vectorRepresentationPolicyBox
combo box to select how the vector are represented in 3D
Definition: MeshComponent.h:450
DataType
Data fields can have different dimensions.
Definition: MeshComponent.h:58
QMap< QString, vtkSmartPointer< vtkDataArray > > specific3DDataRepresentation
map of specific 3D Data representations.
Definition: MeshComponent.h:455
VectorRepresentation
how are vector data represented in 3D
Definition: MeshComponent.h:83
@ HEDGE_HOG
3D data are represented with hedge hog (simple lines starting from the point or center of the cell)
Definition: MeshComponent.h:84
@ ARROW
3D data are represented with 3D arrows (nicer hedge hog)
Definition: MeshComponent.h:85
Qt model for mesh data.
Definition: MeshDataModel.h:45
Qt view for mesh data.
Definition: MeshDataView.h:40
Qt model for mesh selection This class use the Qt model/view design.
Definition: MeshSelectionModel.h:44
InsertionPolicy
Definition: MeshSelectionModel.h:50
@ REPLACE
Definition: MeshSelectionModel.h:51
Qt view for mesh selection.
Definition: MeshSelectionView.h:40
Definition: Action.cpp:35
QSizePolicy policy(QSizePolicy::Expanding, QSizePolicy::Expanding)