26#ifndef CAMITK_COMPONENT_H
27#define CAMITK_COMPONENT_H
44#include <CamiTKDisableWarnings>
45#include <vtkWindowLevelLookupTable.h>
47#include <vtkAxesActor.h>
48#include <vtkImageActor.h>
49#include <CamiTKReEnableWarnings>
51#include <vtkImageData.h>
52#include <vtkPointSet.h>
53#include <vtkSmartPointer.h>
54#include <vtkAlgorithmOutput.h>
55#include <vtkActor2D.h>
56#include <vtkTransform.h>
62class vtkUnstructuredGridAlgorithm;
63class vtkDataSetToUnstructuredGridFilter;
64class vtkWindowLevelLookupTable;
77#define invoke0(HANDLER,METHOD) \
81#define invoke1(HANDLER,METHOD,PARAM) \
83 HANDLER->METHOD(PARAM);
85#define invoke2(HANDLER,METHOD,PARAM1,PARAM2) \
87 HANDLER->METHOD(PARAM1,PARAM2);
89#define invoke3(HANDLER,METHOD,PARAM1,PARAM2,PARAM3) \
91 HANDLER->METHOD(PARAM1,PARAM2,PARAM3);
93#define invoke4(HANDLER,METHOD,PARAM1,PARAM2,PARAM3,PARAM4) \
95 HANDLER->METHOD(PARAM1,PARAM2,PARAM3,PARAM4);
101#define invokeGet0(HANDLER,METHOD) \
103 return HANDLER->METHOD();
105#define invokeGet1(HANDLER,METHOD,PARAM) \
107 return HANDLER->METHOD(PARAM);
109#define invokeGet2(HANDLER,METHOD,PARAM1,PARAM2) \
111 return HANDLER->METHOD(PARAM1,PARAM2);
113#define invokeGet3(HANDLER,METHOD,PARAM1,PARAM2,PARAM3) \
115 return HANDLER->METHOD(PARAM1,PARAM2,PARAM3);
117#define invokeGet4(HANDLER,METHOD,PARAM1,PARAM2,PARAM3,PARAM4) \
119 return HANDLER->METHOD(PARAM1,PARAM2,PARAM3,PARAM4);
124#define invokeChildren0(METHOD) \
125foreach (Component *child, childrenComponent) { \
129#define invokeChildren1(METHOD,PARAM) \
130foreach (Component *child, childrenComponent) { \
131 child->METHOD(PARAM); \
134#define invokeChildren2(METHOD,PARAM1,PARAM2) \
135foreach (Component *child, childrenComponent) { \
136 child->METHOD(PARAM1,PARAM2); \
139#define invokeChildren3(METHOD,PARAM1,PARAM2,PARAM3) \
140foreach (Component *child, childrenComponent) { \
141 child->METHOD(PARAM1,PARAM2,PARAM3); \
144#define invokeChildren4(METHOD,PARAM1,PARAM2,PARAM3,PARAM4) \
145foreach (Component *child, childrenComponent) { \
146 child->METHOD(PARAM1,PARAM2,PARAM3,PARAM4); \
154#define delegate0(HANDLER,METHOD) \
155virtual void METHOD() override { \
156 invoke0(HANDLER,METHOD) \
159#define delegate1(HANDLER,METHOD,PARAM_TYPE) \
160virtual void METHOD(PARAM_TYPE param) override { \
161 invoke1(HANDLER,METHOD,param) \
164#define delegate2(HANDLER,METHOD,PARAM_TYPE1,PARAM_TYPE2) \
165virtual void METHOD(PARAM_TYPE1 param1, PARAM_TYPE2 param2) override { \
166 invoke2(HANDLER,METHOD,param1,param2) \
169#define delegate3(HANDLER,METHOD,PARAM_TYPE1,PARAM_TYPE2,PARAM_TYPE3) \
170virtual void METHOD(PARAM_TYPE1 param1, PARAM_TYPE2 param2, PARAM_TYPE3 param3) override { \
171 invoke3(HANDLER,METHOD,param1,param2,param3) \
174#define delegate4(HANDLER,METHOD,PARAM_TYPE1,PARAM_TYPE2,PARAM_TYPE3, PARAM_TYPE4) \
175virtual void METHOD(PARAM_TYPE1 param1, PARAM_TYPE2 param2, PARAM_TYPE3 param3, PARAM_TYPE4 param4) override { \
176 invoke4(HANDLER,METHOD,param1,param2,param3,param4) \
185#define delegateGet0(HANDLER,METHOD,TYPE) \
186virtual TYPE METHOD() override { \
187 invokeGet0(HANDLER,METHOD) \
192#define delegateGet1(HANDLER,METHOD,TYPE,PARAM_TYPE) \
193virtual TYPE METHOD(PARAM_TYPE param) override { \
194 invokeGet1(HANDLER,METHOD,param) \
199#define delegateGet2(HANDLER,METHOD,TYPE,PARAM1_TYPE,PARAM2_TYPE) \
200virtual TYPE METHOD(PARAM1_TYPE param1, PARAM2_TYPE param2) override { \
201 invokeGet2(HANDLER,METHOD,param1,param2) \
208#define delegateConstGet0(HANDLER,METHOD,TYPE) \
209virtual TYPE METHOD() const override { \
210 invokeGet0(HANDLER,METHOD) \
215#define delegateConstGet1(HANDLER,METHOD,TYPE,PARAM_TYPE) \
216virtual TYPE METHOD(PARAM_TYPE param) const override { \
217 invokeGet1(HANDLER,METHOD,param) \
226#define delegateAndInvokeChildren1(HANDLER,METHOD,PARAM_TYPE) \
227virtual void METHOD(PARAM_TYPE param) override { \
228 invoke1(HANDLER,METHOD,param) \
229 invokeChildren1(METHOD,param) \
232#define delegateAndInvokeChildren2(HANDLER,METHOD,PARAM_TYPE1,PARAM_TYPE2) \
233virtual void METHOD(PARAM_TYPE1 param1, PARAM_TYPE2 param2) override { \
234 invoke2(HANDLER,METHOD,param1,param2) \
235 invokeChildren2(METHOD,param1,param2) \
238#define delegateAndInvokeChildren1Array(HANDLER,METHOD,PARAM_TYPE1,PARAM_TYPE2,DIM) \
239virtual void METHOD(PARAM_TYPE1 param1, PARAM_TYPE2 param2[DIM]) override { \
240 invoke2(HANDLER,METHOD,param1,param2) \
241 invokeChildren2(METHOD,param1,param2) \
244#define delegateAndInvokeChildren3(HANDLER,METHOD,PARAM_TYPE1,PARAM_TYPE2,PARAM_TYPE3) \
245virtual void METHOD(PARAM_TYPE1 param1, PARAM_TYPE2 param2, PARAM_TYPE3 param3) override { \
246 invoke3(HANDLER,METHOD,param1,param2,param3) \
247 invokeChildren3(METHOD,param1,param2,param3) \
250#define delegateAndInvokeChildren4(HANDLER,METHOD,PARAM_TYPE1,PARAM_TYPE2,PARAM_TYPE3,PARAM_TYPE4) \
251virtual void METHOD(PARAM_TYPE1 param1, PARAM_TYPE2 param2, PARAM_TYPE3 param3,PARAM_TYPE4 param4) override { \
252 invoke4(HANDLER,METHOD,param1,param2,param3,param4) \
253 invokeChildren4(METHOD,param1,param2,param3,param4) \
328 Component(QString file, QString name, Representation
rep = NO_REPRESENTATION);
353 Representation getRepresentation()
const;
356 bool isTopLevel()
const;
368 virtual void setModified(
bool modified =
true);
371 virtual bool getModified()
const;
389 virtual
void setVisibility(QString,
bool);
392 virtual
bool getVisibility(QString) const;
413 CAMITK_API_DEPRECATED("refreshInterfaceNode() is not required anymore. Everything should now be done transparently (
if it does not work, use setNodeModified(true) to force
a specific
InterfaceNode refresh instead)") virtual
void refreshInterfaceNode();
417 virtual
bool isSelected() const;
423 virtual
void setSelected(const
bool b, const
bool recursive = true);
426 const QString getFileName() const;
429 void setFileName(const QString&);
432 bool event(QEvent* e) override;
435 QMenu* getActionMenu();
444 QStringList getHierarchy() const override;
447 bool isInstanceOf(QString className) const override;
453 unsigned int getNumberOfPropertyWidget()
override {
483 void updateProperty(QString name, QVariant value)
override;
493 indexOfPropertyExplorerTab = index;
504 return indexOfPropertyExplorerTab;
523 bool addProperty(
Property*)
override;
543 bool doubleClicked()
override;
548 void deleteChildren() override final;
549 QString getName() const override;
550 void setName(const QString&) override;
553 QPixmap getIcon() override;
554 void setNodeModified(
bool) override final;
555 bool getNodeModified() const override;
560 bool inItalic() const override;
563 QMenu* getPopupMenu(QWidget* parent =
nullptr)
override {
574 const QString getLabel()
const override;
577 void setLabel(QString newName)
override;
581 delegate1(myGeometry, setPointSet, vtkSmartPointer<vtkPointSet>)
583 delegate1(myGeometry, setPointData, vtkSmartPointer<vtkDataArray>)
587 delegate1(myGeometry, setDataConnection, vtkSmartPointer<vtkAlgorithmOutput>)
589 delegateGet1(myGeometry, getActor, vtkSmartPointer<vtkActor>, const RenderingModes)
595 vtkSmartPointer<vtkProp> getProp(const QString& param)
override {
597 return myGeometry->getProp(param);
600 return mySlice->getProp(param);
608 return myGeometry->getNumberOfProp();
611 return mySlice->getNumberOfProp();
617 vtkSmartPointer<vtkProp>
getProp(
unsigned int index)
override {
619 return myGeometry->getProp(index);
622 return mySlice->getProp(index);
628 bool addProp(
const QString& name, vtkSmartPointer<vtkProp> prop)
override {
630 return myGeometry->addProp(name, prop);
633 return mySlice->addProp(name, prop);
642 return myGeometry->removeProp(name);
645 return mySlice->removeProp(name);
664 void getBounds(
double* bounds)
override;
669 double getBoundingRadius()
override;
671 delegate4(myGeometry, setPointPosition,
const unsigned int,
const double,
const double,
const double)
681 virtual const EnhancedModes getEnhancedModes()
const override {
683 return myGeometry->getEnhancedModes();
686 return EnhancedModes();
695 void getActorColor(const RenderingModes,
double [4]) override;
707 delegate2(myGeometry, setMapperScalarRange,
double,
double)
709 delegate1(myGeometry, setTexture, vtkSmartPointer<vtkTexture>)
711 void setGlyphType(const GlyphTypes type, const
double size = 0.0) override;
713 virtual
void setLinesAsTubes(
bool isTubes = true,
bool radiusFromLength = true,
double radiusFactor = 1.0 / 40.0,
int numberOfSides = 5)
override {
715 myGeometry->setLinesAsTubes(isTubes, radiusFromLength, radiusFactor, numberOfSides);
719 delegate1(myGeometry, setMeshWorldTransform, vtkSmartPointer<vtkTransform>)
730 delegate1(mySlice, setOriginalVolume, vtkSmartPointer<vtkImageData>)
750 delegate3(mySlice, setPixelRealPosition,
double,
double,
double)
752 delegate1(mySlice, setImageWorldTransform, vtkSmartPointer<vtkTransform>)
754 delegate1(mySlice, setArbitraryTransform, vtkSmartPointer<vtkTransform>)
757 int getNumberOfSlices() const override;
760 int getSlice() const override;
769 const QString& getFrameName() const override;
775 void setParentFrame(
InterfaceFrame* frame,
bool keepTransform = true) override;
777 const QVector<
InterfaceFrame*>& getChildrenFrame() const override;
779 const vtkSmartPointer<vtkTransform> getTransformFromWorld() const override;
781 const vtkSmartPointer<vtkTransform> getTransform() const override;
783 const vtkSmartPointer<vtkTransform> getTransformFromFrame(
InterfaceFrame* frame) const override;
785 delegate1(myFrame, setTransform, vtkSmartPointer<vtkTransform>)
795 delegate3(myFrame, setTransformTranslation,
double,
double,
double)
797 delegate3(myFrame, setTransformTranslationVTK,
double,
double,
double)
799 delegate3(myFrame, setTransformRotation,
double,
double,
double)
801 delegate3(myFrame, setTransformRotationVTK,
double,
double,
double)
803 vtkSmartPointer<vtkAxesActor> getFrameAxisActor() override;
813 virtual
void setFrameVisibility(
Viewer*,
bool) override;
815 virtual
bool getFrameVisibility(
Viewer*) const override;
820 bool getFrameVisibility(QString) const override;
854 unsigned int indexOfPropertyExplorerTab;
875 virtual
void initRepresentation() = 0;
878 QMap<QString,
bool> myViewers;
884 QMenu* visibilityMenu;
887 QMap<QString,
Property*> propertyMap;
890 bool interfaceNodeModifiedFlag;
899 return isSelectedFlag;
909 return childrenComponent;
929 return QPixmap(0, 0);
942 myGeometry->setLabel(n);
945 setNodeModified(
true);
950 modifiedFlag = modification;
970 interfaceNodeModifiedFlag = nodeModified;
975 return interfaceNodeModifiedFlag;
#define CAMITK_API_DEPRECATED(X)
Definition: CamiTKAPI.h:94
#define CAMITK_API
Definition: CamiTKAPI.h:49
if(${CMAKE_VERSION} VERSION_GREATER "3.3" OR ${CMAKE_VERSION} VERSION_EQUAL "3.3") option(CAMITK_INCLUDE_WHAT_YOU_USE "Enable the header analysis on you code
A Component represents something that could be included in the explorer view, the interactive 3D view...
Definition: sdk/libraries/core/component/Component.h:302
void setIndexOfPropertyExplorerTab(unsigned int index) override final
Set the index of the tab in the ProperlyExplorer to select for display.
Definition: sdk/libraries/core/component/Component.h:492
delegateGet0(myGeometry, getPointSet, vtkSmartPointer< vtkPointSet >) delegate1(myGeometry
Representation
The different representation that can be implemented to represent this Component in the InteractiveVi...
Definition: sdk/libraries/core/component/Component.h:311
@ GEOMETRY
this Component can be displayed as a GEOMETRY
Definition: sdk/libraries/core/component/Component.h:312
@ SLICE
this Component can be displayed as a SLICE
Definition: sdk/libraries/core/component/Component.h:313
unsigned int getNumberOfProp() const override
return the number of additional prop
Definition: sdk/libraries/core/component/Component.h:606
unsigned int getIndexOfPropertyExplorerTab() override
Get the index of the tab in the ProperlyExplorer to select for display.
Definition: sdk/libraries/core/component/Component.h:503
InterfaceNode * getParent() override
get the parent Component
Definition: sdk/libraries/core/component/Component.h:918
delegate4(myGeometry, setPointPosition, const unsigned int, const double, const double, const double) delegateAndInvokeChildren1(myGeometry
InterfaceFrame * getFrame()
get the associated frame
Definition: sdk/libraries/core/component/Component.h:923
QObject * getPropertyObject() override
Get the property object that could be understood by PropertyEditor.
Definition: sdk/libraries/core/component/Component.h:473
bool removeProp(const QString &name) override
remove a given additional prop.
Definition: sdk/libraries/core/component/Component.h:640
bool inItalic() const override
A component name is not displayed in italic by default.
Definition: sdk/libraries/core/component/Component.h:933
void setName(const QString &) override
set the name to be displayed
Definition: sdk/libraries/core/component/Component.h:938
virtual void setModified(bool modified=true)
set the modified flag
Definition: sdk/libraries/core/component/Component.h:949
QString getName() const override
get the name to be displayed
Definition: sdk/libraries/core/component/Component.h:913
void pointPicked(vtkIdType, bool) override
an inherited class can redefine this method something specific.
Definition: sdk/libraries/core/component/Component.h:656
bool addProp(const QString &name, vtkSmartPointer< vtkProp > prop) override
insert an additional prop, defining it by its name (default visibility = false)
Definition: sdk/libraries/core/component/Component.h:628
void setNodeModified(bool) override final
Set up the node modification flag.
Definition: sdk/libraries/core/component/Component.h:969
QPixmap getIcon() override
Get the pixmap that will be displayed for this node.
Definition: sdk/libraries/core/component/Component.h:928
void cellPicked(vtkIdType, bool) override
an inherited class can redefine this method something specific.
Definition: sdk/libraries/core/component/Component.h:661
QWidget * getPropertyWidgetAt(unsigned int) override
Get the ith alternative property widget.
Definition: sdk/libraries/core/component/Component.h:461
virtual bool getModified() const
set the modified flag
Definition: sdk/libraries/core/component/Component.h:954
delegateAndInvokeChildren1Array(myGeometry, setActorColor, const RenderingModes, double, 4) delegateAndInvokeChildren4(myGeometry
const QString getLabel() const override
Definition: sdk/libraries/core/component/Component.h:959
bool getNodeModified() const override
Get the current modification flag.
Definition: sdk/libraries/core/component/Component.h:974
bool doubleClicked() override
This method is called each time the InterfaceNode is double clicked by the user.
Definition: sdk/libraries/core/component/Component.h:903
void setLabel(QString newName) override
set the string used to display the label, do the same as setName
Definition: sdk/libraries/core/component/Component.h:964
vtkSmartPointer< vtkProp > getProp(unsigned int index) override
return an additional prop by its index
Definition: sdk/libraries/core/component/Component.h:617
const ComponentList & getChildren() override
get the list of the InterfaceNode children (sub items in the hierarchy)
Definition: sdk/libraries/core/component/Component.h:908
This class describes what are the methods to implement for a BitMap.
Definition: InterfaceBitMap.h:68
This class describes what are the methods to implement in order to manage a Component position in spa...
Definition: InterfaceFrame.h:64
This class describes what are the methods to implement for a Geometry (rendering parameters,...
Definition: InterfaceGeometry.h:61
This class describe what are the methods to implement for a hierarchical tree node.
Definition: InterfaceNode.h:58
This class describe what are the methods to implement in order to manage dynamic properties.
Definition: InterfaceProperty.h:43
This class describes a property that can be used in components and actions or any class that needs to...
Definition: Property.h:280
Viewer is an abstract class that is the base class for all viewers.
Definition: Viewer.h:180
Definition: Action.cpp:35
vtkScalarBarRepresentation * rep
Definition: RendererWidget.cpp:554
QList< Component * > ComponentList
A list of Component.
Definition: CamiTKAPI.h:127
void refresh()
refresh the display
#define delegate3(HANDLER, METHOD, PARAM_TYPE1, PARAM_TYPE2, PARAM_TYPE3)
Definition: sdk/libraries/core/component/Component.h:169
#define delegate0(HANDLER, METHOD)
delegate macros: completely delegates METHOD to HANDLER, eventually using parameters of given PARAM_T...
Definition: sdk/libraries/core/component/Component.h:154
#define delegateAndInvokeChildren1(HANDLER, METHOD, PARAM_TYPE)
delegateAndInvokeChildren macros: Same as delegate but also calls METHOD, eventually with PARAM_TYPE,...
Definition: sdk/libraries/core/component/Component.h:226
#define delegateConstGet1(HANDLER, METHOD, TYPE, PARAM_TYPE)
Definition: sdk/libraries/core/component/Component.h:215
#define delegateAndInvokeChildren2(HANDLER, METHOD, PARAM_TYPE1, PARAM_TYPE2)
Definition: sdk/libraries/core/component/Component.h:232
#define delegate2(HANDLER, METHOD, PARAM_TYPE1, PARAM_TYPE2)
Definition: sdk/libraries/core/component/Component.h:164
#define delegate1(HANDLER, METHOD, PARAM_TYPE)
Definition: sdk/libraries/core/component/Component.h:159
#define delegateAndInvokeChildren4(HANDLER, METHOD, PARAM_TYPE1, PARAM_TYPE2, PARAM_TYPE3, PARAM_TYPE4)
Definition: sdk/libraries/core/component/Component.h:250
#define delegateGet0(HANDLER, METHOD, TYPE)
delegateGet macros: Same as delegate macro but for an accessor non-const METHOD, returns a value of t...
Definition: sdk/libraries/core/component/Component.h:185
#define delegateAndInvokeChildren3(HANDLER, METHOD, PARAM_TYPE1, PARAM_TYPE2, PARAM_TYPE3)
Definition: sdk/libraries/core/component/Component.h:244
#define delegateGet1(HANDLER, METHOD, TYPE, PARAM_TYPE)
Definition: sdk/libraries/core/component/Component.h:192
#define delegateConstGet0(HANDLER, METHOD, TYPE)
delegateConstGet macros: Same as delegateGet but for const METHOD
Definition: sdk/libraries/core/component/Component.h:208