KiCad PCB EDA Suite
GERBER_FILE_IMAGE Class Reference

Hold the image data and parameters for one gerber file and layer parameters. More...

#include <gerber_file_image.h>

Inheritance diagram for GERBER_FILE_IMAGE:
EDA_ITEM KIGFX::VIEW_ITEM INSPECTABLE EXCELLON_IMAGE

Public Member Functions

 GERBER_FILE_IMAGE (int layer)
 
virtual ~GERBER_FILE_IMAGE ()
 
wxString GetClass () const override
 Return the class name. More...
 
bool LoadGerberFile (const wxString &aFullFileName)
 Read and load a gerber file. More...
 
const wxArrayString & GetMessages () const
 
int GetDcodesCount ()
 
virtual void ResetDefaultValues ()
 Set all parameters to a default value, before reading a file. More...
 
COLOR4D GetPositiveDrawColor () const
 
GERBER_DRAW_ITEMSGetItems ()
 
int GetItemsCount ()
 
void AddItemToList (GERBER_DRAW_ITEM *aItem)
 Add a new GERBER_DRAW_ITEM item to the drawings list. More...
 
GERBER_DRAW_ITEMGetLastItemInList () const
 
GERBER_LAYERGetLayerParams ()
 
bool HasNegativeItems ()
 
void ClearMessageList ()
 Clear the message list. More...
 
void AddMessageToList (const wxString &aMessage)
 Add a message to the message list. More...
 
void InitToolTable ()
 
wxPoint ReadXYCoord (char *&aText, bool aExcellonMode=false)
 Return the current coordinate type pointed to by XnnYnn Text (XnnnnYmmmm). More...
 
wxPoint ReadIJCoord (char *&Text)
 Return the current coordinate type pointed to by InnJnn Text (InnnnJmmmm) More...
 
int CodeNumber (char *&aText)
 Reads the next number and returns the value. More...
 
D_CODEGetDCODEOrCreate (int aDCODE, bool aCreateIfNoExist=true)
 Return a pointer to the D_CODE within this GERBER for the given aDCODE. More...
 
D_CODEGetDCODE (int aDCODE) const
 Return a pointer to the D_CODE within this GERBER for the given aDCODE. More...
 
APERTURE_MACROFindApertureMacro (const APERTURE_MACRO &aLookup)
 Look up a previously read in aperture macro. More...
 
void StepAndRepeatItem (const GERBER_DRAW_ITEM &aItem)
 Gerber format has a command Step an Repeat. More...
 
void DisplayImageInfo (GERBVIEW_FRAME *aMainFrame)
 Display information about image parameters in the status bar. More...
 
void RemoveAttribute (X2_ATTRIBUTE &aAttribute)
 Called when a TD command is found the Gerber file. More...
 
SEARCH_RESULT Visit (INSPECTOR inspector, void *testData, const KICAD_T scanTypes[]) override
 May be re-implemented for each derived class in order to handle all the types given by its member data. More...
 
KICAD_T Type () const
 Returns the type of object. More...
 
EDA_ITEMGetParent () const
 
virtual void SetParent (EDA_ITEM *aParent)
 
bool IsModified () const
 
bool IsNew () const
 
bool IsMoving () const
 
bool IsDragging () const
 
bool IsWireImage () const
 
bool IsSelected () const
 
bool IsEntered () const
 
bool IsResized () const
 
bool IsBrightened () const
 
void SetWireImage ()
 
void SetSelected ()
 
void SetBrightened ()
 
void ClearSelected ()
 
void ClearBrightened ()
 
void SetModified ()
 
int GetState (EDA_ITEM_FLAGS type) const
 
void SetState (EDA_ITEM_FLAGS type, bool state)
 
EDA_ITEM_FLAGS GetStatus () const
 
void SetStatus (EDA_ITEM_FLAGS aStatus)
 
void SetFlags (EDA_ITEM_FLAGS aMask)
 
void ClearFlags (EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
 
EDA_ITEM_FLAGS GetFlags () const
 
bool HasFlag (EDA_ITEM_FLAGS aFlag) const
 
EDA_ITEM_FLAGS GetEditFlags () const
 
void ClearTempFlags ()
 
void ClearEditFlags ()
 
virtual bool IsType (const KICAD_T aScanTypes[]) const
 Check whether the item is one of the listed types. More...
 
void SetForceVisible (bool aEnable)
 Set and clear force visible flag used to force the item to be drawn even if it's draw attribute is set to not visible. More...
 
bool IsForceVisible () const
 
virtual void GetMsgPanelInfo (EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList)
 Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes. More...
 
virtual bool HitTest (const wxPoint &aPosition, int aAccuracy=0) const
 Test if aPosition is inside or on the boundary of this item. More...
 
virtual bool HitTest (const EDA_RECT &aRect, bool aContained, int aAccuracy=0) const
 Test if aRect intersects this item. More...
 
virtual const EDA_RECT GetBoundingBox () const
 Return the orthogonal bounding box of this object for display purposes. More...
 
virtual wxPoint GetPosition () const
 
virtual void SetPosition (const wxPoint &aPos)
 
virtual const wxPoint GetFocusPosition () const
 Similar to GetPosition, but allows items to return their visual center rather than their anchor. More...
 
virtual EDA_ITEMClone () const
 Create a duplicate of this item with linked list members set to NULL. More...
 
virtual wxString GetSelectMenuText (EDA_UNITS aUnits) const
 Return the text to display to be used in the selection clarification context menu when multiple items are found at the current cursor position. More...
 
virtual BITMAPS GetMenuImage () const
 Return a pointer to an image to be used in menus. More...
 
virtual bool Matches (const wxFindReplaceData &aSearchData, void *aAuxData) const
 Compare the item against the search criteria in aSearchData. More...
 
virtual bool Replace (const wxFindReplaceData &aSearchData, void *aAuxData=nullptr)
 Perform a text replace using the find and replace criteria in aSearchData on items that support text find and replace. More...
 
virtual bool IsReplaceable () const
 Override this method in any derived object that supports test find and replace. More...
 
bool operator< (const EDA_ITEM &aItem) const
 Test if another item is less than this object. More...
 
virtual const BOX2I ViewBBox () const override
 Return the bounding box of the item covering all its layers. More...
 
virtual void ViewGetLayers (int aLayers[], int &aCount) const override
 Return the all the layers within the VIEW the object is painted on. More...
 
virtual void ViewDraw (int aLayer, VIEW *aView) const
 Draw the parts of the object belonging to layer aLayer. More...
 
virtual double ViewGetLOD (int aLayer, VIEW *aView) const
 Return the level of detail (LOD) of the item. More...
 
VIEW_ITEM_DATA * viewPrivData () const
 
void ClearViewPrivData ()
 
bool Set (PROPERTY_BASE *aProperty, wxAny &aValue)
 
template<typename T >
bool Set (PROPERTY_BASE *aProperty, T aValue)
 
template<typename T >
bool Set (const wxString &aProperty, T aValue)
 
wxAny Get (PROPERTY_BASE *aProperty)
 
template<typename T >
Get (PROPERTY_BASE *aProperty)
 
template<typename T >
boost::optional< T > Get (const wxString &aProperty)
 

Static Public Member Functions

template<class T >
static SEARCH_RESULT IterateForward (std::deque< T > &aList, INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
 This changes first parameter to avoid the DList and use the main queue instead. More...
 
template<class T >
static SEARCH_RESULT IterateForward (std::vector< T > &aList, INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
 Change first parameter to avoid the DList and use std::vector instead. More...
 
static bool Replace (const wxFindReplaceData &aSearchData, wxString &aText)
 Perform a text replace on aText using the find and replace criteria in aSearchData on items that support text find and replace. More...
 
static bool Sort (const EDA_ITEM *aLeft, const EDA_ITEM *aRight)
 Helper function to be used by the C++ STL sort algorithm for sorting a STL container of EDA_ITEM pointers. More...
 

Public Attributes

bool m_InUse
 
bool m_IsVisible
 < True if the draw layer is visible and must be drawn. More...
 
COLOR4D m_PositiveDrawColor
 
wxString m_FileName
 
wxString m_ImageName
 
bool m_IsX2_file
 < True if a X2 gerber attribute was found in file. More...
 
X2_ATTRIBUTE_FILEFUNCTIONm_FileFunction
 
wxString m_MD5_value
 
wxString m_PartString
 
int m_GraphicLayer
 
bool m_ImageNegative
 
bool m_ImageJustifyXCenter
 < Image Justify Center on X axis (default = false). More...
 
bool m_ImageJustifyYCenter
 Image Justify Offset on XY axis (default = 0,0). More...
 
wxPoint m_ImageJustifyOffset
 
bool m_GerbMetric
 
bool m_Relative
 < false = absolute Coord, true = relative Coord. More...
 
bool m_NoTrailingZeros
 
wxPoint m_ImageOffset
 
wxSize m_FmtScale
 < Fmt 2.3: m_FmtScale = 3, fmt 3.4: m_FmtScale = 4. More...
 
wxSize m_FmtLen
 Image rotation (0, 90, 180, 270 only) in degrees. More...
 
int m_ImageRotation
 Local rotation in degrees added to m_ImageRotation. More...
 
double m_LocalRotation
 
wxPoint m_Offset
 
wxRealPoint m_Scale
 
bool m_SwapAxis
 
bool m_MirrorA
 
bool m_MirrorB
 
int m_Iterpolation
 
int m_Current_Tool
 
int m_Last_Pen_Command
 < Current or last pen state (0..9, set by Dn option with n < 10. More...
 
int m_CommandState
 
int m_LineNum
 < Line number of the gerber file while reading. More...
 
wxPoint m_CurrentPos
 
wxPoint m_PreviousPos
 
wxPoint m_IJPos
 
bool m_LastCoordIsIJPos
 < True if a IJ coord was read (for arcs & circles ). More...
 
int m_ArcRadius
 Identifier for arc data type (IJ (center) or A## (radius)). More...
 
LAST_EXTRA_ARC_DATA_TYPE m_LastArcDataType
 
FILE * m_Current_File
 
int m_Selected_Tool
 
bool m_Has_DCode
 < True if has DCodes in file or false if no DCodes found. Perhaps deprecated RS274D file. More...
 
bool m_Has_MissingDCode
 
bool m_360Arc_enbl
 
bool m_AsArcG74G75Cmd
 
bool m_PolygonFillMode
 
int m_PolygonFillModeState
 a collection of APERTURE_MACROS, sorted by name More...
 
APERTURE_MACRO_SET m_aperture_macros
 
GBR_NETLIST_METADATA m_NetAttributeDict
 
wxString m_AperFunction
 
std::map< wxString, int > m_ComponentsList
 
std::map< wxString, int > m_NetnamesList
 
D_CODEm_Aperture_List [TOOLS_MAX_COUNT]
 < Dcode (Aperture) List for this layer (max TOOLS_MAX_COUNT: see dcode.h) More...
 
bool m_Exposure
 
GERBER_LAYER m_GBRLayerParams
 
GERBER_DRAW_ITEMS m_drawings
 
const KIID m_Uuid
 

Protected Member Functions

bool Matches (const wxString &aText, const wxFindReplaceData &aSearchData) const
 Compare aText against search criteria in aSearchData. More...
 

Protected Attributes

EDA_ITEM_FLAGS m_status
 
EDA_ITEMm_parent
 Linked list: Link (parent struct) More...
 
bool m_forceVisible
 
EDA_ITEM_FLAGS m_flags
 

Private Member Functions

char * GetNextLine (char *aBuff, unsigned int aBuffSize, char *aText, FILE *aFile)
 Test for an end of line. More...
 
bool GetEndOfBlock (char *aBuff, unsigned int aBuffSize, char *&aText, FILE *aGerberFile)
 
bool ReadRS274XCommand (char *aBuff, unsigned int aBuffSize, char *&aText)
 Read a single RS274X command terminated with a %. More...
 
bool ExecuteRS274XCommand (int aCommand, char *aBuff, unsigned int aBuffSize, char *&aText)
 Execute a RS274X command. More...
 
int ReadXCommandID (char *&text)
 Read two bytes of data and assembles them into an int with the first byte in the sequence put into the most significant part of a 16 bit value to build a RS274X command identifier. More...
 
bool ReadApertureMacro (char *aBuff, unsigned int aBuffSize, char *&text, FILE *gerber_file)
 Read in an aperture macro and saves it in m_aperture_macros. More...
 
bool Execute_G_Command (char *&text, int G_command)
 
bool Execute_DCODE_Command (char *&text, int D_command)
 

Private Attributes

wxArrayString m_messagesList
 
int m_hasNegativeItems
 True if the image is negative or has some negative items. More...
 

Detailed Description

Hold the image data and parameters for one gerber file and layer parameters.

Todo:
: Move them in GERBER_LAYER class.

Definition at line 110 of file gerber_file_image.h.

Constructor & Destructor Documentation

◆ GERBER_FILE_IMAGE()

GERBER_FILE_IMAGE::GERBER_FILE_IMAGE ( int  layer)

Definition at line 88 of file gerber_file_image.cpp.

88  :
89  EDA_ITEM( nullptr, GERBER_IMAGE_T )
90 {
91  m_GraphicLayer = aLayer; // Graphic layer Number
92  m_IsVisible = true; // must be drawn
93  m_PositiveDrawColor = WHITE; // The color used to draw positive items for this image
94 
95  m_Selected_Tool = 0;
96  m_FileFunction = nullptr; // file function parameters
97 
99 
100  for( unsigned ii = 0; ii < arrayDim( m_Aperture_List ); ii++ )
101  m_Aperture_List[ii] = nullptr;
102 }
X2_ATTRIBUTE_FILEFUNCTION * m_FileFunction
bool m_IsVisible
< True if the draw layer is visible and must be drawn.
D_CODE * m_Aperture_List[TOOLS_MAX_COUNT]
< Dcode (Aperture) List for this layer (max TOOLS_MAX_COUNT: see dcode.h)
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Returns # of elements in an array.
Definition: arraydim.h:31
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType)
Definition: eda_item.cpp:37
Definition: color4d.h:48
virtual void ResetDefaultValues()
Set all parameters to a default value, before reading a file.

References arrayDim(), m_Aperture_List, m_FileFunction, m_GraphicLayer, m_IsVisible, m_PositiveDrawColor, m_Selected_Tool, ResetDefaultValues(), and WHITE.

◆ ~GERBER_FILE_IMAGE()

GERBER_FILE_IMAGE::~GERBER_FILE_IMAGE ( )
virtual

Definition at line 105 of file gerber_file_image.cpp.

106 {
107 
108  for( auto item : GetItems() )
109  delete item;
110 
111  m_drawings.clear();
112 
113  for( unsigned ii = 0; ii < arrayDim( m_Aperture_List ); ii++ )
114  {
115  delete m_Aperture_List[ii];
116  }
117 
118  delete m_FileFunction;
119 }
X2_ATTRIBUTE_FILEFUNCTION * m_FileFunction
GERBER_DRAW_ITEMS & GetItems()
D_CODE * m_Aperture_List[TOOLS_MAX_COUNT]
< Dcode (Aperture) List for this layer (max TOOLS_MAX_COUNT: see dcode.h)
GERBER_DRAW_ITEMS m_drawings
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Returns # of elements in an array.
Definition: arraydim.h:31

References arrayDim(), GetItems(), m_Aperture_List, m_drawings, and m_FileFunction.

Member Function Documentation

◆ AddItemToList()

void GERBER_FILE_IMAGE::AddItemToList ( GERBER_DRAW_ITEM aItem)
inline

Add a new GERBER_DRAW_ITEM item to the drawings list.

Parameters
aItemis the GERBER_DRAW_ITEM to add to list

Definition at line 160 of file gerber_file_image.h.

161  {
162  m_drawings.push_back( aItem );
163  }
GERBER_DRAW_ITEMS m_drawings

References m_drawings.

Referenced by Execute_DCODE_Command(), EXCELLON_IMAGE::Execute_Drill_Command(), EXCELLON_IMAGE::FinishRouteCommand(), and StepAndRepeatItem().

◆ AddMessageToList()

◆ ClearBrightened()

void EDA_ITEM::ClearBrightened ( )
inlineinherited

◆ ClearEditFlags()

◆ ClearFlags()

void EDA_ITEM::ClearFlags ( EDA_ITEM_FLAGS  aMask = EDA_ITEM_ALL_FLAGS)
inlineinherited

Definition at line 153 of file eda_item.h.

153 { m_flags &= ~aMask; }
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:480

References EDA_ITEM::m_flags.

Referenced by FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), PNS_KICAD_IFACE::AddItem(), SCH_EDIT_FRAME::AddItemToScreenAndUndoList(), SCH_MOVE_TOOL::AlignElements(), FOOTPRINT::BuildPolyCourtyards(), EDA_ITEM::ClearBrightened(), EDA_ITEM::ClearEditFlags(), EDA_ITEM::ClearSelected(), EDA_ITEM::ClearTempFlags(), ConvertOutlineToPolygon(), SCH_EDIT_FRAME::ConvertPart(), SYMBOL_EDITOR_EDIT_TOOL::Copy(), FOOTPRINT_EDITOR_CONTROL::CreateFootprint(), SYMBOL_EDITOR_PIN_TOOL::CreateImagePins(), MICROWAVE_TOOL::createMicrowaveInductor(), DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES(), KIGFX::SCH_PAINTER::draw(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), SCH_ITEM::Duplicate(), PCB_EDIT_FRAME::ExchangeFootprint(), PCB_SELECTION_TOOL::ExitGroup(), SYMBOL_EDIT_FRAME::GetSymbolFromRedoList(), SYMBOL_EDIT_FRAME::GetSymbolFromUndoList(), FOOTPRINT_EDITOR_CONTROL::ImportFootprint(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromLibrary(), EE_SELECTION_TOOL::Main(), EE_SELECTION_TOOL::narrowSelection(), FOOTPRINT_EDITOR_CONTROL::NewFootprint(), FOOTPRINT_EDIT_FRAME::OpenProjectFiles(), PCB_BASE_FRAME::PlaceFootprint(), SYMBOL_EDITOR_PIN_TOOL::PlacePin(), BOARD_COMMIT::Push(), PCB_SELECTION_TOOL::RebuildSelection(), SCH_EDIT_TOOL::RepeatDrawItem(), SYMBOL_EDIT_FRAME::RollbackSymbolFromUndo(), SCH_EDIT_FRAME::SaveCopyForRepeatItem(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), SCH_SEXPR_PLUGIN_CACHE::savePin(), EE_SELECTION_TOOL::selectMultiple(), SCH_EDIT_FRAME::SelectUnit(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), and SCH_DRAWING_TOOLS::TwoClickPlace().

◆ ClearMessageList()

void GERBER_FILE_IMAGE::ClearMessageList ( )
inline

Clear the message list.

Call it before reading a Gerber file

Definition at line 192 of file gerber_file_image.h.

193  {
194  m_messagesList.Clear();
195  }
wxArrayString m_messagesList

References m_messagesList.

Referenced by EXCELLON_IMAGE::LoadFile(), and LoadGerberFile().

◆ ClearSelected()

◆ ClearTempFlags()

void EDA_ITEM::ClearTempFlags ( )
inlineinherited

Definition at line 165 of file eda_item.h.

166  {
168  DO_NOT_DRAW );
169  }
#define DO_NOT_DRAW
Used to disable draw function.
#define STARTPOINT
When a line is selected, these flags indicate which.
#define ENDPOINT
ends. (Used to support dragging.)
#define IS_LINKED
Used in calculation to mark linked items (temporary use)
#define CANDIDATE
flag indicating that the structure is connected
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:153
#define SKIP_STRUCT
flag indicating that the structure should be ignored
#define TEMP_SELECTED
flag indicating that the structure has already selected

References CANDIDATE, EDA_ITEM::ClearFlags(), DO_NOT_DRAW, ENDPOINT, IS_LINKED, SKIP_STRUCT, STARTPOINT, and TEMP_SELECTED.

Referenced by SCH_EDIT_FRAME::PutDataInPreviousState().

◆ ClearViewPrivData()

void KIGFX::VIEW_ITEM::ClearViewPrivData ( )
inlineinherited

Definition at line 143 of file view_item.h.

144  {
145  m_viewPrivData = nullptr;
146  }
VIEW_ITEM_DATA * m_viewPrivData
Definition: view_item.h:151

References KIGFX::VIEW_ITEM::m_viewPrivData.

Referenced by KIGFX::VIEW::OnDestroy().

◆ Clone()

EDA_ITEM * EDA_ITEM::Clone ( ) const
virtualinherited

Create a duplicate of this item with linked list members set to NULL.

The default version will return NULL in release builds and likely crash the program. In debug builds, a warning message indicating the derived class has not implemented cloning. This really should be a pure virtual function. Due to the fact that there are so many objects derived from EDA_ITEM, the decision was made to return NULL until all the objects derived from EDA_ITEM implement cloning. Once that happens, this function should be made pure.

Returns
A clone of the item.

Reimplemented in FP_ZONE, ZONE, SCH_SYMBOL, PAD, FOOTPRINT, PCB_DIM_CENTER, PCB_DIM_LEADER, SCH_HIERLABEL, PCB_DIM_ORTHOGONAL, PCB_VIA, SCH_SHEET, PCB_DIM_ALIGNED, SCH_GLOBALLABEL, SCH_LABEL, PCB_ARC, SCH_TEXT, SCH_LINE, LIB_PIN, SCH_BUS_BUS_ENTRY, FP_TEXT, SCH_FIELD, PCB_TRACK, SCH_SHEET_PIN, SCH_BUS_WIRE_ENTRY, LIB_FIELD, FP_SHAPE, PCB_TEXT, SCH_BITMAP, PCB_SHAPE, PCB_GROUP, SCH_JUNCTION, SCH_NO_CONNECT, LIB_TEXT, SCH_MARKER, LIB_SHAPE, NETINFO_ITEM, PCB_TARGET, SCH_PIN, PCB_MARKER, and KIGFX::ORIGIN_VIEWITEM.

Definition at line 83 of file eda_item.cpp.

84 {
85  wxCHECK_MSG( false, nullptr, wxT( "Clone not implemented in derived class " ) + GetClass() +
86  wxT( ". Bad programmer!" ) );
87 }
virtual wxString GetClass() const =0
Return the class name.

References EDA_ITEM::GetClass().

Referenced by BOOST_AUTO_TEST_CASE(), DIALOG_DIMENSION_PROPERTIES::DIALOG_DIMENSION_PROPERTIES(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), BOARD_ITEM::Duplicate(), SCH_ITEM::Duplicate(), PCB_DIMENSION_BASE::GetEffectiveShape(), LIB_SYMBOL::LIB_SYMBOL(), new_clone(), LIB_SYMBOL::operator=(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), SCH_SEXPR_PLUGIN_CACHE::removeSymbol(), SCH_LEGACY_PLUGIN_CACHE::removeSymbol(), SCH_EDIT_FRAME::SaveCopyForRepeatItem(), PCB_BASE_EDIT_FRAME::SaveCopyInUndoList(), CLIPBOARD_IO::SaveSelection(), LIB_SYMBOL::SetConversion(), LIB_SYMBOL::SetUnitCount(), SCH_DRAWING_TOOLS::SingleClickPlace(), COMMIT::Stage(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), and SCH_DRAWING_TOOLS::TwoClickPlace().

◆ CodeNumber()

int GERBER_FILE_IMAGE::CodeNumber ( char *&  aText)

Reads the next number and returns the value.

Parameters
aTextPointer to the input string vector
Returns

Definition at line 402 of file rs274d.cpp.

403 {
404  int retval;
405  char* endptr;
406 
407  errno = 0;
408 
409  retval = strtol( aText + 1, &endptr, 10 );
410 
411  if( endptr == aText || errno != 0 )
412  return 0;
413 
414  wxCHECK_MSG( retval < std::numeric_limits<int>::max(), 0, _( "Invalid Code Number" ) );
415 
416  aText = endptr;
417 
418  return static_cast<int>( retval );
419 }
#define _(s)

References _.

Referenced by Execute_G_Command(), LoadGerberFile(), and EXCELLON_IMAGE::Select_Tool().

◆ DisplayImageInfo()

void GERBER_FILE_IMAGE::DisplayImageInfo ( GERBVIEW_FRAME aMainFrame)

Display information about image parameters in the status bar.

Function DisplayImageInfo has knowledge about the frame and how and where to put status information about this object into the frame's message panel.

Parameters
aMainFrameThe GERBVIEW_FRAME to display messages.

Display info about Image Parameters. These parameters are valid for the entire file, and must set only once (If more than once, only the last value is used)

Definition at line 333 of file gerber_file_image.cpp.

334 {
335  wxString msg;
336 
337  aMainFrame->ClearMsgPanel();
338 
339  // Display Image name (Image specific)
340  aMainFrame->AppendMsgPanel( _( "Image name" ), m_ImageName );
341 
342  // Display graphic layer number used to draw this Image
343  // (not a Gerber parameter but is also image specific)
344  msg.Printf( wxT( "%d" ), m_GraphicLayer + 1 );
345  aMainFrame->AppendMsgPanel( _( "Graphic layer" ), msg );
346 
347  // Display Image rotation (Image specific)
348  msg.Printf( wxT( "%d" ), m_ImageRotation );
349  aMainFrame->AppendMsgPanel( _( "Img Rot." ), msg );
350 
351  // Display Image polarity (Image specific)
352  msg = m_ImageNegative ? _("Negative") : _("Normal");
353  aMainFrame->AppendMsgPanel( _( "Polarity" ), msg );
354 
355  // Display Image justification and offset for justification (Image specific)
356  msg = m_ImageJustifyXCenter ? _("Center") : _("Normal");
357  aMainFrame->AppendMsgPanel( _( "X Justify" ), msg );
358 
359  msg = m_ImageJustifyYCenter ? _("Center") : _("Normal");
360  aMainFrame->AppendMsgPanel( _( "Y Justify" ), msg );
361 
362  switch( aMainFrame->GetUserUnits() )
363  {
364  case EDA_UNITS::MILS:
365  msg.Printf( wxT( "X=%f Y=%f" ), Iu2Mils( m_ImageJustifyOffset.x ),
366  Iu2Mils( m_ImageJustifyOffset.y ) );
367  break;
368 
369  case EDA_UNITS::INCHES:
370  msg.Printf( wxT( "X=%f Y=%f" ), Iu2Mils( m_ImageJustifyOffset.x ) / 1000.0,
371  Iu2Mils( m_ImageJustifyOffset.y ) / 1000.0 );
372  break;
373 
375  msg.Printf( wxT( "X=%f Y=%f" ), Iu2Millimeter( m_ImageJustifyOffset.x ),
376  Iu2Millimeter( m_ImageJustifyOffset.y ) );
377  break;
378 
379  default:
380  wxASSERT_MSG( false, wxT( "Invalid unit" ) );
381  }
382 
383 
384  aMainFrame->AppendMsgPanel( _( "Image Justify Offset" ), msg );
385 }
bool m_ImageJustifyXCenter
< Image Justify Center on X axis (default = false).
bool m_ImageJustifyYCenter
Image Justify Offset on XY axis (default = 0,0).
#define _(s)
virtual void ClearMsgPanel()
Clear all messages from the message panel.
EDA_UNITS GetUserUnits() const
Return the user units currently in use.
int m_ImageRotation
Local rotation in degrees added to m_ImageRotation.
void AppendMsgPanel(const wxString &aTextUpper, const wxString &aTextLower, int aPadding=6)
Append a message to the message panel.

References _, EDA_DRAW_FRAME::AppendMsgPanel(), EDA_DRAW_FRAME::ClearMsgPanel(), EDA_BASE_FRAME::GetUserUnits(), INCHES, m_GraphicLayer, m_ImageJustifyOffset, m_ImageJustifyXCenter, m_ImageJustifyYCenter, m_ImageName, m_ImageNegative, m_ImageRotation, MILLIMETRES, and MILS.

Referenced by GERBVIEW_FRAME::UpdateTitleAndInfo().

◆ Execute_DCODE_Command()

bool GERBER_FILE_IMAGE::Execute_DCODE_Command ( char *&  text,
int  D_command 
)
private

Definition at line 558 of file rs274d.cpp.

559 {
560  wxSize size( 15, 15 );
561 
562  APERTURE_T aperture = APT_CIRCLE;
563  GERBER_DRAW_ITEM* gbritem;
564 
565  int dcode = 0;
566  D_CODE* tool = nullptr;
567  wxString msg;
568 
569  if( D_commande >= FIRST_DCODE ) // This is a "Set tool" command
570  {
571  if( D_commande > (TOOLS_MAX_COUNT - 1) )
572  D_commande = TOOLS_MAX_COUNT - 1;
573 
574  // remember which tool is selected, nothing is done with it in this
575  // call
576  m_Current_Tool = D_commande;
577 
578  D_CODE* pt_Dcode = GetDCODE( D_commande );
579 
580  if( pt_Dcode )
581  pt_Dcode->m_InUse = true;
582  else
583  m_Has_MissingDCode = true;
584 
585  return true;
586  }
587  else // D_commande = 0..9: this is a pen command (usually D1, D2 or D3)
588  {
589  m_Last_Pen_Command = D_commande;
590  }
591 
592  if( m_PolygonFillMode ) // Enter a polygon description:
593  {
594  switch( D_commande )
595  {
596  case 1: // code D01 Draw line, exposure ON
597  if( !m_Exposure ) // Start a new polygon outline:
598  {
599  m_Exposure = true;
600  gbritem = new GERBER_DRAW_ITEM( this );
601  AddItemToList( gbritem );
602  gbritem->m_Shape = GBR_POLYGON;
603  gbritem->m_Flashed = false;
604  gbritem->m_DCode = 0; // No DCode for a Polygon (Region in Gerber dialect)
605 
606 
607  if( gbritem->m_GerberImageFile )
608  {
610  gbritem->m_AperFunction = gbritem->m_GerberImageFile->m_AperFunction;
611  }
612  }
613 
614  switch( m_Iterpolation )
615  {
618  // Before any arc command, a G74 or G75 command must be set.
619  // Otherwise the Gerber file is invalid
620  if( !m_AsArcG74G75Cmd )
621  {
622  AddMessageToList( _( "Invalid Gerber file: missing G74 or G75 arc command" ) );
623 
624  // Disable further warning messages:
625  m_AsArcG74G75Cmd = true;
626  }
627 
628  gbritem = GetLastItemInList();
629 
630  fillArcPOLY( gbritem, m_PreviousPos,
632  ( m_Iterpolation == GERB_INTERPOL_ARC_NEG ) ? false : true,
633  m_360Arc_enbl, GetLayerParams().m_LayerNegative );
634  break;
635 
636  default:
637  gbritem = GetLastItemInList();
638 
639  gbritem->m_Start = m_PreviousPos; // m_Start is used as temporary storage
640 
641  if( gbritem->m_Polygon.OutlineCount() == 0 )
642  {
643  gbritem->m_Polygon.NewOutline();
644  gbritem->m_Polygon.Append( VECTOR2I( gbritem->m_Start ) );
645  }
646 
647  gbritem->m_End = m_CurrentPos; // m_End is used as temporary storage
648  gbritem->m_Polygon.Append( VECTOR2I( gbritem->m_End ) );
649  break;
650  }
651 
654  break;
655 
656  case 2: // code D2: exposure OFF (i.e. "move to")
657  if( m_Exposure && GetLastItemInList() ) // End of polygon
658  {
659  gbritem = GetLastItemInList();
660  gbritem->m_Polygon.Append( gbritem->m_Polygon.CVertex( 0 ) );
661  StepAndRepeatItem( *gbritem );
662  }
663 
664  m_Exposure = false;
667  break;
668 
669  default:
670  return false;
671  }
672  }
673  else
674  {
675  switch( D_commande )
676  {
677  case 1: // code D01 Draw line, exposure ON
678  m_Exposure = true;
679 
680  tool = GetDCODE( m_Current_Tool );
681 
682  if( tool )
683  {
684  size = tool->m_Size;
685  dcode = tool->m_Num_Dcode;
686  aperture = tool->m_Shape;
687  }
688 
689  switch( m_Iterpolation )
690  {
692  gbritem = new GERBER_DRAW_ITEM( this );
693  AddItemToList( gbritem );
694 
695  fillLineGBRITEM( gbritem, dcode, m_PreviousPos,
696  m_CurrentPos, size, GetLayerParams().m_LayerNegative );
697  StepAndRepeatItem( *gbritem );
698  break;
699 
702  gbritem = new GERBER_DRAW_ITEM( this );
703  AddItemToList( gbritem );
704 
705  if( m_LastCoordIsIJPos )
706  {
707  fillArcGBRITEM( gbritem, dcode, m_PreviousPos,
708  m_CurrentPos, m_IJPos, size,
710  false : true, m_360Arc_enbl, GetLayerParams().m_LayerNegative );
711  m_LastCoordIsIJPos = false;
712  }
713  else
714  {
715  fillLineGBRITEM( gbritem, dcode, m_PreviousPos,
716  m_CurrentPos, size, GetLayerParams().m_LayerNegative );
717  }
718 
719  StepAndRepeatItem( *gbritem );
720 
721  break;
722 
723  default:
724  msg.Printf( wxT( "RS274D: DCODE Command: interpol error (type %X)" ),
725  m_Iterpolation );
726  AddMessageToList( msg );
727  break;
728  }
729 
731  break;
732 
733  case 2: // code D2: exposure OFF (i.e. "move to")
734  m_Exposure = false;
736  break;
737 
738  case 3: // code D3: flash aperture
739  tool = GetDCODE( m_Current_Tool );
740 
741  if( tool )
742  {
743  size = tool->m_Size;
744  dcode = tool->m_Num_Dcode;
745  aperture = tool->m_Shape;
746  }
747 
748  gbritem = new GERBER_DRAW_ITEM( this );
749  AddItemToList( gbritem );
750  fillFlashedGBRITEM( gbritem, aperture, dcode, m_CurrentPos,
751  size, GetLayerParams().m_LayerNegative );
752  StepAndRepeatItem( *gbritem );
754  break;
755 
756  default:
757  return false;
758  }
759  }
760 
761  return true;
762 }
void AddMessageToList(const wxString &aMessage)
Add a message to the message list.
int OutlineCount() const
Return the number of vertices in a given outline/hole.
int m_Last_Pen_Command
< Current or last pen state (0..9, set by Dn option with n < 10.
wxSize m_Size
Horizontal and vertical dimensions.
Definition: dcode.h:188
static void fillArcPOLY(GERBER_DRAW_ITEM *aGbrItem, const wxPoint &aStart, const wxPoint &aEnd, const wxPoint &rel_center, bool aClockwise, bool aMultiquadrant, bool aLayerNegative)
Create an arc G code when found in polygon outlines.
Definition: rs274d.cpp:328
bool m_LastCoordIsIJPos
< True if a IJ coord was read (for arcs & circles ).
bool m_InUse
false if the aperture (previously defined) is not used to draw something
Definition: dcode.h:197
APERTURE_T m_Shape
shape ( Line, rectangle, circle , oval .. )
Definition: dcode.h:189
const VECTOR2I & CVertex(int aIndex, int aOutline, int aHole) const
Return the aGlobalIndex-th vertex in the poly set.
D_CODE * GetDCODE(int aDCODE) const
Return a pointer to the D_CODE within this GERBER for the given aDCODE.
void SetNetAttributes(const GBR_NETLIST_METADATA &aNetAttributes)
void fillLineGBRITEM(GERBER_DRAW_ITEM *aGbrItem, int Dcode_index, const wxPoint &aStart, const wxPoint &aEnd, wxSize aPenSize, bool aLayerNegative)
Initialize a given GBRITEM so that it can draw a linear D code.
Definition: rs274d.cpp:153
VECTOR2< int > VECTOR2I
Definition: vector2d.h:622
SHAPE_POLY_SET m_Polygon
int m_PolygonFillModeState
a collection of APERTURE_MACROS, sorted by name
GERBER_DRAW_ITEM * GetLastItemInList() const
void AddItemToList(GERBER_DRAW_ITEM *aItem)
Add a new GERBER_DRAW_ITEM item to the drawings list.
#define FIRST_DCODE
Definition: dcode.h:70
APERTURE_T
The set of all gerber aperture types allowed, according to page 16 of http://gerbv....
Definition: dcode.h:49
int m_Num_Dcode
D code value ( >= 10 )
Definition: dcode.h:190
#define _(s)
int NewOutline()
Creates a new hole in a given outline.
void fillArcGBRITEM(GERBER_DRAW_ITEM *aGbrItem, int Dcode_index, const wxPoint &aStart, const wxPoint &aEnd, const wxPoint &aRelCenter, wxSize aPenSize, bool aClockwise, bool aMultiquadrant, bool aLayerNegative)
Initialize a given GBRITEM so that it can draw an arc G code.
Definition: rs274d.cpp:202
A gerber DCODE (also called Aperture) definition.
Definition: dcode.h:80
void fillFlashedGBRITEM(GERBER_DRAW_ITEM *aGbrItem, APERTURE_T aAperture, int Dcode_index, const wxPoint &aPos, wxSize aSize, bool aLayerNegative)
Initializes a given GBRITEM so that it can draw a circle which is filled and has no pen border.
Definition: rs274d.cpp:99
GBR_NETLIST_METADATA m_NetAttributeDict
#define TOOLS_MAX_COUNT
Definition: dcode.h:72
void StepAndRepeatItem(const GERBER_DRAW_ITEM &aItem)
Gerber format has a command Step an Repeat.
GERBER_FILE_IMAGE * m_GerberImageFile
GERBER_LAYER & GetLayerParams()
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Add a new vertex to the contour indexed by aOutline and aHole (defaults to the outline of the last po...

References _, AddItemToList(), AddMessageToList(), SHAPE_POLY_SET::Append(), APT_CIRCLE, SHAPE_POLY_SET::CVertex(), fillArcGBRITEM(), fillArcPOLY(), fillFlashedGBRITEM(), fillLineGBRITEM(), FIRST_DCODE, GBR_POLYGON, GERB_INTERPOL_ARC_NEG, GERB_INTERPOL_ARC_POS, GERB_INTERPOL_LINEAR_1X, GetDCODE(), GetLastItemInList(), GetLayerParams(), m_360Arc_enbl, GERBER_DRAW_ITEM::m_AperFunction, m_AperFunction, m_AsArcG74G75Cmd, m_Current_Tool, m_CurrentPos, GERBER_DRAW_ITEM::m_DCode, GERBER_DRAW_ITEM::m_End, m_Exposure, GERBER_DRAW_ITEM::m_Flashed, GERBER_DRAW_ITEM::m_GerberImageFile, m_Has_MissingDCode, m_IJPos, D_CODE::m_InUse, m_Iterpolation, m_Last_Pen_Command, m_LastCoordIsIJPos, m_NetAttributeDict, D_CODE::m_Num_Dcode, GERBER_DRAW_ITEM::m_Polygon, m_PolygonFillMode, m_PolygonFillModeState, m_PreviousPos, D_CODE::m_Shape, GERBER_DRAW_ITEM::m_Shape, D_CODE::m_Size, GERBER_DRAW_ITEM::m_Start, SHAPE_POLY_SET::NewOutline(), SHAPE_POLY_SET::OutlineCount(), GERBER_DRAW_ITEM::SetNetAttributes(), StepAndRepeatItem(), and TOOLS_MAX_COUNT.

Referenced by LoadGerberFile().

◆ Execute_G_Command()

bool GERBER_FILE_IMAGE::Execute_G_Command ( char *&  text,
int  G_command 
)
private

Definition at line 422 of file rs274d.cpp.

423 {
424  switch( G_command )
425  {
426  case GC_PHOTO_MODE: // can starts a D03 flash command: redundant, can be safely ignored.
427  break;
428 
431  break;
432 
435  break;
436 
439  break;
440 
441  case GC_COMMENT:
442  // Skip comment, but only if the line does not start by "G04 #@! "
443  // which is a metadata, i.e. a X2 command inside the comment.
444  // this comment is called a "structured comment"
445  if( strncmp( text, " #@! ", 5 ) == 0 )
446  {
447  text += 5;
448 
449  // The string starting at text is the same as the X2 attribute,
450  // but a X2 attribute ends by '%'. So we build the X2 attribute string
451  std::string x2buf;
452 
453  while( *text && (*text != '*') )
454  {
455  x2buf += *text;
456  text++;
457  }
458 
459  // add the end of X2 attribute string
460  x2buf += "*%";
461  x2buf += '\0';
462 
463  char* cptr = (char*)x2buf.data();
464  int code_command = ReadXCommandID( cptr );
465  ExecuteRS274XCommand( code_command, nullptr, 0, cptr );
466  }
467 
468  while( *text && (*text != '*') )
469  text++;
470 
471  break;
472 
473  case GC_SELECT_TOOL:
474  {
475  int D_commande = CodeNumber( text );
476 
477  if( D_commande < FIRST_DCODE )
478  return false;
479 
480  if( D_commande > (TOOLS_MAX_COUNT - 1) )
481  D_commande = TOOLS_MAX_COUNT - 1;
482 
483  m_Current_Tool = D_commande;
484  D_CODE* pt_Dcode = GetDCODE( D_commande );
485 
486  if( pt_Dcode )
487  pt_Dcode->m_InUse = true;
488 
489  break;
490  }
491 
492  case GC_SPECIFY_INCHES:
493  m_GerbMetric = false; // false = Inches, true = metric
494  break;
495 
497  m_GerbMetric = true; // false = Inches, true = metric
498  break;
499 
500  case GC_TURN_OFF_360_INTERPOL: // disable Multi cadran arc and Arc interpol
501  m_360Arc_enbl = false;
502  m_Iterpolation = GERB_INTERPOL_LINEAR_1X; // not sure it should be done
503  m_AsArcG74G75Cmd = true;
504  break;
505 
507  m_360Arc_enbl = true;
508  m_AsArcG74G75Cmd = true;
509  break;
510 
512  m_Relative = false; // false = absolute Coord, true = relative
513  // Coord
514  break;
515 
517  m_Relative = true; // false = absolute Coord, true = relative
518  // Coord
519  break;
520 
522  m_PolygonFillMode = true;
523  m_Exposure = false;
524  break;
525 
527  if( m_Exposure && GetLastItemInList() ) // End of polygon
528  {
529  GERBER_DRAW_ITEM * gbritem = GetLastItemInList();
530 
531  if( gbritem->m_Polygon.VertexCount() )
532  gbritem->m_Polygon.Append( gbritem->m_Polygon.CVertex( 0 ) );
533 
534  StepAndRepeatItem( *gbritem );
535  }
536 
537  m_Exposure = false;
538  m_PolygonFillMode = false;
540  m_Iterpolation = GERB_INTERPOL_LINEAR_1X; // not sure it should be done
541  break;
542 
543  case GC_MOVE: // Non existent
544  default:
545  {
546  wxString msg;
547  msg.Printf( wxT( "G%0.2d command not handled" ), G_command );
548  AddMessageToList( msg );
549  return false;
550  }
551  }
552 
553 
554  return true;
555 }
void AddMessageToList(const wxString &aMessage)
Add a message to the message list.
int CodeNumber(char *&aText)
Reads the next number and returns the value.
Definition: rs274d.cpp:402
bool m_InUse
false if the aperture (previously defined) is not used to draw something
Definition: dcode.h:197
const VECTOR2I & CVertex(int aIndex, int aOutline, int aHole) const
Return the aGlobalIndex-th vertex in the poly set.
int VertexCount(int aOutline=-1, int aHole=-1) const
Return the number of points in the shape poly set.
D_CODE * GetDCODE(int aDCODE) const
Return a pointer to the D_CODE within this GERBER for the given aDCODE.
SHAPE_POLY_SET m_Polygon
int ReadXCommandID(char *&text)
Read two bytes of data and assembles them into an int with the first byte in the sequence put into th...
Definition: rs274x.cpp:115
int m_PolygonFillModeState
a collection of APERTURE_MACROS, sorted by name
bool ExecuteRS274XCommand(int aCommand, char *aBuff, unsigned int aBuffSize, char *&aText)
Execute a RS274X command.
Definition: rs274x.cpp:198
GERBER_DRAW_ITEM * GetLastItemInList() const
#define FIRST_DCODE
Definition: dcode.h:70
bool m_Relative
< false = absolute Coord, true = relative Coord.
A gerber DCODE (also called Aperture) definition.
Definition: dcode.h:80
#define TOOLS_MAX_COUNT
Definition: dcode.h:72
void StepAndRepeatItem(const GERBER_DRAW_ITEM &aItem)
Gerber format has a command Step an Repeat.
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Add a new vertex to the contour indexed by aOutline and aHole (defaults to the outline of the last po...

References AddMessageToList(), SHAPE_POLY_SET::Append(), CodeNumber(), SHAPE_POLY_SET::CVertex(), ExecuteRS274XCommand(), FIRST_DCODE, GC_CIRCLE_NEG_INTERPOL, GC_CIRCLE_POS_INTERPOL, GC_COMMENT, GC_LINEAR_INTERPOL_1X, GC_MOVE, GC_PHOTO_MODE, GC_SELECT_TOOL, GC_SPECIFY_ABSOLUES_COORD, GC_SPECIFY_INCHES, GC_SPECIFY_MILLIMETERS, GC_SPECIFY_RELATIVEES_COORD, GC_TURN_OFF_360_INTERPOL, GC_TURN_OFF_POLY_FILL, GC_TURN_ON_360_INTERPOL, GC_TURN_ON_POLY_FILL, GERB_INTERPOL_ARC_NEG, GERB_INTERPOL_ARC_POS, GERB_INTERPOL_LINEAR_1X, GetDCODE(), GetLastItemInList(), m_360Arc_enbl, m_AsArcG74G75Cmd, m_Current_Tool, m_Exposure, m_GerbMetric, D_CODE::m_InUse, m_Iterpolation, GERBER_DRAW_ITEM::m_Polygon, m_PolygonFillMode, m_PolygonFillModeState, m_Relative, ReadXCommandID(), StepAndRepeatItem(), text, TOOLS_MAX_COUNT, and SHAPE_POLY_SET::VertexCount().

Referenced by LoadGerberFile().

◆ ExecuteRS274XCommand()

bool GERBER_FILE_IMAGE::ExecuteRS274XCommand ( int  aCommand,
char *  aBuff,
unsigned int  aBuffSize,
char *&  aText 
)
private

Execute a RS274X command.

Definition at line 198 of file rs274x.cpp.

200 {
201  int code;
202  int seq_len; // not used, just provided
203  int seq_char;
204  bool ok = true;
205  wxString msg;
206  double fcoord;
207  bool x_fmt_known = false;
208  bool y_fmt_known = false;
209 
210  // conv_scale = scaling factor from inch to Internal Unit
211  double conv_scale = IU_PER_MILS * 1000;
212 
213  if( m_GerbMetric )
214  conv_scale /= 25.4;
215 
216  switch( aCommand )
217  {
218  case FORMAT_STATEMENT:
219  seq_len = 2;
220 
221  while( *aText != '*' )
222  {
223  switch( *aText )
224  {
225  case ' ':
226  aText++;
227  break;
228 
229  case 'D': // Non-standard option for all zeros (leading + tailing)
230  msg.Printf( _( "RS274X: Invalid GERBER format command '%c' at line %d: \"%s\"" ),
231  'D', m_LineNum, aBuff );
232  AddMessageToList( msg );
233  msg.Printf( _("GERBER file \"%s\" may not display as intended." ),
234  m_FileName.ToAscii() );
235  AddMessageToList( msg );
237 
238  case 'L': // No Leading 0
239  m_NoTrailingZeros = false;
240  aText++;
241  break;
242 
243  case 'T': // No trailing 0
244  m_NoTrailingZeros = true;
245  aText++;
246  break;
247 
248  case 'A': // Absolute coord
249  m_Relative = false;
250  aText++;
251  break;
252 
253  case 'I': // Relative coord
254  m_Relative = true;
255  aText++;
256  break;
257 
258  case 'G':
259  case 'N': // Sequence code (followed by one digit: the sequence len)
260  // (sometimes found before the X,Y sequence)
261  // Obscure option
262  aText++;
263  seq_char = *aText++;
264 
265  if( (seq_char >= '0') && (seq_char <= '9') )
266  seq_len = seq_char - '0';
267 
268  break;
269 
270  case 'M': // Sequence code (followed by one digit: the sequence len)
271  // (sometimes found after the X,Y sequence)
272  // Obscure option
273  aText++;
274  code = *aText;
275 
276  if( ( code >= '0' ) && ( code <= '9' ) )
277  aText++; // skip the digit
278 
279  break;
280 
281  case 'X':
282  case 'Y':
283  {
284  code = *(aText++);
285  char ctmp = *(aText++) - '0';
286 
287  if( code == 'X' )
288  {
289  x_fmt_known = true;
290  // number of digits after the decimal point (0 to 7 allowed)
291  m_FmtScale.x = *aText - '0';
292  m_FmtLen.x = ctmp + m_FmtScale.x;
293 
294  // m_FmtScale is 0 to 7
295  // (Old Gerber specification was 0 to 6)
296  if( m_FmtScale.x < 0 )
297  m_FmtScale.x = 0;
298 
299  if( m_FmtScale.x > 7 )
300  m_FmtScale.x = 7;
301  }
302  else
303  {
304  y_fmt_known = true;
305  m_FmtScale.y = *aText - '0';
306  m_FmtLen.y = ctmp + m_FmtScale.y;
307 
308  if( m_FmtScale.y < 0 )
309  m_FmtScale.y = 0;
310 
311  if( m_FmtScale.y > 7 )
312  m_FmtScale.y = 7;
313  }
314 
315  aText++;
316  }
317  break;
318 
319  case '*':
320  break;
321 
322  default:
323  msg.Printf( wxT( "Unknown id (%c) in FS command" ),
324  *aText );
325  AddMessageToList( msg );
326  GetEndOfBlock( aBuff, aBuffSize, aText, m_Current_File );
327  ok = false;
328  break;
329  }
330  }
331 
332  if( !x_fmt_known || !y_fmt_known )
333  AddMessageToList( wxT( "RS274X: Format Statement (FS) without X or Y format" ) );
334 
335  break;
336 
337  case AXIS_SELECT: // command ASAXBY*% or %ASAYBX*%
338  m_SwapAxis = false;
339 
340  if( strncasecmp( aText, "AYBX", 4 ) == 0 )
341  m_SwapAxis = true;
342 
343  break;
344 
345  case MIRROR_IMAGE: // command %MIA0B0*%, %MIA0B1*%, %MIA1B0*%, %MIA1B1*%
346  m_MirrorA = m_MirrorB = false;
347 
348  while( *aText && *aText != '*' )
349  {
350  switch( *aText )
351  {
352  case 'A': // Mirror A axis ?
353  aText++;
354 
355  if( *aText == '1' )
356  m_MirrorA = true;
357 
358  break;
359 
360  case 'B': // Mirror B axis ?
361  aText++;
362 
363  if( *aText == '1' )
364  m_MirrorB = true;
365 
366  break;
367 
368  default:
369  aText++;
370  break;
371  }
372  }
373  break;
374 
375  case MODE_OF_UNITS:
376  code = ReadXCommandID( aText );
377 
378  if( code == INCH )
379  m_GerbMetric = false;
380  else if( code == MILLIMETER )
381  m_GerbMetric = true;
382 
383  conv_scale = m_GerbMetric ? IU_PER_MILS / 25.4 : IU_PER_MILS;
384  break;
385 
386  case FILE_ATTRIBUTE: // Command %TF ...
387  {
389  dummy.ParseAttribCmd( m_Current_File, aBuff, aBuffSize, aText, m_LineNum );
390 
391  if( dummy.IsFileFunction() )
392  {
393  delete m_FileFunction;
395 
396  // Don't set this until we get a file function; other code expects m_IsX2_file == true
397  // to mean that we have a valid m_FileFunction
398  m_IsX2_file = true;
399  }
400  else if( dummy.IsFileMD5() )
401  {
402  m_MD5_value = dummy.GetPrm( 1 );
403  }
404  else if( dummy.IsFilePart() )
405  {
406  m_PartString = dummy.GetPrm( 1 );
407  }
408  }
409  break;
410 
411  case APERTURE_ATTRIBUTE: // Command %TA
412  {
414  dummy.ParseAttribCmd( m_Current_File, aBuff, aBuffSize, aText, m_LineNum );
415 
416  if( dummy.GetAttribute() == wxT( ".AperFunction" ) )
417  {
418  m_AperFunction = dummy.GetPrm( 1 );
419 
420  // A few function values can have other parameters. Add them
421  for( int ii = 2; ii < dummy.GetPrmCount(); ii++ )
422  m_AperFunction << wxT( "," ) << dummy.GetPrm( ii );
423  }
424  }
425  break;
426 
427  case NET_ATTRIBUTE: // Command %TO currently %TO.P %TO.N and %TO.C
428  {
430 
431  dummy.ParseAttribCmd( m_Current_File, aBuff, aBuffSize, aText, m_LineNum );
432 
433  if( dummy.GetAttribute() == wxT( ".N" ) )
434  {
437  }
438  else if( dummy.GetAttribute() == wxT( ".C" ) )
439  {
442  }
443  else if( dummy.GetAttribute() == wxT( ".P" ) )
444  {
447  m_NetAttributeDict.m_Padname.SetField( FormatStringFromGerber( dummy.GetPrm( 2 ) ), true, true );
448 
449  if( dummy.GetPrmCount() > 3 )
450  {
452  FormatStringFromGerber( dummy.GetPrm( 3 ) ), true, true );
453  }
454  else
455  {
457  }
458  }
459  }
460  break;
461 
462  case REMOVE_APERTURE_ATTRIBUTE: // Command %TD ...
463  {
465  dummy.ParseAttribCmd( m_Current_File, aBuff, aBuffSize, aText, m_LineNum );
467  }
468  break;
469 
470  case OFFSET: // command: OFAnnBnn (nn = float number) = layer Offset
471  m_Offset.x = m_Offset.y = 0;
472  while( *aText != '*' )
473  {
474  switch( *aText )
475  {
476  case 'A': // A axis offset in current unit (inch or mm)
477  aText++;
478  fcoord = ReadDouble( aText );
479  m_Offset.x = KiROUND( fcoord * conv_scale );
480  break;
481 
482  case 'B': // B axis offset in current unit (inch or mm)
483  aText++;
484  fcoord = ReadDouble( aText );
485  m_Offset.y = KiROUND( fcoord * conv_scale );
486  break;
487  }
488  }
489  break;
490 
491  case SCALE_FACTOR:
492  m_Scale.x = m_Scale.y = 1.0;
493  while( *aText != '*' )
494  {
495  switch( *aText )
496  {
497  case 'A': // A axis scale
498  aText++;
499  m_Scale.x = ReadDouble( aText );
500  break;
501 
502  case 'B': // B axis scale
503  aText++;
504  m_Scale.y = ReadDouble( aText );
505  break;
506  }
507  }
508  break;
509 
510  case IMAGE_OFFSET: // command: IOAnnBnn (nn = float number) = Image Offset
511  m_ImageOffset.x = m_ImageOffset.y = 0;
512  while( *aText != '*' )
513  {
514  switch( *aText )
515  {
516  case 'A': // A axis offset in current unit (inch or mm)
517  aText++;
518  fcoord = ReadDouble( aText );
519  m_ImageOffset.x = KiROUND( fcoord * conv_scale );
520  break;
521 
522  case 'B': // B axis offset in current unit (inch or mm)
523  aText++;
524  fcoord = ReadDouble( aText );
525  m_ImageOffset.y = KiROUND( fcoord * conv_scale );
526  break;
527  }
528  }
529  break;
530 
531  case IMAGE_ROTATION: // command IR0* or IR90* or IR180* or IR270*
532  if( strncasecmp( aText, "0*", 2 ) == 0 )
533  m_ImageRotation = 0;
534  else if( strncasecmp( aText, "90*", 3 ) == 0 )
535  m_ImageRotation = 90;
536  else if( strncasecmp( aText, "180*", 4 ) == 0 )
537  m_ImageRotation = 180;
538  else if( strncasecmp( aText, "270*", 4 ) == 0 )
539  m_ImageRotation = 270;
540  else
541  AddMessageToList( _( "RS274X: Command \"IR\" rotation value not allowed" ) );
542 
543  break;
544 
545  case STEP_AND_REPEAT: // command SR, like %SRX3Y2I5.0J2*%
546  m_Iterpolation = GERB_INTERPOL_LINEAR_1X; // Start a new Gerber layer
548  GetLayerParams().m_StepForRepeat.x = 0.0; // offset for Step and Repeat command
550  GetLayerParams().m_YRepeatCount = 1; // The repeat count
551  GetLayerParams().m_StepForRepeatMetric = m_GerbMetric; // the step units
552 
553  while( *aText && *aText != '*' )
554  {
555  switch( *aText )
556  {
557  case 'I': // X axis offset
558  aText++;
560  break;
561 
562  case 'J': // Y axis offset
563  aText++;
565  break;
566 
567  case 'X': // X axis repeat count
568  aText++;
570  break;
571 
572  case 'Y': // Y axis offset
573  aText++;
575  break;
576 
577  default:
578  aText++;
579  break;
580  }
581  }
582  break;
583 
584  case IMAGE_JUSTIFY: // Command IJAnBn*
585  m_ImageJustifyXCenter = false; // Image Justify Center on X axis (default = false)
586  m_ImageJustifyYCenter = false; // Image Justify Center on Y axis (default = false)
587  m_ImageJustifyOffset = wxPoint(0,0); // Image Justify Offset on XY axis (default = 0,0)
588  while( *aText && *aText != '*' )
589  {
590  // IJ command is (for A or B axis) AC or AL or A<coordinate>
591  switch( *aText )
592  {
593  case 'A': // A axis justify
594  aText++;
595 
596  if( *aText == 'C' )
597  {
598  m_ImageJustifyXCenter = true;
599  aText++;
600  }
601  else if( *aText == 'L' )
602  {
603  m_ImageJustifyXCenter = true;
604  aText++;
605  }
606  else
607  {
608  m_ImageJustifyOffset.x = KiROUND( ReadDouble( aText ) * conv_scale);
609  }
610 
611  break;
612 
613  case 'B': // B axis justify
614  aText++;
615 
616  if( *aText == 'C' )
617  {
618  m_ImageJustifyYCenter = true;
619  aText++;
620  }
621  else if( *aText == 'L' )
622  {
623  m_ImageJustifyYCenter = true;
624  aText++;
625  }
626  else
627  {
628  m_ImageJustifyOffset.y = KiROUND( ReadDouble( aText ) * conv_scale);
629  }
630 
631  break;
632 
633  default:
634  aText++;
635  break;
636  }
637  }
638 
640  m_ImageJustifyOffset.x = 0;
641 
643  m_ImageJustifyOffset.y = 0;
644 
645  break;
646 
647  case KNOCKOUT:
648  m_Iterpolation = GERB_INTERPOL_LINEAR_1X; // Start a new Gerber layer
649  msg = _( "RS274X: Command KNOCKOUT ignored by GerbView" ) ;
650  AddMessageToList( msg );
651  break;
652 
653  case ROTATE: // Layer rotation: command like %RO45*%
654  m_Iterpolation = GERB_INTERPOL_LINEAR_1X; // Start a new Gerber layer
655  m_LocalRotation = ReadDouble( aText ); // Store layer rotation in degrees
656  break;
657 
658  case IMAGE_NAME:
659  m_ImageName.Empty();
660 
661  while( *aText != '*' )
662  m_ImageName.Append( *aText++ );
663 
664  break;
665 
666  case LOAD_NAME:
667  // %LN is a (deprecated) equivalentto G04: a comment
668  while( *aText && *aText != '*' )
669  aText++; // Skip text
670 
671  break;
672 
673  case IMAGE_POLARITY:
674  if( strncasecmp( aText, "NEG", 3 ) == 0 )
675  m_ImageNegative = true;
676  else
677  m_ImageNegative = false;
678 
679  break;
680 
681  case LOAD_POLARITY:
682  if( *aText == 'C' )
684  else
686 
687  break;
688 
689  case AP_MACRO: // lines like %AMMYMACRO*
690  // 5,1,8,0,0,1.08239X$1,22.5*
691  // %
692  /*ok = */ReadApertureMacro( aBuff, aBuffSize, aText, m_Current_File );
693  break;
694 
695  case AP_DEFINITION:
696  /* input example: %ADD30R,0.081800X0.101500*%
697  * Aperture definition has 4 options: C, R, O, P
698  * (Circle, Rect, Oval, regular Polygon)
699  * and shapes can have a hole (round or rectangular).
700  * All optional parameters values start by X
701  * at this point, text points to 2nd 'D'
702  */
703  if( *aText++ != 'D' )
704  {
705  ok = false;
706  break;
707  }
708 
709  m_Has_DCode = true;
710 
711  code = ReadInt( aText );
712 
713  D_CODE* dcode;
714  dcode = GetDCODEOrCreate( code );
715 
716  if( dcode == nullptr )
717  break;
718 
720 
721  // at this point, text points to character after the ADD<num>,
722  // i.e. R in example above. If aText[0] is one of the usual
723  // apertures: (C,R,O,P), there is a comma after it.
724  if( aText[1] == ',' )
725  {
726  char stdAperture = *aText;
727 
728  aText += 2; // skip "C," for example
729 
730  // First parameter is the size X:
731  dcode->m_Size.x = KiROUND( ReadDouble( aText ) * conv_scale );
732  dcode->m_Size.y = dcode->m_Size.x;
733 
734  switch( stdAperture ) // Aperture desceiption has optional parameters. Read them
735  {
736  case 'C': // Circle
737  dcode->m_Shape = APT_CIRCLE;
738  while( *aText == ' ' )
739  aText++;
740 
741  if( *aText == 'X' )
742  {
743  aText++;
744  dcode->m_Drill.x = dcode->m_Drill.y =
745  KiROUND( ReadDouble( aText ) * conv_scale );
747  }
748 
749  while( *aText == ' ' )
750  aText++;
751 
752  if( *aText == 'X' )
753  {
754  aText++;
755  dcode->m_Drill.y =
756  KiROUND( ReadDouble( aText ) * conv_scale );
757 
759  }
760  dcode->m_Defined = true;
761  break;
762 
763  case 'O': // oval
764  case 'R': // rect
765  dcode->m_Shape = (stdAperture == 'O') ? APT_OVAL : APT_RECT;
766 
767  while( *aText == ' ' )
768  aText++;
769 
770  if( *aText == 'X' ) // Second parameter: size Y
771  {
772  aText++;
773  dcode->m_Size.y =
774  KiROUND( ReadDouble( aText ) * conv_scale );
775  }
776 
777  while( *aText == ' ' )
778  aText++;
779 
780  if( *aText == 'X' ) // third parameter: drill size (or drill size X)
781  {
782  aText++;
783  dcode->m_Drill.x = KiROUND( ReadDouble( aText ) * conv_scale );
784  dcode->m_Drill.y = dcode->m_Drill.x;
786  }
787 
788  while( *aText == ' ' )
789  aText++;
790 
791  if( *aText == 'X' ) // fourth parameter: drill size Y
792  {
793  aText++;
794  dcode->m_Drill.y =
795  KiROUND( ReadDouble( aText ) * conv_scale );
797  }
798 
799  dcode->m_Defined = true;
800  break;
801 
802  case 'P':
803 
804  /* Regular polygon: a command line like %ADD12P,0.040X10X25X0.025X0.025X0.0150*%
805  * params are: <diameter>, X<edge count>, X<Rotation>, X<X hole dim>, X<Y hole dim>
806  */
807  dcode->m_Shape = APT_POLYGON;
808  while( *aText == ' ' )
809  aText++;
810 
811  if( *aText == 'X' )
812  {
813  aText++;
814  dcode->m_EdgesCount = ReadInt( aText );
815  }
816 
817  while( *aText == ' ' )
818  aText++;
819 
820  if( *aText == 'X' )
821  {
822  aText++;
823  dcode->m_Rotation = ReadDouble( aText );
824  }
825 
826  while( *aText == ' ' )
827  aText++;
828 
829  if( *aText == 'X' )
830  {
831  aText++;
832  dcode->m_Drill.x = KiROUND( ReadDouble( aText ) * conv_scale );
833  dcode->m_Drill.y = dcode->m_Drill.x;
835  }
836 
837  while( *aText == ' ' )
838  aText++;
839 
840  if( *aText == 'X' )
841  {
842  aText++;
843  dcode->m_Drill.y = KiROUND( ReadDouble( aText ) * conv_scale );
845  }
846  dcode->m_Defined = true;
847  break;
848  }
849  }
850  else // aText[0] starts an aperture macro name
851  {
852  APERTURE_MACRO am_lookup;
853 
854  while( *aText && *aText != '*' && *aText != ',' )
855  am_lookup.name.Append( *aText++ );
856 
857  // When an aperture definition is like %AMLINE2* 22,1,$1,$2,0,0,-45*
858  // the ADDxx<MACRO_NAME> command has parameters, like %ADD14LINE2,0.8X0.5*%
859  if( *aText == ',' )
860  { // Read aperture macro parameters and store them
861  aText++; // aText points the first parameter
862 
863  while( *aText && *aText != '*' )
864  {
865  double param = ReadDouble( aText );
866  dcode->AppendParam( param );
867 
868  while( isspace( *aText ) )
869  aText++;
870 
871  // Skip 'X' separator:
872  if( *aText == 'X' || *aText == 'x' )
873  aText++;
874  }
875  }
876 
877  // lookup the aperture macro here.
878  APERTURE_MACRO* pam = FindApertureMacro( am_lookup );
879 
880  if( !pam )
881  {
882  msg.Printf( wxT( "RS274X: aperture macro %s not found\n" ),
883  TO_UTF8( am_lookup.name ) );
884  AddMessageToList( msg );
885  ok = false;
886  break;
887  }
888 
889  dcode->m_Shape = APT_MACRO;
890  dcode->SetMacro( pam );
891  dcode->m_Defined = true;
892  }
893 
894  break;
895 
896  default:
897  ok = false;
898  break;
899  }
900 
901  ignore_unused( seq_len );
902 
903  ok = GetEndOfBlock( aBuff, aBuffSize, aText, m_Current_File );
904 
905  return ok;
906 }
X2_ATTRIBUTE_FILEFUNCTION ( from TF.FileFunction in Gerber file) Example file function: TF....
int m_LineNum
< Line number of the gerber file while reading.
void AddMessageToList(const wxString &aMessage)
Add a message to the message list.
X2_ATTRIBUTE_FILEFUNCTION * m_FileFunction
The attribute value consists of a number of substrings separated by a comma.
wxString name
The name of the aperture macro.
Definition: am_primitive.h:231
print info associated to a component (TO.C attribute)
wxSize m_Size
Horizontal and vertical dimensions.
Definition: dcode.h:188
int ReadInt(char *&text, bool aSkipSeparator=true)
Read an integer from an ASCII character buffer.
Definition: dcode.h:52
bool m_ImageJustifyXCenter
< Image Justify Center on X axis (default = false).
APERTURE_T m_Shape
shape ( Line, rectangle, circle , oval .. )
Definition: dcode.h:189
double m_Rotation
shape rotation in degrees
Definition: dcode.h:194
wxSize m_Drill
dimension of the hole (if any) (drill file)
Definition: dcode.h:191
wxRealPoint m_StepForRepeat
bool m_ImageJustifyYCenter
Image Justify Offset on XY axis (default = 0,0).
wxSize m_FmtLen
Image rotation (0, 90, 180, 270 only) in degrees.
wxString m_Cmpref
the component reference parent of the data
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition: macros.h:83
wxSize m_FmtScale
< Fmt 2.3: m_FmtScale = 3, fmt 3.4: m_FmtScale = 4.
int ReadXCommandID(char *&text)
Read two bytes of data and assembles them into an int with the first byte in the sequence put into th...
Definition: rs274x.cpp:115
Definition: dcode.h:51
GBR_DATA_FIELD m_PadPinFunction
for a pad: the pin function (defined in schematic)
bool m_IsX2_file
< True if a X2 gerber attribute was found in file.
static LIB_SYMBOL * dummy()
Used to draw a dummy shape when a LIB_SYMBOL is not found in library.
Definition: sch_symbol.cpp:72
void SetField(const wxString &aField, bool aUseUTF8, bool aEscapeString)
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
Definition: macros.h:96
double ReadDouble(char *&text, bool aSkipSeparator=true)
Read a double precision floating point number from an ASCII character buffer.
bool m_Defined
false if the aperture is not defined in the header
Definition: dcode.h:199
void AppendParam(double aValue)
Add a parameter to the D_CODE parameter list.
Definition: dcode.h:92
GBR_DATA_FIELD m_Padname
for a flashed pad: the pad name ((TO.P attribute)
wxString m_Netname
for items associated to a net: the netname
#define _(s)
APERTURE_MACRO * FindApertureMacro(const APERTURE_MACRO &aLookup)
Look up a previously read in aperture macro.
bool m_Relative
< false = absolute Coord, true = relative Coord.
bool m_StepForRepeatMetric
bool ReadApertureMacro(char *aBuff, unsigned int aBuffSize, char *&text, FILE *gerber_file)
Read in an aperture macro and saves it in m_aperture_macros.
Definition: rs274x.cpp:963
wxString m_AperFunction
the aperture attribute (created by a TA.AperFunction command).
Definition: dcode.h:200
void RemoveAttribute(X2_ATTRIBUTE &aAttribute)
Called when a TD command is found the Gerber file.
APERTURE_DEF_HOLETYPE m_DrillShape
shape of the hole (0 = no hole, round = 1, rect = 2).
Definition: dcode.h:192
bool m_Has_DCode
< True if has DCodes in file or false if no DCodes found. Perhaps deprecated RS274D file.
A gerber DCODE (also called Aperture) definition.
Definition: dcode.h:80
Definition: rs274x.cpp:63
GBR_NETLIST_METADATA m_NetAttributeDict
void SetMacro(APERTURE_MACRO *aMacro)
Definition: dcode.h:120
bool GetEndOfBlock(char *aBuff, unsigned int aBuffSize, char *&aText, FILE *aGerberFile)
Definition: rs274x.cpp:909
#define IU_PER_MILS
Definition: plotter.cpp:130
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:73
void ignore_unused(const T &)
Definition: ignore.h:24
int m_EdgesCount
in aperture definition Polygon only: number of edges for the polygon
Definition: dcode.h:195
print info associated to a flashed pad (TO.P attribute)
wxString FormatStringFromGerber(const wxString &aString)
Convert a gerber string into a 16 bit Unicode string.
Support the "aperture macro" defined within standard RS274X.
Definition: am_primitive.h:167
print info associated to a net (TO.N attribute)
D_CODE * GetDCODEOrCreate(int aDCODE, bool aCreateIfNoExist=true)
Return a pointer to the D_CODE within this GERBER for the given aDCODE.
GERBER_LAYER & GetLayerParams()
int m_ImageRotation
Local rotation in degrees added to m_ImageRotation.
int m_NetAttribType
the type of net info (used to define the gerber string to create)

References _, AddMessageToList(), AP_DEFINITION, AP_MACRO, APERTURE_ATTRIBUTE, D_CODE::AppendParam(), APT_CIRCLE, APT_DEF_RECT_HOLE, APT_DEF_ROUND_HOLE, APT_MACRO, APT_OVAL, APT_POLYGON, APT_RECT, AXIS_SELECT, GBR_DATA_FIELD::Clear(), dummy(), FILE_ATTRIBUTE, FindApertureMacro(), FORMAT_STATEMENT, FormatStringFromGerber(), GBR_NETLIST_METADATA::GBR_NETINFO_CMP, GBR_NETLIST_METADATA::GBR_NETINFO_NET, GBR_NETLIST_METADATA::GBR_NETINFO_PAD, GERB_INTERPOL_LINEAR_1X, GetDCODEOrCreate(), GetEndOfBlock(), GetLayerParams(), ignore_unused(), IMAGE_JUSTIFY, IMAGE_NAME, IMAGE_OFFSET, IMAGE_POLARITY, IMAGE_ROTATION, INCH, IU_PER_MILS, KI_FALLTHROUGH, KiROUND(), KNOCKOUT, LOAD_NAME, LOAD_POLARITY, D_CODE::m_AperFunction, m_AperFunction, GBR_NETLIST_METADATA::m_Cmpref, m_Current_File, D_CODE::m_Defined, D_CODE::m_Drill, D_CODE::m_DrillShape, D_CODE::m_EdgesCount, m_FileFunction, m_FileName, m_FmtLen, m_FmtScale, m_GerbMetric, m_Has_DCode, m_ImageJustifyOffset, m_ImageJustifyXCenter, m_ImageJustifyYCenter, m_ImageName, m_ImageNegative, m_ImageOffset, m_ImageRotation, m_IsX2_file, m_Iterpolation, GERBER_LAYER::m_LayerNegative, m_LineNum, m_LocalRotation, m_MD5_value, m_MirrorA, m_MirrorB, GBR_NETLIST_METADATA::m_NetAttribType, m_NetAttributeDict, GBR_NETLIST_METADATA::m_Netname, m_NoTrailingZeros, m_Offset, GBR_NETLIST_METADATA::m_Padname, GBR_NETLIST_METADATA::m_PadPinFunction, m_PartString, m_Relative, D_CODE::m_Rotation, m_Scale, D_CODE::m_Shape, D_CODE::m_Size, GERBER_LAYER::m_StepForRepeat, GERBER_LAYER::m_StepForRepeatMetric, m_SwapAxis, GERBER_LAYER::m_XRepeatCount, GERBER_LAYER::m_YRepeatCount, MILLIMETER, MIRROR_IMAGE, MODE_OF_UNITS, APERTURE_MACRO::name, NET_ATTRIBUTE, OFFSET, ReadApertureMacro(), ReadDouble(), ReadInt(), ReadXCommandID(), REMOVE_APERTURE_ATTRIBUTE, RemoveAttribute(), ROTATE, SCALE_FACTOR, GBR_DATA_FIELD::SetField(), D_CODE::SetMacro(), STEP_AND_REPEAT, and TO_UTF8.

Referenced by Execute_G_Command(), and ReadRS274XCommand().

◆ FindApertureMacro()

APERTURE_MACRO * GERBER_FILE_IMAGE::FindApertureMacro ( const APERTURE_MACRO aLookup)

Look up a previously read in aperture macro.

Parameters
aLookupA dummy APERTURE_MACRO with [only] the name field set.
Returns
the aperture macro with a matching name or NULL if not found.

Definition at line 155 of file gerber_file_image.cpp.

156 {
157  APERTURE_MACRO_SET::iterator iter = m_aperture_macros.find( aLookup );
158 
159  if( iter != m_aperture_macros.end() )
160  {
161  APERTURE_MACRO* pam = (APERTURE_MACRO*) &(*iter);
162  return pam;
163  }
164 
165  return nullptr; // not found
166 }
APERTURE_MACRO_SET m_aperture_macros
Support the "aperture macro" defined within standard RS274X.
Definition: am_primitive.h:167

References m_aperture_macros.

Referenced by ExecuteRS274XCommand().

◆ Get() [1/3]

wxAny INSPECTABLE::Get ( PROPERTY_BASE aProperty)
inlineinherited

Definition at line 86 of file inspectable.h.

87  {
89  TYPE_ID thisType = TYPE_HASH( *this );
90  void* object = propMgr.TypeCast( this, thisType, aProperty->OwnerHash() );
91  return object ? aProperty->getter( object ) : wxAny();
92  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
virtual wxAny getter(void *aObject) const =0
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:62
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_BASE::getter(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

Referenced by BOOST_AUTO_TEST_CASE(), CLASS_D_DESC::CLASS_D_DESC(), PCB_EXPR_VAR_REF::GetValue(), and PAD_DESC::PAD_DESC().

◆ Get() [2/3]

template<typename T >
T INSPECTABLE::Get ( PROPERTY_BASE aProperty)
inlineinherited

Definition at line 95 of file inspectable.h.

96  {
98  TYPE_ID thisType = TYPE_HASH( *this );
99  void* object = propMgr.TypeCast( this, thisType, aProperty->OwnerHash() );
100  return object ? aProperty->get<T>( object ) : T();
101  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:62
T get(void *aObject)
Definition: property.h:268
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_BASE::get(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ Get() [3/3]

template<typename T >
boost::optional<T> INSPECTABLE::Get ( const wxString &  aProperty)
inlineinherited

Definition at line 104 of file inspectable.h.

105  {
107  TYPE_ID thisType = TYPE_HASH( *this );
108  PROPERTY_BASE* prop = propMgr.GetProperty( thisType, aProperty );
109  boost::optional<T> ret = T();
110 
111  if( prop )
112  {
113  void* object = propMgr.TypeCast( this, thisType, prop->OwnerHash() );
114 
115  if( object )
116  ret = prop->get<T>( object );
117  }
118 
119  return ret;
120  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
PROPERTY_BASE * GetProperty(TYPE_ID aType, const wxString &aProperty) const
Return a property for a specific type.
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:62
T get(void *aObject)
Definition: property.h:268
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_BASE::get(), PROPERTY_MANAGER::GetProperty(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ GetBoundingBox()

const EDA_RECT EDA_ITEM::GetBoundingBox ( ) const
virtualinherited

Return the orthogonal bounding box of this object for display purposes.

This box should be an enclosing perimeter for visible components of this object, and the units should be in the pcb or schematic coordinate system. It is OK to overestimate the size by a few counts.

Reimplemented in BOARD, PAD, PCB_DIM_CENTER, SCH_HIERLABEL, SCH_GLOBALLABEL, DS_DRAW_ITEM_BITMAP, DS_DRAW_ITEM_TEXT, SCH_SYMBOL, SCH_LABEL, DS_DRAW_ITEM_PAGE, SCH_SHEET, PCB_DIMENSION_BASE, DS_DRAW_ITEM_RECT, LIB_SYMBOL, SCH_TEXT, LIB_ITEM, GERBER_DRAW_ITEM, FP_TEXT, LIB_PIN, DS_DRAW_ITEM_POLYPOLYGONS, SCH_LINE, FOOTPRINT, PCB_GROUP, PCB_TEXT, DS_DRAW_ITEM_LINE, ZONE, LIB_FIELD, SCH_FIELD, PCB_TRACK, PCB_MARKER, PCB_SHAPE, SCH_BUS_ENTRY_BASE, SCH_BITMAP, DS_DRAW_ITEM_BASE, PCB_TARGET, SCH_PIN, LIB_TEXT, GBR_LAYOUT, SCH_NO_CONNECT, LIB_SHAPE, SCH_JUNCTION, and SCH_MARKER.

Definition at line 75 of file eda_item.cpp.

76 {
77  // return a zero-sized box per default. derived classes should override
78  // this
79  return EDA_RECT( wxPoint( 0, 0 ), wxSize( 0, 0 ) );
80 }
Handle the component boundary box.
Definition: eda_rect.h:42

Referenced by CADSTAR_SCH_ARCHIVE_LOADER::applyTextSettings(), CN_ITEM::BBox(), TEST_EE_ITEM_FIXTURE::CompareItems(), TEST_BOARD_ITEM_FIXTURE::CompareItems(), EE_RTREE::contains(), KIGFX::PCB_PAINTER::Draw(), LIB_ITEM::GetBoundingBox(), GetBoundingBoxes(), GERBVIEW_SELECTION::GetCenter(), BOARD_ITEM::GetCenter(), SCH_MOVE_TOOL::getConnectedDragItems(), EE_SELECTION_TOOL::GuessSelectionCandidates(), EE_RTREE::insert(), insideArea(), insideBackCourtyard(), insideCourtyard(), insideFrontCourtyard(), SCH_EDIT_TOOL::Mirror(), DRC_RTREE::QueryColliding(), EE_RTREE::remove(), DRC_TEST_PROVIDER_PHYSICAL_CLEARANCE::testItemAgainstZones(), DRC_TEST_PROVIDER_COPPER_CLEARANCE::testItemAgainstZones(), DRC_TEST_PROVIDER_SOLDER_MASK::testMaskBridges(), DRC_TEST_PROVIDER_SOLDER_MASK::testMaskItemAgainstZones(), DRC_TEST_PROVIDER_SOLDER_MASK::testSilkToMaskClearance(), GERBVIEW_SELECTION::ViewBBox(), and EDA_ITEM::ViewBBox().

◆ GetClass()

wxString GERBER_FILE_IMAGE::GetClass ( ) const
inlineoverridevirtual

Return the class name.

Implements EDA_ITEM.

Definition at line 116 of file gerber_file_image.h.

117  {
118  return wxT( "GERBER_FILE_IMAGE" );
119  }

◆ GetDCODE()

D_CODE * GERBER_FILE_IMAGE::GetDCODE ( int  aDCODE) const

Return a pointer to the D_CODE within this GERBER for the given aDCODE.

Parameters
aDCODEThe numeric value of the D_CODE to look up.
Returns
The D code implied by the given aDCODE or NULL if the requested aDCODE is out of range.

Definition at line 142 of file gerber_file_image.cpp.

143 {
144  unsigned ndx = aDCODE - FIRST_DCODE;
145 
146  if( ndx < (unsigned) arrayDim( m_Aperture_List ) )
147  {
148  return m_Aperture_List[ndx];
149  }
150 
151  return nullptr;
152 }
D_CODE * m_Aperture_List[TOOLS_MAX_COUNT]
< Dcode (Aperture) List for this layer (max TOOLS_MAX_COUNT: see dcode.h)
#define FIRST_DCODE
Definition: dcode.h:70
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Returns # of elements in an array.
Definition: arraydim.h:31

References arrayDim(), FIRST_DCODE, and m_Aperture_List.

Referenced by Execute_DCODE_Command(), EXCELLON_IMAGE::Execute_Drill_Command(), Execute_G_Command(), EXCELLON_IMAGE::FinishRouteCommand(), GERBER_DRAW_ITEM::GetDcodeDescr(), EXCELLON_IMAGE::Select_Tool(), GERBVIEW_INSPECTION_TOOL::ShowDCodes(), GERBVIEW_FRAME::updateAperAttributesSelectBox(), and GERBVIEW_FRAME::updateDCodeSelectBox().

◆ GetDCODEOrCreate()

D_CODE * GERBER_FILE_IMAGE::GetDCODEOrCreate ( int  aDCODE,
bool  aCreateIfNoExist = true 
)

Return a pointer to the D_CODE within this GERBER for the given aDCODE.

Parameters
aDCODEThe numeric value of the D_CODE to look up.
aCreateIfNoExistIf true, then create the D_CODE if it does not exist in list.
Returns
The one implied by the given aDCODE or NULL if the requested aDCODE is out of range.

Definition at line 122 of file gerber_file_image.cpp.

123 {
124  unsigned ndx = aDCODE - FIRST_DCODE;
125 
126  if( ndx < (unsigned) arrayDim( m_Aperture_List ) )
127  {
128  // lazily create the D_CODE if it does not exist.
129  if( aCreateIfNoExist )
130  {
131  if( m_Aperture_List[ndx] == nullptr )
132  m_Aperture_List[ndx] = new D_CODE( ndx + FIRST_DCODE );
133  }
134 
135  return m_Aperture_List[ndx];
136  }
137 
138  return nullptr;
139 }
D_CODE * m_Aperture_List[TOOLS_MAX_COUNT]
< Dcode (Aperture) List for this layer (max TOOLS_MAX_COUNT: see dcode.h)
#define FIRST_DCODE
Definition: dcode.h:70
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Returns # of elements in an array.
Definition: arraydim.h:31
A gerber DCODE (also called Aperture) definition.
Definition: dcode.h:80

References arrayDim(), FIRST_DCODE, and m_Aperture_List.

Referenced by ExecuteRS274XCommand(), EXCELLON_IMAGE::readToolInformation(), and EXCELLON_IMAGE::Select_Tool().

◆ GetDcodesCount()

int GERBER_FILE_IMAGE::GetDcodesCount ( )
Returns
the count of Dcode tools in use in the image

Definition at line 258 of file gerber_file_image.cpp.

259 {
260  int count = 0;
261 
262  for( unsigned ii = 0; ii < arrayDim( m_Aperture_List ); ii++ )
263  {
264  if( m_Aperture_List[ii] )
265  if( m_Aperture_List[ii]->m_InUse || m_Aperture_List[ii]->m_Defined )
266  ++count;
267  }
268 
269  return count;
270 }
D_CODE * m_Aperture_List[TOOLS_MAX_COUNT]
< Dcode (Aperture) List for this layer (max TOOLS_MAX_COUNT: see dcode.h)
constexpr std::size_t arrayDim(T const (&)[N]) noexcept
Returns # of elements in an array.
Definition: arraydim.h:31

References arrayDim(), m_Aperture_List, and m_InUse.

Referenced by GERBVIEW_INSPECTION_TOOL::ShowDCodes(), GERBVIEW_FRAME::updateAperAttributesSelectBox(), and GERBVIEW_FRAME::updateDCodeSelectBox().

◆ GetEditFlags()

EDA_ITEM_FLAGS EDA_ITEM::GetEditFlags ( ) const
inlineinherited

Definition at line 157 of file eda_item.h.

158  {
159  constexpr int mask = ( IS_NEW | IS_PASTED | IS_MOVING | IS_RESIZING | IS_DRAGGING
161 
162  return m_flags & mask;
163  }
#define IS_NEW
New item, just created.
#define IS_RESIZING
Item being resized.
#define IS_DRAGGING
Item being dragged.
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:480
#define IS_PASTED
Modifier on IS_NEW which indicates it came from clipboard.
#define IS_MOVING
Item being moved.
#define STRUCT_DELETED
flag indication structures to be erased
#define IS_WIRE_IMAGE
Item to be drawn as wireframe while editing.

References IS_DRAGGING, IS_MOVING, IS_NEW, IS_PASTED, IS_RESIZING, IS_WIRE_IMAGE, EDA_ITEM::m_flags, and STRUCT_DELETED.

Referenced by EDA_ITEM::ClearEditFlags(), SCH_EDIT_FRAME::DeleteJunction(), SCH_EDIT_TOOL::editFieldText(), SYMBOL_EDITOR_PIN_TOOL::EditPinProperties(), SCH_EDITOR_CONTROL::EditWithSymbolEditor(), SCH_SYMBOL::GetMsgPanelInfo(), SELECTION_CONDITIONS::Idle(), SELECTION_CONDITIONS::IdleSelection(), SYMBOL_EDITOR_MOVE_TOOL::Main(), PCB_POINT_EDITOR::OnSelectionChange(), SYMBOL_EDITOR_EDIT_TOOL::Properties(), SCH_EDIT_TOOL::Properties(), PAD_TOOL::recombinePad(), SCH_EDIT_FRAME::SchematicCleanUp(), SCH_EDIT_FRAME::SelectUnit(), DIALOG_DIMENSION_PROPERTIES::TransferDataFromWindow(), DIALOG_TARGET_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_AND_LABEL_PROPERTIES::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataFromWindow(), and DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow().

◆ GetEndOfBlock()

bool GERBER_FILE_IMAGE::GetEndOfBlock ( char *  aBuff,
unsigned int  aBuffSize,
char *&  aText,
FILE *  aGerberFile 
)
private

Definition at line 909 of file rs274x.cpp.

910 {
911  for( ; ; )
912  {
913  while( (aText < aBuff + aBuffSize) && *aText )
914  {
915  if( *aText == '*' )
916  return true;
917 
918  if( *aText == '%' )
919  return true;
920 
921  aText++;
922  }
923 
924  if( fgets( aBuff, aBuffSize, gerber_file ) == nullptr )
925  break;
926 
927  m_LineNum++;
928  aText = aBuff;
929  }
930 
931  return false;
932 }
int m_LineNum
< Line number of the gerber file while reading.

References gerber_file, and m_LineNum.

Referenced by ExecuteRS274XCommand().

◆ GetFlags()

◆ GetFocusPosition()

virtual const wxPoint EDA_ITEM::GetFocusPosition ( ) const
inlinevirtualinherited

Similar to GetPosition, but allows items to return their visual center rather than their anchor.

Reimplemented in BOARD, PCB_TRACK, and PCB_SHAPE.

Definition at line 258 of file eda_item.h.

258 { return GetPosition(); }
virtual wxPoint GetPosition() const
Definition: eda_item.h:251

References EDA_ITEM::GetPosition().

Referenced by SCH_EDIT_FRAME::FocusOnItem().

◆ GetItems()

GERBER_DRAW_ITEMS& GERBER_FILE_IMAGE::GetItems ( )
inline

◆ GetItemsCount()

int GERBER_FILE_IMAGE::GetItemsCount ( )
inline
Returns
the count of GERBER_DRAW_ITEMS in the image

Definition at line 153 of file gerber_file_image.h.

153 { return m_drawings.size(); }
GERBER_DRAW_ITEMS m_drawings

References m_drawings.

Referenced by GERBVIEW_FRAME::Read_GERBER_File().

◆ GetLastItemInList()

GERBER_DRAW_ITEM* GERBER_FILE_IMAGE::GetLastItemInList ( ) const
inline
Returns
the last GERBER_DRAW_ITEM* item of the items list

Definition at line 168 of file gerber_file_image.h.

169  {
170  return m_drawings.back();
171  }
GERBER_DRAW_ITEMS m_drawings

References m_drawings.

Referenced by Execute_DCODE_Command(), and Execute_G_Command().

◆ GetLayerParams()

GERBER_LAYER& GERBER_FILE_IMAGE::GetLayerParams ( )
inline
Returns
the current layers params.

Definition at line 176 of file gerber_file_image.h.

177  {
178  return m_GBRLayerParams;
179  }
GERBER_LAYER m_GBRLayerParams

References m_GBRLayerParams.

Referenced by Execute_DCODE_Command(), ExecuteRS274XCommand(), GERBER_DRAW_ITEM::SetLayerParameters(), StepAndRepeatItem(), and GERBVIEW_FRAME::UpdateTitleAndInfo().

◆ GetMenuImage()

BITMAPS EDA_ITEM::GetMenuImage ( ) const
virtualinherited

Return a pointer to an image to be used in menus.

The default version returns the right arrow image. Override this function to provide object specific menu images.

Returns
The menu image associated with the item.

Reimplemented in ZONE, SCH_SYMBOL, PAD, FOOTPRINT, PCB_DIM_CENTER, PCB_DIM_LEADER, SCH_HIERLABEL, PCB_DIM_ORTHOGONAL, SCH_GLOBALLABEL, PCB_VIA, SCH_SHEET, PCB_DIM_ALIGNED, SCH_LABEL, GERBER_DRAW_ITEM, SCH_TEXT, SCH_BUS_BUS_ENTRY, SCH_LINE, LIB_PIN, FP_TEXT, PCB_TRACK, SCH_FIELD, SCH_SHEET_PIN, PCB_GROUP, SCH_BUS_WIRE_ENTRY, LIB_FIELD, FP_SHAPE, PCB_TEXT, PCB_SHAPE, SCH_BITMAP, LIB_TEXT, LIB_SHAPE, SCH_JUNCTION, SCH_NO_CONNECT, SCH_MARKER, PCB_MARKER, and PCB_TARGET.

Definition at line 274 of file eda_item.cpp.

275 {
276  return BITMAPS::dummy_item;
277 }

References dummy_item.

Referenced by GERBVIEW_SELECTION_TOOL::disambiguationMenu(), PL_SELECTION_TOOL::doSelectionMenu(), EE_SELECTION_TOOL::doSelectionMenu(), and PCB_SELECTION_TOOL::doSelectionMenu().

◆ GetMessages()

const wxArrayString& GERBER_FILE_IMAGE::GetMessages ( ) const
inline

Definition at line 131 of file gerber_file_image.h.

131 { return m_messagesList; }
wxArrayString m_messagesList

References m_messagesList.

Referenced by GERBVIEW_FRAME::Read_EXCELLON_File(), and GERBVIEW_FRAME::Read_GERBER_File().

◆ GetMsgPanelInfo()

◆ GetNextLine()

char * GERBER_FILE_IMAGE::GetNextLine ( char *  aBuff,
unsigned int  aBuffSize,
char *  aText,
FILE *  aFile 
)
private

Test for an end of line.

If a end of line is found, read a new line.

Parameters
aBuff= buffer (size = GERBER_BUFZ) to fill with a new line
aText= pointer to the last useful char in aBuff on return: points the beginning of the next line.
aBuffSize= the size in bytes of aBuff
aFile= the opened GERBER file to read
Returns
a pointer to the beginning of the next line or NULL if end of file

Definition at line 935 of file rs274x.cpp.

936 {
937  for( ; ; )
938  {
939  switch (*aText )
940  {
941  case ' ': // skip blanks
942  case '\n':
943  case '\r': // Skip line terminators
944  ++aText;
945  break;
946 
947  case 0: // End of text found in aBuff: Read a new string
948  if( fgets( aBuff, aBuffSize, aFile ) == nullptr )
949  return nullptr;
950 
951  m_LineNum++;
952  aText = aBuff;
953  return aText;
954 
955  default:
956  return aText;
957  }
958  }
959  return aText;
960 }
int m_LineNum
< Line number of the gerber file while reading.

References m_LineNum.

Referenced by ReadApertureMacro().

◆ GetParent()

◆ GetPosition()

virtual wxPoint EDA_ITEM::GetPosition ( ) const
inlinevirtualinherited

Reimplemented in SCH_SYMBOL, PCB_VIA, SCH_SHEET, DS_DRAW_ITEM_BITMAP, DELETED_BOARD_ITEM, DS_DRAW_ITEM_TEXT, PCB_ARC, BOARD, DS_DRAW_ITEM_PAGE, SCH_TEXT, SCH_LINE, DS_DRAW_ITEM_RECT, LIB_PIN, SCH_FIELD, FOOTPRINT, PAD, DS_DRAW_ITEM_POLYPOLYGONS, LIB_FIELD, GERBER_DRAW_ITEM, DS_DRAW_ITEM_LINE, SCH_BITMAP, PCB_DIMENSION_BASE, SCH_BUS_ENTRY_BASE, PCB_GROUP, ZONE, SCH_JUNCTION, SCH_NO_CONNECT, KIGFX::ORIGIN_VIEWITEM, SCH_MARKER, PCB_TRACK, LIB_TEXT, NETINFO_ITEM, FP_TEXT, LIB_SHAPE, SCH_PIN, PCB_SHAPE, PCB_TEXT, PCB_MARKER, and PCB_TARGET.

Definition at line 251 of file eda_item.h.

251 { return wxPoint(); }

Referenced by SCH_MOVE_TOOL::AlignElements(), BOOST_AUTO_TEST_CASE(), TEST_EE_ITEM_FIXTURE::CompareItems(), TEST_BOARD_ITEM_FIXTURE::CompareItems(), EE_GRID_HELPER::computeAnchors(), PCB_GRID_HELPER::computeAnchors(), SCH_EDIT_FRAME::DeleteJunction(), KIGFX::PCB_PAINTER::draw(), CONNECTION_GRAPH::ercCheckBusToBusConflicts(), CONNECTION_GRAPH::ercCheckBusToNetConflicts(), CONNECTION_GRAPH::ercCheckMultipleDrivers(), CONNECTION_GRAPH::ercCheckNoConnects(), PCB_SELECTION_TOOL::FindItem(), GERBVIEW_SELECTION::GetCenter(), EDA_ITEM::GetFocusPosition(), getMinDist(), SCH_FIELD::GetParentPosition(), SCH_SCREEN::GetSheets(), PCB_SELECTION::GetTopLeftItem(), EE_SELECTION::GetTopLeftItem(), BOARD_ITEM::GetX(), BOARD_ITEM::GetY(), SYMBOL_EDITOR_MOVE_TOOL::Main(), SCH_MOVE_TOOL::Main(), EDIT_POINTS_FACTORY::Make(), SYMBOL_EDITOR_EDIT_TOOL::Mirror(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), SCH_EDITOR_CONTROL::nextMatch(), BOARD::cmp_items::operator()(), SCH_ITEM::operator<(), PL_EDIT_TOOL::Paste(), SCH_EDITOR_CONTROL::Paste(), PCB_CONTROL::placeBoardItems(), POSITION_RELATIVE_TOOL::PositionRelative(), BACK_ANNOTATE::processNetNameChange(), PCB_BASE_EDIT_FRAME::PutDataInPreviousState(), SCH_EDIT_TOOL::RepeatDrawItem(), SYMBOL_EDITOR_EDIT_TOOL::Rotate(), SCH_EDIT_TOOL::Rotate(), DRC_TEST_PROVIDER_TEXT_DIMS::Run(), PCB_SELECTION_TOOL::selectConnectedTracks(), RC_ITEM::ShowReport(), DRC_TEST_PROVIDER_MISC::testTextVars(), TransformItem(), DIALOG_POSITION_RELATIVE::UpdateAnchor(), PL_EDIT_TOOL::updateModificationPoint(), and EE_POINT_EDITOR::updatePoints().

◆ GetPositiveDrawColor()

COLOR4D GERBER_FILE_IMAGE::GetPositiveDrawColor ( ) const
inline

Definition at line 143 of file gerber_file_image.h.

143 { return m_PositiveDrawColor; }

References m_PositiveDrawColor.

Referenced by GERBER_DRAW_ITEM::Print().

◆ GetSelectMenuText()

wxString EDA_ITEM::GetSelectMenuText ( EDA_UNITS  aUnits) const
virtualinherited

Return the text to display to be used in the selection clarification context menu when multiple items are found at the current cursor position.

The default version of this function raises an assertion in the debug mode and returns a string to indicate that it was not overridden to provide the object specific text.

Returns
The menu text string.

Reimplemented in ZONE, SCH_SYMBOL, PAD, FOOTPRINT, BOARD, SCH_HIERLABEL, SCH_GLOBALLABEL, PCB_VIA, SCH_SHEET, DS_DRAW_ITEM_BITMAP, DELETED_BOARD_ITEM, DS_DRAW_ITEM_TEXT, SCH_LABEL, DS_DRAW_ITEM_PAGE, GERBER_DRAW_ITEM, PCB_DIMENSION_BASE, SCH_TEXT, DS_DRAW_ITEM_RECT, LIB_PIN, SCH_BUS_BUS_ENTRY, SCH_LINE, FP_TEXT, PCB_TRACK, SCH_FIELD, SCH_SHEET_PIN, PCB_GROUP, DS_DRAW_ITEM_POLYPOLYGONS, SCH_BUS_WIRE_ENTRY, LIB_FIELD, FP_SHAPE, DS_DRAW_ITEM_LINE, PCB_TEXT, PCB_SHAPE, SCH_BITMAP, LIB_TEXT, LIB_SHAPE, PCB_MARKER, SCH_JUNCTION, SCH_NO_CONNECT, SCH_MARKER, PCB_TARGET, SCH_PIN, and DELETED_SHEET_ITEM.

Definition at line 109 of file eda_item.cpp.

110 {
111  wxFAIL_MSG( wxT( "GetSelectMenuText() was not overridden for schematic item type " ) +
112  GetClass() );
113 
114  return wxString( wxT( "Undefined menu text for " ) + GetClass() );
115 }
virtual wxString GetClass() const =0
Return the class name.

References EDA_ITEM::GetClass().

Referenced by CONNECTION_GRAPH::collectAllDriverValues(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), DIALOG_GROUP_PROPERTIES::DoAddMember(), PL_SELECTION_TOOL::doSelectionMenu(), EE_SELECTION_TOOL::doSelectionMenu(), PCB_SELECTION_TOOL::doSelectionMenu(), DRC_ENGINE::EvalRules(), BOARD_INSPECTION_TOOL::getItemDescription(), PCB_MARKER::GetMsgPanelInfo(), RC_TREE_MODEL::GetValue(), RC_ITEM::ShowReport(), and DIALOG_POSITION_RELATIVE::UpdateAnchor().

◆ GetState()

int EDA_ITEM::GetState ( EDA_ITEM_FLAGS  type) const
inlineinherited

Definition at line 136 of file eda_item.h.

137  {
138  return m_status & type;
139  }
EDA_ITEM_FLAGS m_status
Definition: eda_item.h:477

References EDA_ITEM::m_status.

Referenced by BOARD_ITEM::IsLocked().

◆ GetStatus()

EDA_ITEM_FLAGS EDA_ITEM::GetStatus ( ) const
inlineinherited

Definition at line 149 of file eda_item.h.

149 { return m_status; }
EDA_ITEM_FLAGS m_status
Definition: eda_item.h:477

References EDA_ITEM::m_status.

◆ HasFlag()

◆ HasNegativeItems()

bool GERBER_FILE_IMAGE::HasNegativeItems ( )
Returns
true if at least one item must be drawn in background color used to optimize screen refresh (when no items are in background color refresh can be faster).

Definition at line 234 of file gerber_file_image.cpp.

235 {
236  if( m_hasNegativeItems < 0 ) // negative items are not yet searched: find them if any
237  {
238  if( m_ImageNegative ) // A negative layer is expected having always negative objects.
239  m_hasNegativeItems = 1;
240  else
241  {
242  m_hasNegativeItems = 0;
243  for( GERBER_DRAW_ITEM* item : GetItems() )
244  {
245  if( item->GetLayer() != m_GraphicLayer )
246  continue;
247  if( item->HasNegativeItems() )
248  {
249  m_hasNegativeItems = 1;
250  break;
251  }
252  }
253  }
254  }
255  return m_hasNegativeItems == 1;
256 }
GERBER_DRAW_ITEMS & GetItems()
int m_hasNegativeItems
True if the image is negative or has some negative items.

References GetItems(), m_GraphicLayer, m_hasNegativeItems, and m_ImageNegative.

◆ HitTest() [1/2]

virtual bool EDA_ITEM::HitTest ( const wxPoint &  aPosition,
int  aAccuracy = 0 
) const
inlinevirtualinherited

◆ HitTest() [2/2]

virtual bool EDA_ITEM::HitTest ( const EDA_RECT aRect,
bool  aContained,
int  aAccuracy = 0 
) const
inlinevirtualinherited

Test if aRect intersects this item.

Parameters
aRectA reference to a EDA_RECT object containing the rectangle to test.
aContainedSet to true to test for containment instead of an intersection.
aAccuracyIncrease aRect by this amount.
Returns
True if aRect contains or intersects the item bounding box.

Reimplemented in SCH_SYMBOL, PAD, ZONE, FOOTPRINT, PCB_VIA, SCH_GLOBALLABEL, SCH_SHEET, DS_DRAW_ITEM_BITMAP, DS_DRAW_ITEM_TEXT, PCB_ARC, SCH_TEXT, SCH_LINE, PCB_DIMENSION_BASE, DS_DRAW_ITEM_RECT, GERBER_DRAW_ITEM, SCH_FIELD, FP_TEXT, LIB_ITEM, PCB_TRACK, DS_DRAW_ITEM_POLYPOLYGONS, LIB_PIN, PCB_GROUP, SCH_BITMAP, SCH_JUNCTION, SCH_BUS_ENTRY_BASE, PCB_TEXT, PCB_SHAPE, SCH_NO_CONNECT, DS_DRAW_ITEM_BASE, PCB_TARGET, LIB_TEXT, and LIB_SHAPE.

Definition at line 237 of file eda_item.h.

238  {
239  return false; // derived classes should override this function
240  }

◆ InitToolTable()

void GERBER_FILE_IMAGE::InitToolTable ( )

Definition at line 273 of file gerber_file_image.cpp.

274 {
275  for( int count = 0; count < TOOLS_MAX_COUNT; count++ )
276  {
277  if( m_Aperture_List[count] == nullptr )
278  continue;
279 
280  m_Aperture_List[count]->m_Num_Dcode = count + FIRST_DCODE;
282  }
283 
284  m_aperture_macros.clear();
285 }
APERTURE_MACRO_SET m_aperture_macros
D_CODE * m_Aperture_List[TOOLS_MAX_COUNT]
< Dcode (Aperture) List for this layer (max TOOLS_MAX_COUNT: see dcode.h)
#define FIRST_DCODE
Definition: dcode.h:70
int m_Num_Dcode
D code value ( >= 10 )
Definition: dcode.h:190
#define TOOLS_MAX_COUNT
Definition: dcode.h:72
void Clear_D_CODE_Data()
Definition: dcode.cpp:71

References D_CODE::Clear_D_CODE_Data(), FIRST_DCODE, m_Aperture_List, m_aperture_macros, D_CODE::m_Num_Dcode, and TOOLS_MAX_COUNT.

◆ IsBrightened()

◆ IsDragging()

bool EDA_ITEM::IsDragging ( ) const
inlineinherited

Definition at line 120 of file eda_item.h.

120 { return m_flags & IS_DRAGGING; }
#define IS_DRAGGING
Item being dragged.
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:480

References IS_DRAGGING, and EDA_ITEM::m_flags.

Referenced by DIALOG_SYMBOL_PROPERTIES::DIALOG_SYMBOL_PROPERTIES().

◆ IsEntered()

bool EDA_ITEM::IsEntered ( ) const
inlineinherited

Definition at line 123 of file eda_item.h.

123 { return m_flags & ENTERED; }
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:480
#define ENTERED
indicates a group has been entered

References ENTERED, and EDA_ITEM::m_flags.

Referenced by KIGFX::PCB_PAINTER::draw().

◆ IsForceVisible()

bool EDA_ITEM::IsForceVisible ( ) const
inlineinherited

Definition at line 205 of file eda_item.h.

205 { return m_forceVisible; }
bool m_forceVisible
Definition: eda_item.h:479

References EDA_ITEM::m_forceVisible.

Referenced by KIGFX::SCH_PAINTER::draw(), and SCH_FIELD::Print().

◆ IsModified()

bool EDA_ITEM::IsModified ( ) const
inlineinherited

Definition at line 117 of file eda_item.h.

117 { return m_flags & IS_CHANGED; }
#define IS_CHANGED
Item was edited, and modified.
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:480

References IS_CHANGED, and EDA_ITEM::m_flags.

Referenced by PCB_EDIT_FRAME::OpenProjectFiles().

◆ IsMoving()

◆ IsNew()

◆ IsReplaceable()

virtual bool EDA_ITEM::IsReplaceable ( ) const
inlinevirtualinherited

Override this method in any derived object that supports test find and replace.

Returns
True if the item has replaceable text that can be modified using the find and replace dialog.

Reimplemented in SCH_SYMBOL, SCH_SHEET, SCH_LABEL, SCH_TEXT, SCH_FIELD, and SCH_SHEET_PIN.

Definition at line 402 of file eda_item.h.

402 { return false; }

Referenced by EDA_ITEM::Matches().

◆ IsResized()

bool EDA_ITEM::IsResized ( ) const
inlineinherited

Definition at line 124 of file eda_item.h.

124 { return m_flags & IS_RESIZING; }
#define IS_RESIZING
Item being resized.
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:480

References IS_RESIZING, and EDA_ITEM::m_flags.

◆ IsSelected()

bool EDA_ITEM::IsSelected ( ) const
inlineinherited

Definition at line 122 of file eda_item.h.

122 { return m_flags & SELECTED; }
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:480
#define SELECTED

References EDA_ITEM::m_flags, and SELECTED.

Referenced by ALIGN_DISTRIBUTE_TOOL::AlignBottom(), ALIGN_DISTRIBUTE_TOOL::AlignCenterX(), ALIGN_DISTRIBUTE_TOOL::AlignCenterY(), ALIGN_DISTRIBUTE_TOOL::AlignTop(), SCH_EDIT_FRAME::ConvertPart(), DIALOG_CHANGE_SYMBOLS::DIALOG_CHANGE_SYMBOLS(), ALIGN_DISTRIBUTE_TOOL::doAlignLeft(), ALIGN_DISTRIBUTE_TOOL::doAlignRight(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersVertically(), ALIGN_DISTRIBUTE_TOOL::doDistributeGapsHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeGapsVertically(), KIGFX::SCH_PAINTER::draw(), KIGFX::PCB_PAINTER::Draw(), KIGFX::PCB_PAINTER::draw(), DS_PROXY_UNDO_ITEM::DS_PROXY_UNDO_ITEM(), KIGFX::DS_RENDER_SETTINGS::GetColor(), KIGFX::GERBVIEW_RENDER_SETTINGS::GetColor(), KIGFX::PCB_RENDER_SETTINGS::GetColor(), SCH_MOVE_TOOL::getConnectedDragItems(), KIGFX::SCH_PAINTER::getLineWidth(), KIGFX::SCH_PAINTER::getRenderColor(), KIGFX::SCH_PAINTER::getTextThickness(), DIALOG_EXCHANGE_FOOTPRINTS::isMatch(), DIALOG_CHANGE_SYMBOLS::isMatch(), SCH_LINE::MergeOverlap(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), SCH_MOVE_TOOL::moveItem(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), BOARD_COMMIT::Push(), PCB_SELECTION_TOOL::RebuildSelection(), EE_SELECTION_TOOL::RebuildSelection(), RENDER_3D_OPENGL::renderFootprint(), SCH_EDIT_TOOL::Rotate(), EE_TOOL_BASE< SCH_BASE_FRAME >::saveCopyInUndoList(), SCH_EDIT_FRAME::SchematicCleanUp(), GERBVIEW_SELECTION_TOOL::select(), PCB_SELECTION_TOOL::select(), PCB_SELECTION_TOOL::selectionContains(), PCB_SELECTION_TOOL::selectMultiple(), GERBVIEW_SELECTION_TOOL::selectPoint(), KIGFX::SCH_PAINTER::setDeviceColors(), GERBVIEW_SELECTION_TOOL::unselect(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::visitItem(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem().

◆ IsType()

virtual bool EDA_ITEM::IsType ( const KICAD_T  aScanTypes[]) const
inlinevirtualinherited

Check whether the item is one of the listed types.

Parameters
aScanTypesList of item types
Returns
true if the item type is contained in the list aScanTypes

Reimplemented in PCB_VIA, SCH_LABEL, PCB_DIMENSION_BASE, PAD, SCH_FIELD, FP_TEXT, SCH_LINE, PCB_SHAPE, FP_SHAPE, and PCB_TEXT.

Definition at line 182 of file eda_item.h.

183  {
184  if( aScanTypes[0] == SCH_LOCATE_ANY_T )
185  return true;
186 
187  for( const KICAD_T* p = aScanTypes; *p != EOT; ++p )
188  {
189  if( m_structType == *p )
190  return true;
191  }
192 
193  return false;
194  }
search types array terminator (End Of Types)
Definition: typeinfo.h:81
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:77
KICAD_T m_structType
Run time identification, keep private so it can never be changed after a ctor sets it.
Definition: eda_item.h:487

References EOT, EDA_ITEM::m_structType, and SCH_LOCATE_ANY_T.

Referenced by SCH_EDIT_TOOL::AutoplaceFields(), ROUTER_TOOL::CanInlineDrag(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingBus(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingLine(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingWire(), PCB_TEXT::IsType(), FP_SHAPE::IsType(), PCB_SHAPE::IsType(), SCH_LINE::IsType(), FP_TEXT::IsType(), SCH_FIELD::IsType(), PAD::IsType(), PCB_DIMENSION_BASE::IsType(), SCH_LABEL::IsType(), PCB_VIA::IsType(), EE_POINT_EDITOR::Main(), PL_POINT_EDITOR::Main(), EE_SELECTION_TOOL::RequestSelection(), SCH_BASE_FRAME::UpdateItem(), EDA_ITEM::Visit(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem().

◆ IsWireImage()

bool EDA_ITEM::IsWireImage ( ) const
inlineinherited

Definition at line 121 of file eda_item.h.

121 { return m_flags & IS_WIRE_IMAGE; }
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:480
#define IS_WIRE_IMAGE
Item to be drawn as wireframe while editing.

References IS_WIRE_IMAGE, and EDA_ITEM::m_flags.

◆ IterateForward() [1/2]

template<class T >
static SEARCH_RESULT EDA_ITEM::IterateForward ( std::deque< T > &  aList,
INSPECTOR  inspector,
void *  testData,
const KICAD_T  scanTypes[] 
)
inlinestaticinherited

This changes first parameter to avoid the DList and use the main queue instead.

Definition at line 294 of file eda_item.h.

298  {
299  for( auto it : aList )
300  {
301  if( static_cast<EDA_ITEM*>( it )->Visit( inspector, testData, scanTypes )
303  return SEARCH_RESULT::QUIT;
304  }
305 
307  }
virtual SEARCH_RESULT Visit(INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
May be re-implemented for each derived class in order to handle all the types given by its member dat...
Definition: eda_item.cpp:93

References CONTINUE, QUIT, and EDA_ITEM::Visit().

Referenced by Visit().

◆ IterateForward() [2/2]

template<class T >
static SEARCH_RESULT EDA_ITEM::IterateForward ( std::vector< T > &  aList,
INSPECTOR  inspector,
void *  testData,
const KICAD_T  scanTypes[] 
)
inlinestaticinherited

Change first parameter to avoid the DList and use std::vector instead.

Definition at line 313 of file eda_item.h.

315  {
316  for( auto it : aList )
317  {
318  if( static_cast<EDA_ITEM*>( it )->Visit( inspector, testData, scanTypes )
320  return SEARCH_RESULT::QUIT;
321  }
322 
324  }
virtual SEARCH_RESULT Visit(INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
May be re-implemented for each derived class in order to handle all the types given by its member dat...
Definition: eda_item.cpp:93

References CONTINUE, QUIT, and EDA_ITEM::Visit().

◆ LoadGerberFile()

bool GERBER_FILE_IMAGE::LoadGerberFile ( const wxString &  aFullFileName)

Read and load a gerber file.

If the file cannot be loaded, warning and information messages are stored in m_messagesList.

Parameters
aFullFileNameThe full filename of the Gerber file.
Returns
true if file loaded successfully, false if the gerber file was not loaded.

Definition at line 120 of file readgerb.cpp.

121 {
122  int G_command = 0; // command number for G commands like G04
123  int D_commande = 0; // command number for D commands like D02
124  char* text;
125 
126  ClearMessageList( );
128 
129  // Read the gerber file */
130  m_Current_File = wxFopen( aFullFileName, wxT( "rt" ) );
131 
132  if( m_Current_File == nullptr )
133  return false;
134 
135  m_FileName = aFullFileName;
136 
137  LOCALE_IO toggleIo;
138 
139  wxString msg;
140 
141  while( true )
142  {
143  if( fgets( lineBuffer, GERBER_BUFZ, m_Current_File ) == nullptr )
144  break;
145 
146  m_LineNum++;
147  text = StrPurge( lineBuffer );
148 
149  while( text && *text )
150  {
151  switch( *text )
152  {
153  case ' ':
154  case '\r':
155  case '\n':
156  text++;
157  break;
158 
159  case '*': // End command
161  text++;
162  break;
163 
164  case 'M': // End file
166  while( *text )
167  text++;
168  break;
169 
170  case 'G': /* Line type Gxx : command */
171  G_command = CodeNumber( text );
172  Execute_G_Command( text, G_command );
173  break;
174 
175  case 'D': /* Line type Dxx : Tool selection (xx > 0) or
176  * command if xx = 0..9 */
177  D_commande = CodeNumber( text );
178  Execute_DCODE_Command( text, D_commande );
179  break;
180 
181  case 'X':
182  case 'Y': /* Move or draw command */
184  if( *text == '*' ) // command like X12550Y19250*
185  {
187  }
188  break;
189 
190  case 'I':
191  case 'J': /* Auxiliary Move command */
192  m_IJPos = ReadIJCoord( text );
193 
194  if( *text == '*' ) // command like X35142Y15945J504*
195  {
197  }
198  break;
199 
200  case '%':
202  {
205  }
206  else //Error
207  {
208  AddMessageToList( wxT( "Expected RS274X Command" ) );
210  text++;
211  }
212  break;
213 
214  default:
215  msg.Printf( wxT( "Unexpected char 0x%2.2X &lt;%c&lt;" ), *text, *text );
216  AddMessageToList( msg );
217  text++;
218  break;
219  }
220  }
221  }
222 
223  fclose( m_Current_File );
224 
225  m_InUse = true;
226 
227  return true;
228 }
int m_LineNum
< Line number of the gerber file while reading.
void AddMessageToList(const wxString &aMessage)
Add a message to the message list.
int CodeNumber(char *&aText)
Reads the next number and returns the value.
Definition: rs274d.cpp:402
bool Execute_DCODE_Command(char *&text, int D_command)
Definition: rs274d.cpp:558
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
Definition: locale_io.h:40
int m_Last_Pen_Command
< Current or last pen state (0..9, set by Dn option with n < 10.
wxPoint ReadIJCoord(char *&Text)
Return the current coordinate type pointed to by InnJnn Text (InnnnJmmmm)
void ClearMessageList()
Clear the message list.
static char lineBuffer[GERBER_BUFZ+1]
Definition: readgerb.cpp:118
char * StrPurge(char *text)
Remove leading and training spaces, tabs and end of line chars in text.
#define GERBER_BUFZ
Definition: readgerb.cpp:116
wxPoint ReadXYCoord(char *&aText, bool aExcellonMode=false)
Return the current coordinate type pointed to by XnnYnn Text (XnnnnYmmmm).
bool Execute_G_Command(char *&text, int G_command)
Definition: rs274d.cpp:422
bool ReadRS274XCommand(char *aBuff, unsigned int aBuffSize, char *&aText)
Read a single RS274X command terminated with a %.
Definition: rs274x.cpp:143
virtual void ResetDefaultValues()
Set all parameters to a default value, before reading a file.

References AddMessageToList(), ClearMessageList(), CMD_IDLE, CodeNumber(), END_BLOCK, ENTER_RS274X_CMD, Execute_DCODE_Command(), Execute_G_Command(), GERBER_BUFZ, lineBuffer, m_CommandState, m_Current_File, m_CurrentPos, m_FileName, m_IJPos, m_InUse, m_Last_Pen_Command, m_LineNum, ReadIJCoord(), ReadRS274XCommand(), ReadXYCoord(), ResetDefaultValues(), StrPurge(), and text.

◆ Matches() [1/2]

virtual bool EDA_ITEM::Matches ( const wxFindReplaceData &  aSearchData,
void *  aAuxData 
) const
inlinevirtualinherited

Compare the item against the search criteria in aSearchData.

The base class returns false since many of the objects derived from EDA_ITEM do not have any text to search.

Parameters
aSearchDataA reference to a wxFindReplaceData object containing the search criteria.
aAuxDataA pointer to optional data required for the search or NULL if not used.
Returns
True if the item's text matches the search criteria in aSearchData.

Reimplemented in SCH_SYMBOL, SCH_SHEET, SCH_TEXT, SCH_FIELD, SCH_SHEET_PIN, ZONE, SCH_PIN, PCB_MARKER, SCH_MARKER, FP_TEXT, and PCB_TEXT.

Definition at line 364 of file eda_item.h.

365  {
366  return false;
367  }

Referenced by SCH_EDITOR_CONTROL::HasMatch(), PCB_TEXT::Matches(), FP_TEXT::Matches(), SCH_MARKER::Matches(), PCB_MARKER::Matches(), SCH_PIN::Matches(), ZONE::Matches(), SCH_SHEET_PIN::Matches(), SCH_FIELD::Matches(), SCH_TEXT::Matches(), SCH_EDITOR_CONTROL::ReplaceAndFindNext(), and SCH_EDITOR_CONTROL::UpdateFind().

◆ Matches() [2/2]

bool EDA_ITEM::Matches ( const wxString &  aText,
const wxFindReplaceData &  aSearchData 
) const
protectedinherited

Compare aText against search criteria in aSearchData.

This is a helper function for simplify derived class logic.

Parameters
aTextA reference to a wxString object containing the string to test.
aSearchDataThe criteria to search against.
Returns
True if aText matches the search criteria in aSearchData.

Definition at line 118 of file eda_item.cpp.

119 {
120  wxString text = aText;
121  int flags = aSearchData.GetFlags();
122  wxString searchText = aSearchData.GetFindString();
123 
124  // Don't match if searching for replaceable item and the item doesn't support text replace.
125  if( ( flags & FR_SEARCH_REPLACE ) && !IsReplaceable() )
126  return false;
127 
128  if( !( flags & wxFR_MATCHCASE ) )
129  {
130  text.MakeUpper();
131  searchText.MakeUpper();
132  }
133 
134  if( flags & wxFR_WHOLEWORD )
135  {
136  int ii = 0;
137 
138  while( ii < (int) text.length() )
139  {
140  int next = text.find( searchText, ii );
141 
142  if( next == wxNOT_FOUND )
143  return false;
144 
145  ii = next;
146  next += searchText.length();
147 
148  bool startOK = ( ii == 0 || !wxIsalnum( text.GetChar( ii - 1 ) ) );
149  bool endOK = ( next == (int) text.length() || !wxIsalnum( text.GetChar( next ) ) );
150 
151  if( startOK && endOK )
152  return true;
153  else
154  ii++;
155  }
156 
157  return false;
158  }
159  else if( flags & FR_MATCH_WILDCARD )
160  {
161  return text.Matches( searchText );
162  }
163  else
164  {
165  return text.Find( searchText ) != wxNOT_FOUND;
166  }
167 }
CITER next(CITER it)
Definition: ptree.cpp:126
virtual bool IsReplaceable() const
Override this method in any derived object that supports test find and replace.
Definition: eda_item.h:402

References FR_MATCH_WILDCARD, FR_SEARCH_REPLACE, EDA_ITEM::IsReplaceable(), next(), and text.

◆ operator<()

bool EDA_ITEM::operator< ( const EDA_ITEM aItem) const
inherited

Test if another item is less than this object.

Parameters
aItem- Item to compare against.
Returns
- True if aItem is less than the item.

Definition at line 234 of file eda_item.cpp.

235 {
236  wxFAIL_MSG( wxString::Format( wxT( "Less than operator not defined for item type %s." ),
237  GetClass() ) );
238 
239  return false;
240 }
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
virtual wxString GetClass() const =0
Return the class name.

References Format(), and EDA_ITEM::GetClass().

◆ ReadApertureMacro()

bool GERBER_FILE_IMAGE::ReadApertureMacro ( char *  aBuff,
unsigned int  aBuffSize,
char *&  text,
FILE *  gerber_file 
)
private

Read in an aperture macro and saves it in m_aperture_macros.

Parameters
aBuffa character buffer at least GERBER_BUFZ long that can be used to read successive lines from the gerber file.
textA reference to a character pointer which gives the initial text to read from.
aBuffSizeis the size of aBuff
gerber_fileWhich file to read from for continuation.
Returns
true if a macro was read in successfully, else false.

Definition at line 963 of file rs274x.cpp.

966 {
967  wxString msg;
968  APERTURE_MACRO am;
969 
970  // read macro name
971  while( *aText )
972  {
973  if( *aText == '*' )
974  {
975  ++aText;
976  break;
977  }
978 
979  am.name.Append( *aText++ );
980  }
981 
982  // Read aperture macro parameters
983  for( ; ; )
984  {
985  if( *aText == '*' )
986  ++aText;
987 
988  aText = GetNextLine( aBuff, aBuffSize, aText, gerber_file );
989 
990  if( aText == nullptr ) // End of File
991  return false;
992 
993  // aText points the beginning of a new line.
994 
995  // Test for the last line in aperture macro lis:
996  // last line is % or *% sometime found.
997  if( *aText == '*' )
998  ++aText;
999 
1000  if( *aText == '%' )
1001  break; // exit with aText still pointing at %
1002 
1003  int paramCount = 0; // will be set to the minimal parameters count,
1004  // depending on the actual primitive
1005  int primitive_type = AMP_UNKNOWN;
1006  // Test for a valid symbol at the beginning of a description:
1007  // it can be: a parameter declaration like $1=$2/4
1008  // or a digit (macro primitive selection)
1009  // all other symbols are illegal.
1010  if( *aText == '$' ) // local parameter declaration, inside the aperture macro
1011  {
1012  am.m_localparamStack.push_back( AM_PARAM() );
1013  AM_PARAM& param = am.m_localparamStack.back();
1014  aText = GetNextLine( aBuff, aBuffSize, aText, gerber_file );
1015  if( aText == nullptr) // End of File
1016  return false;
1017  param.ReadParam( aText );
1018  continue;
1019  }
1020  else if( !isdigit(*aText) ) // Ill. symbol
1021  {
1022  msg.Printf( wxT( "RS274X: Aperture Macro \"%s\": ill. symbol, line: \"%s\"" ),
1023  am.name, FROM_UTF8( aBuff ) );
1024  AddMessageToList( msg );
1025  primitive_type = AMP_COMMENT;
1026  }
1027  else
1028  primitive_type = ReadInt( aText );
1029 
1030  bool is_comment = false;
1031 
1032  switch( primitive_type )
1033  {
1034  case AMP_COMMENT: // lines starting by 0 are a comment
1035  paramCount = 0;
1036  is_comment = true;
1037 
1038  // Skip comment
1039  while( *aText && ( *aText != '*' ) )
1040  aText++;
1041 
1042  break;
1043 
1044  case AMP_CIRCLE:
1045  paramCount = 4; // minimal count. can have a optional parameter (rotation)
1046  break;
1047 
1048  case AMP_LINE2:
1049  case AMP_LINE20:
1050  paramCount = 7;
1051  break;
1052 
1053  case AMP_LINE_CENTER:
1054  case AMP_LINE_LOWER_LEFT:
1055  paramCount = 6;
1056  break;
1057 
1058  case AMP_EOF:
1059  paramCount = 0;
1060  break;
1061 
1062  case AMP_OUTLINE:
1063  paramCount = 4; // partial count. other parameters are vertices and rotation
1064  // Second parameter is vertice (coordinate pairs) count.
1065  break;
1066 
1067  case AMP_POLYGON:
1068  paramCount = 6;
1069  break;
1070 
1071  case AMP_MOIRE:
1072  paramCount = 9;
1073  break;
1074 
1075  case AMP_THERMAL:
1076  paramCount = 6;
1077  break;
1078 
1079  default:
1080  msg.Printf( wxT( "RS274X: Aperture Macro \"%s\": Invalid primitive id code %d, line %d: \"%s\"" ),
1081  am.name, primitive_type, m_LineNum, FROM_UTF8( aBuff ) );
1082  AddMessageToList( msg );
1083  return false;
1084  }
1085 
1086  if( is_comment )
1087  continue;
1088 
1089  AM_PRIMITIVE prim( m_GerbMetric );
1090  prim.primitive_id = (AM_PRIMITIVE_ID) primitive_type;
1091  int ii;
1092 
1093  for( ii = 0; ii < paramCount && *aText && *aText != '*'; ++ii )
1094  {
1095  prim.params.push_back( AM_PARAM() );
1096 
1097  AM_PARAM& param = prim.params.back();
1098 
1099  aText = GetNextLine( aBuff, aBuffSize, aText, gerber_file );
1100 
1101  if( aText == nullptr) // End of File
1102  return false;
1103 
1104  param.ReadParam( aText );
1105  }
1106 
1107  if( ii < paramCount )
1108  {
1109  // maybe some day we can throw an exception and track a line number
1110  msg.Printf( wxT( "RS274X: read macro descr type %d: read %d parameters, insufficient "
1111  "parameters\n" ),
1112  prim.primitive_id, ii );
1113  AddMessageToList( msg );
1114  }
1115 
1116  // there are more parameters to read if this is an AMP_OUTLINE
1117  if( prim.primitive_id == AMP_OUTLINE )
1118  {
1119  // so far we have read [0]:exposure, [1]:#points, [2]:X start, [3]: Y start
1120  // Now read all the points, plus trailing rotation in degrees.
1121 
1122  // params[1] is a count of polygon points, so it must be given
1123  // in advance, i.e. be immediate.
1124  wxASSERT( prim.params[1].IsImmediate() );
1125 
1126  paramCount = (int) prim.params[1].GetValue( nullptr ) * 2 + 1;
1127 
1128  for( int jj = 0; jj < paramCount && *aText != '*'; ++jj )
1129  {
1130  prim.params.push_back( AM_PARAM() );
1131 
1132  AM_PARAM& param = prim.params.back();
1133 
1134  aText = GetNextLine( aBuff, aBuffSize, aText, gerber_file );
1135 
1136  if( aText == nullptr ) // End of File
1137  return false;
1138 
1139  param.ReadParam( aText );
1140  }
1141  }
1142 
1143  // AMP_CIRCLE can have a optional parameter (rotation)
1144  if( prim.primitive_id == AMP_CIRCLE && aText && *aText != '*' )
1145  {
1146  prim.params.push_back( AM_PARAM() );
1147  AM_PARAM& param = prim.params.back();
1148  param.ReadParam( aText );
1149  }
1150 
1151  am.primitives.push_back( prim );
1152  }
1153 
1154  m_aperture_macros.insert( am );
1155 
1156  return true;
1157 }
APERTURE_MACRO_SET m_aperture_macros
int m_LineNum
< Line number of the gerber file while reading.
void AddMessageToList(const wxString &aMessage)
Add a message to the message list.
wxString name
The name of the aperture macro.
Definition: am_primitive.h:231
static wxString FROM_UTF8(const char *cstring)
Convert a UTF8 encoded C string to a wxString for all wxWidgets build modes.
Definition: macros.h:110
int ReadInt(char *&text, bool aSkipSeparator=true)
Read an integer from an ASCII character buffer.
bool ReadParam(char *&aText)
Read one aperture macro parameter.
Definition: am_param.cpp:177
AM_PARAMS m_localparamStack
Definition: am_primitive.h:240
char * GetNextLine(char *aBuff, unsigned int aBuffSize, char *aText, FILE *aFile)
Test for an end of line.
Definition: rs274x.cpp:935
Hold a parameter value for an "aperture macro" as defined within standard RS274X.
Definition: am_param.h:284
AM_PRIMITIVES primitives
A sequence of AM_PRIMITIVEs.
Definition: am_primitive.h:232
An aperture macro primitive as given in Table 3 of http://gerbv.sourceforge.net/docs/rs274xrevd_e....
Definition: am_primitive.h:93
AM_PRIMITIVE_ID
The set of all "aperture macro primitives" (primitive numbers).
Definition: am_primitive.h:70
Support the "aperture macro" defined within standard RS274X.
Definition: am_primitive.h:167

References AddMessageToList(), AMP_CIRCLE, AMP_COMMENT, AMP_EOF, AMP_LINE2, AMP_LINE20, AMP_LINE_CENTER, AMP_LINE_LOWER_LEFT, AMP_MOIRE, AMP_OUTLINE, AMP_POLYGON, AMP_THERMAL, AMP_UNKNOWN, FROM_UTF8(), gerber_file, GetNextLine(), m_aperture_macros, m_GerbMetric, m_LineNum, APERTURE_MACRO::m_localparamStack, APERTURE_MACRO::name, AM_PRIMITIVE::params, AM_PRIMITIVE::primitive_id, APERTURE_MACRO::primitives, ReadInt(), and AM_PARAM::ReadParam().

Referenced by ExecuteRS274XCommand().

◆ ReadIJCoord()

wxPoint GERBER_FILE_IMAGE::ReadIJCoord ( char *&  Text)

Return the current coordinate type pointed to by InnJnn Text (InnnnJmmmm)

These coordinates are relative, so if coordinate is absent, its value defaults to 0

Definition at line 163 of file rs274_read_XY_and_IJ_coordinates.cpp.

164 {
165  wxPoint pos( 0, 0 );
166  bool is_float = false;
167 
168  std::string line;
169 
170  // Reserve the anticipated length plus an optional sign and decimal
171  line.reserve( std::max( m_FmtLen.x, m_FmtLen.y ) + 3 );
172 
173  if( aText == nullptr )
174  return pos;
175 
176  while( *aText && ( ( *aText == 'I' ) || ( *aText == 'J' ) ) )
177  {
178  double decimal_scale = 1.0;
179  int nbdigits = 0;
180  int current_coord = 0;
181  char type_coord = *aText++;
182 
183  line.clear();
184 
185  while( IsNumber( *aText ) )
186  {
187  if( *aText == '.' ) // Force decimal format if reading a floating point number
188  is_float = true;
189 
190  // count digits only (sign and decimal point are not counted)
191  if( (*aText >= '0') && (*aText <='9') )
192  nbdigits++;
193 
194  line.push_back( *( aText++ ) );
195  }
196 
197  double val = strtod( line.data(), nullptr );
198 
199  if( is_float )
200  {
201  current_coord = scaletoIU( val, m_GerbMetric );
202  }
203  else
204  {
205  int fmt_scale = ( type_coord == 'I' ) ? m_FmtScale.x : m_FmtScale.y;
206 
207  if( m_NoTrailingZeros )
208  {
209  // no trailing zero format, we need to add missing zeros.
210  int digit_count = ( type_coord == 'I' ) ? m_FmtLen.x : m_FmtLen.y;
211 
212  // Truncate the extra digits if the len is more than expected
213  // because the conversion to internal units expect exactly
214  // digit_count digits. Alternatively, add some additional digits
215  // to pad out to the missing zeros
216  if( nbdigits < digit_count )
217  decimal_scale = std::pow<double>( 10, digit_count - nbdigits );
218  }
219 
220  double real_scale = scale_list[fmt_scale];
221 
222  if( m_GerbMetric )
223  real_scale = real_scale / 25.4;
224 
225  current_coord = KiROUND( val * real_scale * decimal_scale );
226  }
227 
228  if( type_coord == 'I' )
229  {
230  pos.x = current_coord;
231  }
232  else if( type_coord == 'J' )
233  {
234  pos.y = current_coord;
235  }
236  }
237 
238  m_IJPos = pos;
240  m_LastCoordIsIJPos = true;
241 
242  return pos;
243 }
int scaletoIU(double aCoord, bool isMetric)
Convert a coordinate given in floating point to GerbView's internal units (currently = 10 nanometers)...
bool m_LastCoordIsIJPos
< True if a IJ coord was read (for arcs & circles ).
wxSize m_FmtLen
Image rotation (0, 90, 180, 270 only) in degrees.
wxSize m_FmtScale
< Fmt 2.3: m_FmtScale = 3, fmt 3.4: m_FmtScale = 4.
static double scale_list[SCALE_LIST_SIZE]
LAST_EXTRA_ARC_DATA_TYPE m_LastArcDataType
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:73
#define IsNumber(x)

References ARC_INFO_TYPE_CENTER, IsNumber, KiROUND(), m_FmtLen, m_FmtScale, m_GerbMetric, m_IJPos, m_LastArcDataType, m_LastCoordIsIJPos, m_NoTrailingZeros, scale_list, and scaletoIU().

Referenced by EXCELLON_IMAGE::Execute_Drill_Command(), EXCELLON_IMAGE::Execute_EXCELLON_G_Command(), EXCELLON_IMAGE::LoadFile(), and LoadGerberFile().

◆ ReadRS274XCommand()

bool GERBER_FILE_IMAGE::ReadRS274XCommand ( char *  aBuff,
unsigned int  aBuffSize,
char *&  aText 
)
private

Read a single RS274X command terminated with a %.

Definition at line 143 of file rs274x.cpp.

144 {
145  bool ok = true;
146  int code_command;
147 
148  aText++;
149 
150  for( ; ; )
151  {
152  while( *aText )
153  {
154  switch( *aText )
155  {
156  case '%': // end of command
157  aText++;
159  goto exit; // success completion
160 
161  case ' ':
162  case '\r':
163  case '\n':
164  aText++;
165  break;
166 
167  case '*':
168  aText++;
169  break;
170 
171  default:
172  code_command = ReadXCommandID( aText );
173  ok = ExecuteRS274XCommand( code_command, aBuff, aBuffSize, aText );
174 
175  if( !ok )
176  goto exit;
177 
178  break;
179  }
180  }
181 
182  // end of current line, read another one.
183  if( fgets( aBuff, aBuffSize, m_Current_File ) == nullptr )
184  {
185  // end of file
186  ok = false;
187  break;
188  }
189  m_LineNum++;
190  aText = aBuff;
191  }
192 
193 exit:
194  return ok;
195 }
int m_LineNum
< Line number of the gerber file while reading.
int ReadXCommandID(char *&text)
Read two bytes of data and assembles them into an int with the first byte in the sequence put into th...
Definition: rs274x.cpp:115
bool ExecuteRS274XCommand(int aCommand, char *aBuff, unsigned int aBuffSize, char *&aText)
Execute a RS274X command.
Definition: rs274x.cpp:198

References CMD_IDLE, ExecuteRS274XCommand(), exit, m_CommandState, m_Current_File, m_LineNum, and ReadXCommandID().

Referenced by LoadGerberFile().

◆ ReadXCommandID()

int GERBER_FILE_IMAGE::ReadXCommandID ( char *&  text)
private

Read two bytes of data and assembles them into an int with the first byte in the sequence put into the most significant part of a 16 bit value to build a RS274X command identifier.

Parameters
textA reference to a pointer to read bytes from and to advance as they are read.
Returns
a RS274X command identifier.

Definition at line 115 of file rs274x.cpp.

116 {
117  /* reads two bytes of data and assembles them into an int with the first
118  * byte in the sequence put into the most significant part of a 16 bit value
119  */
120  int result;
121  int currbyte;
122 
123  if( text && *text )
124  {
125  currbyte = *text++;
126  result = ( currbyte & 0xFF ) << 8;
127  }
128  else
129  return -1;
130 
131  if( text && *text )
132  {
133  currbyte = *text++;
134  result += currbyte & 0xFF;
135  }
136  else
137  return -1;
138 
139  return result;
140 }

References text.

Referenced by Execute_G_Command(), ExecuteRS274XCommand(), and ReadRS274XCommand().

◆ ReadXYCoord()

wxPoint GERBER_FILE_IMAGE::ReadXYCoord ( char *&  aText,
bool  aExcellonMode = false 
)

Return the current coordinate type pointed to by XnnYnn Text (XnnnnYmmmm).

Parameters
aTextis a pointer to the text to parse.
aExcellonMode= true to parse a Excellon drill file. it forces truncation of a digit string to a maximum length because the exact coordinate format is not always known.

Definition at line 71 of file rs274_read_XY_and_IJ_coordinates.cpp.

72 {
73  wxPoint pos( 0, 0 );
74  bool is_float = false;
75 
76  std::string line;
77 
78  // Reserve the anticipated length plus an optional sign and decimal
79  line.reserve( std::max( m_FmtLen.x, m_FmtLen.y ) + 3 );
80 
81  // Set up return value for case where aText == nullptr
82  if( !m_Relative )
83  pos = m_CurrentPos;
84 
85  if( aText == nullptr )
86  return pos;
87 
88  while( *aText && ( ( *aText == 'X' ) || ( *aText == 'Y' ) || ( *aText == 'A' ) ) )
89  {
90  double decimal_scale = 1.0;
91  int nbdigits = 0;
92  int current_coord = 0;
93  char type_coord = *aText++;
94 
95  line.clear();
96 
97  while( IsNumber( *aText ) )
98  {
99  if( *aText == '.' ) // Force decimal format if reading a floating point number
100  is_float = true;
101 
102  // count digits only (sign and decimal point are not counted)
103  if( (*aText >= '0') && (*aText <='9') )
104  nbdigits++;
105 
106  line.push_back( *( aText++ ) );
107  }
108 
109  double val = strtod( line.data(), nullptr );
110 
111  if( is_float )
112  {
113  current_coord = scaletoIU( val, m_GerbMetric );
114  }
115  else
116  {
117  int fmt_scale = (type_coord == 'X') ? m_FmtScale.x : m_FmtScale.y;
118 
119  if( m_NoTrailingZeros )
120  {
121  // no trailing zero format, we need to add missing zeros.
122  int digit_count = (type_coord == 'X') ? m_FmtLen.x : m_FmtLen.y;
123 
124  // Truncate the extra digits if the len is more than expected
125  // because the conversion to internal units expect exactly
126  // digit_count digits. Alternatively, add some additional digits
127  // to pad out to the missing zeros
128  if( nbdigits < digit_count || ( aExcellonMode && ( nbdigits > digit_count ) ) )
129  decimal_scale = std::pow<double>( 10, digit_count - nbdigits );
130  }
131 
132  double real_scale = scale_list[fmt_scale];
133 
134  if( m_GerbMetric )
135  real_scale = real_scale / 25.4;
136 
137  current_coord = KiROUND( val * real_scale * decimal_scale );
138  }
139 
140  if( type_coord == 'X' )
141  {
142  pos.x = current_coord;
143  }
144  else if( type_coord == 'Y' )
145  {
146  pos.y = current_coord;
147  }
148  else if( type_coord == 'A' )
149  {
150  m_ArcRadius = current_coord;
152  }
153  }
154 
155  if( m_Relative )
156  pos += m_CurrentPos;
157 
158  m_CurrentPos = pos;
159  return pos;
160 }
int scaletoIU(double aCoord, bool isMetric)
Convert a coordinate given in floating point to GerbView's internal units (currently = 10 nanometers)...
wxSize m_FmtLen
Image rotation (0, 90, 180, 270 only) in degrees.
wxSize m_FmtScale
< Fmt 2.3: m_FmtScale = 3, fmt 3.4: m_FmtScale = 4.
int m_ArcRadius
Identifier for arc data type (IJ (center) or A## (radius)).
static double scale_list[SCALE_LIST_SIZE]
bool m_Relative
< false = absolute Coord, true = relative Coord.
LAST_EXTRA_ARC_DATA_TYPE m_LastArcDataType
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:73
#define IsNumber(x)

References ARC_INFO_TYPE_RADIUS, IsNumber, KiROUND(), m_ArcRadius, m_CurrentPos, m_FmtLen, m_FmtScale, m_GerbMetric, m_LastArcDataType, m_NoTrailingZeros, m_Relative, scale_list, and scaletoIU().

Referenced by EXCELLON_IMAGE::Execute_Drill_Command(), EXCELLON_IMAGE::Execute_EXCELLON_G_Command(), and LoadGerberFile().

◆ RemoveAttribute()

void GERBER_FILE_IMAGE::RemoveAttribute ( X2_ATTRIBUTE aAttribute)

Called when a TD command is found the Gerber file.

Remove the attribute specified by the TD command. is no attribute, all current attributes specified by the TO and the TA commands are cleared. if a attribute name is specified (for instance TD.CN*%) is specified, only this attribute is cleared

Parameters
aAttributeis the X2_ATTRIBUTE which stores the full commandMay be re-implemented for each derived class in order to handle all the types given by its member data. Implementations should call inspector->Inspect() on types in scanTypes[], and may use IterateForward() to do so on lists of such data.
inspectorAn INSPECTOR instance to use in the inspection.
testDataArbitrary data used by the inspector.
scanTypesWhich# KICAD_T types are of interest and the order is significant too, terminated by EOT.
Returns
SEARCH_RESULT SEARCH_QUIT if the Iterator is to stop the scan, else #SCAN_CONTINUE, and determined by the inspector.

Definition at line 388 of file gerber_file_image.cpp.

389 {
390  /* Called when a %TD command is found
391  * Remove the attribute specified by the %TD command.
392  * is no attribute, all current attributes specified by the %TO and the %TA
393  * commands are cleared.
394  * if a attribute name is specified (for instance %TD.CN*%) is specified,
395  * only this attribute is cleared
396  */
397  wxString cmd = aAttribute.GetPrm( 0 );
399 
400  if( cmd.IsEmpty() || cmd == wxT( ".AperFunction" ) )
401  m_AperFunction.Clear();
402 }
const wxString & GetPrm(int aIdx)
GBR_NETLIST_METADATA m_NetAttributeDict
void ClearAttribute(const wxString *aName)
Remove the net attribute specified by aName.

References GBR_NETLIST_METADATA::ClearAttribute(), X2_ATTRIBUTE::GetPrm(), m_AperFunction, and m_NetAttributeDict.

Referenced by ExecuteRS274XCommand().

◆ Replace() [1/2]

bool EDA_ITEM::Replace ( const wxFindReplaceData &  aSearchData,
wxString &  aText 
)
staticinherited

Perform a text replace on aText using the find and replace criteria in aSearchData on items that support text find and replace.

Parameters
aSearchDataA reference to a wxFindReplaceData object containing the search and replace criteria.
aTextA reference to a wxString object containing the text to be replaced.
Returns
True if aText was modified, otherwise false.

Definition at line 170 of file eda_item.cpp.

171 {
172  wxString text = aText;
173  int flags = aSearchData.GetFlags();
174  wxString searchText = aSearchData.GetFindString();
175  wxString result;
176  bool replaced = false;
177 
178  if( flags & wxFR_MATCHCASE )
179  {
180  text = text.Upper();
181  searchText = searchText.Upper();
182  }
183 
184  int ii = 0;
185 
186  while( ii < (int) text.length() )
187  {
188  int next = text.find( searchText, ii );
189 
190  if( next == wxNOT_FOUND )
191  {
192  result += aText.Mid( ii, wxString::npos );
193  break;
194  }
195 
196  if( next > ii )
197  result += aText.Mid( ii, next - ii );
198 
199  ii = next;
200  next += searchText.length();
201 
202  bool startOK;
203  bool endOK;
204 
205  if( flags & wxFR_WHOLEWORD )
206  {
207  startOK = ( ii == 0 || !wxIsalnum( text.GetChar( ii - 1 ) ) );
208  endOK = ( next == (int) text.length() || !wxIsalnum( text.GetChar( next ) ) );
209  }
210  else
211  {
212  startOK = true;
213  endOK = true;
214  }
215 
216  if( startOK && endOK )
217  {
218  result += aSearchData.GetReplaceString();
219  replaced = true;
220  ii = next;
221  }
222  else
223  {
224  result += aText.GetChar( ii );
225  ii++;
226  }
227  }
228 
229  aText = result;
230  return replaced;
231 }
CITER next(CITER it)
Definition: ptree.cpp:126

References next(), and text.

Referenced by SCH_FIELD::Replace(), EDA_TEXT::Replace(), SCH_EDITOR_CONTROL::ReplaceAll(), and SCH_EDITOR_CONTROL::ReplaceAndFindNext().

◆ Replace() [2/2]

virtual bool EDA_ITEM::Replace ( const wxFindReplaceData &  aSearchData,
void *  aAuxData = nullptr 
)
inlinevirtualinherited

Perform a text replace using the find and replace criteria in aSearchData on items that support text find and replace.

This function must be overridden for items that support text replace.

Parameters
aSearchDataA reference to a wxFindReplaceData object containing the search and replace criteria.
aAuxDataA pointer to optional data required for the search or NULL if not used.
Returns
True if the item text was modified, otherwise false.

Reimplemented in SCH_TEXT, SCH_FIELD, SCH_SHEET_PIN, and SCH_PIN.

Definition at line 391 of file eda_item.h.

392  {
393  return false;
394  }

◆ ResetDefaultValues()

void GERBER_FILE_IMAGE::ResetDefaultValues ( )
virtual

Set all parameters to a default value, before reading a file.

Reimplemented in EXCELLON_IMAGE.

Definition at line 169 of file gerber_file_image.cpp.

170 {
171  m_InUse = false;
173  m_FileName.Empty();
174  m_ImageName = wxT( "no name" ); // Image name from the IN command
175  m_ImageNegative = false; // true = Negative image
176  m_IsX2_file = false; // true only if a %TF, %TA or %TD command
177  delete m_FileFunction; // file function parameters
178  m_FileFunction = nullptr;
179  m_MD5_value.Empty(); // MD5 value found in a %TF.MD5 command
180  m_PartString.Empty(); // string found in a %TF.Part command
181  m_hasNegativeItems = -1; // set to uninitialized
182  m_ImageJustifyOffset = wxPoint(0,0); // Image justify Offset
183  m_ImageJustifyXCenter = false; // Image Justify Center on X axis (default = false)
184  m_ImageJustifyYCenter = false; // Image Justify Center on Y axis (default = false)
185  m_GerbMetric = false; // false = Inches (default), true = metric
186  m_Relative = false; // false = absolute Coord,
187  // true = relative Coord
188  m_NoTrailingZeros = false; // true: trailing zeros deleted
189  m_ImageOffset.x = m_ImageOffset.y = 0; // Coord Offset, from IO command
190  m_ImageRotation = 0; // Allowed 0, 90, 180, 270 (in degree)
191  m_LocalRotation = 0.0; // Layer rotation from RO command (in 0.1 degree)
192  m_Offset.x = 0;
193  m_Offset.y = 0; // Coord Offset, from OF command
194  m_Scale.x = m_Scale.y = 1.0; // scale (A and B) this layer
195  m_MirrorA = false; // true: mirror / axe A (default = X)
196  m_MirrorB = false; // true: mirror / axe B (default = Y)
197  m_SwapAxis = false; // false if A = X, B = Y; true if A =Y, B = Y
198  m_Has_DCode = false; // true = DCodes in file
199  // false = no DCode-> perhaps deprecated RS274D file
200  m_Has_MissingDCode = false; // true = some D_Codes are used, but not defined
201  // perhaps deprecated RS274D file
202  m_FmtScale.x = m_FmtScale.y = 4; // Initialize default format to 3.4 => 4
203  m_FmtLen.x = m_FmtLen.y = 3 + 4; // Initialize default format len = 3+4
204 
205  m_Iterpolation = GERB_INTERPOL_LINEAR_1X; // Linear, 90 arc, Circ.
206  m_360Arc_enbl = true; // 360 deg circular mode (G75) selected as default
207  // interpolation disable
208  m_AsArcG74G75Cmd = false; // false until a G74 or G75 command is found
209  m_Current_Tool = 0; // Current Dcode selected
210  m_CommandState = 0; // State of the current command
211  m_CurrentPos.x = m_CurrentPos.y = 0; // current specified coord
212  m_PreviousPos.x = m_PreviousPos.y = 0; // last specified coord
213  m_IJPos.x = m_IJPos.y = 0; // current centre coord for
214  // plot arcs & circles
215  m_LastCoordIsIJPos = false; // True only after a IJ coordinate is read
216  m_ArcRadius = 0; // radius of arcs in circular interpol (given by A## command).
217  // in command like X##Y##A##
218  m_LastArcDataType = ARC_INFO_TYPE_NONE; // Extra coordinate info type for arcs
219  // (radius or IJ center coord)
220  m_LineNum = 0; // line number in file being read
221  m_Current_File = nullptr; // Gerber file to read
222  m_PolygonFillMode = false;
224  m_Selected_Tool = 0;
225  m_Last_Pen_Command = 0;
226  m_Exposure = false;
227 }
int m_LineNum
< Line number of the gerber file while reading.
X2_ATTRIBUTE_FILEFUNCTION * m_FileFunction
int m_Last_Pen_Command
< Current or last pen state (0..9, set by Dn option with n < 10.
bool m_ImageJustifyXCenter
< Image Justify Center on X axis (default = false).
bool m_LastCoordIsIJPos
< True if a IJ coord was read (for arcs & circles ).
bool m_ImageJustifyYCenter
Image Justify Offset on XY axis (default = 0,0).
wxSize m_FmtLen
Image rotation (0, 90, 180, 270 only) in degrees.
wxSize m_FmtScale
< Fmt 2.3: m_FmtScale = 3, fmt 3.4: m_FmtScale = 4.
int m_ArcRadius
Identifier for arc data type (IJ (center) or A## (radius)).
int m_PolygonFillModeState
a collection of APERTURE_MACROS, sorted by name
bool m_IsX2_file
< True if a X2 gerber attribute was found in file.
GERBER_LAYER m_GBRLayerParams
bool m_Relative
< false = absolute Coord, true = relative Coord.
bool m_Has_DCode
< True if has DCodes in file or false if no DCodes found. Perhaps deprecated RS274D file.
int m_hasNegativeItems
True if the image is negative or has some negative items.
LAST_EXTRA_ARC_DATA_TYPE m_LastArcDataType
int m_ImageRotation
Local rotation in degrees added to m_ImageRotation.

References ARC_INFO_TYPE_NONE, GERB_INTERPOL_LINEAR_1X, m_360Arc_enbl, m_ArcRadius, m_AsArcG74G75Cmd, m_CommandState, m_Current_File, m_Current_Tool, m_CurrentPos, m_Exposure, m_FileFunction, m_FileName, m_FmtLen, m_FmtScale, m_GBRLayerParams, m_GerbMetric, m_Has_DCode, m_Has_MissingDCode, m_hasNegativeItems, m_IJPos, m_ImageJustifyOffset, m_ImageJustifyXCenter, m_ImageJustifyYCenter, m_ImageName, m_ImageNegative, m_ImageOffset, m_ImageRotation, m_InUse, m_IsX2_file, m_Iterpolation, m_Last_Pen_Command, m_LastArcDataType, m_LastCoordIsIJPos, m_LineNum, m_LocalRotation, m_MD5_value, m_MirrorA, m_MirrorB, m_NoTrailingZeros, m_Offset, m_PartString, m_PolygonFillMode, m_PolygonFillModeState, m_PreviousPos, m_Relative, m_Scale, m_Selected_Tool, m_SwapAxis, and GERBER_LAYER::ResetDefaultValues().

Referenced by GERBER_FILE_IMAGE(), LoadGerberFile(), and EXCELLON_IMAGE::ResetDefaultValues().

◆ Set() [1/3]

bool INSPECTABLE::Set ( PROPERTY_BASE aProperty,
wxAny &  aValue 
)
inlineinherited

Definition at line 42 of file inspectable.h.

43  {
45  TYPE_ID thisType = TYPE_HASH( *this );
46  void* object = propMgr.TypeCast( this, thisType, aProperty->OwnerHash() );
47 
48  if( object )
49  aProperty->setter( object, aValue );
50 
51  return object != nullptr;
52  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
virtual void setter(void *aObject, wxAny &aValue)=0
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:62
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), PROPERTY_BASE::setter(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ Set() [2/3]

template<typename T >
bool INSPECTABLE::Set ( PROPERTY_BASE aProperty,
aValue 
)
inlineinherited

Definition at line 55 of file inspectable.h.

56  {
58  TYPE_ID thisType = TYPE_HASH( *this );
59  void* object = propMgr.TypeCast( this, thisType, aProperty->OwnerHash() );
60 
61  if( object )
62  aProperty->set<T>( object, aValue );
63 
64  return object != nullptr;
65  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:62
void set(void *aObject, T aValue)
Definition: property.h:261
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), PROPERTY_BASE::set(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ Set() [3/3]

template<typename T >
bool INSPECTABLE::Set ( const wxString &  aProperty,
aValue 
)
inlineinherited

Definition at line 68 of file inspectable.h.

69  {
71  TYPE_ID thisType = TYPE_HASH( *this );
72  PROPERTY_BASE* prop = propMgr.GetProperty( thisType, aProperty );
73  void* object = nullptr;
74 
75  if( prop )
76  {
77  object = propMgr.TypeCast( this, thisType, prop->OwnerHash() );
78 
79  if( object )
80  prop->set<T>( object, aValue );
81  }
82 
83  return object != nullptr;
84  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
PROPERTY_BASE * GetProperty(TYPE_ID aType, const wxString &aProperty) const
Return a property for a specific type.
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:62
void set(void *aObject, T aValue)
Definition: property.h:261
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_MANAGER::GetProperty(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), PROPERTY_BASE::set(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ SetBrightened()

◆ SetFlags()

void EDA_ITEM::SetFlags ( EDA_ITEM_FLAGS  aMask)
inlineinherited

Definition at line 152 of file eda_item.h.

152 { m_flags |= aMask; }
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:480

References EDA_ITEM::m_flags.

Referenced by SCH_EAGLE_PLUGIN::addBusEntries(), PCB_BASE_FRAME::AddFootprintToBoard(), FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), SCH_MOVE_TOOL::AlignElements(), PCB_CONTROL::AppendBoard(), FOOTPRINT::BuildPolyCourtyards(), SCH_EDIT_TOOL::ChangeTextType(), GRAPHICS_CLEANER::cleanupShapes(), ConvertOutlineToPolygon(), SCH_EDIT_FRAME::ConvertPart(), SCH_DRAWING_TOOLS::createNewText(), SCH_DRAWING_TOOLS::createSheetPin(), SCH_EDIT_TOOL::DoDelete(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), EDIT_TOOL::DragArcTrack(), KIGFX::SCH_PAINTER::draw(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), PCB_SELECTION_TOOL::EnterGroup(), PCB_SELECTION_TOOL::FilterCollectorForHierarchy(), SCH_MOVE_TOOL::getConnectedDragItems(), SYMBOL_EDIT_FRAME::GetSymbolFromRedoList(), SYMBOL_EDIT_FRAME::GetSymbolFromUndoList(), EE_SELECTION_TOOL::Main(), TRACKS_CLEANER::mergeCollinearSegments(), SYMBOL_EDITOR_MOVE_TOOL::moveItem(), SCH_MOVE_TOOL::moveItem(), EE_SELECTION_TOOL::narrowSelection(), KIGFX::ORIGIN_VIEWITEM::ORIGIN_VIEWITEM(), SCH_ALTIUM_PLUGIN::ParseBezier(), SCH_ALTIUM_PLUGIN::ParseBus(), SCH_ALTIUM_PLUGIN::ParseBusEntry(), SCH_ALTIUM_PLUGIN::ParseJunction(), SCH_ALTIUM_PLUGIN::ParseLabel(), SCH_ALTIUM_PLUGIN::ParseLine(), SCH_ALTIUM_PLUGIN::ParseNetLabel(), SCH_ALTIUM_PLUGIN::ParseNoERC(), SCH_ALTIUM_PLUGIN::ParsePolygon(), SCH_ALTIUM_PLUGIN::ParsePolyline(), SCH_ALTIUM_PLUGIN::ParsePort(), SCH_ALTIUM_PLUGIN::ParseRectangle(), SCH_ALTIUM_PLUGIN::ParseRoundRectangle(), SCH_ALTIUM_PLUGIN::ParseSheetSymbol(), SCH_ALTIUM_PLUGIN::ParseWire(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), SCH_EDITOR_CONTROL::Paste(), BOARD_EDITOR_CONTROL::PlaceFootprint(), PL_DRAWING_TOOLS::PlaceItem(), DRAWING_TOOL::PlaceText(), SCH_SYMBOL::Plot(), BACK_ANNOTATE::processNetNameChange(), SCH_EDIT_FRAME::PutDataInPreviousState(), PCB_SELECTION_TOOL::RebuildSelection(), FOOTPRINT::Remove(), BOARD::Remove(), SCH_EDIT_TOOL::RepeatDrawItem(), SCH_EDIT_TOOL::Rotate(), SYMBOL_EDIT_FRAME::SaveCopyInUndoList(), SCH_EDIT_FRAME::SelectUnit(), EDA_ITEM::SetBrightened(), EDA_ITEM::SetModified(), EDA_ITEM::SetSelected(), EDA_ITEM::SetWireImage(), SCH_DRAWING_TOOLS::SingleClickPlace(), SCH_LINE_WIRE_BUS_TOOL::startSegments(), DS_DATA_ITEM::SyncDrawItems(), DS_DATA_ITEM_BITMAP::SyncDrawItems(), DIALOG_DIMENSION_PROPERTIES::TransferDataFromWindow(), DIALOG_TARGET_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), and SCH_DRAWING_TOOLS::TwoClickPlace().

◆ SetForceVisible()

void EDA_ITEM::SetForceVisible ( bool  aEnable)
inlineinherited

Set and clear force visible flag used to force the item to be drawn even if it's draw attribute is set to not visible.

Parameters
aEnableTrue forces the item to be drawn. False uses the item's visibility setting to determine if the item is to be drawn.

Definition at line 203 of file eda_item.h.

203 { m_forceVisible = aEnable; }
bool m_forceVisible
Definition: eda_item.h:479

References EDA_ITEM::m_forceVisible.

Referenced by SCH_EDITOR_CONTROL::UpdateFind().

◆ SetModified()

void EDA_ITEM::SetModified ( )
inherited

◆ SetParent()

virtual void EDA_ITEM::SetParent ( EDA_ITEM aParent)
inlinevirtualinherited

Reimplemented in PCB_DIMENSION_BASE.

Definition at line 115 of file eda_item.h.

115 { m_parent = aParent; }
EDA_ITEM * m_parent
Linked list: Link (parent struct)
Definition: eda_item.h:478

References EDA_ITEM::m_parent.

Referenced by FOOTPRINT::Add(), BOARD::Add(), FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), BOARD_NETLIST_UPDATER::addNewFootprint(), SCH_SHEET::AddPin(), PAD::AddPrimitive(), PAD::AddPrimitiveArc(), PAD::AddPrimitiveCircle(), PAD::AddPrimitiveCurve(), PAD::AddPrimitivePoly(), PAD::AddPrimitiveRect(), PAD::AddPrimitiveSegment(), SYMBOL_EDITOR_CONTROL::AddSymbolToSchematic(), SCH_SCREEN::Append(), LIB_FIELD::Copy(), SYMBOL_EDIT_FRAME::CreateNewSymbol(), SCH_DRAWING_TOOLS::createNewText(), DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), PCB_EDIT_FRAME::ExchangeFootprint(), LIB_SYMBOL::Flatten(), FOOTPRINT::FOOTPRINT(), PCB_PLUGIN::FootprintSave(), DISPLAY_FOOTPRINTS_FRAME::GetFootprint(), CADSTAR_SCH_ARCHIVE_LOADER::getKiCadSchText(), LIB_SYMBOL::LIB_SYMBOL(), SCH_LEGACY_PLUGIN_CACHE::loadAliases(), CADSTAR_SCH_ARCHIVE_LOADER::loadChildSheets(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), SCH_SEXPR_PLUGIN::loadHierarchy(), SCH_LEGACY_PLUGIN::loadHierarchy(), DIALOG_LIB_EDIT_PIN_TABLE::OnAddRow(), FOOTPRINT::operator=(), LIB_SYMBOL::operator=(), PCB_PARSER::parseFOOTPRINT_unchecked(), SCH_SEXPR_PARSER::ParseSchematic(), SCH_SEXPR_PARSER::ParseSymbol(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), PCB_CONTROL::Paste(), SCH_EDITOR_CONTROL::Paste(), pasteFootprintItemsToFootprintEditor(), BOARD_EDITOR_CONTROL::PlaceFootprint(), BACK_ANNOTATE::processNetNameChange(), BOARD_COMMIT::Push(), SCH_SEXPR_PLUGIN_CACHE::removeSymbol(), SCH_LEGACY_PLUGIN_CACHE::removeSymbol(), PCB_BASE_EDIT_FRAME::SaveCopyInUndoList(), SaveCopyOfZones(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), SCH_SHEET_PIN::SCH_SHEET_PIN(), LIB_SYMBOL::SetFields(), PCB_DIMENSION_BASE::SetParent(), SCH_DRAWING_TOOLS::SingleClickPlace(), SCH_LINE_WIRE_BUS_TOOL::startSegments(), SCH_SHEET::SwapData(), SCH_GLOBALLABEL::SwapData(), SCH_SYMBOL::SwapData(), and SwapItemData().

◆ SetPosition()

◆ SetSelected()

◆ SetState()

void EDA_ITEM::SetState ( EDA_ITEM_FLAGS  type,
bool  state 
)
inlineinherited

Definition at line 141 of file eda_item.h.

142  {
143  if( state )
144  m_status |= type; // state = ON or OFF
145  else
146  m_status &= ~type;
147  }
EDA_ITEM_FLAGS m_status
Definition: eda_item.h:477

References EDA_ITEM::m_status.

Referenced by LEGACY_PLUGIN::loadTrackList(), TRACKS_CLEANER::mergeCollinearSegments(), and BOARD_ITEM::SetLocked().

◆ SetStatus()

void EDA_ITEM::SetStatus ( EDA_ITEM_FLAGS  aStatus)
inlineinherited

Definition at line 150 of file eda_item.h.

150 { m_status = aStatus; }
EDA_ITEM_FLAGS m_status
Definition: eda_item.h:477

References EDA_ITEM::m_status.

Referenced by BOARD_NETLIST_UPDATER::UpdateNetlist().

◆ SetWireImage()

void EDA_ITEM::SetWireImage ( )
inlineinherited

Definition at line 127 of file eda_item.h.

127 { SetFlags( IS_WIRE_IMAGE ); }
void SetFlags(EDA_ITEM_FLAGS aMask)
Definition: eda_item.h:152
#define IS_WIRE_IMAGE
Item to be drawn as wireframe while editing.

References IS_WIRE_IMAGE, and EDA_ITEM::SetFlags().

◆ Sort()

static bool EDA_ITEM::Sort ( const EDA_ITEM aLeft,
const EDA_ITEM aRight 
)
inlinestaticinherited

Helper function to be used by the C++ STL sort algorithm for sorting a STL container of EDA_ITEM pointers.

Parameters
aLeftThe left hand item to compare.
aRightThe right hand item to compare.
Returns
True if aLeft is less than aRight.

Definition at line 420 of file eda_item.h.

420 { return *aLeft < *aRight; }

◆ StepAndRepeatItem()

void GERBER_FILE_IMAGE::StepAndRepeatItem ( const GERBER_DRAW_ITEM aItem)

Gerber format has a command Step an Repeat.

Function StepAndRepeatItem Gerber format has a command Step an Repeat This function must be called when reading a gerber file and after creating a new gerber item that must be repeated (i.e when m_XRepeatCount or m_YRepeatCount are > 1)

This function must be called when reading a gerber file and after creating a new gerber item that must be repeated (i.e when m_XRepeatCount or m_YRepeatCount are > 1)

Parameters
aItem= the item to repeat
aItem= the item to repeat

Definition at line 296 of file gerber_file_image.cpp.

297 {
298  if( GetLayerParams().m_XRepeatCount < 2 &&
299  GetLayerParams().m_YRepeatCount < 2 )
300  return; // Nothing to repeat
301 
302  // Duplicate item:
303  for( int ii = 0; ii < GetLayerParams().m_XRepeatCount; ii++ )
304  {
305  for( int jj = 0; jj < GetLayerParams().m_YRepeatCount; jj++ )
306  {
307  // the first gerber item already exists (this is the template)
308  // create duplicate only if ii or jj > 0
309  if( jj == 0 && ii == 0 )
310  continue;
311 
312  GERBER_DRAW_ITEM* dupItem = new GERBER_DRAW_ITEM( aItem );
313  wxPoint move_vector;
314  move_vector.x = scaletoIU( ii * GetLayerParams().m_StepForRepeat.x,
315  GetLayerParams().m_StepForRepeatMetric );
316  move_vector.y = scaletoIU( jj * GetLayerParams().m_StepForRepeat.y,
317  GetLayerParams().m_StepForRepeatMetric );
318  dupItem->MoveXY( move_vector );
319  AddItemToList( dupItem );
320  }
321  }
322 }
int scaletoIU(double aCoord, bool isMetric)
Function scaletoIU converts a distance given in floating point to our internal units.
void AddItemToList(GERBER_DRAW_ITEM *aItem)
Add a new GERBER_DRAW_ITEM item to the drawings list.
void MoveXY(const wxPoint &aMoveVector)
Move this object.
GERBER_LAYER & GetLayerParams()

References AddItemToList(), GetLayerParams(), GERBER_LAYER::m_XRepeatCount, GERBER_LAYER::m_YRepeatCount, GERBER_DRAW_ITEM::MoveXY(), and scaletoIU().

Referenced by Execute_DCODE_Command(), EXCELLON_IMAGE::Execute_Drill_Command(), Execute_G_Command(), and EXCELLON_IMAGE::FinishRouteCommand().

◆ Type()

KICAD_T EDA_ITEM::Type ( ) const
inlineinherited

Returns the type of object.

This attribute should never be changed after a ctor sets it, so there is no public "setter" method.

Returns
the type of object.

Definition at line 112 of file eda_item.h.

112 { return m_structType; }
KICAD_T m_structType
Run time identification, keep private so it can never be changed after a ctor sets it.
Definition: eda_item.h:487

References EDA_ITEM::m_structType.

Referenced by KIGFX::PCB_VIEW::Add(), FOOTPRINT::Add(), CN_CONNECTIVITY_ALGO::Add(), BOARD::Add(), CN_CLUSTER::Add(), PCB_POINT_EDITOR::addCorner(), CONNECTION_SUBGRAPH::AddItem(), DRC_TEST_PROVIDER_SOLDER_MASK::addItemToRTrees(), SCH_EDIT_FRAME::AddItemToScreenAndUndoList(), SCH_LINE_WIRE_BUS_TOOL::AddJunctionsIfNeeded(), ZONE_FILLER::addKnockout(), SCH_SHEET::AddPin(), ALIGN_DISTRIBUTE_TOOL::AlignBottom(), ALIGN_DISTRIBUTE_TOOL::AlignCenterX(), ALIGN_DISTRIBUTE_TOOL::AlignCenterY(), SCH_MOVE_TOOL::AlignElements(), ALIGN_DISTRIBUTE_TOOL::AlignTop(), CN_ITEM::AnchorCount(), SCH_SCREEN::Append(), CADSTAR_SCH_ARCHIVE_LOADER::applyTextSettings(), PNS::TOPOLOGY::AssembleTuningPath(), CONNECTION_GRAPH::buildConnectionGraph(), DIALOG_NET_INSPECTOR::buildNewItem(), SCH_SCREENS::buildScreenList(), calcIsInsideArea(), BOARD_INSPECTION_TOOL::calculateSelectionRatsnest(), PCB_POINT_EDITOR::canAddCorner(), SCH_NO_CONNECT::CanConnect(), SCH_JUNCTION::CanConnect(), SCH_BUS_WIRE_ENTRY::CanConnect(), SCH_BUS_BUS_ENTRY::CanConnect(), SCH_LINE::CanConnect(), SCH_LABEL::CanConnect(), SCH_SHEET::CanConnect(), SCH_GLOBALLABEL::CanConnect(), SCH_HIERLABEL::CanConnect(), SCH_SYMBOL::CanConnect(), CN_VISITOR::checkZoneItemConnection(), SCH_MARKER::ClassOf(), SCH_JUNCTION::ClassOf(), PCB_TEXT::ClassOf(), SCH_NO_CONNECT::ClassOf(), SCH_PIN::ClassOf(), PCB_MARKER::ClassOf(), BOARD_CONNECTED_ITEM::ClassOf(), FP_SHAPE::ClassOf(), PCB_SHAPE::ClassOf(), PCB_TARGET::ClassOf(), SCH_LINE::ClassOf(), PCB_GROUP::ClassOf(), SCH_FIELD::ClassOf(), FP_TEXT::ClassOf(), SCH_SHEET::ClassOf(), NETINFO_ITEM::ClassOf(), ZONE::ClassOf(), SCH_SHEET_PIN::ClassOf(), SCH_BITMAP::ClassOf(), PCB_TRACK::ClassOf(), PAD::ClassOf(), SCH_SYMBOL::ClassOf(), FOOTPRINT::ClassOf(), SCH_SCREEN::ClassOf(), SCH_TEXT::ClassOf(), SCH_BUS_WIRE_ENTRY::ClassOf(), BOARD::ClassOf(), SCH_BUS_BUS_ENTRY::ClassOf(), PCB_ARC::ClassOf(), SCH_LABEL::ClassOf(), PCB_VIA::ClassOf(), SCH_GLOBALLABEL::ClassOf(), PCB_DIM_ALIGNED::ClassOf(), PCB_DIM_ORTHOGONAL::ClassOf(), SCH_HIERLABEL::ClassOf(), PCB_DIM_LEADER::ClassOf(), PCB_DIM_CENTER::ClassOf(), TRACKS_CLEANER::cleanup(), CONNECTION_GRAPH::collectAllDriverValues(), LIB_TEXT::compare(), LIB_FIELD::compare(), LIB_PIN::compare(), LIB_ITEM::compare(), LIB_SYMBOL::Compare(), EE_GRID_HELPER::computeAnchors(), PCB_GRID_HELPER::computeAnchors(), SCH_BUS_WIRE_ENTRY::ConnectionPropagatesTo(), SCH_LINE::ConnectionPropagatesTo(), EE_RTREE::contains(), BOARD::ConvertKIIDsToCrossReferences(), SCHEMATIC::ConvertKIIDsToRefs(), PAD_TOOL::copyPadSettings(), EDIT_TOOL::copyToClipboard(), FOOTPRINT::CoverageRatio(), BOARD_ADAPTER::createLayers(), CONVERT_TOOL::CreateLines(), PCB_BASE_FRAME::CreateNewFootprint(), SCH_DRAWING_TOOLS::createNewText(), ZONE_CREATE_HELPER::createNewZone(), CONVERT_TOOL::CreatePolys(), BOARD_ADAPTER::createTrack(), DRC_TOOL::CrossProbe(), SCH_SCREEN::DeleteItem(), DIALOG_DIMENSION_PROPERTIES::DIALOG_DIMENSION_PROPERTIES(), DIALOG_SCH_FIELD_PROPERTIES::DIALOG_SCH_FIELD_PROPERTIES(), DIALOG_TEXT_AND_LABEL_PROPERTIES::DIALOG_TEXT_AND_LABEL_PROPERTIES(), DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES(), ALIGN_DISTRIBUTE_TOOL::DistributeHorizontally(), ALIGN_DISTRIBUTE_TOOL::DistributeVertically(), ALIGN_DISTRIBUTE_TOOL::doAlignLeft(), ALIGN_DISTRIBUTE_TOOL::doAlignRight(), SCH_EDITOR_CONTROL::doCopy(), SCH_EDIT_TOOL::DoDelete(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersVertically(), ALIGN_DISTRIBUTE_TOOL::doDistributeGapsHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeGapsVertically(), APPEARANCE_CONTROLS::doesBoardItemNeedRebuild(), EDIT_TOOL::Drag(), EDIT_TOOL::DragArcTrack(), KIGFX::SCH_PAINTER::draw(), KIGFX::GERBVIEW_PAINTER::Draw(), KIGFX::PCB_PAINTER::Draw(), DRAWING_TOOL::DrawDimension(), DRAWING_TOOL::DrawVia(), CONNECTION_SUBGRAPH::driverName(), CN_ITEM::Dump(), EDIT_TOOL::Duplicate(), FOOTPRINT::DuplicateItem(), EDA_ITEM_DESC::EDA_ITEM_DESC(), SCH_EDIT_TOOL::EditField(), SCH_EDIT_TOOL::editFieldText(), SYMBOL_EDITOR_EDIT_TOOL::editTextProperties(), CONNECTION_GRAPH::ercCheckBusToBusEntryConflicts(), CONNECTION_GRAPH::ercCheckBusToNetConflicts(), CONNECTION_GRAPH::ercCheckFloatingWires(), CONNECTION_GRAPH::ercCheckLabels(), CONNECTION_GRAPH::ercCheckMultipleDrivers(), CONNECTION_GRAPH::ercCheckNoConnects(), DRC_ENGINE::EvalRules(), EDIT_TOOL::FilletTracks(), PCB_SELECTION_TOOL::FilterCollectorForFreePads(), PCB_SELECTION_TOOL::FilterCollectorForHierarchy(), PCB_SELECTION_TOOL::FilterCollectorForMarkers(), NETLIST_EXPORTER_BASE::findNextSymbol(), CADSTAR_ARCHIVE_PARSER::FixTextPositionNoAlignment(), PCB_BASE_FRAME::FocusOnItems(), EDIT_TOOL::FootprintFilter(), SCH_SEXPR_PLUGIN::Format(), SCH_LEGACY_PLUGIN::Format(), PCB_PLUGIN::Format(), PCB_PLUGIN::format(), FormatProbeItem(), FP_TEXT::FP_TEXT(), PCB_POINT_EDITOR::get45DegConstrainer(), CN_ITEM::GetAnchor(), BOARD_ITEM::GetBoard(), PCB_TRACK::GetBoundingBox(), SCH_FIELD::GetBoundingBox(), SCH_FIELD::GetCanonicalName(), KIGFX::GERBVIEW_RENDER_SETTINGS::GetColor(), KIGFX::PCB_RENDER_SETTINGS::GetColor(), SCH_MOVE_TOOL::getConnectedDragItems(), SCH_TEXT::GetConnectionPoints(), SCH_TEXT::GetContextualTextVars(), FOOTPRINT::GetCoverageArea(), CONNECTION_GRAPH::getDefaultConnection(), SCH_FIELD::GetDrawRotation(), getDrilledHoleShape(), CONNECTION_SUBGRAPH::GetDriverPriority(), SCH_TEXT::GetEndPoints(), PL_EDITOR_FRAME::GetLayoutFromRedoList(), PL_EDITOR_FRAME::GetLayoutFromUndoList(), SCH_FIELD::GetMenuImage(), getMinDist(), PCB_TRACK::GetMsgPanelInfo(), PCB_DIMENSION_BASE::GetMsgPanelInfo(), SCH_TEXT::GetMsgPanelInfo(), SCH_FIELD::GetName(), CONNECTIVITY_DATA::GetNetItems(), LIB_SYMBOL::GetNextDrawItem(), PCB_SHAPE::GetParentFootprint(), BOARD_ITEM::GetParentFootprint(), LIB_SYMBOL::GetPin(), SCH_SYMBOL::GetPinPhysicalPosition(), SCH_FIELD::GetPosition(), KIGFX::SCH_PAINTER::getRenderColor(), ALIGN_DISTRIBUTE_TOOL::GetSelections(), PCB_TRACK::GetSelectMenuText(), DRC_ENGINE::GetShape(), PCB_TEXT::GetShownText(), SCH_FIELD::GetShownText(), SCH_TEXT::GetShownText(), CONVERT_TOOL::getStartEndPoints(), getTopLevelGroup(), PCB_EXPR_TYPE_REF::GetValue(), GROUP_TOOL::Group(), PCB_SELECTION_TOOL::GuessSelectionCandidates(), hash_fp_item(), EE_SELECTION_TOOL::highlight(), PCB_SELECTION_TOOL::highlightInternal(), BOARD_INSPECTION_TOOL::HighlightItem(), BOARD_INSPECTION_TOOL::highlightNet(), highlightNet(), PCB_SELECTION_TOOL::hitTestDistance(), SCH_EDIT_TOOL::Init(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), EE_RTREE::insert(), DRC_RTREE::Insert(), insideArea(), insideBackCourtyard(), insideCourtyard(), insideFrontCourtyard(), EE_COLLECTOR::Inspect(), GENERAL_COLLECTOR::Inspect(), BOARD_INSPECTION_TOOL::InspectClearance(), BOARD_INSPECTION_TOOL::InspectConstraints(), BOARD_INSPECTION_TOOL::InspectDRCError(), ARRAY_CREATOR::Invoke(), CONNECTIVITY_DATA::IsConnectedOnLayer(), isCopper(), CN_ANCHOR::IsDangling(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingLineWireOrBus(), PNS_KICAD_IFACE::IsFlashedOnLayer(), CADSTAR_PCB_ARCHIVE_LOADER::isFootprint(), SCH_FIELD::IsHypertext(), isKeepoutZone(), DRC_ENGINE::IsNetTie(), PCB_TRACK::IsNull(), isNullAperture(), SCH_LINE::IsParallel(), isPlated(), SCH_FIELD::IsReplaceable(), PNS::ROUTER::isStartingPointRoutable(), BOARD_ITEM::IsTrack(), itemIsIncludedByFilter(), PCB_SELECTION_TOOL::itemPassesFilter(), CLIPBOARD_IO::Load(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), CADSTAR_SCH_ARCHIVE_LOADER::loadHierarchicalSheetPins(), CADSTAR_SCH_ARCHIVE_LOADER::loadNets(), SYMBOL_EDITOR_MOVE_TOOL::Main(), SCH_MOVE_TOOL::Main(), EE_SELECTION_TOOL::Main(), EDIT_POINTS_FACTORY::Make(), NETLIST_EXPORTER_XML::makeListOfNets(), PCB_POINT_EDITOR::makePoints(), CONVERT_TOOL::makePolysFromSegs(), SCH_SCREEN::MarkConnections(), CN_CONNECTIVITY_ALGO::markItemNetAsDirty(), CONNECTIVITY_DATA::MarkItemNetAsDirty(), SCH_FIELD::Matches(), memberOf(), SCH_LINE::MergeOverlap(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), SCH_MOVE_TOOL::moveItem(), SCH_EDITOR_CONTROL::nextMatch(), FOOTPRINT_EDIT_FRAME::OnEditItemRequest(), PCB_EDIT_FRAME::OnEditItemRequest(), EDA_3D_CANVAS::OnMouseMove(), PCB_POINT_EDITOR::OnSelectionChange(), PCB_SHAPE::cmp_drawings::operator()(), PCB_TRACK::cmp_tracks::operator()(), CN_VISITOR::operator()(), BOARD_ITEM::ptr_cmp::operator()(), FOOTPRINT::cmp_drawings::operator()(), BOARD::cmp_items::operator()(), BOARD::cmp_drawings::operator()(), SCH_BUS_ENTRY_BASE::operator<(), SCH_JUNCTION::operator<(), SCH_TEXT::operator<(), SCH_FIELD::operator<(), LIB_ITEM::operator<(), SCH_LINE::operator<(), SCH_SHEET::operator<(), SCH_ITEM::operator<(), SCH_SYMBOL::operator<(), SCH_BITMAP::operator=(), SCH_SHEET::operator=(), SCH_SYMBOL::operator=(), LIB_ITEM::operator==(), PAD::PAD(), EDIT_TOOL::PadFilter(), BOARD_EDITOR_CONTROL::PageSettings(), BOARD_COMMIT::parentObject(), PCB_CONTROL::Paste(), SCH_EDITOR_CONTROL::Paste(), DRAWING_TOOL::PlaceImportedGraphics(), SCH_FIELD::Plot(), SCH_SCREEN::Plot(), BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), POSITION_RELATIVE_TOOL::PositionRelative(), SCH_FIELD::Print(), SCH_SCREEN::Print(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::processItem(), BACK_ANNOTATE::processNetNameChange(), CONNECTION_GRAPH::processSubGraphs(), SYMBOL_EDITOR_EDIT_TOOL::Properties(), SCH_EDIT_TOOL::Properties(), BOARD_COMMIT::Push(), PCB_BASE_EDIT_FRAME::PutDataInPreviousState(), PCB_GRID_HELPER::queryVisible(), BOARD_REANNOTATE_TOOL::ReannotateDuplicates(), SCH_CONNECTION::recacheName(), SCH_BASE_FRAME::RefreshSelection(), KIGFX::PCB_VIEW::Remove(), EE_RTREE::remove(), FOOTPRINT::Remove(), CN_CONNECTIVITY_ALGO::Remove(), SCH_SCREEN::Remove(), BOARD::Remove(), PCB_POINT_EDITOR::removeCorner(), PCB_POINT_EDITOR::removeCornerCondition(), LIB_SYMBOL::RemoveDrawItem(), SCH_SHEET::RemovePin(), SCH_EDIT_TOOL::RepeatDrawItem(), SCH_FIELD::Replace(), SCH_EDITOR_CONTROL::ReplaceAll(), PCB_SELECTION_TOOL::RequestSelection(), SCHEMATIC::ResolveCrossReference(), PCB_PARSER::resolveGroups(), DS_PROXY_UNDO_ITEM::Restore(), PL_EDITOR_FRAME::RollbackFromUndo(), SCH_EDIT_TOOL::Rotate(), DRC_TEST_PROVIDER_TEXT_DIMS::Run(), DRC_TEST_PROVIDER_PHYSICAL_CLEARANCE::Run(), DRC_TEST_PROVIDER_MATCHED_LENGTH::runInternal(), PCB_BASE_EDIT_FRAME::SaveCopyInUndoList(), EE_TOOL_BASE< SCH_BASE_FRAME >::saveCopyInUndoList(), SCH_SEXPR_PLUGIN::saveField(), SCH_SEXPR_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_SEXPR_PLUGIN_CACHE::savePin(), SCH_LEGACY_PLUGIN_CACHE::savePin(), CLIPBOARD_IO::SaveSelection(), SCH_SEXPR_PLUGIN_CACHE::saveSymbolDrawItem(), SCH_SEXPR_PLUGIN::saveText(), SCH_SEXPR_PLUGIN_CACHE::saveText(), SCH_LEGACY_PLUGIN_CACHE::saveText(), SCH_SCREEN::Schematic(), SCH_ITEM::Schematic(), CONVERT_TOOL::SegmentToArc(), PCB_SELECTION_TOOL::select(), PCB_SELECTION_TOOL::Selectable(), EE_SELECTION_TOOL::Selectable(), PCB_SELECTION_TOOL::selectConnectedTracks(), PCB_SELECTION_TOOL::selectSameSheet(), PCB_POINT_EDITOR::setAltConstraint(), SCH_FIELD::SetId(), ITEM_PICKER::SetItem(), SCH_FIELD::SetPosition(), DIALOG_TEXT_AND_LABEL_PROPERTIES::SetTitle(), PCB_EDIT_FRAME::SetTrackSegmentWidth(), BOARD_COMMIT::Stage(), SCH_JUNCTION::SwapData(), SCH_NO_CONNECT::SwapData(), SCH_BITMAP::SwapData(), PCB_TARGET::SwapData(), SCH_SHEET_PIN::SwapData(), SCH_FIELD::SwapData(), PCB_GROUP::SwapData(), PCB_TEXT::SwapData(), PCB_TRACK::SwapData(), SCH_SHEET::SwapData(), PCB_ARC::SwapData(), PCB_DIM_ALIGNED::SwapData(), PCB_DIM_ORTHOGONAL::SwapData(), SCH_SYMBOL::SwapData(), PCB_VIA::SwapData(), PCB_DIM_LEADER::SwapData(), PCB_DIM_CENTER::SwapData(), PAD::SwapData(), FOOTPRINT::SwapData(), ZONE::SwapData(), SwapItemData(), DRC_TEST_PROVIDER_PHYSICAL_CLEARANCE::testItemAgainstItem(), DRC_TEST_PROVIDER_PHYSICAL_CLEARANCE::testItemAgainstZones(), DRC_TEST_PROVIDER_COPPER_CLEARANCE::testItemAgainstZones(), DRC_TEST_PROVIDER_SOLDER_MASK::testMaskItemAgainstZones(), ERC_TESTER::TestMultUnitPinConflicts(), DRC_TEST_PROVIDER_COPPER_CLEARANCE::testPadAgainstItem(), ERC_TESTER::TestPinToPin(), ERC_TESTER::TestSimilarLabels(), DRC_TEST_PROVIDER_COPPER_CLEARANCE::testTrackAgainstItem(), CONNECTIVITY_DATA::TestTrackEndpointDangling(), DIALOG_TEXT_AND_LABEL_PROPERTIES::TransferDataFromWindow(), DIALOG_DIMENSION_PROPERTIES::TransferDataToWindow(), DIALOG_SYMBOL_FIELDS_TABLE::TransferDataToWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_TEXT_AND_LABEL_PROPERTIES::TransferDataToWindow(), PCB_TRACK::TransformShapeWithClearanceToPolygon(), SCH_LINE_WIRE_BUS_TOOL::TrimOverLappingWires(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), EE_SELECTION_TOOL::unhighlight(), PCB_SELECTION_TOOL::unhighlightInternal(), KIGFX::PCB_VIEW::Update(), SCH_TEXT::UpdateDanglingState(), DIALOG_DIMENSION_PROPERTIES::updateDimensionFromDialog(), DIALOG_SCH_FIELD_PROPERTIES::UpdateField(), PL_POINT_EDITOR::updateItem(), PCB_POINT_EDITOR::updateItem(), EE_TOOL_BASE< SCH_BASE_FRAME >::updateItem(), SCH_BASE_FRAME::UpdateItem(), CONNECTION_GRAPH::updateItemConnectivity(), SCH_EDITOR_CONTROL::UpdateNetHighlighting(), EE_POINT_EDITOR::updateParentItem(), SCH_EDITOR_CONTROL::updatePastedSheet(), EE_POINT_EDITOR::updatePoints(), PL_POINT_EDITOR::updatePoints(), PCB_POINT_EDITOR::updatePoints(), SCH_BUS_ENTRY_BASE::ViewGetLayers(), PCB_GROUP::Visit(), PCB_TRACK::Visit(), GERBER_DRAW_ITEM::Visit(), SCH_GLOBALLABEL::Visit(), SCH_SHEET::Visit(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem(), and NETLIST_EXPORTER_CADSTAR::writeListOfNets().

◆ ViewBBox()

const BOX2I EDA_ITEM::ViewBBox ( ) const
overridevirtualinherited

Return the bounding box of the item covering all its layers.

Returns
the current bounding box.

Implements KIGFX::VIEW_ITEM.

Reimplemented in PAD, FOOTPRINT, PCB_DIM_CENTER, EDIT_POINTS, PCB_DIMENSION_BASE, GERBER_DRAW_ITEM, FP_TEXT, PCB_TRACK, PCB_SHAPE, DS_PROXY_VIEW_ITEM, PCB_MARKER, ROUTER_PREVIEW_ITEM, MY_DRAWING, KIGFX::ORIGIN_VIEWITEM, KIGFX::PREVIEW::TWO_POINT_ASSISTANT, KIGFX::PREVIEW::CENTRELINE_RECT_ITEM, KIGFX::PREVIEW::SELECTION_AREA, KIGFX::PREVIEW::POLYGON_ITEM, KIGFX::PREVIEW::RULER_ITEM, RATSNEST_VIEW_ITEM, and KIGFX::PREVIEW::ARC_ASSISTANT.

Definition at line 257 of file eda_item.cpp.

258 {
259  // Basic fallback
260  EDA_RECT bbox = GetBoundingBox();
261 
262  return BOX2I( bbox.GetOrigin(), bbox.GetSize() );
263 }
BOX2< VECTOR2I > BOX2I
Definition: box2.h:506
const wxPoint GetOrigin() const
Definition: eda_rect.h:110
Handle the component boundary box.
Definition: eda_rect.h:42
virtual const EDA_RECT GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
Definition: eda_item.cpp:75
const wxSize GetSize() const
Definition: eda_rect.h:100

References EDA_ITEM::GetBoundingBox(), EDA_RECT::GetOrigin(), and EDA_RECT::GetSize().

Referenced by GERBVIEW_FRAME::GetDocumentExtents(), PCB_SHAPE::ViewBBox(), and PCB_DIMENSION_BASE::ViewBBox().

◆ ViewDraw()

virtual void KIGFX::VIEW_ITEM::ViewDraw ( int  aLayer,
VIEW aView 
) const
inlinevirtualinherited

Draw the parts of the object belonging to layer aLayer.

An alternative way for drawing objects if there is no #PAINTER assigned for the view or if the PAINTER doesn't know how to paint this particular implementation of VIEW_ITEM. The preferred way of drawing is to design an appropriate PAINTER object, the method below is intended only for quick hacks and debugging purposes.

Parameters
aLayeris the current drawing layer.
aViewis a pointer to the VIEW device we are drawing on.

Reimplemented in EDIT_POINTS, DS_PROXY_VIEW_ITEM, ROUTER_PREVIEW_ITEM, KIGFX::PREVIEW::SELECTION_AREA, KIGFX::VIEW_GROUP, MY_DRAWING, KIGFX::VIEW_OVERLAY, KIGFX::PREVIEW::SIMPLE_OVERLAY_ITEM, KIGFX::PREVIEW::TWO_POINT_ASSISTANT, KIGFX::ORIGIN_VIEWITEM, KIGFX::PREVIEW::ARC_ASSISTANT, KIGFX::PREVIEW::RULER_ITEM, and RATSNEST_VIEW_ITEM.

Definition at line 106 of file view_item.h.

107  {}

Referenced by KIGFX::VIEW::draw(), and KIGFX::VIEW::updateItemGeometry().

◆ ViewGetLayers()

void EDA_ITEM::ViewGetLayers ( int  aLayers[],
int &  aCount 
) const
overridevirtualinherited

Return the all the layers within the VIEW the object is painted on.

For instance, a PAD spans zero or more copper layers and a few technical layers. ViewDraw() or PAINTER::Draw() is repeatedly called for each of the layers returned by ViewGetLayers(), depending on the rendering order.

Parameters
aLayers[]is the output layer index array.
aCountis the number of layer indices in aLayers[].

Implements KIGFX::VIEW_ITEM.

Reimplemented in PAD, FOOTPRINT, EDIT_POINTS, PCB_VIA, SCH_SHEET, BOARD_ITEM, SCH_ITEM, GERBER_DRAW_ITEM, SCH_TEXT, FP_TEXT, PCB_TRACK, LIB_SYMBOL, MY_DRAWING, ZONE, LIB_PIN, LIB_ITEM, PCB_GROUP, SCH_LINE, SCH_SYMBOL, LIB_FIELD, DS_PROXY_VIEW_ITEM, PCB_MARKER, SCH_BITMAP, ROUTER_PREVIEW_ITEM, SCH_BUS_ENTRY_BASE, SCH_JUNCTION, SCH_PIN, SCH_NO_CONNECT, DS_DRAW_ITEM_BASE, KIGFX::PREVIEW::SIMPLE_OVERLAY_ITEM, KIGFX::ORIGIN_VIEWITEM, LIB_TEXT, KIGFX::PREVIEW::TWO_POINT_ASSISTANT, SCH_MARKER, RATSNEST_VIEW_ITEM, KIGFX::PREVIEW::RULER_ITEM, and KIGFX::PREVIEW::ARC_ASSISTANT.

Definition at line 266 of file eda_item.cpp.

267 {
268  // Basic fallback
269  aCount = 1;
270  aLayers[0] = 0;
271 }

◆ ViewGetLOD()

virtual double KIGFX::VIEW_ITEM::ViewGetLOD ( int  aLayer,
VIEW aView 
) const
inlinevirtualinherited

Return the level of detail (LOD) of the item.

A level of detail is the minimal VIEW scale that is sufficient for an item to be shown on a given layer.

Parameters
aLayeris the current drawing layer.
aViewis a pointer to the VIEW device we are drawing on.
Returns
the level of detail. 0 always show the item, because the actual zoom level (or VIEW scale) is always > 0

Reimplemented in FP_ZONE, PAD, FOOTPRINT, PCB_VIA, GERBER_DRAW_ITEM, FP_TEXT, PCB_TRACK, ZONE, PCB_GROUP, and FP_SHAPE.

Definition at line 132 of file view_item.h.

133  {
134  // By default always show the item
135  return 0.0;
136  }

Referenced by PNS_KICAD_IFACE::IsItemVisible(), KIGFX::VIEW::DRAW_ITEM_VISITOR::operator()(), EE_GRID_HELPER::queryVisible(), PCB_GRID_HELPER::queryVisible(), and PCB_SELECTION_TOOL::Selectable().

◆ viewPrivData()

◆ Visit()

SEARCH_RESULT GERBER_FILE_IMAGE::Visit ( INSPECTOR  inspector,
void *  testData,
const KICAD_T  scanTypes[] 
)
overridevirtual

May be re-implemented for each derived class in order to handle all the types given by its member data.

Implementations should call inspector->Inspect() on types in scanTypes[], and may use IterateForward() to do so on lists of such data.

Parameters
inspectorAn INSPECTOR instance to use in the inspection.
testDataArbitrary data used by the inspector.
scanTypesWhich# KICAD_T types are of interest and the order is significant too, terminated by EOT.
Returns
SEARCH_RESULT SEARCH_QUIT if the Iterator is to stop the scan, else #SCAN_CONTINUE, and determined by the inspector.

Reimplemented from EDA_ITEM.

Definition at line 405 of file gerber_file_image.cpp.

406 {
407  KICAD_T stype;
409  const KICAD_T* p = scanTypes;
410  bool done = false;
411 
412  while( !done )
413  {
414  stype = *p;
415 
416  switch( stype )
417  {
418  case GERBER_IMAGE_T:
419  case GERBER_LAYOUT_T:
420  ++p;
421  break;
422 
423  case GERBER_DRAW_ITEM_T:
424  result = IterateForward( GetItems(), inspector, testData, p );
425  ++p;
426  break;
427 
428  case EOT:
429  default: // catch EOT or ANY OTHER type here and return.
430  done = true;
431  break;
432  }
433 
434  if( result == SEARCH_RESULT::QUIT )
435  break;
436  }
437 
438  return result;
439 }
GERBER_DRAW_ITEMS & GetItems()
search types array terminator (End Of Types)
Definition: typeinfo.h:81
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:77
static SEARCH_RESULT IterateForward(std::deque< T > &aList, INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
This changes first parameter to avoid the DList and use the main queue instead.
Definition: eda_item.h:294
SEARCH_RESULT
Definition: eda_item.h:41

References CONTINUE, EOT, GERBER_DRAW_ITEM_T, GERBER_IMAGE_T, GERBER_LAYOUT_T, GetItems(), EDA_ITEM::IterateForward(), and QUIT.

Referenced by GBR_LAYOUT::Visit().

Member Data Documentation

◆ m_360Arc_enbl

bool GERBER_FILE_IMAGE::m_360Arc_enbl

◆ m_AperFunction

wxString GERBER_FILE_IMAGE::m_AperFunction

◆ m_Aperture_List

D_CODE* GERBER_FILE_IMAGE::m_Aperture_List[TOOLS_MAX_COUNT]

< Dcode (Aperture) List for this layer (max TOOLS_MAX_COUNT: see dcode.h)

Whether an aperture macro tool is flashed on or off.

Definition at line 464 of file gerber_file_image.h.

Referenced by GERBER_FILE_IMAGE(), GetDCODE(), GetDCODEOrCreate(), GetDcodesCount(), InitToolTable(), and ~GERBER_FILE_IMAGE().

◆ m_aperture_macros

APERTURE_MACRO_SET GERBER_FILE_IMAGE::m_aperture_macros

Definition at line 452 of file gerber_file_image.h.

Referenced by FindApertureMacro(), InitToolTable(), and ReadApertureMacro().

◆ m_ArcRadius

int GERBER_FILE_IMAGE::m_ArcRadius

Identifier for arc data type (IJ (center) or A## (radius)).

Definition at line 426 of file gerber_file_image.h.

Referenced by EXCELLON_IMAGE::Execute_Drill_Command(), EXCELLON_IMAGE::Execute_EXCELLON_G_Command(), ReadXYCoord(), and ResetDefaultValues().

◆ m_AsArcG74G75Cmd

bool GERBER_FILE_IMAGE::m_AsArcG74G75Cmd

◆ m_CommandState

int GERBER_FILE_IMAGE::m_CommandState

Definition at line 414 of file gerber_file_image.h.

Referenced by LoadGerberFile(), ReadRS274XCommand(), and ResetDefaultValues().

◆ m_ComponentsList

std::map<wxString, int> GERBER_FILE_IMAGE::m_ComponentsList

◆ m_Current_File

FILE* GERBER_FILE_IMAGE::m_Current_File

◆ m_Current_Tool

◆ m_CurrentPos

◆ m_drawings

GERBER_DRAW_ITEMS GERBER_FILE_IMAGE::m_drawings

◆ m_Exposure

bool GERBER_FILE_IMAGE::m_Exposure

◆ m_FileFunction

◆ m_FileName

◆ m_flags