[Bf-blender-cvs] [8bccac7] soc-2016-uv_tools: Alternative/more robust way to offset/place NFP
Phil Gosch
noreply at git.blender.org
Thu Jul 14 17:22:10 CEST 2016
Commit: 8bccac7ce50e890bffbb713f94fce982fbba8e1d
Author: Phil Gosch
Date: Thu Jul 14 17:16:43 2016 +0200
Branches: soc-2016-uv_tools
https://developer.blender.org/rB8bccac7ce50e890bffbb713f94fce982fbba8e1d
Alternative/more robust way to offset/place NFP
This fixes some of my testfiles
===================================================================
M source/blender/editors/uvedit/uvedit_parametrizer.c
===================================================================
diff --git a/source/blender/editors/uvedit/uvedit_parametrizer.c b/source/blender/editors/uvedit/uvedit_parametrizer.c
index 2f7c315..7535c02 100644
--- a/source/blender/editors/uvedit/uvedit_parametrizer.c
+++ b/source/blender/editors/uvedit/uvedit_parametrizer.c
@@ -5103,6 +5103,7 @@ PNoFitPolygon *p_no_fit_polygon_create(PConvexHull *item, PConvexHull *fixed)
PVert **points = (PVert **)MEM_mallocN(sizeof(PVert *) * nfp->nverts, "PNFPPoints");
nfp->final_pos = (PPointUV **)MEM_callocN(sizeof(*nfp->final_pos) * nfp->nverts, "PNFPFinalPos");
int i, j, offset_item = 0, offset_fixed = 0;
+ float trans[2];
/* Assign verts of hulls to NFP */
for (i = 0; i < nfp->nverts; i++) {
@@ -5153,27 +5154,41 @@ PNoFitPolygon *p_no_fit_polygon_create(PConvexHull *item, PConvexHull *fixed)
for (j = 1; j < nfp->nverts; j++) {
PPointUV *p1 = (PPointUV *)MEM_callocN(sizeof(*p1), "PPointUV1");
- /*p1->x = nfp->final_pos[j - 1]->x + points[j - 1]->u.delta_edge[0];
+ p1->x = nfp->final_pos[j - 1]->x + points[j - 1]->u.delta_edge[0];
p1->y = nfp->final_pos[j - 1]->y + points[j - 1]->u.delta_edge[1];
- nfp->final_pos[j] = p1;*/
-
- if ((j + offset_fixed) <= nfp->nverts) {
- p1->x = nfp->final_pos[j - 1]->x + points[j - 1 + offset_fixed]->u.delta_edge[0];
- p1->y = nfp->final_pos[j - 1]->y + points[j - 1 + offset_fixed]->u.delta_edge[1];
- nfp->final_pos[j] = p1;
- }
- else {
- /* j - 1 */
- p1->x = nfp->final_pos[j - 1]->x + points[(j + offset_fixed) - nfp->nverts]->u.delta_edge[0];
- p1->y = nfp->final_pos[j - 1]->y + points[(j + offset_fixed) - nfp->nverts]->u.delta_edge[1];
- nfp->final_pos[j] = p1;
+ nfp->final_pos[j] = p1;
+
+ //if ((j + offset_fixed) <= nfp->nverts) {
+ // p1->x = nfp->final_pos[j - 1]->x + points[j - 1 + offset_fixed]->u.delta_edge[0];
+ // p1->y = nfp->final_pos[j - 1]->y + points[j - 1 + offset_fixed]->u.delta_edge[1];
+ // nfp->final_pos[j] = p1;
+ //}
+ //else {
+ // /* j - 1 */
+ // p1->x = nfp->final_pos[j - 1]->x + points[(j + offset_fixed) - nfp->nverts]->u.delta_edge[0];
+ // p1->y = nfp->final_pos[j - 1]->y + points[(j + offset_fixed) - nfp->nverts]->u.delta_edge[1];
+ // nfp->final_pos[j] = p1;
+ //}
+ }
+ printf("-PPointUV creation done!\n");
+
+ /* Move nfp to ref vert */
+ if (offset_fixed != 0) {
+ trans[0] = nfp->final_pos[offset_fixed]->x - fixed->h_verts[fixed->ref_vert_index]->uv[0];
+ trans[1] = nfp->final_pos[offset_fixed]->y - fixed->h_verts[fixed->ref_vert_index]->uv[1];
+ printf("--trans: x: %f, y: %f\n", trans[0], trans[1]);
+ for (i = 0; i < nfp->nverts; i++) {
+ nfp->final_pos[i]->x -= trans[0];
+ nfp->final_pos[i]->y -= trans[1];
+ //nfp->final_pos[i]->x -= nfp->final_pos[offset_fixed]->x;
+ //nfp->final_pos[i]->y -= nfp->final_pos[offset_fixed]->y;
+ printf("--NFP Vert with offset applied: x: %f, y: %f\n", nfp->final_pos[i]->x, nfp->final_pos[i]->y);
}
}
-
- /* temp, do this at assignment */
- for (j = 0; j < nfp->nverts; j++) {
-
- printf("--NFP Vert: x: %f, y: %f\n", nfp->final_pos[j]->x, nfp->final_pos[j]->y);
+ else {
+ for (i = 0; i < nfp->nverts; i++) {
+ printf("--NFP Vert (offset == 0): x: %f, y: %f\n", nfp->final_pos[i]->x, nfp->final_pos[i]->y);
+ }
}
/* free memory */
@@ -5267,7 +5282,8 @@ bool p_chart_pack_individual(PHandle *phandle, PChart *item)
cur_iter++;
randf1 = BLI_rng_get_float(phandle->rng);
/*printf("-randf1 choosen as: %f\n", randf1);*/
- rand1 = (int)(randf1 * (float)(phandle->ncharts + 1));
+ //rand1 = (int)(randf1 * (float)(phandle->ncharts + 1));
+ rand1 = (int)(randf1 * (float)(phandle->ncharts));
if (nfps[rand1]) {
More information about the Bf-blender-cvs
mailing list