X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FmanualContour%2FmanualViewContour.cpp;h=0006b13e0265b3cec358d16ff652f0a7580777a1;hb=f369752f86b8a540df6638ba87945e83c9498b4b;hp=4fcd7228798e90ea5acf0a56a9ba7205e52fb63f;hpb=6e68b5935bb50bf855de11614fd3b49c06b84294;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualViewContour.cpp b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualViewContour.cpp index 4fcd722..0006b13 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualViewContour.cpp +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualViewContour.cpp @@ -1,3 +1,28 @@ +/*# --------------------------------------------------------------------- +# +# Copyright (c) CREATIS (Centre de Recherche en Acquisition et Traitement de l'Image +# pour la Sant�) +# Authors : Eduardo Davila, Frederic Cervenansky, Claire Mouton +# Previous Authors : Laurent Guigues, Jean-Pierre Roux +# CreaTools website : www.creatis.insa-lyon.fr/site/fr/creatools_accueil +# +# This software is governed by the CeCILL-B license under French law and +# abiding by the rules of distribution of free software. You can use, +# modify and/ or redistribute the software under the terms of the CeCILL-B +# license as circulated by CEA, CNRS and INRIA at the following URL +# http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html +# or in the file LICENSE.txt. +# +# As a counterpart to the access to the source code and rights to copy, +# modify and redistribute granted by the license, users are provided only +# with a limited warranty and the software's author, the holder of the +# economic rights, and the successive licensors have only limited +# liability. +# +# The fact that you are presently reading this means that you have had +# knowledge of the CeCILL-B license and that you accept its terms. +# ------------------------------------------------------------------------ */ + #include "manualViewContour.h" // ---------------------------------------------------------------------------- @@ -6,9 +31,15 @@ manualViewContour::manualViewContour() { - _id_viewPoint_for_text = 0; - _mesureScale = 1; - _initialConoturModel = new manualContourModel(); + _id_viewPoint_for_text = 0; + _mesureScale = 1; + _initialConoturModel = new manualContourModel(); + + _minX = 99999; + _minY = 99999; + _maxX = -99999; + _maxY = -99999; + } // ---------------------------------------------------------------------------- manualViewContour::~manualViewContour() @@ -55,17 +86,15 @@ void manualViewContour::Open(FILE *pFile) { } - - // ---------------------------------------------------------------------------- void manualViewContour::RefreshContour() // virtual { - int i,np,nps; //JSTG 25-02-08 -------------------- //double t,delta, x,y,z; double x,y,z; + double xx,yy,zz; //---------------------------------- _manContModel->UpdateSpline(); @@ -74,7 +103,13 @@ void manualViewContour::RefreshContour() // virtual nps = _manContModel->GetNumberOfPointsSpline(); //delta=( double ) ( np ) / ( double ) ( nps-1 ); //JSTG 25-02-08 - + //EED 27 Juin 2012 + //Boundaring box + _minX=99999; + _minY=99999; + _maxX=-99999; + _maxY=-99999; + if ( _pts!=NULL ) { if (np>=2 ) @@ -88,9 +123,18 @@ void manualViewContour::RefreshContour() // virtual //-------------------------------------------------------------- // EED 27 sep 2006 // _pts->SetPoint(i, x,y,z ); - _pts->SetPoint(i , x*_spc[0] , y*_spc[1] , z*_spc[2] ); - - + xx=x*_spc[0]; + yy=y*_spc[1]; + zz=z*_spc[2]; + _pts->SetPoint(i,xx,yy,zz ); + + //EED 27 Juin 2012 + //Boundaring box + if (xx < _minX) { _minX = xx; } + if (yy < _minY) { _minY = yy; } + if (xx > _maxX) { _maxX = xx; } + if (yy > _maxY) { _maxY = yy; } + }// for } else @@ -107,32 +151,78 @@ void manualViewContour::RefreshText() // virtual if ((_textActor!=NULL) && ( _textActor->GetProperty()->GetOpacity()!=0 )){ int size = GetNumberOfPoints(); char text[50]; - char resultText[50]; - strcpy(resultText," "); + char resultText[250]; + strcpy(resultText, "000"); + char resultText2[250]; + strcpy(resultText2, "000"); + +//CMRU 19-08-09 ---------------------------------- + std::string label; + label = _manContModel->GetLabel(); +// ------------------------------------ + if (size==2) { strcpy(resultText,"L= "); - gcvt ( _mesureScale * this->_manContModel->GetPathSize() , 5, text ); + gcvt ( _mesureScale * this->_manContModel->GetPathSize(), 5, text ); strcat(resultText,text); + strcat(resultText,"p"); + +//CMRU 19-08-09 ---------------------------------- + strcat(resultText," "); + strcat(resultText,label.c_str()); + + strcpy(resultText2,"L= "); + gcvt ( _mesureScale * this->_manContModel->GetPathSize(), 5, text ); + strcat(resultText2,text); + strcat(resultText2,"u"); + +//------------------------------------------------ } if (size>2) { if (_manContModel->IfCloseContour()==true) { strcpy(resultText,"P= "); - gcvt ( _mesureScale * this->_manContModel->GetPathSize() , 5, text ); + gcvt ( _mesureScale * this->_manContModel->GetPathSize(), 5, text ); strcat(resultText,text); - gcvt ( _mesureScale * _mesureScale * this->_manContModel->GetPathArea() , 5, text ); + strcat(resultText,"p"); + + gcvt ( _mesureScale * _mesureScale * this->_manContModel->GetPathArea(), 5, text ); strcat(resultText," A= "); strcat(resultText,text); + strcat(resultText,"p^2 "); + + + strcpy(resultText2,"P= "); + gcvt ( _mesureScale * this->_manContModel->GetPathSize(), 5, text ); + strcat(resultText2,text); + strcat(resultText2,"u"); + + gcvt ( _mesureScale * _mesureScale * this->_manContModel->GetPathArea(), 5, text ); + strcat(resultText2," A= "); + strcat(resultText2,text); + strcat(resultText2,"u^2 "); + } else { strcpy(resultText,"L= "); - gcvt ( _mesureScale * this->_manContModel->GetPathSize() , 5, text ); + gcvt ( _mesureScale * this->_manContModel->GetPathSize(), 5, text ); strcat(resultText,text); + strcat(resultText,"p"); + + strcpy(resultText2,"L= "); + gcvt ( _mesureScale * this->_manContModel->GetPathSize(), 5, text ); + strcat(resultText2,text); + strcat(resultText2,"u"); + } +//CMRU 19-08-09 ---------------------------------- + strcat(resultText,label.c_str()); +//------------------------------------------------ } _textActor->SetInput(resultText); + _textActor2->SetInput(resultText2); if (size>=1){ @@ -145,23 +235,27 @@ void manualViewContour::RefreshText() // virtual } } - int id = _id_viewPoint_for_text; - double px = _manContModel->GetManualPoint(id)->GetX(); - double py = _manContModel->GetManualPoint(id)->GetY(); + if (_id_viewPoint_for_text>=size) + { + _id_viewPoint_for_text=0; + } + + double px = _manContModel->GetManualPoint(_id_viewPoint_for_text)->GetX(); + double py = _manContModel->GetManualPoint(_id_viewPoint_for_text)->GetY(); //EED 27 sep 2006 px=px*_spc[0]; py=py*_spc[1]; _textActor->SetPosition(px+GetRange()+1,py); + _textActor2->SetPosition(px+GetRange()+1,py+2); } - } } // ---------------------------------------------------------------------------- -bool manualViewContour::ifTouchContour(int x,int y,int z){ - +bool manualViewContour::ifTouchContour(int x,int y,int z) +{ bool result=false; double xx=x; double yy=y; @@ -176,40 +270,35 @@ bool manualViewContour::ifTouchContour(int x,int y,int z){ yy = yy * _spc[1]; zz = zz * _spc[2]; - unsigned int i, nps,nps_t; - nps = _sizePointsContour; + if ( (xx>=_minX) && (yy>=_minY) && (xx<=_maxX) && (yy<=_maxY)) { // inside the boundaring box - if (this->_manContModel->IfCloseContour()==true) - { - nps_t = nps; - } else { + unsigned int i, nps,nps_t; + nps = _sizePointsContour; + + if (this->_manContModel->IfCloseContour()==true) + { + nps_t = nps; + } else { nps_t = nps-1; - } + } // if close - - for( i = 0; i < nps_t; i++ ) - { - _pts->GetPoint(i%nps, ppA); - _pts->GetPoint((i+1)%nps, ppB); - d1= sqrt( (ppA[0]-xx)*(ppA[0]-xx) + (ppA[1]-yy)*(ppA[1]-yy) + (ppA[2]-zz)*(ppA[2]-zz)); - d2= sqrt( (ppB[0]-xx)*(ppB[0]-xx) + (ppB[1]-yy)*(ppB[1]-yy) + (ppB[2]-zz)*(ppB[2]-zz)); - d3= sqrt( (ppB[0]-ppA[0])*(ppB[0]-ppA[0]) + (ppB[1]-ppA[1])*(ppB[1]-ppA[1]) + (ppB[2]-ppA[2])*(ppB[2]-ppA[2])); +printf("EED Warning manualViewContour::ifTouchContour \n"); - if ( ((d1+d2)>=d3) && ((d1+d2)<=d3*1.3) ) + for( i = 0; i < nps_t; i++ ) { - result=true; - i=nps; - } - - //EED 25 Sep 2009 - if ((d1<=1) || (d2<=1)) - { - result=true; - i=nps; - } - - } - + _pts->GetPoint(i%nps, ppA); + _pts->GetPoint((i+1)%nps, ppB); + d1 = sqrt( (ppA[0]-xx)*(ppA[0]-xx) + (ppA[1]-yy)*(ppA[1]-yy) + (ppA[2]-zz)*(ppA[2]-zz)); + d2 = sqrt( (ppB[0]-xx)*(ppB[0]-xx) + (ppB[1]-yy)*(ppB[1]-yy) + (ppB[2]-zz)*(ppB[2]-zz)); + d3 = sqrt( (ppB[0]-ppA[0])*(ppB[0]-ppA[0]) + (ppB[1]-ppA[1])*(ppB[1]-ppA[1]) + (ppB[2]-ppA[2])*(ppB[2]-ppA[2])); + + if ( ((d1+d2)>=d3) && ((d1+d2)<=d3*1.3) ) + { + result=true; + i=nps; + } // if + } // for i + } // if min max return result; }