[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [35860] branches/bmesh/blender/source/ blender: =bmesh=
Joseph Eagar
joeedh at gmail.com
Tue Mar 29 07:48:18 CEST 2011
Revision: 35860
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=35860
Author: joeedh
Date: 2011-03-29 05:48:18 +0000 (Tue, 29 Mar 2011)
Log Message:
-----------
=bmesh=
Multires interpolation is considerably better
now, though it still has a problem with occasionally
producing little random tangent spikes. Still, it's
far better then it was.
Also fixed a bug in dissolve faces.
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h
branches/bmesh/blender/source/blender/blenkernel/BKE_multires.h
branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/constraint.c
branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c
branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/multires.c
branches/bmesh/blender/source/blender/blenkernel/intern/subsurf_ccg.c
branches/bmesh/blender/source/blender/blenlib/BLI_utildefines.h
branches/bmesh/blender/source/blender/bmesh/bmesh.h
branches/bmesh/blender/source/blender/bmesh/bmesh_class.h
branches/bmesh/blender/source/blender/bmesh/bmesh_operator_api.h
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_interp.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mesh.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_polygon.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_private.h
branches/bmesh/blender/source/blender/bmesh/operators/bmesh_dupeops.c
branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
branches/bmesh/blender/source/blender/editors/mesh/bmeshutils.c
branches/bmesh/blender/source/blender/modifiers/intern/MOD_armature.c
branches/bmesh/blender/source/blender/modifiers/intern/MOD_array.c
branches/bmesh/blender/source/blender/modifiers/intern/MOD_curve.c
branches/bmesh/blender/source/blender/modifiers/intern/MOD_hook.c
branches/bmesh/blender/source/blender/modifiers/intern/MOD_lattice.c
branches/bmesh/blender/source/blender/modifiers/intern/MOD_util.c
Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h 2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_cdderivedmesh.h 2011-03-29 05:48:18 UTC (rev 35860)
@@ -62,7 +62,7 @@
struct DerivedMesh *CDDM_from_editmesh(struct EditMesh *em, struct Mesh *me);
/* creates a CDDerivedMesh from the given BMEditMesh */
-DerivedMesh *CDDM_from_BMEditMesh(struct BMEditMesh *em, struct Mesh *me);
+DerivedMesh *CDDM_from_BMEditMesh(struct BMEditMesh *em, struct Mesh *me, int use_mdisps);
/* merge verts */
DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, int *vtargetmap);
@@ -74,7 +74,7 @@
/* useful for OrcoDM creation for curves with constructive modifiers */
DerivedMesh *CDDM_from_curve_customDB(struct Object *ob, struct ListBase *dispbase);
-struct BMEditMesh *CDDM_To_BMesh(DerivedMesh *dm, struct BMEditMesh *existing);
+struct BMEditMesh *CDDM_To_BMesh(struct Object *ob, struct DerivedMesh *dm, struct BMEditMesh *existing);
/* Copies the given DerivedMesh with verts, faces & edges stored as
Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_multires.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_multires.h 2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_multires.h 2011-03-29 05:48:18 UTC (rev 35860)
@@ -73,6 +73,14 @@
void multires_stitch_grids(struct Object *);
+/*switch mdisp data in dm between tangent and object space*/
+enum {
+ MULTIRES_SPACE_TANGENT,
+ MULTIRES_SPACE_OBJECT,
+ MULTIRES_SPACE_ABSOLUTE,
+};
+void multires_set_space(struct DerivedMesh *dm, struct Object *ob, int from, int to);
+
/* Related to the old multires */
void multires_free(struct Multires *mr);
void multires_load_old(struct Object *ob, struct Mesh *me);
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c 2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/DerivedMesh.c 2011-03-29 05:48:18 UTC (rev 35860)
@@ -754,7 +754,7 @@
float (*orco)[3];
int free;
- if(em) dm= CDDM_from_BMEditMesh(em, me);
+ if(em) dm= CDDM_from_BMEditMesh(em, me, 0);
else dm= CDDM_from_mesh(me, ob);
orco= get_orco_coords_dm(ob, em, layer, &free);
@@ -1379,7 +1379,7 @@
}
} else {
- dm = CDDM_from_BMEditMesh(em, ob->data);
+ dm = CDDM_from_BMEditMesh(em, ob->data, 0);
if(deformedVerts) {
CDDM_apply_vert_coords(dm, deformedVerts);
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2011-03-29 05:48:18 UTC (rev 35860)
@@ -1832,7 +1832,7 @@
}
}
-DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *me)
+DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *me, int use_mdisps)
{
DerivedMesh *dm = CDDM_new(em->bm->totvert, em->bm->totedge,
em->tottri, em->bm->totloop, em->bm->totface);
@@ -1851,6 +1851,7 @@
int numTex = CustomData_number_of_layers(&em->bm->pdata, CD_MTEXPOLY);
int i, j, *index, add_orig;
int has_crease, has_edge_bweight, has_vert_bweight;
+ int flag;
has_edge_bweight = CustomData_has_layer(&em->bm->edata, CD_BWEIGHT);
has_vert_bweight = CustomData_has_layer(&em->bm->vdata, CD_BWEIGHT);
@@ -1861,13 +1862,14 @@
/*don't add origindex layer if one already exists*/
add_orig = !CustomData_has_layer(&em->bm->pdata, CD_ORIGINDEX);
- CustomData_merge(&em->bm->vdata, &dm->vertData, CD_MASK_DERIVEDMESH,
+ flag = use_mdisps ? CD_MASK_DERIVEDMESH|CD_MASK_MDISPS : CD_MASK_DERIVEDMESH;
+ CustomData_merge(&em->bm->vdata, &dm->vertData, flag,
CD_CALLOC, dm->numVertData);
- CustomData_merge(&em->bm->edata, &dm->edgeData, CD_MASK_DERIVEDMESH,
+ CustomData_merge(&em->bm->edata, &dm->edgeData, flag,
CD_CALLOC, dm->numEdgeData);
- CustomData_merge(&em->bm->ldata, &dm->loopData, CD_MASK_DERIVEDMESH,
+ CustomData_merge(&em->bm->ldata, &dm->loopData, flag,
CD_CALLOC, dm->numLoopData);
- CustomData_merge(&em->bm->pdata, &dm->polyData, CD_MASK_DERIVEDMESH,
+ CustomData_merge(&em->bm->pdata, &dm->polyData, flag,
CD_CALLOC, dm->numPolyData);
/*add tesselation mface layers*/
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/constraint.c 2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/constraint.c 2011-03-29 05:48:18 UTC (rev 35860)
@@ -444,7 +444,7 @@
/* get DerivedMesh */
if (em) {
/* target is in editmode, so get a special derived mesh */
- dm = CDDM_from_BMEditMesh(em, ob->data);
+ dm = CDDM_from_BMEditMesh(em, ob->data, 0);
freeDM= 1;
}
else {
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c 2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/editderivedbmesh.c 2011-03-29 05:48:18 UTC (rev 35860)
@@ -298,10 +298,10 @@
if (em->edge_index) MEM_freeN(em->edge_index);
if (em->face_index) MEM_freeN(em->face_index);
- BM_Free_Mesh(em->bm);
+ if (em->bm)
+ BM_Free_Mesh(em->bm);
}
-
/*
ok, basic design:
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c 2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c 2011-03-29 05:48:18 UTC (rev 35860)
@@ -567,7 +567,7 @@
BMesh *bm;
int allocsize[4] = {512,512,2048,512};
- bm = BM_Make_Mesh(allocsize);
+ bm = BM_Make_Mesh(ob, allocsize);
BMO_CallOpf(bm, "mesh_to_bmesh mesh=%p object=%p", me, ob);
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c 2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/modifier.c 2011-03-29 05:48:18 UTC (rev 35860)
@@ -301,7 +301,8 @@
{
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
- md->scene= scene;
+ if (scene)
+ md->scene= scene;
if((md->mode & required_mode) != required_mode) return 0;
if(mti->isDisabled && mti->isDisabled(md, required_mode == eModifierMode_Render)) return 0;
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c 2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/modifiers_bmesh.c 2011-03-29 05:48:18 UTC (rev 35860)
@@ -106,7 +106,7 @@
/*converts a cddm to a BMEditMesh. if existing is non-NULL, the
new geometry will be put in there.*/
-BMEditMesh *CDDM_To_BMesh(DerivedMesh *dm, BMEditMesh *existing)
+BMEditMesh *CDDM_To_BMesh(Object *ob, DerivedMesh *dm, BMEditMesh *existing)
{
int allocsize[4] = {512, 512, 2048, 512};
BMesh *bm, bmold; /*bmold is for storing old customdata layout*/
@@ -125,7 +125,7 @@
int i, j, k, totvert, totedge, totface;
if (em) bm = em->bm;
- else bm = BM_Make_Mesh(allocsize);
+ else bm = BM_Make_Mesh(ob, allocsize);
bmold = *bm;
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/multires.c 2011-03-29 05:10:36 UTC (rev 35859)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/multires.c 2011-03-29 05:48:18 UTC (rev 35860)
@@ -63,7 +63,7 @@
static const int multires_side_tot[] = {0, 2, 3, 5, 9, 17, 33, 65, 129, 257, 513, 1025, 2049, 4097};
static void multires_mvert_to_ss(DerivedMesh *dm, MVert *mvert);
-static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, int invert, int add, DMGridData **oldGridData, int totlvl);
+static void multiresModifier_disp_run(DerivedMesh *dm, Mesh *me, DerivedMesh *dm2, int invert, int add, DMGridData **oldGridData, int totlvl);
DerivedMesh *get_multires_dm(Scene *scene, MultiresModifierData *mmd, Object *ob)
{
@@ -126,6 +126,9 @@
static int multires_get_level(Object *ob, MultiresModifierData *mmd, int render)
{
+ if (!ob || !mmd)
+ return 0;
+
if(render)
return (mmd->modifier.scene)? get_render_subsurf_level(&mmd->modifier.scene->r, mmd->renderlvl): mmd->renderlvl;
else if(ob->mode == OB_MODE_SCULPT)
@@ -314,12 +317,12 @@
}
}
-static void multires_reallocate_mdisps(Mesh *me, MDisps *mdisps, int lvl)
+static void multires_reallocate_mdisps(int totloop, MDisps *mdisps, int lvl)
{
int i;
/* reallocate displacements to be filled in */
- for(i = 0; i < me->totloop; ++i) {
+ for(i = 0; i < totloop; ++i) {
int totdisp = multires_grid_tot[lvl];
float (*disps)[3] = BLI_cellalloc_calloc(sizeof(float) * 3 * totdisp, "multires disps");
@@ -331,6 +334,7 @@
}
}
+
static void column_vectors_to_mat3(float mat[][3], float v1[3], float v2[3], float v3[3])
{
copy_v3_v3(mat[0], v1);
@@ -395,11 +399,11 @@
MLoop *ml = me->mloop;
int nsize = multires_side_tot[lvl];
int hsize = multires_side_tot[mmd->totlvl];
- int i, j, k=0;
+ int i, j;
for(i = 0; i < me->totpoly; ++i) {
- for (j=0; j<me->mpoly[i].totloop; j++, k++) {
- MDisps *mdisp= &mdisps[k];
+ for (j=0; j<me->mpoly[i].totloop; j++) {
+ MDisps *mdisp= &mdisps[me->mpoly[i].loopstart+j];
float (*disps)[3], (*ndisps)[3], (*hdisps)[3];
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list