43 #ifdef CHECK_MEMORY_LEAKS
45 #endif // CHECK_MEMORY_LEAKS
55 Polygon(id, type, color, shape, fill, layer, angle, imgFile),
72 FXString t(
myType.c_str());
74 new FXMenuSeparator(ret);
104 const GLubyte* estring;
106 estring = gluErrorString(errorCode);
107 fprintf(stderr,
"Tessellation Error: %s\n", estring);
116 glVertex3dv((GLdouble*) vertex);
120 GLdouble* vertex_data[4],
121 GLfloat weight[4], GLdouble** dataOut) {
126 vertex = (GLdouble*) malloc(7 *
sizeof(GLdouble));
128 vertex[0] = coords[0];
129 vertex[1] = coords[1];
130 vertex[2] = coords[2];
173 if (textureID >= 0) {
174 glEnable(GL_TEXTURE_2D);
175 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
176 glDisable(GL_CULL_FACE);
177 glDisable(GL_DEPTH_TEST);
178 glDisable(GL_LIGHTING);
179 glDisable(GL_COLOR_MATERIAL);
180 glDisable(GL_ALPHA_TEST);
182 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
183 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
184 glBindTexture(GL_TEXTURE_2D, textureID);
185 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
186 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
188 glEnable(GL_TEXTURE_GEN_S);
189 glEnable(GL_TEXTURE_GEN_T);
190 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
191 glTexGenfv(GL_S, GL_OBJECT_PLANE,
xPlane);
192 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
193 glTexGenfv(GL_T, GL_OBJECT_PLANE,
yPlane);
199 if (textureID >= 0) {
200 glEnable(GL_DEPTH_TEST);
201 glBindTexture(GL_TEXTURE_2D, 0);
202 glDisable(GL_TEXTURE_2D);
203 glDisable(GL_TEXTURE_GEN_S);
204 glDisable(GL_TEXTURE_GEN_T);
206 #ifdef GUIPolygon_DEBUG_DRAW_VERTICES
218 Polygon::setShape(shape);
227 double* points =
new double[
myShape.size() * 3];
228 GLUtesselator* tobj = gluNewTess();
229 gluTessCallback(tobj, GLU_TESS_VERTEX, (GLvoid(APIENTRY*)()) &glVertex3dv);
230 gluTessCallback(tobj, GLU_TESS_BEGIN, (GLvoid(APIENTRY*)()) &
beginCallback);
231 gluTessCallback(tobj, GLU_TESS_END, (GLvoid(APIENTRY*)()) &
endCallback);
233 gluTessCallback(tobj, GLU_TESS_COMBINE, (GLvoid(APIENTRY*)()) &
combineCallback);
234 gluTessProperty(tobj, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD);
235 gluTessBeginPolygon(tobj, NULL);
236 gluTessBeginContour(tobj);
237 for (
size_t i = 0; i !=
myShape.size(); ++i) {
238 points[3 * i] =
myShape[(int) i].x();
239 points[3 * i + 1] =
myShape[(int) i].y();
240 points[3 * i + 2] = 0;
241 gluTessVertex(tobj, points + 3 * i, points + 3 * i);
243 gluTessEndContour(tobj);
245 gluTessEndPolygon(tobj);
265 throw ProcessError(
"GUIPolygon::storeTesselation() could not create display list");
SUMOReal getHeight() const
Returns the height of the boundary.
const std::string & getImgFile() const
Returns the imgFile of the Shape.
SUMOReal getWidth() const
Returns the width of the boudary.
void buildNameCopyPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds entries which allow to copy the name / typed name into the clipboard.
static void debugVertices(const PositionVector &shape, SUMOReal size, SUMOReal layer=256)
draw vertex numbers for the given shape (in a random color)
void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
Stores the information about how to visualize structures.
static void drawBoxLines(const PositionVector &geom, const std::vector< SUMOReal > &rots, const std::vector< SUMOReal > &lengths, SUMOReal width, int cornerDetail=0, SUMOReal offset=0)
Draws thick lines.
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
GUIPolygon(const std::string &id, const std::string &type, const RGBColor &color, const PositionVector &shape, bool fill, SUMOReal layer=0, SUMOReal angle=0, const std::string &imgFile="")
Constructor.
void buildPositionCopyEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to copy the cursor position if geo projection is used, also builds an entry for copying the geo-position.
GUIGlID getGlID() const
Returns the numerical id of the object.
#define UNUSED_PARAMETER(x)
A class that stores a 2D geometrical boundary.
GLuint myDisplayList
id of the display list for the cached tesselation
SUMOReal scale
information about a lane's width (temporary, used for a single view)
std::string myType
The type of the Shape.
GUIVisualizationSizeSettings polySize
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
void performTesselation(SUMOReal lineWidth) const
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
GUIParameterTableWindow * getParameterWindow(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own parameter window.
float minSize
The minimum size to draw this object.
void storeTesselation(SUMOReal lineWidth) const
store the drawing commands in a display list
virtual void setShape(const PositionVector &shape)
set a new shape and update the tesselation
void drawName(const Position &pos, const SUMOReal scale, const GUIVisualizationTextSettings &settings, const SUMOReal angle=0) const
const RGBColor & getColor() const
Returns the color of the Shape.
SUMOReal myLineWidth
the previous line width for deciding whether the display list must be refreshed
void APIENTRY beginCallback(GLenum which)
void add(SUMOReal x, SUMOReal y)
Makes the boundary include the given coordinate.
Boundary & grow(SUMOReal by)
extends the boundary by the given amount
void APIENTRY endCallback(void)
void APIENTRY combineCallback(GLdouble coords[3], GLdouble *vertex_data[4], GLfloat weight[4], GLdouble **dataOut)
A mutex encapsulator which locks/unlocks the given mutex on construction/destruction, respectively.
void buildSelectionPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to (de)select the object.
void APIENTRY vertexCallback(GLvoid *vertex)
MFXMutex myLock
The mutex used to avoid concurrent updates of the shape.
static void drawLine(const Position &beg, SUMOReal rot, SUMOReal visLength)
Draws a thin line.
SUMOReal getLayer() const
Returns the layer of the Shape.
Position getPolygonCenter() const
Returns the arithmetic of all corner points.
Boundary getBoxBoundary() const
Returns a boundary enclosing this list of lines.
A window containing a gl-object's parameter.
PositionVector myShape
The positions of the polygon.
bool getFill() const
Returns whether the polygon is filled.
SUMOReal getExaggeration(const GUIVisualizationSettings &s) const
return the drawing size including exaggeration and constantSize values
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
void APIENTRY errorCallback(GLenum errorCode)
static int getTextureID(const std::string &filename)
return texture id for the given filename (initialize on first use)
GUIVisualizationTextSettings polyName