some code cleanup for rip tool.
authorCampbell Barton <ideasman42@gmail.com>
Fri, 9 Mar 2012 04:10:19 +0000 (04:10 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 9 Mar 2012 04:10:19 +0000 (04:10 +0000)
source/blender/editors/mesh/bmesh_tools.c

index 022e94e8209fa710e0decb5b01e97fb6eb337790..6b136bde14168165f58ab9f96f49a98d77d59413 100644 (file)
@@ -2342,7 +2342,7 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event)
        int i, singlesel = FALSE;
        float projectMat[4][4], fmval[3] = {event->mval[0], event->mval[1]};
        float dist = FLT_MAX;
-       float d, d_a, d_b;
+       float d;
 
        /* note on selection:
         * When calling edge split we operate on tagged edges rather then selected
@@ -2455,23 +2455,16 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event)
        
        BMO_op_exec(bm, &bmop);
 
-#ifdef USE_BVH_VISIBILITY
-       /* build bvh tree for edge visibility tests */
-       bvhtree = BMBVH_NewBVH(em, 0, NULL, NULL);
-#endif
-
        BMO_ITER(e, &siter, bm, &bmop, "edgeout", BM_EDGE) {
                float cent[3] = {0, 0, 0}, mid[3];
-               float vec[3];
-               float fmval_tweak[3];
+
+               float vec[2];
+               float fmval_tweak[2];
+               float e_v1_co[2], e_v2_co[2];
+
                BMVert *v1_other;
                BMVert *v2_other;
 
-#ifdef USE_BVH_VISIBILITY
-               if (!BMBVH_EdgeVisible(bvhtree, e, ar, v3d, obedit) || !e->l)
-                       continue;
-#endif
-
                /* method for calculating distance:
                 *
                 * for each edge: calculate face center, then made a vector
@@ -2488,26 +2481,23 @@ static int mesh_rip_invoke(bContext *C, wmOperator *op, wmEvent *event)
                ED_view3d_project_float_v2(ar, cent, cent, projectMat);
                ED_view3d_project_float_v2(ar, mid, mid, projectMat);
 
+               ED_view3d_project_float_v2(ar, e->v1->co, e_v1_co, projectMat);
+               ED_view3d_project_float_v2(ar, e->v2->co, e_v2_co, projectMat);
+
                sub_v2_v2v2(vec, cent, mid);
                normalize_v2(vec);
-               mul_v2_fl(vec, 0.1f);
+               mul_v2_fl(vec, 0.01f);
 
-
-               /* ratrher then adding to both verts, subtract from the mouse */
+               /* rather then adding to both verts, subtract from the mouse */
                sub_v2_v2v2(fmval_tweak, fmval, vec);
 
-               d_a = mesh_rip_edgedist(ar, projectMat, e->v1->co, e->v2->co, fmval_tweak);
-               d_b = mesh_rip_edgedist(ar, projectMat, e->v1->co, e->v2->co, fmval);
-
-               if (d_a > d_b) {
+               if (dist_to_line_segment_v2(fmval_tweak, e_v1_co, e_v2_co) >
+                   dist_to_line_segment_v2(fmval,       e_v1_co, e_v2_co))
+               {
                        BM_elem_select_set(bm, e, FALSE);
                }
        }
 
-#ifdef USE_BVH_VISIBILITY
-       BMBVH_FreeBVH(bvhtree);
-#endif
-
        if (singlesel) {
                BMVert *v_best = NULL;
                float l_prev_co[3], l_next_co[3], l_corner_co[3];