/*=========================================================================
- Program: wxMaracas
- Module: $RCSfile: CutModelMainPanel.cxx,v $
- Language: C++
- Date: $Date: 2009/12/08 13:42:48 $
- Version: $Revision: 1.5 $
+Program: wxMaracas
+Module: $RCSfile: CutModelMainPanel.cxx,v $
+Language: C++
+Date: $Date: 2010/02/24 13:56:06 $
+Version: $Revision: 1.6 $
- Copyright: (c) 2002, 2003
- License:
+Copyright: (c) 2002, 2003
+License:
- This software is distributed WITHOUT ANY WARRANTY; without even
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the above copyright notice for more information.
+This software is distributed WITHOUT ANY WARRANTY; without even
+the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. See the above copyright notice for more information.
=========================================================================*/
: wxPanel(parent, -1, wxDefaultPosition, wxDefaultSize){
cutmanager=NULL;
-
+ _isCheck=false;
+ _isFirstTime=true;
initialize(path);
}
}
void CutModelMainPanel::initialize(std::string path){
-
cutmanager = new CutModelManager(path);
-
_panelid = 0;
_wxauimanager = new wxAuiManager(this);
-
+
wxAuiPaneInfo paneinfo;
- _wxauimanager->AddPane(new ToolBarCutModel(this),paneinfo.ToolbarPane().Top());
+
+ //RaC 5-02-2010 Add tabs
+ _notebook = new wxAuiNotebook(this,wxID_ANY,wxDefaultPosition,wxDefaultSize,wxAUI_NB_TOP |wxAUI_NB_TAB_MOVE | wxAUI_NB_SCROLL_BUTTONS);
+
+ _notebook->AddPage(new ToolBarCutModel(_notebook),"Cutter",true);
+ //_wxauimanager->AddPane(new ToolBarCutModel(this),paneinfo.ToolbarPane().Top());
+ _wxauimanager->AddPane(_notebook,paneinfo.Center());
+ addPolygonCutterTab();
+ _notebook->Update();
_wxauimanager->Update();
}
}
/*CutModelMainPanel* CutModelMainPanel::getInstance(){
- return instance;
+return instance;
}*/
+
void CutModelMainPanel::setImageData(vtkImageData* img){
try{
checkInvariant();
}
void CutModelMainPanel::setRenderer(vtkRenderer* renderer){
- try{
+ try{
checkInvariant();
cutmanager->setRenderer(renderer);
}catch(CutModelException e){
}
void CutModelMainPanel::RemoveActor(int id){
- try{
+ try{
checkInvariant();
if(!this->IsBeingDeleted()){
}
}
+//RaC
+void CutModelMainPanel::onCheckChanged(){
+
+ if(_isFirstTime==true){
+ _isFirstTime=false;
+ cutmanager->InitializePolygonInteractorStyle();
+ }
+
+ if(_isCheck==false)
+ {
+ _isCheck=true;
+ //Draw Polygon
+
+ cutmanager->ParallelProjectionOn();
+ btnExecutePolygonCut->Enable(false);
+ _notebook->GetPage(0)->Enable(false);
+ _radioinsideout->Enable(false);
+ lblMessagePolygon->SetLabel("Drawing polygon...");
+ }
+ else
+ {
+ _isCheck=false;
+ //Finish Drawing
+ cout<<"Finish Drawing"<<endl;
+ cutmanager->ParallelProjectionOff();
+ btnExecutePolygonCut->Enable(true);
+ _notebook->GetPage(0)->Enable(true);
+ _radioinsideout->Enable(true);
+ lblMessagePolygon->SetLabel("Contour saved! Click on Execute Cut");
+ }
+
+ cutmanager->UpdatePolygon(_isCheck);
+
+}
+
+
+//RaC
+void CutModelMainPanel::onExecuteCutPolygon(){
+ //Cuts Polygon
+ cutmanager->ExecuteCutPolygon(_radioinsideout->GetSelection());
+ lblMessagePolygon->SetLabel("No contour drawed");
+
+}
+
+
void CutModelMainPanel::onAddCutModel(){
- try{
+ try{
checkInvariant();
int id = addNewViewPanel();
for(int i = 0; i < viewpanels.size();i++){
if(viewpanels[i]->getId()==id){
_wxauimanager->GetPane(viewpanels[i]).Show(true);
- cutmanager->RefreshActor(id);
+ cutmanager->RefreshActor(id);
}else{
_wxauimanager->GetPane(viewpanels[i]).Show(false);
}
_wxauimanager->Update();
}
int CutModelMainPanel::addNewViewPanel()throw( CutModelException){
-
+
CutModelView* viewpanel = new CutModelView(this,cutmanager->getImageRange());
wxAuiPaneInfo paneinfo0;
_wxauimanager->AddPane(viewpanel, paneinfo0.DefaultPane().DestroyOnClose().Centre());
-
+
viewpanel->setId(_panelid);
viewpanels.push_back(viewpanel);
return viewpanel->getId();
-
-
+
+
}
CutModelView* CutModelMainPanel::getModelView(int id)throw( CutModelException){
CutModelView* current = NULL;
for(int i = 0; i < viewpanels.size();i++){
if(viewpanels[i]->getId()==id){
- current = viewpanels[i];
+ current = viewpanels[i];
}
}
if(current == NULL){
}catch(CutModelException e){
showErrorDialog(e.getCause());
}
-
+
}
void CutModelMainPanel::onRedo(){
}catch(CutModelException e){
showErrorDialog(e.getCause());
}
-
+
}
void CutModelMainPanel::changeOpacity(int id,int opacity){
}
void CutModelMainPanel::ShowViewBox(int id,bool check){
- try{
+ try{
checkInvariant();
cutmanager->ShowViewBox(id, check);
}catch(CutModelException e){
showErrorDialog(e.getCause());
}
-
+
}
void CutModelMainPanel::ChangeShape(int id,int selection){
try{
checkInvariant();
-
+
cutmanager->ChangeShape(id, selection);
}catch(CutModelException e){
}
}
void CutModelMainPanel::updateActorDirection(int id){
- try{
+ try{
checkInvariant();
-
+
cutmanager->updateActorDirection(id);
}catch(CutModelException e){
}
vtkImageData* CutModelMainPanel::GetResultImage(){
- try{
+ try{
checkInvariant();
return cutmanager->GetResultImage();
}catch(CutModelException e){
}
void CutModelMainPanel::LoadCutModelData(std::string filename){
- cutmanager->LoadCutModelData(filename);
+ cutmanager->LoadCutModelData(filename);
}
void CutModelMainPanel::SetType(int type){
return _type;
}
+void CutModelMainPanel::addPolygonCutterTab(){
+ wxPanel *panel = new wxPanel(_notebook);
+ panel->SetAutoLayout(true);
+ wxBoxSizer *sizer = new wxBoxSizer(wxVERTICAL);
+ panel->SetSizer(sizer);
+ sizer->AddSpacer(20);
+
+ wxCheckBox *item = new wxCheckBox(panel,10,"Draw Polygon",wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,"");
+ item->SetValue(false);
+ Connect(item->GetId(), wxEVT_COMMAND_CHECKBOX_CLICKED,(wxObjectEventFunction)(&PolygonCutterEventHandlerCutModel::onCheckChanged));
+ sizer->Add(item, 0, wxALIGN_LEFT);
+
+ lblMessagePolygon = new wxStaticText(panel,30,"No contour drawed",wxDefaultPosition,wxDefaultSize,0,"");
+ sizer->Add(lblMessagePolygon, 0, wxALIGN_LEFT);
+
+ wxString choices0[2];
+ choices0[0] = _T("inside");
+ choices0[1] = _T("outside");
+ _radioinsideout = new wxRadioBox(panel,-1,_T(""), wxDefaultPosition, wxDefaultSize,2,choices0);
+ sizer->Add(_radioinsideout, wxALIGN_LEFT);
+
+ btnExecutePolygonCut = new wxButton(panel,20,"Execute Cut",wxDefaultPosition,wxDefaultSize,0,wxDefaultValidator,"");
+ Connect(btnExecutePolygonCut->GetId(), wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)(&PolygonCutterEventHandlerCutModel::onExecuteCutPolygon));
+ sizer->Add(btnExecutePolygonCut, 0, wxALIGN_LEFT);
+
+
+ _notebook->AddPage(panel, "Polygon Cutter", false);
+
+}
+
+
+void PolygonCutterEventHandlerCutModel::onCheckChanged(wxCommandEvent& event){
+ CutModelMainPanel::getInstance()->onCheckChanged();
+}
+
+void PolygonCutterEventHandlerCutModel::onExecuteCutPolygon(wxCommandEvent& event){
+ CutModelMainPanel::getInstance()->onExecuteCutPolygon();
+}
+
+
+
/**
**
**/
ToolBarCutModel::ToolBarCutModel(wxWindow * parent)
: wxToolBar(parent, -1, wxDefaultPosition, wxDefaultSize)
{
-
wxBitmap bitmap10(Add_xpm);
this->AddTool(10, wxString(_T("Add")),bitmap10);