From 3097d6fdb3bca642337112a38bcb3a385b7bbe57 Mon Sep 17 00:00:00 2001 From: nathan Date: Mon, 20 Jan 2020 00:01:45 -0800 Subject: [PATCH] quadtree working, poly drawing Former-commit-id: f56b05b892922905cad6aeb8dcee279f130fa2f8 Former-commit-id: 55da641509850e377a9cce46253ee5dcb8cb4a7c --- draw.c | 138 ++++++++++++++++++++++++++++++--------- draw.o.REMOVED.git-id | 2 +- mapdata.c.REMOVED.git-id | 2 +- mapdata.o.REMOVED.git-id | 2 +- view1090.REMOVED.git-id | 2 +- 5 files changed, 110 insertions(+), 36 deletions(-) diff --git a/draw.c b/draw.c index e6287c5..99f78a1 100644 --- a/draw.c +++ b/draw.c @@ -373,70 +373,144 @@ void drawGrid() void drawPolys(QuadTree *tree, double screen_lat_min, double screen_lat_max, double screen_lon_min, double screen_lon_max) { + // int skip = (int)(appData.maxDist / 25.0f); + // if(skip < 2) { + // skip = 2; + // } + int skip = 1; + + if(tree == NULL) { return; } + if (tree->lat_min > screen_lat_max || screen_lat_min > tree->lat_max) { + return; + } + + if (tree->lon_min > screen_lon_max || screen_lon_min > tree->lon_max) + return; + double dx, dy; int x, y; - if (!(tree->lat_min < screen_lat_min && - tree->lat_max > screen_lat_max && - tree->lon_min < screen_lon_min && - tree->lon_max > screen_lon_max)) { - return; - } + drawPolys(tree->nw, screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); + drawPolys(tree->sw, screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); + drawPolys(tree->ne, screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); + drawPolys(tree->se, screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); + + // if(!(tree->lat_min > screen_lat_min && + // tree->lat_max < screen_lat_max && + // tree->lon_min > screen_lon_min && + // tree->lon_max < screen_lon_max)){ + // //printf("%f %f\n", tree->lat_min, screen_lat_min); + // return; + // } + + //Draw quadtree bounds + // pxFromLonLat(&dx, &dy, tree->lon_min, tree->lat_min); + // screenCoords(&x, &y, dx, dy); + + // int top = y; + // int left = x; + + // pxFromLonLat(&dx, &dy, tree->lon_max, tree->lat_max); + // screenCoords(&x, &y, dx, dy); + + // int bottom = y; + // int right = x; + +// rectangleRGBA(appData.renderer, left, top, right, bottom, red.r, red.g, red.b, 255); + Polygon *currentPolygon = tree->polygons; while(currentPolygon != NULL) { - // Sint16 *px = (Sint16*)malloc(sizeof(Sint16*)*currentPolygon->numPoints); - // Sint16 *py = (Sint16*)malloc(sizeof(Sint16*)*currentPolygon->numPoints); - // for(int i=0; inumPoints; i++) { - // pxFromLonLat(&dx, &dy, currentPolygon->points[i].lat, currentPolygon->points[i].lon); - // screenCoords(&x, &y, dx, dy); + Sint16 *px = (Sint16*)malloc(sizeof(Sint16*)*currentPolygon->numPoints); + Sint16 *py = (Sint16*)malloc(sizeof(Sint16*)*currentPolygon->numPoints); - // px[i] = x; - // py[i] = y; + Point *currentPoint = currentPolygon->points; + + int i = 0; + while(currentPoint != NULL){ + pxFromLonLat(&dx, &dy, currentPoint->lon, currentPoint->lat); + screenCoords(&x, &y, dx, dy); + + px[i] = x; + py[i] = y; + + i++; + + for(int k = 0; k < skip; k++) { + currentPoint = currentPoint->next; + if(currentPoint == NULL) + break; + } + } + + double alpha = 1.0; + //filledPolygonRGBA (appData.renderer, px, py, i, 0, 0, 0, 255); + + polygonRGBA (appData.renderer, px, py, i, alpha * purple.r + (1.0-alpha) * blue.r, alpha * purple.g + (1.0-alpha) * blue.g, alpha * purple.b + (1.0-alpha) * blue.b, 255 * alpha); + + + //// line version + + // int x1,y1,x2,y2; + + // if(currentPolygon->points == NULL) + // continue; + + // Point *prevPoint = currentPolygon->points; + // Point *currentPoint = prevPoint->next; + + // while(currentPoint != NULL){ + // pxFromLonLat(&dx, &dy, prevPoint->lon, prevPoint->lat); + // screenCoords(&x1, &y1, dx, dy); + + // pxFromLonLat(&dx, &dy, currentPoint->lon, currentPoint->lat); + // screenCoords(&x2, &y2, dx, dy); + + // double alpha = 1.0; + // thickLineRGBA(appData.renderer, x1, y1, x2, y2, appData.screen_uiscale, alpha * purple.r + (1.0-alpha) * blue.r, alpha * purple.g + (1.0-alpha) * blue.g, alpha * purple.b + (1.0-alpha) * blue.b, 255 * alpha); + + // prevPoint = currentPoint; + // currentPoint = currentPoint->next; // } - // double alpha = 1.0; + ////bounding boxes - pxFromLonLat(&dx, &dy, currentPolygon->lat_min, currentPolygon->lon_min); - screenCoords(&x, &y, dx, dy); + // pxFromLonLat(&dx, &dy, currentPolygon->lon_min, currentPolygon->lat_min); + // screenCoords(&x, &y, dx, dy); - int top = y; - int left = x; + // int top = y; + // int left = x; - pxFromLonLat(&dx, &dy, currentPolygon->lat_max, currentPolygon->lon_max); - screenCoords(&x, &y, dx, dy); + // pxFromLonLat(&dx, &dy, currentPolygon->lon_max, currentPolygon->lat_max); + // screenCoords(&x, &y, dx, dy); - int bottom = y; - int right = x; + // int bottom = y; + // int right = x; - //polygonRGBA (appData.renderer, px, py, currentPolygon->numPoints, alpha * purple.r + (1.0-alpha) * blue.r, alpha * purple.g + (1.0-alpha) * blue.g, alpha * purple.b + (1.0-alpha) * blue.b, 255 * alpha); - rectangleRGBA(appData.renderer, left, top, right, bottom, purple.r, purple.g, purple.b, 255); + // rectangleRGBA(appData.renderer, left, top, right, bottom, purple.r, purple.g, purple.b, 255); currentPolygon = currentPolygon->next; } - - //drawPolys(tree->nw, screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); - //drawPolys(tree->sw, screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); - //drawPolys(tree->ne, screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); - //drawPolys(tree->se, screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); } void drawGeography() { double screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max; - latLonFromScreenCoords(&screen_lon_min, &screen_lat_min, 0, 0); - latLonFromScreenCoords(&screen_lon_max, &screen_lat_max, appData.screen_width, appData.screen_height); + latLonFromScreenCoords(&screen_lat_min, &screen_lon_min, 0, 0); + latLonFromScreenCoords(&screen_lat_max, &screen_lon_max, appData.screen_width, appData.screen_height); + + //printf("lat_min: %f, lat_max: %f, lon_min: %f, lon_max: %f\n", screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); drawPolys(&root, screen_lat_min, screen_lat_max, screen_lon_min, screen_lon_max); @@ -911,7 +985,7 @@ void draw() { updateStatus(); - SDL_SetRenderDrawColor( appData.renderer, 0, 0, 0, 0); + SDL_SetRenderDrawColor( appData.renderer, 0, 15, 30, 0); SDL_RenderClear(appData.renderer); diff --git a/draw.o.REMOVED.git-id b/draw.o.REMOVED.git-id index f402cfa..f1ac2e9 100644 --- a/draw.o.REMOVED.git-id +++ b/draw.o.REMOVED.git-id @@ -1 +1 @@ -737abac0c33061fb6e1c86993e1b329d8a451dcd \ No newline at end of file +b44aeb09f69d729d671d17f19bfd669b615a3702 \ No newline at end of file diff --git a/mapdata.c.REMOVED.git-id b/mapdata.c.REMOVED.git-id index 3a02d0f..0d655a8 100644 --- a/mapdata.c.REMOVED.git-id +++ b/mapdata.c.REMOVED.git-id @@ -1 +1 @@ -212d4fb6e7ea7b3c502081037abbac1fbdd9fccf \ No newline at end of file +1392d6dd9fcc07ddac1768bd620a3355a2f836eb \ No newline at end of file diff --git a/mapdata.o.REMOVED.git-id b/mapdata.o.REMOVED.git-id index abf0145..d3d8c64 100644 --- a/mapdata.o.REMOVED.git-id +++ b/mapdata.o.REMOVED.git-id @@ -1 +1 @@ -1c1e7d6bdf081956022b7592b8d59a929da2f463 \ No newline at end of file +76782b1a281904545022bc5880c90dcc50d20ec5 \ No newline at end of file diff --git a/view1090.REMOVED.git-id b/view1090.REMOVED.git-id index 7d1f834..e724a1e 100644 --- a/view1090.REMOVED.git-id +++ b/view1090.REMOVED.git-id @@ -1 +1 @@ -59d9fddeaaf6bf38d20131f49c0ce5c67d56749c \ No newline at end of file +4a7d01d6e64697656eef39194bc58105fdcba550 \ No newline at end of file