LCOV - code coverage report
Current view: top level - algs/Qslim - 3D.cpp (source / functions) Hit Total Coverage
Test: coverage_sk.info Lines: 8 48 16.7 %
Date: 2020-07-01 15:24:36 Functions: 3 7 42.9 %
Branches: 9 46 19.6 %

           Branch data     Line data    Source code
       1                 :            : #include "std.h"
       2                 :            : #include <stdlib.h>
       3                 :            : #include <limits>
       4                 :            : 
       5                 :            : #include "3D.h"
       6                 :            : ////////////////////////////////////////////////////////////////////////.
       7                 :            : //
       8                 :            : // class: Bounds
       9                 :            : //
      10                 :            : 
      11                 :          0 : void Bounds::reset()
      12                 :            : {
      13                 :          0 :     min[X] = min[Y] = min[Z] = std::numeric_limits<double>::max();
      14                 :          0 :     max[X] = max[Y] = max[Z] = std::numeric_limits<double>::min();
      15                 :            : 
      16                 :          0 :     center[X] = center[Y] = center[Z] = 0.0;
      17                 :          0 :     radius = 0.0;
      18                 :            : 
      19                 :          0 :     points = 0;
      20                 :          0 : }
      21                 :            : 
      22                 :          0 : void Bounds::addPoint(const Vec3& v)
      23                 :            : {
      24         [ #  # ]:          0 :     if( v[X] < min[X] ) min[X] = v[X];
      25         [ #  # ]:          0 :     if( v[Y] < min[Y] ) min[Y] = v[Y];
      26         [ #  # ]:          0 :     if( v[Z] < min[Z] ) min[Z] = v[Z];
      27                 :            : 
      28         [ #  # ]:          0 :     if( v[X] > max[X] ) max[X] = v[X];
      29         [ #  # ]:          0 :     if( v[Y] > max[Y] ) max[Y] = v[Y];
      30         [ #  # ]:          0 :     if( v[Z] > max[Z] ) max[Z] = v[Z];
      31                 :            : 
      32                 :            : 
      33                 :          0 :     center += v;
      34                 :            : 
      35                 :          0 :     points++;
      36                 :          0 : }
      37                 :            : 
      38                 :          0 : void Bounds::complete()
      39                 :            : {
      40         [ #  # ]:          0 :     center /= (double)points;
      41                 :            : 
      42         [ #  # ]:          0 :     Vec3 R1 = max-center;
      43         [ #  # ]:          0 :     Vec3 R2 = min-center;
      44         [ #  # ]:          0 :     double r1=length(R1);
      45         [ #  # ]:          0 :     double r2=length(R2);
      46         [ #  # ]:          0 :     radius = (r1>r2)?r1:r2; // max (r1, r2)
      47                 :          0 : }
      48                 :            : 
      49                 :            : 
      50                 :            : 
      51                 :            : ////////////////////////////////////////////////////////////////////////
      52                 :            : //
      53                 :            : // class: Plane
      54                 :            : //
      55                 :            : 
      56                 :      60000 : void Plane::calcFrom(const Vec3& p1, const Vec3& p2, const Vec3& p3)
      57                 :            : {
      58         [ +  - ]:      60000 :     Vec3 v1 = p2-p1;
      59         [ +  - ]:      60000 :     Vec3 v2 = p3-p1;
      60                 :            : 
      61 [ +  - ][ +  - ]:      60000 :     n = v1 ^ v2;
      62         [ +  - ]:      60000 :     unitize(n);
      63                 :            : 
      64 [ +  - ][ +  - ]:      60000 :     d = -n*p1;
      65                 :      60000 : }
      66                 :            : 
      67                 :          0 : void Plane::calcFrom(const array<Vec3>& verts)
      68                 :            : {
      69                 :          0 :     n[X] = n[Y] = n[Z] = 0.0;
      70                 :            : 
      71                 :            :     int i;
      72         [ #  # ]:          0 :     for(i=0; i<verts.length()-1; i++)
      73                 :            :     {
      74                 :          0 :         const Vec3& cur = verts[i];
      75                 :          0 :         const Vec3& next = verts[i+1];
      76                 :            : 
      77                 :          0 :         n[X] += (cur[Y] - next[Y]) * (cur[Z] + next[Z]);
      78                 :          0 :         n[Y] += (cur[Z] - next[Z]) * (cur[X] + next[X]);
      79                 :          0 :         n[Z] += (cur[X] - next[X]) * (cur[Y] + next[Y]);
      80                 :            :     }
      81                 :            : 
      82                 :          0 :     const Vec3& cur = verts[verts.length()-1];
      83                 :          0 :     const Vec3& next = verts[0];
      84                 :          0 :     n[X] += (cur[Y] - next[Y]) * (cur[Z] + next[Z]);
      85                 :          0 :     n[Y] += (cur[Z] - next[Z]) * (cur[X] + next[X]);
      86                 :          0 :     n[Z] += (cur[X] - next[X]) * (cur[Y] + next[Y]);
      87                 :            : 
      88                 :          0 :     unitize(n);
      89                 :            : 
      90         [ #  # ]:          0 :     d = -n*verts[0];
      91 [ +  - ][ +  - ]:       1872 : }
      92                 :            : 
      93                 :            : 

Generated by: LCOV version 1.11