From: guigues Date: Mon, 9 Mar 2009 10:16:44 +0000 (+0000) Subject: Linux compat X-Git-Tag: EED.02Oct2009~155 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=7c5180e6b19690ba9a264f2a66c04bc0a03c53ef;p=creaImageIO.git Linux compat --- diff --git a/appli/wxGimmick/main.cxx b/appli/wxGimmick/main.cxx index 4485fde..91dfa1f 100644 --- a/appli/wxGimmick/main.cxx +++ b/appli/wxGimmick/main.cxx @@ -21,10 +21,10 @@ bool myApp::OnInit( ) #endif wxInitAllImageHandlers(); - /* + creaImageIO::SetGimmickMessageLevel(9); creaImageIO::SetGimmickDebugMessageLevel(9); - */ + int threads = 1; diff --git a/src2/creaImageIOGimmickView.cpp b/src2/creaImageIOGimmickView.cpp index 6084c7d..a16c096 100644 --- a/src2/creaImageIOGimmickView.cpp +++ b/src2/creaImageIOGimmickView.cpp @@ -274,16 +274,24 @@ namespace creaImageIO MultiThreadImageReaderUser::EventType e, vtkImageData* image) { + GimmickDebugMessage(5, + "MultiThreadImageReader event : "<::iterator i; + std::map::iterator i; i = mImageFileNameToNode.find(filename); if (i!=mImageFileNameToNode.end()) { - mImageEventQueue.push_back(ImageEventType(i->second,image)); + GimmickDebugMessage(5, + "Pushing image of file '"<second<<"' in queue" + <second,image)); } } diff --git a/src2/creaImageIOGimmickView.h b/src2/creaImageIOGimmickView.h index 9aa5072..011e471 100644 --- a/src2/creaImageIOGimmickView.h +++ b/src2/creaImageIOGimmickView.h @@ -64,6 +64,8 @@ namespace creaImageIO virtual void GetSelectedFiles(std::vector& s) { GimmickError("INTERNAL ERROR : GetSelectedFiles not implemented"); } + virtual void OnSelectionChange(std::vector& s) + { GimmickError("INTERNAL ERROR : OnSelectionChange not implemented"); } ///Validates the dimension compliance of the images with the maximum and minimum given, and between their sizes bool ValidateSelected (std::vector& sel, int min_dim, int max_dim); diff --git a/src2/creaImageIOTreeView.cpp b/src2/creaImageIOTreeView.cpp index 7a3f128..a34f0c6 100644 --- a/src2/creaImageIOTreeView.cpp +++ b/src2/creaImageIOTreeView.cpp @@ -4,8 +4,9 @@ namespace creaImageIO { // CTor - TreeView::TreeView(TreeHandler* handler) - : mTreeHandler(handler) + TreeView::TreeView(TreeHandler* handler, GimmickView* gimmick ) + : mTreeHandler(handler), + mGimmickView(gimmick) { GimmickDebugMessage(1,"TreeView::TreeView" <ValidateSelection(event.GetClientData()); - mOkButton->Enable(t); + // bool t=mView->ValidateSelection(event.GetClientData()); + // TO DO + // mOkButton->Enable(t); } diff --git a/src2/creaImageIOWxGimmickView.cpp b/src2/creaImageIOWxGimmickView.cpp index a21617c..572658b 100644 --- a/src2/creaImageIOWxGimmickView.cpp +++ b/src2/creaImageIOWxGimmickView.cpp @@ -66,7 +66,8 @@ namespace creaImageIO int number_of_threads) : wxPanel(parent,id,pos,size), GimmickView(gimmick, number_of_threads), - mProgressDialog(0) + mProgressDialog(0), + mConstructed(false) { GimmickDebugMessage(1,"WxGimmickView::WxGimmickView" <& sel) { + GimmickDebugMessage(5, + "WxGimmickView::OnSelectionChange" + < sel=* (std::vector *) s; - bool valid=ValidateSelected(sel,mSelectionMinDimension,mSelectionMaxDimension ); - mText->SetLabel(_T("Status: ")+GetMessage()); - if(valid) - { - ReadImageThreaded(sel); - } - else - { - mViewer->Hide(); - } - return valid; + bool valid = ValidateSelected(sel, + mSelectionMinDimension, + mSelectionMaxDimension ); + mText->SetLabel(_T("Status: ")+crea::std2wx(GetMessage())); + if(valid) + { + ReadImageThreaded(sel); + } + else + { + mViewer->Hide(); + } + } @@ -379,13 +385,16 @@ namespace creaImageIO ///Reads Images (Threaded) void WxGimmickView::ReadImageThreaded(std::vector sel) { - int maxprio = GetMaximalPriority(); - int prio = maxprio + 2000; - - //First load the selected images - mCurImageItemToShow = sel.front(); - std::vector::iterator selected; - for(selected=sel.begin();selected!=sel.end();++selected) + GimmickDebugMessage(5, + "ReadImageThreaded" + <::iterator selected; + for(selected=sel.begin();selected!=sel.end();++selected) { GimmickDebugMessage(5, "Requesting image from selected " @@ -435,38 +444,48 @@ namespace creaImageIO /// Processes the queue of image events void WxGimmickView::ProcessImageEvents() { - int level=GetTreeViewMap()["Local database"]->GetNumberOfLevels(); - std::vector sel=GetTreeViewMap()["Local database"]->GetSelected(level+1); - GimmickDebugMessage(5, - "Processing Images. Lock Started" - <ClearImages(); + int level=GetTreeViewMap()["Local database"]->GetNumberOfLevels(); + std::vector sel=GetTreeViewMap()["Local database"]->GetSelected(level+1); + GimmickDebugMessage(5, + "Processing Images. Lock Started" + <ClearImages(); while (!IsQueueEmpty()) { - vtkImageData* image=GetNextImageQueued(); - tree::Node* node=GetNextNodeQueued(); - if( image!=0 ) - { - bool found=false; - std::vector::iterator i; - for(i=sel.begin();i!=sel.end()&&!found;++i) - { - if((*i)==node) - { - mViewer->AddImage(image); - found=true; - } - } - UnqueueNext(); - } - } - if(!(mViewer->ImagesEmpty())) + GimmickDebugMessage(5, + "Queue not empty" + <ShowImages(); - mViewer->Show(); + tree::Node* node=GetNextNodeQueued(); + + bool found=false; + std::vector::iterator i; + for(i=sel.begin();i!=sel.end()&&!found;++i) + { + if((*i)==node) + { + mViewer->AddImage(image); + found=true; + } + } } + UnqueueNext(); + } + if(!(mViewer->ImagesEmpty())) + { + GimmickDebugMessage(5, + "Showing images" + <ShowImages(); + mViewer->Show(); + } ClearQueue(); diff --git a/src2/creaImageIOWxGimmickView.h b/src2/creaImageIOWxGimmickView.h index c462e84..fa2b3ab 100644 --- a/src2/creaImageIOWxGimmickView.h +++ b/src2/creaImageIOWxGimmickView.h @@ -36,21 +36,25 @@ namespace creaImageIO 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 files - ///(overloaded from GimmickView) - void GetSelectedFiles(std::vector& s); + + /// Returns the selected Images so that they comply with the given parameter(<4D) + ///(overloaded from GimmickView) + vtkImageData* GetSelectedImage(int dim); + /// Returns the selected files + ///(overloaded from GimmickView) + void GetSelectedFiles(std::vector& s); /// Returns the selected Images so that they comply with the given parameter(4D) //(overloaded from GimmickView) - void GetSelectedImages(std::vector& s, int dim); - /// Validates the selected images - bool ValidateSelection(void *); - ///Sends a request to read the currently selected node and the ones that surround it. - void ReadImageThreaded(std::vector sel); + void GetSelectedImages(std::vector& s, int dim); + /// Callback called when a selection from a TreeView has changed + //(overloaded from GimmickView) + void OnSelectionChange(std::vector& s); + + + ///Sends a request to read the currently selected node and the ones that surround it. + void ReadImageThreaded(std::vector sel); + protected: /// Creates the tool bar @@ -62,6 +66,10 @@ namespace creaImageIO private: + /// Is set to true at the end of constructor + /// (in order to lock callbacks from threaded objects or event + /// before everything is ok) + bool mConstructed; /// The ToolBar and the tools wxToolBar* mToolBar; wxToolBarToolBase* mToolAddFile; diff --git a/src2/creaImageIOWxTreeView.cpp b/src2/creaImageIOWxTreeView.cpp index 72b58fc..e80697a 100644 --- a/src2/creaImageIOWxTreeView.cpp +++ b/src2/creaImageIOWxTreeView.cpp @@ -1,4 +1,5 @@ #include +#include #include #include ///Comparing function for ordering algorithm. Takes parameters as strings. @@ -62,10 +63,11 @@ namespace creaImageIO //===================================================================== // CTor WxTreeView::WxTreeView(TreeHandler* handler, + GimmickView* gimmick, wxWindow* parent, const wxWindowID id) : wxPanel(parent,id), - TreeView(handler) + TreeView(handler,gimmick) { GimmickDebugMessage(1,"WxTreeView::WxTreeView" < sel=GetSelected((mLevelList.size()+1)); - event.SetClientData(&sel); - GetEventHandler()->ProcessEvent( event ); + GimmickDebugMessage(7, + "WxTreeView::ValidateSelectedImages" + < sel(GetSelected(mLevelList.size()+1)); + GetGimmickView()->OnSelectionChange(sel); + /* + //Send an event telling wether the selection is valid or not + wxCommandEvent event( 0, GetId() ); + event.SetEventObject( this ); + std::vector sel=GetSelected((mLevelList.size()+1)); + event.SetClientData(&sel); + GetEventHandler()->ProcessEvent( event ); + */ + // } + //================================================================ + - //================================================================ + //================================================================ void WxTreeView::GetNodes(std::vector& nodes, bool direction) { long item = mLastSelected; diff --git a/src2/creaImageIOWxTreeView.h b/src2/creaImageIOWxTreeView.h index 7401e90..e71540a 100644 --- a/src2/creaImageIOWxTreeView.h +++ b/src2/creaImageIOWxTreeView.h @@ -12,6 +12,7 @@ namespace creaImageIO { + /** * \ingroup View */ @@ -23,7 +24,8 @@ namespace creaImageIO { public: /// Ctor - WxTreeView(TreeHandler*, wxWindow* parent, const wxWindowID id); + WxTreeView(TreeHandler*, GimmickView*, + wxWindow* parent, const wxWindowID id); /// Virtual destructor virtual ~WxTreeView(); @@ -40,7 +42,7 @@ namespace creaImageIO /// Callback for column click void OnColClick(wxListEvent& event); - private: + private: /// The struct holding the data for one level /// Holds the wx control and other data /// such as the vector of attribute keys corresponding to the columns diff --git a/src2/creaImageIOWxViewer.cpp b/src2/creaImageIOWxViewer.cpp index f8ae7b9..63b2c88 100644 --- a/src2/creaImageIOWxViewer.cpp +++ b/src2/creaImageIOWxViewer.cpp @@ -43,9 +43,15 @@ namespace creaImageIO int mx1,mx2,my1,my2,mz1,mz2; double mspx,mspy,mspz; }; + + //===================================================================== - // CTor + + + + //===================================================================== + // CTor WxViewer::WxViewer(wxWindow *parent, wxWindowID id, wxString title, @@ -63,15 +69,15 @@ namespace creaImageIO wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL); - // previewer + // previewer - mInteractor = new crea::creawxVTKRenderWindowInteractor(this,-1); + mInteractor = new crea::creawxVTKRenderWindowInteractor(this,-1); mInteractor->UseCaptureMouseOn(); mViewer = vtkImageViewer2::New(); mViewer->SetupInteractor ( mInteractor ); - - mMovie=new ThreadedMovie(images, mViewer, mInteractor, this); + + mMovie=new ThreadedMovie(images, mViewer, mInteractor, this); topsizer-> Add( mInteractor ,1,wxGROW ,0); SetSizer( topsizer ); @@ -88,23 +94,25 @@ namespace creaImageIO void WxViewer::ShowImage(vtkImageData* im) { - mViewer->SetInput(im); - mViewer->SetSlice( 0 ); - - int x1,x2,y1,y2,z1,z2; - double spx,spy,spz; + GimmickDebugMessage(5,"WxViewer::ShowImage" + <SetInput(im); + mViewer->SetSlice( 0 ); + + int x1,x2,y1,y2,z1,z2; + double spx,spy,spz; im->Update(); im->GetSpacing(spx,spy,spz); im->GetExtent (x1,x2,y1,y2,z1,z2); /* std::cout << "-----------------------------"<Render(); + mViewer->Render(); } //================================================================ @@ -239,24 +247,28 @@ namespace creaImageIO void* ThreadedMovie::Entry() { + GimmickMessage(1,"ThreadedMovie::Entry()"<Refresh(); - endwait = clock () + 0.2 * CLOCKS_PER_SEC ; - while (clock() < endwait) {} - } - - } - - } - return 0; + while(true) + { + clock_t endwait; + for(i=mImagesToPlay.begin();i!=mImagesToPlay.end();++i) + { + if(i!=mImagesToPlay.end()) + { + + GimmickMessage(1,"ThreadedMovie next image"<Refresh(); + endwait = clock () + 0.2 * CLOCKS_PER_SEC ; + while (clock() < endwait) {} + } + + } + + } + return 0; } //===================================================================== diff --git a/src2/creaImageIOWxViewer.h b/src2/creaImageIOWxViewer.h index 9323e3d..21fbf50 100644 --- a/src2/creaImageIOWxViewer.h +++ b/src2/creaImageIOWxViewer.h @@ -19,6 +19,8 @@ namespace creaImageIO { + class ThreadedMovie; + class WxViewer : public wxFrame { @@ -64,4 +66,4 @@ namespace creaImageIO #endif // USE_WIDGETS // EOF -#endif \ No newline at end of file +#endif