24 #include "fmatvec/fmatvec.h"
25 #include <mbsim/numerics/csparse.h>
26 #include <mbxmlutilshelper/dom.h>
27 #include <xercesc/dom/DOMDocument.hpp>
31 #include <boost/lexical_cast.hpp>
32 #include <boost/algorithm/string/trim.hpp>
36 std::string numtostr(
int i);
37 std::string numtostr(
double d);
38 template<
class Type,
class Row,
class Col>
40 std::ostringstream oss;
42 for(
int i=0;i<m.
rows()-1;i++) {
43 for(
int j=0;i<m.
cols()-1;j++) oss << m.e(i,j) <<
", ";
50 double degtorad(
double alpha);
51 double radtodeg(
double phi);
56 double sign(
double x);
64 double ArcTan(
double x,
double y);
72 inline std::string toStr(
const T &val) {
74 s << std::setprecision(std::numeric_limits<double>::digits10+1) << val;
78 inline xercesc::DOMNode* toXML(
const std::string &str, xercesc::DOMNode* parent) {
79 return parent->getOwnerDocument()->createTextNode(
MBXMLUtils::X()%str);
82 inline xercesc::DOMNode* toXML(
int i, xercesc::DOMNode* parent) {
83 return parent->getOwnerDocument()->createTextNode(
MBXMLUtils::X()%toStr(i));
86 inline xercesc::DOMNode* toXML(
unsigned int i, xercesc::DOMNode* parent) {
87 return parent->getOwnerDocument()->createTextNode(
MBXMLUtils::X()%toStr(i));
90 inline xercesc::DOMNode* toXML(
double d, xercesc::DOMNode* parent) {
91 return parent->getOwnerDocument()->createTextNode(
MBXMLUtils::X()%toStr(d));
95 inline xercesc::DOMNode* toXML(
const std::vector<T> &x, xercesc::DOMNode* parent) {
96 xercesc::DOMElement *ele = MBXMLUtils::D(parent->getOwnerDocument())->createElement(MBXMLUtils::PV%
"xmlVector");
97 for(
unsigned int i=0; i<x.size(); i++) {
98 xercesc::DOMElement *elei = MBXMLUtils::D(parent->getOwnerDocument())->createElement(MBXMLUtils::PV%
"ele");
99 xercesc::DOMText *text =
new xercesc::DOMText(toStr(x[i]));
100 elei->insertBefore(text, NULL);
101 ele->insertBefore(elei, NULL);
108 xercesc::DOMElement *ele = MBXMLUtils::D(parent->getOwnerDocument())->createElement(MBXMLUtils::PV%
"xmlVector");
109 for(
int i=0; i<x.size(); i++) {
110 xercesc::DOMDocument *doc=parent->getOwnerDocument();
111 xercesc::DOMElement *elei = MBXMLUtils::D(doc)->createElement(MBXMLUtils::PV%
"ele");
112 xercesc::DOMText *text = doc->createTextNode(
MBXMLUtils::X()%toStr(x.e(i)));
113 elei->insertBefore(text, NULL);
114 ele->insertBefore(elei, NULL);
119 template <
class Type,
class Row,
class Col>
121 xercesc::DOMElement *ele = MBXMLUtils::D(parent->getOwnerDocument())->createElement(MBXMLUtils::PV%
"xmlMatrix");
122 for(
int i=0; i<A.
rows(); i++) {
123 xercesc::DOMElement *elei = MBXMLUtils::D(parent->getOwnerDocument())->createElement(MBXMLUtils::PV%
"row");
124 for(
int j=0; j<A.
cols(); j++) {
125 xercesc::DOMElement *elej = MBXMLUtils::D(parent->getOwnerDocument())->createElement(MBXMLUtils::PV%
"ele");
126 xercesc::DOMText *text =
new xercesc::DOMText(toStr(A.e(i,j)));
127 elej->insertBefore(text, NULL);
128 elei->insertBefore(elej, NULL);
130 ele->insertBefore(elei, NULL);
136 inline std::string funcExt() {
141 inline std::string funcExt<double>() {
146 void addElementText(xercesc::DOMElement *parent,
const MBXMLUtils::FQN &name,
const T &value) {
147 xercesc::DOMElement *ele = MBXMLUtils::D(parent->getOwnerDocument())->createElement(name);
148 ele->insertBefore(toXML(value,parent), NULL);
149 parent->insertBefore(ele, NULL);
159 static double cast(
const double &x) {
183 static Ret cast(
const char *x) {
191 static double cast(
const std::string &x) {
192 return boost::lexical_cast<
double>(boost::algorithm::trim_copy(x));
199 static Ret cast(
double x) {
200 return Ret(1,fmatvec::INIT,x);
207 static double cast(
double x) {
215 static Ret cast(
const fmatvec::VecV &x) {
223 static double cast(
const fmatvec::VecV &x) {
232 fmatvec::Vec3 computeTangential(
const fmatvec::Vec3 &n);
double ArcTan(double x, double y)
calculates planar angle in [0,2] with respect to Cartesian coordinates of: Arc Tangent (y/x) ...
Definition: utils.cc:72
Mat cs2Mat(cs *sparseMat)
calculate a fmatvec::Mat out of a sparse matrix
Definition: utils.cc:81