]> Creatis software - creaContours.git/blobdiff - lib/Interface_ManagerContour_NDimensions/wxContourMainFrame.cxx
*** empty log message ***
[creaContours.git] / lib / Interface_ManagerContour_NDimensions / wxContourMainFrame.cxx
index 42ba17cee9f68d21ac81d31c038d0454e38e9263..335d165fd741c0027e86f921c6aa433255f41cf9 100644 (file)
@@ -682,12 +682,58 @@ void wxContourMainFrame::onRedo(){
        }
        
 }
-void wxContourMainFrame :: createCopyContourOf ( std::string anExistingKName, std::vector<int> &instantNoTouchData, bool append ){
+void wxContourMainFrame :: createCopyContourOf ( std::string anExistingKName, std::vector<int> &instantNoTouchData, bool append )
+{
        std::string cloneName = kernelManager->createCopyContourOf( anExistingKName, instantNoTouchData );
        manualContourModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);//_modelManager->getOutlineByKeyName( cloneName )->getModel();
        _theViewPanel->getSceneManager()->createCopyContourOf( anExistingKName, cloneName, manualModel , append );
 }
 
+///AD: 03-09   Copy the object and apply the given transformation
+void wxContourMainFrame :: createMirrorContourOf ( std::string anExistingKName, std::vector<int> &instantNoTouchData, bool append )
+{
+       std::string cloneName = kernelManager->createCopyContourOf( anExistingKName, instantNoTouchData );
+       manualContourModel * manualModel = kernelManager->getOutlineByKeyName(cloneName);
+       manualContourModel * refModel = kernelManager->getOutlineByKeyName(_refName);
+
+       manualPoint * refPoint1 = refModel->GetManualPoint(0);
+       manualPoint * refPoint2 = refModel->GetManualPoint(1);
+
+       double pnt1X = refPoint1->GetX();
+       double pnt1Y = refPoint1->GetY();
+       double pnt2X = refPoint2->GetX();
+       double pnt2Y = refPoint2->GetY();
+       double angle = (atan2(pnt2Y - pnt1Y, pnt2X - pnt1X) * 180 / 3.1415926535897932384626433832795)+90;
+printf("ang=%f\n",angle);
+       vtkTransform *t = vtkTransform::New();
+
+       t->PostMultiply();
+       t->Identity();
+       t->Translate(-pnt1X, -pnt1Y, 0);
+       t->RotateZ(-angle);
+       t->Scale(-1,1,1);
+       t->RotateZ(angle);
+       t->Translate(pnt1X, pnt1Y, 0);
+       t->Update();
+
+       int i,size=manualModel->GetSizeLstPoints();
+       for (i=0;i<size;i++)
+       {
+               manualPoint * mp = manualModel->GetManualPoint(i);
+               float vecIn[3];
+               float vecOut[3];
+               vecIn[0]=mp->GetX();
+               vecIn[1]=mp->GetY();
+               vecIn[2]=mp->GetZ();
+               t->TransformPoint( vecIn, vecOut );
+               mp->SetPointX( vecOut[0] );
+               mp->SetPointY( vecOut[1] );
+               mp->SetPointZ( vecOut[2] );
+       }
+
+       _theViewPanel->getSceneManager()->createCopyContourOf( anExistingKName, cloneName, manualModel , append );
+}
+
 void wxContourMainFrame ::loadState(std::string filename){
        char tmp[255];
        FILE *pFile=fopen(filename.c_str(),"r+");
@@ -1077,17 +1123,119 @@ void wxContourMainFrame::onSegmentationAllSlice(int minZ,int maxZ,int isovalue,i
        RefreshInterface();
 }
 
+
+//Creates a reference line to be used as the axis of the mirroring
+void wxContourMainFrame::referenceLine()
+{
+/*
+    wxBusyCursor wait;
+       double spc[3];
+       
+       vtkImageData *vtkimagedata = _theViewPanel->getImageData();
+       vtkimagedata->UpdateInformation();
+       vtkimagedata->SetUpdateExtent(vtkimagedata->GetWholeExtent());
+       vtkimagedata->Update();
+       vtkImageData _data = vtkimagedata;
+       _data->GetSpacing(spc);
+       //_vtkbasedata_1 = new vtkBaseData();
+       //_vtkbasedata_1->SetMarImageData(marimagedata);        
+       //_imageviewer2D_1->SetVtkBaseData( _vtkbasedata_1 );
+       //_imageviewer2D_1->Configure();
+
+
+       // Contorno 1
+       manualContourControler _manContourControl_1     = new manualContourControler();
+       manualContourModel _mContourModel_1     = new manualContourModel();
+       manualViewContour _mViewContour_1 = new manualViewContour();
+       _mViewContour_1->SetModel( _mContourModel_1 );
+//     _mViewContour_1->SetWxVtkBaseView( _imageviewer2D_1 );
+       _mViewContour_1->SetRange( 2 );
+       _mViewContour_1->SetZ( 1200 );
+
+
+//EED 3 oct 2006
+       _mViewContour_1->SetSpacing(spc);
+
+
+//EED 3 oct 2006
+       _mViewContour_1->SetColorNormalContour(0, 0, 1);
+       _mViewContour_1->SetColorEditContour(0, 0.5, 0.5);
+
+       _manContourControl_1->SetModelView( _mContourModel_1 , _mViewContour_1 );
+//     _imageviewer2D_1->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manContourControl_1 );
+       _manContourControl_1->CreateNewManualContour();
+       _manContourControl_1->SetActive(false);
+       _mViewContour_1->RefreshContour();
+
+       // Rectangulo
+//     _manRoiControl  = new manualRoiControler();
+//     _mContourModel  = new manualContourModel();
+//     _mViewRoi               = new manualViewRoi();
+       _mViewRoi->SetModel( _mContourModel );
+       _mViewRoi->SetWxVtkBaseView( _imageviewer2D_1 );
+       _mViewRoi->SetRange( 2 );
+       _mViewRoi->SetZ( 1200 );
+
+//EED 3 oct 2006
+       _mViewRoi->SetSpacing(spc);
+
+//     _manRoiControl->SetModelView( _mContourModel , _mViewRoi );
+//     _imageviewer2D_1->GetInteractorStyleBaseView()->AddInteractorStyleMaracas( _manRoiControl );
+//     _manRoiControl->CreateNewManualContour();
+//     _manRoiControl->SetActive(true);
+//     _mViewRoi->RefreshContour();
+
+CreateNewPoint( 0,0);
+
+       Refresh();      
+
+*/
+
+
+
+
+
+       //Crea una linea de referencia
+       manualContourModel * refLine = kernelManager->factoryManualContourModel(6);
+
+       std::vector<int> instantVector;
+       _instantPanel->getInstant( instantVector );
+       std::string nameLine = kernelManager->createOutline(refLine, instantVector);
+       bool addedModel = nameLine.compare("") != 0;
+       if( addedModel )
+       {
+               double spc[3];
+               _theViewPanel->getSpacing(spc);                                 
+               _theViewPanel->getSceneManager()->configureViewControlTo( nameLine, refLine,spc , 6);
+       }       
+
+       _refName = nameLine;
+
+}
+
+
 void wxContourMainFrame::onMirror()
 {
-       //AD:02-09
+       //AD:02-09
        std::vector<std::string> currentSelection = _theViewPanel->getSelectedObjects();
+       std::vector<std::string> filterCurrentSelection;
+       
+       std::vector<std::string>::iterator iter;
+       for (iter=currentSelection.begin(); iter!=currentSelection.end(); ++iter)
+       {
+               //Diferente de la linea de referencia
+               if ((_refName.compare(*iter))!=0)
+               {
+                       filterCurrentSelection.push_back(*iter);        
+               }
+       }
 
        std::vector<int> tempVector;
        _instantPanel->getInstant( tempVector );
     _performingOperation->reset();
        _performingOperation->setStartCommand( COPY );
        _performingOperation->setStartOperationInstantVector( tempVector );
-       _performingOperation->setKeyNamesOperationElems( currentSelection );
+       _performingOperation->setKeyNamesOperationElems( filterCurrentSelection );
 
        //AD:02-09
        char theStartCommand = _performingOperation->getStartCommand();
@@ -1103,9 +1251,12 @@ void wxContourMainFrame::onMirror()
                int i,size = elems.size();                      
                for( i=0; i<size; i++ )
                {                               
-                       createCopyContourOf( elems[i], tempVector, i>0 );
+                       createMirrorContourOf( elems[i], tempVector, i>0 );
                }               
        }
+
+       deleteContour( _refName );
+       _refName = "";
 }
 
 void wxContourMainFrame::showAxis(bool show){