VIEW_OVERLAY: add missing code and missing poly graphic overloaded primitives.

Some graphic primitives were already in VIEW_OVERLAY, without code.
A few graphic overloaded primitives (Polygon and Polyline) where missing.
This commit is contained in:
jean-pierre charras 2018-12-11 10:25:24 +01:00
parent 85775d522c
commit 253b14b871
2 changed files with 166 additions and 9 deletions

View File

@ -57,6 +57,22 @@ struct VIEW_OVERLAY::COMMAND_LINE : public VIEW_OVERLAY::COMMAND
};
struct VIEW_OVERLAY::COMMAND_RECTANGLE : public VIEW_OVERLAY::COMMAND
{
COMMAND_RECTANGLE( const VECTOR2D& aP0, const VECTOR2D& aP1 ) :
m_p0( aP0 ), m_p1( aP1 )
{}
virtual void Execute( VIEW* aView ) const override
{
aView->GetGAL()->DrawRectangle( m_p0, m_p1 );
}
VECTOR2D m_p0;
VECTOR2D m_p1;
};
struct VIEW_OVERLAY::COMMAND_CIRCLE : public VIEW_OVERLAY::COMMAND
{
COMMAND_CIRCLE( const VECTOR2D& aCenter, double aRadius ) :
@ -94,6 +110,100 @@ struct VIEW_OVERLAY::COMMAND_ARC : public VIEW_OVERLAY::COMMAND
};
struct VIEW_OVERLAY::COMMAND_POLYLINE : public VIEW_OVERLAY::COMMAND
{
COMMAND_POLYLINE( const std::deque<VECTOR2D>& aPointList ) :
m_pointList( aPointList ) {}
virtual void Execute( VIEW* aView ) const override
{
aView->GetGAL()->DrawPolyline( m_pointList );
}
std::deque<VECTOR2D> m_pointList;
};
struct VIEW_OVERLAY::COMMAND_POLY_POLYLINE : public VIEW_OVERLAY::COMMAND
{
COMMAND_POLY_POLYLINE( const SHAPE_LINE_CHAIN& aLineChain ) :
m_polyLine( aLineChain ) {}
virtual void Execute( VIEW* aView ) const override
{
aView->GetGAL()->DrawPolyline( m_polyLine );
}
SHAPE_LINE_CHAIN m_polyLine;
};
struct VIEW_OVERLAY::COMMAND_POINT_POLYLINE : public VIEW_OVERLAY::COMMAND
{
COMMAND_POINT_POLYLINE( const VECTOR2D aPointList[], int aListSize )
{
m_pointList.reserve( aListSize );
for( int ii = 0; ii < aListSize; ii++ )
m_pointList.push_back( aPointList[ii] );
}
virtual void Execute( VIEW* aView ) const override
{
aView->GetGAL()->DrawPolyline( &m_pointList[0], (int)m_pointList.size() );
}
std::vector<VECTOR2D> m_pointList;
};
struct VIEW_OVERLAY::COMMAND_POLYGON : public VIEW_OVERLAY::COMMAND
{
COMMAND_POLYGON( const std::deque<VECTOR2D>& aPointList ) :
m_pointList( aPointList ) {}
virtual void Execute( VIEW* aView ) const override
{
aView->GetGAL()->DrawPolygon( m_pointList );
}
std::deque<VECTOR2D> m_pointList;
};
struct VIEW_OVERLAY::COMMAND_POLY_POLYGON : public VIEW_OVERLAY::COMMAND
{
COMMAND_POLY_POLYGON( const SHAPE_POLY_SET& aPolySet ) :
m_polySet( aPolySet ) {}
virtual void Execute( VIEW* aView ) const override
{
aView->GetGAL()->DrawPolygon( m_polySet );
}
SHAPE_POLY_SET m_polySet;
};
struct VIEW_OVERLAY::COMMAND_POINT_POLYGON : public VIEW_OVERLAY::COMMAND
{
COMMAND_POINT_POLYGON( const VECTOR2D aPointList[], int aListSize )
{
m_pointList.reserve( aListSize );
for( int ii = 0; ii < aListSize; ii++ )
m_pointList.push_back( aPointList[ii] );
}
virtual void Execute( VIEW* aView ) const override
{
aView->GetGAL()->DrawPolygon( &m_pointList[0], (int)m_pointList.size() );
}
std::vector<VECTOR2D> m_pointList;
};
struct VIEW_OVERLAY::COMMAND_SET_STROKE : public VIEW_OVERLAY::COMMAND
{
COMMAND_SET_STROKE( bool aIsStroke ) :
@ -218,6 +328,8 @@ void VIEW_OVERLAY::Line( const SEG& aSeg )
void VIEW_OVERLAY::Segment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint, double aWidth )
{
SetLineWidth( aWidth );
Line( aStartPoint, aEndPoint );
}
@ -226,6 +338,34 @@ void VIEW_OVERLAY::Polyline( std::deque<VECTOR2D>& aPointList )
}
void VIEW_OVERLAY::Polyline( const VECTOR2D aPointList[], int aListSize )
{
}
void VIEW_OVERLAY::Polyline( const SHAPE_LINE_CHAIN& aLineChain )
{
}
void VIEW_OVERLAY::Polygon( const SHAPE_POLY_SET& aPolySet )
{
m_commands.push_back( new COMMAND_POLY_POLYGON( aPolySet ) );
}
void VIEW_OVERLAY::Polygon( const std::deque<VECTOR2D>& aPointList )
{
m_commands.push_back( new COMMAND_POLYGON( aPointList ) );
}
void VIEW_OVERLAY::Polygon( const VECTOR2D aPointList[], int aListSize )
{
m_commands.push_back( new COMMAND_POINT_POLYGON( aPointList, aListSize ) );
}
void VIEW_OVERLAY::Circle( const VECTOR2D& aCenterPoint, double aRadius )
{
m_commands.push_back( new COMMAND_CIRCLE( aCenterPoint, aRadius ) );
@ -233,9 +373,7 @@ void VIEW_OVERLAY::Circle( const VECTOR2D& aCenterPoint, double aRadius )
void VIEW_OVERLAY::Arc( const VECTOR2D& aCenterPoint,
double aRadius,
double aStartAngle,
double aEndAngle )
double aRadius, double aStartAngle, double aEndAngle )
{
m_commands.push_back( new COMMAND_ARC( aCenterPoint, aRadius, aStartAngle, aEndAngle ) );
}
@ -243,11 +381,7 @@ void VIEW_OVERLAY::Arc( const VECTOR2D& aCenterPoint,
void VIEW_OVERLAY::Rectangle( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint )
{
}
void VIEW_OVERLAY::Polygon( const std::deque<VECTOR2D>& aPointList )
{
m_commands.push_back( new COMMAND_RECTANGLE( aStartPoint, aEndPoint ) );
}

View File

@ -32,6 +32,8 @@
#include <vector>
#include <deque>
#include <geometry/shape_poly_set.h>
class SEG;
namespace KIGFX
@ -49,25 +51,46 @@ public:
struct COMMAND_ARC;
struct COMMAND_LINE;
struct COMMAND_CIRCLE;
struct COMMAND_RECTANGLE;
struct COMMAND_SET_STROKE;
struct COMMAND_SET_FILL;
struct COMMAND_SET_COLOR;
struct COMMAND_SET_WIDTH;
struct COMMAND_POLYGON;
struct COMMAND_POINT_POLYGON;
struct COMMAND_POLY_POLYGON;
struct COMMAND_POLYLINE;
struct COMMAND_POINT_POLYLINE;
struct COMMAND_POLY_POLYLINE;
void Clear();
virtual const BOX2I ViewBBox() const override;
virtual void ViewDraw( int aLayer, VIEW *aView ) const override;
virtual void ViewGetLayers( int aLayers[], int& aCount ) const override;
// Basic shape primitives
void Line( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint );
void Line( const SEG& aSeg );
void Segment( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint, double aWidth );
void Polyline( std::deque<VECTOR2D>& aPointList );
void Circle( const VECTOR2D& aCenterPoint, double aRadius );
void Arc( const VECTOR2D& aCenterPoint, double aRadius, double aStartAngle, double aEndAngle );
void Rectangle( const VECTOR2D& aStartPoint, const VECTOR2D& aEndPoint );
// Polyline primitives
void Polyline( std::deque<VECTOR2D>& aPointList );
void Polyline( const VECTOR2D aPointList[], int aListSize );
void Polyline( const SHAPE_LINE_CHAIN& aLineChain );
// polygon primitives
void Polygon( const std::deque<VECTOR2D>& aPointList );
void Polygon( const SHAPE_POLY_SET& aPolySet );
void Polygon( const VECTOR2D aPointList[], int aListSize );
// Draw settings
void SetIsFill( bool aIsFillEnabled );
void SetIsStroke( bool aIsStrokeEnabled );
void SetFillColor( const COLOR4D& aColor );