From 2ae5a7fe2e99c2d25b13c3ce9fd621435f32680a Mon Sep 17 00:00:00 2001 From: Hannes Janetzek Date: Mon, 8 Apr 2013 22:06:10 +0200 Subject: [PATCH] cleanups --- jni/triangle/TriangleJni.c | 87 ++++++++++++++------------------------ 1 file changed, 31 insertions(+), 56 deletions(-) diff --git a/jni/triangle/TriangleJni.c b/jni/triangle/TriangleJni.c index 7188b212..0813c0fd 100644 --- a/jni/triangle/TriangleJni.c +++ b/jni/triangle/TriangleJni.c @@ -27,6 +27,24 @@ int pnpoly(int nvert, float *vert, float testx, float testy) //#define TESTING + +static void printPoly(TriangleIO *in){ + // print poly format to check with triangle/showme + printf("%d 2 0 0\n", in->numberofpoints); + for (int j = 0; j < in->numberofpoints; j++) + printf("%d %f %f\n", j, in->pointlist[j*2], in->pointlist[j*2+1]); + + int *seg = in->segmentlist; + printf("%d 0\n", in->numberofsegments); + for (int j = 0; j < in->numberofsegments; j++, seg += 2) + printf("%d %d %d\n", j, *seg, *(seg+1)); + + printf("%d 0\n", in->numberofholes); + for (int j = 0; j < in->numberofholes; j++) { + printf("%d %f %f\n", j, in->holelist[j*2], in->holelist[j*2+1]); + } +} + int compare_dups(const void *a, const void *b) { int da = *((const int*) a); int db = *((const int*) b); @@ -45,7 +63,7 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas return 0; if (isCopy) - printf("Poor bugger: VM copied array"); + printf("... VM copied array"); float *points = orig_points + pos; @@ -97,13 +115,6 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas } } -#ifdef TESTING - for (i = 0; i < in.numberofpoints; i++) - { - printf("point: %f, %f\n", points[i*2], points[i*2+1]); - } - printf("points: %d, rings: %d\n", in.numberofpoints, num_rings); -#endif in.segmentlist = (int *) malloc(in.numberofpoints * 2 * sizeof(int)); in.numberofsegments = in.numberofpoints; in.numberofholes = num_rings - 1; @@ -183,20 +194,12 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas if (dups) { for (int i = 0; i < dups; i++) { - printf( - "duplicate points at %d, %d: %f,%f\n", skip_list[i*2], skip_list[i*2+1], in.pointlist[skip_list[i*2+1]*2], in.pointlist[skip_list[i*2+1]*2+1]); - } - // print poly format to check with triangle/showme - for (int j = 0; j < in.numberofpoints; j++) - printf("%d %f %f\n", j, in.pointlist[j*2], in.pointlist[j*2+1]); - - seg = in.segmentlist; - for (int j = 0; j < in.numberofsegments; j++, seg += 2) - printf("%d %d %d\n", j, *seg, *(seg+1)); - - for (int j = 0; j < in.numberofholes; j++) { - printf("%d %f %f\n", j, in.holelist[j*2], in.holelist[j*2+1]); + printf("duplicate points at %d, %d: %f,%f\n", + skip_list[i*2], skip_list[i*2+1], + in.pointlist[skip_list[i*2+1]*2], + in.pointlist[skip_list[i*2+1]*2+1]); } + printPoly(&in); if (0) { free(in.segmentlist); @@ -220,7 +223,6 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas } else if (dups > 2) { printf("sort dups\n"); - qsort(skip_list, dups, 2 * sizeof(float), compare_dups); } @@ -244,7 +246,7 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas *seg -= 1; } - printf( "move %d %d %d\n", pos, pos + 1, in.numberofpoints - pos - 1); + printf( "move %d to %d, cnt %d\n", pos + 1, pos, in.numberofpoints - pos - 1); if (in.numberofpoints - pos > 1) memmove(in.pointlist + (pos * 2), in.pointlist + ((pos + 1) * 2), @@ -252,22 +254,9 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas in.numberofpoints--; } + printPoly(&in); } -#ifdef TESTING - for (i = 0; i < in.numberofsegments; i++) - { - printf("segment: %d, %d\n", - in.segmentlist[i*2], in.segmentlist[i*2+1]); - } - - for (i = 0; i < in.numberofholes; i++) - { - printf("hole: %f, %f\n", - in.holelist[i*2], in.holelist[i*2+1]); - } -#endif - memset(&out, 0, sizeof(TriangleIO)); out.trianglelist = (INDICE*) indices; @@ -298,14 +287,6 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas if (in.numberofpoints < out.numberofpoints) { printf( "polygon input is bad! points in:%d out%d\n", in.numberofpoints, out.numberofpoints); - for (int j = 0; j < in.numberofpoints; j++) { - printf("%d %f %f\n", j, in.pointlist[j*2], in.pointlist[j*2+1]); - } - - seg = in.segmentlist; - for (int j = 0; j < in.numberofsegments; j++, seg += 2) { - printf("%d %d %d\n", j, *seg, *(seg+1)); - } (*env)->ReleasePrimitiveArrayCritical(env, obj_points, orig_points, JNI_ABORT); free(in.segmentlist); free(in.holelist); @@ -313,17 +294,6 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas return 0; } -#ifdef TESTING - printf( "triangles: %d\n", out.numberoftriangles); - - for (int i = 0; i < out.numberoftriangles; i++) - { - printf("> %d, %d, %d\n",out.trianglelist[i*3], - out.trianglelist[i*3+1], - out.trianglelist[i*3+2]); - } -#endif - INDICE *tri; /* shift back indices from removed duplicates */ @@ -332,6 +302,7 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas tri = out.trianglelist; int n = out.numberoftriangles * 3; + printf("shift back from: %d\n", pos); for (; n-- > 0; tri++) if (*tri >= pos) @@ -356,6 +327,10 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas int start = offset; for (int j = 0, m = in.numberofholes; j < m; j++) { start += rings[j] * stride; + + if (dups) + printf("add offset from %d : %d\n", rings[j], (rings[j] & 1)); + // even number of points? if (!(rings[j] & 1)) continue;