cleanups
This commit is contained in:
parent
02812d30f5
commit
2ae5a7fe2e
@ -27,6 +27,24 @@ int pnpoly(int nvert, float *vert, float testx, float testy)
|
|||||||
|
|
||||||
//#define TESTING
|
//#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 compare_dups(const void *a, const void *b) {
|
||||||
int da = *((const int*) a);
|
int da = *((const int*) a);
|
||||||
int db = *((const int*) b);
|
int db = *((const int*) b);
|
||||||
@ -45,7 +63,7 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (isCopy)
|
if (isCopy)
|
||||||
printf("Poor bugger: VM copied array");
|
printf("... VM copied array");
|
||||||
|
|
||||||
float *points = orig_points + pos;
|
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.segmentlist = (int *) malloc(in.numberofpoints * 2 * sizeof(int));
|
||||||
in.numberofsegments = in.numberofpoints;
|
in.numberofsegments = in.numberofpoints;
|
||||||
in.numberofholes = num_rings - 1;
|
in.numberofholes = num_rings - 1;
|
||||||
@ -183,20 +194,12 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas
|
|||||||
|
|
||||||
if (dups) {
|
if (dups) {
|
||||||
for (int i = 0; i < dups; i++) {
|
for (int i = 0; i < dups; i++) {
|
||||||
printf(
|
printf("duplicate points at %d, %d: %f,%f\n",
|
||||||
"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]);
|
skip_list[i*2], skip_list[i*2+1],
|
||||||
}
|
in.pointlist[skip_list[i*2+1]*2],
|
||||||
// print poly format to check with triangle/showme
|
in.pointlist[skip_list[i*2+1]*2+1]);
|
||||||
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]);
|
|
||||||
}
|
}
|
||||||
|
printPoly(&in);
|
||||||
|
|
||||||
if (0) {
|
if (0) {
|
||||||
free(in.segmentlist);
|
free(in.segmentlist);
|
||||||
@ -220,7 +223,6 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas
|
|||||||
}
|
}
|
||||||
else if (dups > 2) {
|
else if (dups > 2) {
|
||||||
printf("sort dups\n");
|
printf("sort dups\n");
|
||||||
|
|
||||||
qsort(skip_list, dups, 2 * sizeof(float), compare_dups);
|
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;
|
*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)
|
if (in.numberofpoints - pos > 1)
|
||||||
memmove(in.pointlist + (pos * 2), in.pointlist + ((pos + 1) * 2),
|
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--;
|
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));
|
memset(&out, 0, sizeof(TriangleIO));
|
||||||
out.trianglelist = (INDICE*) indices;
|
out.trianglelist = (INDICE*) indices;
|
||||||
|
|
||||||
@ -298,14 +287,6 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas
|
|||||||
if (in.numberofpoints < out.numberofpoints) {
|
if (in.numberofpoints < out.numberofpoints) {
|
||||||
printf( "polygon input is bad! points in:%d out%d\n", 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);
|
(*env)->ReleasePrimitiveArrayCritical(env, obj_points, orig_points, JNI_ABORT);
|
||||||
free(in.segmentlist);
|
free(in.segmentlist);
|
||||||
free(in.holelist);
|
free(in.holelist);
|
||||||
@ -313,17 +294,6 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas
|
|||||||
return 0;
|
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;
|
INDICE *tri;
|
||||||
|
|
||||||
/* shift back indices from removed duplicates */
|
/* shift back indices from removed duplicates */
|
||||||
@ -332,6 +302,7 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas
|
|||||||
|
|
||||||
tri = out.trianglelist;
|
tri = out.trianglelist;
|
||||||
int n = out.numberoftriangles * 3;
|
int n = out.numberoftriangles * 3;
|
||||||
|
printf("shift back from: %d\n", pos);
|
||||||
|
|
||||||
for (; n-- > 0; tri++)
|
for (; n-- > 0; tri++)
|
||||||
if (*tri >= pos)
|
if (*tri >= pos)
|
||||||
@ -356,6 +327,10 @@ jint Java_org_oscim_renderer_layer_ExtrusionLayer_triangulate(JNIEnv *env, jclas
|
|||||||
int start = offset;
|
int start = offset;
|
||||||
for (int j = 0, m = in.numberofholes; j < m; j++) {
|
for (int j = 0, m = in.numberofholes; j < m; j++) {
|
||||||
start += rings[j] * stride;
|
start += rings[j] * stride;
|
||||||
|
|
||||||
|
if (dups)
|
||||||
|
printf("add offset from %d : %d\n", rings[j], (rings[j] & 1));
|
||||||
|
|
||||||
// even number of points?
|
// even number of points?
|
||||||
if (!(rings[j] & 1))
|
if (!(rings[j] & 1))
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user