[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [23201] trunk/blender/source/blender: 2. 5 mesh cleanup: merge tools all work again
Joseph Eagar
joeedh at gmail.com
Mon Sep 14 07:00:04 CEST 2009
Revision: 23201
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=23201
Author: joeedh
Date: 2009-09-14 07:00:03 +0200 (Mon, 14 Sep 2009)
Log Message:
-----------
2.5 mesh cleanup: merge tools all work again
Modified Paths:
--------------
trunk/blender/source/blender/editors/mesh/editmesh_tools.c
trunk/blender/source/blender/makesdna/DNA_modifier_types.h
trunk/blender/source/blender/windowmanager/intern/wm.c
Modified: trunk/blender/source/blender/editors/mesh/editmesh_tools.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/editmesh_tools.c 2009-09-14 00:01:08 UTC (rev 23200)
+++ trunk/blender/source/blender/editors/mesh/editmesh_tools.c 2009-09-14 05:00:03 UTC (rev 23201)
@@ -98,8 +98,6 @@
static int pupmenu() {return 0;}
static int qtest() {return 0;}
#define add_numbut(a, b, c, d, e, f, g) {}
-static int snap_sel_to_curs() {return 0;}
-static int snap_to_center() {return 0;}
/* XXX */
@@ -5735,13 +5733,59 @@
return removedoublesflag(em, 1, 0, MERGELIMIT);
}
-int merge_target(EditMesh *em, int target, int uvmerge)
+void em_snap_to_center(EditMesh *em)
{
EditVert *eve;
+ float cent[3] = {0.0f, 0.0f, 0.0f};
+ int i=0;
+ for (eve=em->verts.first; eve; eve=eve->next) {
+ if (eve->f & SELECT) {
+ VecAddf(cent, cent, eve->co);
+ i++;
+ }
+ }
+
+ if (!i)
+ return;
+
+ VecMulf(cent, 1.0f / (float)i);
+
+ for (eve=em->verts.first; eve; eve=eve->next) {
+ if (eve->f & SELECT) {
+ VECCOPY(eve->co, cent);
+ }
+ }
+}
+
+void em_snap_to_cursor(EditMesh *em, bContext *C)
+{
+ Scene *scene = CTX_data_scene(C);
+ Object *ob= CTX_data_edit_object(C);
+ View3D *v3d = CTX_wm_view3d(C);
+ EditVert *eve;
+ float co[3], *vco, invmat[4][4];
+
+ Mat4Invert(invmat, ob->obmat);
+
+ vco = give_cursor(scene, v3d);
+ VECCOPY(co, vco);
+ Mat4MulVecfl(invmat, co);
+
+ for (eve=em->verts.first; eve; eve=eve->next) {
+ if (eve->f & SELECT) {
+ VECCOPY(eve->co, co);
+ }
+ }
+}
+
+int merge_target(bContext *C, EditMesh *em, int target, int uvmerge)
+{
+ EditVert *eve;
+
// XXX not working
- if(target) snap_sel_to_curs();
- else snap_to_center();
+ if(target) em_snap_to_cursor(em, C);
+ else em_snap_to_center(em);
if(uvmerge && CustomData_has_layer(&em->fdata, CD_MTFACE)){
for(eve=em->verts.first; eve; eve=eve->next) eve->f1 = 0;
@@ -5763,10 +5807,10 @@
switch(RNA_enum_get(op->ptr, "type")) {
case 3:
- count = merge_target(em, 0, uvs);
+ count = merge_target(C, em, 0, uvs);
break;
case 4:
- count = merge_target(em, 1, uvs);
+ count = merge_target(C, em, 1, uvs);
break;
case 1:
count = merge_firstlast(em, 0, uvs);
@@ -5774,7 +5818,7 @@
case 6:
count = merge_firstlast(em, 1, uvs);
break;
- case 2:
+ case 5:
count = collapseEdges(em);
break;
}
Modified: trunk/blender/source/blender/makesdna/DNA_modifier_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_modifier_types.h 2009-09-14 00:01:08 UTC (rev 23200)
+++ trunk/blender/source/blender/makesdna/DNA_modifier_types.h 2009-09-14 05:00:03 UTC (rev 23201)
@@ -469,8 +469,9 @@
int operation, pad;
} BooleanModifierData;
-#define MOD_MDEF_INVERT_VGROUP (1<<0)
-#define MOD_MDEF_DYNAMIC_BIND (1<<1)
+#define MOD_MDEF_INVERT_VGROUP (1<<0)
+#define MOD_MDEF_DYNAMIC_BIND (1<<1)
+#define MOD_MDEF_USE_FINAL (1<<2)
typedef struct MDefInfluence {
int vertex;
Modified: trunk/blender/source/blender/windowmanager/intern/wm.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm.c 2009-09-14 00:01:08 UTC (rev 23200)
+++ trunk/blender/source/blender/windowmanager/intern/wm.c 2009-09-14 05:00:03 UTC (rev 23201)
@@ -75,9 +75,11 @@
}
if(op->macro.first) {
- wmOperator *opm;
- for(opm= op->macro.first; opm; opm= opm->next)
+ wmOperator *opm, *opmnext;
+ for(opm= op->macro.first; opm; opm= opmnext) {
+ opmnext = opm->next;
WM_operator_free(opm);
+ }
}
MEM_freeN(op);
More information about the Bf-blender-cvs
mailing list