Implementation of QuadTree

- Constructor who create recursively the image
- Destructor who free the structure
- image method who create a black picture (temp)
This commit is contained in:
Mylloon 2022-05-08 17:37:15 +02:00
parent a512ca52b1
commit 4b0521bdfa
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

49
src/quadtree.cpp Normal file
View file

@ -0,0 +1,49 @@
#include "../includes/quadtree.hpp"
QuadTree::QuadTree(SDL_Surface * image, short niveau_p): niveau(niveau_p), couleur(calculeCouleur(image)), dimensions(image->w, image->h),
nord_ouest(nullptr), nord_est(nullptr), sud_ouest(nullptr), sud_est(nullptr) {
if(!verificationEgalitee(image)) {
std::array<SDL_Surface *, 4> image_coupe = coupeEnQuatre(image);
final = false;
nord_ouest = new QuadTree(image_coupe.at(0), niveau + 1);
nord_est = new QuadTree(image_coupe.at(1), niveau + 1);
sud_ouest = new QuadTree(image_coupe.at(2), niveau + 1);
sud_est = new QuadTree(image_coupe.at(3), niveau + 1);
}
}
QuadTree::~QuadTree(void) {
if(nord_ouest != nullptr) {
delete nord_ouest;
}
if(nord_est != nullptr) {
delete nord_est;
}
if(sud_ouest != nullptr) {
delete sud_ouest;
}
if(sud_est != nullptr) {
delete sud_est;
}
}
SDL_Surface * QuadTree::image(short niveau_p) {
// Temporaire, créer une image noire
(void)niveau_p;
SDL_Surface * nouvelle_image = SDL_CreateRGBSurface(0, dimensions.first, dimensions.second, 32, 0, 0, 0, 0);
if(SDL_LockSurface(nouvelle_image) == 0) {
SDL_memset(nouvelle_image->pixels, static_cast<int>(SDL_MapRGB(nouvelle_image->format, 0, 0, 0)), static_cast<size_t>(nouvelle_image->h * nouvelle_image->pitch));
SDL_UnlockSurface(nouvelle_image);
} else {
exit(1);
}
return nouvelle_image;
}
SDL_Color QuadTree::calculeCouleur(SDL_Surface *) { /* return SDL_Color(); */ }
bool QuadTree::verificationEgalitee(SDL_Surface *) { /* return true; */ }
std::array<SDL_Surface *, 4> QuadTree::coupeEnQuatre(SDL_Surface *) { /* return std::array<SDL_Surface *, 4>(); */ }