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());
73 new FXMenuCommand(ret,
"(" + t +
")", 0, 0, 0);
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];
175 if (textureID >= 0) {
176 glEnable(GL_TEXTURE_2D);
177 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
178 glDisable(GL_CULL_FACE);
179 glDisable(GL_DEPTH_TEST);
180 glDisable(GL_LIGHTING);
181 glDisable(GL_COLOR_MATERIAL);
182 glDisable(GL_ALPHA_TEST);
184 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
185 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
186 glBindTexture(GL_TEXTURE_2D, textureID);
187 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
188 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
190 glEnable(GL_TEXTURE_GEN_S);
191 glEnable(GL_TEXTURE_GEN_T);
192 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
193 glTexGenfv(GL_S, GL_OBJECT_PLANE,
xPlane);
194 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
195 glTexGenfv(GL_T, GL_OBJECT_PLANE,
yPlane);
201 if (textureID >= 0) {
202 glEnable(GL_DEPTH_TEST);
203 glBindTexture(GL_TEXTURE_2D, 0);
204 glDisable(GL_TEXTURE_2D);
205 glDisable(GL_TEXTURE_GEN_S);
206 glDisable(GL_TEXTURE_GEN_T);
208 #ifdef GUIPolygon_DEBUG_DRAW_VERTICES 225 Polygon::setShape(shape);
234 double* points =
new double[
myShape.size() * 3];
235 GLUtesselator* tobj = gluNewTess();
236 gluTessCallback(tobj, GLU_TESS_VERTEX, (GLvoid(APIENTRY*)()) &glVertex3dv);
237 gluTessCallback(tobj, GLU_TESS_BEGIN, (GLvoid(APIENTRY*)()) &
beginCallback);
238 gluTessCallback(tobj, GLU_TESS_END, (GLvoid(APIENTRY*)()) &
endCallback);
240 gluTessCallback(tobj, GLU_TESS_COMBINE, (GLvoid(APIENTRY*)()) &
combineCallback);
241 gluTessProperty(tobj, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD);
242 gluTessBeginPolygon(tobj, NULL);
243 gluTessBeginContour(tobj);
244 for (
int i = 0; i !=
myShape.size(); ++i) {
245 points[3 * i] =
myShape[(int) i].x();
246 points[3 * i + 1] =
myShape[(int) i].y();
247 points[3 * i + 2] = 0;
248 gluTessVertex(tobj, points + 3 * i, points + 3 * i);
250 gluTessEndContour(tobj);
252 gluTessEndPolygon(tobj);
271 throw ProcessError(
"GUIPolygon::storeTesselation() could not create display list");
SUMOReal getExaggeration(const GUIVisualizationSettings &s, SUMOReal factor=20) const
return the drawing size including exaggeration and constantSize values
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)
virtual 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.
static void drawText(const std::string &text, const Position &pos, const SUMOReal layer, const SUMOReal size, const RGBColor &col=RGBColor::BLACK, const SUMOReal angle=0)
draw Text with given parameters
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.
A point in 2D or 3D with translation and scaling methods.
GUIVisualizationTextSettings polyType
static int getTextureID(const std::string &filename, const bool mirrorX=false)
return texture id for the given filename (initialize on first use)
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
draw name of item
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 getNaviDegree() const
Returns the angle of the Shape in navigational degrees.
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)
GUIVisualizationTextSettings polyName