2 //----------------------------------------------------------------------------------------------------------------
3 // Class definition include
4 //----------------------------------------------------------------------------------------------------------------
5 #include "KernelManagerContour.h"
8 KernelManagerContour::KernelManagerContour(){
11 /**THIS ALL SHOULD BE IN AN OTHER LIB CALLED PERSISTANCE
18 seconds = time (NULL);
22 stundoredo = "data/temp"+intToString(time);
25 _contourPropagation = NULL;
27 mkdir(stundoredo.c_str());
29 mkdir(stundoredo.c_str(),755);
31 stundoredo += "/cont";
37 KernelManagerContour::KernelManagerContour(std::vector<vtkImageData*> images){
40 /**THIS ALL SHOULD BE IN AN OTHER LIB CALLED PERSISTANCE
47 seconds = time (NULL);
51 stundoredo = "data/temp"+intToString(time);
54 _contourPropagation = NULL;
56 mkdir(stundoredo.c_str());
58 mkdir(stundoredo.c_str(),755);
60 stundoredo += "/cont";
64 setVectImages(images);
65 initializeEnvironment();
68 KernelManagerContour::~KernelManagerContour(){
71 std::vector<vtkImageData*> KernelManagerContour::getVectImages(){
74 void KernelManagerContour::setVectImages(std::vector<vtkImageData*> vectimg){
76 for(int i = 0; i < vectimg.size(); i++){
77 vtkImageData* img = vectimg[i];
78 vtkImageChangeInformation* change = vtkImageChangeInformation::New();
79 change->SetInformationInput(img);
80 change->SetInputConnection(img->GetProducerPort());
82 change->SetOutputSpacing(0.6,0.6,0.6);
86 vectimg[i] = change->GetOutput();
92 void KernelManagerContour::initializeEnvironment(){
93 std::string conceptsFN = "data/holaConceptsFile.cf";
94 std::string imageSourcesFN = "data/holaImagesInstantsFile.of";
95 std::string imageSectionsFN = "";
96 std::string axeThingsFN = "";
98 std::map<std::string, ImageSourceThing *> * sourcesMap = new std::map<std::string, ImageSourceThing *>();
99 std::map<std::string, ImageSectionThing *>* sectionsMap = new std::map<std::string, ImageSectionThing *>();
100 std::map<std::string, AxeThing *>* axesMap = new std::map<std::string, AxeThing *>();
101 std::map<std::string, ContourThing *>* outlinesMap = new std::map<std::string, ContourThing *>();
103 for(int i = 0; i < vectimages.size(); i++){
104 vtkImageData* selectedimage = vectimages[i];
105 ImageSourceThing * thing = new ImageSourceThing(selectedimage);
106 std::string imgstring = "Source Image "+intToString(i+1);
107 sourcesMap->insert(std::pair<std::string, ImageSourceThing *>( imgstring, thing));
111 OutlineModelBuilder * _builder = new OutlineModelBuilder( conceptsFN );
112 _builder->buildImageSource_Envornment( imageSourcesFN, sourcesMap );
113 _builder->buildImageSection_Envornment( imageSectionsFN, sectionsMap );
114 _builder->buildAxe_Envornment(axeThingsFN, axesMap );
115 _builder->buildCountour_Envornment( imageSectionsFN, outlinesMap );
117 //Creating the objects to manage
118 modelManager = new OutlineModelManager( _builder->getImSourceEnv(), _builder->getImSectionEnv(), _builder->getAxesEnv(), _builder->getContourEnv() );
120 imageSource = modelManager->getImageSourceThingByKeyName( "Source Image 1" );
123 vtkImageData* KernelManagerContour::getSourceImage(){
124 return imageSource->getSourceImage();
126 OutlineModelManager* KernelManagerContour::getOutlineModelManager(){
130 std::string KernelManagerContour::createOutline(manualContourModel * manModelContour,std::vector<int> instantVector){
131 return modelManager->createOutline( manModelContour, instantVector );
134 std::string KernelManagerContour::intToString(int num){
141 char temp = k % 10 + 48;
143 result = temp + result;
149 std::vector<std::string> KernelManagerContour::GetLstNameThingsStatic(){
150 return modelManager->GetLstNameThingsStatic();
153 void KernelManagerContour::SaveThingName(FILE* pFile, std::string name ){
154 modelManager->SaveThingName(pFile, name);
156 std::vector<std::string> KernelManagerContour::GetLstNameThings(){
157 return modelManager->GetLstNameThings();
159 //int KernelManagerContour::IsPartOfStaticList(std::string keyName ){
160 // return modelManager->IsPartOfStaticList(keyName);
163 bool KernelManagerContour::IsPartOfStaticList(std::string theKeyName){
164 return modelManager->IsPartOfStaticList(theKeyName) == -1;
167 void KernelManagerContour::deleteCModel(std::string theKeyName){
168 manualContourModel* cModel = modelManager->getOutlineByKeyName(theKeyName)->getModel();
169 modelManager->removeOutline( theKeyName );
174 void KernelManagerContour::removeAllOutlines(){
175 modelManager->removeAllOutlines();
178 std::vector<NameWrapper *> KernelManagerContour::getActualInstantOutlines(){
179 return modelManager->getActualInstantOutlines();
182 int KernelManagerContour::getNamesWrappingSize(){
183 return getActualInstantOutlines().size();
186 std::string KernelManagerContour::getNameWrapping(int i){
187 return getActualInstantOutlines()[i]->getKeyName();
190 void KernelManagerContour::setInstant(Instant * theInstant){
191 modelManager->setInstant(theInstant);
192 //_actualInstant = theInstant;
195 Instant * KernelManagerContour::getCurrentInstant(){
196 return modelManager->getInstant();
198 void KernelManagerContour::setInstant(std::vector<int> vectInstant){
199 Instant* act = new Instant ( &vectInstant );
200 modelManager->setInstant(act);
203 std::string KernelManagerContour::createCopyContourOf ( std::string anExistingKName, std::vector<int> &instantNoTouchData){
204 return modelManager->createCopyContourOf(anExistingKName, instantNoTouchData);
206 manualContourModel* KernelManagerContour::getOutlineByKeyName(std::string cloneName){
207 return modelManager->getOutlineByKeyName (cloneName )->getModel();
210 bool KernelManagerContour::onRedo(std::string& filename){
214 std::string str = intToString(inundo);
215 filename = stundoredo + str + ".roi";
222 bool KernelManagerContour::onUndo(std::string& filename){
228 //itoa(inundo, str, 10);
229 std::string str = intToString(inundo);
232 filename = stundoredo + str + ".roi";
234 return true;//loadState(temp);
239 std::string KernelManagerContour::saveState(){
241 std::string str = intToString(inundo);
242 std::string temp = stundoredo + str + ".roi";
247 bool KernelManagerContour::onUndoSaveFile(std::string& filename){
252 //itoa(inundo, str, 10);
253 std::string str = intToString(inundo);
255 filename = stundoredo + str + ".roi";
257 //saveFileWithContours(temp);
264 void KernelManagerContour :: changeContourOfManager(std::string keyName, Instant *instant)
266 modelManager->ChangeContourOfList(keyName, instant);
269 void KernelManagerContour ::resetAppend(){
270 if(isInitContourPropagation()){
271 _contourPropagation->resetAppend();
275 bool KernelManagerContour::isInitContourPropagation(){
276 if(_contourPropagation == NULL){
277 _contourPropagation = new ContourPropagation();
285 std::string KernelManagerContour::onSpreadAdd( std::vector<double> *vecX, std::vector<double> *vecY, std::vector<double> *vecZ, std::vector<int> instants){
286 if(isInitContourPropagation()){
287 if (vecX->size()!=0){
289 int i,size=vecZ->size();
290 int actualSlice = instants[1];
291 for ( i=0 ; i<size ; i++ )
293 (*vecZ)[i] = actualSlice;
296 _contourPropagation->appendContour(vecX , vecY , vecZ);
297 return intToString(actualSlice);
303 void KernelManagerContour::getMaxMinZ(double *minZ,double *maxZ){
304 if(isInitContourPropagation()){
305 _contourPropagation->getMaxMinZ(minZ, maxZ);
308 void KernelManagerContour::CalculeSplinePropagation(){
309 _contourPropagation->setInterpolationNumber(100);
310 _contourPropagation->CalculeSplinePropagation();
313 manualContourModel* KernelManagerContour::GetPoints(int z,int type, std::vector<double>* vecCtrlPointX,std::vector<double>* vecCtrlPointY,std::vector<double>* vecCtrlPointZ, std::string& theName,int typeofcontour, std::vector<int> tempVector){
316 bool addedModel = false;
317 manualContourModel* manModelContour=NULL;
319 if (_contourPropagation->ifSliceKeyContourExist(z)==false){
321 manModelContour = factoryManualContourModel( typeofcontour );
323 int idTmp = _contourPropagation->FindIdWithZ(z);
325 if (type==0) // Initial Points
327 _contourPropagation->GetInitialControlPoints( idTmp , vecCtrlPointX,vecCtrlPointY,vecCtrlPointZ);
329 if (type==1) // Automatique Method
331 _contourPropagation->GetControlPoints( idTmp ,vecCtrlPointX,vecCtrlPointY,vecCtrlPointZ);
333 if (type==2) // sampling
335 _contourPropagation->GetControlPoints( idTmp , 20.0 ,vecCtrlPointX,vecCtrlPointY,vecCtrlPointZ);
337 //--------------------------------------------------------------------
338 int sizeCtrPt = vecCtrlPointX->size();
339 for (int j=0 ; j<sizeCtrPt ; j++)
341 //JSTG_16-07-08_----------------------------------------------------------------
342 manModelContour->AddPoint( (*vecCtrlPointX)[j] , (*vecCtrlPointY)[j] , -900 );
343 //--------------------------------------------------------------------
347 theName = modelManager->createOutline( manModelContour, tempVector );
348 addedModel = theName.compare("") != 0;
350 manModelContour = NULL;
353 }// ifSliceKeyContourExist
354 return manModelContour;
358 manualContourModel * KernelManagerContour::factoryManualContourModel(int typeContour)
360 manualContourModel *manModelContour=NULL;
365 manModelContour = new manualContourModel();
371 manModelContour = new manualContourModel();
377 manModelContour = new manualContourModelRoi();
383 manModelContour = new manualContourModelCircle();
386 return manModelContour;
389 std::vector<std::string> KernelManagerContour::getOutlinesNameAtInstant(std::vector<int> tempvector){
390 Instant instant(&tempvector);
391 std::vector<ContourThing**> vectcont = modelManager->getOutlinesAtInstant( &instant );
392 std::vector<std::string> vectname;
393 for(int i = 0; i < vectcont.size(); i++){
394 ContourThing **contourthing = vectcont[i];
395 vectname.push_back((*contourthing)->getName());
400 std::vector<ContourThing**> KernelManagerContour::getOutlinesAtInstant(Instant* instant ){
401 return modelManager->getOutlinesAtInstant(instant);
404 std::vector<manualContourModel*> KernelManagerContour::ExploseEachModel( std::vector<manualContourModel*> lstManConMod ){
405 std::vector<manualContourModel*> lstTmp;
406 std::vector<manualContourModel*> lstResult;
408 int i,iSize=lstManConMod.size();
409 for (i=0;i<iSize;i++)
411 lstTmp = lstManConMod[i]->ExploseModel();
413 for (j=0;j<jSize;j++)
415 lstResult.push_back( lstTmp[j] );
421 void KernelManagerContour::getConceptsInformation(std::vector<std::string>& conceptNameVect, std::vector<int>& conceptSizeVect){
422 modelManager-> getConceptsInformation(conceptNameVect, conceptSizeVect);
426 vtkImageData* KernelManagerContour::getImageAtInstant(std::vector<int> inst){
427 int index = inst[5]-1;
429 if(index < vectimages.size()&&index!=_currentIndex){
431 return vectimages[index];
436 std::string KernelManagerContour::getCurrentFileName(){
440 void KernelManagerContour::setCurrentFileName(std::string filenam){
441 this->filename = filenam;