Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-12-15 03:53:34 +0300
committerCampbell Barton <ideasman42@gmail.com>2009-12-15 03:53:34 +0300
commitded4cbb553f0a5bdc3e8b62b82932429848f37ee (patch)
tree7a725c5176ee3c1ae045c6b5e87acc41f62cfe96
parent9fe37d9970f649cff108c9d3f7bfb492515d4f0c (diff)
solidify would only work as expecyed if all faces were selected, added an override to extrude that means it runs without removing selected faces first, even on a partial selection
-rw-r--r--source/blender/editors/mesh/editmesh_add.c6
-rw-r--r--source/blender/editors/mesh/editmesh_lib.c24
-rw-r--r--source/blender/editors/mesh/editmesh_mods.c3
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c6
-rw-r--r--source/blender/editors/mesh/mesh_intern.h4
5 files changed, 22 insertions, 21 deletions
diff --git a/source/blender/editors/mesh/editmesh_add.c b/source/blender/editors/mesh/editmesh_add.c
index fbe72a54e70..26fde849f9f 100644
--- a/source/blender/editors/mesh/editmesh_add.c
+++ b/source/blender/editors/mesh/editmesh_add.c
@@ -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);
}
diff --git a/source/blender/editors/mesh/editmesh_lib.c b/source/blender/editors/mesh/editmesh_lib.c
index 544e0b4ace7..c543c3287a0 100644
--- a/source/blender/editors/mesh/editmesh_lib.c
+++ b/source/blender/editors/mesh/editmesh_lib.c
@@ -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);
}
diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c
index 1d8b2b05592..1ff2d097100 100644
--- a/source/blender/editors/mesh/editmesh_mods.c
+++ b/source/blender/editors/mesh/editmesh_mods.c
@@ -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);
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index b283070d454..e41d60783fe 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -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)
diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h
index 226cfe875d7..5d9da374f2f 100644
--- a/source/blender/editors/mesh/mesh_intern.h
+++ b/source/blender/editors/mesh/mesh_intern.h
@@ -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);