snake.h 1.54 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
#pragma once

#include <vector>
#include <string>
#include <array>

#include "snake_geometry.h"

using namespace std;
using namespace snake_geometrie;

namespace snake {

    enum AreaType {MeasurementArea, ServiceArea, Corridor};

    struct Area {
        vector<GeoPoint3D> geoPolygon;
        double          altitude;
        size_t          layers;
        AreaType        type;
    };

    class Scenario{
    public:
        Scenario();

        bool setArea(Area &area);

        Area getMeasurementArea() {return _measurementArea;}
        Area getServiceArea() {return _serviceArea;}
        Area getCorridor() {return _corridor;}

        bool defined(double tileWidth, double tileHeight, double minTileArea);

        string error_str;
    private:
        bool _areas2enu();
        bool _setMeasurementArea(Area &area);
        bool _setServiceArea(Area &area);
        bool _setCorridor(Area &area);
        bool _calculateBoundingBox();
        bool _calculateTiles();
        bool _calculateJoinedArea();
        bool _calculateMAreaLocal();
        bool _calculateSAreaLocal();
        bool _calculateCorridorLocal();

        Area _measurementArea;
        Area _serviceArea;
        Area _corridor;

        Point2DList _measurementAreaENU;
        Point2DList _serviceAreaENU;
        Point2DList _corridorENU;
        Point2DList _joinedAreaENU;

        vector<Point2DList>    _tilesENU;
        vector<Point2D>        _tilesCenterPointsENU;

        GeoPoint3D _geoOrigin;
        Point2D    _homePositionENU;

        bool _defined_bool;
    };
}