Advertisement
Guest User

Untitled

a guest
May 29th, 2015
445
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.80 KB | None | 0 0
  1. void lmDistanceFeatures( const lmDistanceOutput* output, lmFeatures* features )
  2. {
  3.     lmSimplex simplex = output->simplices[ output->simplexCount - 1 ];
  4.     i32 iA[ 3 ] = { simplex.m_a.iA, simplex.m_b.iA, simplex.m_c.iA };
  5.     i32 iB[ 3 ] = { simplex.m_a.iB, simplex.m_b.iB, simplex.m_c.iB };
  6.  
  7.     switch ( simplex.m_count )
  8.     {
  9.     case 1:
  10.         features->numVertsA = lmFeatures::e_vert;
  11.         features->numVertsB = lmFeatures::e_vert;
  12.         features->simplexA[ 0 ] = iA[ 0 ];
  13.         features->simplexB[ 0 ] = iB[ 0 ];
  14.         break;
  15.  
  16.     case 2:
  17.         if ( iA[ 0 ] == iA[ 1 ] )
  18.         {
  19.             features->numVertsA = lmFeatures::e_vert;
  20.             features->numVertsB = lmFeatures::e_edge;
  21.             features->simplexA[ 0 ] = iA[ 0 ];
  22.             features->simplexB[ 0 ] = iB[ 0 ];
  23.             features->simplexB[ 1 ] = iB[ 1 ];
  24.         }
  25.  
  26.         else
  27.         {
  28.             features->numVertsA = lmFeatures::e_edge;
  29.             features->numVertsB = lmFeatures::e_vert;
  30.             features->simplexA[ 0 ] = iA[ 0 ];
  31.             features->simplexA[ 1 ] = iA[ 1 ];
  32.             features->simplexB[ 0 ] = iB[ 0 ];
  33.         }
  34.         break;
  35.  
  36.     case 3:
  37.         if ( lmDifferent( iA[ 0 ], iA[ 1 ], iA[ 2 ] ) )
  38.         {
  39.             features->numVertsA = lmFeatures::e_face;
  40.             features->simplexA[ 0 ] = iA[ 0 ];
  41.             features->simplexA[ 1 ] = iA[ 1 ];
  42.             features->simplexA[ 2 ] = iA[ 2 ];
  43.  
  44.             // @TODO: Don't treat face-vert same as face-edge
  45.             //assert( lmSame( iB[ 0 ], iB[ 1 ], iB[ 2 ] ) );
  46.             features->numVertsB = lmFeatures::e_vert;
  47.             features->simplexB[ 0 ] = iB[ 0 ];
  48.         }
  49.  
  50.  
  51.         else if ( lmDifferent( iB[ 0 ], iB[ 1 ], iB[ 2 ] ) )
  52.         {
  53.             features->numVertsB = lmFeatures::e_face;
  54.             features->simplexB[ 0 ] = iB[ 0 ];
  55.             features->simplexB[ 1 ] = iB[ 1 ];
  56.             features->simplexB[ 2 ] = iB[ 2 ];
  57.  
  58.             // @TODO: Don't treat face-vert same as face-edge
  59.             //assert( lmSame( iB[ 0 ], iB[ 1 ], iB[ 2 ] ) );
  60.             features->numVertsA = lmFeatures::e_vert;
  61.             features->simplexA[ 0 ] = iA[ 0 ];
  62.         }
  63.  
  64.         else
  65.         {
  66.             features->numVertsA = lmFeatures::e_edge;
  67.             features->numVertsB = lmFeatures::e_edge;
  68.  
  69.             if ( iA[ 0 ] == iA[ 1 ] )
  70.             {
  71.                 features->simplexA[ 0 ] = iA[ 0 ];
  72.                 features->simplexA[ 1 ] = iA[ 2 ];
  73.             }
  74.  
  75.             else if ( iA[ 0 ] == iA[ 2 ] )
  76.             {
  77.                 features->simplexA[ 0 ] = iA[ 0 ];
  78.                 features->simplexA[ 1 ] = iA[ 1 ];
  79.             }
  80.  
  81.             else
  82.             {
  83.                 features->simplexA[ 0 ] = iA[ 0 ];
  84.                 features->simplexA[ 1 ] = iA[ 2 ];
  85.             }
  86.  
  87.             if ( iB[ 0 ] == iB[ 1 ] )
  88.             {
  89.                 features->simplexB[ 0 ] = iB[ 0 ];
  90.                 features->simplexB[ 1 ] = iB[ 2 ];
  91.             }
  92.  
  93.             else if ( iB[ 0 ] == iB[ 2 ] )
  94.             {
  95.                 features->simplexB[ 0 ] = iB[ 0 ];
  96.                 features->simplexB[ 1 ] = iB[ 1 ];
  97.             }
  98.  
  99.             else
  100.             {
  101.                 features->simplexB[ 0 ] = iB[ 0 ];
  102.                 features->simplexB[ 1 ] = iB[ 2 ];
  103.             }
  104.  
  105.             assert( features->simplexA[ 0 ] != features->simplexA[ 1 ] );
  106.             assert( features->simplexB[ 0 ] != features->simplexB[ 1 ] );
  107.         }
  108.         break;
  109.  
  110.     default:
  111.         assert( false );
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement