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:
authorJoseph Eagar <joeedh@gmail.com>2011-04-14 02:30:25 +0400
committerJoseph Eagar <joeedh@gmail.com>2011-04-14 02:30:25 +0400
commit0bba684d08952d0be822f3906ffb2a03b2674cc2 (patch)
tree1da2982662e62e7b30858205cc9b2c612d91ba8a /source/blender
parent1c56255ca7351c6a04f9b31192c6b87b4d28a5cf (diff)
=bmesh= fixed a few bugs in the uv editor
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/bmesh/bmesh_operator_api.h7
-rw-r--r--source/blender/bmesh/bmesh_operators.h4
-rw-r--r--source/blender/bmesh/intern/bmesh_operators.c15
-rw-r--r--source/blender/bmesh/operators/subdivideop.c5
-rw-r--r--source/blender/editors/mesh/bmesh_tools.c12
-rw-r--r--source/blender/editors/mesh/loopcut.c1
-rw-r--r--source/blender/editors/space_image/image_buttons.c2
-rw-r--r--source/blender/editors/space_view3d/drawobject.c10
-rw-r--r--source/blender/editors/transform/transform.c6
-rw-r--r--source/blender/editors/transform/transform_conversions.c2
-rw-r--r--source/blender/editors/uvedit/uvedit_ops.c14
-rw-r--r--source/blender/editors/uvedit/uvedit_unwrap_ops.c12
12 files changed, 56 insertions, 34 deletions
diff --git a/source/blender/bmesh/bmesh_operator_api.h b/source/blender/bmesh/bmesh_operator_api.h
index b29c65d108e..770bca7e886 100644
--- a/source/blender/bmesh/bmesh_operator_api.h
+++ b/source/blender/bmesh/bmesh_operator_api.h
@@ -97,6 +97,7 @@ typedef struct BMOperator {
int type;
int slottype;
int needflag;
+ int flag;
struct BMOpSlot slots[BMOP_MAX_SLOTS];
void (*exec)(struct BMesh *bm, struct BMOperator *op);
MemArena *arena;
@@ -117,7 +118,8 @@ typedef struct BMOpDefine {
} BMOpDefine;
/*BMOpDefine->flag*/
-#define BMOP_UNTAN_MULTIRES 1 /*switch from multires tangent space to absolute coordinates*/
+#define BMOP_UNTAN_MULTIRES 1 /*switch from multires tangent space to absolute coordinates*/
+
/*ensures consistent normals before operator execution,
restoring the original ones windings/normals afterwards.
@@ -228,6 +230,9 @@ void BM_remove_tagged_faces(struct BMesh *bm, int flag);
void BM_remove_tagged_edges(struct BMesh *bm, int flag);
void BM_remove_tagged_verts(struct BMesh *bm, int flag);
+void BMO_Set_OpFlag(struct BMesh *bm, struct BMOperator *op, int flag);
+void BMO_Clear_OpFlag(struct BMesh *bm, struct BMOperator *op, int flag);
+
void BMO_Set_Float(struct BMOperator *op, const char *slotname, float f);
float BMO_Get_Float(BMOperator *op, const char *slotname);
void BMO_Set_Int(struct BMOperator *op, const char *slotname, int i);
diff --git a/source/blender/bmesh/bmesh_operators.h b/source/blender/bmesh/bmesh_operators.h
index 490e9c849d3..31fef57dc62 100644
--- a/source/blender/bmesh/bmesh_operators.h
+++ b/source/blender/bmesh/bmesh_operators.h
@@ -80,8 +80,8 @@ struct EditMesh;
void BMOP_DupeFromFlag(struct BMesh *bm, int etypeflag, int flag);
void BM_esubdivideflag(struct Object *obedit, BMesh *bm, int flag, float smooth,
- float fractal, int beauty, int numcuts, int seltype,
- int cornertype, int singleedge, int gridfill, int seed);
+ float fractal, int beauty, int numcuts, int seltype,
+ int cornertype, int singleedge, int gridfill, int seed);
void BM_extrudefaceflag(BMesh *bm, int flag);
/*this next one return 1 if they did anything, or zero otherwise.
diff --git a/source/blender/bmesh/intern/bmesh_operators.c b/source/blender/bmesh/intern/bmesh_operators.c
index 5e79221ab58..27c545b4f79 100644
--- a/source/blender/bmesh/intern/bmesh_operators.c
+++ b/source/blender/bmesh/intern/bmesh_operators.c
@@ -48,6 +48,16 @@ const int BMOP_OPSLOT_TYPEINFO[] = {
sizeof(element_mapping)
};
+void BMO_Set_OpFlag(BMesh *bm, BMOperator *op, int flag)
+{
+ op->flag |= flag;
+}
+
+void BMO_Clear_OpFlag(BMesh *UNUSED(bm), BMOperator *op, int flag)
+{
+ op->flag &= ~flag;
+}
+
/*
* BMESH OPSTACK PUSH
*
@@ -99,6 +109,7 @@ void BMO_Init_Op(BMOperator *op, const char *opname)
memset(op, 0, sizeof(BMOperator));
op->type = opcode;
+ op->flag = opdefines[opcode]->flag;
/*initialize the operator slot types*/
for(i = 0; opdefines[opcode]->slottypes[i].type; i++) {
@@ -131,11 +142,11 @@ void BMO_Exec_Op(BMesh *bm, BMOperator *op)
BMO_push(bm, op);
if(bm->stackdepth == 2)
- bmesh_begin_edit(bm, opdefines[op->type]->flag);
+ bmesh_begin_edit(bm, op->flag);
op->exec(bm, op);
if(bm->stackdepth == 2)
- bmesh_end_edit(bm, opdefines[op->type]->flag);
+ bmesh_end_edit(bm, op->flag);
BMO_pop(bm);
}
diff --git a/source/blender/bmesh/operators/subdivideop.c b/source/blender/bmesh/operators/subdivideop.c
index ca649b86c30..7cd15be177c 100644
--- a/source/blender/bmesh/operators/subdivideop.c
+++ b/source/blender/bmesh/operators/subdivideop.c
@@ -1103,8 +1103,9 @@ void esubdivide_exec(BMesh *bmesh, BMOperator *op)
/*editmesh-emulating function*/
void BM_esubdivideflag(Object *UNUSED(obedit), BMesh *bm, int flag, float smooth,
- float fractal, int beauty, int numcuts,
- int seltype, int cornertype, int singleedge, int gridfill, int seed)
+ float fractal, int beauty, int numcuts,
+ int seltype, int cornertype, int singleedge,
+ int gridfill, int seed)
{
BMOperator op;
diff --git a/source/blender/editors/mesh/bmesh_tools.c b/source/blender/editors/mesh/bmesh_tools.c
index d6e5dc5949d..024e33281cb 100644
--- a/source/blender/editors/mesh/bmesh_tools.c
+++ b/source/blender/editors/mesh/bmesh_tools.c
@@ -1334,7 +1334,7 @@ static int mesh_duplicate_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-static int mesh_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *event)
+static int mesh_duplicate_invoke(bContext *C, wmOperator *op, wmEvent *UNUSED(event))
{
WM_cursor_wait(1);
mesh_duplicate_exec(C, op);
@@ -1900,7 +1900,7 @@ void mesh_set_smooth_faces(BMEditMesh *em, short smooth)
}
}
-static int mesh_faces_shade_smooth_exec(bContext *C, wmOperator *op)
+static int mesh_faces_shade_smooth_exec(bContext *C, wmOperator *UNUSED(op))
{
Object *obedit= CTX_data_edit_object(C);
BMEditMesh *em= ((Mesh *)obedit->data)->edit_btmesh;
@@ -1928,7 +1928,7 @@ void MESH_OT_faces_shade_smooth(wmOperatorType *ot)
ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
}
-static int mesh_faces_shade_flat_exec(bContext *C, wmOperator *op)
+static int mesh_faces_shade_flat_exec(bContext *C, wmOperator *UNUSED(op))
{
Object *obedit= CTX_data_edit_object(C);
BMEditMesh *em= ((Mesh *)obedit->data)->edit_btmesh;
@@ -2317,7 +2317,7 @@ static EnumPropertyItem merge_type_items[]= {
{5, "COLLAPSE", 0, "Collapse", ""},
{0, NULL, 0, NULL, NULL}};
-static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *ptr, int *free)
+static EnumPropertyItem *merge_type_itemf(bContext *C, PointerRNA *UNUSED(ptr), int *free)
{
Object *obedit;
EnumPropertyItem *item= NULL;
@@ -3234,7 +3234,7 @@ static int blend_from_shape_exec(bContext *C, wmOperator *op)
return OPERATOR_FINISHED;
}
-static EnumPropertyItem *shape_itemf(bContext *C, PointerRNA *ptr, int *free)
+static EnumPropertyItem *shape_itemf(bContext *C, PointerRNA *UNUSED(ptr), int *free)
{
Object *obedit= CTX_data_edit_object(C);
Mesh *me= (obedit) ? obedit->data : NULL;
@@ -3361,7 +3361,7 @@ void MESH_OT_select_axis(wmOperatorType *ot)
RNA_def_int(ot->srna, "axis", 0, 0, 2, "Axis", "Select the axis to compare each vertex on", 0, 2);
}
-static int solidify_exec(bContext *C, wmOperator *op)
+static int solidify_exec(bContext *UNUSED(C), wmOperator *UNUSED(op))
{
#if 0
Object *obedit= CTX_data_edit_object(C);
diff --git a/source/blender/editors/mesh/loopcut.c b/source/blender/editors/mesh/loopcut.c
index 6cb79039a88..3304fdd87a0 100644
--- a/source/blender/editors/mesh/loopcut.c
+++ b/source/blender/editors/mesh/loopcut.c
@@ -296,6 +296,7 @@ static void ringsel_finish(bContext *C, wmOperator *op)
BM_esubdivideflag(lcd->ob, em->bm, BM_SELECT, 0.0f,
0.0f, 0, cuts, SUBDIV_SELECT_LOOPCUT,
SUBD_PATH, 0, 0, 0);
+
/* force edge slide to edge select mode in in face select mode */
if (em->selectmode & SCE_SELECT_FACE) {
if (em->selectmode == SCE_SELECT_FACE)
diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c
index dfaeccd7993..6334fbc0008 100644
--- a/source/blender/editors/space_image/image_buttons.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -208,7 +208,7 @@ static void image_editvertex_buts(const bContext *C, uiBlock *block)
MTexPoly *tf;
BMLoop *l;
MLoopUV *luv;
- BMIter iter, liter;
+ BMIter iter;
static float ocent[2];
float cent[2]= {0.0, 0.0};
int imx= 256, imy= 256;
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index a87cbd0530d..11a1658b30d 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -1737,7 +1737,6 @@ static void draw_dm_face_normals(BMEditMesh *em, Scene *scene, DerivedMesh *dm)
static void draw_dm_face_centers__mapFunc(void *userData, int index, float *cent, float *UNUSED(no))
{
BMFace *efa = EDBM_get_face_for_index(((void **)userData)[0], index);
- BMEditMesh *em = ((void **)userData)[0];
int sel = *(((int **)userData)[1]);
if (!BM_TestHFlag(efa, BM_HIDDEN) && BM_TestHFlag(efa, BM_SELECT)==sel) {
@@ -1798,7 +1797,8 @@ static int check_pinned_face(BMesh *bm, BMFace *efa)
return 0;
}
-static void draw_dm_vert_pins__mapFunc(void *userData, int index, float *co)
+static void draw_dm_vert_pins__mapFunc(void *userData, int index,
+ float *co, float *no_f, short *no_s)
{
struct {BMEditMesh *em; Mesh *me;} *data = userData;
BMVert *eve = EDBM_get_vert_for_index(data->em, index);
@@ -1955,7 +1955,7 @@ static void draw_dm_edges_sel_interp__setDrawInterpOptions(void *userData, int i
static void draw_dm_edges_sel_interp(BMEditMesh *em, DerivedMesh *dm, unsigned char *baseCol, unsigned char *selCol)
{
- unsigned char *cols[3] = {em, baseCol, selCol};
+ void *cols[3] = {em, baseCol, selCol};
dm->drawMappedEdgesInterp(dm, draw_dm_edges_sel_interp__setDrawOptions, draw_dm_edges_sel_interp__setDrawInterpOptions, cols);
}
@@ -2044,9 +2044,7 @@ static int draw_dm_faces_sel__setDrawOptions(void *userData, int index, int *UNU
struct { unsigned char *cols[3]; BMEditMesh *em; BMFace *efa_act; Mesh *me;} *data = userData;
BMFace *efa = EDBM_get_face_for_index(data->em, index);
unsigned char *col;
- BMIter vfiter;
- BMVert *v;
- int vcount, pin=0;
+ int pin=0;
int opac = UI_GetThemeValue(TH_PIN_OPAC);
if (!efa)
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 32ab2ffeb4b..4a920e15e34 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -4662,10 +4662,10 @@ void projectSVData(TransInfo *t, int final)
BMFace *f;
BM_ITER(f, &fiter, em->bm, BM_FACES_OF_VERT, tempsv->v) {
- BMIter liter2, fiter2;
- BMFace *f2, *copyf, *copyf2;
+ BMIter liter2;
+ BMFace *copyf, *copyf2;
BMLoop *l2;
- int sel, ok, do_vdata;
+ int sel, do_vdata;
if (BLI_smallhash_haskey(&visit, (uintptr_t)f))
continue;
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index ca486d60be3..3b3a5a6877e 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -2339,7 +2339,7 @@ static void createTransEditVerts(bContext *C, TransInfo *t)
/* CrazySpace */
if(defmats) { // || (quats && eve->tmp.p)) {
- float mat[3][3], imat[3][3], qmat[3][3];
+ float mat[3][3], imat[3][3];
/* use both or either quat and defmat correction */
//BMESH_TODO, need to restore this quats thing
diff --git a/source/blender/editors/uvedit/uvedit_ops.c b/source/blender/editors/uvedit/uvedit_ops.c
index a882e8f7d92..30b3fde7b80 100644
--- a/source/blender/editors/uvedit/uvedit_ops.c
+++ b/source/blender/editors/uvedit/uvedit_ops.c
@@ -361,7 +361,7 @@ int uvedit_uv_selected(BMEditMesh *em, Scene *scene, BMLoop *l)
if(ts->selectmode & SCE_SELECT_FACE)
return BM_TestHFlag(l->f, BM_SELECT);
else
- return BM_TestHFlag(l, BM_SELECT);
+ return BM_TestHFlag(l->v, BM_SELECT);
}
else {
MLoopUV *luv = CustomData_bmesh_get(&em->bm->ldata, l->head.data, CD_MLOOPUV);
@@ -715,7 +715,7 @@ static void find_nearest_uv_vert(Scene *scene, Image *ima, BMEditMesh *em,
MTexPoly *tf;
MLoopUV *luv;
float mindist, dist;
- int i, nverts;
+ int i;
/*this will fill in hit.vert1 and hit.vert2*/
find_nearest_uv_edge(scene, ima, em, co, hit);
@@ -1549,7 +1549,6 @@ static int select_all_exec(bContext *C, wmOperator *op)
MTexPoly *tf;
MLoopUV *luv;
int action = RNA_enum_get(op->ptr, "action");
- int sel = 1;
scene= CTX_data_scene(C);
ts= CTX_data_tool_settings(C);
@@ -1925,16 +1924,15 @@ static int mouse_select(bContext *C, float co[2], int extend, int loop)
}
}
}
-#if 0 //bmesh does flushing through the BM_Select functions, so not sure
- //what to do about this bit.
+
if(sync) {
/* flush for mesh selection */
if(ts->selectmode != SCE_SELECT_FACE) {
- if(flush==1) EM_select_flush(em);
- else if(flush==-1) EM_deselect_flush(em);
+ if(flush==1) EDBM_select_flush(em, ts->selectmode);
+ //else if(flush==-1) EDBM_deselect_flush(em); <-- I think this takes care of itself. . .
}
}
-#endif
+
DAG_id_tag_update(obedit->data, 0);
WM_event_add_notifier(C, NC_GEOM|ND_SELECT, obedit->data);
diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
index 57264e2cd5c..b9959afa0f9 100644
--- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c
+++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c
@@ -43,6 +43,7 @@
#include "BLI_editVert.h"
#include "BLI_uvproject.h"
#include "BLI_utildefines.h"
+#include "BLI_rand.h"
#include "BKE_context.h"
#include "BKE_customdata.h"
@@ -203,8 +204,15 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em,
/*scanfill time!*/
firstv = lastv = NULL;
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_FACE, efa) {
+ int i;
+
v = BLI_addfillvert(l->v->co);
+ /*add small random offset*/
+ for (i=0; i<3; i++) {
+ v->co[i] += (BLI_drand()-0.5f)*FLT_EPSILON*50;
+ }
+
v->tmp.p = l;
if (lastv) {
@@ -218,8 +226,8 @@ static ParamHandle *construct_param_handle(Scene *scene, BMEditMesh *em,
BLI_addfilledge(firstv, v);
- /*mode 2 enables shortest-diagonal for quads*/
- BLI_edgefill(0);
+ /*mode 2 enables faster handling of tri/quads*/
+ BLI_edgefill(2);
for (sefa = fillfacebase.first; sefa; sefa=sefa->next) {
ls[0] = sefa->v1->tmp.p;
ls[1] = sefa->v2->tmp.p;