Example #1
0
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();
	}
}
Example #2
0
 void draw(const ConvexPolygon2D& geom)
 {
   glBegin(GL_TRIANGLE_FAN);
   for(size_t i=0;i<geom.vertices.size();i++)
     glVertex2v(geom.vertices[i]);
   glEnd();
 }
Example #3
0
  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) ); }