commit c4aea33ba9071c41a6e6ad90bbd7163da61ff84d
parent 876fe13a489df0a9f2e2c488523d778fbd085cf4
Author: Yoann <yoann.b87@voila.fr>
Date: Wed, 18 Jan 2012 16:57:35 +0100
subidivision de batiment sans routes.
Diffstat:
2 files changed, 34 insertions(+), 4 deletions(-)
diff --git a/rules/architecture/batiment.cpp b/rules/architecture/batiment.cpp
@@ -5,11 +5,37 @@ BatimentQuad_::BatimentQuad_(Quad _c) : Chose(), c(_c) {
}
bool BatimentQuad_::split() {
- Quad ch = c.offsetNormal(Dimensions::hauteurEtage);
- addChild(new ToitQuad(ch, Dimensions::hauteurToit));
+ Quad q;
+
+ if(!isSub)
+ q = c >> ((c.maxLengthNS() < c.maxLengthEW()) ? 1 : 0);
+ else
+ q = c;
+
+ int minSurface = 1000000;
+
+ if(q.surface() > 2* minSurface) {
+ Vertex c1 = q[NW] + Vertex(q[NE] - q[NW])/2;
+ Vertex c2 = q[SW] + Vertex(q[SE] - q[SW])/2;
+ Quad q1 = Quad(c1,c2,q[SW],q[NW]).inset(E,30);
+ Quad q2 = Quad(q[NE],q[SE],c2,c1).inset(W,30);
+
+ addChild((new BatimentQuad_(q1))->isSubdivision(true));
+ addChild((new BatimentQuad_(q2))->isSubdivision(true));
+ }
+ else {
+ Quad ch = c.offsetNormal(Dimensions::hauteurEtage);
+ addChild(new ToitQuad(ch, Dimensions::hauteurToit));
+ }
+
return true;
}
+BatimentQuad_* BatimentQuad_::isSubdivision(bool val) {
+ this->isSub = val;
+ return this;
+}
+
void BatimentQuad_::triangulation() {
Quad ch = c.offsetNormal(Dimensions::hauteurEtage + Dimensions::hauteurToit);
addGPUQuad(ch, Couleurs::toit);
diff --git a/rules/architecture/batiment.hh b/rules/architecture/batiment.hh
@@ -5,16 +5,20 @@
class BatimentQuad_ : public Chose {
Quad c;
-public:
+ bool isSub;
+
+ public:
BatimentQuad_(Quad _c);
virtual bool split();
virtual void triangulation();
virtual void getBoundingBoxPoints();
+ BatimentQuad_* isSubdivision(bool val);
};
class BatimentTri_ : public Chose {
Triangle c;
-public:
+
+ public:
BatimentTri_(Triangle _c);
virtual bool split();
virtual void triangulation();