Computer Assited Medical Intervention Tool Kit  version 5.0
camitk::ArbitrarySingleImageComponent Class Reference

This Component manages the specific case of arbitrary orientation of a sub-component of the image component. More...

#include <ArbitrarySingleImageComponent.h>

+ Inheritance diagram for camitk::ArbitrarySingleImageComponent:
+ Collaboration diagram for camitk::ArbitrarySingleImageComponent:

Public Member Functions

 ArbitrarySingleImageComponent (Component *parentComponent, const QString &name, vtkSmartPointer< vtkWindowLevelLookupTable > lut)
 Constructor. More...
 
 ~ArbitrarySingleImageComponent () override=default
 Destructor. More...
 
overriden from Component to manage arbitrary orientation

same as default but notify the slice as well

virtual void setTransform (vtkSmartPointer< vtkTransform >) override
 Set the current input frame position (according to its parent Frame) More...
 
virtual void resetTransform () override final
 reset the transformation to the image component parent so that the frame of the arbitrary slice is in the center of the volume along the z axis by default More...
 
virtual void setTransformTranslation (double, double, double) override final
 set the arbitrary slice translation inside the volume between 0 and 1 (first two parameters are ignored) More...
 
virtual void setTransformRotation (double, double, double) override final
 rotate of the given angles around the center of the frame/arbitrary slice More...
 
virtual CAMITK_API_UNIMPLEMENTED void translate (double, double, double) override
 translation along the z axis (TODO implement this method) More...
 
virtual CAMITK_API_UNIMPLEMENTED void rotate (double, double, double) override
 rotate on the slide center (TODO implement this method) More...
 
virtual CAMITK_API_UNIMPLEMENTED void rotateVTK (double, double, double) override
 rotate on the slide center using the VTK way (TODO implement this method) More...
 
virtual CAMITK_API_UNIMPLEMENTED void setTransformTranslationVTK (double, double, double) override
 set translation the VTK way (TODO implement this method) More...
 
virtual CAMITK_API_UNIMPLEMENTED void setTransformRotationVTK (double, double, double) override
 set rotation the VTK way (TODO implement this method) More...
 
virtual void setSlice (int) override
 set slice as a percentage on the z axis translation More...
 
virtual void setSlice (double, double, double) override
 rewritten because the setSlice(int) method is overriden (compiler needs this) More...
 
virtual int getSlice () const override
 return the slice as the percentage of translation (between 0 and 100) More...
 
virtual int getNumberOfSlices () const override
 always return 100 (as getSlice() gives a percentage value, the max number of slices is 100. More...
 
virtual void pixelPicked (double, double, double) override
 This method is called when the arbitrary image has been picked in the arbitrary InteractiveViewer, The given coordinates is position where the plane was picked. More...
 
Specific helper methods to manage arbitrary orientation and its representation
virtual double getTranslationInVolume ()
 Get the current translation relatively to the volume 0.0 means that the center of the slice is at the first border of the image volume 1.0 means that the center of the slice is. More...
 
void getImageCenterAndTranslationVectorInParent (double C_P[4], double Z_P[4])
 Compute the current position of the image center and the z direction vector in the parent coordinate system (i.e. More...
 
void getImageCenterInParent (double[4])
 get the current position of the image center in the parent coordinate system i.e the image frame (given as homogeneous point, hence 4D) More...
 
- Public Member Functions inherited from camitk::SingleImageComponent
Slice::SliceOrientation getSliceOrientation ()
 get the slice orientation More...
 
virtual void setSelected (const bool, const bool) override
 rewritten to synchronize everyone More...
 
 SingleImageComponent (Component *parentComponent, Slice::SliceOrientation, const QString &name, vtkSmartPointer< vtkWindowLevelLookupTable > lut)
 Constructor. More...
 
virtual void singleImageSelected (const bool)
 new method used to call the Component set selected More...
 
 ~SingleImageComponent () override=default
 Destructor. More...
 
- Public Member Functions inherited from camitk::Component
 Component (QString file, QString name, Representation rep=NO_REPRESENTATION)
 Component constructor for top-level component (please use the other constructor for sub-level components). More...
 
 Component (Component *parentComponent, const QString &name, Representation rep=NO_REPRESENTATION)
 Component constructor for a Component that is a child of another Component You should not use this constructor for a top-level component. More...
 
 ~Component () override
 default destructor. More...
 
Representation getRepresentation () const
 return the type of representation concretely implemented by this Component in the InteractiveViewer. More...
 
bool isTopLevel () const
 return true if this component is a top-level component More...
 
ComponentgetParentComponent ()
 get the parent component More...
 
ComponentgetTopLevelComponent ()
 get the top-level component More...
 
InterfaceFramegetFrame ()
 get the associated frame More...
 
virtual void setModified (bool modified=true)
 set the modified flag More...
 
virtual bool getModified () const
 set the modified flag More...
 
virtual void setVisibility (QString, bool)
 set the visibility inside the viewer of the given name (the viewer needs to be a registered viewer) More...
 
virtual bool getVisibility (QString) const
 get the visibility inside the viewer of the given name More...
 
virtual void refresh ()
 refresh all the viewer that are currently displaying this Component At the end the InterfaceNode modification flag is reset. More...
 
virtual bool isSelected () const
 Check if this data component is selected. More...
 
const QString getFileName () const
 get the file name where the data have to be stored/were stored More...
 
void setFileName (const QString &)
 set the file name where the data have to be stored More...
 
bool event (QEvent *e) override
 Overriden from QObject, this one is only intercepting signal for dynamic property changed (see constructor). More...
 
QMenu * getActionMenu ()
 Get a QMenu that contains all the action that can be applied to this component. More...
 
QStringList getHierarchy () const override
 
bool isInstanceOf (QString className) const override
 Assert that a Component instance really inherits from a given className. More...
 
unsigned int getNumberOfPropertyWidget () override
 get the number of alternative property widgets More...
 
QWidget * getPropertyWidgetAt (unsigned int) override
 Get the ith alternative property widget. More...
 
QObject * getPropertyObject () override
 Get the property object that could be understood by PropertyEditor. More...
 
void updateProperty (QString name, QVariant value) override
 update property: if you this method, do not forget to call the superclass method for the property not managed locally in order to properly manage all inherited dynamic properties. More...
 
void setIndexOfPropertyExplorerTab (unsigned int index) override final
 Set the index of the tab in the ProperlyExplorer to select for display. More...
 
unsigned int getIndexOfPropertyExplorerTab () override
 Get the index of the tab in the ProperlyExplorer to select for display. More...
 
Q_INVOKABLE camitk::PropertygetProperty (QString name) override
 Get a Property given its name. More...
 
bool addProperty (Property *) override
 Add a new CamiTK property to the component. More...
 
void removeChild (InterfaceNode *) override
 remove a child node. More...
 
void setParent (InterfaceNode *) override
 set the parent Component. More...
 
bool doubleClicked () override
 This method is called each time the InterfaceNode is double clicked by the user. More...
 
void addChild (InterfaceNode *) override
 add a child Component (sub item in the hierarchy), and modify the child's parent to be equal to this instance More...
 
void attachChild (InterfaceNode *) override
 add a child Component (but leave its parent unchanged) More...
 
void deleteChildren () override final
 delete all sub Component, but do not delete the pointer (only the top-level component has the right to do that) More...
 
QString getName () const override
 get the name to be displayed More...
 
void setName (const QString &) override
 set the name to be displayed More...
 
const ComponentListgetChildren () override
 get the list of the InterfaceNode children (sub items in the hierarchy) More...
 
InterfaceNodegetParent () override
 get the parent Component More...
 
QPixmap getIcon () override
 Get the pixmap that will be displayed for this node. More...
 
void setNodeModified (bool) override final
 Set up the node modification flag. More...
 
bool getNodeModified () const override
 Get the current modification flag. More...
 
bool inItalic () const override
 A component name is not displayed in italic by default. More...
 
QMenu * getPopupMenu (QWidget *parent=nullptr) override
 get the popup menu to display (always return nullptr, overwrite this method if you want to give here you own popup) More...
 
const QString getLabel () const override
 
void setLabel (QString newName) override
 set the string used to display the label, do the same as setName More...
 
 delegateGet0 (myGeometry, getPointSet, vtkSmartPointer< vtkPointSet >) delegate1(myGeometry
 
vtkSmartPointer< vtkPointSet > delegate1 (myGeometry, setPointData, vtkSmartPointer< vtkDataArray >) delegateConstGet0(myGeometry
 
vtkSmartPointer< vtkPointSet > vtkSmartPointer< vtkAlgorithmOutput > delegate1 (myGeometry, setDataConnection, vtkSmartPointer< vtkAlgorithmOutput >) delegateGet1(myGeometry
 
vtkSmartPointer< vtkPointSet > vtkSmartPointer< vtkAlgorithmOutput > const RenderingModes vtkSmartPointer< vtkProp > getProp (const QString &param) override
 Return the vtkProp (actors, volumes and annotations) corresponding to the given name. More...
 
unsigned int getNumberOfProp () const override
 return the number of additional prop More...
 
vtkSmartPointer< vtkProp > getProp (unsigned int index) override
 return an additional prop by its index More...
 
bool addProp (const QString &name, vtkSmartPointer< vtkProp > prop) override
 insert an additional prop, defining it by its name (default visibility = false) More...
 
bool removeProp (const QString &name) override
 remove a given additional prop. More...
 
void pointPicked (vtkIdType, bool) override
 an inherited class can redefine this method something specific. More...
 
void cellPicked (vtkIdType, bool) override
 an inherited class can redefine this method something specific. More...
 
void getBounds (double *bounds) override
 compute the object's bounding box [xmin,xmax, ymin,ymax, zmin,zmax], see Component.cpp More...
 
double getBoundingRadius () override
 compute the object's bounding sphere radius, More...
 
 delegate4 (myGeometry, setPointPosition, const unsigned int, const double, const double, const double) delegateAndInvokeChildren1(myGeometry
 
const const RenderingModes InterfaceGeometry::RenderingModes getRenderingModes () const override
 see Component.cpp More...
 
 delegateAndInvokeChildren1 (myGeometry, setEnhancedModes, const EnhancedModes) virtual const EnhancedModes getEnhancedModes() const override
 
 delegateAndInvokeChildren1Array (myGeometry, setActorColor, const RenderingModes, double, 4) delegateAndInvokeChildren4(myGeometry
 
const const const const double void getActorColor (const RenderingModes, double[4]) override
 see Component.cpp More...
 
 delegateAndInvokeChildren3 (myGeometry, setColor, const double, const double, const double) delegateAndInvokeChildren4(myGeometry
 
const const const const double delegateAndInvokeChildren2 (myGeometry, setActorOpacity, const RenderingModes, const double) delegateConstGet1(myGeometry
 
const const const const double const RenderingModes delegateAndInvokeChildren1 (myGeometry, setOpacity, const double) delegate2(myGeometry
 
const const const const double const RenderingModes double delegate1 (myGeometry, setTexture, vtkSmartPointer< vtkTexture >) void setGlyphType(const GlyphTypes type
 
 delegate1 (myGeometry, setLinesAsTubes, bool) delegate1(myGeometry
 
 delegateConstGet0 (mySlice, getImageData, vtkSmartPointer< vtkImageData >) delegate1(mySlice
 
vtkSmartPointer< vtkImageData > delegateConstGet0 (mySlice, get2DImageActor, vtkSmartPointer< vtkImageActor >) delegateConstGet0(mySlice
 
vtkSmartPointer< vtkImageData > vtkSmartPointer< vtkImageActor > delegateConstGet0 (mySlice, getPickPlaneActor, vtkSmartPointer< vtkActor >) delegateGet0(mySlice
 
vtkSmartPointer< vtkImageData > vtkSmartPointer< vtkImageActor > vtkSmartPointer< vtkActor > delegate3 (mySlice, pixelPicked, double, double, double) delegate0(mySlice
 
vtkSmartPointer< vtkImageData > vtkSmartPointer< vtkImageActor > vtkSmartPointer< vtkActor > updatePickPlane delegate1 (mySlice, setSlice, int) delegate3(mySlice
 
vtkSmartPointer< vtkImageData > vtkSmartPointer< vtkImageActor > vtkSmartPointer< vtkActor > updatePickPlane double delegateConstGet0 (mySlice, getNumberOfColors, int) delegate3(mySlice
 
vtkSmartPointer< vtkImageData > vtkSmartPointer< vtkImageActor > vtkSmartPointer< vtkActor > updatePickPlane double double delegate1 (mySlice, setImageWorldTransform, vtkSmartPointer< vtkTransform >) delegate1(mySlice
 
const QString & getFrameName () const override
 Hierarchy accessors / Modifyers. More...
 
 delegate1 (myFrame, setFrameName, QString) InterfaceFrame *getParentFrame() const override
 
void setParentFrame (InterfaceFrame *frame, bool keepTransform=true) override
 Set the parent frame and update or not its transform during the parent transition. More...
 
const QVector< InterfaceFrame * > & getChildrenFrame () const override
 Get the Children Frames from the current Frame in the Frame Hierarchy The Frame hierarchy may not be the same as the Component Hierarchy. More...
 
const vtkSmartPointer< vtkTransform > getTransformFromWorld () const override
 Transforms accessors / Modifyers. More...
 
const vtkSmartPointer< vtkTransform > getTransform () const override
 Get the transformation with respect to the parent frame. More...
 
const vtkSmartPointer< vtkTransform > getTransformFromFrame (InterfaceFrame *frame) const override
 Compute the transformation from any other frame to the current frame. More...
 
 delegate1 (myFrame, setTransform, vtkSmartPointer< vtkTransform >) delegate0(myFrame
 
resetTransform delegate3 (myFrame, translate, double, double, double) delegate3(myFrame
 
resetTransform double delegate3 (myFrame, rotateVTK, double, double, double) delegate3(myFrame
 
resetTransform double double delegate3 (myFrame, setTransformTranslationVTK, double, double, double) delegate3(myFrame
 
resetTransform double double double delegate3 (myFrame, setTransformRotationVTK, double, double, double) vtkSmartPointer< vtkAxesActor > getFrameAxisActor() override
 
 delegate2 (myFrame, setFrameVisibility, QString, bool) bool getFrameVisibility(QString) const override
 
 delegate1 (myFrame, addFrameChild, InterfaceFrame *) delegate1(myFrame
 
- Public Member Functions inherited from camitk::InterfaceProperty
 ~InterfaceProperty ()=default
 empty virtual destructor, to avoid memory leak More...
 
- Public Member Functions inherited from camitk::InterfaceNode
virtual ~InterfaceNode ()=default
 empty virtual destructor, to avoid memory leak More...
 
- Public Member Functions inherited from camitk::InterfaceGeometry
virtual ~InterfaceGeometry ()=default
 empty virtual destructor, to avoid memory leak More...
 
virtual vtkSmartPointer< vtkPointSet > getPointSet ()=0
 
virtual void setPointSet (vtkSmartPointer< vtkPointSet >)=0
 set the low-level data set. More...
 
virtual void setPointData (vtkSmartPointer< vtkDataArray >)=0
 set the point data (may contains a lookup table). More...
 
virtual void setMeshWorldTransform (vtkSmartPointer< vtkTransform >)=0
 set the transformation for 3D representation More...
 
virtual vtkSmartPointer< vtkAlgorithmOutput > getDataPort () const =0
 get the custom algorithm pipeline input. More...
 
virtual void setDataConnection (vtkSmartPointer< vtkAlgorithmOutput >)=0
 Set/reset the connection for the InterfaceGeometry internal algorithm. More...
 
virtual void setTexture (vtkSmartPointer< vtkTexture >)=0
 Set a texture to this object. More...
 
virtual vtkSmartPointer< vtkActor > getActor (const RenderingModes)=0
 Return the actor for the representation mode, NULL if the actor doesn't exist. More...
 
virtual void setPointPosition (const unsigned int orderNumber, const double x, const double y, const double z)=0
 set a given point position More...
 
virtual void setRenderingModes (const RenderingModes)=0
 
virtual void setEnhancedModes (const EnhancedModes)=0
 set the enhanced mode More...
 
virtual const EnhancedModes getEnhancedModes () const =0
 get the current enhanced mode More...
 
virtual void setActorColor (const RenderingModes, double *color)=0
 Set the color of given representation modes. More...
 
virtual void setActorColor (const RenderingModes, const double, const double, const double)=0
 Set the color of given representation modes. More...
 
virtual void getActorColor (const RenderingModes mode, double *color)=0
 Get the color of given representation modes in the second parameter. More...
 
virtual void setColor (const double, const double, const double)=0
 Set an (r,g,b) color to all representation modes, without changing the opacity. More...
 
virtual void setColor (const double, const double, const double, const double)=0
 Set an (r,g,b,a) color to all representation modes. More...
 
virtual void setActorOpacity (const RenderingModes, const double)=0
 Set the opacity of this representation modes. WARNING color field (surfaceColor, ...) are not modified! More...
 
virtual double getActorOpacity (const RenderingModes) const =0
 Return the opacity of a given renderng mode. More...
 
virtual void setOpacity (const double)=0
 Set the opacity of this object. WARNING color field (surfaceColor, ...) are not modified! More...
 
virtual void setMapperScalarRange (double min, double max)=0
 Set the mapper scalar range. More...
 
virtual void setGlyphType (const GlyphTypes type, const double size=0.0)=0
 Set the glyph type (a glyph is a geometric representation attached to every point in the input dataset). More...
 
virtual void setLinesAsTubes (bool)=0
 set the lines as tubes (works only for vtkDataSet representation that contains lines) More...
 
- Public Member Functions inherited from camitk::InterfaceBitMap
virtual vtkSmartPointer< vtkImageActor > get2DImageActor () const =0
 Return the vtkImageActor (vtkProp) representing a slice to be displayed in 2D viewers. More...
 
virtual vtkSmartPointer< vtkImageActor > get3DImageActor () const =0
 Return the vtkImageActor (vtkProp) representing a slice to be displayed in 3D viewers. More...
 
virtual vtkSmartPointer< vtkImageData > getImageData () const =0
 Returns the encapsultaed data structure: the image as a vtkImageData. More...
 
virtual int getNumberOfColors () const =0
 Return the number of colors in the images. More...
 
virtual vtkSmartPointer< vtkActor > getPickPlaneActor () const =0
 Return the vtkActor used to pick pixels in the slices. More...
 
virtual vtkSmartPointer< vtkActor > getPixelActor ()=0
 Return the vtkActor used to pick pixels in the slices. More...
 
virtual void setArbitraryTransform (vtkSmartPointer< vtkTransform >)=0
 Set the pointer to the image transformation. More...
 
virtual void setImageWorldTransform (vtkSmartPointer< vtkTransform >)=0
 set the transformation for 3D image representation More...
 
virtual void setOriginalVolume (vtkSmartPointer< vtkImageData >)=0
 set the original volume image data (the source vtkImageData before any reslice) and refresh the vtk pipeline More...
 
virtual void setPixelRealPosition (double, double, double)=0
 move the pixel selection green indicator (pixelActor) to the given real position More...
 
virtual void updatePickPlane ()=0
 update the position of the plane surrounding the currently selected slice More...
 
virtual ~InterfaceBitMap ()=default
 virtual destructor More...
 
- Public Member Functions inherited from camitk::InterfaceFrame
virtual void addFrameChild (InterfaceFrame *frame)=0
 Add the input frame as a child of the current frame. More...
 
virtual vtkSmartPointer< vtkAxesActor > getFrameAxisActor ()=0
 Gives the 3D representation of the frame (based on xyz arrows) More...
 
virtual bool getFrameVisibility (QString) const =0
 Get the Component Frame visibility for a given viewer. More...
 
virtual void removeFrameChild (InterfaceFrame *frame)=0
 Remove the input frame as a child of the current frame. More...
 
virtual void setFrameVisibility (QString, bool)=0
 Set the Component Frame visible for a given viewer. More...
 
virtual ~InterfaceFrame ()=default
 empty virtual destructor, to avoid memory leak More...
 
virtual void setFrameName (QString name)=0
 Set the Frame Unique identifyer. More...
 
virtual InterfaceFramegetParentFrame () const =0
 Get the parent frame. More...
 

Private Member Functions

bool checkCenter (vtkSmartPointer< vtkMatrix4x4 >)
 check if the center of the frame transformed usin the given matrix stays inside the initial image volume More...
 
bool pointInsideVolume (QVector3D)
 return true only in point is inside the image volume More...
 
void updateTranslationExtremity ()
 update cPlus and cMinus More...
 

Static Private Member Functions

Math utility methods

TODO have this in a specific class?

variadic method that enables clear expression of the transformation composition chain Instead of using vtkMatrix4x4::Multiply4x4 multiple times, these methods allow for expressing all transformation in one line. For instance:

vtkSmartPointer<vtkMatrix4x4> intermediate1 = vtkSmartPointer<vtkMatrix4x4>::New();
vtkMatrix4x4::Multiply4x4(a, b, intermediate1);
vtkSmartPointer<vtkMatrix4x4> intermediate2 = vtkSmartPointer<vtkMatrix4x4>::New();
vtkMatrix4x4::Multiply4x4(intermediate1, c, intermediate2);
vtkSmartPointer<vtkMatrix4x4> resultingTransformation = vtkSmartPointer<vtkMatrix4x4>::New();
vtkMatrix4x4::Multiply4x4(intermediate2, d, resultingTransformation);

You can just write:

vtkSmartPointer<vtkMatrix4x4> resultingTransformation = Multiply4x4(a, b, c, d);

which result in a much clearer/cleaner way of expressing the transformation composition

template<typename T >
static vtkSmartPointer< vtkMatrix4x4 > Multiply4x4 (T, T)
 
template<typename T , typename... Args>
static vtkSmartPointer< vtkMatrix4x4 > Multiply4x4 (T a, T b, Args... args)
 
static bool linePlaneIntersectionPoint (QVector3D, QVector3D, QVector3D, QVector3D, QVector3D &)
 compute the intersection between a line and a plane More...
 
static float roundTo4Decimals (float)
 Round a float to 4 digits This is a great tool to avoid precision errors (when rotation/cos/sin are around, precision is difficult to maintain) More...
 
static QVector3D roundTo4Decimals (QVector3D)
 Round a QVector3D to 4 digits This is a great tool to avoid precision errors (when rotation/cos/sin are around, precision is difficult to maintain) More...
 

Private Attributes

QVector3D cMinus_P
 point of intersection of the line passing at the center of the image in the z- direction, i.e. More...
 
QVector3D cPlus_P
 point of intersection of the line passing at the center of the image in the z+ direction, i.e. More...
 
int * dimensions
 dimension of the whole image (kept here for simplifying code) More...
 
doublespacing
 spacing of the image (kept here for simplifying code) More...
 

Additional Inherited Members

- Public Types inherited from camitk::Component
enum  Representation { GEOMETRY, SLICE, NO_REPRESENTATION }
 
- Public Types inherited from camitk::InterfaceGeometry
enum  EnhancedMode { Normal = 0x0, Hidden = 0x1, Shaded = 0x2, Highlighted = 0x4 }
 
enum  GlyphType { NoGlyph = 0x0, Sphere = 0x1 }
 
enum  RenderingMode { None = 0x0, Surface = 0x1, Wireframe = 0x2, Points = 0x4 }
 
- Public Attributes inherited from camitk::Component
 setPointSet
 
vtkSmartPointer< vtkPointSet > getDataPort
 
vtkSmartPointer< vtkPointSet > vtkSmartPointer< vtkAlgorithmOutput > getActor
 
vtkSmartPointer< vtkPointSet > vtkSmartPointer< vtkAlgorithmOutput > vtkSmartPointer< vtkActor >
 
 setRenderingModes
 
 setActorColor
 
const RenderingModes
 
const const double
 
const const const double
 
 setColor
 
const double
 
const const const const double getActorOpacity
 
const const const const double double
 
const const const const double const RenderingModes setMapperScalarRange
 
const const const const double const RenderingModes double
 
const const const const double const RenderingModes double const double size = 0.0) override
 
 setMeshWorldTransform
 
 setOriginalVolume
 
vtkSmartPointer< vtkImageData > get3DImageActor
 
vtkSmartPointer< vtkImageData > vtkSmartPointer< vtkImageActor > getPixelActor
 
vtkSmartPointer< vtkImageData > vtkSmartPointer< vtkImageActor > vtkSmartPointer< vtkActor > updatePickPlane setSlice
 
vtkSmartPointer< vtkImageData > vtkSmartPointer< vtkImageActor > vtkSmartPointer< vtkActor > updatePickPlane double
 
vtkSmartPointer< vtkImageData > vtkSmartPointer< vtkImageActor > vtkSmartPointer< vtkActor > updatePickPlane double setPixelRealPosition
 
vtkSmartPointer< vtkImageData > vtkSmartPointer< vtkImageActor > vtkSmartPointer< vtkActor > updatePickPlane double double
 
vtkSmartPointer< vtkImageData > vtkSmartPointer< vtkImageActor > vtkSmartPointer< vtkActor > updatePickPlane double double setArbitraryTransform
 
resetTransform rotate
 
resetTransform double
 
resetTransform double setTransformTranslation
 
resetTransform double double
 
resetTransform double double setTransformRotation
 
resetTransform double double double
 
 removeFrameChild
 
- Protected Member Functions inherited from camitk::SingleImageComponent
virtual void initRepresentation () override final
 The concrete building of the Service (Slice in this case, for a 2D representation). More...
 
- Protected Attributes inherited from camitk::SingleImageComponent
vtkSmartPointer< vtkWindowLevelLookupTable > lut
 Look up table used for this image. More...
 
Slice::SliceOrientation sliceOrientation
 orientation of the single image component More...
 
- Protected Attributes inherited from camitk::Component
ComponentList childrenComponent
 The explorer sub items. More...
 
unsigned int indexOfPropertyExplorerTab
 The PropertyExplorer tab index to select once refreshed. More...
 
bool isSelectedFlag
 tells if this particular Component is selected or not More...
 
bool modifiedFlag
 the modification flag (could be extended to manage a undo/redo list) More...
 
QString myFileName
 the file name from which the Component is loaded More...
 
InterfaceFramemyFrame
 myFrame is the pose (position and orientation) of the Component in the world frame, the Component delegates all InterfaceFrame activity to myFrame (delegation pattern) More...
 
InterfaceGeometrymyGeometry
 myGeometry is the 3d representation of this Component, the Component delegates all InterfaceGeometry activity to myGeometry (delegation pattern) More...
 
InterfaceNodemyParentNode
 who is the boss? The Component! More...
 
InterfaceBitMapmySlice
 mySlice is the slice representation of this data component, the Component delegates all InterfaceBitMap activity to mySlice (delegation pattern) More...
 
- Properties inherited from camitk::SingleImageComponent
bool viewSliceIn3D
 Set Axial, Coronal and Sagittal Slices visible in 3D. More...
 

Detailed Description

This Component manages the specific case of arbitrary orientation of a sub-component of the image component.

Arbitrary slice frame is used to position and orientate the slice inside the parent image volume.

It does have a Slice representation (InterfaceBitMap), not a Geometry.

Some frame management methods (inherited from InterfaceFrame) are overriden in order to manage the arbitrary orientation.

These method should allow the displacement but constrained it so that the center of the arbitrary slice is always inside the parent ImageComponent volume.

For arbitrary slice, the default transform is set to be on the z plane but in the middle of the volume.

The initial position of the frame has therefore no rotation and a translation equals to (0, 0, dim[2]*spacing[2])

Note:

  • setSlice methods on arbitrary slice do nothing
  • getSlice and getNumberOfSlices return 0.0 Use getTranslationInVolume() method to know where the slice is relatively to the parent ImageComponent.

Constructor & Destructor Documentation

◆ ArbitrarySingleImageComponent()

camitk::ArbitrarySingleImageComponent::ArbitrarySingleImageComponent ( Component parentComponent,
const QString &  name,
vtkSmartPointer< vtkWindowLevelLookupTable >  lut 
)

Constructor.

◆ ~ArbitrarySingleImageComponent()

camitk::ArbitrarySingleImageComponent::~ArbitrarySingleImageComponent ( )
overridedefault

Destructor.

Member Function Documentation

◆ checkCenter()

bool camitk::ArbitrarySingleImageComponent::checkCenter ( vtkSmartPointer< vtkMatrix4x4 >  transform)
private

check if the center of the frame transformed usin the given matrix stays inside the initial image volume

◆ getImageCenterAndTranslationVectorInParent()

void camitk::ArbitrarySingleImageComponent::getImageCenterAndTranslationVectorInParent ( double  C_P[4],
double  Z_P[4] 
)

Compute the current position of the image center and the z direction vector in the parent coordinate system (i.e.

image frame)

References CAMITK_WARNING.

Referenced by MeshProjection::getNewPlane().

+ Here is the caller graph for this function:

◆ getImageCenterInParent()

void camitk::ArbitrarySingleImageComponent::getImageCenterInParent ( double  C_P[4])

get the current position of the image center in the parent coordinate system i.e the image frame (given as homogeneous point, hence 4D)

References CAMITK_WARNING.

Referenced by MeshProjection::updateCuttingPlane().

+ Here is the caller graph for this function:

◆ getNumberOfSlices()

int camitk::ArbitrarySingleImageComponent::getNumberOfSlices ( ) const
overridevirtual

always return 100 (as getSlice() gives a percentage value, the max number of slices is 100.

Note
To set the slice using absolute value, please use setTransformTranslation and getTranslationInVolume instead

Reimplemented from camitk::Component.

References a.

◆ getSlice()

int camitk::ArbitrarySingleImageComponent::getSlice ( ) const
overridevirtual

return the slice as the percentage of translation (between 0 and 100)

Note
To set the slice using absolute value, please use setTransformTranslation and getTranslationInVolume instead

Reimplemented from camitk::Component.

◆ getTranslationInVolume()

double camitk::ArbitrarySingleImageComponent::getTranslationInVolume ( )
virtual

Get the current translation relatively to the volume 0.0 means that the center of the slice is at the first border of the image volume 1.0 means that the center of the slice is.

Note
: the center of the slice is the center of rotation
See also

Referenced by AnglesAndTranslationAction::update(), and AnglesAndTranslationAction::updateTranslation().

+ Here is the caller graph for this function:

◆ linePlaneIntersectionPoint()

bool camitk::ArbitrarySingleImageComponent::linePlaneIntersectionPoint ( QVector3D  lineVector,
QVector3D  linePoint,
QVector3D  planeNormal,
QVector3D  planePoint,
QVector3D &  intersection 
)
staticprivate

compute the intersection between a line and a plane

See also
http://www.realtimerendering.com/intersections.html
Parameters
lineVectora vector in the direction of the line
linePointa point on the line
planeNormala normal vector to the plane
planePointa point on the plane
intersection(output) the point of intersection between the line and the plane
Returns
false if there is no intersection, true otherwise

◆ Multiply4x4() [1/2]

template<typename T , typename... Args>
vtkSmartPointer< vtkMatrix4x4 > camitk::ArbitrarySingleImageComponent::Multiply4x4 ( a,
b,
Args...  args 
)
staticprivate

References dotProduct().

+ Here is the call graph for this function:

◆ Multiply4x4() [2/2]

template<typename T >
vtkSmartPointer< vtkMatrix4x4 > camitk::ArbitrarySingleImageComponent::Multiply4x4 ( a,
b 
)
staticprivate

◆ pixelPicked()

void camitk::ArbitrarySingleImageComponent::pixelPicked ( double  x,
double  y,
double  z 
)
overridevirtual

This method is called when the arbitrary image has been picked in the arbitrary InteractiveViewer, The given coordinates is position where the plane was picked.

We need to use the

Reimplemented from camitk::SingleImageComponent.

◆ pointInsideVolume()

bool camitk::ArbitrarySingleImageComponent::pointInsideVolume ( QVector3D  p)
private

return true only in point is inside the image volume

◆ resetTransform()

void camitk::ArbitrarySingleImageComponent::resetTransform ( )
finaloverridevirtual

reset the transformation to the image component parent so that the frame of the arbitrary slice is in the center of the volume along the z axis by default

Reimplemented from camitk::SingleImageComponent.

Referenced by AnglesAndTranslationAction::resetTransform().

+ Here is the caller graph for this function:

◆ rotate()

void camitk::ArbitrarySingleImageComponent::rotate ( double  aroundX,
double  aroundY,
double  aroundZ 
)
overridevirtual

rotate on the slide center (TODO implement this method)

Reimplemented from camitk::SingleImageComponent.

◆ rotateVTK()

void camitk::ArbitrarySingleImageComponent::rotateVTK ( double  aroundX,
double  aroundY,
double  aroundZ 
)
overridevirtual

rotate on the slide center using the VTK way (TODO implement this method)

Reimplemented from camitk::SingleImageComponent.

◆ roundTo4Decimals() [1/2]

float camitk::ArbitrarySingleImageComponent::roundTo4Decimals ( float  input)
staticprivate

Round a float to 4 digits This is a great tool to avoid precision errors (when rotation/cos/sin are around, precision is difficult to maintain)

◆ roundTo4Decimals() [2/2]

QVector3D camitk::ArbitrarySingleImageComponent::roundTo4Decimals ( QVector3D  input)
staticprivate

Round a QVector3D to 4 digits This is a great tool to avoid precision errors (when rotation/cos/sin are around, precision is difficult to maintain)

◆ setSlice() [1/2]

void camitk::ArbitrarySingleImageComponent::setSlice ( double  x,
double  y,
double  z 
)
overridevirtual

rewritten because the setSlice(int) method is overriden (compiler needs this)

Implements camitk::InterfaceBitMap.

◆ setSlice() [2/2]

void camitk::ArbitrarySingleImageComponent::setSlice ( int  s)
overridevirtual

set slice as a percentage on the z axis translation

Note
To set the slice using absolute value, please use setTransformTranslation and getTranslationInVolume instead

Implements camitk::InterfaceBitMap.

◆ setTransform()

void camitk::ArbitrarySingleImageComponent::setTransform ( vtkSmartPointer< vtkTransform >  transform)
overridevirtual

Set the current input frame position (according to its parent Frame)

Parameters
transformThe 3D transform of the current frame to its parent.

Reimplemented from camitk::SingleImageComponent.

◆ setTransformRotation()

void camitk::ArbitrarySingleImageComponent::setTransformRotation ( double  angleX,
double  angleY,
double  angleZ 
)
finaloverridevirtual

rotate of the given angles around the center of the frame/arbitrary slice

Reimplemented from camitk::SingleImageComponent.

Referenced by AnglesAndTranslationAction::event().

+ Here is the caller graph for this function:

◆ setTransformRotationVTK()

void camitk::ArbitrarySingleImageComponent::setTransformRotationVTK ( double  aroundX,
double  aroundY,
double  aroundZ 
)
overridevirtual

set rotation the VTK way (TODO implement this method)

Reimplemented from camitk::SingleImageComponent.

◆ setTransformTranslation()

void camitk::ArbitrarySingleImageComponent::setTransformTranslation ( double  x,
double  y,
double  z 
)
finaloverridevirtual

set the arbitrary slice translation inside the volume between 0 and 1 (first two parameters are ignored)

Reimplemented from camitk::SingleImageComponent.

Referenced by AnglesAndTranslationAction::event().

+ Here is the caller graph for this function:

◆ setTransformTranslationVTK()

void camitk::ArbitrarySingleImageComponent::setTransformTranslationVTK ( double  x,
double  y,
double  z 
)
overridevirtual

set translation the VTK way (TODO implement this method)

Reimplemented from camitk::SingleImageComponent.

◆ translate()

void camitk::ArbitrarySingleImageComponent::translate ( double  x,
double  y,
double  z 
)
overridevirtual

translation along the z axis (TODO implement this method)

Reimplemented from camitk::SingleImageComponent.

◆ updateTranslationExtremity()

void camitk::ArbitrarySingleImageComponent::updateTranslationExtremity ( )
private

update cPlus and cMinus

Member Data Documentation

◆ cMinus_P

QVector3D camitk::ArbitrarySingleImageComponent::cMinus_P
private

point of intersection of the line passing at the center of the image in the z- direction, i.e.

(0,0,-1) in the local frame. This is the extreme possible point to translate C in the z- direction This position is expressed in the parent frame coordinate system (the image coordinate system) This is required to compute getTranslationInVolume and set new translation

◆ cPlus_P

QVector3D camitk::ArbitrarySingleImageComponent::cPlus_P
private

point of intersection of the line passing at the center of the image in the z+ direction, i.e.

(0,0,1) in the local frame. This is the extreme possible point to translate C in the z+ direction. This position is expressed in the parent frame coordinate system (the image coordinate system) (required to compute getTranslationInVolume and set new translation)

◆ dimensions

int* camitk::ArbitrarySingleImageComponent::dimensions
private

dimension of the whole image (kept here for simplifying code)

◆ spacing

double* camitk::ArbitrarySingleImageComponent::spacing
private

spacing of the image (kept here for simplifying code)


The documentation for this class was generated from the following files:
a
#define a
camitk::ArbitrarySingleImageComponent::Multiply4x4
static vtkSmartPointer< vtkMatrix4x4 > Multiply4x4(T, T)
Definition: ArbitrarySingleImageComponent.cpp:462