From 48e8446297d8e3df99f324dae4133f36f4dcb0c4 Mon Sep 17 00:00:00 2001
From: Mohcine Chraibi <m.chraibi@fz-juelich.de>
Date: Fri, 15 Mar 2019 19:34:45 +0100
Subject: [PATCH] extract geometry txt

---
 src/MainWindow.cpp | 13 ++++++++++++-
 src/SaxParser.cpp  | 27 +++++++++++++++++++++++++--
 src/SaxParser.h    |  2 +-
 3 files changed, 38 insertions(+), 4 deletions(-)

diff --git a/src/MainWindow.cpp b/src/MainWindow.cpp
index 3c05ab0..79a5166 100755
--- a/src/MainWindow.cpp
+++ b/src/MainWindow.cpp
@@ -657,7 +657,18 @@ bool MainWindow::addPedestrianGroup(int groupID,QString fileName)
     auto&& geometry = _visualisationThread->getGeometry();
 
     //try to get a geometry filename
-    QString geometry_file=SaxParser::extractGeometryFilename(fileName);
+    if(fileName.endsWith(".xml",Qt::CaseInsensitive))
+    {
+         Debug::Messages("Extract geometry file from <xml> trajectories");
+         QString geometry_file=SaxParser::extractGeometryFilename(fileName);
+    }
+    else
+    {
+         Debug::Messages("Extract geometry file from <txt> trajectories");
+         QString geometry_file=SaxParser::extractGeometryFilenameTXT(fileName);
+    }
+
+
     Debug::Messages("MainWindow::addPedestrianGroup: geometry name: <%s>", geometry_file.toStdString().c_str());
     // if xml is detected, just load and show the geometry then exit
     if(geometry_file.endsWith(".xml",Qt::CaseInsensitive)) {
diff --git a/src/SaxParser.cpp b/src/SaxParser.cpp
index 5f082b0..fca1609 100644
--- a/src/SaxParser.cpp
+++ b/src/SaxParser.cpp
@@ -1103,6 +1103,31 @@ QString SaxParser::extractGeometryFilename(QString &filename)
      return "";
 }
 
+QString SaxParser::extractGeometryFilenameTXT(QString &filename)
+{
+     QString extracted_geo_name="";
+     QFile file(filename);
+     QString line;
+     if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
+          QTextStream in(&file);
+          while (!in.atEnd()) {
+               //look for a line with
+               line = in.readLine();
+               std::cout << " >> " >> line >> endl;
+               if(line.split(":").size()==2)
+               {
+                    if(line.split(":")[0] == "#geometry")
+                    {
+                         extracted_geo_name = line.split(":")[1]
+                    }
+               }
+          }// while
+     } // if open
+     cout << ">> geo: " <<   extracted_geo_name << endl;
+     return extracted_geo_name;
+}
+
+
 void SaxParser::parseGeometryXMLV04(QString filename, GeometryFactory& geoFac)
 {
      cout << "parsing 04\n" ;
@@ -1371,8 +1396,6 @@ bool SaxParser::ParseTxtFormat(const QString &fileName, SyncData* dataset, doubl
                int agentID=-1 ;
                int frameID=-1;
                double color=155 ;
-               std::cout << pieces.size() << "\n";
-
                switch(pieces.size())
                {
                case 5:
diff --git a/src/SaxParser.h b/src/SaxParser.h
index c953dcc..3ccc0d4 100644
--- a/src/SaxParser.h
+++ b/src/SaxParser.h
@@ -77,7 +77,7 @@ public:
 
     /// take a large file and find the geometry file location.
     static QString extractGeometryFilename(QString& filename);
-
+     static QString SaxParser::extractGeometryFilenameTXT(QString &filename);
     /// parse the txt file format
     static bool ParseTxtFormat(const QString& fileName, SyncData* dataset, double * fps);
 
-- 
GitLab