[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37683] branches/soc-2011-onion/source/ blender/editors/uvedit/uvedit_ops.c: smart welding - add vertices with v( subject to change).
Antony Riakiotakis
kalast at gmail.com
Tue Jun 21 04:02:20 CEST 2011
Revision: 37683
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37683
Author: psy-fi
Date: 2011-06-21 02:02:16 +0000 (Tue, 21 Jun 2011)
Log Message:
-----------
smart welding - add vertices with v(subject to change). There are issues with vertices not registered right will correct ASAP
Modified Paths:
--------------
branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c
Modified: branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c
===================================================================
--- branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c 2011-06-21 01:41:39 UTC (rev 37682)
+++ branches/soc-2011-onion/source/blender/editors/uvedit/uvedit_ops.c 2011-06-21 02:02:16 UTC (rev 37683)
@@ -1221,7 +1221,7 @@
StitchPreviewer *preview = uv_get_stitch_previewer();
UVVertAverage *uv_average;
GHash *vertices = state->vertices;
- GHash *faces = state->faces;
+ GHash *faces = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "stitch_operator_faces");
UvVertMap *vmap = state->vmap;
int numOfPoints = 0;
GHashIterator *ghiter;
@@ -1229,30 +1229,19 @@
int averageBufferIterator = 0;
EditFace *efa;
MTFace *mt;
+ short preview_enabled = preview->enabled;
/* cleanup previous preview(if any) */
- if(preview->previewQuads){
- MEM_freeN(preview->previewQuads);
- preview->previewQuads = NULL;
- }
- if(preview->previewTris){
- MEM_freeN(preview->previewTris);
- preview->previewTris = NULL;
- }
- if(preview->previewPoints){
- MEM_freeN(preview->previewPoints);
- preview->previewPoints = NULL;
- }
- if(preview->previewPointColors){
- MEM_freeN(preview->previewPointColors);
- preview->previewPointColors = NULL;
- }
- ghiter = BLI_ghashIterator_new(faces);
+ stitch_preview_delete();
+ preview = stitch_preview_init();
+ preview->enabled = preview_enabled;
- uv_average = MEM_callocN(sizeof(UVVertAverage)*BLI_ghash_size(vertices), "stitch_averages");
+ EM_init_index_arrays(state->em, 0, 0, 1);
- BLI_ghashIterator_init(ghiter, vertices);
+ ghiter = BLI_ghashIterator_new(vertices);
+ uv_average = MEM_callocN(sizeof(UVVertAverage)*BLI_ghash_size(vertices), "stitch_averages");
+
/* Count number of points/faces so that we allocate appropriate buffer */
for( ; !BLI_ghashIterator_isDone(ghiter); BLI_ghashIterator_step(ghiter), averageBufferIterator++){
EditVert *editVert = BLI_ghashIterator_getKey(ghiter);
@@ -1262,18 +1251,15 @@
efa = EM_get_face_for_index(mapVert->f);
mt = CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
- efa = EM_get_face_for_index(mapVert->f);
- mt = CustomData_em_get(&state->em->fdata, efa->data, CD_MTFACE);
-
uv_average[averageBufferIterator].count++;
uv_average[averageBufferIterator].uv[0] += mt->uv[mapVert->tfindex][0];
uv_average[averageBufferIterator].uv[1] += mt->uv[mapVert->tfindex][1];
mapVert = mapVert->next;
numOfPoints++;
- if(!BLI_ghash_haskey(faces, efa))
- {
+ if(!BLI_ghash_haskey(faces, efa)){
BLI_ghash_insert(faces, efa, NULL);
+
/* store position in the preview buffer */
if(efa->v4)
{
@@ -1291,8 +1277,8 @@
/* Initialize the preview buffers */
preview->previewQuads = (float *)MEM_mallocN(preview->numOfQuads*sizeof(float)*8, "quad_uv_stitch_prev");
preview->previewTris = (float *)MEM_mallocN(preview->numOfTris*sizeof(float)*6, "tri_uv_stitch_prev");
- preview->previewPoints = MEM_mallocN(numOfPoints*sizeof(float)*2, "stitch_preview_points");
- preview->previewPointColors = MEM_mallocN(numOfPoints*sizeof(unsigned int)*2, "stitch_preview_point_colors");
+ preview->previewPoints = (float *)MEM_mallocN(numOfPoints*sizeof(float)*2, "stitch_preview_points");
+ preview->previewPointColors = (float *)MEM_mallocN(numOfPoints*sizeof(unsigned int), "stitch_preview_point_colors");
BLI_ghashIterator_init(ghiter, faces);
@@ -1310,6 +1296,8 @@
}
}
+ BLI_ghash_free(faces, NULL, NULL);
+
BLI_ghashIterator_init(ghiter, vertices);
for(averageBufferIterator = 0; !BLI_ghashIterator_isDone(ghiter); BLI_ghashIterator_step(ghiter), averageBufferIterator++){
short stitchable;
@@ -1342,6 +1330,8 @@
MEM_freeN(uv_average);
+ EM_free_index_arrays();
+
BLI_ghashIterator_free(ghiter);
}
@@ -1365,7 +1355,6 @@
stitch_state->use_limit = RNA_boolean_get(op->ptr, "use_limit");
stitch_state->limitDist = RNA_float_get(op->ptr, "limit");
stitch_state->vertices = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "stitch_operator_vertices");
- stitch_state->faces = BLI_ghash_new(BLI_ghashutil_ptrhash, BLI_ghashutil_ptrcmp, "stitch_operator_faces");
stitch_state->em = em = BKE_mesh_get_editmesh((Mesh*)obedit->data);
EM_init_index_arrays(stitch_state->em, 0, 0, 1);
@@ -1397,15 +1386,15 @@
for(; !BLI_ghashIterator_isDone(ghiter); BLI_ghashIterator_step(ghiter)){
EditVert *vert = BLI_ghashIterator_getKey(ghiter);
if(!BLI_ghash_haskey(stitch_state->vertices, vert));
- BLI_ghash_insert(stitch_state->vertices, vert, NULL);
+ BLI_ghash_insert(stitch_state->vertices, vert, NULL);
}
BLI_ghashIterator_free(ghiter);
BLI_ghash_free(tempHash, NULL, NULL);
+ EM_free_index_arrays();
stitch_prepare_preview_data(stitch_state);
- EM_free_index_arrays();
stitch_update_header(stitch_state, C);
return 1;
}
@@ -1691,7 +1680,6 @@
EM_free_uv_vert_map(stitch_state->vmap);
BLI_ghash_free(stitch_state->vertices, NULL, NULL);
- BLI_ghash_free(stitch_state->faces, NULL, NULL);
BKE_mesh_end_editmesh(obedit->data, stitch_state->em);
if(sa)
@@ -1774,7 +1762,6 @@
if(event->val == KM_PRESS){
/* add uv under mouse to processed uv's */
float co[2];
- //EditVert *vert;
NearestHit hit;
ARegion *ar= CTX_wm_region(C);
Image *ima= CTX_data_edit_image(C);
@@ -1784,13 +1771,15 @@
find_nearest_uv_vert(scene, ima, stitch_state->em, co, NULL, &hit);
if(hit.efa)
{
- /*todo add display update for selected verts */
- /*todo add to preview faces too*/
- BLI_ghash_insert(stitch_state->vertices, &((hit.efa->v1+hit.vert)->tmp.l), NULL);
- BLI_ghash_insert(stitch_state->faces, hit.efa, NULL);
+ EditVert *vert = hit.efa->v1+hit.uv;
+ /* This looks like recipe for trouble...sigh! */
+ vert->tmp.l = hit.vert;
+ if(!BLI_ghash_haskey(stitch_state->vertices, vert))
+ BLI_ghash_insert(stitch_state->vertices, vert, NULL);
}
+ stitch_prepare_preview_data(stitch_state);
}
- return OPERATOR_RUNNING_MODAL;
+ break;
/* turn preview on/off */
case PKEY:
More information about the Bf-blender-cvs
mailing list