From 7a8d49130487e31994bc11afd729d7d44bce24d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Fri, 20 Jan 2012 11:40:43 +0100 Subject: [PATCH] Places. --- rules/batiment.cpp | 6 ++---- rules/quartier.cpp | 25 ++++++++++++------------- rules/routetrottoir.cpp | 30 ++++++++++-------------------- rules/routetrottoir.hh | 14 ++------------ 4 files changed, 26 insertions(+), 49 deletions(-) diff --git a/rules/batiment.cpp b/rules/batiment.cpp index 7959ef8..85e5d8b 100644 --- a/rules/batiment.cpp +++ b/rules/batiment.cpp @@ -26,13 +26,11 @@ bool BatimentQuad::split() { } void BatimentQuad::bordureRouteTrottoir() { - Quad qtrottoir = c.insetNESW(Dimensions::largeurRoute); - Quad qinterieur = qtrottoir.insetNESW(Dimensions::largeurTrottoir); + Quad qinterieur = c.insetNESW(Dimensions::largeurRoute + Dimensions::largeurTrottoir); Quad qbatiments = qinterieur.offsetNormal(Dimensions::hauteurTrottoir); for (int i = 0; i < 4; i++) { - addChild(new RouteQuad(Quad(c[NE+i],c[SE+i],qtrottoir[SE+i],qtrottoir[NE+i]))); - addChild(new TrottoirQuad(Quad(qtrottoir[NE+i],qtrottoir[SE+i],qinterieur[SE+i],qinterieur[NE+i]))); + addChild(new RouteTrottoirQuad(Quad(c[NE+i],c[SE+i],qinterieur[SE+i],qinterieur[NE+i]))); } bool anglesAcceptable = c.minAngle() > Angle::d2r(90-60) && c.maxAngle() < Angle::d2r(90+60); diff --git a/rules/quartier.cpp b/rules/quartier.cpp index a4a11a9..d7173a7 100644 --- a/rules/quartier.cpp +++ b/rules/quartier.cpp @@ -65,14 +65,12 @@ void QuartierQuad::triangulationConcave(Triangle t) { } void QuartierQuad::concave() { - std::cout << "concave" << std::endl; Quad q = c << c.concaveCorner(); addChild(new QuartierTri(Triangle(q[NE], q[SE], q[SW]))); addChild(new QuartierTri(Triangle(q[SW], q[NW], q[NE]))); } void QuartierQuad::angleCote() { - std::cout << "angleCote" << std::endl; Quad q = c << c.maxAngleCorner(); Vertex s = Segment(q[SE], q[SW]).randomPos(seed, 1, 0.4f, 0.6f); Vertex w = Segment(q[SW], q[NW]).randomPos(seed, 0, 0.4f, 0.6f); @@ -88,14 +86,12 @@ void QuartierQuad::angleCote() { } void QuartierQuad::angleAngle() { - std::cout << "angleAngle" << std::endl; Quad q = c << c.maxAngleCorner(); addChild(new QuartierTri(Triangle(q[NE], q[SE], q[SW]))); addChild(new QuartierTri(Triangle(q[SW], q[NW], q[NE]))); } void QuartierQuad::rect() { - std::cout << "rect" << std::endl; Quad q = c << c.maxLengthSide(); Vertex n = Segment(q[NW], q[NE]).randomPos(seed, 0, 1.f/3.f, 2.f/3.f); Vertex s = Segment(q[SE], q[SW]).randomPos(seed, 1, 1.f/3.f, 2.f/3.f); @@ -105,7 +101,6 @@ void QuartierQuad::rect() { } void QuartierQuad::carre() { - std::cout << "carre" << std::endl; Vertex center = c.insetProportionnal(0.33f).randomPoint(seed, 0); Vertex middle[4]; for (int i = 0; i < 4; i++) @@ -116,13 +111,13 @@ void QuartierQuad::carre() { } void QuartierQuad::place() { - std::cout << "place" << std::endl; Vertex center = c.insetProportionnal(0.25f).randomPoint(seed, 0); Vertex middle[4]; for (int i = 0; i < 4; i++) middle[N+i] = Segment(c[NW+i], c[NE+i]).randomPos(seed, i + 1, 0.45f, 0.55f); Vertex smallOcto[8]; + Vertex interieur[8]; Vertex bigOcto[8]; float r = floatInRange(seed, 12345, Dimensions::minRayonPlace, Dimensions::maxRayonPlace); float shift = std::tan(Angle::Pi/8.f) * r; @@ -132,17 +127,23 @@ void QuartierQuad::place() { smallOcto[2*i+1] = q.inset(S, shift).inset(W, r)[SW]; bigOcto[2*i] = q.inset(W, shift).inset(S, r)[NW]; bigOcto[2*i+1] = q.inset(S, shift).inset(W, r)[SE]; + Triangle t = Triangle(smallOcto[2*i+1], center, smallOcto[2*i]).inset(BASE, Dimensions::largeurRoute + Dimensions::largeurTrottoir); + interieur[2*i] = t[RIGHT]; + interieur[2*i+1] = t[LEFT]; } for (int i = 0; i < 4; i++) { addChild(new QuartierQuad(Quad(bigOcto[2*i], smallOcto[2*i], smallOcto[((2*i-1) + 8) % 8], bigOcto[((2*i-1) + 8) % 8]))); - addChild(new QuartierQuad(Quad(c[NE+i], (smallOcto[2*i] + smallOcto[2*i+1]) / 2.f, smallOcto[2*i], bigOcto[2*i]))); - addChild(new QuartierQuad(Quad(c[NE+i], bigOcto[2*i+1], smallOcto[2*i+1], (smallOcto[2*i] + smallOcto[2*i+1]) / 2.f))); + addChild(new QuartierQuad(Quad(smallOcto[2*i+1], smallOcto[2*i], bigOcto[2*i], bigOcto[2*i+1]))); + addChild(new QuartierTri(Triangle(bigOcto[2*i], c[NE+i], bigOcto[2*i+1]))); + } + for (int i = 0; i < 8; i++) { + addChild(new RouteTrottoirQuad(Quad(smallOcto[i], smallOcto[(i+1)%8], interieur[(i+1)%8], interieur[i]))); + addChild(new TerrainTri(Triangle(interieur[(i+1)%8], center, interieur[i]))); } } void QuartierQuad::longueRue() { - std::cout << "longueRue" << std::endl; Quad q = c << c.maxLengthSide(); Vertex e = Segment(q[NE], q[SE]).randomPos(seed, 0, 1.f/3.f, 2.f/3.f); Vertex w = Segment(q[SW], q[NW]).randomPos(seed, 1, 1.f/3.f, 2.f/3.f); @@ -231,13 +232,11 @@ void QuartierTri::trapeze() { } void QuartierTri::batiments() { - Triangle ttrottoir = c.insetLTR(Dimensions::largeurRoute); - Triangle tinterieur = ttrottoir.insetLTR(Dimensions::largeurTrottoir); + Triangle tinterieur = c.insetLTR(Dimensions::largeurRoute + Dimensions::largeurTrottoir); Triangle tbatiments = tinterieur.offsetNormal(Dimensions::hauteurTrottoir); for (int i = 0; i < 3; i++) { - addChild(new RouteQuad(Quad(c[LEFT+i],c[TOP+i],ttrottoir[TOP+i],ttrottoir[LEFT+i]))); - addChild(new TrottoirQuad(Quad(ttrottoir[LEFT+i],ttrottoir[TOP+i],tinterieur[TOP+i],tinterieur[LEFT+i]))); + addChild(new RouteTrottoirQuad(Quad(c[LEFT+i],c[TOP+i],tinterieur[TOP+i],tinterieur[LEFT+i]))); } bool small = tbatiments.minLength() < 3000; diff --git a/rules/routetrottoir.cpp b/rules/routetrottoir.cpp index 0d84f87..e5aab0b 100644 --- a/rules/routetrottoir.cpp +++ b/rules/routetrottoir.cpp @@ -1,30 +1,20 @@ #include "all_includes.hh" -TrottoirQuad::TrottoirQuad(Quad _c) : Chose(), c(_c) { +RouteTrottoirQuad::RouteTrottoirQuad(Quad _c) : Chose(), c(_c) { addEntropy(c); } -void TrottoirQuad::getBoundingBoxPoints() { +void RouteTrottoirQuad::getBoundingBoxPoints() { addBBPoints(c, Dimensions::hauteurTrottoir); } -void TrottoirQuad::triangulation() { - Quad ch = c.offsetNormal(Dimensions::hauteurTrottoir); - Quad bordureh = ch.inset(E,15); +void RouteTrottoirQuad::triangulation() { + Quad qtrottoir = c.inset(E, Dimensions::largeurRoute); + Quad qtrottoirh = qtrottoir.offsetNormal(Dimensions::hauteurTrottoir); + Quad qbordureh = qtrottoirh.inset(E,15); - addGPUQuad(c[NE], c[SE], ch[SE], ch[NE], Couleurs::bordureTrottoir); - addGPUQuad(ch[NE], ch[SE], bordureh[SE], bordureh[NE], Couleurs::bordureTrottoir); - addGPUQuad(bordureh, Couleurs::trottoir); -} - -RouteQuad::RouteQuad(Quad _c) : Chose(), c(_c) { - addEntropy(c); -} - -void RouteQuad::getBoundingBoxPoints() { - addBBPoints(c); -} - -void RouteQuad::triangulation() { - addGPUQuad(c, Couleurs::route); + addGPUQuad(Quad(c[SE], qtrottoir[SE], qtrottoir[NE], c[NE]), Couleurs::route); + addGPUQuad(qtrottoir[NE], qtrottoir[SE], qtrottoirh[SE], qtrottoirh[NE], Couleurs::bordureTrottoir); + addGPUQuad(qtrottoirh[NE], qtrottoirh[SE], qbordureh[SE], qbordureh[NE], Couleurs::bordureTrottoir); + addGPUQuad(qbordureh, Couleurs::trottoir); } diff --git a/rules/routetrottoir.hh b/rules/routetrottoir.hh index 7b8b2cc..a661360 100644 --- a/rules/routetrottoir.hh +++ b/rules/routetrottoir.hh @@ -3,22 +3,12 @@ #include "all_includes.hh" -class TrottoirQuad : public Chose { +class RouteTrottoirQuad : public Chose { private : Quad c; public : - TrottoirQuad(Quad _c); - virtual void triangulation(); - virtual void getBoundingBoxPoints(); -}; - -class RouteQuad : public Chose { - private : - Quad c; - - public : - RouteQuad(Quad _c); + RouteTrottoirQuad(Quad _c); virtual void triangulation(); virtual void getBoundingBoxPoints(); };