/** * @file SaxParser.h * @author Ulrich Kemloh <kemlohulrich@gmail.com> * @version 0.1 * Created on: 6 Sep 2010 * Copyright (C) <2009-2010> * * @section LICENSE * This file is part of OpenPedSim. * * OpenPedSim is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * OpenPedSim is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenPedSim. If not, see <http://www.gnu.org/licenses/>. * * @section DESCRIPTION * * * */ #ifndef SAXPARSER_H_ #define SAXPARSER_H_ #include <QtXml> #include <QTreeWidget> #include <vector> #include "SyncData.h" #include"geometry/GeometryFactory.h" //forwarded classes class JPoint; class TrajectoryPoint; class FrameElement; class SyncData; class GeometryFactory; class SaxParser: public QXmlDefaultHandler { public: SaxParser(GeometryFactory& geoFac, SyncData& _dataset, double * fps); virtual ~SaxParser(); bool startElement(const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &attributes); bool endElement(const QString &namespaceURI, const QString &localName, const QString &qName); bool characters(const QString &str); bool fatalError(const QXmlParseException &exception); bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value); /// provided for convenience and will be removed in the next version static bool parseGeometryJPS(QString content, GeometryFactory& geo); /// provided for convenience and will be removed in the next version static void parseGeometryXMLV04(QString content, GeometryFactory& geo); /// provided for convenience and will be removed in the next version static void parseGeometryTRAV(QString fileName, GeometryFactory& geoFac, QDomNode geoNode=QDomNode()); /// take a large file and find the geometry file location. static QString extractGeometryFilename(QString& filename); static QString extractGeometryFilenameTXT(QString &filename); /// parse the txt file format static bool ParseTxtFormat(const QString& fileName, SyncData* dataset, double * fps); /// parse a vtk file static bool ParseGradientFieldVTK(QString fileName, GeometryFactory& geoFac); private: //clear the mo void clearPoints(); void InitHeader(int major, int minor, int patch); private: GeometryFactory& _geoFactory; std::shared_ptr<FacilityGeometry> _geometry; SyncData& _dataset; double* _para; QString _currentText; int _currentFrameID=-1; QStringList _initialPedestriansColors; QStringList _initialPedestriansHeights; std::vector<JPoint *> _currentPointsList; std::vector<FrameElement *> _currentFrame; bool _parsingWalls; bool _parsingCrossings; //wall and door and hlines parameters double _thickness; double _height; double _color; //actual caption of door/wall/hlines QString _caption; //header dependant variables QString _jps_xPos; QString _jps_yPos; QString _jps_zPos; QString _jps_xVel; QString _jps_yVel; QString _jps_zVel; QString _jps_radiusA; QString _jps_radiusB; QString _jps_ellipseOrientation; QString _jps_ellipseColor; }; #endif /* SAXPARSER_H_ */