10 const double TOL = 1e-6;
22 #define ASSERT_VECTOR_ELEMENT( A, B ) assert_vector_element( ( A ), ( B ), #A, #B, __LINE__ )
23 #define ASSERT_VECTORS_EQUAL( A, B ) assert_vectors_equal( ( A ), ( B ), #A, #B, __LINE__ )
24 #define ASSERT_DOUBLES_EQUAL( A, B ) assert_doubles_equal( ( A ), ( B ), #A, #B, __LINE__ )
25 #define ASSERT( B ) assert_bool( ( B ), #B, __LINE__ )
29 static void assert_doubles_equal(
double a,
double b,
const char* sa,
const char* sb,
int lineno );
30 static void assert_bool(
bool b,
const char* sb,
int lineno );
78 static const int signs[][3] = { { 1, 1, -1 }, { -1, 1, -1 }, { -1, -1, -1 }, { 1, -1, -1 },
79 { 1, 1, 1 }, { -1, 1, 1 }, { -1, -1, 1 }, { 1, -1, 1 } };
80 return box.center + signs[corner][0] * factor *
box.scaled_axis( 0 ) +
81 signs[corner][1] * factor *
box.scaled_axis( 1 ) + signs[corner][2] * factor *
box.scaled_axis( 2 );
88 int sign =
face % 2 ? -1 : 1;
89 return box.center + factor * sign *
box.scaled_axis(
face / 2 );
96 if( dims[0] > dims[1] )
std::swap( dims[0], dims[1] );
97 if( dims[1] > dims[2] )
std::swap( dims[1], dims[2] );
98 if( dims[0] > dims[1] )
std::swap( dims[0], dims[1] );
835 const double short_pos = 0.99;
836 const double short_neg = -0.99;
837 const double long_pos = 1.01;
838 const double long_neg = -1.01;
1490 const double coords[] = { 0, 0, 0, 5, 0, 0, 5, 5, 0, 0, 5, 0, -5, 5, 0, -5, 0, 0, -5, -5, 0,
1491 0, -5, 0, 5, -5, 0, 10, 0, 0, 8, 5, 0, 5, 8, 0, 0, 10, 0, -5, 8, 0,
1492 -8, 5, 0, -10, 0, 0, -8, -5, 0, -5, -8, 0, 0, -10, 0, 5, -8, 0, 8, -5, 0 };
1493 const int conn[] = { 3, 12, 13, 3, 11, 12, 4, 13, 14, 4, 3, 13, 3, 2, 11, 2, 10, 11,
1495 5, 14, 15, 5, 4, 14, 3, 4, 5, 0, 3, 5, 0, 1, 3, 1, 2, 3, 2, 1, 10, 1, 9, 10,
1497 5, 15, 16, 6, 5, 16, 5, 6, 7, 0, 5, 7, 1, 0, 7, 1, 7, 8, 1, 8, 20, 9, 1, 20,
1499 6, 16, 17, 7, 6, 17, 7, 17, 18, 7, 18, 19, 8, 7, 19, 8, 19, 20 };
1502 std::vector< EntityHandle > vertices( 21 );
1503 for( i = 0; i < 21; ++i )
1505 rval =
moab.create_vertex( coords + 3 * i, vertices[i] );
1509 for( i = 0; i < 28; ++i )
1512 EntityHandle c[3] = { vertices[conn[3 * i]], vertices[conn[3 * i + 1]], vertices[conn[3 * i + 2]] };
1513 rval =
moab.create_element(
MBTRI, c, 3, tri );
1524 const Matrix3 axis(
box.scaled_axis( 0 ),
box.scaled_axis( 1 ),
box.scaled_axis( 2 ),
false );
1525 double min[3], max[3];
1527 min[0] = max[0] =
box.scaled_axis( 0 ) % v;
1528 min[1] = max[1] =
box.scaled_axis( 1 ) % v;
1529 min[2] = max[2] =
box.scaled_axis( 2 ) % v;
1530 for( i = 1; i < 21; ++i )
1534 for(
int j = 0; j < 3; ++j )
1536 double d = ( axis.
col( j ) % vLocal ) / ( axis.
col( j ) % axis.
col( j ) );
1537 if( d < min[j] ) min[j] = d;
1538 if( d > max[j] ) max[j] = d;
1554 const CartVect z_axis( 0.0, 0.0, 1.0 );
1565 const double vertex_coords[] = { 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1 };
1566 const int num_double =
sizeof(
vertex_coords ) / (
sizeof(
double ) );
1567 const int num_vertex = num_double / 3;
1568 assert( 0 == num_double % 3 );
1572 double min[3] = { HUGE_VAL, HUGE_VAL, HUGE_VAL };
1573 double max[3] = { -HUGE_VAL, -HUGE_VAL, -HUGE_VAL };
1574 for(
int i = 0; i < num_vertex; ++i )
1580 for(
int j = 0; j < 3; ++j )
1583 if( c < min[j] ) min[j] = c;
1584 if( c > max[j] ) max[j] = c;
1593 for(
int i = 0; i < num_vertex; ++i )
1599 double center[3] = { 0.5 * ( max[0] + min[0] ), 0.5 * ( max[1] + min[1] ), 0.5 * ( max[2] + min[2] ) };
1600 double diag[3] = { max[0] - min[0], max[1] - min[1], max[2] - min[2] };
1601 double outside1[3] = {
center[0] + diag[0],
center[1] + diag[1],
center[2] + diag[2] };
1604 double* outside[3] = { outside1, outside2, outside3 };
1606 for(
int i = 0; i < 3; ++i )
1625 rval =
moab.tag_get_bytes( tag,
size );
1635 bool ismatch =
false;
1636 for( i = 0; i < 3; ++i )
1638 if( fabs( a[0] - b( 0, i ) ) <=
TOL && fabs( a[1] - b( 1, i ) ) <=
TOL && fabs( a[2] - b( 2, i ) ) <=
TOL )
1647 std::cerr <<
"Assertion failed at line " << lineno << std::endl
1648 <<
"\t" << sa <<
" in " << sb << std::endl
1649 <<
"\t" << sa <<
" = " << a << std::endl
1650 <<
"\t" << sb <<
" = " << b << std::endl;
1657 if( fabs( a[0] - b[0] ) >
TOL || fabs( a[1] - b[1] ) >
TOL || fabs( a[2] - b[2] ) >
TOL )
1659 std::cerr <<
"Assertion failed at line " << lineno << std::endl
1660 <<
"\t" << sa <<
" == " << sb << std::endl
1661 <<
"\t[" << a[0] <<
", " << a[1] <<
", " << a[2] <<
"] == [" << b[0] <<
", " << b[1] <<
", " << b[2]
1662 <<
"]" << std::endl;
1669 if( fabs( a - b ) >
TOL )
1671 std::cerr <<
"Assertion failed at line " << lineno << std::endl
1672 <<
"\t" << sa <<
" == " << sb << std::endl
1673 <<
"\t" << a <<
" == " << b << std::endl;
1682 std::cerr <<
"Assertion failed at line " << lineno << std::endl <<
"\t" << sb << std::endl;