[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59365] trunk/blender/source/blender: code cleanup: bmesh duplicate functions

Julien Duroure julien.duroure at gmail.com
Thu Aug 22 19:26:09 CEST 2013


Hi all,

It seems that this commit broke Extrude tool.
Default Cube --> Edit Mode --> Selection by face --> Select 1 face --> EKEY
--> Move face !


Regards,

Julien

On Wed, Aug 21, 2013 at 4:35 PM, Campbell Barton <ideasman42 at gmail.com>wrote:

> Revision: 59365
>
> http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59365
> Author:   campbellbarton
> Date:     2013-08-21 14:35:51 +0000 (Wed, 21 Aug 2013)
> Log Message:
> -----------
> code cleanup: bmesh duplicate functions
> - avoid using an iterator when stepping around an edges radial loop.
> - use naming constant with the rest of the bmesh operators.
>
> Modified Paths:
> --------------
>     trunk/blender/source/blender/blenkernel/intern/anim.c
>     trunk/blender/source/blender/bmesh/operators/bmo_dupe.c
>
> Modified: trunk/blender/source/blender/blenkernel/intern/anim.c
> ===================================================================
> --- trunk/blender/source/blender/blenkernel/intern/anim.c       2013-08-21
> 13:26:17 UTC (rev 59364)
> +++ trunk/blender/source/blender/blenkernel/intern/anim.c       2013-08-21
> 14:35:51 UTC (rev 59365)
> @@ -493,7 +493,6 @@
>         BevList *bl;
>         BevPoint *bevp, *bevpn, *bevpfirst, *bevplast;
>         PathPoint *pp;
> -       Curve *cu;
>         Nurb *nu;
>         Path *path;
>         float *fp, *dist, *maxdist, xyz[3];
> @@ -506,7 +505,6 @@
>         if (ob == NULL || ob->type != OB_CURVE) {
>                 return;
>         }
> -       cu = ob->data;
>
>         if (ob->curve_cache->path) free_path(ob->curve_cache->path);
>         ob->curve_cache->path = NULL;
>
> Modified: trunk/blender/source/blender/bmesh/operators/bmo_dupe.c
> ===================================================================
> --- trunk/blender/source/blender/bmesh/operators/bmo_dupe.c     2013-08-21
> 13:26:17 UTC (rev 59364)
> +++ trunk/blender/source/blender/bmesh/operators/bmo_dupe.c     2013-08-21
> 14:35:51 UTC (rev 59365)
> @@ -46,23 +46,23 @@
>   *
>   * Copy an existing vertex from one bmesh to another.
>   */
> -static BMVert *copy_vertex(BMesh *source_mesh, BMVert *source_vertex,
> BMesh *target_mesh, GHash *vhash)
> +static BMVert *bmo_vert_copy(BMesh *bm_dst, BMesh *bm_src, BMVert *v_src,
> GHash *vhash)
>  {
> -       BMVert *target_vertex = NULL;
> +       BMVert *v_dst;
>
>         /* Create a new vertex */
> -       target_vertex = BM_vert_create(target_mesh, source_vertex->co,
> NULL, BM_CREATE_SKIP_CD);
> +       v_dst = BM_vert_create(bm_dst, v_src->co, NULL, BM_CREATE_SKIP_CD);
>
>         /* Insert new vertex into the vert hash */
> -       BLI_ghash_insert(vhash, source_vertex, target_vertex);
> -
> +       BLI_ghash_insert(vhash, v_src, v_dst);
> +
>         /* Copy attributes */
> -       BM_elem_attrs_copy(source_mesh, target_mesh, source_vertex,
> target_vertex);
> +       BM_elem_attrs_copy(bm_src, bm_dst, v_src, v_dst);
> +
> +       /* Mark the vert for output */
> +       BMO_elem_flag_enable(bm_dst, v_dst, DUPE_NEW);
>
> -       /* Set internal op flags */
> -       BMO_elem_flag_enable(target_mesh, target_vertex, DUPE_NEW);
> -
> -       return target_vertex;
> +       return v_dst;
>  }
>
>  /**
> @@ -70,55 +70,55 @@
>   *
>   * Copy an existing edge from one bmesh to another.
>   */
> -static BMEdge *copy_edge(BMOperator *op,
> -                         BMOpSlot *slot_boundarymap_out,
> -                         BMesh *source_mesh,
> -                         BMEdge *source_edge, BMesh *target_mesh,
> -                         GHash *vhash, GHash *ehash)
> +static BMEdge *bmo_edge_copy(BMOperator *op,
> +                             BMOpSlot *slot_boundarymap_out,
> +                             BMesh *bm_dst, BMesh *bm_src,
> +                             BMEdge *e_src,
> +                             GHash *vhash, GHash *ehash)
>  {
> -       BMEdge *target_edge = NULL;
> -       BMVert *target_vert1, *target_vert2;
> -       BMFace *face;
> -       BMIter fiter;
> -       int rlen;
> +       BMEdge *e_dst;
> +       BMVert *e_dst_v1, *e_dst_v2;
> +       unsigned int rlen;
>
>         /* see if any of the neighboring faces are
>          * not being duplicated.  in that case,
>          * add it to the new/old map. */
> +       /* lookup edge */
>         rlen = 0;
> -       for (face = BM_iter_new(&fiter, source_mesh, BM_FACES_OF_EDGE,
> source_edge);
> -            face;
> -            face = BM_iter_step(&fiter))
> -       {
> -               if (BMO_elem_flag_test(source_mesh, face, DUPE_INPUT)) {
> -                       rlen++;
> -               }
> +       if (e_src->l) {
> +               BMLoop *l_iter_src, *l_first_src;
> +               l_iter_src = l_first_src = e_src->l;
> +               do {
> +                       if (BMO_elem_flag_test(bm_src, l_iter_src->e,
> DUPE_INPUT)) {
> +                               rlen++;
> +                       }
> +               } while ((l_iter_src = l_iter_src->radial_next) !=
> l_first_src);
>         }
>
>         /* Lookup v1 and v2 */
> -       target_vert1 = BLI_ghash_lookup(vhash, source_edge->v1);
> -       target_vert2 = BLI_ghash_lookup(vhash, source_edge->v2);
> +       e_dst_v1 = BLI_ghash_lookup(vhash, e_src->v1);
> +       e_dst_v2 = BLI_ghash_lookup(vhash, e_src->v2);
>
>         /* Create a new edge */
> -       target_edge = BM_edge_create(target_mesh, target_vert1,
> target_vert2, NULL, BM_CREATE_SKIP_CD);
> +       e_dst = BM_edge_create(bm_dst, e_dst_v1, e_dst_v2, NULL,
> BM_CREATE_SKIP_CD);
>
>         /* add to new/old edge map if necassary */
>         if (rlen < 2) {
>                 /* not sure what non-manifold cases of greater then three
>                  * radial should do. */
> -               BMO_slot_map_elem_insert(op, slot_boundarymap_out,
> source_edge, target_edge);
> +               BMO_slot_map_elem_insert(op, slot_boundarymap_out, e_src,
> e_dst);
>         }
>
>         /* Insert new edge into the edge hash */
> -       BLI_ghash_insert(ehash, source_edge, target_edge);
> -
> +       BLI_ghash_insert(ehash, e_src, e_dst);
> +
>         /* Copy attributes */
> -       BM_elem_attrs_copy(source_mesh, target_mesh, source_edge,
> target_edge);
> +       BM_elem_attrs_copy(bm_src, bm_dst, e_src, e_dst);
> +
> +       /* Mark the edge for output */
> +       BMO_elem_flag_enable(bm_dst, e_dst, DUPE_NEW);
>
> -       /* Set internal op flags */
> -       BMO_elem_flag_enable(target_mesh, target_edge, DUPE_NEW);
> -
> -       return target_edge;
> +       return e_dst;
>  }
>
>  /**
> @@ -126,20 +126,19 @@
>   *
>   * Copy an existing face from one bmesh to another.
>   */
> -static BMFace *copy_face(BMOperator *op,
> -                         BMOpSlot *slot_facemap_out,
> -                         BMesh *bm_dst, BMesh *bm_src,
> -                         BMFace *source_face,
> -                         GHash *vhash, GHash *ehash)
> +static BMFace *bmo_face_copy(BMOperator *op,
> +                             BMOpSlot *slot_facemap_out,
> +                             BMesh *bm_dst, BMesh *bm_src,
> +                             BMFace *f_src,
> +                             GHash *vhash, GHash *ehash)
>  {
> -       /* BMVert *target_vert1, *target_vert2; */ /* UNUSED */
> -       BMVert **vtar = BLI_array_alloca(vtar, source_face->len);
> -       BMEdge **edar = BLI_array_alloca(edar, source_face->len);
> +       BMFace *f_dst;
> +       BMVert **vtar = BLI_array_alloca(vtar, f_src->len);
> +       BMEdge **edar = BLI_array_alloca(edar, f_src->len);
>         BMLoop *l_iter_src, *l_iter_dst, *l_first_src;
> -       BMFace *f_dst = NULL;
>         int i;
>
> -       l_first_src = BM_FACE_FIRST_LOOP(source_face);
> +       l_first_src = BM_FACE_FIRST_LOOP(f_src);
>
>         /* lookup edge */
>         l_iter_src = l_first_src;
> @@ -151,12 +150,12 @@
>         } while ((l_iter_src = l_iter_src->next) != l_first_src);
>
>         /* create new face */
> -       f_dst = BM_face_create(bm_dst, vtar, edar, source_face->len,
> source_face, BM_CREATE_NOP);
> -       BMO_slot_map_elem_insert(op, slot_facemap_out, source_face, f_dst);
> -       BMO_slot_map_elem_insert(op, slot_facemap_out, f_dst, source_face);
> +       f_dst = BM_face_create(bm_dst, vtar, edar, f_src->len, NULL,
> BM_CREATE_SKIP_CD);
> +       BMO_slot_map_elem_insert(op, slot_facemap_out, f_src, f_dst);
> +       BMO_slot_map_elem_insert(op, slot_facemap_out, f_dst, f_src);
>
> -       /* mark the face for output */
> -       BMO_elem_flag_enable(bm_dst, f_dst, DUPE_NEW);
> +       /* Copy attributes */
> +       BM_elem_attrs_copy(bm_src, bm_dst, f_src, f_dst);
>
>         /* copy per-loop custom data */
>         l_iter_src = l_first_src;
> @@ -166,6 +165,9 @@
>         } while ((l_iter_dst = l_iter_dst->next),
>                  (l_iter_src = l_iter_src->next) != l_first_src);
>
> +       /* Mark the face for output */
> +       BMO_elem_flag_enable(bm_dst, f_dst, DUPE_NEW);
> +
>         return f_dst;
>  }
>
> @@ -174,7 +176,7 @@
>   *
>   * Internal Copy function.
>   */
> -static void bmo_mesh_copy(BMOperator *op, BMesh *bm_src, BMesh *bm_dst)
> +static void bmo_mesh_copy(BMOperator *op, BMesh *bm_dst, BMesh *bm_src)
>  {
>
>         BMVert *v = NULL, *v2;
> @@ -200,7 +202,7 @@
>                         BMIter iter;
>                         bool isolated = true;
>
> -                       v2 = copy_vertex(bm_src, v, bm_dst, vhash);
> +                       v2 = bmo_vert_copy(bm_dst, bm_src, v, vhash);
>
>                         BM_ITER_ELEM (f, &iter, v, BM_FACES_OF_VERT) {
>                                 if (BMO_elem_flag_test(bm_src, f,
> DUPE_INPUT)) {
> @@ -233,15 +235,15 @@
>                 {
>                         /* make sure that verts are copied */
>                         if (!BMO_elem_flag_test(bm_src, e->v1, DUPE_DONE))
> {
> -                               copy_vertex(bm_src, e->v1, bm_dst, vhash);
> +                               bmo_vert_copy(bm_dst, bm_src, e->v1,
> vhash);
>                                 BMO_elem_flag_enable(bm_src, e->v1,
> DUPE_DONE);
>                         }
>                         if (!BMO_elem_flag_test(bm_src, e->v2, DUPE_DONE))
> {
> -                               copy_vertex(bm_src, e->v2, bm_dst, vhash);
> +                               bmo_vert_copy(bm_dst, bm_src, e->v2,
> vhash);
>                                 BMO_elem_flag_enable(bm_src, e->v2,
> DUPE_DONE);
>                         }
>                         /* now copy the actual edge */
> -                       copy_edge(op, slot_boundary_map_out, bm_src, e,
> bm_dst, vhash, ehash);
> +                       bmo_edge_copy(op, slot_boundary_map_out, bm_dst,
> bm_src, e, vhash, ehash);
>                         BMO_elem_flag_enable(bm_src, e, DUPE_DONE);
>                 }
>         }
> @@ -252,7 +254,7 @@
>                         /* vertex pass */
>                         BM_ITER_ELEM (v, &viter, f, BM_VERTS_OF_FACE) {
>                                 if (!BMO_elem_flag_test(bm_src, v,
> DUPE_DONE)) {
> -                                       copy_vertex(bm_src, v, bm_dst,
> vhash);
> +                                       bmo_vert_copy(bm_dst, bm_src, v,
> vhash);
>                                         BMO_elem_flag_enable(bm_src, v,
> DUPE_DONE);
>                                 }
>                         }
> @@ -260,12 +262,12 @@
>                         /* edge pass */
>                         BM_ITER_ELEM (e, &eiter, f, BM_EDGES_OF_FACE) {
>                                 if (!BMO_elem_flag_test(bm_src, e,
> DUPE_DONE)) {
> -                                       copy_edge(op,
> slot_boundary_map_out, bm_src, e, bm_dst, vhash, ehash);
> +                                       bmo_edge_copy(op,
> slot_boundary_map_out, bm_dst, bm_src, e, vhash, ehash);
>                                         BMO_elem_flag_enable(bm_src, e,
> DUPE_DONE);
>                                 }
>                         }
>
> -                       copy_face(op, slot_face_map_out, bm_dst, bm_src,
> f, vhash, ehash);
> +                       bmo_face_copy(op, slot_face_map_out, bm_dst,
> bm_src, f, vhash, ehash);
>                         BMO_elem_flag_enable(bm_src, f, DUPE_DONE);
>                 }
>         }
> @@ -298,16 +300,16 @@
>  void bmo_duplicate_exec(BMesh *bm, BMOperator *op)
>  {
>         BMOperator *dupeop = op;
> -       BMesh *bm2 = BMO_slot_ptr_get(op->slots_in, "dest");
> +       BMesh *bm_dst = BMO_slot_ptr_get(op->slots_in, "dest");
>
> -       if (!bm2)
> -               bm2 = bm;
> +       if (!bm_dst)
> +               bm_dst = bm;
>
>         /* flag input */
>         BMO_slot_buffer_flag_enable(bm, dupeop->slots_in, "geom",
> BM_ALL_NOLOOP, DUPE_INPUT);
>
>         /* use the internal copy function */
> -       bmo_mesh_copy(dupeop, bm, bm2);
> +       bmo_mesh_copy(dupeop, bm_dst, bm);
>
>         /* Output */
>         /* First copy the input buffers to output buffers - original data
> */
> @@ -457,13 +459,14 @@
>         float axis[3];
>         float rmat[3][3];
>         float phi;
> -       int steps, do_dupli, a, usedvec;
> +       int steps, do_dupli, a;
> +       bool use_dvec;
>
>         BMO_slot_vec_get(op->slots_in, "cent", cent);
>         BMO_slot_vec_get(op->slots_in, "axis", axis);
>         normalize_v3(axis);
>         BMO_slot_vec_get(op->slots_in, "dvec", dvec);
> -       usedvec = !is_zero_v3(dvec);
> +       use_dvec = !is_zero_v3(dvec);
>         steps    = BMO_slot_int_get(op->slots_in,   "steps");
>         phi      = BMO_slot_float_get(op->slots_in, "angle") / steps;
>         do_dupli = BMO_slot_bool_get(op->slots_in,  "use_duplicate");
> @@ -495,7 +498,7 @@
>                         BMO_op_finish(bm, &extop);
>                 }
>
> -               if (usedvec) {
> +               if (use_dvec) {
>                         mul_m3_v3(rmat, dvec);
>                         BMO_op_callf(bm, op->flag,
>                                      "translate vec=%v space=%s verts=%S",
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>


More information about the Bf-committers mailing list