solidify would only work as expecyed if all faces were selected, added an override...
authorCampbell Barton <ideasman42@gmail.com>
Tue, 15 Dec 2009 00:53:34 +0000 (00:53 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 15 Dec 2009 00:53:34 +0000 (00:53 +0000)
source/blender/editors/mesh/editmesh_add.c
source/blender/editors/mesh/editmesh_lib.c
source/blender/editors/mesh/editmesh_mods.c
source/blender/editors/mesh/editmesh_tools.c
source/blender/editors/mesh/mesh_intern.h

index fbe72a54e7090a318cbe22739fee203aea4f1778..26fde849f9f338c3203e44842c4f2b235532a752 100644 (file)
@@ -192,7 +192,7 @@ static int dupli_extrude_cursor(bContext *C, wmOperator *op, wmEvent *event)
                        }
                }
                
-               extrudeflag(vc.obedit, vc.em, SELECT, nor);
+               extrudeflag(vc.obedit, vc.em, SELECT, nor, 0);
                rotateflag(vc.em, SELECT, cent, mat);
                translateflag(vc.em, SELECT, min);
                
@@ -1025,7 +1025,7 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se
                mul_mat3_m4_v3(mat, vec);
                
                for(a=0;a<seg-1;a++) {
-                       extrudeflag_vert(obedit, em, 2, nor);   // nor unused
+                       extrudeflag_vert(obedit, em, 2, nor, 0);        // nor unused
                        translateflag(em, 2, vec);
                }
                break;
@@ -1060,7 +1060,7 @@ static void make_prim(Object *obedit, int type, float mat[4][4], int tot, int se
                quat_to_mat3( cmat,q);
                
                for(a=0; a<seg; a++) {
-                       extrudeflag_vert(obedit, em, 2, nor); // nor unused
+                       extrudeflag_vert(obedit, em, 2, nor, 0); // nor unused
                        rotateflag(em, 2, v1->co, cmat);
                }
 
index 544e0b4ace716b5f1661d6b7f54c5e54196d4ba8..c543c3287a0d32976caf12fd488c6e6a2d69fe11 100644 (file)
@@ -1143,7 +1143,7 @@ short extrudeflag_verts_indiv(EditMesh *em, short flag, float *nor)
 
 /* this is actually a recode of extrudeflag(), using proper edge/face select */
 /* hurms, doesnt use 'flag' yet, but its not called by primitive making stuff anyway */
-static short extrudeflag_edge(Object *obedit, EditMesh *em, short flag, float *nor)
+static short extrudeflag_edge(Object *obedit, EditMesh *em, short flag, float *nor, int all)
 {
        /* all select edges/faces: extrude */
        /* old select is cleared, in new ones it is set */
@@ -1256,11 +1256,13 @@ static short extrudeflag_edge(Object *obedit, EditMesh *em, short flag, float *n
        set_edge_directions_f2(em, 2);
        
        /* step 1.5: if *one* selected face has edge with unselected face; remove old selected faces */
-       for(efa= em->faces.last; efa; efa= efa->prev) {
-               if(efa->f & SELECT) {
-                       if(efa->e1->f1 || efa->e2->f1 || efa->e3->f1 || (efa->e4 && efa->e4->f1)) {
-                               del_old= 1;
-                               break;
+       if(all == 0) {
+               for(efa= em->faces.last; efa; efa= efa->prev) {
+                       if(efa->f & SELECT) {
+                               if(efa->e1->f1 || efa->e2->f1 || efa->e3->f1 || (efa->e4 && efa->e4->f1)) {
+                                       del_old= 1;
+                                       break;
+                               }
                        }
                }
        }
@@ -1398,7 +1400,7 @@ static short extrudeflag_edge(Object *obedit, EditMesh *em, short flag, float *n
        return 'n'; // normal constraint 
 }
 
-short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor)
+short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor, int all)
 {
        /* all verts/edges/faces with (f & 'flag'): extrude */
        /* from old verts, 'flag' is cleared, in new ones it is set */
@@ -1569,7 +1571,7 @@ short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor)
        */
        
         /* find if we delete old faces */
-       if(is_face_sel) {
+       if(is_face_sel && all==0) {
                for(eed= em->edges.first; eed; eed= eed->next) {
                        if( (eed->f2==1 || eed->f2==2) ) {
                                if(eed->f1==2) {
@@ -1685,12 +1687,12 @@ short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor)
 }
 
 /* generic extrude */
-short extrudeflag(Object *obedit, EditMesh *em, short flag, float *nor)
+short extrudeflag(Object *obedit, EditMesh *em, short flag, float *nor, int all)
 {
        if(em->selectmode & SCE_SELECT_VERTEX)
-               return extrudeflag_vert(obedit, em, flag, nor);
+               return extrudeflag_vert(obedit, em, flag, nor, all);
        else 
-               return extrudeflag_edge(obedit, em, flag, nor);
+               return extrudeflag_edge(obedit, em, flag, nor, all);
                
 }
 
index 1d8b2b05592e3127ea74f0a6dcc8d59ec1ab25be..1ff2d097100db97b8c46067325403cd4754d106c 100644 (file)
@@ -4545,14 +4545,13 @@ void MESH_OT_flip_normals(wmOperatorType *ot)
 
 static int solidify_exec(bContext *C, wmOperator *op)
 {
-       Scene *scene= CTX_data_scene(C);
        Object *obedit= CTX_data_edit_object(C);
        EditMesh *em= BKE_mesh_get_editmesh(((Mesh *)obedit->data));
        float nor[3] = {0,0,1};
 
        float thickness= RNA_float_get(op->ptr, "thickness");
 
-       extrudeflag(obedit, em, SELECT, nor);
+       extrudeflag(obedit, em, SELECT, nor, 1);
        EM_make_hq_normals(em);
        EM_solidify(em, thickness);
 
index b283070d4546955a702d6b4e46fb76a279f210c8..e41d60783fe160ef171c72bd2ef72c364909c905 100644 (file)
@@ -660,7 +660,7 @@ void extrude_mesh(Scene *scene, Object *obedit, EditMesh *em, wmOperator *op)
 
        if(nr<1) return;
 
-       if(nr==1)  transmode= extrudeflag(obedit, em, SELECT, nor);
+       if(nr==1)  transmode= extrudeflag(obedit, em, SELECT, nor, 0);
        else if(nr==4) transmode= extrudeflag_verts_indiv(em, SELECT, nor);
        else if(nr==3) transmode= extrudeflag_edges_indiv(em, SELECT, nor);
        else transmode= extrudeflag_face_indiv(em, SELECT, nor);
@@ -816,7 +816,7 @@ static int extrude_repeat_mesh(bContext *C, wmOperator *op)
        mul_m3_v3(tmat, dvec);
 
        for(a=0; a<steps; a++) {
-               extrudeflag(obedit, em, SELECT, nor);
+               extrudeflag(obedit, em, SELECT, nor, 0);
                translateflag(em, SELECT, dvec);
        }
 
@@ -898,7 +898,7 @@ static int spin_mesh(bContext *C, wmOperator *op, float *dvec, int steps, float
                        adduplicateflag(em, 1);
 
        for(a=0; a<steps; a++) {
-               if(dupli==0) ok= extrudeflag(obedit, em, SELECT, nor);
+               if(dupli==0) ok= extrudeflag(obedit, em, SELECT, nor, 0);
                else adduplicateflag(em, SELECT);
 
                if(ok==0)
index 226cfe875d70ad661cd43c1b83f5763ae963568a..5d9da374f2f6bf59351a73809284348b3f425014 100644 (file)
@@ -116,8 +116,8 @@ extern int compareface(EditFace *vl1, EditFace *vl2);
 extern short extrudeflag_face_indiv(EditMesh *em, short flag, float *nor);
 extern short extrudeflag_verts_indiv(EditMesh *em, short flag, float *nor);
 extern short extrudeflag_edges_indiv(EditMesh *em, short flag, float *nor);
-extern short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor);
-extern short extrudeflag(Object *obedit, EditMesh *em, short flag, float *nor);
+extern short extrudeflag_vert(Object *obedit, EditMesh *em, short flag, float *nor, int all);
+extern short extrudeflag(Object *obedit, EditMesh *em, short flag, float *nor, int all);
 
 extern void adduplicateflag(EditMesh *em, int flag);
 extern void delfaceflag(EditMesh *em, int flag);