54 const GLubyte* estring;
56 estring = gluErrorString(errorCode);
57 fprintf(stderr,
"Tessellation Error: %s\n", estring);
68 glVertex3dv((GLdouble*) vertex);
73 GLdouble* vertex_data[4],
74 GLfloat weight[4], GLdouble** dataOut) {
79 vertex = (GLdouble*) malloc(7 *
sizeof(GLdouble));
81 vertex[0] = coords[0];
82 vertex[1] = coords[1];
83 vertex[2] = coords[2];
97 double lineWidth,
double layer,
double angle,
const std::string& imgFile,
98 bool relativePath,
const std::string& name):
99 SUMOPolygon(id, type, color, shape, geo, fill, lineWidth, layer, angle, imgFile, relativePath, name),
102 myRotatedShape(nullptr) {
120 new FXMenuSeparator(ret);
163 FXMutexLock locker(
myLock);
183 FXMutexLock locker(
myLock);
206 double* points =
new double[shape.size() * 3];
207 GLUtesselator* tobj = gluNewTess();
208 #if defined(__GNUC__) && __GNUC__ >= 8
209 #pragma GCC diagnostic push
210 #pragma GCC diagnostic ignored "-Wcast-function-type"
212 gluTessCallback(tobj, GLU_TESS_VERTEX, (GLvoid(
CALLBACK*)()) &glVertex3dv);
217 #if defined(__GNUC__) && __GNUC__ >= 8
218 #pragma GCC diagnostic pop
220 gluTessProperty(tobj, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD);
221 gluTessBeginPolygon(tobj,
nullptr);
222 gluTessBeginContour(tobj);
223 for (
int i = 0; i != (int)shape.size(); ++i) {
224 points[3 * i] = shape[(int) i].x();
225 points[3 * i + 1] = shape[(int) i].y();
226 points[3 * i + 2] = 0;
227 gluTessVertex(tobj, points + 3 * i, points + 3 * i);
229 gluTessEndContour(tobj);
231 gluTessEndPolygon(tobj);
249 throw ProcessError(
"GUIPolygon::storeTesselation() could not create display list");
265 }
else if (active == 0) {
267 }
else if (active == 1) {
272 if (alphaOverride >= 0 && alphaOverride <= 255) {
273 color.
setAlpha((
unsigned char)alphaOverride);
289 if (polygon->
getShape().size() < 3) {
293 if (polygon->
getShape().size() < 2) {
303 const PositionVector shape,
const bool drawFill,
double layer,
bool disableSelectionColor,
int alphaOverride) {
305 glTranslated(0, 0, layer);
306 setColor(s, polygon, o, disableSelectionColor, alphaOverride);
315 if (textureID >= 0) {
316 glEnable(GL_TEXTURE_2D);
317 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
318 glDisable(GL_CULL_FACE);
319 glDisable(GL_DEPTH_TEST);
320 glDisable(GL_LIGHTING);
321 glDisable(GL_COLOR_MATERIAL);
322 glDisable(GL_ALPHA_TEST);
324 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
325 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
326 glBindTexture(GL_TEXTURE_2D, textureID);
327 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
328 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
330 glEnable(GL_TEXTURE_GEN_S);
331 glEnable(GL_TEXTURE_GEN_T);
332 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
333 glTexGendv(GL_S, GL_OBJECT_PLANE,
xPlane);
334 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
335 glTexGendv(GL_T, GL_OBJECT_PLANE,
yPlane);
341 if (textureID >= 0) {
342 glEnable(GL_DEPTH_TEST);
343 glBindTexture(GL_TEXTURE_2D, 0);
344 glDisable(GL_TEXTURE_2D);
345 glDisable(GL_TEXTURE_GEN_S);
346 glDisable(GL_TEXTURE_GEN_T);
348 #ifdef GUIPolygon_DEBUG_DRAW_VERTICES
GUISelectedStorage gSelected
A global holder of selected objects.
void CALLBACK errorCallback(GLenum errorCode)
static const GLdouble INV_POLY_TEX_DIM
void CALLBACK combineCallback(GLdouble coords[3], GLdouble *vertex_data[4], GLfloat weight[4], GLdouble **dataOut)
static const GLdouble yPlane[]
void CALLBACK beginCallback(GLenum which)
void CALLBACK endCallback(void)
void CALLBACK vertexCallback(GLvoid *vertex)
static const GLdouble xPlane[]
#define UNUSED_PARAMETER(x)
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
A class that stores a 2D geometrical boundary.
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
Boundary & grow(double by)
extends the boundary by the given amount
double getHeight() const
Returns the height of the boundary (y-axis)
double getWidth() const
Returns the width of the boudary (x-axis)
static void debugVertices(const PositionVector &shape, double size, double layer=256)
draw vertex numbers for the given shape (in a random color)
static void drawLine(const Position &beg, double rot, double visLength)
Draws a thin line.
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
static void pushName(unsigned int name)
push Name
static void popMatrix()
pop matrix
static void drawBoxLines(const PositionVector &geom, const std::vector< double > &rots, const std::vector< double > &lengths, double width, int cornerDetail=0, double offset=0)
Draws thick lines.
static void popName()
pop Name
static void pushMatrix()
push matrix
static void drawTextSettings(const GUIVisualizationTextSettings &settings, const std::string &text, const Position &pos, const double scale, const double angle=0, const double layer=2048, const int align=0)
static FXMenuCommand * buildFXMenuCommand(FXComposite *p, const std::string &text, FXIcon *icon, FXObject *tgt, FXSelector sel)
build menu command
void buildPositionCopyEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to copy the cursor position if geo projection is used,...
void buildShowParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the parameter window.
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
void buildNameCopyPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds entries which allow to copy the name / typed name into the clipboard.
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
virtual double getExaggeration(const GUIVisualizationSettings &s) const =0
return exaggeration asociated with this GLObject
void buildSelectionPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to (de)select the object.
GUIGlID getGlID() const
Returns the numerical id of the object.
void drawName(const Position &pos, const double scale, const GUIVisualizationTextSettings &settings, const double angle=0, bool forceShow=false) const
draw name of item
A window containing a gl-object's parameter.
void mkItem(const char *name, bool dynamic, ValueSource< T > *src)
Adds a row which obtains its value from a ValueSource.
void closeBuilding(const Parameterised *p=0)
Closes the building of the table.
virtual void setShape(const PositionVector &shape)
set a new shape and update the tesselation
static bool checkDraw(const GUIVisualizationSettings &s, const SUMOPolygon *polygon, const GUIGlObject *o)
check if Polygon can be drawn
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
static void drawInnerPolygon(const GUIVisualizationSettings &s, const SUMOPolygon *polygon, const GUIGlObject *o, const PositionVector shape, const bool drawFill, double layer, bool disableSelectionColor, int alphaOverride=-1)
draw inner Polygon (before pushName() )
void storeTesselation(const bool fill, const PositionVector &shape, double lineWidth) const
store the drawing commands in a display list
PositionVector * myRotatedShape
shape rotated on the centroid, if rotation is needed, nullptr otherwise
GUIPolygon(const std::string &id, const std::string &type, const RGBColor &color, const PositionVector &shape, bool geo, bool fill, double lineWidth, double layer=0, double angle=0, const std::string &imgFile="", bool relativePath=false, const std::string &name=DEFAULT_NAME)
Constructor.
GLuint myDisplayList
id of the display list for the cached tesselation
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
static void performTesselation(const bool fill, const PositionVector &shape, const double lineWidth)
FXMutex myLock
The mutex used to avoid concurrent updates of the shape.
static void setColor(const GUIVisualizationSettings &s, const SUMOPolygon *polygon, const GUIGlObject *o, bool disableSelectionColor, int alphaOverride)
set color
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
double getExaggeration(const GUIVisualizationSettings &s) const
return exaggeration asociated with this GLObject
virtual void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
const T getColor(const double value) const
bool isSelected(GUIGlObjectType type, GUIGlID id)
Returns the information whether the object with the given type and id is selected.
static int getTextureID(const std::string &filename, const bool mirrorX=false)
return texture id for the given filename (initialize on first use)
Stores the information about how to visualize structures.
GUIColorer polyColorer
The polygon colorer.
double scale
information about a lane's width (temporary, used for a single view)
bool netedit
Whether the settings are for Netedit.
GUIVisualizationTextSettings polyName
GUIVisualizationSizeSettings polySize
GUIVisualizationTextSettings polyType
double angle
The current view rotation angle.
A point in 2D or 3D with translation and scaling methods.
void rotate2D(double angle)
Position getPolygonCenter() const
Returns the arithmetic of all corner points.
void add(double xoff, double yoff, double zoff)
Boundary getBoxBoundary() const
Returns a boundary enclosing this list of lines.
Position getCentroid() const
Returns the centroid (closes the polygon if unclosed)
void sub(const Position &offset)
void setAlpha(unsigned char alpha)
Sets a new alpha value.
const PositionVector & getShape() const
Returns whether the shape of the polygon.
PositionVector myShape
The positions of the polygon.
double getLineWidth() const
Returns whether the polygon is filled.
void setShape(const PositionVector &shape)
Sets the shape of the polygon.
bool getFill() const
Returns whether the polygon is filled.
const std::string getShapeName() const
Returns the name of the Shape.
const RGBColor & getShapeColor() const
Returns the color of the Shape.
const std::string & getShapeImgFile() const
Returns the imgFile of the Shape.
double getShapeLayer() const
Returns the layer of the Shape.
double getShapeNaviDegree() const
Returns the angle of the Shape in navigational degrees.
const std::string & getShapeType() const
Returns the (abstract) type of the Shape.
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values
double minSize
The minimum size to draw this object.
bool show(const GUIGlObject *o) const
whether to show the text