X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;ds=sidebyside;f=lib%2FmaracasVisuLib%2Fsrc%2Finterface%2FwxWindows%2Fwidgets%2FwxMaracasMultipleVolumeRendererManager.cxx;h=8ab810eb2d87f954bc1791461ca9cc86f4926380;hb=4dcdcabb81ce9f9e9b7ccdb86a64995d7b18ea23;hp=16186ba7f324ac8da5b01980146db89bb5955a94;hpb=cc00f80af2e160ce2af3ddd2903c4a41c023cc94;p=creaMaracasVisu.git diff --git a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasMultipleVolumeRendererManager.cxx b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasMultipleVolumeRendererManager.cxx index 16186ba..8ab810e 100644 --- a/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasMultipleVolumeRendererManager.cxx +++ b/lib/maracasVisuLib/src/interface/wxWindows/widgets/wxMaracasMultipleVolumeRendererManager.cxx @@ -1,10 +1,35 @@ +/*# --------------------------------------------------------------------- +# +# 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. +# ------------------------------------------------------------------------ */ + /*========================================================================= Program: wxMaracas Module: $RCSfile: wxMaracasMultipleVolumeRendererManager.cxx,v $ Language: C++ - Date: $Date: 2009/07/08 14:22:14 $ - Version: $Revision: 1.1 $ + Date: $Date: 2012/11/15 14:14:35 $ + Version: $Revision: 1.10 $ Copyright: (c) 2002, 2003 License: @@ -16,7 +41,9 @@ =========================================================================*/ #include "wxMaracasMultipleVolumeRendererManager.h" +#include "vtkRenderWindow.h" #include +#include /** ** Start of the manager class **/ @@ -33,17 +60,43 @@ wxMaracasMultipleVolumeRendererManager::~wxMaracasMultipleVolumeRendererManager( void wxMaracasMultipleVolumeRendererManager::setRenderer(vtkRenderer* renderer){ _renderer = renderer; } + +/** +** Gets the renderer which manage the prop3D from the view +**/ +vtkRenderer* wxMaracasMultipleVolumeRendererManager::getRenderer(){ + return _renderer; +} + +/** +** Updates Volume +**/ +void wxMaracasMultipleVolumeRendererManager::Update(int ppid){ + wxMaracasMultipleVolumeRendererManagerData* data = this->getViewData(ppid); + data->Update(); + _renderer->GetRenderWindow()->Render(); +} + /** ** Adds a prop3D to the manager and returns the identifier **/ -int wxMaracasMultipleVolumeRendererManager::addVolume(vtkImageData* vol, std::string dataname) throw(char*){ +int wxMaracasMultipleVolumeRendererManager::addVolume(int idTP, vtkImageData* vol, std::string dataname) throw(char*){ checkInvariant(); + image = vol; if(vol != NULL){ wxMaracasMultipleVolumeRendererManagerData* data = new wxMaracasMultipleVolumeRendererManagerData(vol, dataname); - prop3Dvect.push_back(data); + prop3Dvect.push_back(data); _renderer->AddActor(data->getProp3D()); - data->setId(_idCount); - _idCount++; + if(idTP == -1) + { + data->setId(_idCount); + _idCount++; + } + else + { + data->setId(idTP); + } + printf("wxMaracasMultipleVolumeRendererManager::addVolume->idVolumeRenderer: %i\n", data->getId()); return data->getId(); }else{ throw "Check mhd imagefile file or input"; @@ -54,7 +107,8 @@ int wxMaracasMultipleVolumeRendererManager::addVolume(vtkImageData* vol, std::st ** adds or removes an actor depending of the bool value **/ -void wxMaracasMultipleVolumeRendererManager::addRemoveActor(int propid, bool addremove) throw(char*){ +void wxMaracasMultipleVolumeRendererManager::addRemoveActor(int propid, bool addremove) throw(char*) +{ checkInvariant(); wxMaracasMultipleVolumeRendererManagerData* data = this->getViewData(propid); @@ -64,19 +118,22 @@ void wxMaracasMultipleVolumeRendererManager::addRemoveActor(int propid, bool add }else{ _renderer->RemoveViewProp(data->getProp3D()); } - _renderer->Render(); + _renderer->GetRenderWindow()->Render(); } } + + /** ** Changes the opacity in a prop3D **/ -void wxMaracasMultipleVolumeRendererManager::setVolumeOpacity(int propid, std::vector greylevel,std::vector value) throw(char*){ +void wxMaracasMultipleVolumeRendererManager::setVolumeOpacity(int propid, std::vector greylevel,std::vector value) throw(char*) +{ checkInvariant(); this->getViewData(propid)->setVolumeOpacity(greylevel, value); - _renderer->Render(); + _renderer->GetRenderWindow()->Render(); } @@ -86,36 +143,54 @@ void wxMaracasMultipleVolumeRendererManager::setVolumeOpacity(int propid, std::v void wxMaracasMultipleVolumeRendererManager::setVolumeColor(int volid, std::vector greylevel, std::vector red, std::vector green, - std::vector blue) + std::vector blue)throw(char*) { checkInvariant(); this->getViewData(volid)->setVolumeColor(greylevel, red, green, blue); - _renderer->Render(); + _renderer->GetRenderWindow()->Render(); } -vtkImageData* wxMaracasMultipleVolumeRendererManager::getImageData(std::string filename){ + +vtkImageData* wxMaracasMultipleVolumeRendererManager::getImageData(std::string filename) +{ if(filename.compare("")!= 0){ - vtkMetaImageReader* reader = vtkMetaImageReader::New(); reader->SetFileName(filename.c_str()); reader->Update(); - vtkImageData* img = reader->GetOutput(); + vtkImageData* img = reader->GetOutput(); + + vtkImageCast* cast = vtkImageCast::New(); + cast->SetInput(img); + cast->SetOutputScalarTypeToUnsignedShort(); + cast->Update(); //reader->Delete(); - return img; + //img->Delete(); + return cast->GetOutput(); + //return img; } return NULL; } -void wxMaracasMultipleVolumeRendererManager::checkInvariant() throw(char*){ + +vtkImageData* wxMaracasMultipleVolumeRendererManager::getImageData() +{ + return image; +} + + +void wxMaracasMultipleVolumeRendererManager::checkInvariant() throw(char*) +{ if(this->_renderer==NULL){ throw "Renderer not set"; } } -wxMaracasMultipleVolumeRendererManagerData* wxMaracasMultipleVolumeRendererManager::getViewData(int id) throw(char*){ + +wxMaracasMultipleVolumeRendererManagerData* wxMaracasMultipleVolumeRendererManager::getViewData(int id) throw(char*) +{ int i; for(i = 0; i < (int)(prop3Dvect.size());i++){ if(prop3Dvect[i]->getId() == id){ @@ -127,7 +202,9 @@ wxMaracasMultipleVolumeRendererManagerData* wxMaracasMultipleVolumeRendererManag return NULL; } -void wxMaracasMultipleVolumeRendererManager::deleteActor(int propid) throw (char *){ + +void wxMaracasMultipleVolumeRendererManager::deleteActor(int propid) throw (char *) +{ checkInvariant(); this->addRemoveActor(propid, false); @@ -153,3 +230,23 @@ void wxMaracasMultipleVolumeRendererManager::deleteActor(int propid) throw (char } } + + +vtkPiecewiseFunction* wxMaracasMultipleVolumeRendererManager::GetTransferFunction(int volumeid) +{ + return getViewData(volumeid)->GetTransferFunction(); +} + + +vtkColorTransferFunction* wxMaracasMultipleVolumeRendererManager::GetColorFunction(int volumeid) +{ + + return getViewData(volumeid)->GetColorFunction(); +} + + +void wxMaracasMultipleVolumeRendererManager::changeCompositeMIPFunction(int id, int function) throw (char *) +{ + getViewData(id)->changeCompositeMIPFunction(function); + Update(id); +}