Public Member Functions | |
bool | skin () const |
Side (const EntityHandle *array, int idx, EntityHandle adj, unsigned short) | |
Side (const EntityHandle *array, int idx, EntityHandle adj, unsigned short, const short *indices) | |
bool | operator== (const Side &other) const |
Side (const EntityHandle *array, int idx, EntityHandle adj, unsigned short) | |
Side (const EntityHandle *array, int idx, EntityHandle adj, unsigned short, const short *indices) | |
bool | operator== (const Side &other) const |
Public Attributes | |
EntityHandle | handles [CORNERS - 1] |
side vertices, except for implicit one More... | |
EntityHandle | adj_elem |
element that this is a side of, or zero More... | |
This struct is used to for a reduced representation of element "sides" adjacent to a give vertex. As such, it a) does not store the initial vertex that all sides are adjacent to b) orders the remaining vertices in a specific way for fast comparison.
For edge elements, only the opposite vertex is stored. For triangle elements, only the other two vertices are stored, and they are stored with the smaller of those two handles first. For quad elements, only the other three vertices are stored. They are stored such that the vertex opposite the implicit (not stored) vertex is always in slot 1. The other two vertices (in slots 0 and 2) are ordered such that the handle of the one in slot 0 is smaller than the handle in slot 2.
For each side, the adj_elem field is used to store the element that it is a side of as long as the element is considered to be on the skin. The adj_elem field is cleared (set to zero) to indicate that this side is no longer considered to be on the skin (and is the side of more than one element.)
Definition at line 1168 of file Skinner.cpp.
|
inline |
construct from connectivity of side
array | The connectivity of the element side. |
idx | The index of the implicit vertex (contained in all sides in the list.) |
adj | The element that this is a side of. |
Definition at line 1183 of file Skinner.cpp.
1183 : adj_elem( adj )
1184 {
1185 switch( CORNERS )
1186 {
1187 case 3:
1188 handles[1] = array[( idx + 2 ) % CORNERS];
1189 // fall through
1190 case 2:
1191 if( 3 == CORNERS ) handles[1] = array[( idx + 2 ) % CORNERS];
1192 if( 2 <= CORNERS ) handles[0] = array[( idx + 1 ) % CORNERS];
1193 break;
1194 default:
1195 assert( false );
1196 break;
1197 }
1198 if( CORNERS == 3 && handles[1] > handles[0] ) std::swap( handles[0], handles[1] );
1199 }
References moab::AdjSides< CORNERS >::Side::handles.
|
inline |
construct from connectivity of parent element
array | The connectivity of the parent element |
idx | The index of the implicit vertex (contained in all sides in the list.) This is an index into 'indices', not 'array'. |
adj | The element that this is a side of. |
indices | The indices into 'array' at which the vertices representing the side occur. |
Definition at line 1210 of file Skinner.cpp.
1211 : adj_elem( adj )
1212 {
1213 switch( CORNERS )
1214 {
1215 case 3:
1216 handles[1] = array[indices[( idx + 2 ) % CORNERS]];
1217 // fall through
1218 case 2:
1219 if( 3 == CORNERS ) handles[1] = array[indices[( idx + 2 ) % CORNERS]];
1220 if( 2 <= CORNERS ) handles[0] = array[indices[( idx + 1 ) % CORNERS]];
1221 break;
1222 default:
1223 assert( false );
1224 break;
1225 }
1226 if( CORNERS == 3 && handles[1] > handles[0] ) std::swap( handles[0], handles[1] );
1227 }
References moab::AdjSides< CORNERS >::Side::handles.
moab::AdjSides::Side< 4 >::Side | ( | const EntityHandle * | array, |
int | idx, | ||
EntityHandle | adj, | ||
unsigned short | |||
) |
construct from connectivity of side
array | The connectivity of the element side. |
idx | The index of the implicit vertex (contained in all sides in the list.) |
adj | The element that this is a side of. |
Definition at line 1378 of file Skinner.cpp.
1378 : adj_elem( adj )
1379 {
1380 const unsigned int CORNERS = 4;
1381 handles[2] = array[( idx + 3 ) % CORNERS];
1382 handles[1] = array[( idx + 2 ) % CORNERS];
1383 handles[0] = array[( idx + 1 ) % CORNERS];
1384 if( handles[2] > handles[0] ) std::swap( handles[0], handles[2] );
1385 }
References moab::AdjSides< CORNERS >::Side::handles.
moab::AdjSides::Side< 4 >::Side | ( | const EntityHandle * | array, |
int | idx, | ||
EntityHandle | adj, | ||
unsigned short | , | ||
const short * | indices | ||
) |
construct from connectivity of parent element
array | The connectivity of the parent element |
idx | The index of the implicit vertex (contained in all sides in the list.) This is an index into 'indices', not 'array'. |
adj | The element that this is a side of. |
indices | The indices into 'array' at which the vertices representing the side occur. |
Definition at line 1397 of file Skinner.cpp.
1398 : adj_elem( adj )
1399 {
1400 const unsigned int CORNERS = 4;
1401 handles[2] = array[indices[( idx + 3 ) % CORNERS]];
1402 handles[1] = array[indices[( idx + 2 ) % CORNERS]];
1403 handles[0] = array[indices[( idx + 1 ) % CORNERS]];
1404 if( handles[2] > handles[0] ) std::swap( handles[0], handles[2] );
1405 }
References moab::AdjSides< CORNERS >::Side::handles.
|
inline |
Definition at line 1231 of file Skinner.cpp.
1232 {
1233 switch( CORNERS )
1234 {
1235 case 3:
1236 return handles[0] == other.handles[0] && handles[1] == other.handles[1];
1237 case 2:
1238 return handles[0] == other.handles[0];
1239 default:
1240 assert( false );
1241 return false;
1242 }
1243 }
References moab::AdjSides< CORNERS >::Side::handles.
bool moab::AdjSides::Side< 4 >::operator== | ( | const Side & | other | ) | const |
Definition at line 1410 of file Skinner.cpp.
1411 {
1412 return handles[0] == other.handles[0] && handles[1] == other.handles[1] && handles[2] == other.handles[2];
1413 }
References moab::AdjSides< CORNERS >::Side::handles.
|
inline |
Definition at line 1172 of file Skinner.cpp.
1173 {
1174 return 0 != adj_elem;
1175 }
References moab::AdjSides< CORNERS >::Side::adj_elem.
EntityHandle moab::AdjSides< CORNERS >::Side::adj_elem |
element that this is a side of, or zero
Definition at line 1171 of file Skinner.cpp.
Referenced by moab::AdjSides< CORNERS >::Side::skin().
EntityHandle moab::AdjSides< CORNERS >::Side::handles[CORNERS - 1] |
side vertices, except for implicit one
Definition at line 1170 of file Skinner.cpp.
Referenced by moab::AdjSides< CORNERS >::Side::operator==(), and moab::AdjSides< CORNERS >::Side::Side().