Visual Servoing Platform  version 3.2.0 under development (2019-01-22)
vpXmlParserHomogeneousMatrix.h
1 /****************************************************************************
2  *
3  * ViSP, open source Visual Servoing Platform software.
4  * Copyright (C) 2005 - 2019 by Inria. All rights reserved.
5  *
6  * This software is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  * See the file LICENSE.txt at the root directory of this source
11  * distribution for additional information about the GNU GPL.
12  *
13  * For using ViSP with software that can not be combined with the GNU
14  * GPL, please contact Inria about acquiring a ViSP Professional
15  * Edition License.
16  *
17  * See http://visp.inria.fr for more information.
18  *
19  * This software was developed at:
20  * Inria Rennes - Bretagne Atlantique
21  * Campus Universitaire de Beaulieu
22  * 35042 Rennes Cedex
23  * France
24  *
25  * If you have questions regarding the use of this file, please contact
26  * Inria at visp@inria.fr
27  *
28  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
29  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
30  *
31  * Description:
32  * XML parser to load and save Homogeneous Matrix in a XML file
33  *
34  * Authors:
35  * Giovanni Claudio
36  *
37  *****************************************************************************/
38 
47 #ifndef vpXMLPARSERHOMOGENEOUSMATRIX_H
48 #define vpXMLPARSERHOMOGENEOUSMATRIX_H
49 
50 #include <visp3/core/vpConfig.h>
51 
52 #ifdef VISP_HAVE_XML2
53 
54 #include <libxml/xmlmemory.h> /* Functions of libxml. */
55 #include <string>
56 #include <visp3/core/vpHomogeneousMatrix.h>
57 #include <visp3/core/vpXmlParser.h>
58 
165 class VISP_EXPORT vpXmlParserHomogeneousMatrix : public vpXmlParser
166 {
167 
168 public:
169  /* --- XML Code------------------------------------------------------------
170  */
171  typedef enum {
172  CODE_XML_BAD = -1,
182  CODE_XML_TUZ
183  } vpXmlCodeType;
184 
185  typedef enum { SEQUENCE_OK, SEQUENCE_ERROR } vpXmlCodeSequenceType;
186 
187 private:
189  std::string m_name;
190 
191 public:
196 
197  // get/set functions
198  vpHomogeneousMatrix getHomogeneousMatrix() const { return this->m_M; }
199  std::string getHomogeneousMatrixName() const { return this->m_name; }
200 
201  vpXmlParserHomogeneousMatrix &operator=(const vpXmlParserHomogeneousMatrix &twinparser);
202  int parse(vpHomogeneousMatrix &M, const std::string &filename, const std::string &name);
203 
204  int save(const vpHomogeneousMatrix &M, const std::string &filename, const std::string &name);
205 
206  void setHomogeneousMatrixName(const std::string &name) { this->m_name = name; }
207 
208 private:
209  int read(xmlDocPtr doc, xmlNodePtr node, const std::string &name);
210 
211  int count(xmlDocPtr doc, xmlNodePtr node, const std::string &name);
212 
213  int read_matrix(xmlDocPtr doc, xmlNodePtr node, const std::string &name);
214 
215  vpXmlCodeSequenceType read_values(xmlDocPtr doc, xmlNodePtr node, vpHomogeneousMatrix &M);
216 
217  static vpXmlCodeSequenceType str2xmlcode(char *str, vpXmlCodeType &res);
218  void myXmlReadIntChild(xmlDocPtr doc, xmlNodePtr node, int &res, vpXmlCodeSequenceType &code_error);
219 
220  void myXmlReadDoubleChild(xmlDocPtr doc, xmlNodePtr node, double &res, vpXmlCodeSequenceType &code_error);
221 
222  void myXmlReadCharChild(xmlDocPtr doc, xmlNodePtr node, char **res);
223  int write(xmlNodePtr node, const std::string &name);
224 
225 private:
231  virtual void readMainClass(xmlDocPtr, xmlNodePtr){};
232 
238  virtual void writeMainClass(xmlNodePtr){};
239 };
240 #endif // VISP_HAVE_XML2
241 #endif
void setHomogeneousMatrixName(const std::string &name)
virtual ~vpXmlParserHomogeneousMatrix()
Default destructor.
Implementation of an homogeneous matrix and operations on such kind of matrices.
virtual void writeMainClass(xmlNodePtr node)=0
void save(const std::string &filename, const bool append=false)
This class intends to simplify the creation of xml parser based on the libxml2 third party library...
Definition: vpXmlParser.h:177
vpHomogeneousMatrix getHomogeneousMatrix() const
XML parser to load and save an homogeneous matrix in a file.
virtual void readMainClass(xmlDocPtr doc, xmlNodePtr node)=0
void parse(const std::string &filename)