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...
 
VECTOR2I ReadXYCoord (char *&aText, bool aExcellonMode=false)
 Return the current coordinate type pointed to by XnnYnn Text (XnnnnYmmmm). More...
 
VECTOR2I 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...
 
INSPECT_RESULT Visit (INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &aScanTypes) 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
 
bool IsRollover () 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 RenderAsBitmap (double aWorldScale) const
 
void SetIsShownAsBitmap (bool aBitmap)
 
bool IsShownAsBitmap () const
 
virtual bool IsType (const std::vector< 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 VECTOR2I &aPosition, int aAccuracy=0) const
 Test if aPosition is inside or on the boundary of this item. More...
 
virtual bool HitTest (const BOX2I &aRect, bool aContained, int aAccuracy=0) const
 Test if aRect intersects this item. More...
 
virtual const BOX2I GetBoundingBox () const
 Return the orthogonal bounding box of this object for display purposes. More...
 
virtual VECTOR2I GetPosition () const
 
virtual void SetPosition (const VECTOR2I &aPos)
 
virtual const VECTOR2I GetFocusPosition () const
 Similar to GetPosition, but allows items to return their visual center rather than their anchor. More...
 
virtual VECTOR2I GetSortPosition () const
 Return the coordinates that should be used for sorting this element visually compared to other elements. More...
 
virtual EDA_ITEMClone () const
 Create a duplicate of this item with linked list members set to NULL. More...
 
wxString GetTypeDesc ()
 Return a translated description of the type for this EDA_ITEM for display in user facing messages. More...
 
virtual wxString GetSelectMenuText (UNITS_PROVIDER *aUnitsProvider) 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 EDA_SEARCH_DATA &aSearchData, void *aAuxData) const
 Compare the item against the search criteria in aSearchData. More...
 
virtual bool Replace (const EDA_SEARCH_DATA &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) const
 
template<typename T >
Get (PROPERTY_BASE *aProperty) const
 
template<typename T >
std::optional< T > Get (const wxString &aProperty) const
 

Static Public Member Functions

static bool TestFileIsRS274 (const wxString &aFullFileName)
 Performs a heuristics-based check of whether the file is an RS274 gerber file. More...
 
template<class T >
static INSPECT_RESULT IterateForward (std::deque< T > &aList, INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &scanTypes)
 This changes first parameter to avoid the DList and use the main queue instead. More...
 
template<class T >
static INSPECT_RESULT IterateForward (std::vector< T > &aList, INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &scanTypes)
 Change first parameter to avoid the DList and use std::vector instead. More...
 
static bool Replace (const EDA_SEARCH_DATA &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
 true if this image is currently in use (a file is loaded in it) false if it must be not drawn More...
 
COLOR4D m_PositiveDrawColor
 The color used to draw positive items. More...
 
wxString m_FileName
 Full File Name for this layer. More...
 
wxString m_ImageName
 Image name, from IN <name>* command. More...
 
bool m_IsX2_file
 True if a X2 gerber attribute was found in file. More...
 
X2_ATTRIBUTE_FILEFUNCTIONm_FileFunction
 file function parameters, found in a TF command or a G04 More...
 
wxString m_MD5_value
 MD5 value found in a TF.MD5 command. More...
 
wxString m_PartString
 string found in a TF.Part command More...
 
int m_GraphicLayer
 Graphic layer Number. More...
 
bool m_ImageNegative
 true = Negative image More...
 
bool m_ImageJustifyXCenter
 Image Justify Center on X axis (default = false) More...
 
bool m_ImageJustifyYCenter
 Image Justify Center on Y axis (default = false) More...
 
VECTOR2I m_ImageJustifyOffset
 Image Justify Offset on XY axis (default = 0,0) More...
 
bool m_GerbMetric
 false = Inches, true = metric More...
 
bool m_Relative
 false = absolute Coord, true = relative Coord. More...
 
bool m_NoTrailingZeros
 true: remove tailing zeros. More...
 
VECTOR2I m_ImageOffset
 Coord Offset, from IO command. More...
 
wxSize m_FmtScale
 Fmt 2.3: m_FmtScale = 3, fmt 3.4: m_FmtScale = 4. More...
 
wxSize m_FmtLen
 Nb chars per coord. ex fmt 2.3, m_FmtLen = 5. More...
 
int m_ImageRotation
 Image rotation (0, 90, 180, 270 only) in degrees. More...
 
double m_LocalRotation
 Local rotation added to m_ImageRotation. More...
 
VECTOR2I m_Offset
 Coord Offset, from OF command. More...
 
VECTOR2I m_Scale
 scale (X and Y) of layer. More...
 
bool m_SwapAxis
 false if A = X and B = Y (default); true if A = Y, B = X More...
 
bool m_MirrorA
 true: mirror / axis A (X) More...
 
bool m_MirrorB
 true: mirror / axis B (Y) More...
 
int m_Iterpolation
 Linear, 90 arc, Circ. More...
 
int m_Current_Tool
 Current Tool (Dcode) number selected. More...
 
int m_Last_Pen_Command
 Current or last pen state (0..9, set by Dn option with n < 10. More...
 
int m_CommandState
 state of gerber analysis command More...
 
int m_LineNum
 Line number of the gerber file while reading. More...
 
VECTOR2I m_CurrentPos
 current specified coord for plot More...
 
VECTOR2I m_PreviousPos
 old current specified coord for plot More...
 
VECTOR2I m_IJPos
 IJ coord (for arcs & circles ) More...
 
bool m_LastCoordIsIJPos
 A value ( = radius in circular routing in Excellon files ). 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 EDA_SEARCH_DATA &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...
 
KICAD_T m_structType
 Run time identification, keep private so it can never be changed after a ctor sets it. More...
 
VIEW_ITEM_DATA * m_viewPrivData
 

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 82 of file gerber_file_image.cpp.

82 :
83 EDA_ITEM( nullptr, GERBER_IMAGE_T )
84{
85 m_GraphicLayer = aLayer; // Graphic layer Number
86 m_PositiveDrawColor = WHITE; // The color used to draw positive items for this image
87
89 m_FileFunction = nullptr; // file function parameters
90
92
93 for( unsigned ii = 0; ii < arrayDim( m_Aperture_List ); ii++ )
94 m_Aperture_List[ii] = nullptr;
95}
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:36
X2_ATTRIBUTE_FILEFUNCTION * m_FileFunction
file function parameters, found in a TF command or a G04
virtual void ResetDefaultValues()
Set all parameters to a default value, before reading a file.
COLOR4D m_PositiveDrawColor
The color used to draw positive items.
D_CODE * m_Aperture_List[TOOLS_MAX_COUNT]
< Dcode (Aperture) List for this layer (max TOOLS_MAX_COUNT: see dcode.h)
int m_GraphicLayer
Graphic layer Number.
@ WHITE
Definition: color4d.h:48
@ GERBER_IMAGE_T
Definition: typeinfo.h:215

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

◆ ~GERBER_FILE_IMAGE()

GERBER_FILE_IMAGE::~GERBER_FILE_IMAGE ( )
virtual

Definition at line 98 of file gerber_file_image.cpp.

99{
100 for( GERBER_DRAW_ITEM* item : GetItems() )
101 delete item;
102
103 m_drawings.clear();
104
105 for( unsigned ii = 0; ii < arrayDim( m_Aperture_List ); ii++ )
106 delete m_Aperture_List[ii];
107
108 delete m_FileFunction;
109}
GERBER_DRAW_ITEMS m_drawings
GERBER_DRAW_ITEMS & GetItems()

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 170 of file gerber_file_image.h.

171 {
172 m_drawings.push_back( aItem );
173 }

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

Definition at line 122 of file eda_item.h.

void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:143
#define BRIGHTENED
item is drawn with a bright contour

References BRIGHTENED, and EDA_ITEM::ClearFlags().

Referenced by SCH_EDIT_FRAME::FocusOnItem(), PCB_BASE_FRAME::FocusOnItems(), EE_SELECTION_TOOL::unhighlight(), PL_SELECTION_TOOL::unhighlight(), PCB_SELECTION_TOOL::unhighlightInternal(), and SCH_EDITOR_CONTROL::UpdateNetHighlighting().

◆ ClearEditFlags()

◆ ClearFlags()

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

Definition at line 143 of file eda_item.h.

143{ m_flags &= ~aMask; }
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:498

References EDA_ITEM::m_flags.

Referenced by FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), PNS_KICAD_IFACE::AddItem(), SCH_EDIT_FRAME::AddItemToScreenAndUndoList(), SCH_MOVE_TOOL::AlignElements(), FOOTPRINT::BuildCourtyardCaches(), 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(), SCH_ITEM::Duplicate(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), PCB_EDIT_FRAME::ExchangeFootprint(), PCB_SELECTION_TOOL::ExitGroup(), SYMBOL_EDIT_FRAME::GetSymbolFromRedoList(), SYMBOL_EDIT_FRAME::GetSymbolFromUndoList(), FOOTPRINT_EDITOR_CONTROL::ImportFootprint(), DRC_TEST_PROVIDER_COURTYARD_CLEARANCE_ON_MOVE::Init(), EE_COLLECTOR::Inspect(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromLibrary(), FOOTPRINT_EDITOR_CONTROL::NewFootprint(), DIALOG_SYMBOL_PROPERTIES::OnUnitChoice(), FOOTPRINT_EDIT_FRAME::OpenProjectFiles(), PCB_BASE_FRAME::PlaceFootprint(), SYMBOL_EDITOR_PIN_TOOL::PlacePin(), BOARD_COMMIT::Push(), PCB_SELECTION_TOOL::RebuildSelection(), PAD_TOOL::RecombinePad(), SCH_EDIT_TOOL::RepeatDrawItem(), SYMBOL_EDIT_FRAME::RollbackSymbolFromUndo(), DRC_TEST_PROVIDER_DISALLOW::Run(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), SCH_SEXPR_PLUGIN_CACHE::savePin(), SCH_EDIT_FRAME::SelectUnit(), EDA_ITEM::SetIsShownAsBitmap(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), SCH_DRAWING_TOOLS::TwoClickPlace(), and EE_SELECTION_TOOL::unhighlight().

◆ ClearMessageList()

void GERBER_FILE_IMAGE::ClearMessageList ( )
inline

Clear the message list.

Call it before reading a Gerber file

Definition at line 202 of file gerber_file_image.h.

203 {
204 m_messagesList.Clear();
205 }

References m_messagesList.

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

◆ ClearSelected()

◆ ClearTempFlags()

void EDA_ITEM::ClearTempFlags ( )
inlineinherited

Definition at line 155 of file eda_item.h.

156 {
158 }
#define IS_LINKED
Used in calculation to mark linked items (temporary use)
#define SELECTED_BY_DRAG
Item was algorithmically selected as a dragged item.
#define DO_NOT_DRAW
Used to disable draw function.
#define SKIP_STRUCT
flag indicating that the structure should be ignored
#define CANDIDATE
flag indicating that the structure is connected

References CANDIDATE, EDA_ITEM::ClearFlags(), DO_NOT_DRAW, IS_LINKED, SELECTED_BY_DRAG, and SKIP_STRUCT.

Referenced by PCB_EDIT_FRAME::OpenProjectFiles(), and 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 LIB_FIELD, LIB_PIN, LIB_SHAPE, LIB_TEXT, LIB_TEXTBOX, SCH_BITMAP, SCH_BUS_WIRE_ENTRY, SCH_BUS_BUS_ENTRY, SCH_FIELD, SCH_JUNCTION, SCH_LABEL, SCH_DIRECTIVE_LABEL, SCH_GLOBALLABEL, SCH_HIERLABEL, SCH_LINE, SCH_MARKER, SCH_NO_CONNECT, SCH_PIN, SCH_SHAPE, SCH_SHEET, SCH_SHEET_PIN, SCH_SYMBOL, SCH_TEXT, SCH_TEXTBOX, KIGFX::ORIGIN_VIEWITEM, PCB_GROUP, FOOTPRINT, FP_SHAPE, FP_TEXT, FP_TEXTBOX, NETINFO_ITEM, PAD, PCB_BITMAP, PCB_DIM_ALIGNED, PCB_DIM_ORTHOGONAL, PCB_DIM_RADIAL, PCB_DIM_LEADER, PCB_DIM_CENTER, PCB_MARKER, PCB_SHAPE, PCB_TARGET, PCB_TEXT, PCB_TEXTBOX, PCB_TRACK, PCB_ARC, PCB_VIA, ZONE, and FP_ZONE.

Definition at line 82 of file eda_item.cpp.

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

References EDA_ITEM::GetClass().

Referenced by SCH_EDIT_FRAME::AddCopyForRepeatItem(), DIALOG_DIMENSION_PROPERTIES::DIALOG_DIMENSION_PROPERTIES(), BOARD_ITEM::Duplicate(), SCH_ITEM::Duplicate(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), PCB_DIMENSION_BASE::GetEffectiveShape(), LIB_SYMBOL::LIB_SYMBOL(), new_clone(), LIB_SYMBOL::operator=(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), SCH_LIB_PLUGIN_CACHE::removeSymbol(), PCB_BASE_EDIT_FRAME::saveCopyInUndoList(), CLIPBOARD_IO::SaveSelection(), LIB_SYMBOL::SetConversion(), LIB_SYMBOL::SetUnitCount(), SCH_DRAWING_TOOLS::SingleClickPlace(), COMMIT::Stage(), SCH_DRAWING_TOOLS::TwoClickPlace(), and SYMBOL_EDITOR_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 401 of file rs274d.cpp.

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

Definition at line 314 of file gerber_file_image.cpp.

315{
316 wxString msg;
317
318 aMainFrame->ClearMsgPanel();
319
320 // Display the Gerber variant (X1 / X2
321 aMainFrame->AppendMsgPanel( _( "Format" ), m_IsX2_file ? wxT( "X2" ) : wxT( "X1" ) );
322
323 // Display Image name (Image specific). IM command (Image Name) is deprecated
324 // So non empty image name is very rare, probably never found
325 if( !m_ImageName.IsEmpty() )
326 aMainFrame->AppendMsgPanel( _( "Image name" ), m_ImageName );
327
328 // Display graphic layer number used to draw this Image
329 // (not a Gerber parameter but is also image specific)
330 msg.Printf( wxT( "%d" ), m_GraphicLayer + 1 );
331 aMainFrame->AppendMsgPanel( _( "Graphic layer" ), msg );
332
333 // Display Image rotation (Image specific)
334 msg.Printf( wxT( "%d" ), m_ImageRotation );
335 aMainFrame->AppendMsgPanel( _( "Img Rot." ), msg );
336
337 // Display Image polarity (Image specific)
338 msg = m_ImageNegative ? _("Negative") : _("Normal");
339 aMainFrame->AppendMsgPanel( _( "Polarity" ), msg );
340
341 // Display Image justification and offset for justification (Image specific)
342 msg = m_ImageJustifyXCenter ? _("Center") : _("Normal");
343 aMainFrame->AppendMsgPanel( _( "X Justify" ), msg );
344
345 msg = m_ImageJustifyYCenter ? _("Center") : _("Normal");
346 aMainFrame->AppendMsgPanel( _( "Y Justify" ), msg );
347
348 msg.Printf( wxT( "X=%s Y=%s" ),
351
352 aMainFrame->AppendMsgPanel( _( "Image Justify Offset" ), msg );
353}
virtual void ClearMsgPanel()
Clear all messages from the message panel.
void AppendMsgPanel(const wxString &aTextUpper, const wxString &aTextLower, int aPadding=6)
Append a message to the message panel.
bool m_ImageJustifyXCenter
Image Justify Center on X axis (default = false)
bool m_ImageJustifyYCenter
Image Justify Center on Y axis (default = false)
bool m_ImageNegative
true = Negative image
wxString m_ImageName
Image name, from IN <name>* command.
bool m_IsX2_file
True if a X2 gerber attribute was found in file.
int m_ImageRotation
Image rotation (0, 90, 180, 270 only) in degrees.
VECTOR2I m_ImageJustifyOffset
Image Justify Offset on XY axis (default = 0,0)
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
A lower-precision version of StringFromValue().

References _, EDA_DRAW_FRAME::AppendMsgPanel(), EDA_DRAW_FRAME::ClearMsgPanel(), m_GraphicLayer, m_ImageJustifyOffset, m_ImageJustifyXCenter, m_ImageJustifyYCenter, m_ImageName, m_ImageNegative, m_ImageRotation, m_IsX2_file, UNITS_PROVIDER::MessageTextFromValue(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by GERBVIEW_FRAME::UpdateTitleAndInfo().

◆ Execute_DCODE_Command()

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

Definition at line 557 of file rs274d.cpp.

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

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 421 of file rs274d.cpp.

422{
423 switch( G_command )
424 {
425 case GC_PHOTO_MODE: // can starts a D03 flash command: redundant, can be safely ignored.
426 break;
427
430 break;
431
434 break;
435
438 break;
439
440 case GC_COMMENT:
441 // Skip comment, but only if the line does not start by "G04 #@! "
442 // which is a metadata, i.e. a X2 command inside the comment.
443 // this comment is called a "structured comment"
444 if( strncmp( text, " #@! ", 5 ) == 0 )
445 {
446 text += 5;
447
448 // The string starting at text is the same as the X2 attribute,
449 // but a X2 attribute ends by '%'. So we build the X2 attribute string
450 std::string x2buf;
451
452 while( *text && (*text != '*') )
453 {
454 x2buf += *text;
455 text++;
456 }
457
458 // add the end of X2 attribute string
459 x2buf += "*%";
460 x2buf += '\0';
461
462 char* cptr = (char*)x2buf.data();
463 int code_command = ReadXCommandID( cptr );
464 ExecuteRS274XCommand( code_command, nullptr, 0, cptr );
465 }
466
467 while( *text && (*text != '*') )
468 text++;
469
470 break;
471
472 case GC_SELECT_TOOL:
473 {
474 int D_commande = CodeNumber( text );
475
476 if( D_commande < FIRST_DCODE )
477 return false;
478
479 if( D_commande > (TOOLS_MAX_COUNT - 1) )
480 D_commande = TOOLS_MAX_COUNT - 1;
481
482 m_Current_Tool = D_commande;
483 D_CODE* pt_Dcode = GetDCODE( D_commande );
484
485 if( pt_Dcode )
486 pt_Dcode->m_InUse = true;
487
488 break;
489 }
490
492 m_GerbMetric = false; // false = Inches, true = metric
493 break;
494
496 m_GerbMetric = true; // false = Inches, true = metric
497 break;
498
499 case GC_TURN_OFF_360_INTERPOL: // disable Multi cadran arc and Arc interpol
500 m_360Arc_enbl = false;
501 m_Iterpolation = GERB_INTERPOL_LINEAR_1X; // not sure it should be done
502 m_AsArcG74G75Cmd = true;
503 break;
504
506 m_360Arc_enbl = true;
507 m_AsArcG74G75Cmd = true;
508 break;
509
511 m_Relative = false; // false = absolute Coord, true = relative
512 // Coord
513 break;
514
516 m_Relative = true; // false = absolute Coord, true = relative
517 // Coord
518 break;
519
521 m_PolygonFillMode = true;
522 m_Exposure = false;
523 break;
524
526 if( m_Exposure && GetLastItemInList() ) // End of polygon
527 {
529
530 if( gbritem->m_Polygon.VertexCount() )
531 gbritem->m_Polygon.Append( gbritem->m_Polygon.CVertex( 0 ) );
532
533 StepAndRepeatItem( *gbritem );
534 }
535
536 m_Exposure = false;
537 m_PolygonFillMode = false;
539 m_Iterpolation = GERB_INTERPOL_LINEAR_1X; // not sure it should be done
540 break;
541
542 case GC_MOVE: // Non existent
543 default:
544 {
545 wxString msg;
546 msg.Printf( wxT( "G%0.2d command not handled" ), G_command );
547 AddMessageToList( msg );
548 return false;
549 }
550 }
551
552
553 return true;
554}
bool m_Relative
false = absolute Coord, true = relative Coord.
bool ExecuteRS274XCommand(int aCommand, char *aBuff, unsigned int aBuffSize, char *&aText)
Execute a RS274X command.
Definition: rs274x.cpp:198
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 m_GerbMetric
false = Inches, true = metric
int CodeNumber(char *&aText)
Reads the next number and returns the value.
Definition: rs274d.cpp:401
int VertexCount(int aOutline=-1, int aHole=-1) const
Return the number of points in the shape poly set.
@ GC_SPECIFY_MILLIMETERS
Definition: gerbview.h:54
@ GC_SPECIFY_RELATIVEES_COORD
Definition: gerbview.h:58
@ GC_COMMENT
Definition: gerbview.h:48
@ GC_TURN_ON_360_INTERPOL
Definition: gerbview.h:56
@ GC_LINEAR_INTERPOL_1X
Definition: gerbview.h:45
@ GC_TURN_OFF_360_INTERPOL
Definition: gerbview.h:55
@ GC_SELECT_TOOL
Definition: gerbview.h:51
@ GC_TURN_OFF_POLY_FILL
Definition: gerbview.h:50
@ GC_CIRCLE_POS_INTERPOL
Definition: gerbview.h:47
@ GC_PHOTO_MODE
Definition: gerbview.h:52
@ GC_MOVE
Definition: gerbview.h:44
@ GC_SPECIFY_INCHES
Definition: gerbview.h:53
@ GC_TURN_ON_POLY_FILL
Definition: gerbview.h:49
@ GC_CIRCLE_NEG_INTERPOL
Definition: gerbview.h:46
@ GC_SPECIFY_ABSOLUES_COORD
Definition: gerbview.h:57

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 = gerbIUScale.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
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 {
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
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
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 = VECTOR2I( 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 {
599 aText++;
600 }
601 else if( *aText == 'L' )
602 {
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 {
619 aText++;
620 }
621 else if( *aText == 'L' )
622 {
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
641
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 = EDA_ANGLE( ReadDouble( aText ), DEGREES_T );
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}
constexpr EDA_IU_SCALE gerbIUScale
Definition: base_units.h:108
wxString m_AperFunction
the aperture attribute (created by a TA.AperFunction command).
Definition: dcode.h:201
EDA_ANGLE m_Rotation
shape rotation
Definition: dcode.h:195
void SetMacro(APERTURE_MACRO *aMacro)
Definition: dcode.h:119
wxSize m_Drill
dimension of the hole (if any) (drill file)
Definition: dcode.h:192
int m_EdgesCount
in aperture definition Polygon only: number of edges for the polygon
Definition: dcode.h:196
bool m_Defined
false if the aperture is not defined in the header
Definition: dcode.h:200
APERTURE_DEF_HOLETYPE m_DrillShape
shape of the hole (0 = no hole, round = 1, rect = 2).
Definition: dcode.h:193
void AppendParam(double aValue)
Add a parameter to the D_CODE parameter list.
Definition: dcode.h:91
void SetField(const wxString &aField, bool aUseUTF8, bool aEscapeString)
int m_NetAttribType
the type of net info (used to define the gerber string to create)
wxString m_Cmpref
the component reference parent of the data
@ GBR_NETINFO_NET
print info associated to a net (TO.N attribute)
@ GBR_NETINFO_CMP
print info associated to a component (TO.C attribute)
@ GBR_NETINFO_PAD
print info associated to a flashed pad (TO.P attribute)
GBR_DATA_FIELD m_PadPinFunction
for a pad: the pin function (defined in schematic)
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
APERTURE_MACRO * FindApertureMacro(const APERTURE_MACRO &aLookup)
Look up a previously read in aperture macro.
void RemoveAttribute(X2_ATTRIBUTE &aAttribute)
Called when a TD command is found the Gerber file.
bool m_SwapAxis
false if A = X and B = Y (default); true if A = Y, B = X
double m_LocalRotation
Local rotation added to m_ImageRotation.
VECTOR2I m_Offset
Coord Offset, from OF command.
wxSize m_FmtScale
Fmt 2.3: m_FmtScale = 3, fmt 3.4: m_FmtScale = 4.
wxString m_FileName
Full File Name for this layer.
int m_LineNum
Line number of the gerber file while reading.
wxString m_MD5_value
MD5 value found in a TF.MD5 command.
bool m_MirrorB
true: mirror / axis B (Y)
wxString m_PartString
string found in a TF.Part command
VECTOR2I m_ImageOffset
Coord Offset, from IO command.
bool m_Has_DCode
< True if has DCodes in file or false if no DCodes found. Perhaps deprecated RS274D file.
bool GetEndOfBlock(char *aBuff, unsigned int aBuffSize, char *&aText, FILE *aGerberFile)
Definition: rs274x.cpp:909
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
D_CODE * GetDCODEOrCreate(int aDCODE, bool aCreateIfNoExist=true)
Return a pointer to the D_CODE within this GERBER for the given aDCODE.
wxSize m_FmtLen
Nb chars per coord. ex fmt 2.3, m_FmtLen = 5.
bool m_NoTrailingZeros
true: remove tailing zeros.
bool m_MirrorA
true: mirror / axis A (X)
VECTOR2I m_Scale
scale (X and Y) of layer.
wxRealPoint m_StepForRepeat
bool m_StepForRepeatMetric
X2_ATTRIBUTE_FILEFUNCTION ( from TF.FileFunction in Gerber file) Example file function: TF....
The attribute value consists of a number of substrings separated by a comma.
@ APT_DEF_ROUND_HOLE
Definition: dcode.h:62
@ APT_DEF_RECT_HOLE
Definition: dcode.h:63
@ APT_RECT
Definition: dcode.h:50
@ APT_OVAL
Definition: dcode.h:51
@ APT_POLYGON
Definition: dcode.h:52
@ APT_MACRO
Definition: dcode.h:54
@ DEGREES_T
Definition: eda_angle.h:31
wxString FormatStringFromGerber(const wxString &aString)
Convert a gerber string into a 16 bit Unicode string.
void ignore_unused(const T &)
Definition: ignore.h:24
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition: macros.h:83
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
Definition: macros.h:96
@ FILE_ATTRIBUTE
Definition: rs274x.cpp:86
@ IMAGE_JUSTIFY
Definition: rs274x.cpp:70
@ APERTURE_ATTRIBUTE
Definition: rs274x.cpp:94
@ FORMAT_STATEMENT
Definition: rs274x.cpp:60
@ NET_ATTRIBUTE
Definition: rs274x.cpp:91
@ IMAGE_OFFSET
Definition: rs274x.cpp:72
@ ROTATE
Definition: rs274x.cpp:108
@ STEP_AND_REPEAT
Definition: rs274x.cpp:107
@ LOAD_NAME
Definition: rs274x.cpp:111
@ REMOVE_APERTURE_ATTRIBUTE
Definition: rs274x.cpp:100
@ KNOCKOUT
Definition: rs274x.cpp:106
@ AP_MACRO
Definition: rs274x.cpp:79
@ MIRROR_IMAGE
Definition: rs274x.cpp:61
@ MODE_OF_UNITS
Definition: rs274x.cpp:62
@ INCH
Definition: rs274x.cpp:63
@ IMAGE_NAME
Definition: rs274x.cpp:71
@ OFFSET
Definition: rs274x.cpp:65
@ MILLIMETER
Definition: rs274x.cpp:64
@ AXIS_SELECT
Definition: rs274x.cpp:59
@ SCALE_FACTOR
Definition: rs274x.cpp:66
@ IMAGE_ROTATION
Definition: rs274x.cpp:74
@ LOAD_POLARITY
Definition: rs274x.cpp:110
@ IMAGE_POLARITY
Definition: rs274x.cpp:73
@ AP_DEFINITION
Definition: rs274x.cpp:78
int ReadInt(char *&text, bool aSkipSeparator=true)
Read an integer from an ASCII character buffer.
double ReadDouble(char *&text, bool aSkipSeparator=true)
Read a double precision floating point number from an ASCII character buffer.
static LIB_SYMBOL * dummy()
Used to draw a dummy shape when a LIB_SYMBOL is not found in library.
Definition: sch_symbol.cpp:74
Support the "aperture macro" defined within standard RS274X.
Definition: am_primitive.h:167
wxString name
The name of the aperture macro.
Definition: am_primitive.h:231
const double IU_PER_MILS
Definition: base_units.h:78
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:80

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(), DEGREES_T, 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, gerbIUScale, GetDCODEOrCreate(), GetEndOfBlock(), GetLayerParams(), ignore_unused(), IMAGE_JUSTIFY, IMAGE_NAME, IMAGE_OFFSET, IMAGE_POLARITY, IMAGE_ROTATION, INCH, EDA_IU_SCALE::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, TO_UTF8, VECTOR2< T >::x, and VECTOR2< T >::y.

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 143 of file gerber_file_image.cpp.

144{
145 APERTURE_MACRO_SET::iterator iter = m_aperture_macros.find( aLookup );
146
147 if( iter != m_aperture_macros.end() )
148 {
149 APERTURE_MACRO* pam = (APERTURE_MACRO*) &(*iter);
150 return pam;
151 }
152
153 return nullptr; // not found
154}
APERTURE_MACRO_SET m_aperture_macros

References m_aperture_macros.

Referenced by ExecuteRS274XCommand().

◆ Get() [1/3]

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

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

◆ Get() [2/3]

wxAny INSPECTABLE::Get ( PROPERTY_BASE aProperty) const
inlineinherited

Definition at line 84 of file inspectable.h.

85 {
87 const void* object = propMgr.TypeCast( this, TYPE_HASH( *this ), aProperty->OwnerHash() );
88 return object ? aProperty->getter( object ) : wxAny();
89 }
virtual wxAny getter(const void *aObject) const =0

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(), EDA_SHAPE_DESC::EDA_SHAPE_DESC(), PCB_EXPR_VAR_REF::GetValue(), and PAD_DESC::PAD_DESC().

◆ Get() [3/3]

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

Definition at line 92 of file inspectable.h.

93 {
95 const void* object = propMgr.TypeCast( this, TYPE_HASH( *this ), aProperty->OwnerHash() );
96
97 if( !object )
98 throw std::runtime_error( "Could not cast INSPECTABLE to the requested type" );
99
100 return aProperty->get<T>( object );
101 }

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

◆ GetBoundingBox()

const BOX2I 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 LIB_FIELD, LIB_ITEM, LIB_PIN, LIB_SHAPE, LIB_SYMBOL, LIB_TEXT, SCH_BITMAP, SCH_BUS_ENTRY_BASE, SCH_FIELD, SCH_JUNCTION, SCH_LABEL_BASE, SCH_LINE, SCH_MARKER, SCH_NO_CONNECT, SCH_PIN, SCH_SHAPE, SCH_SHEET, SCH_SYMBOL, SCH_TEXT, GBR_LAYOUT, GERBER_DRAW_ITEM, DS_DRAW_ITEM_LINE, DS_DRAW_ITEM_POLYPOLYGONS, DS_DRAW_ITEM_RECT, DS_DRAW_ITEM_PAGE, DS_DRAW_ITEM_TEXT, DS_DRAW_ITEM_BITMAP, PCB_GROUP, BOARD, FOOTPRINT, FP_TEXT, NETINFO_ITEM, PAD, PCB_BITMAP, PCB_DIMENSION_BASE, PCB_DIM_CENTER, PCB_MARKER, PCB_SHAPE, PCB_TARGET, PCB_TEXT, PCB_TRACK, ZONE, and DS_DRAW_ITEM_BASE.

Definition at line 74 of file eda_item.cpp.

75{
76 // return a zero-sized box per default. derived classes should override
77 // this
78 return BOX2I( VECTOR2I( 0, 0 ), VECTOR2I( 0, 0 ) );
79}
BOX2< VECTOR2I > BOX2I
Definition: box2.h:847

Referenced by CADSTAR_SCH_ARCHIVE_LOADER::applyTextSettings(), CN_ITEM::BBox(), SCH_EDIT_TOOL::ChangeTextType(), TEST_BOARD_ITEM_FIXTURE::CompareItems(), TEST_EE_ITEM_FIXTURE::CompareItems(), EE_RTREE::contains(), BOARD_COMMIT::dirtyIntersectingZones(), KIGFX::SCH_PAINTER::draw(), KIGFX::PCB_PAINTER::Draw(), SCH_DRAWING_TOOLS::DrawSheet(), enclosedByAreaFunc(), PCB_SELECTION_TOOL::FindItem(), SCH_EDITOR_CONTROL::FindNext(), LIB_ITEM::GetBoundingBox(), GetBoundingBoxes(), BOARD_ITEM::GetCenter(), SCH_MOVE_TOOL::getConnectedDragItems(), SCH_MOVE_TOOL::getConnectedItems(), EE_SELECTION_TOOL::GuessSelectionCandidates(), EE_RTREE::insert(), intersectsAreaFunc(), SCH_SCREEN::MarkConnections(), SCH_EDIT_TOOL::Mirror(), DRC_RTREE::QueryColliding(), EE_RTREE::remove(), SCH_EDIT_TOOL::Rotate(), DRC_TEST_PROVIDER_COPPER_CLEARANCE::testItemAgainstZone(), DRC_TEST_PROVIDER_PHYSICAL_CLEARANCE::testItemAgainstZones(), DRC_TEST_PROVIDER_SOLDER_MASK::testMaskBridges(), 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 132 of file gerber_file_image.cpp.

133{
134 unsigned ndx = aDCODE - FIRST_DCODE;
135
136 if( ndx < (unsigned) arrayDim( m_Aperture_List ) )
137 return m_Aperture_List[ndx];
138
139 return nullptr;
140}

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 112 of file gerber_file_image.cpp.

113{
114 unsigned ndx = aDCODE - FIRST_DCODE;
115
116 if( ndx < (unsigned) arrayDim( m_Aperture_List ) )
117 {
118 // lazily create the D_CODE if it does not exist.
119 if( aCreateIfNoExist )
120 {
121 if( m_Aperture_List[ndx] == nullptr )
122 m_Aperture_List[ndx] = new D_CODE( ndx + FIRST_DCODE );
123 }
124
125 return m_Aperture_List[ndx];
126 }
127
128 return nullptr;
129}

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 251 of file gerber_file_image.cpp.

252{
253 int count = 0;
254
255 for( unsigned ii = 0; ii < arrayDim( m_Aperture_List ); ii++ )
256 {
257 if( m_Aperture_List[ii] )
258 {
259 if( m_Aperture_List[ii]->m_InUse || m_Aperture_List[ii]->m_Defined )
260 ++count;
261 }
262
263 }
264
265 return count;
266}
bool m_InUse
true if this image is currently in use (a file is loaded in it) false if it must be not drawn

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 147 of file eda_item.h.

148 {
149 constexpr int mask = ( IS_NEW | IS_PASTED | IS_MOVING | IS_RESIZING | IS_DRAGGING
151
152 return m_flags & mask;
153 }
#define IS_PASTED
Modifier on IS_NEW which indicates it came from clipboard.
#define IS_CHANGED
Item was edited, and modified.
#define IS_NEW
New item, just created.
#define IS_DRAGGING
Item being dragged.
#define IS_WIRE_IMAGE
Item to be drawn as wireframe while editing.
#define STRUCT_DELETED
flag indication structures to be erased
#define IS_MOVING
Item being moved.
#define IS_RESIZING
Item being resized.

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

Referenced by SCH_EDIT_TOOL::ChangeTextType(), 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_FRAME::SelectUnit(), DIALOG_IMAGE_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_PROPERTIES::TransferDataFromWindow(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_DIMENSION_PROPERTIES::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataFromWindow(), DIALOG_TARGET_PROPERTIES::TransferDataFromWindow(), and DIALOG_TEXTBOX_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}

References gerber_file, and m_LineNum.

Referenced by ExecuteRS274XCommand().

◆ GetFlags()

◆ GetFocusPosition()

virtual const VECTOR2I EDA_ITEM::GetFocusPosition ( ) const
inlinevirtualinherited

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

Reimplemented in BOARD, PCB_SHAPE, and PCB_TRACK.

Definition at line 256 of file eda_item.h.

256{ return GetPosition(); }
virtual VECTOR2I GetPosition() const
Definition: eda_item.h:249

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 163 of file gerber_file_image.h.

163{ return m_drawings.size(); }

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 178 of file gerber_file_image.h.

179 {
180 return m_drawings.back();
181 }

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 186 of file gerber_file_image.h.

187 {
188 return m_GBRLayerParams;
189 }
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 LIB_FIELD, LIB_PIN, LIB_SHAPE, LIB_TEXT, LIB_TEXTBOX, SCH_BITMAP, SCH_BUS_WIRE_ENTRY, SCH_BUS_BUS_ENTRY, SCH_FIELD, SCH_JUNCTION, SCH_LABEL, SCH_GLOBALLABEL, SCH_HIERLABEL, SCH_LINE, SCH_MARKER, SCH_NO_CONNECT, SCH_SHAPE, SCH_SHEET, SCH_SHEET_PIN, SCH_SYMBOL, SCH_TEXT, SCH_TEXTBOX, GERBER_DRAW_ITEM, PCB_GROUP, FOOTPRINT, FP_SHAPE, FP_TEXT, FP_TEXTBOX, PAD, PCB_BITMAP, PCB_DIM_ALIGNED, PCB_DIM_ORTHOGONAL, PCB_DIM_RADIAL, PCB_DIM_LEADER, PCB_DIM_CENTER, PCB_MARKER, PCB_SHAPE, PCB_TARGET, PCB_TEXT, PCB_TEXTBOX, PCB_TRACK, PCB_VIA, and ZONE.

Definition at line 269 of file eda_item.cpp.

270{
271 return BITMAPS::dummy_item;
272}

References dummy_item.

Referenced by SELECTION_TOOL::doSelectionMenu().

◆ GetMessages()

const wxArrayString & GERBER_FILE_IMAGE::GetMessages ( ) const
inline

Definition at line 141 of file gerber_file_image.h.

141{ return 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}

References m_LineNum.

Referenced by ReadApertureMacro().

◆ GetParent()

◆ GetPosition()

virtual VECTOR2I EDA_ITEM::GetPosition ( ) const
inlinevirtualinherited

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

Definition at line 249 of file eda_item.h.

249{ return VECTOR2I(); }

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

◆ GetPositiveDrawColor()

COLOR4D GERBER_FILE_IMAGE::GetPositiveDrawColor ( ) const
inline

Definition at line 153 of file gerber_file_image.h.

153{ return m_PositiveDrawColor; }

References m_PositiveDrawColor.

Referenced by GERBER_DRAW_ITEM::Print().

◆ GetSelectMenuText()

wxString EDA_ITEM::GetSelectMenuText ( UNITS_PROVIDER aUnitsProvider) 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 LIB_FIELD, LIB_PIN, LIB_SHAPE, LIB_TEXT, LIB_TEXTBOX, SCH_BITMAP, SCH_BUS_WIRE_ENTRY, SCH_BUS_BUS_ENTRY, SCH_FIELD, SCH_JUNCTION, SCH_LABEL, SCH_DIRECTIVE_LABEL, SCH_GLOBALLABEL, SCH_HIERLABEL, SCH_LINE, SCH_MARKER, SCH_NO_CONNECT, SCH_PIN, SCH_SHAPE, SCH_SHEET, DELETED_SHEET_ITEM, SCH_SHEET_PIN, SCH_SYMBOL, SCH_TEXT, SCH_TEXTBOX, GERBER_DRAW_ITEM, DELETED_BOARD_ITEM, DS_DRAW_ITEM_LINE, DS_DRAW_ITEM_POLYPOLYGONS, DS_DRAW_ITEM_RECT, DS_DRAW_ITEM_PAGE, DS_DRAW_ITEM_TEXT, DS_DRAW_ITEM_BITMAP, PCB_GROUP, BOARD, FOOTPRINT, FP_SHAPE, FP_TEXT, FP_TEXTBOX, PAD, PCB_BITMAP, PCB_DIMENSION_BASE, PCB_MARKER, PCB_SHAPE, PCB_TARGET, PCB_TEXT, PCB_TEXTBOX, PCB_TRACK, PCB_VIA, and ZONE.

Definition at line 108 of file eda_item.cpp.

109{
110 wxFAIL_MSG( wxT( "GetSelectMenuText() was not overridden for schematic item type " ) +
111 GetClass() );
112
113 return wxString( wxT( "Undefined menu text for " ) + GetClass() );
114}

References EDA_ITEM::GetClass().

Referenced by CONNECTION_GRAPH::collectAllDriverValues(), DIALOG_GROUP_PROPERTIES::DoAddMember(), SELECTION_TOOL::doSelectionMenu(), DRC_ENGINE::EvalRules(), BOARD_INSPECTION_TOOL::getItemDescription(), PCB_MARKER::GetMsgPanelInfo(), RC_TREE_MODEL::GetValue(), RC_ITEM::ShowReport(), DIALOG_POSITION_RELATIVE::UpdateAnchor(), and PCB_CONTROL::UpdateMessagePanel().

◆ GetSortPosition()

virtual VECTOR2I EDA_ITEM::GetSortPosition ( ) const
inlinevirtualinherited

Return the coordinates that should be used for sorting this element visually compared to other elements.

For instance, for lines the midpoint might be a better sorting point than either end.

Returns
X,Y coordinate of the sort point

Reimplemented in SCH_LINE.

Definition at line 265 of file eda_item.h.

265{ return GetPosition(); }

References EDA_ITEM::GetPosition().

◆ GetState()

int EDA_ITEM::GetState ( EDA_ITEM_FLAGS  type) const
inlineinherited

Definition at line 126 of file eda_item.h.

127 {
128 return m_status & type;
129 }
EDA_ITEM_FLAGS m_status
Definition: eda_item.h:495

References EDA_ITEM::m_status.

◆ GetStatus()

EDA_ITEM_FLAGS EDA_ITEM::GetStatus ( ) const
inlineinherited

Definition at line 139 of file eda_item.h.

139{ return m_status; }

References EDA_ITEM::m_status.

◆ GetTypeDesc()

wxString EDA_ITEM::GetTypeDesc ( )
inherited

Return a translated description of the type for this EDA_ITEM for display in user facing messages.

Definition at line 301 of file eda_item.cpp.

302{
303 //@see EDA_ITEM_DESC for definition of ENUM_MAP<KICAD_T>
304 wxString typeDescr = ENUM_MAP<KICAD_T>::Instance().ToString( Type() );
305
306 return wxGetTranslation( typeDescr );
307}
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:97
static ENUM_MAP< T > & Instance()
Definition: property.h:512

References ENUM_MAP< T >::Instance(), and EDA_ITEM::Type().

Referenced by PROPERTIES_PANEL::update().

◆ 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 222 of file gerber_file_image.cpp.

223{
224 if( m_hasNegativeItems < 0 ) // negative items are not yet searched: find them if any
225 {
226 if( m_ImageNegative ) // A negative layer is expected having always negative objects.
227 {
229 }
230 else
231 {
233
234 for( GERBER_DRAW_ITEM* item : GetItems() )
235 {
236 if( item->GetLayer() != m_GraphicLayer )
237 continue;
238
239 if( item->HasNegativeItems() )
240 {
242 break;
243 }
244 }
245 }
246 }
247
248 return m_hasNegativeItems == 1;
249}
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 BOX2I aRect,
bool  aContained,
int  aAccuracy = 0 
) const
inlinevirtualinherited

Test if aRect intersects this item.

Parameters
aRectA reference to a BOX2I 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 LIB_ITEM, LIB_PIN, LIB_SHAPE, LIB_TEXT, LIB_TEXTBOX, SCH_BITMAP, SCH_BUS_ENTRY_BASE, SCH_FIELD, SCH_JUNCTION, SCH_LABEL_BASE, SCH_LINE, SCH_NO_CONNECT, SCH_PIN, SCH_SHAPE, SCH_SHEET, SCH_SYMBOL, SCH_TEXT, SCH_TEXTBOX, DS_DRAW_ITEM_BASE, DS_DRAW_ITEM_POLYPOLYGONS, DS_DRAW_ITEM_RECT, DS_DRAW_ITEM_TEXT, DS_DRAW_ITEM_BITMAP, PCB_GROUP, FOOTPRINT, FP_TEXT, FP_TEXTBOX, PAD, PCB_BITMAP, PCB_DIMENSION_BASE, PCB_SHAPE, PCB_TARGET, PCB_TEXT, PCB_TEXTBOX, PCB_TRACK, PCB_VIA, PCB_ARC, ZONE, and GERBER_DRAW_ITEM.

Definition at line 235 of file eda_item.h.

236 {
237 return false; // derived classes should override this function
238 }

◆ HitTest() [2/2]

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

◆ IsBrightened()

◆ IsDragging()

bool EDA_ITEM::IsDragging ( ) const
inlineinherited

Definition at line 105 of file eda_item.h.

105{ return m_flags & IS_DRAGGING; }

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 108 of file eda_item.h.

108{ return m_flags & ENTERED; }
#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 203 of file eda_item.h.

203{ return m_forceVisible; }
bool m_forceVisible
Definition: eda_item.h:497

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 102 of file eda_item.h.

102{ return m_flags & IS_CHANGED; }

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 LIB_TEXTBOX, SCH_FIELD, SCH_LABEL, SCH_SHEET, SCH_SHEET_PIN, SCH_SYMBOL, SCH_TEXT, and SCH_TEXTBOX.

Definition at line 420 of file eda_item.h.

420{ return false; }

Referenced by EDA_ITEM::Matches().

◆ IsResized()

bool EDA_ITEM::IsResized ( ) const
inlineinherited

Definition at line 109 of file eda_item.h.

109{ return m_flags & IS_RESIZING; }

References IS_RESIZING, and EDA_ITEM::m_flags.

◆ IsRollover()

bool EDA_ITEM::IsRollover ( ) const
inlineinherited

Definition at line 112 of file eda_item.h.

113 {
114 return ( m_flags & ( IS_ROLLOVER | IS_MOVING ) ) == IS_ROLLOVER;
115 }
#define IS_ROLLOVER
Rollover active. Used for hyperlink highlighting.

References IS_MOVING, IS_ROLLOVER, and EDA_ITEM::m_flags.

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

◆ IsSelected()

bool EDA_ITEM::IsSelected ( ) const
inlineinherited

Definition at line 107 of file eda_item.h.

107{ return m_flags & 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_TOOL::ChangeTextType(), 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::GERBVIEW_RENDER_SETTINGS::GetColor(), KIGFX::DS_RENDER_SETTINGS::GetColor(), KIGFX::PCB_RENDER_SETTINGS::GetColor(), SCH_MOVE_TOOL::getConnectedDragItems(), KIGFX::SCH_PAINTER::getLineWidth(), DIALOG_EXCHANGE_FOOTPRINTS::isMatch(), DIALOG_CHANGE_SYMBOLS::isMatch(), SCH_MOVE_TOOL::Main(), SCH_SCREEN::MarkConnections(), SCH_LINE::MergeOverlap(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), SCH_MOVE_TOOL::moveItem(), KIGFX::SCH_PAINTER::nonCached(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), BOARD_COMMIT::Push(), EE_SELECTION_TOOL::RebuildSelection(), PCB_SELECTION_TOOL::RebuildSelection(), RENDER_3D_OPENGL::renderFootprint(), SCH_EDIT_TOOL::Rotate(), EE_TOOL_BASE< T >::saveCopyInUndoList(), GERBVIEW_SELECTION_TOOL::select(), PCB_SELECTION_TOOL::select(), PCB_SELECTION_TOOL::selectionContains(), PCB_SELECTION_TOOL::selectMultiple(), GERBVIEW_SELECTION_TOOL::selectPoint(), KIGFX::SCH_PAINTER::setDeviceColors(), PCB_BASE_EDIT_FRAME::unitsChangeRefresh(), GERBVIEW_SELECTION_TOOL::unselect(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem(), and DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::visitItem().

◆ IsShownAsBitmap()

bool EDA_ITEM::IsShownAsBitmap ( ) const
inlineinherited

Definition at line 175 of file eda_item.h.

175{ return m_flags & IS_SHOWN_AS_BITMAP; }
#define IS_SHOWN_AS_BITMAP

References IS_SHOWN_AS_BITMAP, and EDA_ITEM::m_flags.

◆ IsType()

virtual bool EDA_ITEM::IsType ( const std::vector< 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 SCH_FIELD, SCH_ITEM, SCH_LABEL_BASE, SCH_LINE, FP_SHAPE, FP_TEXT, FP_TEXTBOX, PAD, PCB_DIMENSION_BASE, PCB_SHAPE, PCB_TEXT, PCB_TEXTBOX, and PCB_VIA.

Definition at line 183 of file eda_item.h.

184 {
185 for( KICAD_T scanType : aScanTypes )
186 {
187 if( scanType == SCH_LOCATE_ANY_T || scanType == m_structType )
188 return true;
189 }
190
191 return false;
192 }
KICAD_T m_structType
Run time identification, keep private so it can never be changed after a ctor sets it.
Definition: eda_item.h:505
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:78
@ SCH_LOCATE_ANY_T
Definition: typeinfo.h:182

References EDA_ITEM::m_structType, and SCH_LOCATE_ANY_T.

Referenced by SCH_EDIT_TOOL::AutoplaceFields(), ROUTER_TOOL::CanInlineDrag(), DIALOG_SCH_FIELD_PROPERTIES::DIALOG_SCH_FIELD_PROPERTIES(), SCH_FIELD::GetCanonicalName(), KIGFX::SCH_PAINTER::getLineWidth(), SCH_FIELD::GetName(), KIGFX::SCH_PAINTER::getRenderColor(), SCH_FIELD::GetShownText(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingBus(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingLine(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingWire(), SCH_ITEM::IsType(), FP_TEXT::IsType(), FP_TEXTBOX::IsType(), PAD::IsType(), PCB_DIMENSION_BASE::IsType(), PCB_SHAPE::IsType(), PCB_TEXT::IsType(), PCB_TEXTBOX::IsType(), PCB_VIA::IsType(), EE_POINT_EDITOR::Main(), PL_POINT_EDITOR::Main(), EE_SELECTION_TOOL::RequestSelection(), SCH_FIELD::SetId(), SCH_BASE_FRAME::UpdateItem(), and EDA_ITEM::Visit().

◆ IsWireImage()

bool EDA_ITEM::IsWireImage ( ) const
inlineinherited

Definition at line 106 of file eda_item.h.

106{ return m_flags & IS_WIRE_IMAGE; }

References IS_WIRE_IMAGE, and EDA_ITEM::m_flags.

◆ IterateForward() [1/2]

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

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

Definition at line 302 of file eda_item.h.

304 {
305 for( const auto& it : aList )
306 {
307 if( static_cast<EDA_ITEM*>( it )->Visit( inspector,
308 testData,
309 scanTypes ) == INSPECT_RESULT::QUIT )
310 {
312 }
313 }
314
316 }
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:85
virtual INSPECT_RESULT Visit(INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &aScanTypes)
May be re-implemented for each derived class in order to handle all the types given by its member dat...
Definition: eda_item.cpp:91

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

Referenced by Visit().

◆ IterateForward() [2/2]

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

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

Definition at line 322 of file eda_item.h.

324 {
325 for( const auto& it : aList )
326 {
327 if( static_cast<EDA_ITEM*>( it )->Visit( inspector,
328 testData,
329 scanTypes ) == INSPECT_RESULT::QUIT )
330 {
332 }
333 }
334
336 }

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 232 of file readgerb.cpp.

233{
234 int G_command = 0; // command number for G commands like G04
235 int D_commande = 0; // command number for D commands like D02
236 char* text;
237
240
241 // Read the gerber file */
242 m_Current_File = wxFopen( aFullFileName, wxT( "rt" ) );
243
244 if( m_Current_File == nullptr )
245 return false;
246
247 m_FileName = aFullFileName;
248
249 LOCALE_IO toggleIo;
250
251 wxString msg;
252
253 while( true )
254 {
255 if( fgets( lineBuffer, GERBER_BUFZ, m_Current_File ) == nullptr )
256 break;
257
258 m_LineNum++;
260
261 while( text && *text )
262 {
263 switch( *text )
264 {
265 case ' ':
266 case '\r':
267 case '\n':
268 text++;
269 break;
270
271 case '*': // End command
273 text++;
274 break;
275
276 case 'M': // End file
278 while( *text )
279 text++;
280 break;
281
282 case 'G': /* Line type Gxx : command */
283 G_command = CodeNumber( text );
284 Execute_G_Command( text, G_command );
285 break;
286
287 case 'D': /* Line type Dxx : Tool selection (xx > 0) or
288 * command if xx = 0..9 */
289 D_commande = CodeNumber( text );
290 Execute_DCODE_Command( text, D_commande );
291 break;
292
293 case 'X':
294 case 'Y': /* Move or draw command */
296 if( *text == '*' ) // command like X12550Y19250*
297 {
299 }
300 break;
301
302 case 'I':
303 case 'J': /* Auxiliary Move command */
305
306 if( *text == '*' ) // command like X35142Y15945J504*
307 {
309 }
310 break;
311
312 case '%':
314 {
317 }
318 else //Error
319 {
320 AddMessageToList( wxT( "Expected RS274X Command" ) );
322 text++;
323 }
324 break;
325
326 default:
327 msg.Printf( wxT( "Unexpected char 0x%2.2X" ), *text );
328 AddMessageToList( msg );
329 text++;
330 break;
331 }
332 }
333 }
334
335 fclose( m_Current_File );
336
337 m_InUse = true;
338
339 return true;
340}
bool Execute_G_Command(char *&text, int G_command)
Definition: rs274d.cpp:421
VECTOR2I ReadIJCoord(char *&Text)
Return the current coordinate type pointed to by InnJnn Text (InnnnJmmmm)
void ClearMessageList()
Clear the message list.
bool Execute_DCODE_Command(char *&text, int D_command)
Definition: rs274d.cpp:557
bool ReadRS274XCommand(char *aBuff, unsigned int aBuffSize, char *&aText)
Read a single RS274X command terminated with a %.
Definition: rs274x.cpp:143
VECTOR2I ReadXYCoord(char *&aText, bool aExcellonMode=false)
Return the current coordinate type pointed to by XnnYnn Text (XnnnnYmmmm).
int m_CommandState
state of gerber analysis command
Instantiate the current locale within a scope in which you are expecting exceptions to be thrown.
Definition: locale_io.h:41
@ END_BLOCK
Definition: gerbview.h:65
@ ENTER_RS274X_CMD
Definition: gerbview.h:66
@ CMD_IDLE
Definition: gerbview.h:64
#define GERBER_BUFZ
Definition: readgerb.cpp:228
static char lineBuffer[GERBER_BUFZ+1]
Definition: readgerb.cpp:230
char * StrPurge(char *text)
Remove leading and training spaces, tabs and end of line chars in text.

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 EDA_SEARCH_DATA 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_MARKER, LIB_TEXTBOX, SCH_FIELD, SCH_PIN, SCH_SHEET, SCH_SHEET_PIN, SCH_SYMBOL, SCH_TEXT, SCH_TEXTBOX, FP_TEXT, FP_TEXTBOX, NETINFO_ITEM, PCB_MARKER, PCB_TEXT, PCB_TEXTBOX, and ZONE.

Definition at line 382 of file eda_item.h.

383 {
384 return false;
385 }

Referenced by SCH_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), SCH_EDITOR_CONTROL::HasMatch(), SCH_MARKER::Matches(), LIB_TEXTBOX::Matches(), SCH_FIELD::Matches(), SCH_PIN::Matches(), SCH_SHEET_PIN::Matches(), SCH_TEXT::Matches(), SCH_TEXTBOX::Matches(), FP_TEXT::Matches(), FP_TEXTBOX::Matches(), NETINFO_ITEM::Matches(), PCB_MARKER::Matches(), PCB_TEXT::Matches(), PCB_TEXTBOX::Matches(), ZONE::Matches(), SCH_EDITOR_CONTROL::ReplaceAndFindNext(), SCH_DRAWING_TOOLS::TwoClickPlace(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), and SCH_EDITOR_CONTROL::UpdateFind().

◆ Matches() [2/2]

bool EDA_ITEM::Matches ( const wxString &  aText,
const EDA_SEARCH_DATA 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 117 of file eda_item.cpp.

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

References EDA_SEARCH_DATA::findString, EDA_ITEM::IsReplaceable(), EDA_SEARCH_DATA::matchCase, EDA_SEARCH_DATA::matchMode, next(), EDA_SEARCH_DATA::searchAndReplace, text, WHOLEWORD, and WILDCARD.

◆ 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 231 of file eda_item.cpp.

232{
233 wxFAIL_MSG( wxString::Format( wxT( "Less than operator not defined for item type %s." ),
234 GetClass() ) );
235
236 return false;
237}
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

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;
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:
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}
AM_PRIMITIVE_ID
The set of all "aperture macro primitives" (primitive numbers).
Definition: am_primitive.h:69
@ AMP_POLYGON
Definition: am_primitive.h:80
@ AMP_LINE_LOWER_LEFT
Definition: am_primitive.h:77
@ AMP_LINE2
Definition: am_primitive.h:74
@ AMP_CIRCLE
Definition: am_primitive.h:73
@ AMP_THERMAL
Definition: am_primitive.h:83
@ AMP_EOF
Definition: am_primitive.h:78
@ AMP_UNKNOWN
Definition: am_primitive.h:70
@ AMP_COMMENT
Definition: am_primitive.h:71
@ AMP_LINE_CENTER
Definition: am_primitive.h:76
@ AMP_MOIRE
Definition: am_primitive.h:82
@ AMP_OUTLINE
Definition: am_primitive.h:79
@ AMP_LINE20
Definition: am_primitive.h:75
Hold a parameter value for an "aperture macro" as defined within standard RS274X.
Definition: am_param.h:285
bool ReadParam(char *&aText)
Read one aperture macro parameter.
Definition: am_param.cpp:177
An aperture macro primitive as given in Table 3 of http://gerbv.sourceforge.net/docs/rs274xrevd_e....
Definition: am_primitive.h:93
char * GetNextLine(char *aBuff, unsigned int aBuffSize, char *aText, FILE *aFile)
Test for an end of line.
Definition: rs274x.cpp:935
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
AM_PRIMITIVES primitives
A sequence of AM_PRIMITIVEs.
Definition: am_primitive.h:232
AM_PARAMS m_localparamStack
Definition: am_primitive.h:240

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()

VECTOR2I 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 VECTOR2I 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
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}
LAST_EXTRA_ARC_DATA_TYPE m_LastArcDataType
@ ARC_INFO_TYPE_CENTER
#define IsNumber(x)
int scaletoIU(double aCoord, bool isMetric)
Convert a coordinate given in floating point to GerbView's internal units (currently = 10 nanometers)...
static double scale_list[SCALE_LIST_SIZE]

References ARC_INFO_TYPE_CENTER, IsNumber, KiROUND(), m_FmtLen, m_FmtScale, m_GerbMetric, m_IJPos, m_LastArcDataType, m_LastCoordIsIJPos, m_NoTrailingZeros, scale_list, scaletoIU(), VECTOR2< T >::x, and VECTOR2< T >::y.

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
193exit:
194 return ok;
195}

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()

VECTOR2I 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 VECTOR2I 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
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 m_ArcRadius
Identifier for arc data type (IJ (center) or A## (radius)).
@ ARC_INFO_TYPE_RADIUS

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, scaletoIU(), VECTOR2< T >::x, and VECTOR2< T >::y.

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 command 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 aScanTypes, 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.
aScanTypesWhich KICAD_T types are of interest and the order in which they should be processed.
Returns
#SEARCH_RESULT SEARCH_QUIT if the Iterator is to stop the scan, else #SCAN_CONTINUE, and determined by the inspector.

Definition at line 356 of file gerber_file_image.cpp.

357{
358 /* Called when a %TD command is found
359 * Remove the attribute specified by the %TD command.
360 * is no attribute, all current attributes specified by the %TO and the %TA
361 * commands are cleared.
362 * if a attribute name is specified (for instance %TD.CN*%) is specified,
363 * only this attribute is cleared
364 */
365 wxString cmd = aAttribute.GetPrm( 0 );
367
368 if( cmd.IsEmpty() || cmd == wxT( ".AperFunction" ) )
369 m_AperFunction.Clear();
370}
void ClearAttribute(const wxString *aName)
Remove the net attribute specified by aName.
const wxString & GetPrm(int aIdx)

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

Referenced by ExecuteRS274XCommand().

◆ RenderAsBitmap()

virtual bool EDA_ITEM::RenderAsBitmap ( double  aWorldScale) const
inlinevirtualinherited

Reimplemented in SCH_ITEM.

Definition at line 165 of file eda_item.h.

165{ return false; }

◆ Replace() [1/2]

virtual bool EDA_ITEM::Replace ( const EDA_SEARCH_DATA 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 LIB_TEXTBOX, SCH_PIN, SCH_TEXT, SCH_TEXTBOX, SCH_FIELD, and SCH_SHEET_PIN.

Definition at line 409 of file eda_item.h.

410 {
411 return false;
412 }

◆ Replace() [2/2]

bool EDA_ITEM::Replace ( const EDA_SEARCH_DATA 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 168 of file eda_item.cpp.

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

References EDA_SEARCH_DATA::findString, EDA_SEARCH_DATA::matchCase, EDA_SEARCH_DATA::matchMode, next(), EDA_SEARCH_DATA::replaceString, text, and WHOLEWORD.

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

◆ 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 157 of file gerber_file_image.cpp.

158{
159 m_InUse = false;
161 m_FileName.Empty();
162 m_ImageName = wxEmptyString; // Image name from the IN command (deprecated)
163 m_ImageNegative = false; // true = Negative image
164 m_IsX2_file = false; // true only if a %TF, %TA or %TD command
165 delete m_FileFunction; // file function parameters
166 m_FileFunction = nullptr;
167 m_MD5_value.Empty(); // MD5 value found in a %TF.MD5 command
168 m_PartString.Empty(); // string found in a %TF.Part command
169 m_hasNegativeItems = -1; // set to uninitialized
170 m_ImageJustifyOffset = VECTOR2I( 0, 0 ); // Image justify Offset
171 m_ImageJustifyXCenter = false; // Image Justify Center on X axis (default = false)
172 m_ImageJustifyYCenter = false; // Image Justify Center on Y axis (default = false)
173 m_GerbMetric = false; // false = Inches (default), true = metric
174 m_Relative = false; // false = absolute Coord,
175 // true = relative Coord
176 m_NoTrailingZeros = false; // true: trailing zeros deleted
177 m_ImageOffset.x = m_ImageOffset.y = 0; // Coord Offset, from IO command
178 m_ImageRotation = 0; // Allowed 0, 90, 180, 270 (in degree)
179 m_LocalRotation = 0.0; // Layer rotation from RO command (in 0.1 degree)
180 m_Offset.x = 0;
181 m_Offset.y = 0; // Coord Offset, from OF command
182 m_Scale.x = m_Scale.y = 1.0; // scale (A and B) this layer
183 m_MirrorA = false; // true: mirror / axe A (default = X)
184 m_MirrorB = false; // true: mirror / axe B (default = Y)
185 m_SwapAxis = false; // false if A = X, B = Y; true if A =Y, B = Y
186 m_Has_DCode = false; // true = DCodes in file
187 // false = no DCode-> perhaps deprecated RS274D file
188 m_Has_MissingDCode = false; // true = some D_Codes are used, but not defined
189 // perhaps deprecated RS274D file
190 m_FmtScale.x = m_FmtScale.y = 4; // Initialize default format to 3.4 => 4
191 m_FmtLen.x = m_FmtLen.y = 3 + 4; // Initialize default format len = 3+4
192
193 m_Iterpolation = GERB_INTERPOL_LINEAR_1X; // Linear, 90 arc, Circ.
194 m_360Arc_enbl = true; // 360 deg circular mode (G75) selected as default
195 // interpolation disable
196 m_AsArcG74G75Cmd = false; // false until a G74 or G75 command is found
197 m_Current_Tool = 0; // Current Dcode selected
198 m_CommandState = 0; // State of the current command
199 m_CurrentPos.x = m_CurrentPos.y = 0; // current specified coord
200 m_PreviousPos.x = m_PreviousPos.y = 0; // last specified coord
201 m_IJPos.x = m_IJPos.y = 0; // current centre coord for
202 // plot arcs & circles
203 m_LastCoordIsIJPos = false; // True only after a IJ coordinate is read
204 m_ArcRadius = 0; // radius of arcs in circular interpol (given by A## command).
205 // in command like X##Y##A##
206 m_LastArcDataType = ARC_INFO_TYPE_NONE; // Extra coordinate info type for arcs
207 // (radius or IJ center coord)
208 m_LineNum = 0; // line number in file being read
209 m_Current_File = nullptr; // Gerber file to read
210 m_PolygonFillMode = false;
212 m_Selected_Tool = 0;
214 m_Exposure = false;
215}
@ ARC_INFO_TYPE_NONE

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, GERBER_LAYER::ResetDefaultValues(), VECTOR2< T >::x, and VECTOR2< T >::y.

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

◆ Set() [1/3]

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

Definition at line 66 of file inspectable.h.

67 {
69 TYPE_ID thisType = TYPE_HASH( *this );
70 PROPERTY_BASE* prop = propMgr.GetProperty( thisType, aProperty );
71 void* object = nullptr;
72
73 if( prop )
74 {
75 object = propMgr.TypeCast( this, thisType, prop->OwnerHash() );
76
77 if( object )
78 prop->set<T>( object, aValue );
79 }
80
81 return object != nullptr;
82 }
void set(void *aObject, T aValue)
Definition: property.h:263

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

◆ Set() [2/3]

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

Definition at line 54 of file inspectable.h.

55 {
57 void* object = propMgr.TypeCast( this, TYPE_HASH( *this ), aProperty->OwnerHash() );
58
59 if( object )
60 aProperty->set<T>( object, aValue );
61
62 return object != nullptr;
63 }

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

◆ Set() [3/3]

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

Definition at line 42 of file inspectable.h.

43 {
45 void* object = propMgr.TypeCast( this, TYPE_HASH( *this ), aProperty->OwnerHash() );
46
47 if( object )
48 aProperty->setter( object, aValue );
49
50 return object != nullptr;
51 }
virtual void setter(void *aObject, wxAny &aValue)=0

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

Referenced by PCB_PROPERTIES_PANEL::valueChanged().

◆ SetBrightened()

◆ SetFlags()

void EDA_ITEM::SetFlags ( EDA_ITEM_FLAGS  aMask)
inlineinherited

Definition at line 142 of file eda_item.h.

142{ m_flags |= aMask; }

References EDA_ITEM::m_flags.

Referenced by SCH_EAGLE_PLUGIN::addBusEntries(), PCB_BASE_FRAME::AddFootprintToBoard(), FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), SCH_ALTIUM_PLUGIN::AddTextBox(), SCH_MOVE_TOOL::AlignElements(), PCB_CONTROL::AppendBoard(), FOOTPRINT::BuildCourtyardCaches(), 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(), EDIT_TOOL::doMoveSelection(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), EDIT_TOOL::DragArcTrack(), KIGFX::SCH_PAINTER::draw(), DRAWING_TOOL::DrawArc(), DRAWING_TOOL::DrawCircle(), DRAWING_TOOL::DrawLine(), DRAWING_TOOL::DrawRectangle(), SCH_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), PCB_SELECTION_TOOL::EnterGroup(), PAD_TOOL::explodePad(), SCH_MOVE_TOOL::getConnectedDragItems(), SYMBOL_EDIT_FRAME::GetSymbolFromRedoList(), SYMBOL_EDIT_FRAME::GetSymbolFromUndoList(), EE_COLLECTOR::Inspect(), SCH_MOVE_TOOL::Main(), CONVERT_TOOL::makePolysFromChainedSegs(), SCH_SCREEN::MarkConnections(), TRACKS_CLEANER::mergeCollinearSegments(), SCH_MOVE_TOOL::moveItem(), SYMBOL_EDITOR_MOVE_TOOL::moveItem(), DIALOG_SYMBOL_PROPERTIES::OnUnitChoice(), KIGFX::ORIGIN_VIEWITEM::ORIGIN_VIEWITEM(), SCH_ALTIUM_PLUGIN::ParseBezier(), SCH_ALTIUM_PLUGIN::ParseBus(), SCH_ALTIUM_PLUGIN::ParseBusEntry(), SCH_ALTIUM_PLUGIN::ParseHarnessConnector(), SCH_ALTIUM_PLUGIN::ParseHarnessPort(), 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::ParseSignalHarness(), SCH_ALTIUM_PLUGIN::ParseWire(), SCH_EDITOR_CONTROL::Paste(), SYMBOL_EDITOR_EDIT_TOOL::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(), BOARD::Remove(), FOOTPRINT::Remove(), SCH_EDIT_TOOL::RepeatDrawItem(), SCH_EDIT_TOOL::Rotate(), SYMBOL_EDIT_FRAME::SaveCopyInUndoList(), EE_SELECTION_TOOL::SelectAll(), SCH_EDIT_FRAME::SelectUnit(), EDA_ITEM::SetBrightened(), EDA_ITEM::SetIsShownAsBitmap(), 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_SYMBOL_PROPERTIES::TransferDataFromWindow(), DIALOG_DIMENSION_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), DIALOG_TARGET_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXTBOX_PROPERTIES::TransferDataFromWindow(), SCH_DRAWING_TOOLS::TwoClickPlace(), and SYMBOL_EDITOR_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 201 of file eda_item.h.

201{ m_forceVisible = aEnable; }

References EDA_ITEM::m_forceVisible.

Referenced by SCH_EDITOR_CONTROL::UpdateFind().

◆ SetIsShownAsBitmap()

void EDA_ITEM::SetIsShownAsBitmap ( bool  aBitmap)
inlineinherited

Definition at line 167 of file eda_item.h.

168 {
169 if( aBitmap )
171 else
173 }

References EDA_ITEM::ClearFlags(), IS_SHOWN_AS_BITMAP, and EDA_ITEM::SetFlags().

◆ SetModified()

◆ SetParent()

virtual void EDA_ITEM::SetParent ( EDA_ITEM aParent)
inlinevirtualinherited

Reimplemented in LIB_SYMBOL, and PCB_DIMENSION_BASE.

Definition at line 100 of file eda_item.h.

100{ m_parent = aParent; }

References EDA_ITEM::m_parent.

Referenced by BOARD::Add(), FOOTPRINT::Add(), FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), BOARD_NETLIST_UPDATER::addNewFootprint(), SCH_SHEET::AddPin(), PAD::AddPrimitive(), PAD::AddPrimitiveAnnotationBox(), 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(), DIALOG_PIN_PROPERTIES::DIALOG_PIN_PROPERTIES(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), 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(), LIB_SYMBOL::operator=(), FOOTPRINT::operator=(), PCB_PARSER::parseFOOTPRINT_unchecked(), SCH_SEXPR_PARSER::ParseSchematic(), SCH_SEXPR_PARSER::ParseSymbol(), SCH_EDITOR_CONTROL::Paste(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), PCB_CONTROL::Paste(), pasteFootprintItemsToFootprintEditor(), BOARD_EDITOR_CONTROL::PlaceFootprint(), BACK_ANNOTATE::processNetNameChange(), BOARD_COMMIT::Push(), SCH_LIB_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(), PIN_TABLE_DATA_MODEL::SetValue(), SCH_DRAWING_TOOLS::SingleClickPlace(), SCH_LINE_WIRE_BUS_TOOL::startSegments(), SCH_LABEL_BASE::SwapData(), SCH_SHEET::SwapData(), SCH_SYMBOL::SwapData(), SwapItemData(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), and SCH_DRAWING_TOOLS::TwoClickPlace().

◆ SetPosition()

◆ SetSelected()

◆ SetState()

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

Definition at line 131 of file eda_item.h.

132 {
133 if( state )
134 m_status |= type; // state = ON or OFF
135 else
136 m_status &= ~type;
137 }

References EDA_ITEM::m_status.

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

◆ SetStatus()

void EDA_ITEM::SetStatus ( EDA_ITEM_FLAGS  aStatus)
inlineinherited

Definition at line 140 of file eda_item.h.

140{ m_status = aStatus; }

References EDA_ITEM::m_status.

Referenced by BOARD_NETLIST_UPDATER::UpdateNetlist().

◆ SetWireImage()

void EDA_ITEM::SetWireImage ( )
inlineinherited

Definition at line 117 of file eda_item.h.

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 438 of file eda_item.h.

438{ 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 277 of file gerber_file_image.cpp.

278{
279 if( GetLayerParams().m_XRepeatCount < 2 && GetLayerParams().m_YRepeatCount < 2 )
280 return; // Nothing to repeat
281
282 // Duplicate item:
283 for( int ii = 0; ii < GetLayerParams().m_XRepeatCount; ii++ )
284 {
285 for( int jj = 0; jj < GetLayerParams().m_YRepeatCount; jj++ )
286 {
287 // the first gerber item already exists (this is the template)
288 // create duplicate only if ii or jj > 0
289 if( jj == 0 && ii == 0 )
290 continue;
291
292 GERBER_DRAW_ITEM* dupItem = new GERBER_DRAW_ITEM( aItem );
293 VECTOR2I move_vector;
294 move_vector.x = scaletoIU( ii * GetLayerParams().m_StepForRepeat.x,
295 GetLayerParams().m_StepForRepeatMetric );
296 move_vector.y = scaletoIU( jj * GetLayerParams().m_StepForRepeat.y,
297 GetLayerParams().m_StepForRepeatMetric );
298 dupItem->MoveXY( move_vector );
299 AddItemToList( dupItem );
300 }
301 }
302}
void MoveXY(const VECTOR2I &aMoveVector)
Move this object.
int scaletoIU(double aCoord, bool isMetric)
Function scaletoIU converts a distance given in floating point to our internal units.

References AddItemToList(), GetLayerParams(), GERBER_LAYER::m_XRepeatCount, GERBER_LAYER::m_YRepeatCount, GERBER_DRAW_ITEM::MoveXY(), scaletoIU(), VECTOR2< T >::x, and VECTOR2< T >::y.

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

◆ TestFileIsRS274()

bool GERBER_FILE_IMAGE::TestFileIsRS274 ( const wxString &  aFullFileName)
static

Performs a heuristics-based check of whether the file is an RS274 gerber file.

Does not invoke the full parser.

Parameters
aFullFileNameaFullFileName is the full filename of the gerber file.
Returns
True if RS274 file, false otherwise

Definition at line 139 of file readgerb.cpp.

140{
141 char* letter = nullptr;
142 bool foundADD = false;
143 bool foundD0 = false;
144 bool foundD2 = false;
145 bool foundM0 = false;
146 bool foundM2 = false;
147 bool foundStar = false;
148 bool foundX = false;
149 bool foundY = false;
150
151 try
152 {
153 FILE_LINE_READER gerberReader( aFullFileName );
154
155 while( gerberReader.ReadLine() )
156 {
157 // Remove all whitespace from the beginning and end
158 char* line = StrPurge( gerberReader.Line() );
159
160 // Skip empty lines
161 if( *line == 0 )
162 continue;
163
164 // Check that file is not binary (non-printing chars)
165 for( size_t i = 0; i < strlen( line ); i++ )
166 {
167 if( !isascii( line[i] ) )
168 return false;
169 }
170
171 if( strstr( line, "%ADD" ) )
172 foundADD = true;
173
174 if( strstr( line, "D00" ) || strstr( line, "D0" ) )
175 foundD0 = true;
176
177 if( strstr( line, "D02" ) || strstr( line, "D2" ) )
178 foundD2 = true;
179
180 if( strstr( line, "M00" ) || strstr( line, "M0" ) )
181 foundM0 = true;
182
183 if( strstr( line, "M02" ) || strstr( line, "M2" ) )
184 foundM2 = true;
185
186 if( strstr( line, "*" ) )
187 foundStar = true;
188
189 /* look for X<number> or Y<number> */
190 if( ( letter = strstr( line, "X" ) ) != nullptr )
191 {
192 if( isdigit( letter[1] ) )
193 foundX = true;
194 }
195
196 if( ( letter = strstr( line, "Y" ) ) != nullptr )
197 {
198 if( isdigit( letter[1] ) )
199 foundY = true;
200 }
201 }
202 }
203 catch( IO_ERROR& )
204 {
205 return false;
206 }
207
208 // RS-274X
209 if( ( foundD0 || foundD2 || foundM0 || foundM2 ) && foundADD && foundStar
210 && ( foundX || foundY ) )
211 {
212 return true;
213 }
214 // RS-274D. Could be folded into the expression above, but someday
215 // we might want to test for them separately.
216 else if( ( foundD0 || foundD2 || foundM0 || foundM2 ) && !foundADD && foundStar
217 && ( foundX || foundY ) )
218 {
219 return true;
220 }
221
222
223 return false;
224}
A LINE_READER that reads from an open file.
Definition: richio.h:173
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
Definition: ki_exception.h:76

References LINE_READER::Line(), FILE_LINE_READER::ReadLine(), and StrPurge().

Referenced by GERBVIEW_FRAME::LoadListOfGerberAndDrillFiles(), and GERBVIEW_FRAME::unarchiveFiles().

◆ 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 97 of file eda_item.h.

97{ return m_structType; }

References EDA_ITEM::m_structType.

Referenced by CN_CONNECTIVITY_ALGO::Add(), BOARD::Add(), FOOTPRINT::Add(), CN_CLUSTER::Add(), KIGFX::PCB_VIEW::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(), SCH_LABEL_BASE::AutoplaceFields(), EE_SELECTION_TOOL::autostartEvent(), DIALOG_NET_INSPECTOR::buildNewItem(), SCH_SCREENS::buildScreenList(), BOARD_INSPECTION_TOOL::calculateSelectionRatsnest(), PCB_POINT_EDITOR::canAddCorner(), SCH_BUS_WIRE_ENTRY::CanConnect(), SCH_BUS_BUS_ENTRY::CanConnect(), SCH_JUNCTION::CanConnect(), SCH_LABEL_BASE::CanConnect(), SCH_LINE::CanConnect(), SCH_NO_CONNECT::CanConnect(), SCH_SHEET::CanConnect(), SCH_SYMBOL::CanConnect(), SCH_EDIT_TOOL::ChangeTextType(), KI_TEST::CheckFootprint(), KI_TEST::CheckFpPad(), KI_TEST::CheckFpShape(), KI_TEST::CheckFpText(), KI_TEST::CheckFpZone(), CN_VISITOR::checkZoneItemConnection(), LIB_TEXTBOX::ClassOf(), SCH_BITMAP::ClassOf(), SCH_BUS_WIRE_ENTRY::ClassOf(), SCH_BUS_BUS_ENTRY::ClassOf(), SCH_FIELD::ClassOf(), SCH_JUNCTION::ClassOf(), SCH_LABEL::ClassOf(), SCH_DIRECTIVE_LABEL::ClassOf(), SCH_GLOBALLABEL::ClassOf(), SCH_HIERLABEL::ClassOf(), SCH_LINE::ClassOf(), SCH_MARKER::ClassOf(), SCH_NO_CONNECT::ClassOf(), SCH_PIN::ClassOf(), SCH_SCREEN::ClassOf(), SCH_SHEET::ClassOf(), SCH_SHEET_PIN::ClassOf(), SCH_SYMBOL::ClassOf(), SCH_TEXT::ClassOf(), SCH_TEXTBOX::ClassOf(), PCB_GROUP::ClassOf(), BOARD::ClassOf(), BOARD_CONNECTED_ITEM::ClassOf(), FOOTPRINT::ClassOf(), FP_SHAPE::ClassOf(), FP_TEXT::ClassOf(), FP_TEXTBOX::ClassOf(), NETINFO_ITEM::ClassOf(), PAD::ClassOf(), PCB_BITMAP::ClassOf(), PCB_DIM_ALIGNED::ClassOf(), PCB_DIM_ORTHOGONAL::ClassOf(), PCB_DIM_RADIAL::ClassOf(), PCB_DIM_LEADER::ClassOf(), PCB_DIM_CENTER::ClassOf(), PCB_MARKER::ClassOf(), PCB_SHAPE::ClassOf(), PCB_TARGET::ClassOf(), PCB_TEXT::ClassOf(), PCB_TEXTBOX::ClassOf(), PCB_TRACK::ClassOf(), PCB_ARC::ClassOf(), PCB_VIA::ClassOf(), ZONE::ClassOf(), CONNECTION_GRAPH::collectAllDriverValues(), collidesWithArea(), LIB_ITEM::compare(), LIB_FIELD::compare(), LIB_PIN::compare(), LIB_TEXT::compare(), LIB_TEXTBOX::compare(), LIB_SYMBOL::Compare(), PCB_GRID_HELPER::computeAnchors(), EE_GRID_HELPER::computeAnchors(), TEARDROP_MANAGER::ComputePointsOnPadVia(), SCH_BUS_WIRE_ENTRY::ConnectionPropagatesTo(), SCH_LINE::ConnectionPropagatesTo(), EE_RTREE::contains(), BOARD::ConvertKIIDsToCrossReferences(), SCHEMATIC::ConvertKIIDsToRefs(), PAD_TOOL::copyPadSettings(), FOOTPRINT::CoverageRatio(), BOARD_ADAPTER::createLayers(), PCB_BASE_FRAME::CreateNewFootprint(), SCH_DRAWING_TOOLS::createNewText(), ZONE_CREATE_HELPER::createNewZone(), BOARD_ADAPTER::createTrack(), DRC_TOOL::CrossProbe(), SCH_SCREEN::DeleteItem(), DIALOG_DIMENSION_PROPERTIES::DIALOG_DIMENSION_PROPERTIES(), DIALOG_LABEL_PROPERTIES::DIALOG_LABEL_PROPERTIES(), DIALOG_SCH_FIELD_PROPERTIES::DIALOG_SCH_FIELD_PROPERTIES(), DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES(), DIALOG_TEXTBOX_PROPERTIES::DIALOG_TEXTBOX_PROPERTIES(), BOARD_COMMIT::dirtyIntersectingZones(), 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(), DIALOG_GLOBAL_DELETION::DoGlobalDeletions(), EDIT_TOOL::DragArcTrack(), KIGFX::SCH_PAINTER::draw(), KIGFX::PCB_PAINTER::Draw(), DRAWING_TOOL::DrawDimension(), SCH_DRAWING_TOOLS::DrawSheet(), DRAWING_TOOL::DrawVia(), CONNECTION_SUBGRAPH::driverName(), CN_ITEM::Dump(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), EDIT_TOOL::Duplicate(), FOOTPRINT::DuplicateItem(), EDA_ITEM_DESC::EDA_ITEM_DESC(), SCH_EDIT_TOOL::EditField(), SCH_EDIT_TOOL::editFieldText(), SYMBOL_EDITOR_EDIT_TOOL::editTextBoxProperties(), SYMBOL_EDITOR_EDIT_TOOL::editTextProperties(), enclosedByAreaFunc(), CONNECTION_GRAPH::ercCheckBusToBusConflicts(), CONNECTION_GRAPH::ercCheckBusToBusEntryConflicts(), CONNECTION_GRAPH::ercCheckBusToNetConflicts(), CONNECTION_GRAPH::ercCheckFloatingWires(), CONNECTION_GRAPH::ercCheckLabels(), CONNECTION_GRAPH::ercCheckMultipleDrivers(), CONNECTION_GRAPH::ercCheckNoConnects(), DRC_ENGINE::EvalRules(), DRC_ENGINE::EvalZoneConnection(), EDIT_TOOL::FilletTracks(), PCB_SELECTION_TOOL::FilterCollectorForFreePads(), PCB_SELECTION_TOOL::FilterCollectorForHierarchy(), PCB_SELECTION_TOOL::FilterCollectorForMarkers(), PCB_SELECTION_TOOL::FindItem(), NETLIST_EXPORTER_BASE::findNextSymbol(), CADSTAR_ARCHIVE_PARSER::FixTextPositionNoAlignment(), PCB_BASE_FRAME::FocusOnItems(), EDIT_TOOL::FootprintFilter(), PCB_PLUGIN::Format(), PCB_PLUGIN::format(), SCH_SEXPR_PLUGIN::Format(), SCH_LEGACY_PLUGIN::Format(), FormatProbeItem(), FP_TEXT::FP_TEXT(), PCB_POINT_EDITOR::get45DegConstrainer(), CN_ITEM::GetAnchor(), BOARD_ITEM::GetBoard(), SCH_FIELD::GetBoundingBox(), SCH_LABEL_BASE::GetBoundingBox(), PCB_TRACK::GetBoundingBox(), SCH_FIELD::GetCanonicalName(), KIGFX::GERBVIEW_RENDER_SETTINGS::GetColor(), KIGFX::DS_RENDER_SETTINGS::GetColor(), KIGFX::PCB_RENDER_SETTINGS::GetColor(), SCH_MOVE_TOOL::getConnectedDragItems(), SCH_MOVE_TOOL::getConnectedItems(), FOOTPRINT::GetCoverageArea(), CONNECTION_GRAPH::getDefaultConnection(), SCH_FIELD::GetDrawRotation(), getDrilledHoleShape(), CONNECTION_SUBGRAPH::GetDriverPriority(), getFieldFunc(), getInferredSymbols(), SELECTION::GetItemsSortedByTypeAndXY(), PL_EDITOR_FRAME::GetLayoutFromRedoList(), PL_EDITOR_FRAME::GetLayoutFromUndoList(), SCH_FIELD::GetMenuImage(), getMinDist(), SCH_LABEL_BASE::GetMsgPanelInfo(), PCB_DIMENSION_BASE::GetMsgPanelInfo(), PCB_TRACK::GetMsgPanelInfo(), SCH_FIELD::GetName(), CONNECTION_SUBGRAPH::GetNetclassForDriver(), CONNECTIVITY_DATA::GetNetItems(), LIB_SYMBOL::GetNextDrawItem(), BOARD_ITEM::GetParentFootprint(), LIB_SYMBOL::GetPin(), SCH_SYMBOL::GetPinPhysicalPosition(), SCH_FIELD::GetPosition(), KIGFX::SCH_PAINTER::getRenderColor(), ALIGN_DISTRIBUTE_TOOL::GetSelections(), PCB_TRACK::GetSelectMenuText(), SCH_FIELD::GetShownText(), PCB_TEXT::GetShownText(), PCB_TEXTBOX::GetShownText(), CONVERT_TOOL::getStartEndPoints(), KIGFX::SCH_PAINTER::getTextThickness(), getTopLevelGroup(), EDA_ITEM::GetTypeDesc(), PCB_EXPR_TYPE_REF::GetValue(), GROUP_TOOL::Group(), PCB_SELECTION_TOOL::GuessSelectionCandidates(), hasDrilledHole(), hash_fp_item(), EE_SELECTION_TOOL::highlight(), PCB_SELECTION_TOOL::highlightInternal(), BOARD_INSPECTION_TOOL::HighlightItem(), BOARD_INSPECTION_TOOL::highlightNet(), highlightNet(), SCH_FIELD::HitTest(), SCH_LABEL_BASE::HitTest(), PCB_SELECTION_TOOL::hitTestDistance(), SCH_EDIT_TOOL::Init(), ROUTER_TOOL::InlineBreakTrack(), ROUTER_TOOL::InlineDrag(), DRC_RTREE::Insert(), EE_RTREE::insert(), EE_COLLECTOR::Inspect(), GENERAL_COLLECTOR::Inspect(), BOARD_INSPECTION_TOOL::InspectClearance(), BOARD_INSPECTION_TOOL::InspectConstraints(), BOARD_INSPECTION_TOOL::InspectDRCError(), intersectsAreaFunc(), ARRAY_CREATOR::Invoke(), CONNECTIVITY_DATA::IsConnectedOnLayer(), isCopper(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingLineWireOrBus(), PNS_KICAD_IFACE_BASE::IsFlashedOnLayer(), CADSTAR_PCB_ARCHIVE_LOADER::isFootprint(), SCH_FIELD::IsHypertext(), isKeepoutZone(), isMaskAperture(), isNPTHPad(), PCB_TRACK::IsNull(), isNullAperture(), SCH_LINE::IsParallel(), isPlatedFunc(), SCH_FIELD::IsReplaceable(), PNS::ROUTER::isStartingPointRoutable(), SCH_ITEM::IsType(), itemIsIncludedByFilter(), PCB_SELECTION_TOOL::itemPassesFilter(), CLIPBOARD_IO::Load(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), CADSTAR_SCH_ARCHIVE_LOADER::loadHierarchicalSheetPins(), CADSTAR_SCH_ARCHIVE_LOADER::loadNets(), EE_SELECTION_TOOL::Main(), SCH_MOVE_TOOL::Main(), SYMBOL_EDITOR_MOVE_TOOL::Main(), EDIT_POINTS_FACTORY::Make(), NETLIST_EXPORTER_XML::makeListOfNets(), PCB_POINT_EDITOR::makePoints(), CONVERT_TOOL::makePolysFromChainedSegs(), SCH_SCREEN::MarkConnections(), CONNECTIVITY_DATA::MarkItemNetAsDirty(), CN_CONNECTIVITY_ALGO::markItemNetAsDirty(), SCH_FIELD::Matches(), memberOfFunc(), SCH_LINE::MergeOverlap(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), SCH_MOVE_TOOL::moveItem(), SCH_EDITOR_CONTROL::nextMatch(), DIALOG_DRC::OnDRCItemSelected(), FOOTPRINT_EDIT_FRAME::OnEditItemRequest(), PCB_EDIT_FRAME::OnEditItemRequest(), EDA_3D_CANVAS::OnMouseMove(), CN_VISITOR::operator()(), BOARD_ITEM::ptr_cmp::operator()(), BOARD::cmp_items::operator()(), BOARD::cmp_drawings::operator()(), PCB_SHAPE::cmp_drawings::operator()(), FOOTPRINT::cmp_drawings::operator()(), KI_TEST::kitest_cmp_drawings::operator()(), PCB_TRACK::cmp_tracks::operator()(), LIB_ITEM::operator<(), SCH_ITEM::operator<(), SCH_BUS_ENTRY_BASE::operator<(), SCH_FIELD::operator<(), SCH_JUNCTION::operator<(), SCH_LINE::operator<(), SCH_SHEET::operator<(), SCH_SYMBOL::operator<(), SCH_TEXT::operator<(), SCH_TEXTBOX::operator<(), PCB_BITMAP::operator=(), SCH_BITMAP::operator=(), SCH_SYMBOL::operator=(), SCH_SHEET::operator=(), LIB_ITEM::operator==(), PAD::PAD(), EDIT_TOOL::PadFilter(), BOARD_EDITOR_CONTROL::PageSettings(), BOARD_COMMIT::parentObject(), SCH_EDITOR_CONTROL::Paste(), PCB_CONTROL::Paste(), DRAWING_TOOL::PlaceImportedGraphics(), SCH_FIELD::Plot(), SCH_LABEL_BASE::Plot(), BRDITEMS_PLOTTER::PlotPcbGraphicItem(), SCH_FIELD::Print(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::processItem(), BACK_ANNOTATE::processNetNameChange(), CONNECTION_GRAPH::processSubGraphs(), SCH_EDIT_TOOL::Properties(), SYMBOL_EDITOR_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::RefreshZoomDependentItems(), BOARD::Remove(), CN_CONNECTIVITY_ALGO::Remove(), FOOTPRINT::Remove(), EE_RTREE::remove(), SCH_SCREEN::Remove(), KIGFX::PCB_VIEW::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(), CONNECTION_GRAPH::resolveAllDrivers(), SCHEMATIC::ResolveCrossReference(), PCB_PARSER::resolveGroups(), SCH_LABEL_BASE::ResolveTextVar(), DS_PROXY_UNDO_ITEM::Restore(), PL_EDITOR_FRAME::RollbackFromUndo(), SCH_EDIT_TOOL::Rotate(), DRC_TEST_PROVIDER_EDGE_CLEARANCE::Run(), DRC_TEST_PROVIDER_PHYSICAL_CLEARANCE::Run(), DRC_TEST_PROVIDER_TEXT_DIMS::Run(), DRC_TEST_PROVIDER_MATCHED_LENGTH::runInternal(), EE_TOOL_BASE< T >::saveCopyInUndoList(), PCB_BASE_EDIT_FRAME::saveCopyInUndoList(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_SEXPR_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN_CACHE::savePin(), SCH_SEXPR_PLUGIN_CACHE::savePin(), CLIPBOARD_IO::SaveSelection(), SCH_SEXPR_PLUGIN_CACHE::saveSymbolDrawItem(), SCH_LEGACY_PLUGIN_CACHE::saveText(), SCH_SEXPR_PLUGIN_CACHE::saveText(), SCH_SEXPR_PLUGIN::saveText(), SCH_SEXPR_PLUGIN_CACHE::saveTextBox(), SCH_ITEM::Schematic(), SCH_SCREEN::Schematic(), PCB_SELECTION_TOOL::select(), PCB_SELECTION_TOOL::Selectable(), EE_SELECTION_TOOL::Selectable(), PCB_SELECTION_TOOL::selectSameSheet(), PCB_SELECTION_TOOL::selectUnconnected(), PCB_POINT_EDITOR::setAltConstraint(), SCH_FIELD::SetId(), ITEM_PICKER::SetItem(), SCH_FIELD::SetPosition(), PCB_EDIT_FRAME::SetTrackSegmentWidth(), PCB_EDIT_FRAME::ShowFindDialog(), SCH_EDIT_FRAME::ShowFindReplaceDialog(), BOARD_COMMIT::Stage(), PNS::LINE_PLACER::Start(), SCH_EDIT_TOOL::Swap(), EDIT_TOOL::Swap(), PCB_GROUP::SwapData(), FOOTPRINT::SwapData(), PAD::SwapData(), PCB_DIM_ALIGNED::SwapData(), PCB_DIM_ORTHOGONAL::SwapData(), PCB_DIM_RADIAL::SwapData(), PCB_DIM_LEADER::SwapData(), PCB_DIM_CENTER::SwapData(), PCB_TARGET::SwapData(), PCB_TEXT::SwapData(), PCB_TEXTBOX::SwapData(), PCB_TRACK::SwapData(), PCB_ARC::SwapData(), PCB_VIA::SwapData(), ZONE::SwapData(), PCB_BITMAP::SwapData(), SCH_BITMAP::SwapData(), SCH_FIELD::SwapData(), SCH_JUNCTION::SwapData(), SCH_NO_CONNECT::SwapData(), SCH_SHEET::SwapData(), SCH_SHEET_PIN::SwapData(), SCH_SYMBOL::SwapData(), SwapItemData(), DRC_TEST_PROVIDER_EDGE_CLEARANCE::testAgainstEdge(), DRC_TEST_PROVIDER_PHYSICAL_CLEARANCE::testItemAgainstItem(), DRC_TEST_PROVIDER_COPPER_CLEARANCE::testItemAgainstZone(), DRC_TEST_PROVIDER_PHYSICAL_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(), DRC_TEST_PROVIDER_COPPER_CLEARANCE::testTrackClearances(), CONNECTIVITY_DATA::TestTrackEndpointDangling(), DIALOG_LABEL_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_PROPERTIES::TransferDataToWindow(), DIALOG_SYMBOL_FIELDS_TABLE::TransferDataToWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_DIMENSION_PROPERTIES::TransferDataToWindow(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::TransferDataToWindow(), PCB_TRACK::TransformShapeWithClearanceToPolygon(), SCH_LINE_WIRE_BUS_TOOL::TrimOverLappingWires(), SCH_DRAWING_TOOLS::TwoClickPlace(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), EE_SELECTION_TOOL::unhighlight(), PCB_SELECTION_TOOL::unhighlightInternal(), KIGFX::PCB_VIEW::Update(), SCH_SHEET_PATH::UpdateAllScreenReferences(), DIALOG_DIMENSION_PROPERTIES::updateDimensionFromDialog(), DIALOG_SCH_FIELD_PROPERTIES::UpdateField(), PL_POINT_EDITOR::updateItem(), PCB_POINT_EDITOR::updateItem(), EE_TOOL_BASE< T >::updateItem(), SCH_BASE_FRAME::UpdateItem(), PCB_CONTROL::UpdateMessagePanel(), 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(), SCH_SHEET::Visit(), GERBER_DRAW_ITEM::Visit(), PCB_TRACK::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 LIB_PIN, SCH_PIN, GERBER_DRAW_ITEM, DS_PROXY_VIEW_ITEM, KIGFX::ORIGIN_VIEWITEM, KIGFX::PREVIEW::ARC_ASSISTANT, KIGFX::PREVIEW::CENTRELINE_RECT_ITEM, KIGFX::PREVIEW::POLYGON_ITEM, KIGFX::PREVIEW::RULER_ITEM, KIGFX::PREVIEW::SELECTION_AREA, KIGFX::PREVIEW::TWO_POINT_ASSISTANT, EDIT_POINTS, FOOTPRINT, FP_TEXT, PAD, PCB_DIMENSION_BASE, PCB_DIM_CENTER, PCB_MARKER, PCB_SHAPE, PCB_TRACK, RATSNEST_VIEW_ITEM, ROUTER_PREVIEW_ITEM, and MY_DRAWING.

Definition at line 254 of file eda_item.cpp.

255{
256 // Basic fallback
257 return GetBoundingBox();
258}
virtual const BOX2I GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
Definition: eda_item.cpp:74

References EDA_ITEM::GetBoundingBox().

Referenced by GERBVIEW_FRAME::GetDocumentExtents(), EDIT_TOOL::Rotate(), PCB_DIMENSION_BASE::ViewBBox(), and PCB_SHAPE::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 DS_PROXY_VIEW_ITEM, KIGFX::PREVIEW::SIMPLE_OVERLAY_ITEM, EDIT_POINTS, RATSNEST_VIEW_ITEM, ROUTER_PREVIEW_ITEM, MY_DRAWING, KIGFX::PREVIEW::ARC_ASSISTANT, KIGFX::PREVIEW::RULER_ITEM, KIGFX::PREVIEW::SELECTION_AREA, KIGFX::PREVIEW::TWO_POINT_ASSISTANT, KIGFX::ORIGIN_VIEWITEM, KIGFX::VIEW_GROUP, and KIGFX::VIEW_OVERLAY.

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 LIB_FIELD, LIB_ITEM, LIB_PIN, LIB_SHAPE, LIB_SYMBOL, LIB_TEXT, LIB_TEXTBOX, SCH_BITMAP, SCH_BUS_ENTRY_BASE, SCH_ITEM, SCH_JUNCTION, SCH_LABEL_BASE, SCH_GLOBALLABEL, SCH_LINE, SCH_MARKER, SCH_NO_CONNECT, SCH_PIN, SCH_SHAPE, SCH_SHEET, SCH_SYMBOL, SCH_TEXT, GERBER_DRAW_ITEM, BOARD_ITEM, DS_DRAW_ITEM_BASE, DS_PROXY_VIEW_ITEM, KIGFX::ORIGIN_VIEWITEM, PCB_GROUP, KIGFX::PREVIEW::ARC_ASSISTANT, KIGFX::PREVIEW::RULER_ITEM, KIGFX::PREVIEW::SIMPLE_OVERLAY_ITEM, KIGFX::PREVIEW::TWO_POINT_ASSISTANT, EDIT_POINTS, FOOTPRINT, FP_TEXT, FP_TEXTBOX, PAD, PCB_BITMAP, PCB_MARKER, PCB_TRACK, PCB_VIA, RATSNEST_VIEW_ITEM, ROUTER_PREVIEW_ITEM, ZONE, and MY_DRAWING.

Definition at line 261 of file eda_item.cpp.

262{
263 // Basic fallback
264 aCount = 1;
265 aLayers[0] = 0;
266}

◆ 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 GERBER_DRAW_ITEM, PCB_GROUP, FOOTPRINT, FP_SHAPE, FP_TEXT, FP_TEXTBOX, PAD, PCB_BITMAP, PCB_SHAPE, PCB_TEXT, PCB_TEXTBOX, PCB_TRACK, PCB_VIA, ZONE, and FP_ZONE.

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(), and PCB_GRID_HELPER::queryVisible().

◆ viewPrivData()

◆ Visit()

INSPECT_RESULT GERBER_FILE_IMAGE::Visit ( INSPECTOR  inspector,
void *  testData,
const std::vector< KICAD_T > &  aScanTypes 
)
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 aScanTypes, 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.
aScanTypesWhich KICAD_T types are of interest and the order in which they should be processed.
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 373 of file gerber_file_image.cpp.

375{
376 for( KICAD_T scanType : aScanTypes )
377 {
378 if( scanType == GERBER_DRAW_ITEM_T )
379 {
380 if( IterateForward( GetItems(), inspector, testData, { scanType } ) == INSPECT_RESULT::QUIT )
382 }
383 }
384
386}
static INSPECT_RESULT IterateForward(std::deque< T > &aList, INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &scanTypes)
This changes first parameter to avoid the DList and use the main queue instead.
Definition: eda_item.h:302
@ GERBER_DRAW_ITEM_T
Definition: typeinfo.h:214

References CONTINUE, GERBER_DRAW_ITEM_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 453 of file gerber_file_image.h.

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

◆ m_aperture_macros

APERTURE_MACRO_SET GERBER_FILE_IMAGE::m_aperture_macros

Definition at line 441 of file gerber_file_image.h.

Referenced by FindApertureMacro(), and ReadApertureMacro().

◆ m_ArcRadius

int GERBER_FILE_IMAGE::m_ArcRadius

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

Definition at line 415 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

state of gerber analysis command

Definition at line 405 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

int GERBER_FILE_IMAGE::m_Current_Tool

◆ m_CurrentPos

VECTOR2I GERBER_FILE_IMAGE::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

◆ m_FmtLen

wxSize GERBER_FILE_IMAGE::m_FmtLen

◆ m_FmtScale

wxSize GERBER_FILE_IMAGE::m_FmtScale

◆ m_forceVisible

bool EDA_ITEM::m_forceVisible
protectedinherited

◆ m_GBRLayerParams

GERBER_LAYER GERBER_FILE_IMAGE::m_GBRLayerParams

Definition at line 458 of file gerber_file_image.h.

Referenced by GetLayerParams(), and ResetDefaultValues().

◆ m_GerbMetric

◆ m_GraphicLayer

int GERBER_FILE_IMAGE::m_GraphicLayer

◆ m_Has_DCode

bool GERBER_FILE_IMAGE::m_Has_DCode

< True if has DCodes in file or false if no DCodes found. Perhaps deprecated RS274D file.

Definition at line 424 of file gerber_file_image.h.

Referenced by ExecuteRS274XCommand(), GERBVIEW_FRAME::Read_GERBER_File(), EXCELLON_IMAGE::readToolInformation(), and ResetDefaultValues().

◆ m_Has_MissingDCode

bool GERBER_FILE_IMAGE::m_Has_MissingDCode

◆ m_hasNegativeItems

int GERBER_FILE_IMAGE::m_hasNegativeItems
private

True if the image is negative or has some negative items.

Used to optimize drawing because when there are no negative items screen refresh does not need to build an intermediate bitmap specific to this image.

  • -1 negative items are.
  • 0 no negative items found.
  • 1 have negative items found.

Definition at line 474 of file gerber_file_image.h.

Referenced by HasNegativeItems(), and ResetDefaultValues().

◆ m_IJPos

VECTOR2I GERBER_FILE_IMAGE::m_IJPos

IJ coord (for arcs & circles )

True if a IJ coord was read (for arcs & circles ).

Definition at line 409 of file gerber_file_image.h.

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

◆ m_ImageJustifyOffset

VECTOR2I GERBER_FILE_IMAGE::m_ImageJustifyOffset

Image Justify Offset on XY axis (default = 0,0)

Definition at line 382 of file gerber_file_image.h.

Referenced by DisplayImageInfo(), ExecuteRS274XCommand(), GERBER_DRAW_ITEM::GetABPosition(), GERBER_DRAW_ITEM::GetXYPosition(), and ResetDefaultValues().

◆ m_ImageJustifyXCenter

bool GERBER_FILE_IMAGE::m_ImageJustifyXCenter

Image Justify Center on X axis (default = false)

Definition at line 380 of file gerber_file_image.h.

Referenced by DisplayImageInfo(), ExecuteRS274XCommand(), and ResetDefaultValues().

◆ m_ImageJustifyYCenter

bool GERBER_FILE_IMAGE::m_ImageJustifyYCenter

Image Justify Center on Y axis (default = false)

Definition at line 381 of file gerber_file_image.h.

Referenced by DisplayImageInfo(), ExecuteRS274XCommand(), and ResetDefaultValues().

◆ m_ImageName

wxString GERBER_FILE_IMAGE::m_ImageName

Image name, from IN <name>* command.

Definition at line 370 of file gerber_file_image.h.

Referenced by DisplayImageInfo(), ExecuteRS274XCommand(), ResetDefaultValues(), and GERBVIEW_FRAME::UpdateTitleAndInfo().

◆ m_ImageNegative

◆ m_ImageOffset

VECTOR2I GERBER_FILE_IMAGE::m_ImageOffset

Coord Offset, from IO command.

Definition at line 387 of file gerber_file_image.h.

Referenced by ExecuteRS274XCommand(), GERBER_DRAW_ITEM::GetABPosition(), GERBER_DRAW_ITEM::GetXYPosition(), and ResetDefaultValues().

◆ m_ImageRotation

int GERBER_FILE_IMAGE::m_ImageRotation

Image rotation (0, 90, 180, 270 only) in degrees.

Definition at line 391 of file gerber_file_image.h.

Referenced by DisplayImageInfo(), ExecuteRS274XCommand(), GERBER_DRAW_ITEM::GetABPosition(), GERBER_DRAW_ITEM::GetXYPosition(), and ResetDefaultValues().

◆ m_InUse

bool GERBER_FILE_IMAGE::m_InUse

true if this image is currently in use (a file is loaded in it) false if it must be not drawn

Definition at line 365 of file gerber_file_image.h.

Referenced by GetDcodesCount(), EXCELLON_IMAGE::LoadFile(), LoadGerberFile(), GERBVIEW_CONTROL::ReloadAllLayers(), ResetDefaultValues(), sortFileExtension(), and sortZorder().

◆ m_IsX2_file

bool GERBER_FILE_IMAGE::m_IsX2_file

◆ m_Iterpolation

◆ m_Last_Pen_Command

int GERBER_FILE_IMAGE::m_Last_Pen_Command

Current or last pen state (0..9, set by Dn option with n < 10.

Definition at line 403 of file gerber_file_image.h.

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

◆ m_LastArcDataType

◆ m_LastCoordIsIJPos

bool GERBER_FILE_IMAGE::m_LastCoordIsIJPos

A value ( = radius in circular routing in Excellon files ).

Definition at line 412 of file gerber_file_image.h.

Referenced by Execute_DCODE_Command(), ReadIJCoord(), and ResetDefaultValues().

◆ m_LineNum

int GERBER_FILE_IMAGE::m_LineNum

Line number of the gerber file while reading.

Definition at line 406 of file gerber_file_image.h.

Referenced by ExecuteRS274XCommand(), GetEndOfBlock(), GetNextLine(), LoadGerberFile(), ReadApertureMacro(), ReadRS274XCommand(), and ResetDefaultValues().

◆ m_LocalRotation

double GERBER_FILE_IMAGE::m_LocalRotation

Local rotation added to m_ImageRotation.

Note
This value is stored in 0.1 degrees

Definition at line 392 of file gerber_file_image.h.

Referenced by ExecuteRS274XCommand(), ResetDefaultValues(), and GERBER_DRAW_ITEM::SetLayerParameters().

◆ m_MD5_value

wxString GERBER_FILE_IMAGE::m_MD5_value

MD5 value found in a TF.MD5 command.

Definition at line 375 of file gerber_file_image.h.

Referenced by ExecuteRS274XCommand(), and ResetDefaultValues().

◆ m_messagesList

wxArrayString GERBER_FILE_IMAGE::m_messagesList
private

Definition at line 462 of file gerber_file_image.h.

Referenced by AddMessageToList(), ClearMessageList(), and GetMessages().

◆ m_MirrorA

bool GERBER_FILE_IMAGE::m_MirrorA

true: mirror / axis A (X)

Definition at line 399 of file gerber_file_image.h.

Referenced by ExecuteRS274XCommand(), ResetDefaultValues(), and GERBER_DRAW_ITEM::SetLayerParameters().

◆ m_MirrorB

bool GERBER_FILE_IMAGE::m_MirrorB

true: mirror / axis B (Y)

Definition at line 400 of file gerber_file_image.h.

Referenced by ExecuteRS274XCommand(), ResetDefaultValues(), and GERBER_DRAW_ITEM::SetLayerParameters().

◆ m_NetAttributeDict

◆ m_NetnamesList

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

◆ m_NoTrailingZeros

◆ m_Offset

VECTOR2I GERBER_FILE_IMAGE::m_Offset

◆ m_parent

◆ m_PartString

wxString GERBER_FILE_IMAGE::m_PartString

string found in a TF.Part command

Definition at line 376 of file gerber_file_image.h.

Referenced by ExecuteRS274XCommand(), and ResetDefaultValues().

◆ m_PolygonFillMode

bool GERBER_FILE_IMAGE::m_PolygonFillMode

◆ m_PolygonFillModeState

int GERBER_FILE_IMAGE::m_PolygonFillModeState

a collection of APERTURE_MACROS, sorted by name

Definition at line 438 of file gerber_file_image.h.

Referenced by Execute_DCODE_Command(), Execute_G_Command(), and ResetDefaultValues().

◆ m_PositiveDrawColor

COLOR4D GERBER_FILE_IMAGE::m_PositiveDrawColor

The color used to draw positive items.

Definition at line 368 of file gerber_file_image.h.

Referenced by GERBER_FILE_IMAGE(), and GetPositiveDrawColor().

◆ m_PreviousPos

VECTOR2I GERBER_FILE_IMAGE::m_PreviousPos

old current specified coord for plot

Definition at line 408 of file gerber_file_image.h.

Referenced by Execute_DCODE_Command(), EXCELLON_IMAGE::Execute_Drill_Command(), and ResetDefaultValues().

◆ m_Relative

bool GERBER_FILE_IMAGE::m_Relative

◆ m_Scale

VECTOR2I GERBER_FILE_IMAGE::m_Scale

scale (X and Y) of layer.

Definition at line 396 of file gerber_file_image.h.

Referenced by ExecuteRS274XCommand(), ResetDefaultValues(), and GERBER_DRAW_ITEM::SetLayerParameters().

◆ m_Selected_Tool

◆ m_status

◆ m_structType

KICAD_T EDA_ITEM::m_structType
privateinherited

Run time identification, keep private so it can never be changed after a ctor sets it.

See comment near SetType() regarding virtual functions.

Definition at line 505 of file eda_item.h.

Referenced by EDA_ITEM::IsType(), EDA_ITEM::operator=(), and EDA_ITEM::Type().

◆ m_SwapAxis

bool GERBER_FILE_IMAGE::m_SwapAxis

false if A = X and B = Y (default); true if A = Y, B = X

Definition at line 397 of file gerber_file_image.h.

Referenced by ExecuteRS274XCommand(), ResetDefaultValues(), and GERBER_DRAW_ITEM::SetLayerParameters().

◆ m_Uuid

const KIID EDA_ITEM::m_Uuid
inherited

Definition at line 492 of file eda_item.h.

Referenced by FIELDS_EDITOR_GRID_DATA_MODEL::AddColumn(), SCH_SYMBOL::AddHierarchicalReference(), RC_ITEM::AddItem(), SCH_EDIT_FRAME::AnnotateSymbols(), FIELDS_EDITOR_GRID_DATA_MODEL::ApplyData(), KI_TEST::CheckFpPad(), KI_TEST::CheckFpShape(), KI_TEST::CheckFpText(), KI_TEST::CheckFpZone(), SCH_SHEET_PATH::Cmp(), SCHEMATIC::ConvertRefsToKIIDs(), MICROWAVE_TOOL::createMicrowaveInductor(), ZONE_FILLER_TOOL::DirtyZone(), DRAWING_TOOL::DrawVia(), LIB_SYMBOL::Duplicate(), BOARD_ITEM::Duplicate(), FOOTPRINT::Duplicate(), SCH_ITEM::Duplicate(), FOOTPRINT::DuplicateItem(), PCB_EDIT_FRAME::ExchangeFootprint(), PAD_TOOL::explodePad(), SCH_SHEET_LIST::FillItemMap(), BOARD::FillItemMap(), SCH_EDITOR_CONTROL::FindSymbolAndItem(), SCH_EDIT_FRAME::FocusOnItem(), PCB_PLUGIN::format(), SCH_SEXPR_PLUGIN::Format(), SCH_PIN::GetDefaultNetName(), BOARD::GetItem(), SCH_SHEET_LIST::GetItem(), PAD::GetMsgPanelInfo(), DIALOG_BOARD_REANNOTATE::GetNewRefDes(), FP_SHAPE::GetParentAsString(), FP_TEXT::GetParentAsString(), FP_TEXTBOX::GetParentAsString(), PAD::GetParentAsString(), SCH_REFERENCE::GetPath(), SCH_MARKER::GetUUID(), PCB_MARKER::GetUUID(), FIELDS_EDITOR_GRID_DATA_MODEL::GetValue(), FIELDS_EDITOR_GRID_DATA_MODEL::groupMatch(), ZONE::HigherPriority(), SCH_SHEET_PATH::IsContainedWithin(), LEGACY_PLUGIN::loadFOOTPRINT(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), PCB_EDIT_FRAME::LoadFootprints(), LEGACY_PLUGIN::loadPCB_TARGET(), LEGACY_PLUGIN::loadPCB_TEXT(), SCH_LEGACY_PLUGIN::loadSymbol(), SYMBOL_EDIT_FRAME::LoadSymbolFromSchematic(), LEGACY_PLUGIN::loadTrackList(), PNS::LOGGER::Log(), NETLIST_EXPORTER_XML::makeSymbols(), SCH_EDIT_FRAME::mapExistingAnnotation(), BOARD_ITEM::ptr_cmp::operator()(), BOARD::cmp_items::operator()(), BOARD::cmp_drawings::operator()(), PCB_SHAPE::cmp_drawings::operator()(), FOOTPRINT::cmp_drawings::operator()(), FOOTPRINT::cmp_zones::operator()(), FOOTPRINT::cmp_pads::operator()(), PCB_TRACK::cmp_tracks::operator()(), SCH_ITEM::operator<(), SCH_SYMBOL::operator<(), PAD::PAD(), SCH_SEXPR_PARSER::ParseSchematic(), SCH_EDITOR_CONTROL::Paste(), SCH_SHEET_PATH::PathAsString(), SCH_SHEET_PATH::PathWithoutRootUuid(), FIELDS_EDITOR_GRID_DATA_MODEL::RemoveColumn(), SCH_SCREENS::ReplaceDuplicateTimeStamps(), SCH_SYMBOL::ReplaceInstanceSheetPath(), PCB_PARSER::resolveGroups(), SCH_SEXPR_PLUGIN::saveBitmap(), SCH_SEXPR_PLUGIN::saveBusEntry(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), SCH_SEXPR_PLUGIN::saveJunction(), SCH_SEXPR_PLUGIN::saveLine(), SCH_SEXPR_PLUGIN::saveNoConnect(), SCH_EDIT_FRAME::SaveProject(), SCH_SEXPR_PLUGIN::saveShape(), SCH_LEGACY_PLUGIN::saveSheet(), SCH_SEXPR_PLUGIN::saveSheet(), SCH_LEGACY_PLUGIN::saveSymbol(), SCH_SEXPR_PLUGIN::saveSymbol(), SCH_SEXPR_PLUGIN::saveText(), SCH_SEXPR_PLUGIN::saveTextBox(), SCH_REFERENCE::SCH_REFERENCE(), SCH_SHEET::SCH_SHEET(), SCH_SYMBOL::SCH_SYMBOL(), RC_ITEM::SetItems(), FIELDS_EDITOR_GRID_DATA_MODEL::SetValue(), SwapItemData(), DRC_TEST_PROVIDER_EDGE_CLEARANCE::testAgainstEdge(), testGroupEqual(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), SCH_EDITOR_CONTROL::updatePastedSheet(), SCH_EDITOR_CONTROL::updatePastedSymbol(), and NETLIST_EXPORTER_ORCADPCB2::WriteNetlist().

◆ m_viewPrivData

VIEW_ITEM_DATA* KIGFX::VIEW_ITEM::m_viewPrivData
privateinherited

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