[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36178] branches/bmesh/blender/source/ blender/editors: =bmesh= fixed crasher
Joseph Eagar
joeedh at gmail.com
Fri Apr 15 04:45:03 CEST 2011
Revision: 36178
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36178
Author: joeedh
Date: 2011-04-15 02:45:02 +0000 (Fri, 15 Apr 2011)
Log Message:
-----------
=bmesh= fixed crasher
Modified Paths:
--------------
branches/bmesh/blender/source/blender/editors/space_view3d/view3d_snap.c
branches/bmesh/blender/source/blender/editors/util/crazyspace.c
Modified: branches/bmesh/blender/source/blender/editors/space_view3d/view3d_snap.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/space_view3d/view3d_snap.c 2011-04-15 02:18:24 UTC (rev 36177)
+++ branches/bmesh/blender/source/blender/editors/space_view3d/view3d_snap.c 2011-04-15 02:45:02 UTC (rev 36178)
@@ -27,11 +27,11 @@
* ***** END GPL LICENSE BLOCK *****
*/
-/** \file blender/editors/space_view3d/view3d_snap.c
- * \ingroup spview3d
- */
-
-
+/** \file blender/editors/space_view3d/view3d_snap.c
+ * \ingroup spview3d
+ */
+
+
#include <math.h>
#include <string.h>
@@ -58,6 +58,7 @@
#include "BKE_main.h"
#include "BKE_object.h"
#include "BKE_tessmesh.h"
+#include "BKE_DerivedMesh.h"
#include "WM_api.h"
#include "WM_types.h"
@@ -79,7 +80,7 @@
typedef struct TransVert {
float *loc;
- float oldloc[3], fac;
+ float oldloc[3], maploc[3], fac;
float *val, oldval;
int flag;
float *nor;
@@ -189,6 +190,17 @@
}
}
+static void set_mapped_co(void *vuserdata, int index, float *co, float *no, short *no_s)
+{
+ void ** userdata = vuserdata;
+ BMEditMesh *em = userdata[0];
+ TransVert *tv = userdata[1];
+ BMVert *eve = EDBM_get_vert_for_index(em, index);
+
+ if (BMINDEX_GET(eve) != -1)
+ copy_v3_v3(tv[BMINDEX_GET(eve)].maploc, co);
+}
+
/* copied from editobject.c, needs to be replaced with new transform code still */
/* mode flags: */
#define TM_ALL_JOINTS 1 /* all joints (for bones only) */
@@ -215,6 +227,7 @@
BMEditMesh *em= me->edit_btmesh;
BMesh *bm = em->bm;
BMIter iter;
+ void *userdata[2] = {em, NULL};
int proptrans= 0;
// transform now requires awareness for select mode, so we tag the f1 flags in verts
@@ -266,18 +279,34 @@
/* and now make transverts */
if(tottrans) {
tv=transvmain= MEM_callocN(tottrans*sizeof(TransVert), "maketransverts");
-
+
+ a = 0;
BM_ITER(eve, &iter, bm, BM_VERTS_OF_MESH, NULL) {
if(BMINDEX_GET(eve)) {
+ BMINDEX_SET(eve, a);
VECCOPY(tv->oldloc, eve->co);
tv->loc= eve->co;
- if(eve->no[0] != 0.0f || eve->no[1] != 0.0f ||eve->no[2] != 0.0f)
+ if(eve->no[0] != 0.0f || eve->no[1] != 0.0f ||eve->no[2] != 0.0f)
tv->nor= eve->no; // note this is a hackish signal (ton)
tv->flag= BMINDEX_GET(eve) & SELECT;
tv++;
- }
+ a++;
+ } else BMINDEX_SET(eve, -1);
}
+
+ userdata[1] = transvmain;
}
+
+ if (transvmain && em->derivedFinal) {
+ EDBM_init_index_arrays(em, 1, 0, 0);
+ em->derivedFinal->foreachMappedVert(em->derivedFinal, set_mapped_co, userdata);
+ EDBM_free_index_arrays(em);
+ } else if (transvmain) {
+ tv = transvmain;
+ for (a=0; a<tottrans; a++, tv++) {
+ copy_v3_v3(tv->maploc, tv->loc);
+ }
+ }
}
else if (obedit->type==OB_ARMATURE){
bArmature *arm= obedit->data;
@@ -455,11 +484,11 @@
for(a=0; a<tottrans; a++, tv++) {
if(tv->flag & SELECT) {
add_v3_v3(centroid, tv->oldloc);
- total += 1.0f;
+ total += 1.0f;
DO_MINMAX(tv->oldloc, min, max);
}
}
- if(total != 0.0f) {
+ if(total != 0.0f) {
mul_v3_fl(centroid, 1.0f/total);
}
@@ -497,9 +526,9 @@
VECCOPY(vec, tv->loc);
mul_m3_v3(bmat, vec);
add_v3_v3(vec, obedit->obmat[3]);
- vec[0]= gridf*floorf(0.5f+ vec[0]/gridf);
- vec[1]= gridf*floorf(0.5f+ vec[1]/gridf);
- vec[2]= gridf*floorf(0.5f+ vec[2]/gridf);
+ vec[0]= gridf*floorf(0.5f+ vec[0]/gridf);
+ vec[1]= gridf*floorf(0.5f+ vec[1]/gridf);
+ vec[2]= gridf*floorf(0.5f+ vec[2]/gridf);
sub_v3_v3(vec, obedit->obmat[3]);
mul_m3_v3(imat, vec);
@@ -527,9 +556,9 @@
/* get nearest grid point to snap to */
VECCOPY(nLoc, pchan->pose_mat[3]);
- vec[0]= gridf * (float)(floor(0.5f+ nLoc[0]/gridf));
- vec[1]= gridf * (float)(floor(0.5f+ nLoc[1]/gridf));
- vec[2]= gridf * (float)(floor(0.5f+ nLoc[2]/gridf));
+ vec[0]= gridf * (float)(floor(0.5f+ nLoc[0]/gridf));
+ vec[1]= gridf * (float)(floor(0.5f+ nLoc[1]/gridf));
+ vec[2]= gridf * (float)(floor(0.5f+ nLoc[2]/gridf));
/* get bone-space location of grid point */
armature_loc_pose_to_bone(pchan, vec, vecN);
@@ -557,9 +586,9 @@
else {
ob->recalc |= OB_RECALC_OB;
- vec[0]= -ob->obmat[3][0]+gridf*floorf(0.5f+ ob->obmat[3][0]/gridf);
- vec[1]= -ob->obmat[3][1]+gridf*floorf(0.5f+ ob->obmat[3][1]/gridf);
- vec[2]= -ob->obmat[3][2]+gridf*floorf(0.5f+ ob->obmat[3][2]/gridf);
+ vec[0]= -ob->obmat[3][0]+gridf*floorf(0.5f+ ob->obmat[3][0]/gridf);
+ vec[1]= -ob->obmat[3][1]+gridf*floorf(0.5f+ ob->obmat[3][1]/gridf);
+ vec[2]= -ob->obmat[3][2]+gridf*floorf(0.5f+ ob->obmat[3][2]/gridf);
if(ob->parent) {
where_is_object(scene, ob);
@@ -742,9 +771,9 @@
gridf= rv3d->gridview;
curs= give_cursor(scene, v3d);
- curs[0]= gridf*floorf(0.5f+curs[0]/gridf);
- curs[1]= gridf*floorf(0.5f+curs[1]/gridf);
- curs[2]= gridf*floorf(0.5f+curs[2]/gridf);
+ curs[0]= gridf*floorf(0.5f+curs[0]/gridf);
+ curs[1]= gridf*floorf(0.5f+curs[1]/gridf);
+ curs[2]= gridf*floorf(0.5f+curs[2]/gridf);
WM_event_add_notifier(C, NC_SPACE|ND_SPACE_VIEW3D, v3d); // hrm
@@ -803,7 +832,7 @@
}
if(v3d->around==V3D_CENTROID) {
- mul_v3_fl(centroid, 1.0f/(float)tottrans);
+ mul_v3_fl(centroid, 1.0f/(float)tottrans);
VECCOPY(curs, centroid);
}
else {
@@ -843,7 +872,7 @@
}
if(count) {
if(v3d->around==V3D_CENTROID) {
- mul_v3_fl(centroid, 1.0f/(float)count);
+ mul_v3_fl(centroid, 1.0f/(float)count);
VECCOPY(curs, centroid);
}
else {
@@ -978,7 +1007,7 @@
tv= transvmain;
for(a=0; a<tottrans; a++, tv++) {
- VECCOPY(vec, tv->loc);
+ VECCOPY(vec, tv->maploc);
mul_m3_v3(bmat, vec);
add_v3_v3(vec, obedit->obmat[3]);
add_v3_v3(centroid, vec);
Modified: branches/bmesh/blender/source/blender/editors/util/crazyspace.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/util/crazyspace.c 2011-04-15 02:18:24 UTC (rev 36177)
+++ branches/bmesh/blender/source/blender/editors/util/crazyspace.c 2011-04-15 02:45:02 UTC (rev 36178)
@@ -156,6 +156,9 @@
index = 0;
BM_ITER(v, &iter, em->bm, BM_VERTS_OF_MESH, NULL) {
+ if (!BM_TestHFlag(v, BM_SELECT) || BM_TestHFlag(v, BM_HIDDEN))
+ continue;
+
BM_ITER(l, &liter, em->bm, BM_LOOPS_OF_VERT, v) {
BMLoop *l2 = BM_OtherFaceLoop(l->e, l->f, v);
More information about the Bf-blender-cvs
mailing list