[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [51570] trunk/blender/source/blender: add CDDM_from_bmesh(), avoids using BMEditMesh in modifiers.
Campbell Barton
ideasman42 at gmail.com
Wed Oct 24 09:24:12 CEST 2012
Revision: 51570
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=51570
Author: campbellbarton
Date: 2012-10-24 07:24:11 +0000 (Wed, 24 Oct 2012)
Log Message:
-----------
add CDDM_from_bmesh(), avoids using BMEditMesh in modifiers.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/BKE_bmesh.h
trunk/blender/source/blender/blenkernel/BKE_cdderivedmesh.h
trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
trunk/blender/source/blender/blenkernel/intern/constraint.c
trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c
trunk/blender/source/blender/bmesh/tools/BME_bevel.c
trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
trunk/blender/source/blender/modifiers/intern/MOD_armature.c
trunk/blender/source/blender/modifiers/intern/MOD_array.c
trunk/blender/source/blender/modifiers/intern/MOD_bevel.c
trunk/blender/source/blender/modifiers/intern/MOD_curve.c
trunk/blender/source/blender/modifiers/intern/MOD_decimate.c
trunk/blender/source/blender/modifiers/intern/MOD_edgesplit.c
trunk/blender/source/blender/modifiers/intern/MOD_lattice.c
trunk/blender/source/blender/modifiers/intern/MOD_mirror.c
trunk/blender/source/blender/modifiers/intern/MOD_skin.c
trunk/blender/source/blender/modifiers/intern/MOD_util.c
trunk/blender/source/blender/modifiers/intern/MOD_warp.c
trunk/blender/source/blender/modifiers/intern/MOD_weightvgproximity.c
Modified: trunk/blender/source/blender/blenkernel/BKE_bmesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_bmesh.h 2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/blenkernel/BKE_bmesh.h 2012-10-24 07:24:11 UTC (rev 51570)
@@ -99,7 +99,7 @@
struct BME_TransData *BME_get_transdata(struct BME_TransData_Head *td, struct BMVert *v);
void BME_free_transdata(struct BME_TransData_Head *td);
-struct BMesh *BME_bevel(struct BMEditMesh *em, float value, int res, int options, int defgrp_index, float angle,
- BME_TransData_Head **rtd, int do_tessface);
+struct BMesh *BME_bevel(struct BMesh *bm, float value, int res, int options, int defgrp_index, float angle,
+ BME_TransData_Head **rtd);
#endif
Modified: trunk/blender/source/blender/blenkernel/BKE_cdderivedmesh.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_cdderivedmesh.h 2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/blenkernel/BKE_cdderivedmesh.h 2012-10-24 07:24:11 UTC (rev 51570)
@@ -55,8 +55,10 @@
* data to not overwrite the original */
struct DerivedMesh *CDDM_from_mesh(struct Mesh *mesh, struct Object *ob);
+struct DerivedMesh *CDDM_from_bmesh(struct BMesh *bm, int use_mdisps);
+
/* creates a CDDerivedMesh from the given BMEditMesh */
-DerivedMesh *CDDM_from_BMEditMesh(struct BMEditMesh *em, struct Mesh *me, int use_mdisps, int use_tessface);
+DerivedMesh *CDDM_from_editbmesh(struct BMEditMesh *em, int use_mdisps, int use_tessface);
/* merge verts */
DerivedMesh *CDDM_merge_verts(DerivedMesh *dm, const int *vtargetmap);
Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c 2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c 2012-10-24 07:24:11 UTC (rev 51570)
@@ -903,7 +903,7 @@
float (*orco)[3];
int free;
- if (em) dm = CDDM_from_BMEditMesh(em, me, FALSE, FALSE);
+ if (em) dm = CDDM_from_editbmesh(em, FALSE, FALSE);
else dm = CDDM_from_mesh(me, ob);
orco = get_orco_coords_dm(ob, em, layer, &free);
@@ -1976,7 +1976,7 @@
}
else {
- dm = CDDM_from_BMEditMesh(em, ob->data, FALSE, FALSE);
+ dm = CDDM_from_editbmesh(em, FALSE, FALSE);
if (deformedVerts) {
CDDM_apply_vert_coords(dm, deformedVerts);
Modified: trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2012-10-24 07:24:11 UTC (rev 51570)
@@ -1791,10 +1791,10 @@
}
static void loops_to_customdata_corners(BMesh *bm, CustomData *facedata,
- int cdindex, BMLoop *l3[3],
+ int cdindex, const BMLoop *l3[3],
int numCol, int numTex)
{
- BMLoop *l;
+ const BMLoop *l;
BMFace *f = l3[0]->f;
MTFace *texface;
MTexPoly *texpoly;
@@ -1837,13 +1837,16 @@
}
}
-DerivedMesh *CDDM_from_BMEditMesh(BMEditMesh *em, Mesh *UNUSED(me), int use_mdisps, int use_tessface)
+/* used for both editbmesh and bmesh */
+static DerivedMesh *cddm_from_bmesh_ex(struct BMesh *bm, int use_mdisps,
+ /* EditBMesh vars for use_tessface */
+ int use_tessface,
+ const int em_tottri, const BMLoop *(*em_looptris)[3]
+ )
{
- BMesh *bm = em->bm;
-
DerivedMesh *dm = CDDM_new(bm->totvert,
bm->totedge,
- use_tessface ? em->tottri : 0,
+ use_tessface ? em_tottri : 0,
bm->totloop,
bm->totface);
@@ -1889,7 +1892,7 @@
/* add tessellation mface layers */
if (use_tessface) {
- CustomData_from_bmeshpoly(&dm->faceData, &dm->polyData, &dm->loopData, em->tottri);
+ CustomData_from_bmeshpoly(&dm->faceData, &dm->polyData, &dm->loopData, em_tottri);
}
index = dm->getVertDataArray(dm, CD_ORIGINDEX);
@@ -1955,7 +1958,7 @@
index = dm->getTessFaceDataArray(dm, CD_ORIGINDEX);
for (i = 0; i < dm->numTessFaceData; i++, index++, polyindex++) {
MFace *mf = &mface[i];
- BMLoop **l = em->looptris[i];
+ const BMLoop **l = em_looptris[i];
efa = l[0]->f;
mf->v1 = BM_elem_index_get(l[0]->v);
@@ -2005,6 +2008,20 @@
return dm;
}
+struct DerivedMesh *CDDM_from_bmesh(struct BMesh *bm, int use_mdisps)
+{
+ return cddm_from_bmesh_ex(bm, use_mdisps, FALSE,
+ /* these vars are for editmesh only */
+ 0, NULL);
+}
+
+DerivedMesh *CDDM_from_editbmesh(BMEditMesh *em, int use_mdisps, int use_tessface)
+{
+ return cddm_from_bmesh_ex(em->bm, use_mdisps,
+ /* editmesh */
+ use_tessface, em->tottri, (const BMLoop *(*)[3])em->looptris);
+}
+
static DerivedMesh *cddm_copy_ex(DerivedMesh *source, int faces_from_tessfaces)
{
CDDerivedMesh *cddm = cdDM_create("CDDM_copy cddm");
Modified: trunk/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/constraint.c 2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/blenkernel/intern/constraint.c 2012-10-24 07:24:11 UTC (rev 51570)
@@ -432,7 +432,7 @@
/* get DerivedMesh */
if (em) {
/* target is in editmode, so get a special derived mesh */
- dm = CDDM_from_BMEditMesh(em, ob->data, FALSE, FALSE);
+ dm = CDDM_from_editbmesh(em, FALSE, FALSE);
freeDM = 1;
}
else {
Modified: trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c 2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_mesh.c 2012-10-24 07:24:11 UTC (rev 51570)
@@ -295,7 +295,7 @@
/* switch multires data out of tangent space */
if (CustomData_has_layer(&bm->ldata, CD_MDISPS)) {
BMEditMesh *em = BMEdit_Create(bm, FALSE);
- DerivedMesh *dm = CDDM_from_BMEditMesh(em, NULL, TRUE, FALSE);
+ DerivedMesh *dm = CDDM_from_editbmesh(em, TRUE, FALSE);
MDisps *mdisps;
BMFace *f;
BMIter iter;
Modified: trunk/blender/source/blender/bmesh/tools/BME_bevel.c
===================================================================
--- trunk/blender/source/blender/bmesh/tools/BME_bevel.c 2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/bmesh/tools/BME_bevel.c 2012-10-24 07:24:11 UTC (rev 51570)
@@ -1096,10 +1096,9 @@
return bm;
}
-BMesh *BME_bevel(BMEditMesh *em, float value, int res, int options, int defgrp_index, float angle,
- BME_TransData_Head **rtd, int do_tessface)
+BMesh *BME_bevel(BMesh *bm, float value, int res, int options, int defgrp_index, float angle,
+ BME_TransData_Head **rtd)
{
- BMesh *bm = em->bm;
BMVert *v;
BMIter iter;
@@ -1126,12 +1125,6 @@
BMO_pop(bm);
}
- /* possibly needed when running as a tool (which is no longer functional)
- * but keep as an option for now */
- if (do_tessface) {
- BMEdit_RecalcTessellation(em);
- }
-
/* interactive preview? */
if (rtd) {
*rtd = td;
Modified: trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c 2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c 2012-10-24 07:24:11 UTC (rev 51570)
@@ -408,7 +408,7 @@
smd.levels = scene->toolsettings->uv_subsurf_level;
smd.subdivType = ME_CC_SUBSURF;
- initialDerived = CDDM_from_BMEditMesh(em, NULL, 0, 0);
+ initialDerived = CDDM_from_editbmesh(em, FALSE, FALSE);
derivedMesh = subsurf_make_derived_from_derived(initialDerived, &smd,
NULL, SUBSURF_IN_EDIT_MODE);
Modified: trunk/blender/source/blender/modifiers/intern/MOD_armature.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_armature.c 2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/modifiers/intern/MOD_armature.c 2012-10-24 07:24:11 UTC (rev 51570)
@@ -135,13 +135,13 @@
}
static void deformVertsEM(
- ModifierData *md, Object *ob, struct BMEditMesh *editData,
+ ModifierData *md, Object *ob, struct BMEditMesh *em,
DerivedMesh *derivedData, float (*vertexCos)[3], int numVerts)
{
ArmatureModifierData *amd = (ArmatureModifierData *) md;
DerivedMesh *dm = derivedData;
- if (!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, FALSE);
+ if (!derivedData) dm = CDDM_from_editbmesh(em, FALSE, FALSE);
modifier_vgroup_cache(md, vertexCos); /* if next modifier needs original vertices */
@@ -158,14 +158,14 @@
}
static void deformMatricesEM(
- ModifierData *md, Object *ob, struct BMEditMesh *editData,
+ ModifierData *md, Object *ob, struct BMEditMesh *em,
DerivedMesh *derivedData, float (*vertexCos)[3],
float (*defMats)[3][3], int numVerts)
{
ArmatureModifierData *amd = (ArmatureModifierData *) md;
DerivedMesh *dm = derivedData;
- if (!derivedData) dm = CDDM_from_BMEditMesh(editData, ob->data, FALSE, FALSE);
+ if (!derivedData) dm = CDDM_from_editbmesh(em, FALSE, FALSE);
armature_deform_verts(amd->object, ob, dm, vertexCos, defMats, numVerts,
amd->deformflag, NULL, amd->defgrp_name);
Modified: trunk/blender/source/blender/modifiers/intern/MOD_array.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_array.c 2012-10-24 06:08:28 UTC (rev 51569)
+++ trunk/blender/source/blender/modifiers/intern/MOD_array.c 2012-10-24 07:24:11 UTC (rev 51570)
@@ -53,8 +53,9 @@
#include "BKE_mesh.h"
#include "BKE_modifier.h"
#include "BKE_object.h"
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list