105 if (
sPtr->ent == ent) {
108 .insert(boost::shared_ptr<SideNumber>(
new SideNumber(ent, 0, 0, 0)))
117 .insert(boost::shared_ptr<SideNumber>(
new SideNumber(ent, 0, 0, 0)))
124 int side_number, sense, offset;
125 rval = moab.side_number(
sPtr->ent, ent, side_number, sense, offset);
128 if (side_number == -1 ||
rval != MB_SUCCESS) {
131 THROW_MESSAGE(
"Huston we have problem, vertex (specified by ent) is not "
132 "part of prism, that is impossible (top tip: check your "
139 rval = moab.get_connectivity(
sPtr->ent, conn, num_nodes,
true);
141 assert(num_nodes == 6);
144 rval = moab.get_connectivity(ent, conn_ent, num_nodes,
true);
160 if (num_nodes == 3) {
161 int sense_p1_map[3][3] = {{0, 1, 2}, {1, 2, 0}, {2, 0, 1}};
162 int sense_m1_map[3][3] = {{0, 2, 1}, {1, 0, 2}, {2, 1, 0}};
163 EntityHandle *conn0_3_ptr = std::find(face3, &face3[3], conn_ent[0]);
164 if (conn0_3_ptr != &face3[3]) {
165 offset = std::distance(face3, conn0_3_ptr);
166 if (face3[sense_p1_map[offset][0]] == conn_ent[0] &&
167 face3[sense_p1_map[offset][1]] == conn_ent[1] &&
168 face3[sense_p1_map[offset][2]] == conn_ent[2]) {
170 .insert(boost::shared_ptr<SideNumber>(
171 new SideNumber(ent, 3, 1, offset)))
174 }
else if (face3[sense_m1_map[offset][0]] == conn_ent[0] &&
175 face3[sense_m1_map[offset][1]] == conn_ent[1] &&
176 face3[sense_m1_map[offset][2]] == conn_ent[2]) {
178 .insert(boost::shared_ptr<SideNumber>(
179 new SideNumber(ent, 3, -1, offset)))
184 EntityHandle *conn0_4_ptr = std::find(face4, &face4[3], conn_ent[0]);
185 if (conn0_4_ptr != &face4[3]) {
186 offset = std::distance(face4, conn0_4_ptr);
187 if (face4[sense_p1_map[offset][0]] == conn_ent[0] &&
188 face4[sense_p1_map[offset][1]] == conn_ent[1] &&
189 face4[sense_p1_map[offset][2]] == conn_ent[2]) {
191 .insert(boost::shared_ptr<SideNumber>(
192 new SideNumber(ent, 4, 1, 3 + offset)))
195 }
else if (face4[sense_m1_map[offset][0]] == conn_ent[0] &&
196 face4[sense_m1_map[offset][1]] == conn_ent[1] &&
197 face4[sense_m1_map[offset][2]] == conn_ent[2]) {
199 .insert(boost::shared_ptr<SideNumber>(
200 new SideNumber(ent, 4, -1, 3 + offset)))
204 std::cerr << conn_ent[0] <<
" " << conn_ent[1] <<
" " << conn_ent[2]
206 std::cerr << face3[0] <<
" " << face3[1] <<
" " << face3[2]
208 std::cerr << face4[0] <<
" " << face4[1] <<
" " << face4[2]
210 std::cerr << offset << std::endl;
217 if (num_nodes == 2) {
221 {conn[0], conn[1]} , {conn[1], conn[2]} ,
222 {conn[2], conn[0]} , {conn[3], conn[4]} ,
223 {conn[4], conn[5]} , {conn[5], conn[3]}
225 for (
int ee = 0; ee < 6; ee++) {
226 if (((conn_ent[0] == edges[ee][0]) &&
227 (conn_ent[1] == edges[ee][1])) ||
228 ((conn_ent[0] == edges[ee][1]) &&
229 (conn_ent[1] == edges[ee][0]))) {
234 std::find(face4, &face4[3], conn_ent[0]);
235 offset = std::distance(face4, conn0_4_ptr) + 3;
238 std::find(face3, &face3[3], conn_ent[0]);
239 offset = std::distance(face3, conn0_3_ptr);
242 if ((conn_ent[0] == edges[ee][1]) && (conn_ent[1] == edges[ee][0]))
245 .insert(boost::shared_ptr<SideNumber>(
246 new SideNumber(ent, side_number, sense, offset)))
281 std::ostringstream sss;
283 <<
" " << MBEDGE <<
" " << MBTRI << std::endl;
287 .insert(boost::shared_ptr<SideNumber>(
288 new SideNumber(ent, side_number, sense, offset)))
auto type_from_handle
get type from entity handle
static const boost::shared_ptr< SideNumber > nullSideNumber
boost::shared_ptr< RefEntity > sPtr