void VectorRenderer::render(RenderContext * context) { assert(this->m_initial != 0); assert(this->m_vector != 0); math::const_VectorRef<2> initial(this->m_initial); math::const_VectorRef<2> vector(this->m_vector); glColor4v(m_color.ptr()); glBegin(GL_LINES); glVertex2v(initial.ptr()); glVertex2v((vector + initial).ptr()); glEnd(); if (m_frontArrow && !vector.isZero()) { math::Vector<2> versor = vector.versor(); versor.mul(INITIAL_ARROW_SIZE * context->currentView()->svHeightRatio()); glBegin(GL_TRIANGLES); glVertex2v((vector + initial).ptr()); glVertex2v((vector + initial - versor.rotate(INITIAL_ARROW_ANGLE)).ptr()); glVertex2v((vector + initial - versor.rotate(-2.0 * INITIAL_ARROW_ANGLE)).ptr()); glEnd(); } }
void draw(const ConvexPolygon2D& geom) { glBegin(GL_TRIANGLE_FAN); for(size_t i=0;i<geom.vertices.size();i++) glVertex2v(geom.vertices[i]); glEnd(); }
void drawgeom(const GeometricPrimitive2D& geom) { switch(geom.type) { case GeometricPrimitive2D::Point: { glBegin(GL_POINTS); glVertex2v(*AnyCast<Vector2>(&geom.data)); glEnd(); } break; case GeometricPrimitive2D::Segment: { const Segment2D* seg=AnyCast<Segment2D>(&geom.data); glBegin(GL_LINES); glVertex2v(seg->a); glVertex2v(seg->b); glEnd(); } break; case GeometricPrimitive2D::Circle: { const Circle2D* circle = AnyCast<Circle2D>(&geom.data); drawCircle2D(circle->center,circle->radius); } break; case GeometricPrimitive2D::AABB: { const AABB2D* aabb=AnyCast<AABB2D>(&geom.data); glBegin(GL_QUADS); glVertex2f(aabb->bmin.x,aabb->bmin.y); glVertex2f(aabb->bmax.x,aabb->bmin.y); glVertex2f(aabb->bmax.x,aabb->bmax.y); glVertex2f(aabb->bmin.x,aabb->bmax.y); glEnd(); } break; case GeometricPrimitive2D::Box: { const Box2D* box=AnyCast<Box2D>(&geom.data); glBegin(GL_QUADS); glVertex2v(box->origin); glVertex2v(box->origin+box->dims.x*box->xbasis); glVertex2v(box->origin+box->dims.x*box->xbasis+box->dims.y*box->ybasis); glVertex2v(box->origin+box->dims.y*box->ybasis); glEnd(); break; } case GeometricPrimitive2D::Triangle: { const Triangle2D* tri=AnyCast<Triangle2D>(&geom.data); glBegin(GL_TRIANGLES); glVertex2v(tri->a); glVertex2v(tri->b); glVertex2v(tri->c); glEnd(); break; } default: return; } }
inline void glVertex( const QPointF & v ) { glVertex2v( reinterpret_cast<const qreal*>(&v) ); }
inline void glVertex( const QVector2D & v ) { glVertex2v( reinterpret_cast<const float*>(&v) ); }