class vvImageReader;
class vvLandmarks;
+enum WindowLevelPreset {
+ WL_AUTO,
+ WL_HOUNSFIELD,
+ WL_SOFTTISSUE,
+ WL_LUNGS,
+ WL_BONES,
+ WL_HEAD,
+ WL_BINARY,
+ WL_USER,
+ WL_VENTILATION
+};
+
//------------------------------------------------------------------------------
class vvSlicerManager : public QObject {
Q_OBJECT
public:
+ typedef enum {WORLD_SLICING, VOXELS_SLICING} SlicingPresetType;
vvSlicerManager(int numberOfSlicers);
~vvSlicerManager();
bool SetImage(std::string filename, vvImageReader::LoadedImageType type, int n=0, unsigned int slice=0);
void SetImage(vvImage::Pointer image);
- bool SetImages(std::vector<std::string> filenames, vvImageReader::LoadedImageType type, int n=0);
+ bool SetImages(std::vector<std::string> filenames, vvImageReader::LoadedImageType type, int n=0, bool patientCoordinateSystem=0);
- bool SetOverlay(std::string filename, int dim, std::string component);
- bool SetFusion(std::string filename, int dim, std::string component);
+ bool SetOverlay(std::vector<std::string> filenames, int dim, std::string component, vvImageReader::LoadedImageType type);
+ bool SetFusion(std::vector<std::string> filenames,int dim, std::string component, vvImageReader::LoadedImageType type);
+ bool SetFusionSequence(std::vector<std::string> filenames, int dim, std::string component, vvImageReader::LoadedImageType type);
///Set a VF by loading it from the disk
bool SetVF(std::string filename);
///Set a VF from memory
///Switch between nearest neighbor and linear interpolation
void ToggleInterpolation();
vvSlicer* GetSlicer(int i);
+ int GetSelectedSlicer() {
+ return mSelectedSlicer;
+ }
+
void UpdateSlicer(int num, bool state);
void SetSlicerWindow(int i, vtkRenderWindow* RW);
void SetInteractorStyleNavigator(int i,vtkInteractorStyle* style);
vvImage::Pointer GetVF() { return mVF; }
int GetType() { return mType; }
void SetId(std::string id) { mId = id; }
- std::string GetId() { return mId; }
+ std::string GetId() const { return mId; }
int GetDimension() {
if (mImage) return mImage->GetNumberOfDimensions();
else return -1;
void SetFilename(std::string f, int number=0);
void SetSliceOrientation(int slicer, int orientation);
- void SetTSlice(int slice);
+ int GetTSlice();
+ void SetTSlice(int slice, bool updateLinkedImages = true);
void SetNextTSlice(int originating_slicer);
void SetPreviousTSlice(int originating_slicer);
void SetTSliceInSlicer(int tslice, int slicer);
+ void SetFusionSequenceTSlice(int slice);
+
void GenerateDefaultLookupTable();
void SetColorWindow(double s);
void SetColorLevel(double s);
- void SetLocalColorWindowing(const int slicer);
+ void SetOverlayColorWindow(double s);
+ void SetOverlayColorLevel(double s);
+ void SetLinkOverlayWindowLevel(bool b);
+ void SetLocalColorWindowing(const int slicer, const bool bCtrlKey);
void SetOpacity(int i, double factor);
void SetColorMap(int colormap);
void SetPreset(int preset);
void SetFusionLevel(double level) {
mFusionLevel = level;
}
+ void SetFusionShowLegend(int show) {
+ mFusionShowLegend = show;
+ }
+
+
+ //set/get fusionSequence related data
+ void SetFusionSequenceFrameIndex(int sequenceFrameIndex) { mFusionSequenceFrameIndex = sequenceFrameIndex; }
+ void SetFusionSequenceSpatialSyncFlag(bool spatialSync) { mFusionSequenceSpatialSyncFlag = spatialSync; }
+ void SetFusionSequenceTemporalSyncFlag(bool temporalSync) { mFusionSequenceTemporalSyncFlag = temporalSync; }
+ void SetFusionSequenceLength(unsigned int fusionSequenceNbFrames) { mFusionSequenceNbFrames = fusionSequenceNbFrames; }
+ void SetFusionSequenceMainTransformMatrix(vtkSmartPointer<vtkMatrix4x4> mat) {
+ mFusionSequenceMainTransform = vtkSmartPointer<vtkMatrix4x4>::New();
+ mFusionSequenceMainTransform->DeepCopy(mat);
+ }
+ void AddFusionSequenceInitialTransformMatrices(vtkSmartPointer<vtkMatrix4x4> mat) {
+ vtkSmartPointer<vtkMatrix4x4> tmpMat = vtkSmartPointer<vtkMatrix4x4>::New();
+ tmpMat->DeepCopy(mat);
+ mFusionSequenceListInitialTransformMatrices.push_back( tmpMat );
+ }
+ void SetFusionSequenceIndexOfLinkedManager(int index) { mFusionSequenceIndexLinkedManager = index; }
+ void SetFusionSequenceCorrespondances(std::vector<unsigned> s) { mFusionSequenceCorrespondances = s; }
+
+ void SetFusionSequenceInvolvmentCode(int code) { mFusionSequenceInvolvementCode=code; }
+ int GetFusionSequenceInvolvmentCode() { return mFusionSequenceInvolvementCode;}
+ bool IsInvolvedInFusionSequence() {return (!(mFusionSequenceInvolvementCode==-1));}
+ bool IsMainSequenceOfFusionSequence() {return (mFusionSequenceInvolvementCode==0);}
+ bool IsSecondarySequenceOfFusionSequence() {return (mFusionSequenceInvolvementCode==1);}
+
+ int GetFusionSequenceIndexOfLinkedManager() { return mFusionSequenceIndexLinkedManager; }
+ int GetFusionSequenceFrameIndex() { return mFusionSequenceFrameIndex; }
+ bool GetFusionSequenceSpatialSyncFlag() { return mFusionSequenceSpatialSyncFlag; }
+ bool GetFusionSequenceTemporalSyncFlag() { return mFusionSequenceTemporalSyncFlag; }
+ unsigned int GetFusionSequenceNbFrames() { return mFusionSequenceNbFrames; }
+ const vtkSmartPointer<vtkMatrix4x4>& GetFusionSequenceMainTransformMatrix() {return mFusionSequenceMainTransform;}
+ const std::vector< vtkSmartPointer<vtkMatrix4x4> >& GetFusionSequenceInitialTransformMatrices() {return mFusionSequenceListInitialTransformMatrices;}
+ const vtkSmartPointer<vtkMatrix4x4>& GetFusionSequenceInitialTransformMatrixAtFrame(unsigned i) {
+ return mFusionSequenceListInitialTransformMatrices[i];
+ }
+ const std::vector<unsigned>& GetFusionSequenceCorrespondances() {return mFusionSequenceCorrespondances;}
- double GetColorWindow();
- double GetColorLevel();
+ double GetColorWindow() const;
+ double GetColorLevel() const;
+ double GetOverlayColorWindow() const;
+ double GetOverlayColorLevel() const;
+ bool GetLinkOverlayWindowLevel() const;
int GetColorMap() {
return mColorMap;
}
- int GetPreset() {
+ int GetPreset() const {
return mPreset;
}
- int GetOverlayColor() {
+ SlicingPresetType GetSlicingPreset() {
+ return mSlicingPreset;
+ }
+ int GetOverlayColor() const {
return mOverlayColor;
}
-
- int GetFusionOpacity() {
+ int GetFusionOpacity() const {
return mFusionOpacity;
}
- int GetFusionThresholdOpacity() {
+ int GetFusionThresholdOpacity() const {
return mFusionThresOpacity;
}
- int GetFusionColorMap() {
+ int GetFusionColorMap() const {
return mFusionColorMap;
}
- double GetFusionWindow() {
+ double GetFusionWindow() const {
return mFusionWindow;
}
- double GetFusionLevel() {
+ double GetFusionLevel() const {
return mFusionLevel;
}
+
void SetCursorAndCornerAnnotationVisibility(int s);
void UpdateViews(int current, int slicer);
void UpdateLinked(int slicer);
void UpdateLinkedNavigation(vvSlicer *slicer, bool bPropagate=false);
+ void ResetTransformationToIdentity(const std::string actorType);
void Render();
void AddLink(std::string newId) {
mLinkedId.remove(oldId);
}
+ std::list<std::string> GetLinks() const {
+ return mLinkedId;
+ }
+
bool IsLinked() {
return mLinkedId.size() > 0;
}
void Reload();
void ReloadOverlay();
void ReloadFusion();
+ void ReloadFusionSequence();
void ReloadVF();
void Activated();
void Picked();
void UpdateInfoOnCursorPosition(int slicer);
+ void EmitMousePositionUpdated(int slicer);
+ void EmitKeyPressed(std::string keyPress);
void UpdateWindowLevel();
void UpdateSlice(int slicer);
void UpdateTSlice(int slicer);
void UpdateSliceRange(int slicer);
+ void SetSlicingPreset(SlicingPresetType preset);
vvLandmarks *GetLandmarks();
- void AddLandmark(float x,float y,float z,float t);
+ void AddNewLandmark(float x,float y,float z,float t);
+ void AddLandmarkProfile(float x,float y,float z,float t);
void NextImage(int slicer);
void PrevImage(int slicer);
void VerticalSliderHasChanged(int slicer, int slice);
double GetScalarComponentAsDouble(vtkImageData *image, double X, double Y, double Z, int component=0);
+public slots:
+ void AddLandmark(float x,float y,float z,float t);
+ void UpdateLandmark();
+
signals :
+ void callAddLandmark(float x,float y,float z,float t);
void currentImageChanged(std::string id);
void currentPickedImageChanged(std::string id);
void UpdatePosition(int visibility,double x, double y, double z, double X, double Y, double Z, double value);
void UpdateVector(int display, double x, double y, double z, double value);
void UpdateOverlay(int display, double valueOver, double valueRef);
void UpdateFusion(int display, double valueFus);
- void UpdateWindows(int slicer, int view, int slice);
+ void UpdateFusionSequence(int fusionSequenceFrameIndex, bool fusionSequenceSpatialSyncFlag, unsigned int fusionSequenceNbFrames);
+ void MousePositionUpdatedSignal(int slicer);
+ void KeyPressedSignal(std::string KeyPressed);
void UpdateOrientation(int slicer, int orientation);
void UpdateSlice(int slicer, int slice);
- void UpdateTSlice(int slicer, int slice);
+ void UpdateTSlice(int slicer, int slice, int code);
void UpdateSliceRange(int slice, int min, int max, int tmin, int tmax);
- void WindowLevelChanged(double window, double level, int preset, int colormap);
+ void WindowLevelChanged();
void UpdateLinkManager(std::string, int slicer, double x, double y, double z, int temps);
void UpdateLinkedNavigation(std::string, vvSlicerManager*, vvSlicer*);
void LandmarkAdded();
protected:
std::vector< vtkSmartPointer<vvSlicer> > mSlicers;
+ int mSelectedSlicer;
vvImageReader::Pointer mReader;
vvImageReader::Pointer mOverlayReader;
vvImageReader::Pointer mFusionReader;
+ vvImageReader::Pointer mFusionSequenceReader;
vvImageReader::Pointer mVectorReader;
vvImage::Pointer mImage;
vvImage::Pointer mVF;
int mFusionColorMap;
double mFusionWindow;
double mFusionLevel;
-
+ bool mFusionShowLegend;
+
+ //Fusion of sequences related data
+ int mFusionSequenceInvolvementCode; //-1: not involved, 0: main sequence(CT), 1: secondary sequence (US)
+ int mFusionSequenceIndexLinkedManager; //index of the other sequence involved in the visualization
+ int mFusionSequenceFrameIndex; //temporal index of the current image in the sequence (<->TSlice)
+ unsigned int mFusionSequenceNbFrames; //number of frames in the temporal sequence
+ bool mFusionSequenceSpatialSyncFlag, mFusionSequenceTemporalSyncFlag; //flags indicating whether the spatial/temporal synchronization are actives
+ vtkSmartPointer<vtkMatrix4x4> mFusionSequenceMainTransform;
+ std::vector< vtkSmartPointer<vtkMatrix4x4> > mFusionSequenceListInitialTransformMatrices;
+ std::vector<unsigned> mFusionSequenceCorrespondances;
+
int mPreset;
+ SlicingPresetType mSlicingPreset;
vvImageReader::LoadedImageType mType;
std::string mVFComponent;
std::string mOverlayComponent;