KiCad PCB EDA Suite
KIGFX::GERBVIEW_PAINTER Class Reference

Class GERBVIEW_PAINTER Contains methods for drawing GerbView-specific items. More...

#include <gerbview_painter.h>

Inheritance diagram for KIGFX::GERBVIEW_PAINTER:
KIGFX::PAINTER

Public Member Functions

 GERBVIEW_PAINTER (GAL *aGal)
 
virtual void ApplySettings (const RENDER_SETTINGS *aSettings) override
 Function ApplySettings Loads colors and display modes settings that are going to be used when drawing items. More...
 
virtual GERBVIEW_RENDER_SETTINGSGetSettings () override
 Function GetSettings Returns pointer to current settings that are going to be used when drawing items. More...
 
virtual bool Draw (const VIEW_ITEM *aItem, int aLayer) override
 Function Draw Takes an instance of VIEW_ITEM and passes it to a function that know how to draw the item. More...
 
void SetGAL (GAL *aGal)
 Function SetGAL Changes Graphics Abstraction Layer used for drawing items for a new one. More...
 

Protected Member Functions

void draw (GERBER_DRAW_ITEM *aVia, int aLayer)
 
void drawPolygon (GERBER_DRAW_ITEM *aParent, SHAPE_POLY_SET &aPolygon, bool aFilled)
 Helper routine to draw a polygon. More...
 
void drawFlashedShape (GERBER_DRAW_ITEM *aItem, bool aFilled)
 Helper to draw a flashed shape (aka spot) More...
 
void drawApertureMacro (GERBER_DRAW_ITEM *aParent, bool aFilled)
 Helper to draw an aperture macro shape. More...
 
int getLineThickness (int aActualThickness) const
 Function getLineThickness() Get the thickness to draw for a line (e.g. More...
 

Protected Attributes

GERBVIEW_RENDER_SETTINGS m_gerbviewSettings
 
GALm_gal
 Instance of graphic abstraction layer that gives an interface to call commands used to draw (eg. More...
 
COLOR4D m_brightenedColor
 Color of brightened item frame. More...
 

Detailed Description

Class GERBVIEW_PAINTER Contains methods for drawing GerbView-specific items.

Definition at line 168 of file gerbview_painter.h.

Constructor & Destructor Documentation

◆ GERBVIEW_PAINTER()

GERBVIEW_PAINTER::GERBVIEW_PAINTER ( GAL aGal)

Definition at line 148 of file gerbview_painter.cpp.

148  :
149  PAINTER( aGal )
150 {
151 }
PAINTER(GAL *aGal)
Constructor PAINTER( GAL* ) initializes this object for painting on any of the polymorphic GRAPHICS_A...
Definition: painter.cpp:68

Member Function Documentation

◆ ApplySettings()

virtual void KIGFX::GERBVIEW_PAINTER::ApplySettings ( const RENDER_SETTINGS aSettings)
inlineoverridevirtual

Function ApplySettings Loads colors and display modes settings that are going to be used when drawing items.

Parameters
aSettingsare settings to be applied.

Implements KIGFX::PAINTER.

Definition at line 174 of file gerbview_painter.h.

175  {
176  m_gerbviewSettings = *static_cast<const GERBVIEW_RENDER_SETTINGS*>( aSettings );
177  }
GERBVIEW_RENDER_SETTINGS m_gerbviewSettings

References m_gerbviewSettings.

◆ Draw()

bool GERBVIEW_PAINTER::Draw ( const VIEW_ITEM aItem,
int  aLayer 
)
overridevirtual

Function Draw Takes an instance of VIEW_ITEM and passes it to a function that know how to draw the item.

Parameters
aItemis an item to be drawn.
aLayertells which layer is currently rendered so that draw functions may know what to draw (eg. for pads there are separate layers for holes, because they have other dimensions then the pad itself.

Implements KIGFX::PAINTER.

Definition at line 167 of file gerbview_painter.cpp.

168 {
169  const EDA_ITEM* item = static_cast<const EDA_ITEM*>( aItem );
170 
171  // the "cast" applied in here clarifies which overloaded draw() is called
172  switch( item->Type() )
173  {
174  case GERBER_DRAW_ITEM_T:
175  draw( static_cast<GERBER_DRAW_ITEM*>( const_cast<EDA_ITEM*>( item ) ), aLayer );
176  break;
177 
178  default:
179  // Painter does not know how to draw the object
180  return false;
181  }
182 
183  return true;
184 }
void draw(GERBER_DRAW_ITEM *aVia, int aLayer)
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:154
KICAD_T Type() const
Function Type()
Definition: base_struct.h:201

References draw(), GERBER_DRAW_ITEM_T, and EDA_ITEM::Type().

◆ draw()

void GERBVIEW_PAINTER::draw ( GERBER_DRAW_ITEM aVia,
int  aLayer 
)
protected

Definition at line 189 of file gerbview_painter.cpp.

190 {
191  VECTOR2D start( aItem->GetABPosition( aItem->m_Start ) ); // TODO(JE) Getter
192  VECTOR2D end( aItem->GetABPosition( aItem->m_End ) ); // TODO(JE) Getter
193  int width = aItem->m_Size.x; // TODO(JE) Getter
194  bool isFilled = true;
195  COLOR4D color;
196  // TODO(JE) This doesn't actually work properly for ImageNegative
197  bool isNegative = ( aItem->GetLayerPolarity() ^ aItem->m_GerberImageFile->m_ImageNegative );
198 
199  // Draw DCODE overlay text
200  if( IsDCodeLayer( aLayer ) )
201  {
202  wxString codeText;
203  VECTOR2D textPosition;
204  double textSize;
205  double orient;
206 
207  if( !aItem->GetTextD_CodePrms( textSize, textPosition, orient ) )
208  return;
209 
210  color = m_gerbviewSettings.GetColor( aItem, aLayer );
211  codeText.Printf( "D%d", aItem->m_DCode );
212 
213  m_gal->SetIsStroke( true );
214  m_gal->SetIsFill( false );
216  m_gal->SetFillColor( COLOR4D( 0, 0, 0, 0 ) );
217  m_gal->SetLineWidth( textSize/10 );
218  m_gal->SetFontBold( false );
219  m_gal->SetFontItalic( false );
220  m_gal->SetTextMirrored( false );
221  m_gal->SetGlyphSize( VECTOR2D( textSize, textSize) );
224  m_gal->BitmapText( codeText, textPosition, orient );
225 
226  return;
227  }
228 
229  color = m_gerbviewSettings.GetColor( aItem, aLayer );
230 
231  // TODO: Should brightened color be a preference?
232  if( aItem->IsBrightened() )
233  color = COLOR4D( 0.0, 1.0, 0.0, 0.75 );
234 
235  m_gal->SetNegativeDrawMode( isNegative );
238  m_gal->SetIsFill( isFilled );
239  m_gal->SetIsStroke( !isFilled );
240 
241  switch( aItem->m_Shape )
242  {
243  case GBR_POLYGON:
244  {
246  m_gal->SetIsFill( isFilled );
247  m_gal->SetIsStroke( !isFilled );
248 
249  if( isNegative && !isFilled )
250  {
251  m_gal->SetNegativeDrawMode( false );
252  m_gal->SetStrokeColor( GetSettings()->GetColor( aItem, aLayer ) );
253  }
254 
255  if( !isFilled )
257 
258  SHAPE_POLY_SET absolutePolygon = aItem->m_Polygon;
259 
260  for( auto it = absolutePolygon.Iterate( 0 ); it; ++it )
261  *it = aItem->GetABPosition( *it );
262 
263  // Degenerated polygons (having < 3 points) are drawn as lines
264  // to avoid issues in draw polygon functions
265  if( !isFilled || absolutePolygon.COutline( 0 ).PointCount() < 3 )
266  m_gal->DrawPolyline( absolutePolygon.COutline( 0 ) );
267  else
268  {
269  // On Opengl, a not convex filled polygon is usually drawn by using triangles as primitives.
270  // CacheTriangulation() can create basic triangle primitives to draw the polygon solid shape
271  // on Opengl
272  if( m_gal->IsOpenGlEngine() )
273  absolutePolygon.CacheTriangulation();
274 
275  m_gal->DrawPolygon( absolutePolygon );
276  }
277 
278  break;
279  }
280 
281  case GBR_CIRCLE:
282  {
283  isFilled = m_gerbviewSettings.m_lineFill;
284  double radius = GetLineLength( aItem->m_Start, aItem->m_End );
285  m_gal->DrawCircle( start, radius );
286  break;
287  }
288 
289  case GBR_ARC:
290  {
291  isFilled = m_gerbviewSettings.m_lineFill;
292 
293  // These are swapped because wxDC fills arcs counterclockwise and GAL
294  // fills them clockwise.
295  wxPoint arcStart = aItem->m_End;
296  wxPoint arcEnd = aItem->m_Start;
297 
298  // Gerber arcs are 3-point (start, center, end)
299  // GAL needs center, radius, start angle, end angle
300  double radius = GetLineLength( arcStart, aItem->m_ArcCentre );
301  VECTOR2D center = aItem->GetABPosition( aItem->m_ArcCentre );
302  VECTOR2D startVec = VECTOR2D( aItem->GetABPosition( arcStart ) ) - center;
303  VECTOR2D endVec = VECTOR2D( aItem->GetABPosition( arcEnd ) ) - center;
304 
305  m_gal->SetIsFill( isFilled );
306  m_gal->SetIsStroke( !isFilled );
307  m_gal->SetLineWidth( isFilled ? width : m_gerbviewSettings.m_outlineWidth );
308 
309  double startAngle = startVec.Angle();
310  double endAngle = endVec.Angle();
311 
312  // GAL fills in direction of increasing angle, so we have to convert
313  // the angle from the -PI to PI domain of atan2() to ensure that
314  // the arc goes in the right direction
315  if( startAngle > endAngle )
316  endAngle += (2 * M_PI);
317 
318  // 360-degree arcs are stored in the file with start equal to end
319  if( arcStart == arcEnd )
320  {
321  startAngle = 0;
322  endAngle = 2 * M_PI;
323  }
324 
325  m_gal->DrawArcSegment( center, radius, startAngle, endAngle, width );
326 
327  // Arc Debugging
328  // m_gal->SetLineWidth( 5 );
329  // m_gal->SetStrokeColor( COLOR4D( 0.0, 1.0, 0.0, 1.0 ) );
330  // m_gal->DrawLine( center, aItem->GetABPosition( arcStart ) );
331  // m_gal->SetStrokeColor( COLOR4D( 1.0, 0.0, 0.0, 1.0 ) );
332  // m_gal->DrawLine( center, aItem->GetABPosition( arcEnd ) );
333  break;
334  }
335 
336  case GBR_SPOT_CIRCLE:
337  case GBR_SPOT_RECT:
338  case GBR_SPOT_OVAL:
339  case GBR_SPOT_POLY:
340  case GBR_SPOT_MACRO:
341  {
342  isFilled = m_gerbviewSettings.m_spotFill;
343  drawFlashedShape( aItem, isFilled );
344  break;
345  }
346 
347  case GBR_SEGMENT:
348  {
349  /* Plot a line from m_Start to m_End.
350  * Usually, a round pen is used, but some gerber files use a rectangular pen
351  * In fact, any aperture can be used to plot a line.
352  * currently: only a square pen is handled (I believe using a polygon gives a strange plot).
353  */
354  isFilled = m_gerbviewSettings.m_lineFill;
355  m_gal->SetIsFill( isFilled );
356  m_gal->SetIsStroke( !isFilled );
357 
358  if( isNegative && !isFilled )
359  m_gal->SetStrokeColor( GetSettings()->GetColor( aItem, aLayer ) );
360 
361  // TODO(JE) Refactor this to allow const aItem
362  D_CODE* code = aItem->GetDcodeDescr();
363  if( code && code->m_Shape == APT_RECT )
364  {
365  if( aItem->m_Polygon.OutlineCount() == 0 )
366  aItem->ConvertSegmentToPolygon();
367  drawPolygon( aItem, aItem->m_Polygon, isFilled );
368  }
369  else
370  {
371  if( !isFilled )
373 
374  m_gal->DrawSegment( start, end, width );
375  }
376  break;
377  }
378 
379  default:
380  wxASSERT_MSG( false, wxT( "GERBER_DRAW_ITEM shape is unknown!" ) );
381  break;
382  }
383 
384  // Enable for bounding box debugging
385  #if 0
386  const BOX2I& bb = aItem->ViewBBox();
387  m_gal->SetIsStroke( true );
388  m_gal->SetIsFill( true );
389  m_gal->SetLineWidth( 3 );
390  m_gal->SetStrokeColor( COLOR4D(0.9, 0.9, 0, 0.4) );
391  m_gal->SetFillColor( COLOR4D(0.9, 0.9, 0, 0.1) );
392  m_gal->DrawRectangle( bb.GetOrigin(), bb.GetEnd() );
393  #endif
394 }
GERBVIEW_RENDER_SETTINGS m_gerbviewSettings
virtual void SetFillColor(const COLOR4D &aColor)
Set the fill color.
void SetFontItalic(const bool aItalic)
Set italic property of current font.
virtual void DrawPolyline(const std::deque< VECTOR2D > &aPointList)
Draw a polyline.
virtual const COLOR4D & GetColor(const VIEW_ITEM *aItem, int aLayer) const override
Function GetColor Returns the color that should be used to draw the specific VIEW_ITEM on the specifi...
virtual void DrawRectangle(const VECTOR2D &aStartPoint, const VECTOR2D &aEndPoint)
Draw a rectangle.
bool IsDCodeLayer(int aLayer)
double GetLineLength(const wxPoint &aPointA, const wxPoint &aPointB)
Function GetLineLength returns the length of a line segment defined by aPointA and aPointB.
Definition: trigo.h:191
void drawPolygon(GERBER_DRAW_ITEM *aParent, SHAPE_POLY_SET &aPolygon, bool aFilled)
Helper routine to draw a polygon.
float m_outlineWidth
Line width used when drawing outlines.
Definition: painter.h:287
const Vec GetEnd() const
Definition: box2.h:193
virtual void BitmapText(const wxString &aText, const VECTOR2D &aPosition, double aRotationAngle)
Draws a text using a bitmap font.
APERTURE_T m_Shape
shape ( Line, rectangle, circle , oval .. )
Definition: dcode.h:95
int color
Definition: DXF_plotter.cpp:62
bool m_lineFill
Flag determining if lines should be drawn with fill.
void drawFlashedShape(GERBER_DRAW_ITEM *aItem, bool aFilled)
Helper to draw a flashed shape (aka spot)
ITERATOR Iterate(int aFirst, int aLast, bool aIterateHoles=false)
Function Iterate returns an object to iterate through the points of the polygons between aFirst and a...
int PointCount() const
Function PointCount()
bool m_spotFill
Flag determining if spots should be drawn with fill.
Definition: dcode.h:52
GAL * m_gal
Instance of graphic abstraction layer that gives an interface to call commands used to draw (eg.
Definition: painter.h:360
virtual void SetLineWidth(float aLineWidth)
Set the line width.
void SetFontBold(const bool aBold)
Set bold property of current font.
virtual void DrawSegment(const VECTOR2D &aStartPoint, const VECTOR2D &aEndPoint, double aWidth)
Draw a rounded segment.
VECTOR2< double > VECTOR2D
Definition: vector2d.h:586
virtual void SetIsFill(bool aIsFillEnabled)
Enable/disable fill.
Class SHAPE_POLY_SET.
virtual bool IsOpenGlEngine()
Returns true if the GAL engine is a opengl based type.
void SetTextMirrored(const bool aMirrored)
Set a mirrored property of text.
void SetVerticalJustify(const EDA_TEXT_VJUSTIFY_T aVerticalJustify)
Set the vertical justify for text drawing.
double Angle() const
Function Angle computes the angle of the vector.
Definition: vector2d.h:306
virtual void SetStrokeColor(const COLOR4D &aColor)
Set the stroke color.
virtual GERBVIEW_RENDER_SETTINGS * GetSettings() override
Function GetSettings Returns pointer to current settings that are going to be used when drawing items...
bool m_polygonFill
Flag determining if polygons should be drawn with fill.
virtual void DrawPolygon(const std::deque< VECTOR2D > &aPointList)
Draw a polygon.
Class D_CODE holds a gerber DCODE (also called Aperture) definition.
Definition: dcode.h:82
virtual void DrawCircle(const VECTOR2D &aCenterPoint, double aRadius)
Draw a circle using world coordinates.
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
void SetGlyphSize(const VECTOR2D aGlyphSize)
Set the font glyph size.
virtual void DrawArcSegment(const VECTOR2D &aCenterPoint, double aRadius, double aStartAngle, double aEndAngle, double aWidth)
Draw an arc segment.
void SetHorizontalJustify(const EDA_TEXT_HJUSTIFY_T aHorizontalJustify)
Set the horizontal justify for text drawing.
const Vec & GetOrigin() const
Definition: box2.h:191
virtual void SetIsStroke(bool aIsStrokeEnabled)
Enable/disable stroked outlines.
virtual void SetNegativeDrawMode(bool aSetting)
Sets negative draw mode in the renderer.
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39

References VECTOR2< T >::Angle(), APT_RECT, KIGFX::GAL::BitmapText(), SHAPE_POLY_SET::CacheTriangulation(), color, GERBER_DRAW_ITEM::ConvertSegmentToPolygon(), SHAPE_POLY_SET::COutline(), KIGFX::GAL::DrawArcSegment(), KIGFX::GAL::DrawCircle(), drawFlashedShape(), KIGFX::GAL::DrawPolygon(), drawPolygon(), KIGFX::GAL::DrawPolyline(), KIGFX::GAL::DrawRectangle(), KIGFX::GAL::DrawSegment(), GBR_ARC, GBR_CIRCLE, GBR_POLYGON, GBR_SEGMENT, GBR_SPOT_CIRCLE, GBR_SPOT_MACRO, GBR_SPOT_OVAL, GBR_SPOT_POLY, GBR_SPOT_RECT, GERBER_DRAW_ITEM::GetABPosition(), KIGFX::GERBVIEW_RENDER_SETTINGS::GetColor(), GERBER_DRAW_ITEM::GetDcodeDescr(), BOX2< Vec >::GetEnd(), GERBER_DRAW_ITEM::GetLayerPolarity(), GetLineLength(), BOX2< Vec >::GetOrigin(), GetSettings(), GERBER_DRAW_ITEM::GetTextD_CodePrms(), GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, EDA_ITEM::IsBrightened(), IsDCodeLayer(), KIGFX::GAL::IsOpenGlEngine(), SHAPE_POLY_SET::Iterate(), GERBER_DRAW_ITEM::m_ArcCentre, GERBER_DRAW_ITEM::m_DCode, GERBER_DRAW_ITEM::m_End, KIGFX::PAINTER::m_gal, GERBER_DRAW_ITEM::m_GerberImageFile, m_gerbviewSettings, GERBER_FILE_IMAGE::m_ImageNegative, KIGFX::GERBVIEW_RENDER_SETTINGS::m_lineFill, KIGFX::RENDER_SETTINGS::m_outlineWidth, GERBER_DRAW_ITEM::m_Polygon, KIGFX::GERBVIEW_RENDER_SETTINGS::m_polygonFill, GERBER_DRAW_ITEM::m_Shape, D_CODE::m_Shape, GERBER_DRAW_ITEM::m_Size, KIGFX::GERBVIEW_RENDER_SETTINGS::m_spotFill, GERBER_DRAW_ITEM::m_Start, SHAPE_POLY_SET::OutlineCount(), SHAPE_LINE_CHAIN::PointCount(), KIGFX::GAL::SetFillColor(), KIGFX::GAL::SetFontBold(), KIGFX::GAL::SetFontItalic(), KIGFX::GAL::SetGlyphSize(), KIGFX::GAL::SetHorizontalJustify(), KIGFX::GAL::SetIsFill(), KIGFX::GAL::SetIsStroke(), KIGFX::GAL::SetLineWidth(), KIGFX::GAL::SetNegativeDrawMode(), KIGFX::GAL::SetStrokeColor(), KIGFX::GAL::SetTextMirrored(), KIGFX::GAL::SetVerticalJustify(), and GERBER_DRAW_ITEM::ViewBBox().

Referenced by Draw().

◆ drawApertureMacro()

void GERBVIEW_PAINTER::drawApertureMacro ( GERBER_DRAW_ITEM aParent,
bool  aFilled 
)
protected

Helper to draw an aperture macro shape.

Definition at line 547 of file gerbview_painter.cpp.

548 {
549  D_CODE* code = aParent->GetDcodeDescr();
550  APERTURE_MACRO* macro = code->GetMacro();
551 
552  SHAPE_POLY_SET* macroShape = macro->GetApertureMacroShape( aParent, aParent->m_Start );
553 
556 
557  if( !aFilled )
558  {
559  for( int i = 0; i < macroShape->OutlineCount(); i++ )
560  m_gal->DrawPolyline( macroShape->COutline( i ) );
561  }
562  else
563  m_gal->DrawPolygon( *macroShape );
564 }
GERBVIEW_RENDER_SETTINGS m_gerbviewSettings
virtual void DrawPolyline(const std::deque< VECTOR2D > &aPointList)
Draw a polyline.
D_CODE * GetDcodeDescr() const
Function GetDcodeDescr returns the GetDcodeDescr of this object, or NULL.
int OutlineCount() const
Returns the number of outlines in the set
float m_outlineWidth
Line width used when drawing outlines.
Definition: painter.h:287
GAL * m_gal
Instance of graphic abstraction layer that gives an interface to call commands used to draw (eg.
Definition: painter.h:360
virtual void SetLineWidth(float aLineWidth)
Set the line width.
SHAPE_POLY_SET * GetApertureMacroShape(const GERBER_DRAW_ITEM *aParent, wxPoint aShapePos)
Function GetApertureMacroShape Calculate the primitive shape for flashed items.
Class SHAPE_POLY_SET.
bool m_polygonFill
Flag determining if polygons should be drawn with fill.
virtual void DrawPolygon(const std::deque< VECTOR2D > &aPointList)
Draw a polygon.
Class D_CODE holds a gerber DCODE (also called Aperture) definition.
Definition: dcode.h:82
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
size_t i
Definition: json11.cpp:597
APERTURE_MACRO * GetMacro() const
Definition: dcode.h:157
Struct APERTURE_MACRO helps support the "aperture macro" defined within standard RS274X.
Definition: am_primitive.h:163

References SHAPE_POLY_SET::COutline(), KIGFX::GAL::DrawPolygon(), KIGFX::GAL::DrawPolyline(), APERTURE_MACRO::GetApertureMacroShape(), GERBER_DRAW_ITEM::GetDcodeDescr(), D_CODE::GetMacro(), i, KIGFX::PAINTER::m_gal, m_gerbviewSettings, KIGFX::RENDER_SETTINGS::m_outlineWidth, KIGFX::GERBVIEW_RENDER_SETTINGS::m_polygonFill, GERBER_DRAW_ITEM::m_Start, SHAPE_POLY_SET::OutlineCount(), and KIGFX::GAL::SetLineWidth().

Referenced by drawFlashedShape().

◆ drawFlashedShape()

void GERBVIEW_PAINTER::drawFlashedShape ( GERBER_DRAW_ITEM aItem,
bool  aFilled 
)
protected

Helper to draw a flashed shape (aka spot)

Definition at line 417 of file gerbview_painter.cpp.

418 {
419  D_CODE* code = aItem->GetDcodeDescr();
420 
421  wxASSERT_MSG( code, wxT( "drawFlashedShape: Item has no D_CODE!" ) );
422 
423  if( !code )
424  return;
425 
426  m_gal->SetIsFill( aFilled );
427  m_gal->SetIsStroke( !aFilled );
429 
430  switch( aItem->m_Shape )
431  {
432  case GBR_SPOT_CIRCLE:
433  {
434  int radius = code->m_Size.x >> 1;
435  VECTOR2D start( aItem->GetABPosition( aItem->m_Start ) );
436 
437  if( !aFilled || code->m_DrillShape == APT_DEF_NO_HOLE )
438  {
439  m_gal->DrawCircle( start, radius );
440  }
441  else // rectangular hole
442  {
443  if( code->m_Polygon.OutlineCount() == 0 )
444  code->ConvertShapeToPolygon();
445 
446  SHAPE_POLY_SET poly = code->m_Polygon;
447  poly.Move( aItem->m_Start );
448 
449  drawPolygon( aItem, poly, aFilled );
450  }
451 
452  break;
453  }
454 
455  case GBR_SPOT_RECT:
456  {
457  wxPoint codeStart;
458  wxPoint aShapePos = aItem->m_Start;
459  codeStart.x = aShapePos.x - code->m_Size.x / 2;
460  codeStart.y = aShapePos.y - code->m_Size.y / 2;
461  wxPoint codeEnd = codeStart + code->m_Size;
462  codeStart = aItem->GetABPosition( codeStart );
463  codeEnd = aItem->GetABPosition( codeEnd );
464 
465  if( !aFilled || code->m_DrillShape == APT_DEF_NO_HOLE )
466  {
467  m_gal->DrawRectangle( VECTOR2D( codeStart ), VECTOR2D( codeEnd ) );
468  }
469  else
470  {
471  if( code->m_Polygon.OutlineCount() == 0 )
472  code->ConvertShapeToPolygon();
473 
474  SHAPE_POLY_SET poly = code->m_Polygon;
475  poly.Move( aItem->m_Start );
476 
477  drawPolygon( aItem, poly, aFilled );
478  }
479  break;
480  }
481 
482  case GBR_SPOT_OVAL:
483  {
484  int radius = 0;
485 
486  wxPoint codeStart = aItem->m_Start;
487  wxPoint codeEnd = aItem->m_Start;
488 
489  if( code->m_Size.x > code->m_Size.y ) // horizontal oval
490  {
491  int delta = (code->m_Size.x - code->m_Size.y) / 2;
492  codeStart.x -= delta;
493  codeEnd.x += delta;
494  radius = code->m_Size.y;
495  }
496  else // horizontal oval
497  {
498  int delta = (code->m_Size.y - code->m_Size.x) / 2;
499  codeStart.y -= delta;
500  codeEnd.y += delta;
501  radius = code->m_Size.x;
502  }
503 
504  codeStart = aItem->GetABPosition( codeStart );
505  codeEnd = aItem->GetABPosition( codeEnd );
506 
507  if( !aFilled || code->m_DrillShape == APT_DEF_NO_HOLE )
508  {
509  m_gal->DrawSegment( codeStart, codeEnd, radius );
510  }
511  else
512  {
513  if( code->m_Polygon.OutlineCount() == 0 )
514  code->ConvertShapeToPolygon();
515 
516  SHAPE_POLY_SET poly = code->m_Polygon;
517  poly.Move( aItem->m_Start );
518 
519  drawPolygon( aItem, poly, aFilled );
520  }
521  break;
522  }
523 
524  case GBR_SPOT_POLY:
525  {
526  if( code->m_Polygon.OutlineCount() == 0 )
527  code->ConvertShapeToPolygon();
528 
529  SHAPE_POLY_SET poly = code->m_Polygon;
530  poly.Move( aItem->m_Start );
531 
532  drawPolygon( aItem, poly, aFilled );
533  break;
534  }
535 
536  case GBR_SPOT_MACRO:
537  drawApertureMacro( aItem, aFilled );
538  break;
539 
540  default:
541  wxASSERT_MSG( false, wxT( "Unknown Gerber flashed shape!" ) );
542  break;
543  }
544 }
GERBVIEW_RENDER_SETTINGS m_gerbviewSettings
virtual void DrawRectangle(const VECTOR2D &aStartPoint, const VECTOR2D &aEndPoint)
Draw a rectangle.
D_CODE * GetDcodeDescr() const
Function GetDcodeDescr returns the GetDcodeDescr of this object, or NULL.
int OutlineCount() const
Returns the number of outlines in the set
void drawPolygon(GERBER_DRAW_ITEM *aParent, SHAPE_POLY_SET &aPolygon, bool aFilled)
Helper routine to draw a polygon.
float m_outlineWidth
Line width used when drawing outlines.
Definition: painter.h:287
wxSize m_Size
Horizontal and vertical dimensions.
Definition: dcode.h:94
static const int delta[8][2]
Definition: solve.cpp:112
GAL * m_gal
Instance of graphic abstraction layer that gives an interface to call commands used to draw (eg.
Definition: painter.h:360
virtual void SetLineWidth(float aLineWidth)
Set the line width.
void drawApertureMacro(GERBER_DRAW_ITEM *aParent, bool aFilled)
Helper to draw an aperture macro shape.
wxPoint GetABPosition(const wxPoint &aXYPosition) const
Function GetABPosition returns the image position of aPosition for this object.
virtual void DrawSegment(const VECTOR2D &aStartPoint, const VECTOR2D &aEndPoint, double aWidth)
Draw a rounded segment.
VECTOR2< double > VECTOR2D
Definition: vector2d.h:586
void Move(const VECTOR2I &aVector) override
virtual void SetIsFill(bool aIsFillEnabled)
Enable/disable fill.
Class SHAPE_POLY_SET.
APERTURE_DEF_HOLETYPE m_DrillShape
shape of the hole (0 = no hole, round = 1, rect = 2) */
Definition: dcode.h:98
Class D_CODE holds a gerber DCODE (also called Aperture) definition.
Definition: dcode.h:82
virtual void DrawCircle(const VECTOR2D &aCenterPoint, double aRadius)
Draw a circle using world coordinates.
SHAPE_POLY_SET m_Polygon
Definition: dcode.h:107
void ConvertShapeToPolygon()
Function ConvertShapeToPolygon convert a shape to an equivalent polygon.
Definition: dcode.cpp:303
virtual void SetIsStroke(bool aIsStrokeEnabled)
Enable/disable stroked outlines.

References APT_DEF_NO_HOLE, D_CODE::ConvertShapeToPolygon(), delta, drawApertureMacro(), KIGFX::GAL::DrawCircle(), drawPolygon(), KIGFX::GAL::DrawRectangle(), KIGFX::GAL::DrawSegment(), GBR_SPOT_CIRCLE, GBR_SPOT_MACRO, GBR_SPOT_OVAL, GBR_SPOT_POLY, GBR_SPOT_RECT, GERBER_DRAW_ITEM::GetABPosition(), GERBER_DRAW_ITEM::GetDcodeDescr(), D_CODE::m_DrillShape, KIGFX::PAINTER::m_gal, m_gerbviewSettings, KIGFX::RENDER_SETTINGS::m_outlineWidth, D_CODE::m_Polygon, GERBER_DRAW_ITEM::m_Shape, D_CODE::m_Size, GERBER_DRAW_ITEM::m_Start, SHAPE_POLY_SET::Move(), SHAPE_POLY_SET::OutlineCount(), KIGFX::GAL::SetIsFill(), KIGFX::GAL::SetIsStroke(), and KIGFX::GAL::SetLineWidth().

Referenced by draw().

◆ drawPolygon()

void GERBVIEW_PAINTER::drawPolygon ( GERBER_DRAW_ITEM aParent,
SHAPE_POLY_SET aPolygon,
bool  aFilled 
)
protected

Helper routine to draw a polygon.

Definition at line 397 of file gerbview_painter.cpp.

400 {
401  for( auto it = aPolygon.Iterate( 0 ); it; ++it )
402  *it = aParent->GetABPosition( *it );
403 
406 
407  if( !aFilled )
408  {
409  for( int i = 0; i < aPolygon.OutlineCount(); i++ )
410  m_gal->DrawPolyline( aPolygon.COutline( i ) );
411  }
412  else
413  m_gal->DrawPolygon( aPolygon );
414 }
GERBVIEW_RENDER_SETTINGS m_gerbviewSettings
virtual void DrawPolyline(const std::deque< VECTOR2D > &aPointList)
Draw a polyline.
int OutlineCount() const
Returns the number of outlines in the set
float m_outlineWidth
Line width used when drawing outlines.
Definition: painter.h:287
ITERATOR Iterate(int aFirst, int aLast, bool aIterateHoles=false)
Function Iterate returns an object to iterate through the points of the polygons between aFirst and a...
GAL * m_gal
Instance of graphic abstraction layer that gives an interface to call commands used to draw (eg.
Definition: painter.h:360
virtual void SetLineWidth(float aLineWidth)
Set the line width.
wxPoint GetABPosition(const wxPoint &aXYPosition) const
Function GetABPosition returns the image position of aPosition for this object.
bool m_polygonFill
Flag determining if polygons should be drawn with fill.
virtual void DrawPolygon(const std::deque< VECTOR2D > &aPointList)
Draw a polygon.
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
size_t i
Definition: json11.cpp:597

References SHAPE_POLY_SET::COutline(), KIGFX::GAL::DrawPolygon(), KIGFX::GAL::DrawPolyline(), GERBER_DRAW_ITEM::GetABPosition(), i, SHAPE_POLY_SET::Iterate(), KIGFX::PAINTER::m_gal, m_gerbviewSettings, KIGFX::RENDER_SETTINGS::m_outlineWidth, KIGFX::GERBVIEW_RENDER_SETTINGS::m_polygonFill, SHAPE_POLY_SET::OutlineCount(), and KIGFX::GAL::SetLineWidth().

Referenced by draw(), and drawFlashedShape().

◆ getLineThickness()

int GERBVIEW_PAINTER::getLineThickness ( int  aActualThickness) const
protected

Function getLineThickness() Get the thickness to draw for a line (e.g.

0 thickness lines get a minimum value).

Parameters
aActualThicknessline own thickness
Returns
the thickness to draw

Definition at line 155 of file gerbview_painter.cpp.

156 {
157  // if items have 0 thickness, draw them with the outline
158  // width, otherwise respect the set value (which, no matter
159  // how small will produce something)
160  if( aActualThickness == 0 )
162 
163  return aActualThickness;
164 }
GERBVIEW_RENDER_SETTINGS m_gerbviewSettings
float m_outlineWidth
Line width used when drawing outlines.
Definition: painter.h:287

References m_gerbviewSettings, and KIGFX::RENDER_SETTINGS::m_outlineWidth.

◆ GetSettings()

virtual GERBVIEW_RENDER_SETTINGS* KIGFX::GERBVIEW_PAINTER::GetSettings ( )
inlineoverridevirtual

Function GetSettings Returns pointer to current settings that are going to be used when drawing items.

Returns
Current rendering settings.

Implements KIGFX::PAINTER.

Definition at line 180 of file gerbview_painter.h.

181  {
182  return &m_gerbviewSettings;
183  }
GERBVIEW_RENDER_SETTINGS m_gerbviewSettings

References m_gerbviewSettings.

Referenced by draw().

◆ SetGAL()

void KIGFX::PAINTER::SetGAL ( GAL aGal)
inlineinherited

Function SetGAL Changes Graphics Abstraction Layer used for drawing items for a new one.

Parameters
aGalis the new GAL instance.

Definition at line 328 of file painter.h.

329  {
330  m_gal = aGal;
331  }
GAL * m_gal
Instance of graphic abstraction layer that gives an interface to call commands used to draw (eg.
Definition: painter.h:360

References KIGFX::PAINTER::m_gal.

Member Data Documentation

◆ m_brightenedColor

COLOR4D KIGFX::PAINTER::m_brightenedColor
protectedinherited

Color of brightened item frame.

Definition at line 363 of file painter.h.

◆ m_gal

GAL* KIGFX::PAINTER::m_gal
protectedinherited

Instance of graphic abstraction layer that gives an interface to call commands used to draw (eg.

DrawLine, DrawCircle, etc.)

Definition at line 360 of file painter.h.

Referenced by KIGFX::SCH_PAINTER::draw(), draw(), KIGFX::PCB_PAINTER::draw(), drawApertureMacro(), drawFlashedShape(), drawPolygon(), KIGFX::SCH_PAINTER::setColors(), KIGFX::PAINTER::SetGAL(), and KIGFX::SCH_PAINTER::triLine().

◆ m_gerbviewSettings

GERBVIEW_RENDER_SETTINGS KIGFX::GERBVIEW_PAINTER::m_gerbviewSettings
protected

The documentation for this class was generated from the following files: