Merge branch 'master' of ssh://swordfish/srv/www/htdocs/git/engrid
[engrid.git] / src / tricoord.cpp
blob78a197667dfbdba534284ed0937f002e241c7fdf
1 #include "tricoord.h"
3 TriCoord::TriCoord(vtkUnstructuredGrid* surf_grid, vtkIdType id_tri, vec3_t x)
5 m_SurfGrid = surf_grid;
6 setPosition(x);
9 void TriCoord::setPosition(vec3_t x)
12 bool intersects_face = GeometryTools::intersectEdgeAndTriangle(T.a, T.b, T.c, x1, x2, xi, ri);
13 if (!intersects_face) {
14 double kab = GeometryTools::intersection(T.a, T.b - T.a, xp, T.b - T.a);
15 double kac = GeometryTools::intersection(T.a, T.c - T.a, xp, T.c - T.a);
16 double kbc = GeometryTools::intersection(T.b, T.c - T.b, xp, T.c - T.b);
17 double dab = (T.a + kab*(T.b-T.a) - xp).abs();
18 double dac = (T.a + kac*(T.c-T.a) - xp).abs();
19 double dbc = (T.b + kbc*(T.c-T.b) - xp).abs();
20 bool set = false;
21 if ((kab >= 0) && (kab <= 1)) {
22 if (dab < d) {
23 xi = T.a + kab*(T.b-T.a);
24 d = dab;
25 set = true;
28 if ((kac >= 0) && (kac <= 1)) {
29 if (dac < d) {
30 xi = T.a + kac*(T.c-T.a);
31 d = dac;
32 set = true;
35 if ((kbc >= 0) && (kbc <= 1)) {
36 if (dbc < d) {
37 xi = T.b + kbc*(T.c-T.b);
38 d = dbc;
39 set = true;
42 double da = (T.a - xp).abs();
43 double db = (T.b - xp).abs();
44 double dc = (T.c - xp).abs();
45 if (da < d) {
46 xi = T.a;
47 d = da;
48 set = true;
50 if (db < d) {
51 xi = T.b;
52 d = db;
54 if (dc < d) {
55 xi = T.c;
56 d = dc;
57 set = true;
59 if (!set) {
60 EG_BUG;