From: caballero Date: Mon, 23 Feb 2009 17:07:55 +0000 (+0000) Subject: Implemented calls from/to the interface to several methods. X-Git-Tag: EED.02Oct2009~172 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=633701590bade8ba6d0f8c7b37c033596b4b2c2a;p=creaImageIO.git Implemented calls from/to the interface to several methods. --- diff --git a/appli/TestWxGimmickReaderDialog/main.cxx b/appli/TestWxGimmickReaderDialog/main.cxx index 541cfa2..8149724 100644 --- a/appli/TestWxGimmickReaderDialog/main.cxx +++ b/appli/TestWxGimmickReaderDialog/main.cxx @@ -29,7 +29,8 @@ bool myApp::OnInit( ) creaImageIO::SetGimmickDebugMessageLevel(9); */ - int image_type = GIMMICK_3D_IMAGE_SELECTION; + int min_dim = GIMMICK_2D_IMAGE_SELECTION; + int max_dim = GIMMICK_3D_IMAGE_SELECTION; int threads = 1; creaImageIO::WxGimmickReaderDialog w(0, @@ -37,7 +38,8 @@ bool myApp::OnInit( ) _T("Select image(s) - Gimmick! (c) CREATIS-LRMN 2008"), wxDefaultPosition, wxSize(1200,800), - image_type, + min_dim, + max_dim, threads); w.ShowModal(); @@ -55,7 +57,7 @@ bool myApp::OnInit( ) std::cout << "$$$$ "< images; - w.GetSelectedImages(images); + w.GetSelectedImages(images,3); crea::VtkBasicSlicer(images.front()); images.front()->Delete(); diff --git a/src2/creaImageIOGimmickView.h b/src2/creaImageIOGimmickView.h index f17fcb4..8407a91 100644 --- a/src2/creaImageIOGimmickView.h +++ b/src2/creaImageIOGimmickView.h @@ -4,6 +4,7 @@ #include #include #include + //#include #include @@ -48,8 +49,11 @@ namespace creaImageIO /// Finalize virtual void Finalize(); - - virtual void GetSelectedImages(std::vector& s) {} + ///Returns the selected Images and validates to see if they comply with the given parameter(<4D) + vtkImageData* GetSelectedImage(int dim); + ///Adds the selected Images to the given vector and validates to see if they comply with the given parameter (4D) + virtual void GetSelectedImages(std::vector& s, int dim) {} + virtual void GetSelectedFiles(std::vector& s) {} /// Create the tree views diff --git a/src2/creaImageIOTreeView.h b/src2/creaImageIOTreeView.h index edee939..fe29f3b 100644 --- a/src2/creaImageIOTreeView.h +++ b/src2/creaImageIOTreeView.h @@ -3,6 +3,7 @@ #include #include +#include namespace creaImageIO { @@ -29,6 +30,16 @@ namespace creaImageIO ///Removes selected nodes on given level virtual void RemoveSelected( int ) { GimmickError("INTERNAL ERROR : TreeView::RemoveSelected not overloaded");} + + ///Validates the selected images + virtual void ValidateSelectedImages() + { GimmickError("INTERNAL ERROR : TreeView::ValidateSelected not overloaded");} + ///Returns the selected data as vtkImageData + vtkImageData* GetSelectedImage(int dim) + { GimmickError("INTERNAL ERROR : TreeView::GetSelectedImage not overloaded");} + ///Returns the selected data as a vector of vtkImageData (4D) + virtual void GetSelectedImages(std::vector& s, int dim) + { GimmickError("INTERNAL ERROR : TreeView::GetSelectedImages not overloaded");} protected: TreeHandler* GetTreeHandler() { return mTreeHandler; } diff --git a/src2/creaImageIOWxGimmickFrame.cpp b/src2/creaImageIOWxGimmickFrame.cpp index 3e6b616..a14a7ee 100644 --- a/src2/creaImageIOWxGimmickFrame.cpp +++ b/src2/creaImageIOWxGimmickFrame.cpp @@ -34,13 +34,15 @@ namespace creaImageIO mGimmick = new Gimmick(); mGimmick->Initialize(); - int image_type = GIMMICK_3D_IMAGE_SELECTION; + int min_dim = GIMMICK_2D_IMAGE_SELECTION; + int max_dim = GIMMICK_3D_IMAGE_SELECTION; mView = new WxGimmickView(mGimmick, this, -1, wxDefaultPosition, size, - image_type, + min_dim, + max_dim, threads); mView->Initialize(); } diff --git a/src2/creaImageIOWxGimmickReaderDialog.cpp b/src2/creaImageIOWxGimmickReaderDialog.cpp index a6053fa..2bf1661 100644 --- a/src2/creaImageIOWxGimmickReaderDialog.cpp +++ b/src2/creaImageIOWxGimmickReaderDialog.cpp @@ -9,7 +9,8 @@ namespace creaImageIO wxString title, const wxPoint& pos, const wxSize& size, - int image_type, + int min_dim, + int max_dim, int threads) : wxDialog( parent, id, @@ -41,7 +42,8 @@ namespace creaImageIO TVID, wxDefaultPosition, size, - image_type, + min_dim, + max_dim, threads); mView->Initialize(); } @@ -80,11 +82,13 @@ namespace creaImageIO delete mGimmick; } } - + + //================================================================ BEGIN_EVENT_TABLE(WxGimmickReaderDialog, wxDialog) - END_EVENT_TABLE() + + END_EVENT_TABLE() //================================================================ diff --git a/src2/creaImageIOWxGimmickReaderDialog.h b/src2/creaImageIOWxGimmickReaderDialog.h index 1bf53de..9526d37 100644 --- a/src2/creaImageIOWxGimmickReaderDialog.h +++ b/src2/creaImageIOWxGimmickReaderDialog.h @@ -22,7 +22,8 @@ namespace creaImageIO wxString title, const wxPoint& pos, const wxSize& size, - int image_type = GIMMICK_3D_IMAGE_SELECTION, + int image_min_type = GIMMICK_2D_IMAGE_SELECTION, + int image_max_type = GIMMICK_3D_IMAGE_SELECTION, int threads = 0); Gimmick* GetGimmick() { return mGimmick; } @@ -31,14 +32,23 @@ namespace creaImageIO ~WxGimmickReaderDialog(); - void GetSelectedImages(std::vector& s) - { mView->GetSelectedImages(s); } + + //=============================================================================================== + //Image Selection + //=============================================================================================== + vtkImageData* GetSelectedImage(int dim) + { return mView->GetSelectedImage(dim); } + void GetSelectedImages(std::vector& s, int dim) + { mView->GetSelectedImages(s, dim); } + + void GetSelectedFiles(std::vector& s) { mView->GetSelectedFiles(s); } void OnSelChanged(EventType& event); void OnContextualMenu(EventType& event); void OnMenuTest(wxCommandEvent& event); + // void OnValid(wxCommandEvent& event); // void OnButtonOk(wxCommandEvent& event); // void OnButtonCancel(wxCommandEvent& event); diff --git a/src2/creaImageIOWxGimmickView.cpp b/src2/creaImageIOWxGimmickView.cpp index 064accc..edcc684 100644 --- a/src2/creaImageIOWxGimmickView.cpp +++ b/src2/creaImageIOWxGimmickView.cpp @@ -61,7 +61,8 @@ namespace creaImageIO wxWindow *parent, const wxWindowID id, const wxPoint& pos, const wxSize& size, - int image_type, + int min_dim, + int max_dim, int number_of_threads) : wxPanel(parent,id,pos,size), GimmickView(gimmick), @@ -190,8 +191,21 @@ namespace creaImageIO } //====================================================================== + /// Returns the selected Images so that they comply with the given parameter(<4D) + vtkImageData* WxGimmickView::GetSelectedImage(int dim) + { + return NULL; + } - + //====================================================================== + /// Returns the selected Images so that they comply with the given parameter(4D) + void WxGimmickView::GetSelectedImages(std::vector& s, int dim) + { + + //GetTreeViewMap()["Local database"]->GetImageData() + //return NULL ; + + } //================================================= void WxGimmickView::CreateIconList() diff --git a/src2/creaImageIOWxGimmickView.h b/src2/creaImageIOWxGimmickView.h index c2790c7..1da2729 100644 --- a/src2/creaImageIOWxGimmickView.h +++ b/src2/creaImageIOWxGimmickView.h @@ -30,11 +30,19 @@ namespace creaImageIO wxWindow *parent, const wxWindowID id, const wxPoint& pos, const wxSize& size, - int image_type = GIMMICK_3D_IMAGE_SELECTION, + int min_dim = GIMMICK_2D_IMAGE_SELECTION, + int max_dim = GIMMICK_3D_IMAGE_SELECTION, int number_of_threads = 0); /// Virtual destructor virtual ~WxGimmickView(); + /// Returns the selected Images so that they comply with the given parameter(<4D) + ///(overloaded from GimmickView) + vtkImageData* GetSelectedImage(int dim); + /// Returns the selected Images so that they comply with the given parameter(4D) + //(overloaded from GimmickView) + void GetSelectedImages(std::vector& s, int dim); + protected: /// Creates the tool bar void CreateToolBar(); @@ -43,6 +51,7 @@ namespace creaImageIO /// (overloaded from GimmickView) void CreateTreeView( TreeHandler* ); + private: /// The ToolBar and the tools wxToolBar* mToolBar; diff --git a/src2/creaImageIOWxTreeView.cpp b/src2/creaImageIOWxTreeView.cpp index 2a58cd3..1b3d20d 100644 --- a/src2/creaImageIOWxTreeView.cpp +++ b/src2/creaImageIOWxTreeView.cpp @@ -1,7 +1,16 @@ #include #include #include - +int wxCALLBACK MyCompareFunction(long item1, long item2, long WXUNUSED(sortData)) +{ + // inverse the order + if (item1 < item2) + return -1; + if (item1 > item2) + return 1; + + return 0; +} namespace creaImageIO { //===================================================================== @@ -321,12 +330,251 @@ namespace creaImageIO " Level "< sel=GetSelected(level+1); + + tree::Node* nodes[20]; + + int l = level - 1; + + // to speed up inserting we hide the control temporarily + GetCtrl(level)->Hide(); + GetCtrl(level)->DeleteAllItems(); + + std::vector::iterator i; + int num=0; + for (i=sel.begin(); i!=sel.end(); ++i) + { + + //Adds columns + GetTreeHandler()->LoadChildren(*i,1); + tree::Node::ChildrenListType::reverse_iterator j; + + for (j = (*i)->GetChildrenList().rbegin(); + j!= (*i)->GetChildrenList().rend(); + ++j) + { + nodes[num]=*j; + num++; + } + } + + //Sorting elements + int k, m; + tree::Node* index; + + + for (k=1; kGetAttribute(mLevelList[level].key[colNum-1]) + <<"Comparison Key 2: "<<(index)->GetAttribute(mLevelList[level].key[colNum-1]) + < 0) && ((nodes[m-1])->GetAttribute(mLevelList[level].key[colNum-1]) > + (index)->GetAttribute(mLevelList[level].key[colNum-1]))) + { + nodes[m] = nodes[m-1]; + m = m - 1; + } + nodes[m] = index; + } + + for (m=0; mInsertItem(item); + int n; + if ((node)->GetChildrenLoaded()) + { + n=(node)->GetChildrenList().size(); + } + else + { + n= GetTreeHandler()->GetNumberOfChildren(node); + } + std::ostringstream oss; + + oss << n; + std::string s(oss.str()); + GetCtrl(level)->SetItem(id,0, crea::std2wx(s)); + GetCtrl(level)->SetColumnWidth(0, wxLIST_AUTOSIZE ); + + for (int k=1; kGetColumnCount(); k++) + { + std::string val = (node)->GetAttribute(mLevelList[level].key[k-1]); + if (val.size()==0) val = "?"; + GetCtrl(level)->SetItem(id,k, crea::std2wx(val)); + GetCtrl(level)->SetColumnWidth(k, wxLIST_AUTOSIZE ); + + } + + } + + + GetCtrl(level)->Show(); +*/ + } + //================================================================ + + void WxTreeView::ValidateSelectedImages() + { + GimmickMessage(1, + "Hello World Validate" + <GetSelections(id); + f.clear(); + + // Collect the brute vector of Image nodes + std::vector im; + for (unsigned int i=0; iGetItemData(id[i]); + if ((data) && (data->IsDicomNode())) + { + if (data->GetDicomNode()->GetType()==DicomNode::Image) + { + im.push_back ( data->GetDicomNode() ); + } + else if (data->GetDicomNode()->GetType()==DicomNode::Series) + { + DicomNode::ChildrenListType::iterator j; + for (j =data->GetDicomNode()->GetChildrenList().begin(); + j!=data->GetDicomNode()->GetChildrenList().end(); + j++) + { + im.push_back ( *j ); + } + } + } + } + // Create the output data + if (im.size()==1) + { + // Only one image : give it + vtkImageData* out = vtkImageData::New(); + out->ShallowCopy(mReader.GetImage(im.front()->ImageGetFullFileName())); + f.push_back( out ); + } + else if (im.size()>1) + { + vtkImageData* first = mReader.GetImage( im.front()->ImageGetFullFileName() ); + if (first->GetDataDimension()==2) + { + // n2D to 3D + vtkImageData* out = vtkImageData::New(); + out->CopyStructure(first); + out->SetScalarType(first->GetScalarType()); + int ext[6]; + first->GetExtent(ext); + ext[5] = im.size(); + out->SetExtent(ext); + // LG : TODO : Z Spacing ? + + out->AllocateScalars(); + + //first->Print(std::cout); + // out->Print(std::cout); + + int dim[3]; + first->GetDimensions(dim); + unsigned long imsize = + ( (unsigned long)first->GetScalarPointer(0,1,0) + - (unsigned long)first->GetScalarPointer(0,0,0)) + *dim[1]; + + int slice = 0; + std::vector::iterator it; + for (it=im.begin(); it!=im.end(); ++it) + { + //std::cout << "copying slice "<ImageGetFullFileName() ); + + void* src = cur->GetScalarPointer(0,0,0); + void* dst = out->GetScalarPointer(0,0,slice); + // std::cout << "src="<