48 const GLubyte* estring;
50 estring = gluErrorString(errorCode);
51 fprintf(stderr,
"Tessellation Error: %s\n", estring);
62 glVertex3dv((GLdouble*) vertex);
67 GLdouble* vertex_data[4],
68 GLfloat weight[4], GLdouble** dataOut) {
73 vertex = (GLdouble*) malloc(7 *
sizeof(GLdouble));
75 vertex[0] = coords[0];
76 vertex[1] = coords[1];
77 vertex[2] = coords[2];
91 bool fill,
double lineWidth,
double layer,
double angle,
const std::string& imgFile,
93 SUMOPolygon(id, type, color, shape, geo, fill, lineWidth, layer, angle, imgFile, relativePath),
110 new FXMenuCommand(ret,
"(" + t +
")",
nullptr,
nullptr, 0);
111 new FXMenuSeparator(ret);
147 FXMutexLock locker(
myLock);
163 FXMutexLock locker(
myLock);
173 double* points =
new double[
myShape.size() * 3];
174 GLUtesselator* tobj = gluNewTess();
175 gluTessCallback(tobj, GLU_TESS_VERTEX, (GLvoid(APIENTRY*)()) &glVertex3dv);
176 gluTessCallback(tobj, GLU_TESS_BEGIN, (GLvoid(APIENTRY*)()) &
beginCallback);
177 gluTessCallback(tobj, GLU_TESS_END, (GLvoid(APIENTRY*)()) &
endCallback);
179 gluTessCallback(tobj, GLU_TESS_COMBINE, (GLvoid(APIENTRY*)()) &
combineCallback);
180 gluTessProperty(tobj, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD);
181 gluTessBeginPolygon(tobj,
nullptr);
182 gluTessBeginContour(tobj);
183 for (
int i = 0; i != (int)
myShape.size(); ++i) {
184 points[3 * i] =
myShape[(int) i].x();
185 points[3 * i + 1] =
myShape[(int) i].y();
186 points[3 * i + 2] = 0;
187 gluTessVertex(tobj, points + 3 * i, points + 3 * i);
189 gluTessEndContour(tobj);
191 gluTessEndPolygon(tobj);
210 throw ProcessError(
"GUIPolygon::storeTesselation() could not create display list");
225 }
else if (active == 0) {
227 }
else if (active == 1) {
272 if (textureID >= 0) {
273 glEnable(GL_TEXTURE_2D);
274 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
275 glDisable(GL_CULL_FACE);
276 glDisable(GL_DEPTH_TEST);
277 glDisable(GL_LIGHTING);
278 glDisable(GL_COLOR_MATERIAL);
279 glDisable(GL_ALPHA_TEST);
281 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
282 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
283 glBindTexture(GL_TEXTURE_2D, textureID);
284 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
285 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
287 glEnable(GL_TEXTURE_GEN_S);
288 glEnable(GL_TEXTURE_GEN_T);
289 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
290 glTexGenfv(GL_S, GL_OBJECT_PLANE,
xPlane);
291 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
292 glTexGenfv(GL_T, GL_OBJECT_PLANE,
yPlane);
298 if (textureID >= 0) {
299 glEnable(GL_DEPTH_TEST);
300 glBindTexture(GL_TEXTURE_2D, 0);
301 glDisable(GL_TEXTURE_2D);
302 glDisable(GL_TEXTURE_GEN_S);
303 glDisable(GL_TEXTURE_GEN_T);
305 #ifdef GUIPolygon_DEBUG_DRAW_VERTICES
PositionVector myShape
The positions of the polygon.
double myLineWidth
The line width for drawing an unfilled polygon.
double scale
information about a lane's width (temporary, used for a single view)
void closeBuilding(const Parameterised *p=0)
Closes the building of the table.
void drawInnerPolygon(const GUIVisualizationSettings &s, bool disableSelectionColor) const
draw inner Polygon (before pushName() )
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.
const std::string & getShapeImgFile() const
Returns the imgFile of the Shape.
void buildNameCopyPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds entries which allow to copy the name / typed name into the clipboard.
void performTesselation(double lineWidth) const
void storeTesselation(double lineWidth) const
store the drawing commands in a display list
Stores the information about how to visualize structures.
static void debugVertices(const PositionVector &shape, double size, double layer=256)
draw vertex numbers for the given shape (in a random color)
static void drawTextSettings(const GUIVisualizationTextSettings &settings, const std::string &text, const Position &pos, const double scale, const double angle=0, const double layer=2048)
void mkItem(const char *name, bool dynamic, ValueSource< T > *src)
Adds a row which obtains its value from a ValueSource.
FXMutex myLock
The mutex used to avoid concurrent updates of the shape.
void buildCenterPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to center to the object.
double getWidth() const
Returns the width of the boudary (x-axis)
bool isSelected(GUIGlObjectType type, GUIGlID id)
Returns the information whether the object with the given type and id is selected.
bool netedit
Whether the settings are for Netedit.
void buildShowParamsPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to open the parameter window.
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.
#define UNUSED_PARAMETER(x)
A class that stores a 2D geometrical boundary.
GLuint myDisplayList
id of the display list for the cached tesselation
const std::string & getShapeType() const
Returns the (abstract) type of the Shape.
GUIVisualizationSizeSettings polySize
virtual void setShape(const PositionVector &shape)
Sets the shape of the polygon.
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
double minSize
The minimum size to draw this object.
A point in 2D or 3D with translation and scaling methods.
Position getPolygonCenter() const
Returns the arithmetic of all corner points.
const RGBColor & getShapeColor() const
Returns the color of the Shape.
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.
GUIColorer polyColorer
The polygon colorer.
void drawName(const Position &pos, const double scale, const GUIVisualizationTextSettings &settings, const double angle=0) const
draw name of item
bool checkDraw(const GUIVisualizationSettings &s) const
check if Polygon can be drawn
Boundary & grow(double by)
extends the boundary by the given amount
double angle
The current view rotation angle.
const T getColor(const double value) const
static void drawLine(const Position &beg, double rot, double visLength)
Draws a thin line.
virtual void setShape(const PositionVector &shape)
set a new shape and update the tesselation
bool getFill() const
Returns whether the polygon is filled.
double getShapeLayer() const
Returns the layer of the Shape.
void setColor(const GUIVisualizationSettings &s, bool disableSelectionColor) const
set color
void APIENTRY beginCallback(GLenum which)
virtual void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
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)
Constructor.
double getHeight() const
Returns the height of the boundary (y-axis)
void APIENTRY endCallback(void)
void APIENTRY combineCallback(GLdouble coords[3], GLdouble *vertex_data[4], GLfloat weight[4], GLdouble **dataOut)
void buildSelectionPopupEntry(GUIGLObjectPopupMenu *ret, bool addSeparator=true)
Builds an entry which allows to (de)select the object.
void APIENTRY vertexCallback(GLvoid *vertex)
const std::map< std::string, std::string > & getParametersMap() const
Returns the inner key/value map.
GUIGlID getGlID() const
Returns the numerical id of the object.
Boundary getBoxBoundary() const
Returns a boundary enclosing this list of lines.
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
double getExaggeration(const GUIVisualizationSettings &s, const GUIGlObject *o, double factor=20) const
return the drawing size including exaggeration and constantSize values
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
GUISelectedStorage gSelected
A global holder of selected objects.
A window containing a gl-object's parameter.
GUIGLObjectPopupMenu * getPopUpMenu(GUIMainWindow &app, GUISUMOAbstractView &parent)
Returns an own popup-menu.
double getShapeNaviDegree() const
Returns the angle of the Shape in navigational degrees.
void buildPopupHeader(GUIGLObjectPopupMenu *ret, GUIMainWindow &app, bool addSeparator=true)
Builds the header.
void APIENTRY errorCallback(GLenum errorCode)
GUIVisualizationTextSettings polyName