2 // C++ : Gestion des vecteurs
4 // Copyright (C) 2009-2013 CEA/DEN, EDF R&D
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
22 #include "HexVector.hxx"
23 #include "HexXmlWriter.hxx"
27 // ======================================================== Constructeur
28 Vector::Vector (Document* doc, double dx, double dy, double dz)
29 : EltBase (doc, EL_VECTOR)
35 // ======================================================== Constructeur bis
36 Vector::Vector (Vector* lautre)
37 : EltBase (lautre->el_root)
39 v_dx = lautre -> v_dx;
40 v_dy = lautre -> v_dy;
41 v_dz = lautre -> v_dz;
44 // ======================================================== calculNormale
45 // === Calcule un vecteur orthogonal et norme
46 int Vector::calculNormale (double& nx, double& ny, double& nz)
48 double epsil = (v_dx * v_dx + v_dy * v_dy + v_dz * v_dz)*1e-6;
50 if (v_dx > epsil || v_dx < -epsil) forme += 100;
51 if (v_dy > epsil || v_dy < -epsil) forme += 10;
52 if (v_dz > epsil || v_dz < -epsil) forme += 1;
57 // dx=dy=dz=0 : retour vecteur i + erreur
60 // dx = 0 : on prend le vecteur i
65 // dy = 0 : on prend le vecteur j
69 // dz = 0 : on prend le vecteur k
72 // dx, dy, dy non nuls : cas general;
76 double norme = sqrt (v_dx*v_dx + v_dy*v_dy);
81 // ========================================================= saveXml
82 void Vector::saveXml (XmlWriter* xml)
84 char buffer[12], coord[80];
86 sprintf (coord, "%g %g %g", v_dx, v_dy, v_dz);
88 xml->openMark ("Vector");
89 xml->addAttribute ("id", getName (buffer));
90 xml->addAttribute ("coord", coord);
92 xml->addAttribute ("name", el_name);
95 // ========================================================= getAngleX
96 double Vector::getAngleX ()
98 static const double Epsilon = 1e-6;
100 double norme = getNorm ();
104 double kos = v_dx / norme;
105 double deg = acos(kos) * 180.0 / M_PI;