MCPcopy Create free account
hub / github.com/Redot-Engine/redot-engine / wrap_geometry

Method wrap_geometry

core/math/geometry_3d.cpp:458–591  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

456}
457
458Vector<Face3> Geometry3D::wrap_geometry(const Vector<Face3> &p_array, real_t *p_error) {
459 int face_count = p_array.size();
460 const Face3 *faces = p_array.ptr();
461 constexpr double min_size = 1.0;
462 constexpr int max_length = 20;
463
464 AABB global_aabb;
465
466 for (int i = 0; i < face_count; i++) {
467 if (i == 0) {
468 global_aabb = faces[i].get_aabb();
469 } else {
470 global_aabb.merge_with(faces[i].get_aabb());
471 }
472 }
473
474 global_aabb.grow_by(0.01f); // Avoid numerical error.
475
476 // Determine amount of cells in grid axis.
477 int div_x, div_y, div_z;
478
479 if (global_aabb.size.x / min_size < max_length) {
480 div_x = (int)(global_aabb.size.x / min_size) + 1;
481 } else {
482 div_x = max_length;
483 }
484
485 if (global_aabb.size.y / min_size < max_length) {
486 div_y = (int)(global_aabb.size.y / min_size) + 1;
487 } else {
488 div_y = max_length;
489 }
490
491 if (global_aabb.size.z / min_size < max_length) {
492 div_z = (int)(global_aabb.size.z / min_size) + 1;
493 } else {
494 div_z = max_length;
495 }
496
497 Vector3 voxelsize = global_aabb.size;
498 voxelsize.x /= div_x;
499 voxelsize.y /= div_y;
500 voxelsize.z /= div_z;
501
502 // Create and initialize cells to zero.
503
504 uint8_t ***cell_status = memnew_arr(uint8_t **, div_x);
505 for (int i = 0; i < div_x; i++) {
506 cell_status[i] = memnew_arr(uint8_t *, div_y);
507
508 for (int j = 0; j < div_y; j++) {
509 cell_status[i][j] = memnew_arr(uint8_t, div_z);
510
511 for (int k = 0; k < div_z; k++) {
512 cell_status[i][j][k] = 0;
513 }
514 }
515 }

Callers

nothing calls this directly

Calls 11

_plot_faceFunction · 0.85
_mark_outsideFunction · 0.85
_build_facesFunction · 0.85
memdelete_arrFunction · 0.85
sizeMethod · 0.65
ptrMethod · 0.45
get_aabbMethod · 0.45
merge_withMethod · 0.45
grow_byMethod · 0.45
ptrwMethod · 0.45
lengthMethod · 0.45

Tested by

no test coverage detected