diff options
Diffstat (limited to 'source/blender/editors/sculpt_paint/sculpt_uv.c')
-rw-r--r-- | source/blender/editors/sculpt_paint/sculpt_uv.c | 150 |
1 files changed, 75 insertions, 75 deletions
diff --git a/source/blender/editors/sculpt_paint/sculpt_uv.c b/source/blender/editors/sculpt_paint/sculpt_uv.c index de1238dabd7..f902c88d5f0 100644 --- a/source/blender/editors/sculpt_paint/sculpt_uv.c +++ b/source/blender/editors/sculpt_paint/sculpt_uv.c @@ -156,7 +156,7 @@ typedef struct Temp_UvData{ -void HC_relaxation_iteration_uv(BMEditMesh *em, UvSculptData *sculptdata, float mouse_coord[2], float alpha, float radius, float aspectRatio){ +void HC_relaxation_iteration_uv(BMEditMesh *em, UvSculptData *sculptdata, float mouse_coord[2], float alpha, float radius, float aspectRatio) { Temp_UVData *tmp_uvdata; float diff[2]; int i; @@ -166,7 +166,7 @@ void HC_relaxation_iteration_uv(BMEditMesh *em, UvSculptData *sculptdata, float tmp_uvdata = (Temp_UVData *)MEM_callocN(sculptdata->totalUniqueUvs * sizeof(Temp_UVData), "Temporal data"); /* counting neighbors */ - for (i = 0; i < sculptdata->totalUvEdges; i++){ + for (i = 0; i < sculptdata->totalUvEdges; i++) { UvEdge *tmpedge = sculptdata->uvedges+i; tmp_uvdata[tmpedge->uv1].ncounter++; tmp_uvdata[tmpedge->uv2].ncounter++; @@ -175,7 +175,7 @@ void HC_relaxation_iteration_uv(BMEditMesh *em, UvSculptData *sculptdata, float add_v2_v2(tmp_uvdata[tmpedge->uv1].sum_co, sculptdata->uv[tmpedge->uv2].uv); } - for (i = 0; i < sculptdata->totalUniqueUvs; i++){ + for (i = 0; i < sculptdata->totalUniqueUvs; i++) { copy_v2_v2(diff,tmp_uvdata[i].sum_co); mul_v2_fl(diff,1.f/tmp_uvdata[i].ncounter); copy_v2_v2(tmp_uvdata[i].p,diff); @@ -184,23 +184,23 @@ void HC_relaxation_iteration_uv(BMEditMesh *em, UvSculptData *sculptdata, float tmp_uvdata[i].b[1] = diff[1] - sculptdata->uv[i].uv[1]; } - for (i = 0; i < sculptdata->totalUvEdges; i++){ + for (i = 0; i < sculptdata->totalUvEdges; i++) { UvEdge *tmpedge = sculptdata->uvedges+i; add_v2_v2(tmp_uvdata[tmpedge->uv1].sum_b, tmp_uvdata[tmpedge->uv2].b); add_v2_v2(tmp_uvdata[tmpedge->uv2].sum_b, tmp_uvdata[tmpedge->uv1].b); } - for (i = 0; i < sculptdata->totalUniqueUvs; i++){ + for (i = 0; i < sculptdata->totalUniqueUvs; i++) { float dist; /* This is supposed to happen only if "Pin Edges" is on, since we have initialization on stroke start * If ever uv brushes get their own mode we should check for toolsettings option too */ - if((sculptdata->uv[i].flag & MARK_BOUNDARY)){ + if ((sculptdata->uv[i].flag & MARK_BOUNDARY)) { continue; } sub_v2_v2v2(diff, sculptdata->uv[i].uv, mouse_coord); diff[1] /= aspectRatio; - if((dist = dot_v2v2(diff, diff)) <= radius){ + if ((dist = dot_v2v2(diff, diff)) <= radius) { UvElement *element; float strength; strength = alpha*brush_curve_strength(brush, sqrt(dist), radius_root); @@ -208,11 +208,11 @@ void HC_relaxation_iteration_uv(BMEditMesh *em, UvSculptData *sculptdata, float sculptdata->uv[i].uv[0] = (1.0-strength)*sculptdata->uv[i].uv[0] + strength*(tmp_uvdata[i].p[0] - 0.5f*(tmp_uvdata[i].b[0] + tmp_uvdata[i].sum_b[0]/tmp_uvdata[i].ncounter)); sculptdata->uv[i].uv[1] = (1.0-strength)*sculptdata->uv[i].uv[1] + strength*(tmp_uvdata[i].p[1] - 0.5f*(tmp_uvdata[i].b[1] + tmp_uvdata[i].sum_b[1]/tmp_uvdata[i].ncounter)); - for(element = sculptdata->uv[i].element; element; element = element->next){ + for (element = sculptdata->uv[i].element; element; element = element->next) { MLoopUV *luv; BMLoop *l; - if(element->separate && element != sculptdata->uv[i].element) + if (element->separate && element != sculptdata->uv[i].element) break; l = element->l; @@ -238,7 +238,7 @@ static void laplacian_relaxation_iteration_uv(BMEditMesh *em, UvSculptData *scul tmp_uvdata = (Temp_UVData *)MEM_callocN(sculptdata->totalUniqueUvs * sizeof(Temp_UVData), "Temporal data"); /* counting neighbors */ - for (i = 0; i < sculptdata->totalUvEdges; i++){ + for (i = 0; i < sculptdata->totalUvEdges; i++) { UvEdge *tmpedge = sculptdata->uvedges+i; tmp_uvdata[tmpedge->uv1].ncounter++; tmp_uvdata[tmpedge->uv2].ncounter++; @@ -249,22 +249,22 @@ static void laplacian_relaxation_iteration_uv(BMEditMesh *em, UvSculptData *scul /* Original Lacplacian algorithm included removal of normal component of translation. here it is not * needed since we translate along the UV plane always.*/ - for (i = 0; i < sculptdata->totalUniqueUvs; i++){ + for (i = 0; i < sculptdata->totalUniqueUvs; i++) { copy_v2_v2(tmp_uvdata[i].p, tmp_uvdata[i].sum_co); mul_v2_fl(tmp_uvdata[i].p, 1.f/tmp_uvdata[i].ncounter); } - for (i = 0; i < sculptdata->totalUniqueUvs; i++){ + for (i = 0; i < sculptdata->totalUniqueUvs; i++) { float dist; /* This is supposed to happen only if "Pin Edges" is on, since we have initialization on stroke start * If ever uv brushes get their own mode we should check for toolsettings option too */ - if((sculptdata->uv[i].flag & MARK_BOUNDARY)){ + if ((sculptdata->uv[i].flag & MARK_BOUNDARY)) { continue; } sub_v2_v2v2(diff, sculptdata->uv[i].uv, mouse_coord); diff[1] /= aspectRatio; - if((dist = dot_v2v2(diff, diff)) <= radius){ + if ((dist = dot_v2v2(diff, diff)) <= radius) { UvElement *element; float strength; strength = alpha*brush_curve_strength(brush, sqrt(dist), radius_root); @@ -272,11 +272,11 @@ static void laplacian_relaxation_iteration_uv(BMEditMesh *em, UvSculptData *scul sculptdata->uv[i].uv[0] = (1.0-strength)*sculptdata->uv[i].uv[0] + strength*tmp_uvdata[i].p[0]; sculptdata->uv[i].uv[1] = (1.0-strength)*sculptdata->uv[i].uv[1] + strength*tmp_uvdata[i].p[1]; - for(element = sculptdata->uv[i].element; element; element = element->next){ + for (element = sculptdata->uv[i].element; element; element = element->next) { MLoopUV *luv; BMLoop *l; - if(element->separate && element != sculptdata->uv[i].element) + if (element->separate && element != sculptdata->uv[i].element) break; l = element->l; @@ -326,20 +326,20 @@ static void uv_sculpt_stroke_apply(bContext *C, wmOperator *op, wmEvent *event, /* * Pinch Tool */ - if(tool == UV_SCULPT_TOOL_PINCH){ + if (tool == UV_SCULPT_TOOL_PINCH) { int i; alpha *= invert; - for (i = 0; i < sculptdata->totalUniqueUvs; i++){ + for (i = 0; i < sculptdata->totalUniqueUvs; i++) { float dist, diff[2]; /* This is supposed to happen only if "Lock Borders" is on, since we have initialization on stroke start * If ever uv brushes get their own mode we should check for toolsettings option too */ - if(sculptdata->uv[i].flag & MARK_BOUNDARY){ + if (sculptdata->uv[i].flag & MARK_BOUNDARY) { continue; } sub_v2_v2v2(diff, sculptdata->uv[i].uv, co); diff[1] /= aspectRatio; - if((dist = dot_v2v2(diff, diff)) <= radius){ + if ((dist = dot_v2v2(diff, diff)) <= radius) { UvElement *element; float strength; strength = alpha*brush_curve_strength(brush, sqrt(dist), radius_root); @@ -348,11 +348,11 @@ static void uv_sculpt_stroke_apply(bContext *C, wmOperator *op, wmEvent *event, sculptdata->uv[i].uv[0] -= strength*diff[0]*0.001; sculptdata->uv[i].uv[1] -= strength*diff[1]*0.001; - for(element = sculptdata->uv[i].element; element; element = element->next){ + for (element = sculptdata->uv[i].element; element; element = element->next) { MLoopUV *luv; BMLoop *l; - if(element->separate && element != sculptdata->uv[i].element) + if (element->separate && element != sculptdata->uv[i].element) break; l = element->l; @@ -366,9 +366,9 @@ static void uv_sculpt_stroke_apply(bContext *C, wmOperator *op, wmEvent *event, /* * Smooth Tool */ - else if(tool == UV_SCULPT_TOOL_RELAX){ + else if (tool == UV_SCULPT_TOOL_RELAX) { unsigned int method = toolsettings->uv_relax_method; - if(method == UV_SCULPT_TOOL_RELAX_HC){ + if (method == UV_SCULPT_TOOL_RELAX_HC) { HC_relaxation_iteration_uv(em, sculptdata, co, alpha, radius, aspectRatio); }else{ laplacian_relaxation_iteration_uv(em, sculptdata, co, alpha, radius, aspectRatio); @@ -378,23 +378,23 @@ static void uv_sculpt_stroke_apply(bContext *C, wmOperator *op, wmEvent *event, /* * Grab Tool */ - else if(tool == UV_SCULPT_TOOL_GRAB){ + else if (tool == UV_SCULPT_TOOL_GRAB) { int i; float diff[2]; sub_v2_v2v2(diff, co, sculptdata->initial_stroke->init_coord); - for(i = 0; i < sculptdata->initial_stroke->totalInitialSelected; i++ ){ + for (i = 0; i < sculptdata->initial_stroke->totalInitialSelected; i++ ) { UvElement *element; int uvindex = sculptdata->initial_stroke->initialSelection[i].uv; float strength = sculptdata->initial_stroke->initialSelection[i].strength; sculptdata->uv[uvindex].uv[0] = sculptdata->initial_stroke->initialSelection[i].initial_uv[0] + strength*diff[0]; sculptdata->uv[uvindex].uv[1] = sculptdata->initial_stroke->initialSelection[i].initial_uv[1] + strength*diff[1]; - for(element = sculptdata->uv[uvindex].element; element; element = element->next){ + for (element = sculptdata->uv[uvindex].element; element; element = element->next) { MLoopUV *luv; BMLoop *l; - if(element->separate && element != sculptdata->uv[uvindex].element) + if (element->separate && element != sculptdata->uv[uvindex].element) break; l = element->l; @@ -409,21 +409,21 @@ static void uv_sculpt_stroke_apply(bContext *C, wmOperator *op, wmEvent *event, static void uv_sculpt_stroke_exit(bContext *C, wmOperator *op) { UvSculptData *data = op->customdata; - if(data->timer){ + if (data->timer) { WM_event_remove_timer(CTX_wm_manager(C), CTX_wm_window(C), data->timer); } - if(data->elementMap) + if (data->elementMap) { EDBM_free_uv_element_map(data->elementMap); } - if(data->uv){ + if (data->uv) { MEM_freeN(data->uv); } - if(data->uvedges){ + if (data->uvedges) { MEM_freeN(data->uvedges); } - if(data->initial_stroke){ - if(data->initial_stroke->initialSelection){ + if (data->initial_stroke) { + if (data->initial_stroke->initialSelection) { MEM_freeN(data->initial_stroke->initialSelection); } MEM_freeN(data->initial_stroke); @@ -433,27 +433,27 @@ static void uv_sculpt_stroke_exit(bContext *C, wmOperator *op) op->customdata = NULL; } -static int get_uv_element_offset_from_face(UvElementMap *map, BMFace *efa, BMLoop *l, int island_index, int doIslands){ +static int get_uv_element_offset_from_face(UvElementMap *map, BMFace *efa, BMLoop *l, int island_index, int doIslands) { UvElement *element = ED_get_uv_element(map, efa, l); - if(!element || (doIslands && element->island != island_index)){ + if (!element || (doIslands && element->island != island_index)) { return -1; } return element - map->buf; } -static unsigned int uv_edge_hash(const void *key){ +static unsigned int uv_edge_hash(const void *key) { UvEdge *edge = (UvEdge *)key; return BLI_ghashutil_inthash(SET_INT_IN_POINTER(edge->uv2)) + BLI_ghashutil_inthash(SET_INT_IN_POINTER(edge->uv1)); } -static int uv_edge_compare(const void *a, const void *b){ +static int uv_edge_compare(const void *a, const void *b) { UvEdge *edge1 = (UvEdge *)a; UvEdge *edge2 = (UvEdge *)b; - if((edge1->uv1 == edge2->uv1) && (edge1->uv2 == edge2->uv2)){ + if ((edge1->uv1 == edge2->uv1) && (edge1->uv2 == edge2->uv2)) { return 0; } return 1; @@ -471,7 +471,7 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent op->customdata = data; - if(data){ + if (data) { int counter = 0, i; ARegion *ar= CTX_wm_region(C); float co[2]; @@ -493,22 +493,22 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent data->uvsculpt = &ts->uvsculpt->paint; - if(do_island_optimization){ + if (do_island_optimization) { /* We will need island information */ - if(ts->uv_flag & UV_SYNC_SELECTION){ + if (ts->uv_flag & UV_SYNC_SELECTION) { data->elementMap = EDBM_make_uv_element_map(em, 0, 1); }else{ data->elementMap = EDBM_make_uv_element_map(em, 1, 1); } }else { - if(ts->uv_flag & UV_SYNC_SELECTION){ + if (ts->uv_flag & UV_SYNC_SELECTION) { data->elementMap = EDBM_make_uv_element_map(em, 0, 0); }else{ data->elementMap = EDBM_make_uv_element_map(em, 1, 0); } } - if(!data->elementMap){ + if (!data->elementMap) { uv_sculpt_stroke_exit(C, op); return NULL; } @@ -517,7 +517,7 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1], &co[0], &co[1]); /* we need to find the active island here */ - if(do_island_optimization){ + if (do_island_optimization) { UvElement *element; NearestHit hit; Image *ima= CTX_data_edit_image(C); @@ -529,9 +529,9 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent /* Count 'unique' uvs */ - for(i = 0; i < data->elementMap->totalUVs; i++){ - if(data->elementMap->buf[i].separate - && (!do_island_optimization || data->elementMap->buf[i].island == island_index)){ + for (i = 0; i < data->elementMap->totalUVs; i++) { + if (data->elementMap->buf[i].separate + && (!do_island_optimization || data->elementMap->buf[i].island == island_index)) { counter++; } } @@ -542,14 +542,14 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent edgeHash = BLI_ghash_new(uv_edge_hash, uv_edge_compare, "uv_brush_edge_hash"); /* we have at most totalUVs edges */ edges = MEM_mallocN(sizeof(*edges)*data->elementMap->totalUVs, "uv_brush_all_edges"); - if(!data->uv || !uniqueUv || !edgeHash || !edges){ - if(edges){ + if (!data->uv || !uniqueUv || !edgeHash || !edges) { + if (edges) { MEM_freeN(edges); } - if(uniqueUv){ + if (uniqueUv) { MEM_freeN(uniqueUv); } - if(edgeHash){ + if (edgeHash) { MEM_freeN(edgeHash); } uv_sculpt_stroke_exit(C, op); @@ -560,13 +560,13 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent /* So that we can use this as index for the UvElements */ counter = -1; /* initialize the unique UVs */ - for(i = 0; i < bm->totvert; i++){ + for (i = 0; i < bm->totvert; i++) { UvElement *element = data->elementMap->vert[i]; - for(; element; element = element->next){ - if(element->separate){ - if(do_island_optimization && (element->island != island_index)){ + for (; element; element = element->next) { + if (element->separate) { + if (do_island_optimization && (element->island != island_index)) { /* skip this uv if not on the active island */ - for(; element->next && !(element->next->separate); element = element->next) + for (; element->next && !(element->next->separate); element = element->next) ; continue; } @@ -593,7 +593,7 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent int offset2, itmp2 = get_uv_element_offset_from_face(data->elementMap, efa, l->next, island_index, do_island_optimization); /* Skip edge if not found(unlikely) or not on valid island */ - if(itmp1 == -1 || itmp2 == -1) + if (itmp1 == -1 || itmp2 == -1) continue; offset1 = uniqueUv[itmp1]; @@ -602,7 +602,7 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent edges[counter].flag = 0; /* using an order policy, sort uvs according to address space. This avoids * Having two different UvEdges with the same uvs on different positions */ - if(offset1 < offset2){ + if (offset1 < offset2) { edges[counter].uv1 = offset1; edges[counter].uv2 = offset2; } @@ -611,7 +611,7 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent edges[counter].uv2 = offset1; } /* Hack! Set the value of the key to its flag. Now we can set the flag when an edge exists twice :) */ - if(BLI_ghash_haskey(edgeHash, &edges[counter])){ + if (BLI_ghash_haskey(edgeHash, &edges[counter])) { char *flag = BLI_ghash_lookup(edgeHash, &edges[counter]); *flag = 1; } @@ -627,21 +627,21 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent /* Allocate connectivity data, we allocate edges once */ data->uvedges = MEM_mallocN(sizeof(*data->uvedges)*BLI_ghash_size(edgeHash), "uv_brush_edge_connectivity_data"); - if(!data->uvedges){ + if (!data->uvedges) { BLI_ghash_free(edgeHash, NULL, NULL); MEM_freeN(edges); uv_sculpt_stroke_exit(C, op); return NULL; } ghi = BLI_ghashIterator_new(edgeHash); - if(!ghi){ + if (!ghi) { BLI_ghash_free(edgeHash, NULL, NULL); MEM_freeN(edges); uv_sculpt_stroke_exit(C, op); return NULL; } /* fill the edges with data */ - for(i = 0; !BLI_ghashIterator_isDone(ghi); BLI_ghashIterator_step(ghi)){ + for (i = 0; !BLI_ghashIterator_isDone(ghi); BLI_ghashIterator_step(ghi)) { data->uvedges[i++] = *((UvEdge *)BLI_ghashIterator_getKey(ghi)); } data->totalUvEdges = BLI_ghash_size(edgeHash); @@ -652,9 +652,9 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent MEM_freeN(edges); /* transfer boundary edge property to uvs */ - if(ts->uv_sculpt_settings & UV_SCULPT_LOCK_BORDERS){ - for(i = 0; i < data->totalUvEdges; i++){ - if(!data->uvedges[i].flag){ + if (ts->uv_sculpt_settings & UV_SCULPT_LOCK_BORDERS) { + for (i = 0; i < data->totalUvEdges; i++) { + if (!data->uvedges[i].flag) { data->uv[data->uvedges[i].uv1].flag |= MARK_BOUNDARY; data->uv[data->uvedges[i].uv2].flag |= MARK_BOUNDARY; } @@ -662,7 +662,7 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent } /* Allocate initial selection for grab tool */ - if(data->tool == UV_SCULPT_TOOL_GRAB){ + if (data->tool == UV_SCULPT_TOOL_GRAB) { float radius, radius_root; UvSculptData *sculptdata = (UvSculptData *)op->customdata; SpaceImage *sima; @@ -685,11 +685,11 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent /* Allocate selection stack */ data->initial_stroke = MEM_mallocN(sizeof(*data->initial_stroke), "uv_sculpt_initial_stroke"); - if(!data->initial_stroke){ + if (!data->initial_stroke) { uv_sculpt_stroke_exit(C, op); } data->initial_stroke->initialSelection = MEM_mallocN(sizeof(*data->initial_stroke->initialSelection)*data->totalUniqueUvs, "uv_sculpt_initial_selection"); - if(!data->initial_stroke->initialSelection){ + if (!data->initial_stroke->initialSelection) { uv_sculpt_stroke_exit(C, op); } @@ -697,15 +697,15 @@ static UvSculptData *uv_sculpt_stroke_init(bContext *C, wmOperator *op, wmEvent counter = 0; - for(i = 0; i < data->totalUniqueUvs; i++){ + for (i = 0; i < data->totalUniqueUvs; i++) { float dist, diff[2]; - if(data->uv[i].flag & MARK_BOUNDARY){ + if (data->uv[i].flag & MARK_BOUNDARY) { continue; } sub_v2_v2v2(diff, data->uv[i].uv, co); diff[1] /= aspectRatio; - if((dist = dot_v2v2(diff, diff)) <= radius){ + if ((dist = dot_v2v2(diff, diff)) <= radius) { float strength; strength = alpha*brush_curve_strength(brush, sqrt(dist), radius_root); @@ -728,7 +728,7 @@ static int uv_sculpt_stroke_invoke(bContext *C, wmOperator *op, wmEvent *event) UvSculptData *data; Object *obedit = CTX_data_edit_object(C); - if(!(data = uv_sculpt_stroke_init(C, op, event))) { + if (!(data = uv_sculpt_stroke_init(C, op, event))) { return OPERATOR_CANCELLED; } @@ -736,7 +736,7 @@ static int uv_sculpt_stroke_invoke(bContext *C, wmOperator *op, wmEvent *event) data->timer= WM_event_add_timer(CTX_wm_manager(C), CTX_wm_window(C), TIMER, 0.001f); - if(!data->timer){ + if (!data->timer) { uv_sculpt_stroke_exit(C, op); return OPERATOR_CANCELLED; } @@ -763,7 +763,7 @@ static int uv_sculpt_stroke_modal(bContext *C, wmOperator *op, wmEvent *event) uv_sculpt_stroke_apply(C, op, event, obedit); break; case TIMER: - if(event->customdata == data->timer) + if (event->customdata == data->timer) uv_sculpt_stroke_apply(C, op, event, obedit); break; default: |