Visual Servoing Platform  version 3.2.0
vpXmlParserHomogeneousMatrix Class Reference

#include <vpXmlParserHomogeneousMatrix.h>

+ Inheritance diagram for vpXmlParserHomogeneousMatrix:

Public Types

enum  vpXmlCodeType {
  CODE_XML_BAD = -1, CODE_XML_OTHER, CODE_XML_M, CODE_XML_M_NAME,
  CODE_XML_VALUE, CODE_XML_TX, CODE_XML_TY, CODE_XML_TZ,
  CODE_XML_TUX, CODE_XML_TUY, CODE_XML_TUZ
}
 
enum  vpXmlCodeSequenceType { SEQUENCE_OK, SEQUENCE_ERROR }
 

Public Member Functions

 vpXmlParserHomogeneousMatrix ()
 
 vpXmlParserHomogeneousMatrix (vpXmlParserHomogeneousMatrix &twinParser)
 
virtual ~vpXmlParserHomogeneousMatrix ()
 
vpHomogeneousMatrix getHomogeneousMatrix () const
 
std::string getHomogeneousMatrixName () const
 
vpXmlParserHomogeneousMatrixoperator= (const vpXmlParserHomogeneousMatrix &twinparser)
 
int parse (vpHomogeneousMatrix &M, const std::string &filename, const std::string &name)
 
int save (const vpHomogeneousMatrix &M, const std::string &filename, const std::string &name)
 
void setHomogeneousMatrixName (const std::string &name)
 
Public Member Functions Inherited from vpXmlParser
void parse (const std::string &filename)
 
void save (const std::string &filename, const bool append=false)
 
void setMap (const std::map< std::string, int > &_map)
 
void setMainTag (const std::string &tag)
 

Static Public Member Functions

Static Public Member Functions Inherited from vpXmlParser
static void cleanup ()
 

Protected Member Functions Inherited from vpXmlParser

std::map< std::string, int > nodeMap
 
std::string main_tag
 
bool xmlReadBoolChild (xmlDocPtr doc, xmlNodePtr node)
 
char * xmlReadCharChild (xmlDocPtr doc, xmlNodePtr node)
 
double xmlReadDoubleChild (xmlDocPtr doc, xmlNodePtr node)
 
float xmlReadFloatChild (xmlDocPtr doc, xmlNodePtr node)
 
int xmlReadIntChild (xmlDocPtr doc, xmlNodePtr node)
 
std::string xmlReadStringChild (xmlDocPtr doc, xmlNodePtr node)
 
unsigned int xmlReadUnsignedIntChild (xmlDocPtr doc, xmlNodePtr node)
 
void xmlWriteBoolChild (xmlNodePtr node, const char *label, const bool value)
 
void xmlWriteCharChild (xmlNodePtr node, const char *label, const char *value)
 
void xmlWriteDoubleChild (xmlNodePtr node, const char *label, const double value)
 
void xmlWriteFloatChild (xmlNodePtr node, const char *label, const float value)
 
void xmlWriteIntChild (xmlNodePtr node, const char *label, const int value)
 
void xmlWriteStringChild (xmlNodePtr node, const char *label, const std::string &value)
 
void xmlWriteUnsignedIntChild (xmlNodePtr node, const char *label, const unsigned int value)
 

Detailed Description

XML parser to load and save an homogeneous matrix in a file.

Warning
This class is only available if libxml2 is installed and detected by ViSP. Installation instructions are provided here https://visp.inria.fr/3rd_xml2.

To have a complete description of the homogeneous matrix implemented in ViSP, see vpHomogeneousMatrix.

Example of an XML file "homogeneous_matrixes.xml" containing a Pose vector that will be converted in an homogeneous matrix:

<?xml version="1.0"?>
<root>
<homogeneous_transformation>
<!--Name of the homogeneous matrix-->
<name>eMc</name>
<values>
<!--Translation vector with values in meters -->
<tx>1.00</tx>
<ty>1.30</ty>
<tz>3.50</tz>
<!--Rotational vector expressed in angle axis representation with values
in radians --> <theta_ux>0.20</theta_ux> <theta_uy>0.30</theta_uy>
<theta_uz>0.50</theta_uz>
</values>
</homogeneous_transformation>
</root>

Example of loading an existing homogeneous matrix from an XML file.

#include <iostream>
#include <string>
#include <visp3/core/vpXmlParserHomogeneousMatrix.h>
int main(int argc, char* argv[])
{
#ifdef VISP_HAVE_XML2
// Create a XML parser
// Define the name of the matrix to load
std::string name = "eMc";
if (p.parse(eMc,"homogeneous_matrixes.xml", name) != vpXmlParserHomogeneousMatrix::SEQUENCE_OK) {
std::cout << "Cannot found the Homogeneous matrix named " << name << "." << std::endl;
}
else
std::cout << "Homogeneous matrix " << name <<": " << std::endl << eMc << std::endl;
#endif
return 0;
}

Example of writing an homogenoeus matrix in a XML file.

Note
Before writing an homogeneous matrix check if there is already in the xml file a matrix with the same name. If you are sure to overwrite it please delete it manually from the file before.
#include <iostream>
#include <string>
#include <visp3/core/vpXmlParserHomogeneousMatrix.h>
int main(int argc, char* argv[])
{
#ifdef VISP_HAVE_XML2
// Create Pose Vector and convert to homogeneous matrix
vpPoseVector r(1.0,1.3,3.5,0.2,0.3,0.5);
// Create a XML parser
// Define the name of the matrix
std::string name_M = "eMe";
// Define name of the file xml to fill
char filename[FILENAME_MAX];
sprintf(filename, "%s", "homogeneous_matrixes.xml");
if (p.save(M, filename, name_M) != vpXmlParserHomogeneousMatrix::SEQUENCE_OK) {
std::cout << "Cannot save the Homogeneous matrix" << std::endl;
}
#endif
return 0;
}

Definition at line 164 of file vpXmlParserHomogeneousMatrix.h.

Member Enumeration Documentation

◆ vpXmlCodeSequenceType

Enumerator
SEQUENCE_OK 
SEQUENCE_ERROR 

Definition at line 184 of file vpXmlParserHomogeneousMatrix.h.

◆ vpXmlCodeType

Enumerator
CODE_XML_BAD 
CODE_XML_OTHER 
CODE_XML_M 
CODE_XML_M_NAME 
CODE_XML_VALUE 
CODE_XML_TX 
CODE_XML_TY 
CODE_XML_TZ 
CODE_XML_TUX 
CODE_XML_TUY 
CODE_XML_TUZ 

Definition at line 170 of file vpXmlParserHomogeneousMatrix.h.

Constructor & Destructor Documentation

◆ vpXmlParserHomogeneousMatrix() [1/2]

vpXmlParserHomogeneousMatrix::vpXmlParserHomogeneousMatrix ( )

Default constructor

Definition at line 76 of file vpXmlParserHomogeneousMatrix.cpp.

◆ vpXmlParserHomogeneousMatrix() [2/2]

vpXmlParserHomogeneousMatrix::vpXmlParserHomogeneousMatrix ( vpXmlParserHomogeneousMatrix twinParser)

Copy constructor

Parameters
twinParser: parser object to copy

Definition at line 81 of file vpXmlParserHomogeneousMatrix.cpp.

◆ ~vpXmlParserHomogeneousMatrix()

virtual vpXmlParserHomogeneousMatrix::~vpXmlParserHomogeneousMatrix ( )
inlinevirtual

Default destructor.

Definition at line 194 of file vpXmlParserHomogeneousMatrix.h.

Member Function Documentation

◆ cleanup()

static void vpXmlParser::cleanup ( )
inlinestaticinherited

As stated in http://xmlsoft.org/html/libxml-parser.html#xmlCleanupParser to clean up memory allocated by the xml2 library itself, the user should call xmlCleanupParser() only when the process has finished using the xml2 library. In case of doubt abstain from calling this function or do it just before calling exit() to avoid leak reports from valgrind ! That's why in ViSP the destructor doesn't call xmlCleanupParser(). Rather we provide the static function vpXmlParser::cleanup() that calls xmlCleanupParser() that could be called just before exit().

Examples
mbtEdgeKltMultiTracking.cpp, mbtEdgeKltTracking.cpp, mbtEdgeMultiTracking.cpp, mbtEdgeTracking.cpp, mbtGenericTracking.cpp, mbtGenericTracking2.cpp, mbtGenericTrackingDepth.cpp, mbtGenericTrackingDepthOnly.cpp, mbtKltMultiTracking.cpp, mbtKltTracking.cpp, testGenericTracker.cpp, testGenericTrackerDepth.cpp, testXmlParser.cpp, tutorial-detection-object-mbt-deprecated.cpp, tutorial-detection-object-mbt.cpp, tutorial-detection-object-mbt2-deprecated.cpp, tutorial-detection-object-mbt2.cpp, tutorial-mb-edge-tracker.cpp, tutorial-mb-generic-tracker-full.cpp, tutorial-mb-hybrid-tracker.cpp, tutorial-mb-klt-tracker.cpp, and tutorial-mb-tracker-full.cpp.

Definition at line 309 of file vpXmlParser.h.

◆ getHomogeneousMatrix()

vpHomogeneousMatrix vpXmlParserHomogeneousMatrix::getHomogeneousMatrix ( ) const
inline

Definition at line 197 of file vpXmlParserHomogeneousMatrix.h.

◆ getHomogeneousMatrixName()

std::string vpXmlParserHomogeneousMatrix::getHomogeneousMatrixName ( ) const
inline

Definition at line 198 of file vpXmlParserHomogeneousMatrix.h.

◆ operator=()

vpXmlParserHomogeneousMatrix & vpXmlParserHomogeneousMatrix::operator= ( const vpXmlParserHomogeneousMatrix twinParser)

Copy operator

Parameters
twinParser: parser object to copy
Returns
a copy of the input.

Definition at line 92 of file vpXmlParserHomogeneousMatrix.cpp.

◆ parse() [1/2]

void vpXmlParser::parse ( const std::string &  filename)
inherited

parse the document. The data in the file are stored in the attributes of the child class. This method calls the readMainClass method which has to be implemented for every child class depending on the content to parse.

Parameters
filename: name of the file to parse

Definition at line 420 of file vpXmlParser.cpp.

Referenced by vpMbDepthDenseTracker::loadConfigFile(), vpMbDepthNormalTracker::loadConfigFile(), and vpMbTracker::loadConfigFile().

◆ parse() [2/2]

int vpXmlParserHomogeneousMatrix::parse ( vpHomogeneousMatrix M,
const std::string &  filename,
const std::string &  name 
)

Parse an xml file to load an homogeneous matrix

Parameters
M: homogeneous matrix to fill.
filename: name of the xml file to parse.
name: name of the homogeneous matrix to find in the xml file.
Returns
error code.

Definition at line 108 of file vpXmlParserHomogeneousMatrix.cpp.

◆ save() [1/2]

void vpXmlParser::save ( const std::string &  filename,
const bool  append = false 
)
inherited

Save the content of the class in the file given in parameters. The data of the class are in the child class. This method calls the write_main_class method which has to be implemented for every class depending on the data to save.

Parameters
filename: the name of the file used to record the data
append: if true and if the file exists, the data will be added to the data already in the file

Definition at line 452 of file vpXmlParser.cpp.

◆ save() [2/2]

int vpXmlParserHomogeneousMatrix::save ( const vpHomogeneousMatrix M,
const std::string &  filename,
const std::string &  name 
)

Save an homogeneous matrix in an xml file.

Parameters
M: homogeneous matrix to save.
filename: name of the xml file to fill.
name: name of the homogeneous matrix.
Returns
error code.

Definition at line 144 of file vpXmlParserHomogeneousMatrix.cpp.

◆ setHomogeneousMatrixName()

void vpXmlParserHomogeneousMatrix::setHomogeneousMatrixName ( const std::string &  name)
inline

Definition at line 205 of file vpXmlParserHomogeneousMatrix.h.

◆ setMainTag()

void vpXmlParser::setMainTag ( const std::string &  tag)
inlineinherited

set the name of the main tag

The main tag corresponds to the name of the root node

Parameters
tag: name of the root node of the document

Definition at line 294 of file vpXmlParser.h.

◆ setMap()

void vpXmlParser::setMap ( const std::map< std::string, int > &  _map)
inlineinherited

Set the map describing the data to parse. This map stores the name of each node and an associated key used to simplify the parsing of the file.

If the following file want to be parsed:

<config>
<range>5</range>
<step>7</step>
<size_filter>3</size_filter>
</config>

The following map has to be declared:

std::map dataToParse;
dataToParse["config"] = 0;
dataToParse["range"] = 1;
dataToParse["step"] = 2;
dataToParse["size_filter"] = 3;

Or, you can use keyzord instead of number as key but it implies to declare in the child class an enumeration type of the name. For example:

typedef enum{
config,
range,
step,
size_filter} data_enum;
std::map dataToParse;
dataToParse["config"] = config;
dataToParse["range"] = range;
dataToParse["step"] = step;
dataToParse["size_filter"] = size_filter;
Parameters
_map: the map describing the data to parse

Definition at line 285 of file vpXmlParser.h.

◆ xmlReadBoolChild()

bool vpXmlParser::xmlReadBoolChild ( xmlDocPtr  doc,
xmlNodePtr  node 
)
protectedinherited

read a boolean

Warning
throw a vpException::ioError if the value cannot be parsed to a bool
Parameters
doc: The main xml document
node: a pointer to the node to read value
Returns
the bool value in the node

Definition at line 281 of file vpXmlParser.cpp.

◆ xmlReadCharChild()

char * vpXmlParser::xmlReadCharChild ( xmlDocPtr  doc,
xmlNodePtr  node 
)
protectedinherited

Read an array of character.

Warning
The array of characters is allocated and must be explicitly freed to avoid memory leak.
Parameters
doc: The main xml document
node: a pointer to the node to read value
Returns
pointer to an allocated array of character.

Definition at line 99 of file vpXmlParser.cpp.

Referenced by vpMbtXmlGenericParser::read_projection_error().

◆ xmlReadDoubleChild()

double vpXmlParser::xmlReadDoubleChild ( xmlDocPtr  doc,
xmlNodePtr  node 
)
protectedinherited

read a double

Warning
throw a vpException::ioError if the value cannot be parsed to a double
Parameters
doc: The main xml document
node: a pointer to the node to read value
Returns
the double value in the node

Definition at line 211 of file vpXmlParser.cpp.

Referenced by vpMbXmlParser::read_lod(), and vpMbtXmlGenericParser::read_lod().

◆ xmlReadFloatChild()

float vpXmlParser::xmlReadFloatChild ( xmlDocPtr  doc,
xmlNodePtr  node 
)
protectedinherited

read a float

Warning
throw a vpException::ioError if the value cannot be parsed to a float
Parameters
doc: The main xml document
node: a pointer to the node to read value
Returns
the float value in the node

Definition at line 244 of file vpXmlParser.cpp.

◆ xmlReadIntChild()

int vpXmlParser::xmlReadIntChild ( xmlDocPtr  doc,
xmlNodePtr  node 
)
protectedinherited

read an int

Warning
throw a vpException::ioError if the value cannot be parsed to an integer
Parameters
doc: The main xml document
node: a pointer to the node to read value
Returns
the integer value in the node

Definition at line 143 of file vpXmlParser.cpp.

Referenced by vpMbXmlParser::read_lod(), vpMbtXmlGenericParser::read_lod(), and vpMbtXmlGenericParser::read_projection_error().

◆ xmlReadStringChild()

std::string vpXmlParser::xmlReadStringChild ( xmlDocPtr  doc,
xmlNodePtr  node 
)
protectedinherited

Read an array of character.

Parameters
doc: The main xml document
node: a pointer to the node to read value
Returns
std::string representing the value.

Definition at line 119 of file vpXmlParser.cpp.

◆ xmlReadUnsignedIntChild()

unsigned int vpXmlParser::xmlReadUnsignedIntChild ( xmlDocPtr  doc,
xmlNodePtr  node 
)
protectedinherited

read an int

Warning
throw a vpException::ioError if the value cannot be parsed to an unsigned integer
Parameters
doc: The main xml document
node: a pointer to the node to read value
Returns
the unsigned integer value in the node

Definition at line 177 of file vpXmlParser.cpp.

◆ xmlWriteBoolChild()

void vpXmlParser::xmlWriteBoolChild ( xmlNodePtr  node,
const char *  label,
const bool  value 
)
protectedinherited

write a bool.

Parameters
node: a pointer to the node to read value
label: label (name of the data) of the node
value: boolean to write (true or false)

Definition at line 397 of file vpXmlParser.cpp.

◆ xmlWriteCharChild()

void vpXmlParser::xmlWriteCharChild ( xmlNodePtr  node,
const char *  label,
const char *  value 
)
protectedinherited

write an array of character.

Parameters
node: a pointer to the node to read value
label: label (name of the data) of the node
value: pointer to the array of character to write

Definition at line 305 of file vpXmlParser.cpp.

◆ xmlWriteDoubleChild()

void vpXmlParser::xmlWriteDoubleChild ( xmlNodePtr  node,
const char *  label,
const double  value 
)
protectedinherited

write a double.

Parameters
node: a pointer to the node to read value
label: label (name of the data) of the node
value: double to write

Definition at line 365 of file vpXmlParser.cpp.

◆ xmlWriteFloatChild()

void vpXmlParser::xmlWriteFloatChild ( xmlNodePtr  node,
const char *  label,
const float  value 
)
protectedinherited

write a float.

Parameters
node: a pointer to the node to read value
label: label (name of the data) of the node
value: float to write

Definition at line 381 of file vpXmlParser.cpp.

◆ xmlWriteIntChild()

void vpXmlParser::xmlWriteIntChild ( xmlNodePtr  node,
const char *  label,
const int  value 
)
protectedinherited

write an integer.

Parameters
node: a pointer to the node to read value
label: label (name of the data) of the node
value: integer to write

Definition at line 333 of file vpXmlParser.cpp.

◆ xmlWriteStringChild()

void vpXmlParser::xmlWriteStringChild ( xmlNodePtr  node,
const char *  label,
const std::string &  value 
)
protectedinherited

write an array of character.

Parameters
node: a pointer to the node to read value
label: label (name of the data) of the node
value: std::string to write;

Definition at line 319 of file vpXmlParser.cpp.

◆ xmlWriteUnsignedIntChild()

void vpXmlParser::xmlWriteUnsignedIntChild ( xmlNodePtr  node,
const char *  label,
const unsigned int  value 
)
protectedinherited

write an unsigned integer.

Parameters
node: a pointer to the node to read value
label: label (name of the data) of the node
value: unsigned integer to write

Definition at line 349 of file vpXmlParser.cpp.

Member Data Documentation

◆ main_tag

std::string vpXmlParser::main_tag
protectedinherited

The name of the main tag for the file to parse

Definition at line 230 of file vpXmlParser.h.

◆ nodeMap

std::map<std::string, int> vpXmlParser::nodeMap
protectedinherited

The map describing the data to parse

Definition at line 225 of file vpXmlParser.h.

Referenced by vpMbXmlParser::read_lod(), vpMbtXmlGenericParser::read_lod(), and vpMbtXmlGenericParser::read_projection_error().

vpXmlParserHomogeneousMatrix::save
int save(const vpHomogeneousMatrix &M, const std::string &filename, const std::string &name)
Definition: vpXmlParserHomogeneousMatrix.cpp:144
vpXmlParserHomogeneousMatrix::SEQUENCE_OK
Definition: vpXmlParserHomogeneousMatrix.h:184
vpPoseVector
Implementation of a pose vector and operations on poses.
Definition: vpPoseVector.h:91
vpXmlParserHomogeneousMatrix
XML parser to load and save an homogeneous matrix in a file.
Definition: vpXmlParserHomogeneousMatrix.h:164
vpXmlParser::cleanup
static void cleanup()
Definition: vpXmlParser.h:309
vpHomogeneousMatrix
Implementation of an homogeneous matrix and operations on such kind of matrices.
Definition: vpHomogeneousMatrix.h:91
vpXmlParserHomogeneousMatrix::parse
int parse(vpHomogeneousMatrix &M, const std::string &filename, const std::string &name)
Definition: vpXmlParserHomogeneousMatrix.cpp:108