36 #include <QStringList>
39 #include <QInputDialog>
40 #include <QFileDialog>
41 #include <QTableWidgetItem>
42 #include <QMessageBox>
44 #include <QCloseEvent>
51 #include "vtkMySQLDatabase.h"
52 #include "vtkSQLQuery.h"
53 #include "vtkStringArray.h"
54 #include "vtkStdString.h"
77 m_ContoursManager(NULL),
78 m_MeshesManager(NULL),
79 m_TracksManager(NULL),
80 m_LineagesManager(NULL),
81 m_DatabaseConnector(NULL),
82 m_IsDatabaseUsed(false),
84 m_MeshGenerationMode(false)
146 QIcon TableWidgetIcon;
148 QIcon::Normal, QIcon::Off);
172 const std::string & iNameDB,
const std::string & iServer,
173 const std::string & iUser,
const std::string & iPassword,
174 const unsigned int & iImgSessionID,
const std::string & iImgSessionName)
221 bool limitedMemory = ( iThreshold != std::numeric_limits< unsigned int >::max() );
230 if( ( nbOfTraces <= iThreshold ) || !limitedMemory )
271 unsigned int iYCoordMin,
272 unsigned int iZCoordMin,
273 unsigned int iTCoord,
274 unsigned int iXCoordMax,
275 unsigned int iYCoordMax,
276 unsigned int iZCoordMax,
277 vtkPolyData *iContourNodes)
280 unsigned int ContourID;
297 iXCoordMin, iYCoordMin, iZCoordMin, iTCoord, iXCoordMax, iYCoordMax, iZCoordMax,
302 std::list< unsigned int > ListContours;
303 ListContours.push_back(ContourID);
304 std::list< unsigned int > ListMeshes =
306 if ( !ListMeshes.empty() )
318 unsigned int iYCoordMin,
319 unsigned int iZCoordMin,
320 unsigned int iXCoordMax,
321 unsigned int iYCoordMax,
322 unsigned int iZCoordMax,
324 vtkPolyData *iMeshNodes,
331 unsigned int TrackID = 0;
349 if ( MessageToPrint !=
"" )
352 int kickedMeshID = MessageToPrint.
toInt();
358 "Warning: existing mesh at this timepoint for this track !!The track of the mesh with the meshID %1 has been reassigned to 0")
362 std::list<unsigned int> MotherTrackDivisionToUpdate;
365 unsigned int NewMeshID;
366 if (!MessageToPrint.
isEmpty() )
395 std::list< unsigned int > ListNewMeshes;
396 ListNewMeshes.push_back(NewMeshID);
411 if (!MotherTrackDivisionToUpdate.empty() )
475 unsigned int iXCoordMin,
476 unsigned int iYCoordMin,
477 unsigned int iZCoordMin,
478 unsigned int iXCoordMax,
479 unsigned int iYCoordMax,
480 unsigned int iZCoordMax,
481 vtkPolyData *iTraceNodes)
504 std::list< QGoPrintDatabase::ItemColorComboboxData >
506 std::string & ioIDToSelect)
508 std::list< ItemColorComboboxData > EmptyList = std::list< ItemColorComboboxData >();
510 if ( TraceName ==
"contour" )
514 if ( TraceName ==
"mesh" )
529 if ( TraceName !=
"contour" && TraceName !=
"mesh" )
535 unsigned int NewCollectionID = 0;
536 if ( TraceName ==
"contour" )
542 if ( TraceName ==
"mesh" )
549 NewCollectionData.first = ConvertToString< unsigned int >(NewCollectionID);
560 int iZCoord,
int iTCoord)
564 BookmarkCoord.
SetField<
int >(
"XCoord", iXCoord);
565 BookmarkCoord.
SetField<
int >(
"YCoord", iYCoord);
566 BookmarkCoord.
SetField<
int >(
"ZCoord", iZCoord);
567 BookmarkCoord.
SetField<
int >(
"TCoord", iTCoord);
584 return ListBookmarks;
670 if ( iTableName ==
"contour" )
674 if ( iTableName ==
"mesh" )
686 tr(
"Save Contour Export File"),
"",
tr(
"TextFile (*.txt)") );
709 tr(
"Save Contour Export File"),
"",
tr(
"TextFile (*.txt)") );
733 tr(
"Open Contours Export File"),
"",
734 tr(
"TextFile (*.txt)") );
739 while ( it != p.
end() )
741 emit
PrintMessage(
tr(
"Warning: Close and reopen your imagingsession once the import is done !!") );
743 std::string filename = (*it).toStdString();
776 tr(
"Open Meshes Export Files"),
"",
777 tr(
"TextFile (*.txt)") );
781 emit
PrintMessage(
tr(
"Warning: Close and reopen your imagingsession once the import is done !!") );
787 for(
int i = 0; i < p.
size(); i++ )
790 std::string filename = ( p[i] ).toStdString();
816 tr(
"Open Tracks Export File"),
"",
817 tr(
"TextFile (*.txt)") );
819 std::vector< int > NewTrackIDs = std::vector< int >();
823 emit
PrintMessage(
tr(
"Warning: Close and reopen your imagingsession once the import is done !!") );
925 SIGNAL( NewCollectionToBeCreated() ),
930 SIGNAL( AddANewCellType() ),
934 SIGNAL( AddANewSubCellType() ),
955 if (PreviousTraceName != iTraceName)
1011 std::string IDToSelect;
1012 std::list< ItemColorComboboxData > ListCollectionID =
1056 iSubCellTypeToSelect);
1059 iSubCellTypeToSelect);
1084 if ( !NewCellType.empty() )
1102 std::string NewSubCellType =
1104 if ( !NewSubCellType.empty() )
1124 if ( !NewColor.first.empty() )
1193 vtkMySQLDatabase *iDatabaseConnector)
1196 iDatabaseConnector);
1198 iDatabaseConnector);
1200 iDatabaseConnector);
1203 iDatabaseConnector);
1211 vtkMySQLDatabase *iDatabaseConnector)
1224 DisplayInfoAndLoadVisuContainerForAllContoursForSpecificTPs(
1228 DisplayInfoAndLoadVisuContainerForAllMeshesForSpecificTPs(iDatabaseConnector,
1231 iDatabaseConnector);
1234 iDatabaseConnector);
1241 vtkMySQLDatabase *iDatabaseConnector, std::list<unsigned int> iListTimePoints)
1244 iDatabaseConnector, iListTimePoints);
1246 iDatabaseConnector, iListTimePoints);
1273 this->DeleteCheckedTraces< QGoDBContourManager, QGoDBMeshManager, QGoDBContourManager >(
1284 std::list< std::pair<unsigned int, double> > temp_list =
1289 this->DeleteCheckedTraces< QGoDBMeshManager, QGoDBTrackManager, QGoDBContourManager >(
1298 this->DeleteCheckedTraces< QGoDBTrackManager, QGoDBLineageManager, QGoDBMeshManager >(
1307 this->DeleteCheckedTraces< QGoDBLineageManager, QGoDBLineageManager, QGoDBTrackManager >(
1316 this->ChangeTraceColor< QGoDBMeshManager, QGoDBContourManager >(
1325 this->ChangeTraceColor< QGoDBTrackManager, QGoDBMeshManager >(
1334 this->ChangeTraceColor< QGoDBLineageManager, QGoDBTrackManager >(
1342 iMeshAttributes,
unsigned int iMeshID)
1345 iMeshAttributes, iMeshID);
1352 iTrackAttributes,
unsigned int iTrackID)
1356 iTrackAttributes, iTrackID);
1392 SIGNAL ( NeedMeshesInfoForImportedTrack(
unsigned int) ),
1440 SIGNAL( NewCollectionFromCheckedTraces(std::list< unsigned int > ) ),
1444 SIGNAL( CheckedTracesToAddToSelectedCollection(
1445 std::list< unsigned int > ) ),
this,
1448 SIGNAL( DBConnectionNotNeededAnymore() ),
1472 SIGNAL( TraceColorToChange() ),
1480 SIGNAL ( NewCollectionFromCheckedTraces(std::list< unsigned int > ) ),
1484 SIGNAL( CheckedTracesToAddToSelectedCollection(
1485 std::list< unsigned int > ) ),
this,
1488 SIGNAL( DBConnectionNotNeededAnymore() ),
1492 SIGNAL( AddNewTraceIDInTS(std::pair< std::string, QColor > ) ),
1494 SLOT( AddANewCollectionID(std::pair< std::string, QColor > ) ) );
1496 SIGNAL( AddNewTraceIDInTS(std::pair< std::string, QColor > ) ),
1498 SLOT( AddANewCollectionID(std::pair< std::string, QColor > ) ) );
1524 SIGNAL( TraceColorToChange() ),
1534 SIGNAL( DBConnectionNotNeededAnymore() ),
1540 SIGNAL( DBConnectionNotNeededAnymore() ),
1544 SIGNAL( TrackToSplit(
unsigned int, std::list< unsigned int > ) ),
1547 std::list< unsigned int > ) ) );
1549 SIGNAL( TrackIDToBeModifiedWithWidget(std::list< unsigned int > ) ),
1553 SIGNAL( MeshesToAddToTrack(std::list< unsigned int >,
unsigned int) ),
1557 SIGNAL( AddNewTraceIDInTS(std::pair< std::string, QColor > ) ),
1559 SLOT( AddANewCollectionID(std::pair< std::string, QColor > ) ) );
1561 SIGNAL( AddNewTraceIDInTS(std::pair< std::string, QColor > ) ),
1563 SLOT( AddANewCollectionID(std::pair< std::string, QColor > ) ) );
1570 SIGNAL(CheckedTracksToAddToSelectedLineage(
1571 std::list< unsigned int >,
unsigned int,
1572 std::list<unsigned int> ) ),
this,
1574 std::list<unsigned int> ) ) );
1577 SIGNAL ( NewLineageToCreateFromTracks( std::list<unsigned int>,
unsigned int,
1578 std::list<unsigned int> )),
1581 std::list<unsigned int> ) ) );
1596 SIGNAL( NeedToGetDatabaseConnection() ),
1600 SIGNAL( DBConnectionNotNeededAnymore() ),
1604 SIGNAL( CheckedTracesToDelete() ),
1612 SIGNAL( TraceColorToChange() ),
1668 std::list< unsigned int > TrackIDs;
1669 TrackIDs.push_back(iTrackID);
1672 std::list< unsigned int > ListMeshesIDs =
1676 if ( !ListMeshesIDs.empty() )
1679 std::map< unsigned int, double * > MeshesInfo = this->
m_MeshesManager->
1680 GetMeshesInfoForImportedMesh(ListMeshesIDs);
1681 if ( !MeshesInfo.empty() )
1696 std::list< unsigned int > iListMeshIDs)
1699 std::list< unsigned int > ListMeshesForNewTrack =
1702 if(ListMeshesForNewTrack.size() != 0)
1713 std::list< unsigned int > iListCheckedMeshes)
1716 unsigned int NewTrackID =
1719 std::list< std::pair<unsigned int, double> > temp;
1721 std::list< unsigned int > ListMeshToBelongToTheTrack;
1722 std::list< unsigned int > ListMeshToReassign;
1724 std::string MessageToPrint =
1727 ListMeshToBelongToTheTrack, ListMeshToReassign);
1742 unsigned int oldMotherID = 0;
1743 unsigned int oldTrackID = 0;
1744 unsigned int newTrackID = NewTrackID;
1745 unsigned int oldDaughter = 0;
1747 std::list< std::pair<unsigned int, double> >::const_iterator it =
1749 if(it != temp.end())
1751 oldTrackID = (*it).first;
1755 std::vector<unsigned int> family =
1758 if(family.size() > 0)
1760 oldMotherID = family[1];
1761 if(family[2] == oldTrackID)
1763 oldDaughter = family[3];
1767 oldDaughter = family[2];
1770 std::list<unsigned int> oldList;
1771 oldList.push_back(oldMotherID);
1777 if ( MessageToPrint !=
"" )
1786 this->AddCheckedTracesToCollection< QGoDBMeshManager, QGoDBTrackManager >(
1788 NewTrackID, ListMeshToBelongToTheTrack);
1791 if(family.size() > 0)
1794 std::list<unsigned int> newdaughter;
1795 newdaughter.push_back(oldMotherID);
1796 newdaughter.push_back(oldDaughter);
1797 newdaughter.push_back(newTrackID);
1798 this->m_TracksManager->CreateCorrespondingTrackFamily(newdaughter);
1808 std::list< std::list< unsigned int > > iListsCheckedMeshes)
1810 std::list< std::list< unsigned int > >::iterator iter = iListsCheckedMeshes.begin();
1811 while ( iter != iListsCheckedMeshes.end() )
1823 std::list< unsigned int > iListCheckedContours)
1826 unsigned int NewMeshID =
1830 this->AddCheckedTracesToCollection< QGoDBContourManager, QGoDBMeshManager >(
1832 NewMeshID, iListCheckedContours);
1843 std::list< unsigned int > iListCheckedTracks,
unsigned int iTrackRoot,
1844 std::list< unsigned int > iListLineagesToDelete)
1847 unsigned int NewLineageID =
1852 (iListCheckedTracks, NewLineageID, iListLineagesToDelete);
1862 this->AddCheckedTracesToCollection< QGoDBContourManager, QGoDBMeshManager >
1876 std::list< unsigned int > ListMeshToBelongToTheTrack;
1877 std::list< unsigned int > ListNullMeshToBelongToTheTrack;
1878 std::list< std::pair<unsigned int, double> > temp;
1880 if ( iTrackID == 0 )
1882 ListMeshToBelongToTheTrack = iListMeshes;
1889 std::list< unsigned int > ListMeshToReassign;
1890 std::string MessageToPrint =
1893 ListMeshToBelongToTheTrack, ListMeshToReassign);
1905 ListMeshToBelongToTheTrack, ListNullMeshToBelongToTheTrack).
toStdString();
1914 if ( MessageToPrint !=
"" )
1921 this->AddCheckedTracesToCollection< QGoDBMeshManager, QGoDBTrackManager >(
1923 iTrackID, ListMeshToBelongToTheTrack);
1926 this->m_MeshesManager->ModifyTrackIDInVisuContainer(iTrackID,
1927 ListMeshToBelongToTheTrack,
1928 ListNullMeshToBelongToTheTrack);
1937 std::map<
unsigned int, std::list< unsigned int > > iListMeshesWithTracks)
1939 std::map< unsigned int, std::list< unsigned int > >::iterator iter =
1940 iListMeshesWithTracks.begin();
1941 while ( iter != iListMeshesWithTracks.end() )
1953 unsigned int SelectedTrackID =
1963 std::list< unsigned int > iTrackIDs)
1967 GetMeshesInfoFromDBAndCreateContainerForVisu(
1975 std::list< std::list< unsigned int > > ListTracksToCreate =
1977 std::map< unsigned int, std::list< unsigned int > > ListTracksToUpdate =
1981 if ( !ListTracksToCreate.empty() )
1985 if ( !ListTracksToUpdate.empty() )
2002 std::list<unsigned int> iListDaughters,
unsigned int iLineageID,
2003 std::list<unsigned int> iListLineagesToDelete)
2005 if (!iListLineagesToDelete.empty() )
2007 this->DeleteListTraces< QGoDBLineageManager, QGoDBLineageManager > (
2009 iListLineagesToDelete,
true);
2012 if (!iListDaughters.empty() )
2016 this->AddCheckedTracesToCollection< QGoDBTrackManager, QGoDBLineageManager >(
2048 std::list<unsigned int>
2051 const unsigned int& iNewTimePoint)
2058 std::list<unsigned int> listToRemove;
2061 std::list<unsigned int>::iterator it_listToRemove = listToRemove.begin();
2064 std::list<unsigned int> listToAdd;
2067 listToAdd.push_back(iNewTimePoint-1);
2069 listToAdd.push_back(iNewTimePoint);
2070 listToAdd.push_back(iNewTimePoint+1);
2072 std::list<unsigned int>::iterator it_listToAdd = listToAdd.begin();
2076 std::list<unsigned int> listCommonT;
2077 while(it_listToRemove != listToRemove.end())
2079 while(it_listToAdd != listToAdd.end())
2081 if(*it_listToRemove == *it_listToAdd)
2089 listCommonT.push_back(*it_listToRemove);
2093 it_listToAdd = listToAdd.begin();
2099 std::list<unsigned int>::iterator it_listCommonT = listCommonT.begin();
2100 while(it_listCommonT != listCommonT.end())
2102 listToRemove.remove(*it_listCommonT);
2103 listToAdd.remove(*it_listCommonT);
2108 if(listToRemove.size() > 0)
2118 if(listToAdd.size() > 0)
2121 DisplayInfoAndLoadVisuContainerForAllContoursForSpecificTPs(
2125 DisplayInfoAndLoadVisuContainerForAllMeshesForSpecificTPs(
2140 std::list<unsigned int>