diff options
author | Campbell Barton <ideasman42@gmail.com> | 2011-02-09 18:32:39 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2011-02-09 18:32:39 +0300 |
commit | 97c57abfa32387fab14cb0d575c10c3908131088 (patch) | |
tree | 6d059bb1849f161115419b593b59f1d85fd81e6e /source | |
parent | 5aa72b87262c1dd310c5dba7cd772b3d6b02a427 (diff) |
fix [#25994] Meshes with no vertices gets NaN location on setting origin to geometry
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/mesh.c | 5 | ||||
-rw-r--r-- | source/blender/editors/object/object_transform.c | 18 |
2 files changed, 15 insertions, 8 deletions
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c index 7ae3e73d919..24b680703f9 100644 --- a/source/blender/blenkernel/intern/mesh.c +++ b/source/blender/blenkernel/intern/mesh.c @@ -1556,7 +1556,10 @@ int mesh_center_median(Mesh *me, float cent[3]) for(mvert= me->mvert; i--; mvert++) { add_v3_v3(cent, mvert->co); } - mul_v3_fl(cent, 1.0f/(float)me->totvert); + /* otherwise we get NAN for 0 verts */ + if(me->totvert) { + mul_v3_fl(cent, 1.0f/(float)me->totvert); + } return (me->totvert != 0); } diff --git a/source/blender/editors/object/object_transform.c b/source/blender/editors/object/object_transform.c index 024e3e8a020..355f1c153cf 100644 --- a/source/blender/editors/object/object_transform.c +++ b/source/blender/editors/object/object_transform.c @@ -744,7 +744,9 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) total++; add_v3_v3(cent, eve->co); } - mul_v3_fl(cent, 1.0f/(float)total); + if(total) { + mul_v3_fl(cent, 1.0f/(float)total); + } } else { for(eve= em->verts.first; eve; eve= eve->next) { @@ -753,13 +755,15 @@ static int object_origin_set_exec(bContext *C, wmOperator *op) mid_v3_v3v3(cent, min, max); } - for(eve= em->verts.first; eve; eve= eve->next) { - sub_v3_v3(eve->co, cent); - } + if(!is_zero_v3(cent)) { + for(eve= em->verts.first; eve; eve= eve->next) { + sub_v3_v3(eve->co, cent); + } - recalc_editnormals(em); - tot_change++; - DAG_id_tag_update(&obedit->id, OB_RECALC_DATA); + recalc_editnormals(em); + tot_change++; + DAG_id_tag_update(&obedit->id, OB_RECALC_DATA); + } BKE_mesh_end_editmesh(me, em); } } |