X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FmanualContour%2FmanualView3VContour.cpp;h=27f0b07b450ba22675547c0ef4be3278d97cb372;hb=05c4abbebf824bbbbaaab135acf6c888662dff69;hp=c7a1d75526058b14f4dc0b965eb8537354f961e2;hpb=885faee171b5cdcbcbbcb6cc83e6d196544e005c;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualView3VContour.cpp b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualView3VContour.cpp index c7a1d75..27f0b07 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualView3VContour.cpp +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/manualContour/manualView3VContour.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 "manualView3VContour.h" @@ -62,6 +87,17 @@ void manualView3VContour::RefreshContour() // virtula { manualViewContour::RefreshContour(); int i; + + //EED 27 Juin 2012 + //Boundaring box + _minX=99999; + _minY=99999; + _minZ=99999; + _maxX=-99999; + _maxY=-99999; + _maxZ=-99999; + + double pp[3]; // JSTG 25-02-08 ---------------------------------------- //int nps = GetNumberOfPointsSpline(); @@ -74,7 +110,18 @@ void manualView3VContour::RefreshContour() // virtula //EED 27 sep 2006 _pts->SetPoint( i, pp[0] , pp[1] ,pp[2] ); - } + + + //EED 27 Juin 2012 + //Boundaring box + if (pp[0] < _minX) { _minX = pp[0]; } + if (pp[1] < _minY) { _minY = pp[1]; } + if (pp[2] < _minZ) { _minZ = pp[2]; } + if (pp[0] > _maxX) { _maxX = pp[0]; } + if (pp[1] > _maxY) { _maxY = pp[1]; } + if (pp[2] > _maxZ) { _maxY = pp[2]; } + + }// for } @@ -122,28 +169,30 @@ bool manualView3VContour::ifTouchContour(int x,int y,int z){ // virtual yy = yy * _spc[1]; zz = zz * _spc[2]; - unsigned int i, nps,nps_t; - nps = _sizePointsContour; - if (this->_manContModel->IfCloseContour()==true) - { - nps_t = nps; - } else { - nps_t = nps-1; - } - FilterCordinateXYZ(xx,yy,zz); - - for( i = 0; i < nps_t; i++ ) { - _pts->GetPoint(i%nps, ppA); - _pts->GetPoint((i+1)%nps, ppB); - FilterCordinateXYZ(ppA[0],ppA[1],ppA[2]); - FilterCordinateXYZ(ppB[0],ppB[1],ppB[2]); - 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 ( (xx>=_minX) && (yy>=_minY) && (xx<=_maxX) && (yy<=_maxY)) { // boundaring box + unsigned int i, nps,nps_t; + nps = _sizePointsContour; + if (this->_manContModel->IfCloseContour()==true) + { + nps_t = nps; + } else { + nps_t = nps-1; } - } + FilterCordinateXYZ(xx,yy,zz); + + for( i = 0; i < nps_t; i++ ) { + _pts->GetPoint(i%nps, ppA); + _pts->GetPoint((i+1)%nps, ppB); + FilterCordinateXYZ(ppA[0],ppA[1],ppA[2]); + FilterCordinateXYZ(ppB[0],ppB[1],ppB[2]); + 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 d1 d2 d3 + }// for i + } // boundaring box return result; }