278 {
280
281
282 int facet1 = -1;
283 int facet2 = -1;
284 int vertex1, vertex2;
286 {
287 int v1a;
288 int v1b;
289 int v2a;
290 int v2b;
291
295 } else {
298 }
302 } else {
305 }
306
307
309
312
314 vertex1 = v1a;
316 } else {
318 vertex1 = v1b;
320 }
321 }
322
323
325
328
330 vertex2 = v2a;
332 } else {
334 vertex2 = v2b;
336 }
337 }
338 }
339
340 auto change_vertices = [stl](
int facet_num,
int vnot,
stl_vertex new_vertex)
341 {
342 int first_facet = facet_num;
343 bool direction = false;
344
345 for (;;) {
346 int pivot_vertex;
347 int next_edge;
348 if (vnot > 2) {
349 if (direction) {
350 pivot_vertex = (vnot + 1) % 3;
351 next_edge = vnot % 3;
352 }
353 else {
354 pivot_vertex = (vnot + 2) % 3;
355 next_edge = pivot_vertex;
356 }
357 direction = !direction;
358 }
359 else {
360 if (direction) {
361 pivot_vertex = (vnot + 2) % 3;
362 next_edge = pivot_vertex;
363 }
364 else {
365 pivot_vertex = (vnot + 1) % 3;
366 next_edge = vnot;
367 }
368 }
369 #if 0
370 if (stl->
facet_start[facet_num].vertex[pivot_vertex](0) == new_vertex(0) &&
371 stl->
facet_start[facet_num].vertex[pivot_vertex](1) == new_vertex(1) &&
372 stl->
facet_start[facet_num].vertex[pivot_vertex](2) == new_vertex(2))
373 printf("Changing vertex %f,%f,%f: Same !!!\r\n", new_vertex(0), new_vertex(1), new_vertex(2));
374 else {
375 if (stl->
facet_start[facet_num].vertex[pivot_vertex](0) != new_vertex(0))
376 printf("Changing coordinate x, vertex %e (0x%08x) to %e(0x%08x)\r\n",
377 stl->
facet_start[facet_num].vertex[pivot_vertex](0),
378 *
reinterpret_cast<const int*
>(&stl->
facet_start[facet_num].vertex[pivot_vertex](0)),
379 new_vertex(0),
380 *reinterpret_cast<const int*>(&new_vertex(0)));
381 if (stl->
facet_start[facet_num].vertex[pivot_vertex](1) != new_vertex(1))
382 printf("Changing coordinate x, vertex %e (0x%08x) to %e(0x%08x)\r\n",
383 stl->
facet_start[facet_num].vertex[pivot_vertex](1),
384 *
reinterpret_cast<const int*
>(&stl->
facet_start[facet_num].vertex[pivot_vertex](1)),
385 new_vertex(1),
386 *reinterpret_cast<const int*>(&new_vertex(1)));
387 if (stl->
facet_start[facet_num].vertex[pivot_vertex](2) != new_vertex(2))
388 printf("Changing coordinate x, vertex %e (0x%08x) to %e(0x%08x)\r\n",
389 stl->
facet_start[facet_num].vertex[pivot_vertex](2),
390 *
reinterpret_cast<const int*
>(&stl->
facet_start[facet_num].vertex[pivot_vertex](2)),
391 new_vertex(2),
392 *reinterpret_cast<const int*>(&new_vertex(2)));
393 }
394 #endif
395 stl->
facet_start[facet_num].vertex[pivot_vertex] = new_vertex;
398 if (facet_num == -1)
399 break;
400
401 if (facet_num == first_facet) {
402
403 BOOST_LOG_TRIVIAL(info) << "Back to the first facet changing vertices: probably a mobius part. Try using a smaller tolerance or don't do a nearby check.";
404 return;
405 }
406 }
407 };
408
409 if (facet1 != -1) {
413 if (((vnot1 + 2) % 3) == vertex1)
414 vnot1 += 3;
415 change_vertices(facet1, vnot1, new_vertex1);
416 }
417 if (facet2 != -1) {
421 if (((vnot2 + 2) % 3) == vertex2)
422 vnot2 += 3;
423 change_vertices(facet2, vnot2, new_vertex2);
424 }
426 }
int which_edge
Definition connect.cpp:51
std::vector< stl_facet > facet_start
Definition stl.h:150
stl_stats stats
Definition stl.h:153
std::vector< stl_neighbors > neighbors_start
Definition stl.h:151
int edges_fixed
Definition stl.h:118