Loading common/gal/cairo/cairo_gal.cpp +40 −0 Original line number Diff line number Diff line Loading @@ -301,6 +301,46 @@ void CAIRO_GAL::DrawLine( VECTOR2D aStartPoint, VECTOR2D aEndPoint ) } void CAIRO_GAL::DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint, double aWidth ) { cairo_set_line_cap( cairoImage, CAIRO_LINE_CAP_ROUND ); cairo_set_line_join( cairoImage, CAIRO_LINE_JOIN_ROUND ); if( isFillEnabled ) { cairo_set_line_width( cairoImage, aWidth ); cairo_move_to( cairoImage, (double) aStartPoint.x, (double) aStartPoint.y ); cairo_line_to( cairoImage, (double) aEndPoint.x, (double) aEndPoint.y ); } else { VECTOR2D startEndVector = aEndPoint - aStartPoint; double lineAngle = atan2( startEndVector.y, startEndVector.x ); double lineLength = startEndVector.EuclideanNorm(); cairo_save( cairoImage ); cairo_translate( cairoImage, aStartPoint.x, aStartPoint.y ); cairo_rotate( cairoImage, lineAngle ); cairo_arc( cairoImage, 0.0, 0.0, aWidth / 2.0, M_PI / 2.0, 3.0 * M_PI / 2.0 ); cairo_arc( cairoImage, lineLength, 0.0, aWidth / 2.0, -M_PI / 2.0, M_PI / 2.0 ); cairo_move_to( cairoImage, 0.0, aWidth / 2.0 ); cairo_line_to( cairoImage, lineLength, aWidth / 2.0 ); cairo_move_to( cairoImage, 0.0, -aWidth / 2.0 ); cairo_line_to( cairoImage, lineLength, -aWidth / 2.0 ); cairo_restore( cairoImage ); } isElementAdded = true; } void CAIRO_GAL::DrawCircle( VECTOR2D aCenterPoint, double aRadius ) { // A circle is drawn using an arc Loading common/gal/opengl/opengl_gal.cpp +39 −0 Original line number Diff line number Diff line Loading @@ -525,6 +525,45 @@ inline void OPENGL_GAL::drawLineQuad( VECTOR2D aStartPoint, VECTOR2D aEndPoint ) } void OPENGL_GAL::DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint, double aWidth ) { VECTOR2D startEndVector = aEndPoint - aStartPoint; double lineAngle = atan2( startEndVector.y, startEndVector.x ); if( isFillEnabled ) { glColor4d( fillColor.r, fillColor.g, fillColor.b, fillColor.a ); SetLineWidth( aWidth ); drawSemiCircle( aStartPoint, aWidth / 2, lineAngle + M_PI / 2, layerDepth ); drawSemiCircle( aEndPoint, aWidth / 2, lineAngle - M_PI / 2, layerDepth ); drawLineQuad( aStartPoint, aEndPoint ); } else { double lineLength = startEndVector.EuclideanNorm(); glColor4d( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a ); glPushMatrix(); glTranslated( aStartPoint.x, aStartPoint.y, 0.0 ); glRotated( lineAngle * ( 360 / ( 2 * M_PI ) ), 0, 0, 1 ); drawLineQuad( VECTOR2D( 0.0, aWidth / 2.0 ), VECTOR2D( lineLength, aWidth / 2.0 ) ); drawLineQuad( VECTOR2D( 0.0, -aWidth / 2.0 ), VECTOR2D( lineLength, -aWidth / 2.0 ) ); DrawArc( VECTOR2D( 0.0, 0.0 ), aWidth / 2.0, M_PI / 2.0, 3.0 * M_PI / 2.0 ); DrawArc( VECTOR2D( lineLength, 0.0 ), aWidth / 2.0, M_PI / 2.0, -M_PI / 2.0 ); glPopMatrix(); } } inline void OPENGL_GAL::drawLineCap( VECTOR2D aStartPoint, VECTOR2D aEndPoint, double aDepthOffset ) { VECTOR2D startEndVector = aEndPoint - aStartPoint; Loading include/gal/cairo/cairo_gal.h +3 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,9 @@ public: /// @copydoc GAL::DrawLine() virtual void DrawLine( VECTOR2D aStartPoint, VECTOR2D aEndPoint ); /// @copydoc GAL::DrawSegment() virtual void DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint, double aWidth ); /// @copydoc GAL::DrawPolyline() virtual void DrawPolyline( std::deque<VECTOR2D>& aPointList ); Loading include/gal/graphics_abstraction_layer.h +11 −0 Original line number Diff line number Diff line Loading @@ -107,6 +107,17 @@ public: */ virtual void DrawLine( VECTOR2D aStartPoint, VECTOR2D aEndPoint ) = 0; /** * @brief Draw a rounded segment. * * Start and end points are defined as 2D-Vectors. * * @param aStartPoint is the start point of the segment. * @param aEndPoint is the end point of the segment. * @param aWidth is a width of the segment */ virtual void DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint, double aWidth ) = 0; /** * @brief Draw a polyline * Loading include/gal/opengl/opengl_gal.h +3 −0 Original line number Diff line number Diff line Loading @@ -105,6 +105,9 @@ public: /// @copydoc GAL::DrawLine() virtual void DrawLine( VECTOR2D aStartPoint, VECTOR2D aEndPoint ); /// @copydoc GAL::DrawSegment() virtual void DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint, double aWidth ); /// @copydoc GAL::DrawPolyline() virtual void DrawPolyline( std::deque<VECTOR2D>& aPointList ); Loading Loading
common/gal/cairo/cairo_gal.cpp +40 −0 Original line number Diff line number Diff line Loading @@ -301,6 +301,46 @@ void CAIRO_GAL::DrawLine( VECTOR2D aStartPoint, VECTOR2D aEndPoint ) } void CAIRO_GAL::DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint, double aWidth ) { cairo_set_line_cap( cairoImage, CAIRO_LINE_CAP_ROUND ); cairo_set_line_join( cairoImage, CAIRO_LINE_JOIN_ROUND ); if( isFillEnabled ) { cairo_set_line_width( cairoImage, aWidth ); cairo_move_to( cairoImage, (double) aStartPoint.x, (double) aStartPoint.y ); cairo_line_to( cairoImage, (double) aEndPoint.x, (double) aEndPoint.y ); } else { VECTOR2D startEndVector = aEndPoint - aStartPoint; double lineAngle = atan2( startEndVector.y, startEndVector.x ); double lineLength = startEndVector.EuclideanNorm(); cairo_save( cairoImage ); cairo_translate( cairoImage, aStartPoint.x, aStartPoint.y ); cairo_rotate( cairoImage, lineAngle ); cairo_arc( cairoImage, 0.0, 0.0, aWidth / 2.0, M_PI / 2.0, 3.0 * M_PI / 2.0 ); cairo_arc( cairoImage, lineLength, 0.0, aWidth / 2.0, -M_PI / 2.0, M_PI / 2.0 ); cairo_move_to( cairoImage, 0.0, aWidth / 2.0 ); cairo_line_to( cairoImage, lineLength, aWidth / 2.0 ); cairo_move_to( cairoImage, 0.0, -aWidth / 2.0 ); cairo_line_to( cairoImage, lineLength, -aWidth / 2.0 ); cairo_restore( cairoImage ); } isElementAdded = true; } void CAIRO_GAL::DrawCircle( VECTOR2D aCenterPoint, double aRadius ) { // A circle is drawn using an arc Loading
common/gal/opengl/opengl_gal.cpp +39 −0 Original line number Diff line number Diff line Loading @@ -525,6 +525,45 @@ inline void OPENGL_GAL::drawLineQuad( VECTOR2D aStartPoint, VECTOR2D aEndPoint ) } void OPENGL_GAL::DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint, double aWidth ) { VECTOR2D startEndVector = aEndPoint - aStartPoint; double lineAngle = atan2( startEndVector.y, startEndVector.x ); if( isFillEnabled ) { glColor4d( fillColor.r, fillColor.g, fillColor.b, fillColor.a ); SetLineWidth( aWidth ); drawSemiCircle( aStartPoint, aWidth / 2, lineAngle + M_PI / 2, layerDepth ); drawSemiCircle( aEndPoint, aWidth / 2, lineAngle - M_PI / 2, layerDepth ); drawLineQuad( aStartPoint, aEndPoint ); } else { double lineLength = startEndVector.EuclideanNorm(); glColor4d( strokeColor.r, strokeColor.g, strokeColor.b, strokeColor.a ); glPushMatrix(); glTranslated( aStartPoint.x, aStartPoint.y, 0.0 ); glRotated( lineAngle * ( 360 / ( 2 * M_PI ) ), 0, 0, 1 ); drawLineQuad( VECTOR2D( 0.0, aWidth / 2.0 ), VECTOR2D( lineLength, aWidth / 2.0 ) ); drawLineQuad( VECTOR2D( 0.0, -aWidth / 2.0 ), VECTOR2D( lineLength, -aWidth / 2.0 ) ); DrawArc( VECTOR2D( 0.0, 0.0 ), aWidth / 2.0, M_PI / 2.0, 3.0 * M_PI / 2.0 ); DrawArc( VECTOR2D( lineLength, 0.0 ), aWidth / 2.0, M_PI / 2.0, -M_PI / 2.0 ); glPopMatrix(); } } inline void OPENGL_GAL::drawLineCap( VECTOR2D aStartPoint, VECTOR2D aEndPoint, double aDepthOffset ) { VECTOR2D startEndVector = aEndPoint - aStartPoint; Loading
include/gal/cairo/cairo_gal.h +3 −0 Original line number Diff line number Diff line Loading @@ -98,6 +98,9 @@ public: /// @copydoc GAL::DrawLine() virtual void DrawLine( VECTOR2D aStartPoint, VECTOR2D aEndPoint ); /// @copydoc GAL::DrawSegment() virtual void DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint, double aWidth ); /// @copydoc GAL::DrawPolyline() virtual void DrawPolyline( std::deque<VECTOR2D>& aPointList ); Loading
include/gal/graphics_abstraction_layer.h +11 −0 Original line number Diff line number Diff line Loading @@ -107,6 +107,17 @@ public: */ virtual void DrawLine( VECTOR2D aStartPoint, VECTOR2D aEndPoint ) = 0; /** * @brief Draw a rounded segment. * * Start and end points are defined as 2D-Vectors. * * @param aStartPoint is the start point of the segment. * @param aEndPoint is the end point of the segment. * @param aWidth is a width of the segment */ virtual void DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint, double aWidth ) = 0; /** * @brief Draw a polyline * Loading
include/gal/opengl/opengl_gal.h +3 −0 Original line number Diff line number Diff line Loading @@ -105,6 +105,9 @@ public: /// @copydoc GAL::DrawLine() virtual void DrawLine( VECTOR2D aStartPoint, VECTOR2D aEndPoint ); /// @copydoc GAL::DrawSegment() virtual void DrawSegment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint, double aWidth ); /// @copydoc GAL::DrawPolyline() virtual void DrawPolyline( std::deque<VECTOR2D>& aPointList ); Loading