]> SALOME platform Git repositories - modules/hexablock.git/blob - src/HEXABLOCK/HexVector.cxx
Salome HOME
53075b11fea6f13a49eb48b7df7690d5342e036e
[modules/hexablock.git] / src / HEXABLOCK / HexVector.cxx
1
2 // C++ : Gestion des aretes
3
4 #include "HexVector.hxx"
5
6 BEGIN_NAMESPACE_HEXA
7
8 // ======================================================== Constructeur
9 Vector::Vector (Document* doc, double dx, double dy, double dz)
10       : EltBase (doc)
11 {
12     v_dx = dx;
13     v_dy = dy;
14     v_dz = dz;
15 }
16 // ======================================================== Constructeur bis
17 Vector::Vector (Vector* lautre)
18       : EltBase (lautre->el_root)
19 {
20     v_dx = lautre -> v_dx;
21     v_dy = lautre -> v_dy;
22     v_dz = lautre -> v_dz;
23 }
24
25 // ======================================================== calculNormale
26 // === Calcule un vecteur orthogonal et norme
27 int Vector::calculNormale (double& nx, double& ny, double& nz)
28 {
29     double epsil = (v_dx * v_dx + v_dy * v_dy + v_dz * v_dz)*1e-6;
30     int    forme = 2000;
31     if  (v_dx > epsil || v_dx < -epsil) forme += 100;
32     if  (v_dy > epsil || v_dy < -epsil) forme +=  10;
33     if  (v_dz > epsil || v_dz < -epsil) forme +=   1;
34
35     nx = ny = nz = 0;
36     switch (forme)
37        {
38                              // dx=dy=dz=0 : retour vecteur i + erreur
39        case 2000 : nx = 1; 
40                    return HERR;
41                              // dx = 0 : on prend le vecteur i
42        case 2001 :  
43        case 2010 :  
44        case 2011 : nx = 1;
45                    return HOK;  
46                              // dy = 0 : on prend le vecteur j
47        case 2100 :  
48        case 2101 : ny = 1; 
49                    return HOK;  
50                              // dz = 0 : on prend le vecteur k
51        case 2110 : nz = 1;
52                    return HOK;  
53                              // dx, dy, dy non nuls : cas general;
54        default :;
55        }
56
57    double norme = sqrt (v_dx*v_dx + v_dy*v_dy);
58    nx =  v_dy / norme;
59    ny = -v_dx / norme;
60    return HOK;  
61 }
62
63 END_NAMESPACE_HEXA