[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24266] branches/bmesh/blender/source/ blender: a bug fix and a compile fix
Joseph Eagar
joeedh at gmail.com
Tue Nov 3 06:06:07 CET 2009
Revision: 24266
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24266
Author: joeedh
Date: 2009-11-03 06:06:04 +0100 (Tue, 03 Nov 2009)
Log Message:
-----------
a bug fix and a compile fix
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c
branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
branches/bmesh/blender/source/blender/editors/include/ED_util.h
branches/bmesh/blender/source/blender/editors/sculpt_paint/paint_vertex.c
Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h 2009-11-03 02:49:36 UTC (rev 24265)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h 2009-11-03 05:06:04 UTC (rev 24266)
@@ -60,10 +60,13 @@
/*
this function recreates a tesselation.
returns number of tesselation faces.
+
+ use_poly_origindex sets whether or not the tesselation faces' origindex
+ layer should point to original poly indices or real poly indices.
*/
int mesh_recalcTesselation(struct CustomData *fdata, struct CustomData *ldata,
struct CustomData *pdata, struct MVert *mvert, int totface,
- int totloop, int totpoly);
+ int totloop, int totpoly, int use_poly_origindex);
/*calculates a face normal.*/
void mesh_calc_poly_normal(struct MPoly *mpoly, struct MLoop *loopstart,
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2009-11-03 02:49:36 UTC (rev 24265)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2009-11-03 05:06:04 UTC (rev 24266)
@@ -1310,11 +1310,24 @@
CDDerivedMesh *cddm = (CDDerivedMesh*)dm;
dm->numFaceData = mesh_recalcTesselation(&dm->faceData, &dm->loopData,
- &dm->polyData, cddm->mvert, dm->numFaceData, dm->numLoopData, dm->numPolyData);
+ &dm->polyData, cddm->mvert, dm->numFaceData, dm->numLoopData,
+ dm->numPolyData, 1);
cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
}
+/*ignores original poly origindex layer*/
+static void cdDM_recalcTesselation2(DerivedMesh *dm)
+{
+ CDDerivedMesh *cddm = (CDDerivedMesh*)dm;
+
+ dm->numFaceData = mesh_recalcTesselation(&dm->faceData, &dm->loopData,
+ &dm->polyData, cddm->mvert, dm->numFaceData, dm->numLoopData,
+ dm->numPolyData, 0);
+
+ cddm->mface = CustomData_get_layer(&dm->faceData, CD_MFACE);
+}
+
static void cdDM_release(DerivedMesh *dm)
{
CDDerivedMesh *cddm = (CDDerivedMesh*)dm;
@@ -2010,7 +2023,7 @@
/*recalc tesselation to ensure we have valid origindex values
for mface->mpoly lookups.*/
- cdDM_recalcTesselation(dm);
+ cdDM_recalcTesselation2(dm);
numFaces = dm->numFaceData;
@@ -2029,7 +2042,6 @@
}
face_nors = MEM_callocN(sizeof(float)*3*dm->numFaceData, "face_nors cdderivedmesh.c");
- CustomData_add_layer(&dm->faceData, CD_NORMAL, CD_ASSIGN, face_nors, dm->numFaceData);
origIndex = CustomData_get_layer(&dm->faceData, CD_ORIGINDEX);
mf = cddm->mface;
@@ -2057,6 +2069,13 @@
MEM_freeN(temp_nors);
MEM_freeN(vert_nors);
+
+ /*this restores original poly origindex -> tessface origindex mapping,
+ instead of the poly index -> tessface origindex one we generated
+ with cdDM_recalcTesselation2*/
+ cdDM_recalcTesselation(dm);
+ CustomData_add_layer(&dm->faceData, CD_NORMAL, CD_ASSIGN,
+ face_nors, dm->numFaceData);
}
void CDDM_calc_edges(DerivedMesh *dm)
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c 2009-11-03 02:49:36 UTC (rev 24265)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c 2009-11-03 05:06:04 UTC (rev 24266)
@@ -1604,7 +1604,7 @@
int mesh_recalcTesselation(CustomData *fdata,
CustomData *ldata, CustomData *pdata,
MVert *mvert, int totface, int totloop,
- int totpoly)
+ int totpoly, int use_poly_origindex)
{
MPoly *mp, *mpoly;
MLoop *ml, *mloop;
@@ -1624,7 +1624,7 @@
k = 0;
mp = mpoly;
- polyorigIndex = CustomData_get_layer(pdata, CD_ORIGINDEX);
+ polyorigIndex = use_poly_origindex? CustomData_get_layer(pdata, CD_ORIGINDEX) : NULL;
for (i=0; i<totpoly; i++, mp++) {
ml = mloop + mp->loopstart;
firstv = NULL;
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c 2009-11-03 02:49:36 UTC (rev 24265)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c 2009-11-03 05:06:04 UTC (rev 24266)
@@ -2507,7 +2507,7 @@
cddm->numFaceData = mesh_recalcTesselation(&cddm->faceData,
&cddm->loopData, &cddm->polyData,
mvert, cddm->numFaceData,
- cddm->numLoopData, cddm->numPolyData);
+ cddm->numLoopData, cddm->numPolyData, 1);
CDDM_set_mface(cddm, DM_get_tessface_data_layer(cddm, CD_MFACE));
CDDM_calc_normals(cddm);
Modified: branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c 2009-11-03 02:49:36 UTC (rev 24265)
+++ branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c 2009-11-03 05:06:04 UTC (rev 24266)
@@ -32,15 +32,6 @@
#include "bmesh.h"
/*
- HACK: we're using the old keyindex shape key hack for now, where each
- vertex is assigned an index on entering editmode, which is used to retrieve
- the original shapekey coordinates on exiting editmode.
-
- this should be replaced by proper use of customdata layers, but I'm not
- sure if that's such a good idea before merging with trunk or not.
-*/
-
-/*
* MESH CONV.C
*
* This file contains functions
Modified: branches/bmesh/blender/source/blender/editors/include/ED_util.h
===================================================================
--- branches/bmesh/blender/source/blender/editors/include/ED_util.h 2009-11-03 02:49:36 UTC (rev 24265)
+++ branches/bmesh/blender/source/blender/editors/include/ED_util.h 2009-11-03 05:06:04 UTC (rev 24266)
@@ -54,8 +54,8 @@
void undo_editmode_push(struct bContext *C, char *name,
void * (*getdata)(struct bContext *C),
void (*freedata)(void *),
- void (*to_editmode)(void *, void *),
- void *(*from_editmode)(void *),
+ void (*to_editmode)(void *, void *, void *),
+ void *(*from_editmode)(void *, void *),
int (*validate_undo)(void *, void *));
Modified: branches/bmesh/blender/source/blender/editors/sculpt_paint/paint_vertex.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/sculpt_paint/paint_vertex.c 2009-11-03 02:49:36 UTC (rev 24265)
+++ branches/bmesh/blender/source/blender/editors/sculpt_paint/paint_vertex.c 2009-11-03 05:06:04 UTC (rev 24266)
@@ -1287,7 +1287,7 @@
/*we can't assume mfaces have a correct origindex layer that indices to mpolys.
so instead we have to regenerate the tesselation faces altogether.*/
me->totface = mesh_recalcTesselation(&me->fdata, &me->ldata, &me->pdata,
- me->mvert, me->totface, me->totloop, me->totpoly);
+ me->mvert, me->totface, me->totloop, me->totpoly, 1);
mesh_update_customdata_pointers(me);
makeDerivedMesh(scene, ob, NULL, CD_MASK_BAREMESH);
@@ -1717,7 +1717,7 @@
/*we can't assume mfaces have a correct origindex layer that indices to mpolys.
so instead we have to regenerate the tesselation faces altogether.*/
me->totface = mesh_recalcTesselation(&me->fdata, &me->ldata, &me->pdata,
- me->mvert, me->totface, me->totloop, me->totpoly);
+ me->mvert, me->totface, me->totloop, me->totpoly, 1);
mesh_update_customdata_pointers(me);
makeDerivedMesh(scene, ob, NULL, CD_MASK_BAREMESH);
More information about the Bf-blender-cvs
mailing list