[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42908] branches/bmesh/blender/source/ blender: macro for getting next/previous MPoly loops
Campbell Barton
ideasman42 at gmail.com
Wed Dec 28 08:10:35 CET 2011
Revision: 42908
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42908
Author: campbellbarton
Date: 2011-12-28 07:10:27 +0000 (Wed, 28 Dec 2011)
Log Message:
-----------
macro for getting next/previous MPoly loops
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
branches/bmesh/blender/source/blender/editors/mesh/editface.c
branches/bmesh/blender/source/blender/editors/object/object_modifier.c
branches/bmesh/blender/source/blender/makesdna/DNA_meshdata_types.h
branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2011-12-28 04:43:29 UTC (rev 42907)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/cdderivedmesh.c 2011-12-28 07:10:27 UTC (rev 42908)
@@ -2548,7 +2548,7 @@
ml = cddm->mloop + mp->loopstart;
for (j=0; j<mp->totloop; j++, ml++) {
v1 = ml->v;
- v2 = (cddm->mloop + mp->loopstart + ((j+1)%mp->totloop))->v;
+ v2 = ME_POLY_LOOP_NEXT(cddm->mloop, mp, j)->v;
if (!BLI_edgehash_haskey(eh, v1, v2)) {
BLI_edgehash_insert(eh, v1, v2, NULL);
}
@@ -2589,7 +2589,7 @@
ml = cddm->mloop + mp->loopstart;
for (j=0; j<mp->totloop; j++, ml++) {
v1 = ml->v;
- v2 = (cddm->mloop + mp->loopstart + ((j+1)%mp->totloop))->v;
+ v2 = ME_POLY_LOOP_NEXT(cddm->mloop, mp, j)->v;
ml->e = GET_INT_FROM_POINTER(BLI_edgehash_lookup(eh, v1, v2));
}
}
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c 2011-12-28 04:43:29 UTC (rev 42907)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c 2011-12-28 07:10:27 UTC (rev 42908)
@@ -1001,7 +1001,7 @@
int v1, v2;
v1 = mloop[b].v;
- v2 = mloop[(b+1)%mpoly->totloop].v;
+ v2 = ME_POLY_LOOP_NEXT(mloop, mpoly, b)->v;
mloop[b].e = GET_INT_FROM_POINTER(BLI_edgehash_lookup(hash, v1, v2));
}
}
Modified: branches/bmesh/blender/source/blender/editors/mesh/editface.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/editface.c 2011-12-28 04:43:29 UTC (rev 42907)
+++ branches/bmesh/blender/source/blender/editors/mesh/editface.c 2011-12-28 07:10:27 UTC (rev 42908)
@@ -235,14 +235,13 @@
/* Set tface seams based on edge data, uses hash table to find seam edges. */
-static void hash_add_face(EdgeHash *ehash, MPoly *mf, MLoop *mloop)
+static void hash_add_face(EdgeHash *ehash, MPoly *mp, MLoop *mloop)
{
- MLoop *ml, *ml2;
+ MLoop *ml;
int i;
- for (i=0, ml=mloop; i<mf->totloop; i++, ml++) {
- ml2 = mloop + (i+1) % mf->totloop;
- BLI_edgehash_insert(ehash, ml->v, ml2->v, NULL);
+ for (i=0, ml=mloop; i<mp->totloop; i++, ml++) {
+ BLI_edgehash_insert(ehash, ml->v, ME_POLY_LOOP_NEXT(mloop, mp, i)->v, NULL);
}
}
Modified: branches/bmesh/blender/source/blender/editors/object/object_modifier.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/object/object_modifier.c 2011-12-28 04:43:29 UTC (rev 42907)
+++ branches/bmesh/blender/source/blender/editors/object/object_modifier.c 2011-12-28 07:10:27 UTC (rev 42908)
@@ -1199,10 +1199,10 @@
ml = me->mloop + mp->loopstart;
for (j=0; j<mp->totloop; j++, ml++) {
- MLoop *ml2 = me->mloop + mp->loopstart + (j+mp->totloop-1)%mp->totloop;
- MLoop *ml3 = me->mloop + mp->loopstart + (j+1)%mp->totloop;
+ MLoop *ml_prev = ME_POLY_LOOP_PREV(me->mloop, mp, j);
+ MLoop *ml_next = ME_POLY_LOOP_NEXT(me->mloop, mp, j);
- if ((me->mvert[ml->v].flag&SELECT) && (me->mvert[ml2->v].flag&SELECT) && (me->mvert[ml3->v].flag&SELECT)) {
+ if ((me->mvert[ml->v].flag&SELECT) && (me->mvert[ml_prev->v].flag&SELECT) && (me->mvert[ml_next->v].flag&SELECT)) {
MDisps *md = mdisps + mp->loopstart + j;
int res = sqrt(md->totdisp);
Modified: branches/bmesh/blender/source/blender/makesdna/DNA_meshdata_types.h
===================================================================
--- branches/bmesh/blender/source/blender/makesdna/DNA_meshdata_types.h 2011-12-28 04:43:29 UTC (rev 42907)
+++ branches/bmesh/blender/source/blender/makesdna/DNA_meshdata_types.h 2011-12-28 07:10:27 UTC (rev 42908)
@@ -239,6 +239,9 @@
/* flag ME_HIDE==16 is used here too */
#define ME_DRAW_ACT 4
+#define ME_POLY_LOOP_PREV(mloop, mp, i) (&(mloop)[(mp)->loopstart + (((i) + (mp)->totloop - 1) % (mp)->totloop)])
+#define ME_POLY_LOOP_NEXT(mloop, mp, i) (&(mloop)[(mp)->loopstart + (((i) + 1) % (mp)->totloop)])
+
/* mselect->type */
#define ME_VSEL 0
#define ME_ESEL 1
Modified: branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c
===================================================================
--- branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c 2011-12-28 04:43:29 UTC (rev 42907)
+++ branches/bmesh/blender/source/blender/modifiers/intern/MOD_solidify.c 2011-12-28 07:10:27 UTC (rev 42908)
@@ -104,15 +104,21 @@
/* This function adds an edge hash if its not there, and adds the face index */
#define NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(EDV1, EDV2); \
- edge_ref = (EdgeFaceRef *)BLI_edgehash_lookup(edge_hash, EDV1, EDV2); \
+ { \
+ const unsigned int ed_v1 = EDV1; \
+ const unsigned int ed_v2 = EDV2; \
+ edge_ref = (EdgeFaceRef *)BLI_edgehash_lookup(edge_hash, ed_v1, ed_v2); \
if (!edge_ref) { \
edge_ref = &edge_ref_array[edge_ref_count]; edge_ref_count++; \
- edge_ref->f1=i; \
- edge_ref->f2=-1; \
- BLI_edgehash_insert(edge_hash, EDV1, EDV2, edge_ref); \
- } else { \
+ edge_ref->f1 = i; \
+ edge_ref->f2 =- 1; \
+ BLI_edgehash_insert(edge_hash, ed_v1, ed_v2, edge_ref); \
+ } \
+ else { \
edge_ref->f2=i; \
- }
+ } \
+ }
+ /* --- end define --- */
for(i = 0; i < numFaces; i++, mp++) {
int j;
@@ -122,8 +128,8 @@
mesh_calc_poly_normal(mp, mloop+mp->loopstart, mvert, f_no);
ml = mloop + mp->loopstart;
- for (j=0; j<mp->totloop; j++) {
- NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(ml[j].v, ml[(j+1)%mp->totloop].v);
+ for (j=0; j<mp->totloop; j++, ml++) {
+ NOCALC_EDGEWEIGHT_ADD_EDGEREF_FACE(ml->v, ME_POLY_LOOP_NEXT(mloop, mp, j)->v);
}
}
@@ -273,14 +279,19 @@
#define INVALID_PAIR -2
#define ADD_EDGE_USER(_v1, _v2, edge_ord) \
- eidx= GET_INT_FROM_POINTER(BLI_edgehash_lookup(edgehash, _v1, _v2)); \
- if(edge_users[eidx] == INVALID_UNUSED) { \
- ed= orig_medge + eidx; \
- edge_users[eidx]= (_v1 < _v2) == (ed->v1 < ed->v2) ? i:(i+numFaces); \
- edge_order[eidx]= edge_ord; \
- } else { \
- edge_users[eidx]= INVALID_PAIR; \
- } \
+ { \
+ const unsigned int ml_v1 = _v1; \
+ const unsigned int ml_v2 = _v2; \
+ eidx= GET_INT_FROM_POINTER(BLI_edgehash_lookup(edgehash, ml_v1, ml_v2)); \
+ if(edge_users[eidx] == INVALID_UNUSED) { \
+ ed= orig_medge + eidx; \
+ edge_users[eidx] = (ml_v1 < ml_v2) == (ed->v1 < ed->v2) ? i : (i + numFaces); \
+ edge_order[eidx] = edge_ord; \
+ } \
+ else { \
+ edge_users[eidx] = INVALID_PAIR; \
+ } \
+ }
edge_users= MEM_mallocN(sizeof(int) * numEdges, "solid_mod edges");
@@ -291,8 +302,7 @@
MLoop *ml;
for (ml=orig_mloop + mp->loopstart, j=0; j<mp->totloop; ml++, j++) {
- MLoop *ml2 = orig_mloop + mp->loopstart + (j+1)%mp->totloop;
- ADD_EDGE_USER(ml->v, ml2->v, j);
+ ADD_EDGE_USER(ml->v, ME_POLY_LOOP_NEXT(orig_mloop, mp, j)->v, j);
}
}
@@ -456,12 +466,13 @@
/* just added, calc the normal */
BLI_array_empty(face_angles);
for (j=0, ml=mloop+mp->loopstart; j<mp->totloop; j++, ml++) {
- MLoop *ml2 = &mloop[mp->loopstart + (j + 1) % mp->totloop]; //next
- MLoop *ml3 = &mloop[mp->loopstart + (j + mp->totloop - 1) % mp->totloop]; //previous
+ MLoop *ml_prev = ME_POLY_LOOP_PREV(mloop, mp, j);
+ MLoop *ml_next = ME_POLY_LOOP_NEXT(mloop, mp, j);
+
float e1[3], e2[3], angle;
- sub_v3_v3v3(e1, mvert[ml2->v].co, mvert[ml->v].co);
- sub_v3_v3v3(e2, mvert[ml3->v].co, mvert[ml->v].co);
+ sub_v3_v3v3(e1, mvert[ml_next->v].co, mvert[ml->v].co);
+ sub_v3_v3v3(e2, mvert[ml_prev->v].co, mvert[ml->v].co);
angle = M_PI - angle_normalized_v3v3(e1, e2);
BLI_array_append(face_angles, angle);
}
More information about the Bf-blender-cvs
mailing list