From 80aad0bd141673316e9ef3b2bbb24e2c563cf6e7 Mon Sep 17 00:00:00 2001 From: Yoann Date: Sun, 18 Dec 2011 14:35:49 +0100 Subject: [PATCH] Renomage de la fonction subdivide en split et ajout de la fonction de merge. --- main.cpp | 4 ++-- rules/batiment/batimentquad.cpp | 17 ++++++++++++++++- rules/batiment/batimentquad.hh | 4 +++- rules/batiment/batimentquadjardin.cpp | 17 ++++++++++++++++- rules/batiment/batimentquadjardin.hh | 4 +++- rules/batiment/batimentquadmaison.cpp | 17 ++++++++++++++++- rules/batiment/batimentquadmaison.hh | 4 +++- rules/chose.hh | 3 ++- rules/quartier/quartierquad.cpp | 17 ++++++++++++++++- rules/quartier/quartierquad.hh | 4 +++- rules/quartier/quartierquadangle.cpp | 17 ++++++++++++++++- rules/quartier/quartierquadangle.hh | 4 +++- rules/quartier/quartierquadcarre.cpp | 17 ++++++++++++++++- rules/quartier/quartierquadcarre.hh | 4 +++- rules/quartier/quartierquadrect.cpp | 17 ++++++++++++++++- rules/quartier/quartierquadrect.hh | 4 +++- rules/quartier/quartiertri.cpp | 17 ++++++++++++++++- rules/quartier/quartiertri.hh | 4 +++- rules/route/routequadcarrefour.cpp | 17 ++++++++++++++++- rules/route/routequadcarrefour.hh | 4 +++- rules/route/routequadchaussee.cpp | 17 ++++++++++++++++- rules/route/routequadchaussee.hh | 4 +++- rules/route/trottoirquadnormal.cpp | 17 ++++++++++++++++- rules/route/trottoirquadnormal.hh | 4 +++- rules/terrain/terrainquadherbe.cpp | 17 ++++++++++++++++- rules/terrain/terrainquadherbe.hh | 4 +++- 26 files changed, 232 insertions(+), 27 deletions(-) diff --git a/main.cpp b/main.cpp index 1139556..0adb618 100644 --- a/main.cpp +++ b/main.cpp @@ -10,7 +10,7 @@ // -> bâtiment dans le "bout" le plus "étroit", et lignes dans une seule direction dans le reste. void recursiveSubdivide(Chose* c) { - if (c->subdivide()) { + if (c->split()) { std::vector::iterator it; for (it = c->children.begin(); it != c->children.end(); ++it) { recursiveSubdivide(*it); @@ -27,7 +27,7 @@ int main() { Vertex sw(0, 0, 0); Vertex nw(0, size, 0); Chose* c = QuartierQuad::factory(Chose::initialSeed, 0, ne, se, sw, nw); - // c->subdivide(); + // c->split(); recursiveSubdivide(c); View *v = new View(c); diff --git a/rules/batiment/batimentquad.cpp b/rules/batiment/batimentquad.cpp index 73644cc..00e0555 100644 --- a/rules/batiment/batimentquad.cpp +++ b/rules/batiment/batimentquad.cpp @@ -10,6 +10,13 @@ BatimentQuad::BatimentQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw, Cardinal triangulation(); } +BatimentQuad::~BatimentQuad() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); +} + int BatimentQuad::width() { return this->ne.x - this->sw.x; } int BatimentQuad::height() { return this->ne.y - this->sw.y; } @@ -18,11 +25,19 @@ std::vector BatimentQuad::getBoundingBoxPoints() const { return list; } -bool BatimentQuad::subdivide() { +bool BatimentQuad::split() { factory(1,1,ne,se,sw,nw); return true; } +bool BatimentQuad::merge() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); + return true; +} + Chose* BatimentQuad::factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw) { int th = 20; // Terrain height. Quad q = Quad(ne,se,sw,nw); diff --git a/rules/batiment/batimentquad.hh b/rules/batiment/batimentquad.hh index 4308111..7337c39 100644 --- a/rules/batiment/batimentquad.hh +++ b/rules/batiment/batimentquad.hh @@ -17,9 +17,11 @@ class BatimentQuad : public Chose { static const int maxHeight = 800; BatimentQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw, Cardinal door); + virtual ~BatimentQuad(); int width(); int height(); - virtual bool subdivide(); + virtual bool split(); + virtual bool merge(); virtual void triangulation(); Chose* factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw); virtual std::vector getBoundingBoxPoints() const; diff --git a/rules/batiment/batimentquadjardin.cpp b/rules/batiment/batimentquadjardin.cpp index 932a040..fe9b94e 100644 --- a/rules/batiment/batimentquadjardin.cpp +++ b/rules/batiment/batimentquadjardin.cpp @@ -5,6 +5,13 @@ BatimentQuadJardin::BatimentQuadJardin(Vertex ne, Vertex se, Vertex sw, Vertex n triangulation(); } +BatimentQuadJardin::~BatimentQuadJardin() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); +} + int BatimentQuadJardin::width() { return this->ne.x - this->sw.x; } int BatimentQuadJardin::height() { return this->ne.y - this->sw.y; } @@ -14,11 +21,19 @@ std::vector BatimentQuadJardin::getBoundingBoxPoints() const { return list; } -bool BatimentQuadJardin::subdivide() { +bool BatimentQuadJardin::split() { return true; } +bool BatimentQuadJardin::merge() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); + return true; +} + void BatimentQuadJardin::triangulation() { triangles.reserve(2); diff --git a/rules/batiment/batimentquadjardin.hh b/rules/batiment/batimentquadjardin.hh index 4be7156..b048706 100644 --- a/rules/batiment/batimentquadjardin.hh +++ b/rules/batiment/batimentquadjardin.hh @@ -16,9 +16,11 @@ class BatimentQuadJardin : public Chose { static const int maxHeight = 800; BatimentQuadJardin(Vertex ne, Vertex se, Vertex sw, Vertex nw); + virtual ~BatimentQuadJardin(); int width(); int height(); - virtual bool subdivide(); + virtual bool split(); + virtual bool merge(); virtual void triangulation(); Chose* factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw); virtual std::vector getBoundingBoxPoints() const; diff --git a/rules/batiment/batimentquadmaison.cpp b/rules/batiment/batimentquadmaison.cpp index 49dca45..5311552 100644 --- a/rules/batiment/batimentquadmaison.cpp +++ b/rules/batiment/batimentquadmaison.cpp @@ -5,6 +5,13 @@ BatimentQuadMaison::BatimentQuadMaison(Vertex ne, Vertex se, Vertex sw, Vertex n triangulation(); } +BatimentQuadMaison::~BatimentQuadMaison() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); +} + int BatimentQuadMaison::width() { return this->ne.x - this->sw.x; } int BatimentQuadMaison::height() { return this->ne.y - this->sw.y; } @@ -14,11 +21,19 @@ std::vector BatimentQuadMaison::getBoundingBoxPoints() const { return list; } -bool BatimentQuadMaison::subdivide() { +bool BatimentQuadMaison::split() { return true; } +bool BatimentQuadMaison::merge() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); + return true; +} + void BatimentQuadMaison::triangulation() { triangles.reserve(12); diff --git a/rules/batiment/batimentquadmaison.hh b/rules/batiment/batimentquadmaison.hh index c9c69e9..f90356a 100644 --- a/rules/batiment/batimentquadmaison.hh +++ b/rules/batiment/batimentquadmaison.hh @@ -16,9 +16,11 @@ class BatimentQuadMaison : public Chose { static const int maxHeight = 800; BatimentQuadMaison(Vertex ne, Vertex se, Vertex sw, Vertex nw); + virtual ~BatimentQuadMaison(); int width(); int height(); - virtual bool subdivide(); + virtual bool split(); + virtual bool merge(); virtual void triangulation(); Chose* factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw); virtual std::vector getBoundingBoxPoints() const; diff --git a/rules/chose.hh b/rules/chose.hh index 0ee2bb8..64fe8f5 100644 --- a/rules/chose.hh +++ b/rules/chose.hh @@ -16,7 +16,8 @@ class Chose { public : void display(); - virtual bool subdivide() = 0; + virtual bool split() = 0; + virtual bool merge() = 0; protected : Chose(); diff --git a/rules/quartier/quartierquad.cpp b/rules/quartier/quartierquad.cpp index 89ff6e8..6b076d7 100644 --- a/rules/quartier/quartierquad.cpp +++ b/rules/quartier/quartierquad.cpp @@ -8,6 +8,13 @@ QuartierQuad::QuartierQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw) : Chose() corner[NW] = nw; } +QuartierQuad::~QuartierQuad() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); +} + std::vector QuartierQuad::getBoundingBoxPoints() const { std::vector list; return list; @@ -38,10 +45,18 @@ Chose* QuartierQuad::factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, V } } -bool QuartierQuad::subdivide() { +bool QuartierQuad::split() { return false; } +bool QuartierQuad::merge() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); + return true; +} + void QuartierQuad::triangulation() { triangles.reserve(2); addTriangle(new Triangle(corner[NE], corner[NW], corner[SW], 0xc0, 0xc0, 0xc0)); diff --git a/rules/quartier/quartierquad.hh b/rules/quartier/quartierquad.hh index a527caf..5daa3e7 100644 --- a/rules/quartier/quartierquad.hh +++ b/rules/quartier/quartierquad.hh @@ -9,7 +9,9 @@ public: Vertex corner[4]; public: QuartierQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw); - virtual bool subdivide(); + virtual ~QuartierQuad(); + virtual bool split(); + virtual bool merge(); virtual void triangulation(); static Chose* factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw); virtual std::vector getBoundingBoxPoints() const; diff --git a/rules/quartier/quartierquadangle.cpp b/rules/quartier/quartierquadangle.cpp index a7eb863..37ad470 100644 --- a/rules/quartier/quartierquadangle.cpp +++ b/rules/quartier/quartierquadangle.cpp @@ -4,12 +4,19 @@ QuartierQuadAngle::QuartierQuadAngle(Vertex ne, Vertex se, Vertex sw, Vertex nw) triangulation(); } +QuartierQuadAngle::~QuartierQuadAngle() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); +} + std::vector QuartierQuadAngle::getBoundingBoxPoints() const { std::vector list; return list; } -bool QuartierQuadAngle::subdivide() { +bool QuartierQuadAngle::split() { for (int i = 0; i < 4; i++) { if (Triangle(corner[NW+i], corner[NE+i], corner[SE+i]).angle() >= Angle::d2r(130)) { Triangle t1(corner[NE+i], corner[SE+i], corner[SW+i]); @@ -59,3 +66,11 @@ bool QuartierQuadAngle::subdivide() { addChild(new TerrainQuadHerbe(corner[NE], corner[SE], corner[SW], corner[NW])); return true; } + +bool QuartierQuadAngle::merge() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); + return true; +} diff --git a/rules/quartier/quartierquadangle.hh b/rules/quartier/quartierquadangle.hh index d6993e1..35c555f 100644 --- a/rules/quartier/quartierquadangle.hh +++ b/rules/quartier/quartierquadangle.hh @@ -10,7 +10,9 @@ class QuartierQuadAngle : public QuartierQuad { public : QuartierQuadAngle(Vertex ne, Vertex se, Vertex sw, Vertex nw); - virtual bool subdivide(); + virtual ~QuartierQuadAngle(); + virtual bool split(); + virtual bool merge(); virtual std::vector getBoundingBoxPoints() const; private : diff --git a/rules/quartier/quartierquadcarre.cpp b/rules/quartier/quartierquadcarre.cpp index 8a4979a..fd31532 100644 --- a/rules/quartier/quartierquadcarre.cpp +++ b/rules/quartier/quartierquadcarre.cpp @@ -3,12 +3,19 @@ QuartierQuadCarre::QuartierQuadCarre(Vertex ne, Vertex se, Vertex sw, Vertex nw) : QuartierQuad(ne, se, sw, nw) { } +QuartierQuadCarre::~QuartierQuadCarre() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); +} + std::vector QuartierQuadCarre::getBoundingBoxPoints() const { std::vector list; return list; } -bool QuartierQuadCarre::subdivide() { +bool QuartierQuadCarre::split() { Vertex middle[4]; Quad q[4]; @@ -30,3 +37,11 @@ bool QuartierQuadCarre::subdivide() { } return true; } + +bool QuartierQuadCarre::merge() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); + return true; +} diff --git a/rules/quartier/quartierquadcarre.hh b/rules/quartier/quartierquadcarre.hh index 02ff970..8d554c8 100644 --- a/rules/quartier/quartierquadcarre.hh +++ b/rules/quartier/quartierquadcarre.hh @@ -10,7 +10,9 @@ class QuartierQuadCarre : public QuartierQuad { public : QuartierQuadCarre(Vertex ne, Vertex se, Vertex sw, Vertex nw); - virtual bool subdivide(); + virtual ~QuartierQuadCarre(); + virtual bool split(); + virtual bool merge(); virtual std::vector getBoundingBoxPoints() const; }; diff --git a/rules/quartier/quartierquadrect.cpp b/rules/quartier/quartierquadrect.cpp index bc93d39..bc79722 100644 --- a/rules/quartier/quartierquadrect.cpp +++ b/rules/quartier/quartierquadrect.cpp @@ -3,12 +3,19 @@ QuartierQuadRect::QuartierQuadRect(Vertex ne, Vertex se, Vertex sw, Vertex nw) : QuartierQuad(ne, se, sw, nw) { } +QuartierQuadRect::~QuartierQuadRect() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); +} + std::vector QuartierQuadRect::getBoundingBoxPoints() const { std::vector list; return list; } -bool QuartierQuadRect::subdivide() { +bool QuartierQuadRect::split() { Vertex n = Segment(corner[NW], corner[NE]).randomPos(seed, 0, 33, 67); Vertex s = Segment(corner[SE], corner[SW]).randomPos(seed, 1, 33, 67); @@ -22,3 +29,11 @@ bool QuartierQuadRect::subdivide() { addChild(QuartierQuad::factory(seed, 3, qw.corner[0], qw.corner[1], qw.corner[2], qw.corner[3])); return true; } + +bool QuartierQuadRect::merge() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); + return true; +} diff --git a/rules/quartier/quartierquadrect.hh b/rules/quartier/quartierquadrect.hh index 28c2f9a..fc5d5ea 100644 --- a/rules/quartier/quartierquadrect.hh +++ b/rules/quartier/quartierquadrect.hh @@ -10,7 +10,9 @@ class QuartierQuadRect : public QuartierQuad { public : QuartierQuadRect(Vertex ne, Vertex se, Vertex sw, Vertex nw); - virtual bool subdivide(); + virtual ~QuartierQuadRect(); + virtual bool split(); + virtual bool merge(); virtual std::vector getBoundingBoxPoints() const; }; diff --git a/rules/quartier/quartiertri.cpp b/rules/quartier/quartiertri.cpp index 41c669f..2fecf21 100644 --- a/rules/quartier/quartiertri.cpp +++ b/rules/quartier/quartiertri.cpp @@ -8,6 +8,13 @@ QuartierTri::QuartierTri(Vertex left, Vertex top, Vertex right) : Chose() { triangulation(); } +QuartierTri::~QuartierTri() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); +} + std::vector QuartierTri::getBoundingBoxPoints() const { std::vector list; return list; @@ -20,10 +27,18 @@ Chose* QuartierTri::factory(int seed, int n, Vertex left, Vertex top, Vertex rig return new QuartierTri(left, top, right); } -bool QuartierTri::subdivide() { +bool QuartierTri::split() { return false; } +bool QuartierTri::merge() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); + return true; +} + void QuartierTri::triangulation() { triangles.reserve(1); addTriangle(new Triangle(corner[0], corner[1], corner[2], 0xf0, 0xc0, 0xc0)); diff --git a/rules/quartier/quartiertri.hh b/rules/quartier/quartiertri.hh index dc12eb6..dcc3a13 100644 --- a/rules/quartier/quartiertri.hh +++ b/rules/quartier/quartiertri.hh @@ -10,7 +10,9 @@ class QuartierTri : public Chose { public : QuartierTri(Vertex left, Vertex top, Vertex right); - virtual bool subdivide(); + virtual ~QuartierTri(); + virtual bool split(); + virtual bool merge(); virtual void triangulation(); static Chose* factory(int seed, int n, Vertex left, Vertex top, Vertex right); virtual std::vector getBoundingBoxPoints() const; diff --git a/rules/route/routequadcarrefour.cpp b/rules/route/routequadcarrefour.cpp index 20503a5..14a1e5a 100644 --- a/rules/route/routequadcarrefour.cpp +++ b/rules/route/routequadcarrefour.cpp @@ -5,16 +5,31 @@ RouteQuadCarrefour::RouteQuadCarrefour(Vertex ne, Vertex se, Vertex sw, Vertex n triangulation(); } +RouteQuadCarrefour::~RouteQuadCarrefour() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); +} + std::vector RouteQuadCarrefour::getBoundingBoxPoints() const { std::vector list; return list; } -bool RouteQuadCarrefour::subdivide() { +bool RouteQuadCarrefour::split() { // TODO return false; } +bool RouteQuadCarrefour::merge() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); + return true; +} + void RouteQuadCarrefour::triangulation() { triangles.reserve(2); addTriangle(new Triangle(ne, nw, sw, 0x36, 0x36, 0x36)); diff --git a/rules/route/routequadcarrefour.hh b/rules/route/routequadcarrefour.hh index fed8082..5e74a17 100644 --- a/rules/route/routequadcarrefour.hh +++ b/rules/route/routequadcarrefour.hh @@ -12,7 +12,9 @@ class RouteQuadCarrefour : public Chose { public : RouteQuadCarrefour(Vertex ne, Vertex se, Vertex sw, Vertex nw); - virtual bool subdivide(); + virtual ~RouteQuadCarrefour(); + virtual bool split(); + virtual bool merge(); virtual void triangulation(); virtual std::vector getBoundingBoxPoints() const; }; diff --git a/rules/route/routequadchaussee.cpp b/rules/route/routequadchaussee.cpp index fc5e954..fd050ee 100644 --- a/rules/route/routequadchaussee.cpp +++ b/rules/route/routequadchaussee.cpp @@ -4,16 +4,31 @@ RouteQuadChaussee::RouteQuadChaussee(Vertex ne, Vertex se, Vertex sw, Vertex nw) triangulation(); } +RouteQuadChaussee::~RouteQuadChaussee() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); +} + std::vector RouteQuadChaussee::getBoundingBoxPoints() const { std::vector list; return list; } -bool RouteQuadChaussee::subdivide() { +bool RouteQuadChaussee::split() { // TODO return false; } +bool RouteQuadChaussee::merge() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); + return true; +} + void RouteQuadChaussee::triangulation() { triangles.reserve(2); addTriangle(new Triangle(ne, nw, sw, 0x36, 0x36, 0x36)); diff --git a/rules/route/routequadchaussee.hh b/rules/route/routequadchaussee.hh index 65f769b..b9a3fec 100644 --- a/rules/route/routequadchaussee.hh +++ b/rules/route/routequadchaussee.hh @@ -12,7 +12,9 @@ class RouteQuadChaussee : public Chose { public : RouteQuadChaussee(Vertex ne, Vertex se, Vertex sw, Vertex nw); - virtual bool subdivide(); + virtual ~RouteQuadChaussee(); + virtual bool split(); + virtual bool merge(); virtual void triangulation(); virtual std::vector getBoundingBoxPoints() const; }; diff --git a/rules/route/trottoirquadnormal.cpp b/rules/route/trottoirquadnormal.cpp index 74d0a9b..fd8d046 100644 --- a/rules/route/trottoirquadnormal.cpp +++ b/rules/route/trottoirquadnormal.cpp @@ -10,16 +10,31 @@ TrottoirQuadNormal::TrottoirQuadNormal(Vertex ne, Vertex se, Vertex sw, Vertex n triangulation(); } +TrottoirQuadNormal::~TrottoirQuadNormal() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); +} + std::vector TrottoirQuadNormal::getBoundingBoxPoints() const { std::vector list; return list; } -bool TrottoirQuadNormal::subdivide() { +bool TrottoirQuadNormal::split() { // TODO return false; } +bool TrottoirQuadNormal::merge() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); + return true; +} + void TrottoirQuadNormal::triangulation() { Vertex h = Vertex(0,0,height); Quad q = Quad(ne,se,sw,nw); diff --git a/rules/route/trottoirquadnormal.hh b/rules/route/trottoirquadnormal.hh index e1bf8a1..9d3cb29 100644 --- a/rules/route/trottoirquadnormal.hh +++ b/rules/route/trottoirquadnormal.hh @@ -14,7 +14,9 @@ class TrottoirQuadNormal : public Chose { public : TrottoirQuadNormal(Vertex ne, Vertex se, Vertex sw, Vertex nw, int height, Cardinal border); - virtual bool subdivide(); + virtual ~TrottoirQuadNormal(); + virtual bool split(); + virtual bool merge(); virtual void triangulation(); virtual std::vector getBoundingBoxPoints() const; }; diff --git a/rules/terrain/terrainquadherbe.cpp b/rules/terrain/terrainquadherbe.cpp index 1a3252c..e65d0a1 100644 --- a/rules/terrain/terrainquadherbe.cpp +++ b/rules/terrain/terrainquadherbe.cpp @@ -9,6 +9,13 @@ TerrainQuadHerbe::TerrainQuadHerbe(Vertex ne, Vertex se, Vertex sw, Vertex nw) : triangulation(); } +TerrainQuadHerbe::~TerrainQuadHerbe() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); +} + std::vector TerrainQuadHerbe::getBoundingBoxPoints() const { std::vector list; return list; @@ -23,10 +30,18 @@ TerrainQuadHerbe::TerrainQuadHerbe(int red, Vertex ne, Vertex se, Vertex sw, Ver triangulation(); } -bool TerrainQuadHerbe::subdivide() { +bool TerrainQuadHerbe::split() { return false; } +bool TerrainQuadHerbe::merge() { + for(unsigned int i = 0; i < children.size(); i++) + delete(children[i]); + children.clear(); + triangles.clear(); + return true; +} + void TerrainQuadHerbe::triangulation() { triangles.reserve(2); addTriangle(new Triangle(corner[NE], corner[NW], corner[SW], red, 0xaa, 0x22)); diff --git a/rules/terrain/terrainquadherbe.hh b/rules/terrain/terrainquadherbe.hh index 0a4ddad..9406db3 100644 --- a/rules/terrain/terrainquadherbe.hh +++ b/rules/terrain/terrainquadherbe.hh @@ -12,7 +12,9 @@ class TerrainQuadHerbe : public Chose { public : TerrainQuadHerbe(Vertex ne, Vertex se, Vertex sw, Vertex nw); TerrainQuadHerbe(int red, Vertex ne, Vertex se, Vertex sw, Vertex nw); // DEBUG - virtual bool subdivide(); + virtual ~TerrainQuadHerbe(); + virtual bool split(); + virtual bool merge(); virtual void triangulation(); virtual std::vector getBoundingBoxPoints() const; };