diff options
author | Germano Cavalcante <germano.costa@ig.com.br> | 2021-11-24 20:53:16 +0300 |
---|---|---|
committer | Germano Cavalcante <germano.costa@ig.com.br> | 2021-11-24 20:53:16 +0300 |
commit | c155a5f9d7f9989166737e0a3f18919d3a214f3a (patch) | |
tree | b7c721574af44495d82e1f5845576283575e5bc3 /source/blender/blenkernel/intern/object.cc | |
parent | bbadee6fc10555327b1849027f2cb04c794173d9 (diff) | |
parent | 752c6d668bcb9a6b357734f7e124a6b605ac9d9b (diff) |
Merge branch 'blender-v3.0-release'
Diffstat (limited to 'source/blender/blenkernel/intern/object.cc')
-rw-r--r-- | source/blender/blenkernel/intern/object.cc | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/object.cc b/source/blender/blenkernel/intern/object.cc index c12be9cc80c..e3b9e4109ed 100644 --- a/source/blender/blenkernel/intern/object.cc +++ b/source/blender/blenkernel/intern/object.cc @@ -3983,6 +3983,37 @@ void BKE_object_boundbox_calc_from_mesh(Object *ob, const Mesh *me_eval) ob->runtime.bb->flag &= ~BOUNDBOX_DIRTY; } +bool BKE_object_boundbox_calc_from_evaluated_geometry(Object *ob) +{ + blender::float3 min, max; + INIT_MINMAX(min, max); + + if (ob->runtime.geometry_set_eval) { + ob->runtime.geometry_set_eval->compute_boundbox_without_instances(&min, &max); + } + else if (const Mesh *mesh_eval = BKE_object_get_evaluated_mesh(ob)) { + if (!BKE_mesh_wrapper_minmax(mesh_eval, min, max)) { + return false; + } + } + else if (ob->runtime.curve_cache) { + BKE_displist_minmax(&ob->runtime.curve_cache->disp, min, max); + } + else { + return false; + } + + if (ob->runtime.bb == nullptr) { + ob->runtime.bb = (BoundBox *)MEM_callocN(sizeof(BoundBox), __func__); + } + + BKE_boundbox_init_from_minmax(ob->runtime.bb, min, max); + + ob->runtime.bb->flag &= ~BOUNDBOX_DIRTY; + + return true; +} + /** \} */ /* -------------------------------------------------------------------- */ |