#pragma once
#include <config.h>
#include <utils/gui/div/GUIDottedGeometry.h>
class GNENet;
class GNEEdge;
class GNESegment;
class GNEAttributeCarrier;
class GNEContour {
public:
GNEContour();
~GNEContour();
Boundary getContourBoundary() const;
void clearContour() const;
void calculateContourClosedShape(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GUIGlObject* glObject, const PositionVector& shape, const double layer,
const double scale, const GUIGlObject* boundaryParent,
const bool addToSelectedObjects = true) const;
void calculateContourExtrudedShape(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GUIGlObject* glObject, const PositionVector& shape, const double layer,
const double extrusionWidth, const double scale, const bool closeFirstExtrem,
const bool closeLastExtrem, const double offset, const GNESegment* segment,
const GUIGlObject* boundaryParent, const bool addToSelectedObjects = true) const;
void calculateContourRectangleShape(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GUIGlObject* glObject, const Position& pos, const double width, const double height,
const double layer, const double offsetX, const double offsetY, const double rot,
const double scale, const GUIGlObject* boundaryParent) const;
void calculateContourCircleShape(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GUIGlObject* glObject, const Position& pos, double radius, const double layer,
const double scale, const GUIGlObject* boundaryParent) const;
void calculateContourEdge(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GNEEdge* edge, const GUIGlObject* elementToRegister, const double layer,
const bool closeFirstExtrem, const bool closeLastExtrem) const;
void calculateContourEdges(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GNEEdge* fromEdge, const GNEEdge* toEdge) const;
void calculateContourFirstGeometryPoint(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GUIGlObject* glObject, const PositionVector& shape, const double layer,
const double radius, const double scale) const;
void calculateContourLastGeometryPoint(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GUIGlObject* glObject, const PositionVector& shape, const double layer,
const double radius, const double scale) const;
void calculateContourMiddleGeometryPoints(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GUIGlObject* glObject, const PositionVector& shape, const double layer,
const double radius, const double scale) const;
void calculateContourAllGeometryPoints(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GUIGlObject* glObject, const PositionVector& shape, const double layer,
const double radius, const double scale, const bool calculatePosOverShape) const;
void calculateContourEdgeGeometryPoints(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GNEEdge* edge, const double radius, const bool calculatePosOverShape,
const bool firstExtrem, const bool lastExtrem) const;
bool checkDrawPathContour(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GNEAttributeCarrier* AC) const;
bool drawDottedContours(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GNEAttributeCarrier* AC, const double lineWidth, const bool addOffset) const;
void drawDottedContourGeometryPoints(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GNEAttributeCarrier* AC, const PositionVector& shape, const double radius,
const double scale, const double lineWidth) const;
void drawInnenContourClosed(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const PositionVector& shape, const double scale, const double lineWidth) const;
bool drawDottedContour(const GUIVisualizationSettings& s, GUIDottedGeometry::DottedContourType type,
const double lineWidth, const bool addOffset) const;
private:
std::vector<GUIDottedGeometry>* myDottedGeometries;
Boundary* myContourBoundary;
PositionVector* myCalculatedShape;
static GUIDottedGeometry::DottedGeometryColor myDottedGeometryColor;
void buildContourClosedShape(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const PositionVector& shape, const double scale) const;
void buildContourExtrudedShape(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const PositionVector& shape, const double extrusionWidth, const double scale,
const bool closeFirstExtrem, const bool closeLastExtrem, const double offset) const;
void buildContourRectangle(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const Position& pos, const double width, const double height, const double offsetX,
const double offsetY, const double rot, const double scale) const;
void buildContourCircle(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const Position& pos, double radius, const double scale) const;
void buildContourEdge(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GNEEdge* edge, const bool closeFirstExtrem, const bool closeLastExtrem) const;
void buildContourEdges(const GUIVisualizationSettings& s, const GUIVisualizationSettings::Detail d,
const GNEEdge* fromEdge, const GNEEdge* toEdge) const;
GNEContour(const GNEContour&) = delete;
GNEContour& operator=(const GNEContour& src) = delete;
};