added boolean type for bmesh operators, will make python wrapping clearer and also...
[blender.git] / source / blender / bmesh / operators / bmo_primitive.c
index 311ddfbf55e2f0fce568034d78bc3eb5f8a7cdc2..dc9b26cd665b159905c5d6afa4ed61a2d65ab43c 100644 (file)
@@ -246,7 +246,7 @@ void bmesh_create_grid_exec(BMesh *bm, BMOperator *op)
                mul_m4_v3(mat, vec);
 
                eve = BM_vert_create(bm, vec, NULL);
-               BM_elem_select_set(bm, eve, TRUE);
+               BMO_elem_flag_enable(bm, eve, VERT_MARK);
 
                if (a) {
                        e = BM_edge_create(bm, preveve, eve, NULL, TRUE);
@@ -378,7 +378,9 @@ void bmesh_create_uvsphere_exec(BMesh *bm, BMOperator *op)
 void bmesh_create_icosphere_exec(BMesh *bm, BMOperator *op)
 {
        BMVert *eva[12];
+       BMVert *v;
        BMIter liter;
+       BMIter viter;
        BMLoop *l;
        float vec[3], mat[4][4] /* , phi, phid */;
        float dia = BMO_slot_float_get(op, "diameter");
@@ -396,8 +398,7 @@ void bmesh_create_icosphere_exec(BMesh *bm, BMOperator *op)
                vec[2] = dia * icovert[a][2];
                eva[a] = BM_vert_create(bm, vec, NULL);
 
-               mul_m4_v3(mat, eva[a]->co);
-               BM_elem_select_set(bm, eva[a], TRUE);
+               BMO_elem_flag_enable(bm, eva[a], VERT_MARK);
        }
 
        for (a = 0; a < 20; a++) {
@@ -431,6 +432,13 @@ void bmesh_create_icosphere_exec(BMesh *bm, BMOperator *op)
                BMO_op_finish(bm, &bmop);
        }
 
+       /* must transform after becayse of sphere subdivision */
+       BM_ITER(v, &viter, bm, BM_VERTS_OF_MESH, NULL) {
+               if (BMO_elem_flag_test(bm, v, VERT_MARK)) {
+                       mul_m4_v3(mat, v->co);
+               }
+       }
+
        BMO_slot_from_flag(bm, op, "vertout", VERT_MARK, BM_VERT);
 }
 
@@ -487,8 +495,9 @@ void bmesh_create_circle_exec(BMesh *bm, BMOperator *op)
        BMVert *v1, *lastv1 = NULL, *cent1, *firstv1 = NULL;
        float vec[3], mat[4][4], phi, phid;
        float dia = BMO_slot_float_get(op, "diameter");
-       int cap_ends = BMO_slot_int_get(op, "cap_ends"), segs = BMO_slot_int_get(op, "segments");
-       int cap_tris = BMO_slot_int_get(op, "cap_tris");
+       int segs = BMO_slot_int_get(op, "segments");
+       int cap_ends = BMO_slot_bool_get(op, "cap_ends");
+       int cap_tris = BMO_slot_bool_get(op, "cap_tris");
        int a;
        
        if (!segs)
@@ -559,8 +568,9 @@ void bmesh_create_cone_exec(BMesh *bm, BMOperator *op)
        float dia1 = BMO_slot_float_get(op, "diameter1");
        float dia2 = BMO_slot_float_get(op, "diameter2");
        float depth = BMO_slot_float_get(op, "depth");
-       int cap_ends = BMO_slot_int_get(op, "cap_ends"), segs = BMO_slot_int_get(op, "segments");
-       int cap_tris = BMO_slot_int_get(op, "cap_tris");
+       int segs = BMO_slot_int_get(op, "segments");
+       int cap_ends = BMO_slot_bool_get(op, "cap_ends");
+       int cap_tris = BMO_slot_bool_get(op, "cap_tris");
        int a;
        
        if (!segs)