50 double layer,
double angle,
const std::string& imgFile):
51 Polygon(id, type, color, shape, fill, layer, angle, imgFile),
68 FXString t(
myType.c_str());
69 new FXMenuCommand(ret,
"(" + t +
")", 0, 0, 0);
70 new FXMenuSeparator(ret);
100 const GLubyte* estring;
102 estring = gluErrorString(errorCode);
103 fprintf(stderr,
"Tessellation Error: %s\n", estring);
112 glVertex3dv((GLdouble*) vertex);
116 GLdouble* vertex_data[4],
117 GLfloat weight[4], GLdouble** dataOut) {
122 vertex = (GLdouble*) malloc(7 *
sizeof(GLdouble));
124 vertex[0] = coords[0];
125 vertex[1] = coords[1];
126 vertex[2] = coords[2];
171 if (textureID >= 0) {
172 glEnable(GL_TEXTURE_2D);
173 glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
174 glDisable(GL_CULL_FACE);
175 glDisable(GL_DEPTH_TEST);
176 glDisable(GL_LIGHTING);
177 glDisable(GL_COLOR_MATERIAL);
178 glDisable(GL_ALPHA_TEST);
180 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
181 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
182 glBindTexture(GL_TEXTURE_2D, textureID);
183 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
184 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
186 glEnable(GL_TEXTURE_GEN_S);
187 glEnable(GL_TEXTURE_GEN_T);
188 glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
189 glTexGenfv(GL_S, GL_OBJECT_PLANE,
xPlane);
190 glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);
191 glTexGenfv(GL_T, GL_OBJECT_PLANE,
yPlane);
197 if (textureID >= 0) {
198 glEnable(GL_DEPTH_TEST);
199 glBindTexture(GL_TEXTURE_2D, 0);
200 glDisable(GL_TEXTURE_2D);
201 glDisable(GL_TEXTURE_GEN_S);
202 glDisable(GL_TEXTURE_GEN_T);
204 #ifdef GUIPolygon_DEBUG_DRAW_VERTICES 221 Polygon::setShape(shape);
230 double* points =
new double[
myShape.size() * 3];
231 GLUtesselator* tobj = gluNewTess();
232 gluTessCallback(tobj, GLU_TESS_VERTEX, (GLvoid(APIENTRY*)()) &glVertex3dv);
233 gluTessCallback(tobj, GLU_TESS_BEGIN, (GLvoid(APIENTRY*)()) &
beginCallback);
234 gluTessCallback(tobj, GLU_TESS_END, (GLvoid(APIENTRY*)()) &
endCallback);
236 gluTessCallback(tobj, GLU_TESS_COMBINE, (GLvoid(APIENTRY*)()) &
combineCallback);
237 gluTessProperty(tobj, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD);
238 gluTessBeginPolygon(tobj, NULL);
239 gluTessBeginContour(tobj);
240 for (
int i = 0; i != (int)
myShape.size(); ++i) {
241 points[3 * i] =
myShape[(int) i].x();
242 points[3 * i + 1] =
myShape[(int) i].y();
243 points[3 * i + 2] = 0;
244 gluTessVertex(tobj, points + 3 * i, points + 3 * i);
246 gluTessEndContour(tobj);
248 gluTessEndPolygon(tobj);
267 throw ProcessError(
"GUIPolygon::storeTesselation() could not create display list");
double scale
information about a lane's width (temporary, used for a single view)
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.
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
bool getFill() const
Returns whether the polygon is filled.
void storeTesselation(double lineWidth) const
store the drawing commands in a display list
GUIPolygon(const std::string &id, const std::string &type, const RGBColor &color, const PositionVector &shape, bool fill, double layer=0, double angle=0, const std::string &imgFile="")
Constructor.
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)
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)
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 & getImgFile() const
Returns the imgFile of the Shape.
std::string myType
The type of the Shape.
GUIVisualizationSizeSettings polySize
double getLayer() const
Returns the layer of the Shape.
static void setColor(const RGBColor &c)
Sets the gl-color to this value.
double getNaviDegree() const
Returns the angle of the Shape in navigational degrees.
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.
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.
void drawName(const Position &pos, const double scale, const GUIVisualizationTextSettings &settings, const double angle=0) const
draw name of item
Boundary & grow(double by)
extends the boundary by the given amount
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
void APIENTRY beginCallback(GLenum which)
virtual void drawGL(const GUIVisualizationSettings &s) const
Draws the object.
const RGBColor & getColor() const
Returns the color of the Shape.
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)
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.
GUIGlID getGlID() const
Returns the numerical id of the object.
double getExaggeration(const GUIVisualizationSettings &s, double factor=20) const
return the drawing size including exaggeration and constantSize values
double myLineWidth
the previous line width for deciding whether the display list must be refreshed
Boundary getBoxBoundary() const
Returns a boundary enclosing this list of lines.
static void drawText(const std::string &text, const Position &pos, const double layer, const double size, const RGBColor &col=RGBColor::BLACK, const double angle=0)
draw Text with given parameters
void add(double x, double y, double z=0)
Makes the boundary include the given coordinate.
Boundary getCenteringBoundary() const
Returns the boundary to which the view shall be centered in order to show the object.
A window containing a gl-object's parameter.
PositionVector myShape
The positions of the polygon.
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