[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41380] branches/bmesh/blender/source/ blender: move make_uv_vert_map() to bmesh - use MLoopUV' s rather than MTFace's.
Campbell Barton
ideasman42 at gmail.com
Sun Oct 30 10:19:07 CET 2011
Revision: 41380
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41380
Author: campbellbarton
Date: 2011-10-30 09:19:07 +0000 (Sun, 30 Oct 2011)
Log Message:
-----------
move make_uv_vert_map() to bmesh - use MLoopUV's rather than MTFace's.
also some formatting on BLI_array
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
branches/bmesh/blender/source/blender/blenlib/BLI_array.h
Modified: branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h 2011-10-30 09:05:47 UTC (rev 41379)
+++ branches/bmesh/blender/source/blender/blenkernel/BKE_mesh.h 2011-10-30 09:19:07 UTC (rev 41380)
@@ -52,6 +52,7 @@
struct CustomData;
struct DerivedMesh;
struct Scene;
+struct MLoopUV;
#ifdef __cplusplus
extern "C" {
@@ -153,7 +154,7 @@
unsigned char tfindex, separate, flag;
} UvMapVert;
-UvVertMap *make_uv_vert_map(struct MFace *mface, struct MTFace *tface, unsigned int totface, unsigned int totvert, int selected, float *limit);
+UvVertMap *make_uv_vert_map(struct MPoly *mpoly, struct MLoop *mloop, struct MLoopUV *mloopuv, unsigned int totpoly, unsigned int totvert, int selected, float *limit);
UvMapVert *get_uv_map_vert(UvVertMap *vmap, unsigned int v);
void free_uv_vert_map(UvVertMap *vmap);
Modified: branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c 2011-10-30 09:05:47 UTC (rev 41379)
+++ branches/bmesh/blender/source/blender/blenkernel/intern/mesh.c 2011-10-30 09:19:07 UTC (rev 41380)
@@ -1981,27 +1981,31 @@
return cos;
}
-UvVertMap *make_uv_vert_map(struct MFace *mface, struct MTFace *tface, unsigned int totface, unsigned int totvert, int selected, float *limit)
+
+/* ngon version wip, based on EDBM_make_uv_vert_map */
+/* this replaces the non bmesh function (in trunk) which takes MTFace's, if we ever need it back we could
+ * but for now this replaces it because its unused. */
+
+UvVertMap *make_uv_vert_map(struct MPoly *mpoly, struct MLoop *mloop, struct MLoopUV *mloopuv, unsigned int totpoly, unsigned int totvert, int selected, float *limit)
{
UvVertMap *vmap;
UvMapVert *buf;
- MFace *mf;
- MTFace *tf;
+ MPoly *mp;
+ MLoopUV *luv;
unsigned int a;
int i, totuv, nverts;
totuv = 0;
/* generate UvMapVert array */
- mf= mface;
- tf= tface;
- for(a=0; a<totface; a++, mf++, tf++)
- if(!selected || (!(mf->flag & ME_HIDE) && (mf->flag & ME_FACE_SEL)))
- totuv += (mf->v4)? 4: 3;
-
+ mp= mpoly;
+ for(a=0; a<totpoly; a++, mp++)
+ if(!selected || (!(mp->flag & ME_HIDE) && (mp->flag & ME_FACE_SEL)))
+ totuv += mp->totloop;
+
if(totuv==0)
return NULL;
-
+
vmap= (UvVertMap*)MEM_callocN(sizeof(*vmap), "UvVertMap");
if (!vmap)
return NULL;
@@ -2014,25 +2018,23 @@
return NULL;
}
- mf= mface;
- tf= tface;
- for(a=0; a<totface; a++, mf++, tf++) {
- if(!selected || (!(mf->flag & ME_HIDE) && (mf->flag & ME_FACE_SEL))) {
- nverts= (mf->v4)? 4: 3;
+ mp= mpoly;
+ for(a=0; a<totpoly; a++, mp++) {
+ if(!selected || (!(mp->flag & ME_HIDE) && (mp->flag & ME_FACE_SEL))) {
+ nverts= mp->totloop;
for(i=0; i<nverts; i++) {
buf->tfindex= i;
buf->f= a;
buf->separate = 0;
- buf->next= vmap->vert[*(&mf->v1 + i)];
- vmap->vert[*(&mf->v1 + i)]= buf;
+ buf->next= vmap->vert[mloop[mp->loopstart + i].v];
+ vmap->vert[mloop[mp->loopstart + i].v]= buf;
buf++;
}
}
}
/* sort individual uvs for each vert */
- tf= tface;
for(a=0; a<totvert; a++) {
UvMapVert *newvlist= NULL, *vlist=vmap->vert[a];
UvMapVert *iterv, *v, *lastv, *next;
@@ -2044,14 +2046,14 @@
v->next= newvlist;
newvlist= v;
- uv= (tf+v->f)->uv[v->tfindex];
+ uv= mloopuv[mpoly[v->f].loopstart + v->tfindex].uv;
lastv= NULL;
iterv= vlist;
while(iterv) {
next= iterv->next;
- uv2= (tf+iterv->f)->uv[iterv->tfindex];
+ uv2= mloopuv[mpoly[iterv->f].loopstart + iterv->tfindex].uv;
sub_v2_v2v2(uvdiff, uv2, uv);
Modified: branches/bmesh/blender/source/blender/blenlib/BLI_array.h
===================================================================
--- branches/bmesh/blender/source/blender/blenlib/BLI_array.h 2011-10-30 09:05:47 UTC (rev 41379)
+++ branches/bmesh/blender/source/blender/blenlib/BLI_array.h 2011-10-30 09:19:07 UTC (rev 41380)
@@ -56,32 +56,32 @@
behaviour, though it may not be the best in practice.
*/
-#define BLI_array_declare(arr) \
- int _##arr##_count=0; \
- void *_##arr##_tmp; \
+#define BLI_array_declare(arr) \
+ int _##arr##_count=0; \
+ void *_##arr##_tmp; \
void *_##arr##_static = NULL
-/* this will use stack space, up to maxstatic array elements, befoe
+/* this will use stack space, up to maxstatic array elements, before
* switching to dynamic heap allocation */
-#define BLI_array_staticdeclare(arr, maxstatic) \
- int _##arr##_count=0; \
- void *_##arr##_tmp; \
+#define BLI_array_staticdeclare(arr, maxstatic) \
+ int _##arr##_count=0; \
+ void *_##arr##_tmp; \
char _##arr##_static[maxstatic*sizeof(arr)]
/* this returns the entire size of the array, including any buffering. */
-#define BLI_array_totalsize_dyn(arr) ( \
- ((arr)==NULL) ? \
- 0 : \
- MEM_allocN_len(arr) / sizeof(*arr) \
+#define BLI_array_totalsize_dyn(arr) ( \
+ ((arr)==NULL) ? \
+ 0 : \
+ MEM_allocN_len(arr) / sizeof(*arr) \
)
-#define BLI_array_totalsize(arr) ( \
- (signed int) \
- (((void *)(arr) == (void *)_##arr##_static && (void *)(arr) != NULL) ? \
- (sizeof(_##arr##_static) / sizeof(*arr)) : \
- BLI_array_totalsize_dyn(arr)) \
+#define BLI_array_totalsize(arr) ( \
+ (signed int) \
+ (((void *)(arr) == (void *)_##arr##_static && (void *)(arr) != NULL) ? \
+ (sizeof(_##arr##_static) / sizeof(*arr)) : \
+ BLI_array_totalsize_dyn(arr)) \
)
@@ -89,74 +89,74 @@
#define BLI_array_count(arr) _##arr##_count
/* grow the array by one. zeroes the new elements. */
-#define _BLI_array_growone(arr) ( \
- (BLI_array_totalsize(arr) > _##arr##_count) ? \
- ++_##arr##_count : \
- ((_##arr##_tmp = MEM_callocN( \
- sizeof(*arr)*(_##arr##_count*2+2), \
- #arr " " __FILE__ ":" STRINGIFY(__LINE__) \
- ) \
- ), \
- (arr && memcpy(_##arr##_tmp, arr, sizeof(*arr) * _##arr##_count)), \
- (arr && ((void *)(arr) != (void*)_##arr##_static ? \
- (MEM_freeN(arr), arr) : \
- arr)), \
- (arr = _##arr##_tmp), \
- _##arr##_count++) \
+#define _BLI_array_growone(arr) ( \
+ (BLI_array_totalsize(arr) > _##arr##_count) ? \
+ ++_##arr##_count : \
+ ((_##arr##_tmp = MEM_callocN( \
+ sizeof(*arr)*(_##arr##_count*2+2), \
+ #arr " " __FILE__ ":" STRINGIFY(__LINE__) \
+ ) \
+ ), \
+ (arr && memcpy(_##arr##_tmp, arr, sizeof(*arr) * _##arr##_count)), \
+ (arr && ((void *)(arr) != (void*)_##arr##_static ? \
+ (MEM_freeN(arr), arr) : \
+ arr)), \
+ (arr = _##arr##_tmp), \
+ _##arr##_count++) \
)
/* returns length of array */
-#define BLI_array_growone(arr) ( \
- ((void *)(arr)==NULL && (void *)(_##arr##_static) != NULL) ? \
- ((arr=(void*)_##arr##_static), ++_##arr##_count) : \
- _BLI_array_growone(arr) \
+#define BLI_array_growone(arr) ( \
+ ((void *)(arr)==NULL && (void *)(_##arr##_static) != NULL) ? \
+ ((arr=(void*)_##arr##_static), ++_##arr##_count) : \
+ _BLI_array_growone(arr) \
)
/* appends an item to the array and returns a pointer to the item in the array.
* item is not a pointer, but actual data value.*/
-#define BLI_array_append(arr, item) ( \
- BLI_array_growone(arr), \
- (arr[_##arr##_count-1] = item), \
- (arr+(_##arr##_count-1)) \
+#define BLI_array_append(arr, item) ( \
+ BLI_array_growone(arr), \
+ (arr[_##arr##_count-1] = item), \
+ (arr+(_##arr##_count-1)) \
)
/* grow an array by a specified number of items. */
/* TODO, this could be done in a less crappy way by not looping - campbell */
-#define BLI_array_growitems(arr, num) \
- { \
- int _i; \
- for (_i = 0; _i < (num); _i++) { \
- BLI_array_growone(arr); \
- } \
+#define BLI_array_growitems(arr, num) \
+ { \
+ int _i; \
+ for (_i = 0; _i < (num); _i++) { \
+ BLI_array_growone(arr); \
+ } \
}
-#define BLI_array_free(arr) \
- if (arr && (char *)arr != _##arr##_static) { \
- BLI_array_fake_user(arr); \
- MEM_freeN(arr); \
+#define BLI_array_free(arr) \
+ if (arr && (char *)arr != _##arr##_static) { \
+ BLI_array_fake_user(arr); \
+ MEM_freeN(arr); \
}
-#define BLI_array_pop(arr) ( \
- (arr&&_##arr##_count) ? \
- arr[--_##arr##_count] : \
- 0 \
+#define BLI_array_pop(arr) ( \
+ (arr&&_##arr##_count) ? \
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list