KiCad PCB EDA Suite
GERBER_FILE_IMAGE Class Reference

Class GERBER_FILE_IMAGE holds the Image data and parameters for one gerber file and layer parameters (TODO: move them in GERBER_LAYER class. More...

#include <gerber_file_image.h>

Inheritance diagram for GERBER_FILE_IMAGE:
EDA_ITEM KIGFX::VIEW_ITEM EXCELLON_IMAGE

Public Member Functions

 GERBER_FILE_IMAGE (int layer)
 
virtual ~GERBER_FILE_IMAGE ()
 
wxString GetClass () const override
 Function GetClass returns the class name. More...
 
void Clear_GERBER_FILE_IMAGE ()
 
bool LoadGerberFile (const wxString &aFullFileName)
 Read and load a gerber file. More...
 
const wxArrayString & GetMessages () const
 
int GetDcodesCount ()
 
virtual void ResetDefaultValues ()
 
COLOR4D GetPositiveDrawColor () const
 
GERBER_DRAW_ITEMGetItemsList ()
 Function GetItemsList. More...
 
GERBER_LAYERGetLayerParams ()
 Function GetLayerParams. More...
 
bool HasNegativeItems ()
 Function HasNegativeItems. More...
 
void ClearMessageList ()
 Function ClearMessageList Clear the message list Call it before reading a Gerber file. More...
 
void AddMessageToList (const wxString &aMessage)
 Function AddMessageToList Add a message to the message list. More...
 
void InitToolTable ()
 Function InitToolTable. More...
 
wxPoint ReadXYCoord (char *&Text)
 Function ReadXYCoord Returns the current coordinate type pointed to by XnnYnn Text (XnnnnYmmmm) More...
 
wxPoint ReadIJCoord (char *&Text)
 Function ReadIJCoord Returns the current coordinate type pointed to by InnJnn Text (InnnnJmmmm) These coordinates are relative, so if coordinate is absent, it's value defaults to 0. More...
 
int GCodeNumber (char *&Text)
 
int DCodeNumber (char *&Text)
 
bool Execute_G_Command (char *&text, int G_command)
 
bool Execute_DCODE_Command (char *&text, int D_command)
 
bool ReadRS274XCommand (char *aBuff, unsigned int aBuffSize, char *&aText)
 Function ReadRS274XCommand reads a single RS274X command terminated with a %. More...
 
bool ExecuteRS274XCommand (int aCommand, char *aBuff, unsigned int aBuffSize, char *&aText)
 Function ExecuteRS274XCommand executes 1 command. More...
 
bool ReadApertureMacro (char *aBuff, unsigned int aBuffSize, char *&text, FILE *gerber_file)
 Function ReadApertureMacro reads in an aperture macro and saves it in m_aperture_macros. More...
 
D_CODEGetDCODEOrCreate (int aDCODE, bool aCreateIfNoExist=true)
 Function GetDCODEOrCreate returns a pointer to the D_CODE within this GERBER for the given aDCODE. More...
 
D_CODEGetDCODE (int aDCODE) const
 Function GetDCODE returns a pointer to the D_CODE within this GERBER for the given aDCODE. More...
 
APERTURE_MACROFindApertureMacro (const APERTURE_MACRO &aLookup)
 Function FindApertureMacro looks up a previously read in aperture macro. More...
 
void StepAndRepeatItem (const GERBER_DRAW_ITEM &aItem)
 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) More...
 
void DisplayImageInfo (GERBVIEW_FRAME *aMainFrame)
 Function DisplayImageInfo has knowledge about the frame and how and where to put status information about this object into the frame's message panel. More...
 
void RemoveAttribute (X2_ATTRIBUTE &aAttribute)
 Function RemoveAttribute. More...
 
SEARCH_RESULT Visit (INSPECTOR inspector, void *testData, const KICAD_T scanTypes[]) override
 > More...
 
KICAD_T Type () const
 Function Type() More...
 
void SetTimeStamp (timestamp_t aNewTimeStamp)
 
timestamp_t GetTimeStamp () const
 
EDA_ITEMNext () const
 
EDA_ITEMBack () const
 
EDA_ITEMGetParent () const
 
DHEADGetList () const
 
void SetNext (EDA_ITEM *aNext)
 
void SetBack (EDA_ITEM *aBack)
 
void SetParent (EDA_ITEM *aParent)
 
void SetList (DHEAD *aList)
 
bool IsNew () const
 
bool IsModified () const
 
bool IsMoving () const
 
bool IsDragging () const
 
bool IsWireImage () const
 
bool IsSelected () const
 
bool IsResized () const
 
bool IsHighlighted () const
 
bool IsBrightened () const
 
void SetWireImage ()
 
void SetSelected ()
 
void SetHighlighted ()
 
void SetBrightened ()
 
void ClearSelected ()
 
void ClearHighlighted ()
 
void ClearBrightened ()
 
void SetModified ()
 
int GetState (int type) const
 
void SetState (int type, int state)
 
STATUS_FLAGS GetStatus () const
 
void SetStatus (STATUS_FLAGS aStatus)
 
void SetFlags (STATUS_FLAGS aMask)
 
void ClearFlags (STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
 
STATUS_FLAGS GetFlags () const
 
void SetForceVisible (bool aEnable)
 Function SetForceVisible is used to set and cleag force visible flag used to force the item to be drawn even if it's draw attribute is set to not visible. More...
 
virtual void GetMsgPanelInfo (std::vector< MSG_PANEL_ITEM > &aList)
 Function GetMsgPanelInfo populates aList of MSG_PANEL_ITEM objects with it's internal state for display purposes. More...
 
virtual bool HitTest (const wxPoint &aPosition) const
 Function HitTest tests if aPosition is contained within or on the bounding area of an item. More...
 
virtual const EDA_RECT GetBoundingBox () const
 Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes. More...
 
virtual EDA_ITEMClone () const
 Function Clone creates a duplicate of this item with linked list members set to NULL. More...
 
virtual wxString GetSelectMenuText () const
 Function GetSelectMenuText returns 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 BITMAP_DEF GetMenuImage () const
 Function GetMenuImage returns a pointer to an image to be used in menus. More...
 
virtual bool Matches (wxFindReplaceData &aSearchData, void *aAuxData, wxPoint *aFindLocation)
 Function Matches compares the item against the search criteria in aSearchData. More...
 
bool Replace (wxFindReplaceData &aSearchData, wxString &aText)
 Helper function used in search and replace dialog Function Replace performs a text replace on aText using the find and replace criteria in aSearchData on items that support text find and replace. More...
 
virtual bool Replace (wxFindReplaceData &aSearchData, void *aAuxData=NULL)
 Function Replace performs a text replace using the find and replace criteria in aSearchData on items that support text find and replace. More...
 
virtual bool IsReplaceable () const
 Function IsReplaceable. More...
 
bool operator< (const EDA_ITEM &aItem) const
 Test if another item is less than this object. More...
 
virtual const BOX2I ViewBBox () const override
 Function ViewBBox() returns the bounding box of the item covering all its layers. More...
 
virtual void ViewGetLayers (int aLayers[], int &aCount) const override
 Function ViewGetLayers() Returns the all the layers within the VIEW the object is painted on. More...
 
virtual void ViewDraw (int aLayer, VIEW *aView) const
 Function ViewDraw() Draws the parts of the object belonging to layer aLayer. More...
 
virtual unsigned int ViewGetLOD (int aLayer, VIEW *aView) const
 Function ViewGetLOD() Returns the level of detail (LOD) of the item. More...
 
VIEW_ITEM_DATA * viewPrivData () const
 

Static Public Member Functions

static SEARCH_RESULT IterateForward (EDA_ITEM *listStart, INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
 Function IterateForward walks through the object tree calling the inspector() on each object type requested in scanTypes. More...
 
static bool Sort (const EDA_ITEM *aLeft, const EDA_ITEM *aRight)
 Function Sort is a helper function to be used by the C++ STL sort algorithm for sorting a STL container of EDA_ITEM pointers. More...
 

Public Attributes

DLIST< GERBER_DRAW_ITEMm_Drawings
 
bool m_InUse
 
bool m_IsVisible
 
COLOR4D m_PositiveDrawColor
 
wxString m_FileName
 
wxString m_ImageName
 
bool m_IsX2_file
 
X2_ATTRIBUTE_FILEFUNCTIONm_FileFunction
 
wxString m_MD5_value
 
wxString m_PartString
 
int m_GraphicLayer
 
bool m_ImageNegative
 
bool m_ImageJustifyXCenter
 
bool m_ImageJustifyYCenter
 
wxPoint m_ImageJustifyOffset
 
bool m_GerbMetric
 
bool m_Relative
 
bool m_NoTrailingZeros
 
wxPoint m_ImageOffset
 
wxSize m_FmtScale
 
wxSize m_FmtLen
 
int m_ImageRotation
 
double m_LocalRotation
 
wxPoint m_Offset
 
wxRealPoint m_Scale
 
bool m_SwapAxis
 
bool m_MirrorA
 
bool m_MirrorB
 
int m_Iterpolation
 
int m_Current_Tool
 
int m_Last_Pen_Command
 
int m_CommandState
 
int m_LineNum
 
wxPoint m_CurrentPos
 
wxPoint m_PreviousPos
 
wxPoint m_IJPos
 
FILE * m_Current_File
 
int m_Selected_Tool
 
bool m_Has_DCode
 
bool m_360Arc_enbl
 
bool m_PolygonFillMode
 
int m_PolygonFillModeState
 
APERTURE_MACRO_SET m_aperture_macros
 a collection of APERTURE_MACROS, sorted by name More...
 
GBR_NETLIST_METADATA m_NetAttributeDict
 
wxString m_AperFunction
 
std::map< wxString, int > m_ComponentsList
 
std::map< wxString, int > m_NetnamesList
 

Protected Member Functions

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

Protected Attributes

EDA_ITEMPnext
 next in linked list More...
 
EDA_ITEMPback
 previous in linked list More...
 
DHEADm_List
 which DLIST I am on. More...
 
EDA_ITEMm_Parent
 Linked list: Link (parent struct) More...
 
timestamp_t m_TimeStamp
 Time stamp used for logical links. More...
 
bool m_forceVisible
 Set to true to override the visibility setting of the item. More...
 
STATUS_FLAGS m_Flags
 Flag bits for editing and other uses. More...
 

Private Member Functions

char * GetNextLine (char *aBuff, unsigned int aBuffSize, char *aText, FILE *aFile)
 Function GetNextLine test for an end of line if an end of line is found: read a new line. More...
 
bool GetEndOfBlock (char *aBuff, unsigned int aBuffSize, char *&aText, FILE *aGerberFile)
 

Private Attributes

D_CODEm_Aperture_List [TOOLS_MAX_COUNT]
 Dcode (Aperture) List for this layer (max 999) More...
 
bool m_Exposure
 whether an aperture macro tool is flashed on or off More...
 
GERBER_LAYER m_GBRLayerParams
 
wxArrayString m_messagesList
 
int m_hasNegativeItems
 

Detailed Description

Class GERBER_FILE_IMAGE holds the Image data and parameters for one gerber file and layer parameters (TODO: move them in GERBER_LAYER class.

Definition at line 98 of file gerber_file_image.h.

Constructor & Destructor Documentation

GERBER_FILE_IMAGE::GERBER_FILE_IMAGE ( int  layer)

Definition at line 92 of file gerber_file_image.cpp.

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

92  :
94 {
95  m_GraphicLayer = aLayer; // Graphic layer Number
96  m_IsVisible = true; // must be drawn
97  m_PositiveDrawColor = WHITE; // The color used to draw positive items for this image
98 
99  m_Selected_Tool = 0;
100  m_FileFunction = NULL; // file function parameters
101 
103 
104  for( unsigned ii = 0; ii < DIM( m_Aperture_List ); ii++ )
105  m_Aperture_List[ii] = 0;
106 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
X2_ATTRIBUTE_FILEFUNCTION * m_FileFunction
D_CODE * m_Aperture_List[TOOLS_MAX_COUNT]
Dcode (Aperture) List for this layer (max 999)
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType)
Definition: base_struct.cpp:65
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:162
Definition: colors.h:49
virtual void ResetDefaultValues()
GERBER_FILE_IMAGE::~GERBER_FILE_IMAGE ( )
virtual

Definition at line 109 of file gerber_file_image.cpp.

References DHEAD::DeleteAll(), DIM, m_Aperture_List, m_Drawings, and m_FileFunction.

110 {
112 
113  for( unsigned ii = 0; ii < DIM( m_Aperture_List ); ii++ )
114  {
115  delete m_Aperture_List[ii];
116  }
117 
118  delete m_FileFunction;
119 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
X2_ATTRIBUTE_FILEFUNCTION * m_FileFunction
void DeleteAll()
Function DeleteAll deletes all items on the list and leaves the list empty.
Definition: dlist.cpp:41
D_CODE * m_Aperture_List[TOOLS_MAX_COUNT]
Dcode (Aperture) List for this layer (max 999)
DLIST< GERBER_DRAW_ITEM > m_Drawings

Member Function Documentation

void GERBER_FILE_IMAGE::AddMessageToList ( const wxString &  aMessage)
inline

Function AddMessageToList Add a message to the message list.

Definition at line 261 of file gerber_file_image.h.

Referenced by Execute_DCODE_Command(), Execute_G_Command(), ExecuteRS274XCommand(), and ReadApertureMacro().

262  {
263  m_messagesList.Add( aMessage );
264  }
wxArrayString m_messagesList
EDA_ITEM* EDA_ITEM::Back ( ) const
inlineinherited

Definition at line 218 of file base_struct.h.

References EDA_ITEM::Pback.

Referenced by DHEAD::insert(), and DHEAD::remove().

218 { return Pback; }
EDA_ITEM * Pback
previous in linked list
Definition: base_struct.h:176
void GERBER_FILE_IMAGE::Clear_GERBER_FILE_IMAGE ( )
void EDA_ITEM::ClearBrightened ( )
inlineinherited

Definition at line 244 of file base_struct.h.

References BRIGHTENED, EDA_ITEM::ClearFlags(), and EDA_ITEM::SetModified().

Referenced by GERBVIEW_SELECTION_TOOL::disambiguationMenu(), and SELECTION_TOOL::disambiguationMenu().

244 { ClearFlags( BRIGHTENED ); }
#define BRIGHTENED
item is drawn with a bright contour
Definition: base_struct.h:133
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:265
void EDA_ITEM::ClearFlags ( STATUS_FLAGS  aMask = EDA_ITEM_ALL_FLAGS)
inlineinherited

Definition at line 265 of file base_struct.h.

Referenced by Abort_Edit_Pcb_Text(), Abort_EditEdge(), Abort_Move_ModuleOutline(), Abort_Move_Pad(), Abort_MoveOrCopyModule(), Abort_MoveTrack(), Abort_Zone_Create_Outline(), Abort_Zone_Move_Corner_Or_Outlines(), AbortMoveAndEditTarget(), abortMoveBitmap(), AbortMoveDimensionText(), abortMoveItem(), AbortMoveTextModule(), AbortPinMove(), SCH_SCREEN::addConnectedItemsToBlock(), SCH_EDIT_FRAME::addCurrentItemToList(), PNS_KICAD_IFACE::AddItem(), PCB_EDIT_FRAME::AppendBoardFile(), PCB_EDIT_FRAME::Begin_DrawSegment(), FOOTPRINT_EDIT_FRAME::Begin_Edge_Module(), PCB_EDIT_FRAME::Begin_Zone(), SCH_EDIT_FRAME::BeginSegment(), PCB_EDIT_FRAME::Block_Delete(), PCB_EDIT_FRAME::Block_Flip(), PCB_EDIT_FRAME::Block_Move(), PCB_EDIT_FRAME::Change_Side_Module(), SCH_SCREEN::ClearAnnotation(), EDA_ITEM::ClearBrightened(), EDA_ITEM::ClearHighlighted(), DRAG_LIST::ClearList(), ClearMarkItems(), clearModuleItemFlags(), EDA_ITEM::ClearSelected(), SCH_EDIT_FRAME::ConvertPart(), SCH_EDIT_FRAME::copyBlockItems(), CopyMarkedItems(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyPanelToOptions(), MWAVE::CreateMicrowaveInductor(), FOOTPRINT_EDIT_FRAME::CreateTextModule(), PCB_EDIT_FRAME::Delete_LastCreatedCorner(), PCB_EDIT_FRAME::Delete_Segment_Edge(), DIALOG_LIB_EDIT_PIN::DIALOG_LIB_EDIT_PIN(), PCB_EDIT_FRAME::EditDimension(), PCB_EDIT_FRAME::End_Edge(), FOOTPRINT_EDIT_FRAME::End_Edge_Module(), PCB_EDIT_FRAME::End_Move_Zone_Corner_Or_Outlines(), PCB_EDIT_FRAME::End_Zone(), EraseDragList(), PCB_EDIT_FRAME::Exchange_Module(), ExitSheet(), SCH_SCREEN::GetConnection(), PCB_BASE_FRAME::GlobalChange_PadSettings(), PCB_BASE_FRAME::Import_Pad_Settings(), SCH_JUNCTION::IsSelectStateChanged(), SCH_NO_CONNECT::IsSelectStateChanged(), SCH_MARKER::IsSelectStateChanged(), SCH_BUS_ENTRY_BASE::IsSelectStateChanged(), SCH_BITMAP::IsSelectStateChanged(), SCH_LINE::IsSelectStateChanged(), SCH_TEXT::IsSelectStateChanged(), SCH_SHEET::IsSelectStateChanged(), SCH_COMPONENT::IsSelectStateChanged(), FOOTPRINT_EDIT_FRAME::Load_Module_From_BOARD(), MarkItemsInBloc(), MirrorX(), MirrorY(), moveBitmap(), FOOTPRINT_EDIT_FRAME::OnEditItemRequest(), LIB_EDIT_FRAME::OnEditPin(), FOOTPRINT_EDIT_FRAME::OnLeftClick(), SCH_EDIT_FRAME::OnLeftClick(), PCB_EDIT_FRAME::OnLeftClick(), LIB_EDIT_FRAME::OnRotateItem(), SCH_EDIT_FRAME::OnSelectUnit(), FOOTPRINT_EDIT_FRAME::OpenProjectFiles(), SCH_FIELD::Place(), PCB_EDIT_FRAME::Place_DrawItem(), FOOTPRINT_EDIT_FRAME::Place_EdgeMod(), PCB_EDIT_FRAME::Place_Texte_Pcb(), PCBNEW_CONTROL::placeBoardItems(), PCB_EDIT_FRAME::PlaceDimensionText(), PCB_EDIT_FRAME::PlaceDraggedOrMovedTrackSegment(), PCB_BASE_FRAME::PlaceModule(), PCB_BASE_FRAME::PlacePad(), PCB_EDIT_FRAME::PlaceTarget(), DRAWING_TOOL::PlaceText(), PCB_BASE_FRAME::PlaceTexteModule(), FOOTPRINT_EDIT_FRAME::Process_Special_Functions(), LIB_EDIT_FRAME::Process_Special_Functions(), EDIT_TOOL::Properties(), BOARD_COMMIT::Push(), PCB_BASE_EDIT_FRAME::PutDataInPreviousState(), SCH_EDIT_FRAME::PutDataInPreviousState(), SCH_EDIT_FRAME::RepeatDrawItem(), LIB_EDIT_FRAME::RepeatPinItem(), BOARD_COMMIT::Revert(), PCB_BASE_FRAME::Rotate_Module(), RotateListOfItems(), PCB_BASE_EDIT_FRAME::SaveCopyInUndoList(), SCH_LEGACY_PLUGIN_CACHE::savePin(), FOOTPRINT_VIEWER_FRAME::SelectCurrentFootprint(), SCH_EDIT_FRAME::SetRepeatItem(), PCB_EDIT_FRAME::Start_DragTrackSegmentAndKeepSlope(), PCB_EDIT_FRAME::StartMoveModule(), PCB_EDIT_FRAME::StartMoveOneNodeOrSegment(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

265 { m_Flags &= ~aMask; }
STATUS_FLAGS m_Flags
Flag bits for editing and other uses.
Definition: base_struct.h:186
void EDA_ITEM::ClearHighlighted ( )
inlineinherited

Definition at line 243 of file base_struct.h.

References EDA_ITEM::ClearFlags(), and HIGHLIGHTED.

243 { ClearFlags( HIGHLIGHTED ); }
#define HIGHLIGHTED
item is drawn in normal colors, when the rest is darkened
Definition: base_struct.h:132
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:265
void GERBER_FILE_IMAGE::ClearMessageList ( )
inline

Function ClearMessageList Clear the message list Call it before reading a Gerber file.

Definition at line 252 of file gerber_file_image.h.

253  {
254  m_messagesList.Clear();
255  }
wxArrayString m_messagesList
void EDA_ITEM::ClearSelected ( )
inlineinherited
EDA_ITEM * EDA_ITEM::Clone ( ) const
virtualinherited

Function Clone creates 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 D_PAD, SCH_COMPONENT, MODULE, ZONE_CONTAINER, SCH_SHEET, LIB_PIN, VIA, SEGZONE, SCH_HIERLABEL, SCH_GLOBALLABEL, TRACK, SCH_LABEL, DRAWSEGMENT, LIB_FIELD, DIMENSION, TEXTE_MODULE, SCH_TEXT, SCH_FIELD, SCH_SHEET_PIN, SCH_LINE, SCH_BUS_BUS_ENTRY, LIB_ARC, TEXTE_PCB, SCH_BUS_WIRE_ENTRY, SCH_BITMAP, LIB_TEXT, EDGE_MODULE, LIB_POLYLINE, LIB_RECTANGLE, LIB_BEZIER, LIB_CIRCLE, SCH_MARKER, SCH_NO_CONNECT, PCB_TARGET, SCH_JUNCTION, and KIGFX::ORIGIN_VIEWITEM.

Definition at line 124 of file base_struct.cpp.

References EDA_ITEM::GetClass().

Referenced by PCB_EDIT_FRAME::Block_Duplicate(), SCH_BUS_WIRE_ENTRY::CanConnect(), SCH_BUS_BUS_ENTRY::CanConnect(), CopyMarkedItems(), LIB_PART::CopySelectedItems(), LIB_EDIT_FRAME::copySelectedItems(), BOARD::Duplicate(), DuplicateStruct(), SCH_SCREEN::ExtractWires(), EDA_ITEM::HitTest(), LIB_PART::LIB_PART(), LIB_EDIT_FRAME::LoadOneSymbol(), new_clone(), SCH_EDIT_FRAME::OnCopySchematicItemRequest(), LIB_EDIT_FRAME::pasteClipboard(), SCH_EDIT_FRAME::RepeatDrawItem(), PCB_BASE_EDIT_FRAME::SaveCopyInUndoList(), LIB_PART::SetConversion(), SCH_EDIT_FRAME::SetRepeatItem(), SCH_EDIT_FRAME::SetUndoItem(), LIB_PART::SetUnitCount(), and COMMIT::Stage().

125 {
126  wxCHECK_MSG( false, NULL, wxT( "Clone not implemented in derived class " ) + GetClass() +
127  wxT( ". Bad programmer!" ) );
128 }
virtual wxString GetClass() const =0
Function GetClass returns the class name.
int GERBER_FILE_IMAGE::DCodeNumber ( char *&  Text)

Definition at line 438 of file rs274d.cpp.

References IsNumber.

Referenced by Execute_G_Command().

439 {
440  int ii = 0;
441  char* text;
442  char line[1024];
443 
444  if( Text == NULL )
445  return 0;
446 
447  Text++;
448  text = line;
449  while( IsNumber( *Text ) )
450  *(text++) = *(Text++);
451 
452  *text = 0;
453  ii = atoi( line );
454  return ii;
455 }
#define IsNumber(x)
void GERBER_FILE_IMAGE::DisplayImageInfo ( GERBVIEW_FRAME aMainFrame)

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

Display info about Image Parameters.

Parameters
aMainFrame= the GERBVIEW_FRAME to display messages

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

Definition at line 334 of file gerber_file_image.cpp.

References EDA_DRAW_FRAME::AppendMsgPanel(), BROWN, EDA_DRAW_FRAME::ClearMsgPanel(), CYAN, DARKRED, g_UserUnit, INCHES, m_GraphicLayer, m_ImageJustifyOffset, m_ImageJustifyXCenter, m_ImageJustifyYCenter, m_ImageName, m_ImageNegative, m_ImageRotation, wxPoint::x, and wxPoint::y.

Referenced by GERBVIEW_FRAME::OnLeftClick(), and GERBVIEW_FRAME::UpdateTitleAndInfo().

335 {
336  wxString msg;
337 
338  aMainFrame->ClearMsgPanel();
339 
340  // Display Image name (Image specific)
341  aMainFrame->AppendMsgPanel( _( "Image name" ), m_ImageName, CYAN );
342 
343  // Display graphic layer number used to draw this Image
344  // (not a Gerber parameter but is also image specific)
345  msg.Printf( wxT( "%d" ), m_GraphicLayer + 1 );
346  aMainFrame->AppendMsgPanel( _( "Graphic layer" ), msg, BROWN );
347 
348  // Display Image rotation (Image specific)
349  msg.Printf( wxT( "%d" ), m_ImageRotation );
350  aMainFrame->AppendMsgPanel( _( "Img Rot." ), msg, CYAN );
351 
352  // Display Image polarity (Image specific)
353  msg = m_ImageNegative ? _("Negative") : _("Normal");
354  aMainFrame->AppendMsgPanel( _( "Polarity" ), msg, BROWN );
355 
356  // Display Image justification and offset for justification (Image specific)
357  msg = m_ImageJustifyXCenter ? _("Center") : _("Normal");
358  aMainFrame->AppendMsgPanel( _( "X Justify" ), msg, DARKRED );
359 
360  msg = m_ImageJustifyYCenter ? _("Center") : _("Normal");
361  aMainFrame->AppendMsgPanel( _( "Y Justify" ), msg, DARKRED );
362 
363  if( g_UserUnit == INCHES )
364  msg.Printf( wxT( "X=%f Y=%f" ), Iu2Mils( m_ImageJustifyOffset.x ) / 1000.0,
365  Iu2Mils( m_ImageJustifyOffset.y ) / 1000.0 );
366  else
367  msg.Printf( wxT( "X=%f Y=%f" ), Iu2Millimeter( m_ImageJustifyOffset.x ),
368  Iu2Millimeter( m_ImageJustifyOffset.y ) );
369 
370  aMainFrame->AppendMsgPanel( _( "Image Justify Offset" ), msg, DARKRED );
371 }
Definition: colors.h:54
Definition: common.h:145
Definition: colors.h:59
EDA_UNITS_T g_UserUnit
Global variables definitions.
Definition: common.cpp:57
void AppendMsgPanel(const wxString &textUpper, const wxString &textLower, COLOR4D color, int pad=6)
Append a message to the message panel.
Definition: draw_frame.cpp:812
void ClearMsgPanel(void)
Clear all messages from the message panel.
Definition: draw_frame.cpp:823
Definition: colors.h:62
bool GERBER_FILE_IMAGE::Execute_DCODE_Command ( char *&  text,
int  D_command 
)

Definition at line 584 of file rs274d.cpp.

References AddMessageToList(), DLIST< T >::Append(), SHAPE_POLY_SET::Append(), APT_CIRCLE, fillArcGBRITEM(), fillArcPOLY(), fillFlashedGBRITEM(), fillLineGBRITEM(), FIRST_DCODE, GBR_POLYGON, GERB_INTERPOL_ARC_NEG, GERB_INTERPOL_ARC_POS, GERB_INTERPOL_LINEAR_001X, GERB_INTERPOL_LINEAR_01X, GERB_INTERPOL_LINEAR_10X, GERB_INTERPOL_LINEAR_1X, GetDCODE(), GetItemsList(), DLIST< T >::GetLast(), GetLayerParams(), m_360Arc_enbl, m_Current_Tool, m_CurrentPos, m_Drawings, GERBER_DRAW_ITEM::m_End, m_Exposure, GERBER_DRAW_ITEM::m_Flashed, m_IJPos, D_CODE::m_InUse, m_Iterpolation, m_Last_Pen_Command, D_CODE::m_Num_Dcode, GERBER_DRAW_ITEM::m_Polygon, m_PolygonFillMode, m_PolygonFillModeState, m_PreviousPos, GERBER_DRAW_ITEM::m_Shape, D_CODE::m_Shape, D_CODE::m_Size, GERBER_DRAW_ITEM::m_Start, SHAPE_POLY_SET::NewOutline(), SHAPE_POLY_SET::OutlineCount(), StepAndRepeatItem(), TOOLS_MAX_COUNT, and SHAPE_POLY_SET::Vertex().

585 {
586  wxSize size( 15, 15 );
587 
588  APERTURE_T aperture = APT_CIRCLE;
589  GERBER_DRAW_ITEM* gbritem;
590 
591  int dcode = 0;
592  D_CODE* tool = NULL;
593  wxString msg;
594 
595  if( D_commande >= FIRST_DCODE ) // This is a "Set tool" command
596  {
597  if( D_commande > (TOOLS_MAX_COUNT - 1) )
598  D_commande = TOOLS_MAX_COUNT - 1;
599 
600  // remember which tool is selected, nothing is done with it in this
601  // call
602  m_Current_Tool = D_commande;
603 
604  D_CODE* pt_Dcode = GetDCODE( D_commande );
605  if( pt_Dcode )
606  pt_Dcode->m_InUse = true;
607 
608  return true;
609  }
610  else // D_commande = 0..9: this is a pen command (usually D1, D2 or D3)
611  {
612  m_Last_Pen_Command = D_commande;
613  }
614 
615  if( m_PolygonFillMode ) // Enter a polygon description:
616  {
617  switch( D_commande )
618  {
619  case 1: // code D01 Draw line, exposure ON
620  if( !m_Exposure ) // Start a new polygon outline:
621  {
622  m_Exposure = true;
623  gbritem = new GERBER_DRAW_ITEM( this );
624  m_Drawings.Append( gbritem );
625  gbritem->m_Shape = GBR_POLYGON;
626  gbritem->m_Flashed = false;
627  }
628 
629  switch( m_Iterpolation )
630  {
633  gbritem = m_Drawings.GetLast();
634 
635  fillArcPOLY( gbritem, m_PreviousPos,
637  ( m_Iterpolation == GERB_INTERPOL_ARC_NEG ) ? false : true,
638  m_360Arc_enbl, GetLayerParams().m_LayerNegative );
639  break;
640 
641  default:
642  gbritem = m_Drawings.GetLast();
643 
644  gbritem->m_Start = m_PreviousPos; // m_Start is used as temporary storage
645  if( gbritem->m_Polygon.OutlineCount() == 0 )
646  {
647  gbritem->m_Polygon.NewOutline();
648  gbritem->m_Polygon.Append( VECTOR2I( gbritem->m_Start ) );
649  }
650 
651  gbritem->m_End = m_CurrentPos; // m_End is used as temporary storage
652  gbritem->m_Polygon.Append( VECTOR2I( gbritem->m_End ) );
653  break;
654  }
655 
658  break;
659 
660  case 2: // code D2: exposure OFF (i.e. "move to")
661  if( m_Exposure && GetItemsList() ) // End of polygon
662  {
663  gbritem = m_Drawings.GetLast();
664  gbritem->m_Polygon.Append( gbritem->m_Polygon.Vertex( 0 ) );
665  StepAndRepeatItem( *gbritem );
666  }
667  m_Exposure = false;
670  break;
671 
672  default:
673  return false;
674  }
675  }
676  else
677  {
678  switch( D_commande )
679  {
680  case 1: // code D01 Draw line, exposure ON
681  m_Exposure = true;
682 
683  tool = GetDCODE( m_Current_Tool );
684  if( tool )
685  {
686  size = tool->m_Size;
687  dcode = tool->m_Num_Dcode;
688  aperture = tool->m_Shape;
689  }
690 
691  switch( m_Iterpolation )
692  {
694  gbritem = new GERBER_DRAW_ITEM( this );
695  m_Drawings.Append( gbritem );
696 
697  fillLineGBRITEM( gbritem, dcode, m_PreviousPos,
698  m_CurrentPos, size, GetLayerParams().m_LayerNegative );
699  StepAndRepeatItem( *gbritem );
700  break;
701 
705  wxBell();
706  break;
707 
710  gbritem = new GERBER_DRAW_ITEM( this );
711  m_Drawings.Append( gbritem );
712 
713  fillArcGBRITEM( gbritem, dcode, m_PreviousPos,
714  m_CurrentPos, m_IJPos, size,
716  false : true, m_360Arc_enbl, GetLayerParams().m_LayerNegative );
717  StepAndRepeatItem( *gbritem );
718  break;
719 
720  default:
721  msg.Printf( wxT( "RS274D: DCODE Command: interpol error (type %X)" ),
722  m_Iterpolation );
723  AddMessageToList( msg );
724  break;
725  }
726 
728  break;
729 
730  case 2: // code D2: exposure OFF (i.e. "move to")
731  m_Exposure = false;
733  break;
734 
735  case 3: // code D3: flash aperture
736  tool = GetDCODE( m_Current_Tool );
737  if( tool )
738  {
739  size = tool->m_Size;
740  dcode = tool->m_Num_Dcode;
741  aperture = tool->m_Shape;
742  }
743 
744  gbritem = new GERBER_DRAW_ITEM( this );
745  m_Drawings.Append( gbritem );
746  fillFlashedGBRITEM( gbritem, aperture, dcode, m_CurrentPos,
747  size, GetLayerParams().m_LayerNegative );
748  StepAndRepeatItem( *gbritem );
750  break;
751 
752  default:
753  return false;
754  }
755  }
756 
757  return true;
758 }
void AddMessageToList(const wxString &aMessage)
Function AddMessageToList Add a message to the message list.
D_CODE * GetDCODE(int aDCODE) const
Function GetDCODE returns a pointer to the D_CODE within this GERBER for the given aDCODE...
wxSize m_Size
Horizontal and vertical dimensions.
Definition: dcode.h:94
static void fillArcPOLY(GERBER_DRAW_ITEM *aGbrItem, const wxPoint &aStart, const wxPoint &aEnd, const wxPoint &rel_center, bool aClockwise, bool aMultiquadrant, bool aLayerNegative)
Function fillArcPOLY creates an arc G code when found in poly outlines.
Definition: rs274d.cpp:338
bool m_InUse
false if the aperure (previously defined) is not used to draw something
Definition: dcode.h:102
APERTURE_T m_Shape
shape ( Line, rectangle, circle , oval .. )
Definition: dcode.h:95
void Append(T *aNewElement)
Function Append adds aNewElement to the end of the list.
Definition: dlist.h:177
int OutlineCount() const
Returns the number of outlines in the set
void fillLineGBRITEM(GERBER_DRAW_ITEM *aGbrItem, int Dcode_index, const wxPoint &aStart, const wxPoint &aEnd, wxSize aPenSize, bool aLayerNegative)
Function fillLineGBRITEM initializes a given GBRITEM so that it can draw a linear D code...
Definition: rs274d.cpp:162
VECTOR2< int > VECTOR2I
Definition: vector2d.h:589
SHAPE_POLY_SET m_Polygon
VECTOR2I & Vertex(int aIndex, int aOutline, int aHole)
Returns the index-th vertex in a given hole outline within a given outline
T * GetLast() const
Function GetLast returns the last T* in the list without removing it, or NULL if the list is empty...
Definition: dlist.h:170
#define FIRST_DCODE
Definition: dcode.h:71
APERTURE_T
Enum APERTURE_T is the set of all gerber aperture types allowed, according to page 16 of http://gerbv...
Definition: dcode.h:50
int m_Num_Dcode
D code value ( >= 10 )
Definition: dcode.h:96
int NewOutline()
Creates a new empty polygon in the set and returns its index
bool m_Exposure
whether an aperture macro tool is flashed on or off
Class D_CODE holds a gerber DCODE (also called Aperture) definition.
Definition: dcode.h:82
void fillFlashedGBRITEM(GERBER_DRAW_ITEM *aGbrItem, APERTURE_T aAperture, int Dcode_index, const wxPoint &aPos, wxSize aSize, bool aLayerNegative)
Function fillFlashedGBRITEM initializes a given GBRITEM so that it can draw a circle which is filled ...
Definition: rs274d.cpp:107
DLIST< GERBER_DRAW_ITEM > m_Drawings
GERBER_DRAW_ITEM * GetItemsList()
Function GetItemsList.
#define TOOLS_MAX_COUNT
Definition: dcode.h:73
static void fillArcGBRITEM(GERBER_DRAW_ITEM *aGbrItem, int Dcode_index, const wxPoint &aStart, const wxPoint &aEnd, const wxPoint &aRelCenter, wxSize aPenSize, bool aClockwise, bool aMultiquadrant, bool aLayerNegative)
Function fillArcGBRITEM initializes a given GBRITEM so that it can draw an arc G code.
Definition: rs274d.cpp:211
void StepAndRepeatItem(const GERBER_DRAW_ITEM &aItem)
Function StepAndRepeatItem Gerber format has a command Step an Repeat This function must be called wh...
GERBER_LAYER & GetLayerParams()
Function GetLayerParams.
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Appends a vertex at the end of the given outline/hole (default: the last outline) ...
bool GERBER_FILE_IMAGE::Execute_G_Command ( char *&  text,
int  G_command 
)

Definition at line 458 of file rs274d.cpp.

References AddMessageToList(), SHAPE_POLY_SET::Append(), DCodeNumber(), dummy(), FIRST_DCODE, GC_CIRCLE_NEG_INTERPOL, GC_CIRCLE_POS_INTERPOL, GC_COMMENT, GC_LINEAR_INTERPOL_0P01X, GC_LINEAR_INTERPOL_0P1X, GC_LINEAR_INTERPOL_10X, 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_001X, GERB_INTERPOL_LINEAR_01X, GERB_INTERPOL_LINEAR_10X, GERB_INTERPOL_LINEAR_1X, GetDCODE(), GetItemsList(), DLIST< T >::GetLast(), X2_ATTRIBUTE::IsFileFunction(), m_360Arc_enbl, m_Current_File, m_Current_Tool, m_Drawings, m_Exposure, m_FileFunction, m_GerbMetric, D_CODE::m_InUse, m_Iterpolation, m_LineNum, GERBER_DRAW_ITEM::m_Polygon, m_PolygonFillMode, m_PolygonFillModeState, m_Relative, X2_ATTRIBUTE::ParseAttribCmd(), StepAndRepeatItem(), TOOLS_MAX_COUNT, and SHAPE_POLY_SET::Vertex().

459 {
460 // D( printf( "%22s: G_CODE<%d>\n", __func__, G_command ); )
461 
462  switch( G_command )
463  {
464  case GC_PHOTO_MODE: // can starts a D03 flash command: redundant, can
465  // be safely ignored
466  break;
467 
470  break;
471 
474  break;
475 
478  break;
479 
480  case GC_COMMENT:
481  // Skip comment, but only if the line does not start by "G04 #@! TF"
482  // which is a metadata
483  if( strncmp( text, " #@! TF", 7 ) == 0 )
484  {
485  text += 7;
487  dummy.ParseAttribCmd( m_Current_File, NULL, 0, text, m_LineNum );
488  if( dummy.IsFileFunction() )
489  {
490  delete m_FileFunction;
492  }
493  }
494 
495  while ( *text && (*text != '*') )
496  text++;
497  break;
498 
501  break;
502 
505  break;
506 
509  break;
510 
511  case GC_SELECT_TOOL:
512  {
513  int D_commande = DCodeNumber( text );
514  if( D_commande < FIRST_DCODE )
515  return false;
516  if( D_commande > (TOOLS_MAX_COUNT - 1) )
517  D_commande = TOOLS_MAX_COUNT - 1;
518  m_Current_Tool = D_commande;
519  D_CODE* pt_Dcode = GetDCODE( D_commande );
520  if( pt_Dcode )
521  pt_Dcode->m_InUse = true;
522  break;
523  }
524 
525  case GC_SPECIFY_INCHES:
526  m_GerbMetric = false; // false = Inches, true = metric
527  break;
528 
530  m_GerbMetric = true; // false = Inches, true = metric
531  break;
532 
533  case GC_TURN_OFF_360_INTERPOL: // disable Multi cadran arc and Arc interpol
534  m_360Arc_enbl = false;
535  m_Iterpolation = GERB_INTERPOL_LINEAR_1X; // not sure it should be done
536  break;
537 
539  m_360Arc_enbl = true;
540  break;
541 
543  m_Relative = false; // false = absolute Coord, true = relative
544  // Coord
545  break;
546 
548  m_Relative = true; // false = absolute Coord, true = relative
549  // Coord
550  break;
551 
553  m_PolygonFillMode = true;
554  m_Exposure = false;
555  break;
556 
558  if( m_Exposure && GetItemsList() ) // End of polygon
559  {
560  GERBER_DRAW_ITEM * gbritem = m_Drawings.GetLast();
561  gbritem->m_Polygon.Append( gbritem->m_Polygon.Vertex( 0 ) );
562  StepAndRepeatItem( *gbritem );
563  }
564  m_Exposure = false;
565  m_PolygonFillMode = false;
567  break;
568 
569  case GC_MOVE: // Non existent
570  default:
571  {
572  wxString msg;
573  msg.Printf( wxT( "G%0.2d command not handled" ), G_command );
574  AddMessageToList( msg );
575  return false;
576  }
577  }
578 
579 
580  return true;
581 }
class X2_ATTRIBUTE_FILEFUNCTION ( from TF.FileFunction in Gerber file) Example file function: TF...
void AddMessageToList(const wxString &aMessage)
Function AddMessageToList Add a message to the message list.
X2_ATTRIBUTE_FILEFUNCTION * m_FileFunction
class X2_ATTRIBUTE The attribute value consists of a number of substrings separated by a comma ...
D_CODE * GetDCODE(int aDCODE) const
Function GetDCODE returns a pointer to the D_CODE within this GERBER for the given aDCODE...
bool m_InUse
false if the aperure (previously defined) is not used to draw something
Definition: dcode.h:102
SHAPE_POLY_SET m_Polygon
VECTOR2I & Vertex(int aIndex, int aOutline, int aHole)
Returns the index-th vertex in a given hole outline within a given outline
T * GetLast() const
Function GetLast returns the last T* in the list without removing it, or NULL if the list is empty...
Definition: dlist.h:170
#define FIRST_DCODE
Definition: dcode.h:71
int DCodeNumber(char *&Text)
Definition: rs274d.cpp:438
bool IsFileFunction()
return true if the attribute is .FileFunction
bool m_Exposure
whether an aperture macro tool is flashed on or off
Class D_CODE holds a gerber DCODE (also called Aperture) definition.
Definition: dcode.h:82
static LIB_PART * dummy()
Used when a LIB_PART is not found in library to draw a dummy shape This component is a 400 mils squar...
DLIST< GERBER_DRAW_ITEM > m_Drawings
GERBER_DRAW_ITEM * GetItemsList()
Function GetItemsList.
#define TOOLS_MAX_COUNT
Definition: dcode.h:73
bool ParseAttribCmd(FILE *aFile, char *aBuffer, int aBuffSize, char *&aText, int &aLineNum)
parse a TF command terminated with a % and fill m_Prms by the parameters found.
void StepAndRepeatItem(const GERBER_DRAW_ITEM &aItem)
Function StepAndRepeatItem Gerber format has a command Step an Repeat This function must be called wh...
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Appends a vertex at the end of the given outline/hole (default: the last outline) ...
bool GERBER_FILE_IMAGE::ExecuteRS274XCommand ( int  aCommand,
char *  aBuff,
unsigned int  aBuffSize,
char *&  aText 
)

Function ExecuteRS274XCommand executes 1 command.

Definition at line 245 of file rs274x.cpp.

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, DBG, dummy(), FILE_ATTRIBUTE, FindApertureMacro(), FORMAT_STATEMENT, fromGerberString(), GBR_NETLIST_METADATA::GBR_NETINFO_CMP, GBR_NETLIST_METADATA::GBR_NETINFO_NET, GBR_NETLIST_METADATA::GBR_NETINFO_PAD, GERB_INTERPOL_LINEAR_1X, X2_ATTRIBUTE::GetAttribute(), GetDCODEOrCreate(), GetEndOfBlock(), GetLayerParams(), X2_ATTRIBUTE::GetPrm(), X2_ATTRIBUTE::GetPrmCount(), IMAGE_JUSTIFY, IMAGE_NAME, IMAGE_OFFSET, IMAGE_POLARITY, IMAGE_ROTATION, INCH, X2_ATTRIBUTE::IsFileFunction(), X2_ATTRIBUTE::IsFileMD5(), X2_ATTRIBUTE::IsFilePart(), 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, 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, X2_ATTRIBUTE::ParseAttribCmd(), ReadApertureMacro(), ReadDouble(), ReadInt(), ReadXCommand(), REMOVE_APERTURE_ATTRIBUTE, RemoveAttribute(), ROTATE, SCALE_FACTOR, D_CODE::SetMacro(), STEP_AND_REPEAT, TO_UTF8, wxPoint::x, and wxPoint::y.

Referenced by ReadRS274XCommand().

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

Function FindApertureMacro looks up a previously read in aperture macro.

Parameters
aLookupA dummy APERTURE_MACRO with [only] the name field set.
Returns
APERTURE_MACRO* - the one with a matching name, or NULL if not found.

Definition at line 164 of file gerber_file_image.cpp.

References m_aperture_macros.

Referenced by ExecuteRS274XCommand().

165 {
166  APERTURE_MACRO_SET::iterator iter = m_aperture_macros.find( aLookup );
167 
168  if( iter != m_aperture_macros.end() )
169  {
170  APERTURE_MACRO* pam = (APERTURE_MACRO*) &(*iter);
171  return pam;
172  }
173 
174  return NULL; // not found
175 }
APERTURE_MACRO_SET m_aperture_macros
a collection of APERTURE_MACROS, sorted by name
Struct APERTURE_MACRO helps support the "aperture macro" defined within standard RS274X.
Definition: am_primitive.h:163
int GERBER_FILE_IMAGE::GCodeNumber ( char *&  Text)

Definition at line 415 of file rs274d.cpp.

References IsNumber.

416 {
417  int ii = 0;
418  char* text;
419  char line[1024];
420 
421  if( Text == NULL )
422  return 0;
423  Text++;
424  text = line;
425  while( IsNumber( *Text ) )
426  {
427  *(text++) = *(Text++);
428  }
429 
430  *text = 0;
431  ii = atoi( line );
432  return ii;
433 }
#define IsNumber(x)
const EDA_RECT EDA_ITEM::GetBoundingBox ( ) const
virtualinherited

Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes.

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

Reimplemented in BOARD, D_PAD, SCH_SHEET, SCH_HIERLABEL, LIB_PART, SCH_COMPONENT, SCH_GLOBALLABEL, LIB_ITEM, SCH_LABEL, GERBER_DRAW_ITEM, DIMENSION, DRAWSEGMENT, LIB_FIELD, TEXTE_MODULE, MODULE, TEXTE_PCB, ZONE_CONTAINER, SCH_TEXT, LIB_PIN, TRACK, MARKER_PCB, SCH_LINE, GBR_LAYOUT, LIB_ARC, SCH_FIELD, LIB_TEXT, SCH_BITMAP, PCB_TARGET, SCH_BUS_ENTRY_BASE, LIB_BEZIER, LIB_POLYLINE, LIB_RECTANGLE, LIB_CIRCLE, SCH_MARKER, SCH_NO_CONNECT, and SCH_JUNCTION.

Definition at line 111 of file base_struct.cpp.

Referenced by PCB_EDIT_FRAME::AppendBoardFile(), MODULE::CoverageRatio(), SCH_EDIT_FRAME::DeleteItem(), getAnchorPoint(), LIB_ITEM::GetBoundingBox(), GetBoundingBoxes(), getRect(), getSheetBbox(), EDA_ITEM::HitTest(), and EDA_ITEM::ViewBBox().

112 {
113 #if defined(DEBUG)
114  printf( "Missing GetBoundingBox()\n" );
115  Show( 0, std::cout ); // tell me which classes still need GetBoundingBox support
116 #endif
117 
118  // return a zero-sized box per default. derived classes should override
119  // this
120  return EDA_RECT( wxPoint( 0, 0 ), wxSize( 0, 0 ) );
121 }
Class EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
wxString GERBER_FILE_IMAGE::GetClass ( ) const
inlineoverridevirtual

Function GetClass returns the class name.

Returns
wxString

Implements EDA_ITEM.

Definition at line 197 of file gerber_file_image.h.

Referenced by Visit().

198  {
199  return wxT( "GERBER_FILE_IMAGE" );
200  }
D_CODE * GERBER_FILE_IMAGE::GetDCODE ( int  aDCODE) const

Function GetDCODE returns 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
D_CODE* - the one implied by the given aDCODE, or NULL if the requested aDCODE is out of range.

Definition at line 151 of file gerber_file_image.cpp.

References DIM, FIRST_DCODE, and m_Aperture_List.

Referenced by Execute_DCODE_Command(), Execute_G_Command(), GERBER_DRAW_ITEM::GetDcodeDescr(), GERBVIEW_FRAME::Liste_D_Codes(), GERBVIEW_FRAME::updateAperAttributesSelectBox(), and GERBVIEW_FRAME::updateDCodeSelectBox().

152 {
153  unsigned ndx = aDCODE - FIRST_DCODE;
154 
155  if( ndx < (unsigned) DIM( m_Aperture_List ) )
156  {
157  return m_Aperture_List[ndx];
158  }
159 
160  return NULL;
161 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
D_CODE * m_Aperture_List[TOOLS_MAX_COUNT]
Dcode (Aperture) List for this layer (max 999)
#define FIRST_DCODE
Definition: dcode.h:71
D_CODE * GERBER_FILE_IMAGE::GetDCODEOrCreate ( int  aDCODE,
bool  aCreateIfNoExist = true 
)

Function GetDCODEOrCreate returns 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
D_CODE* - the one implied by the given aDCODE, or NULL if the requested aDCODE is out of range.

Definition at line 131 of file gerber_file_image.cpp.

References DIM, FIRST_DCODE, and m_Aperture_List.

Referenced by ExecuteRS274XCommand().

132 {
133  unsigned ndx = aDCODE - FIRST_DCODE;
134 
135  if( ndx < (unsigned) DIM( m_Aperture_List ) )
136  {
137  // lazily create the D_CODE if it does not exist.
138  if( aCreateIfNoExist )
139  {
140  if( m_Aperture_List[ndx] == NULL )
141  m_Aperture_List[ndx] = new D_CODE( ndx + FIRST_DCODE );
142  }
143 
144  return m_Aperture_List[ndx];
145  }
146 
147  return NULL;
148 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
D_CODE * m_Aperture_List[TOOLS_MAX_COUNT]
Dcode (Aperture) List for this layer (max 999)
#define FIRST_DCODE
Definition: dcode.h:71
Class D_CODE holds a gerber DCODE (also called Aperture) definition.
Definition: dcode.h:82
int GERBER_FILE_IMAGE::GetDcodesCount ( )
Returns
the count of Dcode tools in used by the image

Definition at line 260 of file gerber_file_image.cpp.

References DIM, m_Aperture_List, and m_InUse.

Referenced by GERBVIEW_FRAME::Liste_D_Codes(), GERBVIEW_FRAME::updateAperAttributesSelectBox(), and GERBVIEW_FRAME::updateDCodeSelectBox().

261 {
262  int count = 0;
263 
264  for( unsigned ii = 0; ii < DIM( m_Aperture_List ); ii++ )
265  {
266  if( m_Aperture_List[ii] )
267  if( m_Aperture_List[ii]->m_InUse || m_Aperture_List[ii]->m_Defined )
268  ++count;
269  }
270 
271  return count;
272 }
#define DIM(x)
of elements in an array
Definition: macros.h:98
D_CODE * m_Aperture_List[TOOLS_MAX_COUNT]
Dcode (Aperture) List for this layer (max 999)
bool GERBER_FILE_IMAGE::GetEndOfBlock ( char *  aBuff,
unsigned int  aBuffSize,
char *&  aText,
FILE *  aGerberFile 
)
private

Definition at line 908 of file rs274x.cpp.

References m_LineNum.

Referenced by ExecuteRS274XCommand().

909 {
910  for( ; ; )
911  {
912  while( (aText < aBuff + aBuffSize) && *aText )
913  {
914  if( *aText == '*' )
915  return true;
916 
917  if( *aText == '%' )
918  return true;
919 
920  aText++;
921  }
922 
923  if( fgets( aBuff, aBuffSize, gerber_file ) == NULL )
924  break;
925 
926  m_LineNum++;
927  aText = aBuff;
928  }
929 
930  return false;
931 }
STATUS_FLAGS EDA_ITEM::GetFlags ( ) const
inlineinherited

Definition at line 266 of file base_struct.h.

References EDA_ITEM::m_Flags.

Referenced by AbortMoveAndEditTarget(), SCH_SCREEN::addConnectedItemsToBlock(), AddMenusForBitmap(), AddMenusForBusEntry(), AddMenusForComponent(), AddMenusForComponentField(), AddMenusForEditComponent(), AddMenusForGLabel(), AddMenusForHierchicalSheet(), AddMenusForHLabel(), AddMenusForLabel(), AddMenusForSheetPin(), AddMenusForText(), SCH_EDIT_FRAME::BeginSegment(), SCH_EDIT_FRAME::ChangeTextOrient(), Collect_TrackSegmentsToDrag(), SCH_EDIT_FRAME::ConvertPart(), SCH_EDIT_FRAME::copyBlockItems(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyPanelToOptions(), LIB_EDIT_FRAME::copySelectedItems(), LIB_EDIT_FRAME::CreatePin(), PCB_EDIT_FRAME::createPopUpMenuForFootprints(), PCB_EDIT_FRAME::createPopUpMenuForFpPads(), PCB_EDIT_FRAME::createPopUpMenuForFpTexts(), PCB_EDIT_FRAME::createPopUpMenuForTexts(), PCB_EDIT_FRAME::createPopupMenuForTracks(), PCB_EDIT_FRAME::createPopUpMenuForZones(), PCB_EDIT_FRAME::Delete_Segment_Edge(), SCH_EDIT_FRAME::DeleteItem(), SCH_EDIT_FRAME::DeleteItemsInList(), SCH_EDIT_FRAME::DeleteJunction(), BOARD::Draw(), PCB_EDIT_FRAME::Edit_TrackSegm_Width(), SCH_EDIT_FRAME::EditComponentFieldText(), SCH_EDIT_FRAME::EditImage(), PCB_EDIT_FRAME::FlipTextePcb(), LIB_VIEW_FRAME::GeneralControl(), SCH_EDIT_FRAME::GeneralControl(), LIB_EDIT_FRAME::GetComponentFromRedoList(), LIB_EDIT_FRAME::GetComponentFromUndoList(), SCH_SCREEN::GetConnection(), InitialiseDragParameters(), EDA_DRAW_FRAME::isBusy(), Magnetize(), SCH_EDIT_FRAME::MirrorImage(), SCH_EDIT_FRAME::MirrorSheet(), moveBitmap(), SCH_EDIT_FRAME::OnAutoplaceFields(), SCH_EDIT_FRAME::OnConvertTextType(), SCH_EDIT_FRAME::OnCopySchematicItemRequest(), SCH_EDIT_FRAME::OnDragItem(), SCH_EDIT_FRAME::OnEditItem(), LIB_EDIT_FRAME::OnEditPin(), FOOTPRINT_EDIT_FRAME::OnHotKey(), SCH_EDIT_FRAME::OnHotKey(), PCB_EDIT_FRAME::OnHotKey(), PCB_EDIT_FRAME::OnHotkeyBeginRoute(), PCB_EDIT_FRAME::OnHotkeyCopyItem(), PCB_EDIT_FRAME::OnHotkeyDeleteItem(), PCB_EDIT_FRAME::OnHotkeyDuplicateOrArrayItem(), PCB_EDIT_FRAME::OnHotkeyEditItem(), PCB_EDIT_FRAME::OnHotkeyFlipItem(), PCB_EDIT_FRAME::OnHotkeyMoveItem(), PCB_EDIT_FRAME::OnHotkeyPlaceItem(), PCB_EDIT_FRAME::OnHotkeyRotateItem(), FOOTPRINT_EDIT_FRAME::OnLeftClick(), SCH_EDIT_FRAME::OnLeftClick(), PCB_EDIT_FRAME::OnLeftClick(), FOOTPRINT_EDIT_FRAME::OnLeftDClick(), SCH_EDIT_FRAME::OnLeftDClick(), PCB_EDIT_FRAME::OnLeftDClick(), EDA_DRAW_PANEL::OnMouseEvent(), SCH_EDIT_FRAME::OnMoveItem(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::OnOKButtonClick(), TARGET_PROPERTIES_DIALOG_EDITOR::OnOkClick(), SCH_EDIT_FRAME::OnOpenLibraryEditor(), SCH_EDIT_FRAME::OnOrient(), FOOTPRINT_EDIT_FRAME::OnRightClick(), GERBVIEW_FRAME::OnRightClick(), SCH_EDIT_FRAME::OnRightClick(), PCB_EDIT_FRAME::OnRightClick(), SCH_EDIT_FRAME::OnRotate(), SCH_EDIT_FRAME::OnSelectUnit(), SCH_EDIT_FRAME::OrientComponent(), PCBNEW_CONTROL::placeBoardItems(), PCB_EDIT_FRAME::PlaceTarget(), FOOTPRINT_EDIT_FRAME::PrepareItemForHotkey(), LIB_EDIT_FRAME::Process_Special_Functions(), EDIT_TOOL::Properties(), TRACKS_CLEANER::removeDuplicatesOfTrack(), PCB_BASE_FRAME::Rotate_Module(), PCB_EDIT_FRAME::Rotate_Texte_Pcb(), SCH_EDIT_FRAME::RotateField(), SCH_EDIT_FRAME::RotateHierarchicalSheet(), SCH_EDIT_FRAME::RotateImage(), PCB_BASE_FRAME::RotateTextModule(), LIB_EDIT_FRAME::SaveCopyInUndoList(), SCH_EDIT_FRAME::SaveCopyInUndoList(), SCH_EDIT_FRAME::SchematicCleanUp(), SCH_SCREEN::SelectBlockItems(), SCH_EDIT_FRAME::SetBusEntryShape(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::SetInitCmp(), Show_Drag_Track_Segment_With_Cte_Slope(), Show_MoveNode(), PCB_EDIT_FRAME::Start_DragTrackSegmentAndKeepSlope(), PCB_EDIT_FRAME::StartMoveOneNodeOrSegment(), DIALOG_LABEL_EDITOR::TextPropertiesAccept(), DIALOG_PCB_TEXT_PROPERTIES::TransferDataFromWindow(), and DIALOG_FOOTPRINT_BOARD_EDITOR::TransferDataFromWindow().

266 { return m_Flags; }
STATUS_FLAGS m_Flags
Flag bits for editing and other uses.
Definition: base_struct.h:186
GERBER_DRAW_ITEM * GERBER_FILE_IMAGE::GetItemsList ( )
GERBER_LAYER& GERBER_FILE_IMAGE::GetLayerParams ( )
inline

Function GetLayerParams.

Returns
the current layers params

Definition at line 234 of file gerber_file_image.h.

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

235  {
236  return m_GBRLayerParams;
237  }
GERBER_LAYER m_GBRLayerParams
DHEAD* EDA_ITEM::GetList ( ) const
inlineinherited
BITMAP_DEF EDA_ITEM::GetMenuImage ( ) const
virtualinherited

Function GetMenuImage returns 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 D_PAD, SCH_COMPONENT, MODULE, ZONE_CONTAINER, SCH_SHEET, LIB_PIN, VIA, SEGZONE, SCH_HIERLABEL, SCH_GLOBALLABEL, TRACK, DRAWSEGMENT, SCH_LABEL, LIB_FIELD, DIMENSION, TEXTE_MODULE, SCH_SHEET_PIN, SCH_BUS_BUS_ENTRY, SCH_TEXT, SCH_FIELD, SCH_LINE, LIB_ARC, SCH_BUS_WIRE_ENTRY, TEXTE_PCB, LIB_TEXT, SCH_BITMAP, EDGE_MODULE, LIB_POLYLINE, MARKER_PCB, LIB_RECTANGLE, LIB_CIRCLE, PCB_TARGET, SCH_MARKER, SCH_NO_CONNECT, and SCH_JUNCTION.

Definition at line 281 of file base_struct.cpp.

References dummy_xpm, EDA_ITEM::GetClass(), i, operator<<(), wxPoint::x, and wxPoint::y.

Referenced by SCH_BUS_WIRE_ENTRY::CanConnect(), SCH_BUS_BUS_ENTRY::CanConnect(), SELECTION_TOOL::disambiguationMenu(), EDA_ITEM::HitTest(), FOOTPRINT_EDIT_FRAME::ModeditLocateAndDisplay(), and PCB_BASE_FRAME::PcbGeneralLocateAndDisplay().

282 {
283  return dummy_xpm;
284 }
static const BITMAP_OPAQUE dummy_xpm[1]
Definition: base_struct.cpp:57
const wxArrayString& GERBER_FILE_IMAGE::GetMessages ( ) const
inline

Definition at line 213 of file gerber_file_image.h.

References GERBER_LAYER::ResetDefaultValues().

Referenced by GERBVIEW_FRAME::Read_GERBER_File().

213 { return m_messagesList; }
wxArrayString m_messagesList
virtual void EDA_ITEM::GetMsgPanelInfo ( std::vector< MSG_PANEL_ITEM > &  aList)
inlinevirtualinherited

Function GetMsgPanelInfo populates aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.

Note
This method replaces DisplayInfo() so that KiCad objects no longer have any knowledge of wxWidgets UI objects.
Parameters
aListis the list to populate.

Reimplemented in BOARD, D_PAD, MODULE, SCH_SHEET, SCH_COMPONENT, GERBER_DRAW_ITEM, LIB_ITEM, NETINFO_ITEM, TRACK, DIMENSION, SCH_TEXT, DRAWSEGMENT, TEXTE_MODULE, LIB_FIELD, LIB_PIN, EDGE_MODULE, MARKER_PCB, LIB_BEZIER, LIB_ARC, ZONE_CONTAINER, LIB_TEXT, TEXTE_PCB, SCH_MARKER, LIB_POLYLINE, LIB_RECTANGLE, and LIB_CIRCLE.

Definition at line 288 of file base_struct.h.

Referenced by SCH_EDIT_FRAME::LocateItem(), EDA_DRAW_FRAME::SetMsgPanel(), and PCB_BASE_FRAME::UpdateMsgPanel().

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

Function GetNextLine test for an end of line if an 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 934 of file rs274x.cpp.

References m_LineNum.

Referenced by ReadApertureMacro().

935 {
936  for( ; ; )
937  {
938  switch (*aText )
939  {
940  case ' ': // skip blanks
941  case '\n':
942  case '\r': // Skip line terminators
943  ++aText;
944  break;
945 
946  case 0: // End of text found in aBuff: Read a new string
947  if( fgets( aBuff, aBuffSize, aFile ) == NULL )
948  return NULL;
949 
950  m_LineNum++;
951  aText = aBuff;
952  return aText;
953 
954  default:
955  return aText;
956  }
957  }
958  return aText;
959 }
COLOR4D GERBER_FILE_IMAGE::GetPositiveDrawColor ( ) const
inline

Definition at line 222 of file gerber_file_image.h.

Referenced by GBR_LAYOUT::Draw(), and GERBER_DRAW_ITEM::Draw().

222 { return m_PositiveDrawColor; }
wxString EDA_ITEM::GetSelectMenuText ( ) const
virtualinherited

Function GetSelectMenuText returns 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 D_PAD, SCH_COMPONENT, MODULE, ZONE_CONTAINER, SCH_SHEET, LIB_PIN, VIA, SEGZONE, SCH_HIERLABEL, DELETED_SCH_ITEM, GERBER_DRAW_ITEM, SCH_GLOBALLABEL, TRACK, DRAWSEGMENT, SCH_LABEL, LIB_FIELD, DIMENSION, TEXTE_MODULE, SCH_SHEET_PIN, SCH_TEXT, SCH_BUS_BUS_ENTRY, SCH_FIELD, SCH_LINE, LIB_ARC, SCH_BUS_WIRE_ENTRY, TEXTE_PCB, LIB_TEXT, SCH_BITMAP, EDGE_MODULE, LIB_POLYLINE, MARKER_PCB, LIB_RECTANGLE, LIB_CIRCLE, PCB_TARGET, SCH_MARKER, SCH_NO_CONNECT, and SCH_JUNCTION.

Definition at line 174 of file base_struct.cpp.

References EDA_ITEM::GetClass().

Referenced by SCH_BUS_WIRE_ENTRY::CanConnect(), SCH_BUS_BUS_ENTRY::CanConnect(), GERBVIEW_SELECTION_TOOL::disambiguationMenu(), SELECTION_TOOL::disambiguationMenu(), DRC::fillMarker(), SCH_FIND_COLLECTOR::GetText(), EDA_ITEM::HitTest(), FOOTPRINT_EDIT_FRAME::ModeditLocateAndDisplay(), and PCB_BASE_FRAME::PcbGeneralLocateAndDisplay().

175 {
176  wxFAIL_MSG( wxT( "GetSelectMenuText() was not overridden for schematic item type " ) +
177  GetClass() );
178 
179  return wxString( wxT( "Undefined menu text for " ) + GetClass() );
180 }
virtual wxString GetClass() const =0
Function GetClass returns the class name.
STATUS_FLAGS EDA_ITEM::GetStatus ( ) const
inlineinherited

Definition at line 261 of file base_struct.h.

References EDA_ITEM::m_Status.

Referenced by PCB_IO::format(), and GERBER_DRAW_ITEM::HitTest().

261 { return m_Status; }
STATUS_FLAGS m_Status
Definition: base_struct.h:172
bool GERBER_FILE_IMAGE::HasNegativeItems ( )

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

References GetItemsList(), m_GraphicLayer, m_hasNegativeItems, m_ImageNegative, and GERBER_DRAW_ITEM::Next().

Referenced by GBR_LAYOUT::Draw().

237 {
238  if( m_hasNegativeItems < 0 ) // negative items are not yet searched: find them if any
239  {
240  if( m_ImageNegative ) // A negative layer is expected having always negative objects.
241  m_hasNegativeItems = 1;
242  else
243  {
244  m_hasNegativeItems = 0;
245  for( GERBER_DRAW_ITEM* item = GetItemsList(); item; item = item->Next() )
246  {
247  if( item->GetLayer() != m_GraphicLayer )
248  continue;
249  if( item->HasNegativeItems() )
250  {
251  m_hasNegativeItems = 1;
252  break;
253  }
254  }
255  }
256  }
257  return m_hasNegativeItems == 1;
258 }
GERBER_DRAW_ITEM * Next() const
GERBER_DRAW_ITEM * GetItemsList()
Function GetItemsList.
virtual bool EDA_ITEM::HitTest ( const wxPoint aPosition) const
inlinevirtualinherited

Function HitTest tests if aPosition is contained within or on the bounding area of an item.

Parameters
aPositionA reference to a wxPoint object containing the coordinates to test.
Returns
True if aPosition is within or on the item bounding area.

Reimplemented in D_PAD, MODULE, VIA, SCH_ITEM, BOARD_ITEM, GERBER_DRAW_ITEM, ZONE_CONTAINER, TRACK, LIB_ITEM, DIMENSION, DRAWSEGMENT, TEXTE_MODULE, LIB_FIELD, LIB_PIN, MARKER_PCB, LIB_ARC, TEXTE_PCB, PCB_TARGET, LIB_TEXT, LIB_BEZIER, LIB_POLYLINE, LIB_RECTANGLE, and LIB_CIRCLE.

Definition at line 299 of file base_struct.h.

References EDA_ITEM::Clone(), EDA_ITEM::GetBoundingBox(), EDA_ITEM::GetClass(), EDA_ITEM::GetMenuImage(), EDA_ITEM::GetSelectMenuText(), EDA_ITEM::IterateForward(), and EDA_ITEM::Visit().

Referenced by LIB_ITEM::HitTest(), BOARD_ITEM::HitTest(), GERBER_COLLECTOR::Inspect(), and SCH_COLLECTOR::Inspect().

300  {
301  return false; // derived classes should override this function
302  }
void GERBER_FILE_IMAGE::InitToolTable ( )

Function InitToolTable.

Definition at line 275 of file gerber_file_image.cpp.

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

276 {
277  for( int count = 0; count < TOOLS_MAX_COUNT; count++ )
278  {
279  if( m_Aperture_List[count] == NULL )
280  continue;
281 
282  m_Aperture_List[count]->m_Num_Dcode = count + FIRST_DCODE;
284  }
285 
286  m_aperture_macros.clear();
287 }
APERTURE_MACRO_SET m_aperture_macros
a collection of APERTURE_MACROS, sorted by name
D_CODE * m_Aperture_List[TOOLS_MAX_COUNT]
Dcode (Aperture) List for this layer (max 999)
#define FIRST_DCODE
Definition: dcode.h:71
int m_Num_Dcode
D code value ( >= 10 )
Definition: dcode.h:96
#define TOOLS_MAX_COUNT
Definition: dcode.h:73
void Clear_D_CODE_Data()
Definition: dcode.cpp:79
bool EDA_ITEM::IsBrightened ( ) const
inlineinherited

Definition at line 235 of file base_struct.h.

References BRIGHTENED.

Referenced by GERBVIEW_SELECTION_TOOL::disambiguationMenu(), KIGFX::GERBVIEW_PAINTER::draw(), and KIGFX::PCB_RENDER_SETTINGS::GetColor().

235 { return m_Flags & BRIGHTENED; }
#define BRIGHTENED
item is drawn with a bright contour
Definition: base_struct.h:133
STATUS_FLAGS m_Flags
Flag bits for editing and other uses.
Definition: base_struct.h:186
bool EDA_ITEM::IsDragging ( ) const
inlineinherited
bool EDA_ITEM::IsHighlighted ( ) const
inlineinherited

Definition at line 234 of file base_struct.h.

References HIGHLIGHTED.

234 { return m_Flags & HIGHLIGHTED; }
#define HIGHLIGHTED
item is drawn in normal colors, when the rest is darkened
Definition: base_struct.h:132
STATUS_FLAGS m_Flags
Flag bits for editing and other uses.
Definition: base_struct.h:186
bool EDA_ITEM::IsModified ( ) const
inlineinherited

Definition at line 228 of file base_struct.h.

References IS_CHANGED.

Referenced by LIB_EDIT_FRAME::OnEditPin().

228 { return m_Flags & IS_CHANGED; }
#define IS_CHANGED
std::function passed to nested users by ref, avoids copying std::function
Definition: base_struct.h:105
STATUS_FLAGS m_Flags
Flag bits for editing and other uses.
Definition: base_struct.h:186
bool EDA_ITEM::IsNew ( ) const
inlineinherited

Definition at line 227 of file base_struct.h.

References IS_NEW.

Referenced by Abort_Edit_Pcb_Text(), Abort_EditEdge(), Abort_Move_ModuleOutline(), Abort_MoveOrCopyModule(), Abort_Zone_Create_Outline(), AbortBuildDimension(), AbortMoveAndEditTarget(), abortMoveBitmap(), abortMoveItem(), AbortPinMove(), AbortSymbolTraceOn(), SCH_EDIT_FRAME::addCurrentItemToList(), SCH_EDIT_FRAME::addJunctionMenuEntries(), AddMenusForBus(), AddMenusForWire(), PCB_EDIT_FRAME::Delete_Segment(), PCB_EDIT_FRAME::Delete_Segment_Edge(), SCH_EDIT_FRAME::DeleteCurrentSegment(), LIB_ARC::drawEditGraphics(), LIB_ARC::drawGraphic(), DrawMovePin(), SCH_EDIT_FRAME::EditSheetPin(), LIB_PIN::EnableEditMode(), LIB_EDIT_FRAME::EndDrawGraphicItem(), SCH_EDIT_FRAME::EndSegment(), ExitSheet(), LIB_PART::LIB_PART(), SCH_EDIT_FRAME::OnAutoplaceFields(), SCH_EDIT_FRAME::OnConvertTextType(), LIB_EDIT_FRAME::OnEditPin(), SCH_EDIT_FRAME::OnHotKey(), FOOTPRINT_EDIT_FRAME::OnLeftClick(), LIB_EDIT_FRAME::OnLeftClick(), PCB_EDIT_FRAME::OnLeftClick(), FOOTPRINT_EDIT_FRAME::OnLeftDClick(), SCH_EDIT_FRAME::OnLeftDClick(), LIB_EDIT_FRAME::OnLeftDClick(), PCB_EDIT_FRAME::OnLeftDClick(), LIB_EDIT_FRAME::OnRightClick(), SCH_EDIT_FRAME::OnRightClick(), SCH_EDIT_FRAME::OnRotate(), PCB_EDIT_FRAME::Place_Texte_Pcb(), PCB_BASE_FRAME::PlaceModule(), LIB_EDIT_FRAME::PlacePin(), PCB_EDIT_FRAME::PlaceTarget(), SCH_EDIT_FRAME::PrepareMoveItem(), SCH_EDIT_FRAME::ReSizeSheet(), ShowClearance(), PCB_EDIT_FRAME::StartMoveTextePcb(), PCB_EDIT_FRAME::SwitchLayer(), and DIALOG_LABEL_EDITOR::TextPropertiesAccept().

227 { return m_Flags & IS_NEW; }
#define IS_NEW
New item, just created.
Definition: base_struct.h:109
STATUS_FLAGS m_Flags
Flag bits for editing and other uses.
Definition: base_struct.h:186
virtual bool EDA_ITEM::IsReplaceable ( ) const
inlinevirtualinherited

Function IsReplaceable.

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

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

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

Definition at line 455 of file base_struct.h.

References EDA_ITEM::operator<().

Referenced by EDA_ITEM::Matches(), and EDA_ITEM::Replace().

455 { return false; }
bool EDA_ITEM::IsResized ( ) const
inlineinherited

Definition at line 233 of file base_struct.h.

References IS_RESIZED.

Referenced by ExitSheet().

233 { return m_Flags & IS_RESIZED; }
STATUS_FLAGS m_Flags
Flag bits for editing and other uses.
Definition: base_struct.h:186
#define IS_RESIZED
Item being resized.
Definition: base_struct.h:110
bool EDA_ITEM::IsSelected ( ) const
inlineinherited

Definition at line 232 of file base_struct.h.

References SELECTED.

Referenced by SCH_SCREEN::addConnectedItemsToBlock(), AddMenusForPin(), KIGFX::PCB_PAINTER::draw(), LIB_CIRCLE::drawGraphic(), LIB_POLYLINE::drawGraphic(), LIB_RECTANGLE::drawGraphic(), LIB_BEZIER::drawGraphic(), LIB_TEXT::drawGraphic(), LIB_ARC::drawGraphic(), LIB_FIELD::drawGraphic(), DrawMovingBlockOutlines(), LIB_PIN::DrawPinElectricalTypeName(), LIB_PIN::DrawPinSymbol(), LIB_PIN::DrawPinTexts(), KIGFX::GERBVIEW_RENDER_SETTINGS::GetColor(), KIGFX::PCB_RENDER_SETTINGS::GetColor(), LIB_EDIT_FRAME::GlobalSetPins(), SCH_JUNCTION::IsSelectStateChanged(), SCH_NO_CONNECT::IsSelectStateChanged(), SCH_MARKER::IsSelectStateChanged(), SCH_BUS_ENTRY_BASE::IsSelectStateChanged(), SCH_BITMAP::IsSelectStateChanged(), SCH_LINE::IsSelectStateChanged(), SCH_TEXT::IsSelectStateChanged(), SCH_SHEET::IsSelectStateChanged(), SCH_COMPONENT::IsSelectStateChanged(), MirrorMarkedItems(), MoveMarkedItems(), MoveMarkedItemsExactly(), LIB_TEXT::Plot(), RotateMarkedItems(), SELECTION_TOOL::SanitizeSelection(), GERBVIEW_SELECTION_TOOL::select(), SELECTION_TOOL::select(), SCH_SCREEN::SelectBlockItems(), GERBVIEW_SELECTION_TOOL::toggleSelection(), SELECTION_TOOL::toggleSelection(), GERBVIEW_SELECTION_TOOL::unselect(), and SELECTION_TOOL::unselect().

232 { return m_Flags & SELECTED; }
#define SELECTED
Definition: base_struct.h:116
STATUS_FLAGS m_Flags
Flag bits for editing and other uses.
Definition: base_struct.h:186
bool EDA_ITEM::IsWireImage ( ) const
inlineinherited

Definition at line 231 of file base_struct.h.

References IS_WIRE_IMAGE.

Referenced by abortMoveItem(), and SCH_FIELD::Draw().

231 { return m_Flags & IS_WIRE_IMAGE; }
#define IS_WIRE_IMAGE
Item to be drawn as wireframe while editing.
Definition: base_struct.h:113
STATUS_FLAGS m_Flags
Flag bits for editing and other uses.
Definition: base_struct.h:186
SEARCH_RESULT EDA_ITEM::IterateForward ( EDA_ITEM listStart,
INSPECTOR  inspector,
void *  testData,
const KICAD_T  scanTypes[] 
)
staticinherited

Function IterateForward walks through the object tree calling the inspector() on each object type requested in scanTypes.

Parameters
listStartThe first in a list of EDA_ITEMs to iterate over.
inspectorIs an INSPECTOR to call on each object that is one of the requested scanTypes.
testDataIs an aid to testFunc, and should be sufficient to allow it to fully determine if an item meets the match criteria, but it may also be used to collect output.
scanTypesA KICAD_T array that is EOT terminated, and provides both the order and interest level of of the types of objects to be iterated over.
Returns
SEARCH_RESULT SEARCH_QUIT if the called INSPECTOR returned SEARCH_QUIT, else SCAN_CONTINUE;

Definition at line 131 of file base_struct.cpp.

References EDA_ITEM::Pnext, SEARCH_CONTINUE, SEARCH_QUIT, and EDA_ITEM::Visit().

Referenced by SCH_COLLECTOR::Collect(), SCH_FIND_COLLECTOR::Collect(), SCH_TYPE_COLLECTOR::Collect(), SCH_FIND_COLLECTOR::GetItem(), EDA_ITEM::HitTest(), Visit(), MODULE::Visit(), and BOARD::Visit().

135 {
136  EDA_ITEM* p = listStart;
137 
138  for( ; p; p = p->Pnext )
139  {
140  if( SEARCH_QUIT == p->Visit( inspector, testData, scanTypes ) )
141  return SEARCH_QUIT;
142  }
143 
144  return SEARCH_CONTINUE;
145 }
virtual SEARCH_RESULT Visit(INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
Function Visit may be re-implemented for each derived class in order to handle all the types given by...
Class EDA_ITEM is a base class for most all the KiCad significant classes, used in schematics and boa...
Definition: base_struct.h:162
EDA_ITEM * Pnext
next in linked list
Definition: base_struct.h:175
bool GERBER_FILE_IMAGE::LoadGerberFile ( const wxString &  aFullFileName)

Read and load a gerber file.

Parameters
aFullFileName= the full filename of the Gerber file when the file cannot be loaded Warning and info messages are stored in m_messagesList
Returns
bool if OK, false if the gerber file was not loaded

Definition at line 113 of file readgerb.cpp.

References GERBVIEW_FRAME::ClearMessageList(), CMD_IDLE, END_BLOCK, ENTER_RS274X_CMD, GERBER_BUFZ, lineBuffer, and StrPurge().

Referenced by GERBVIEW_FRAME::Read_GERBER_File().

114 {
115  int G_command = 0; // command number for G commands like G04
116  int D_commande = 0; // command number for D commands like D02
117  char* text;
118 
119  ClearMessageList( );
121 
122  // Read the gerber file */
123  m_Current_File = wxFopen( aFullFileName, wxT( "rt" ) );
124 
125  if( m_Current_File == 0 )
126  return false;
127 
128  m_FileName = aFullFileName;
129 
130  LOCALE_IO toggleIo;
131 
132  wxString msg;
133 
134  while( true )
135  {
136  if( fgets( lineBuffer, GERBER_BUFZ, m_Current_File ) == NULL )
137  break;
138 
139  m_LineNum++;
140  text = StrPurge( lineBuffer );
141 
142  while( text && *text )
143  {
144  switch( *text )
145  {
146  case ' ':
147  case '\r':
148  case '\n':
149  text++;
150  break;
151 
152  case '*': // End command
154  text++;
155  break;
156 
157  case 'M': // End file
159  while( *text )
160  text++;
161  break;
162 
163  case 'G': /* Line type Gxx : command */
164  G_command = GCodeNumber( text );
165  Execute_G_Command( text, G_command );
166  break;
167 
168  case 'D': /* Line type Dxx : Tool selection (xx > 0) or
169  * command if xx = 0..9 */
170  D_commande = DCodeNumber( text );
171  Execute_DCODE_Command( text, D_commande );
172  break;
173 
174  case 'X':
175  case 'Y': /* Move or draw command */
176  m_CurrentPos = ReadXYCoord( text );
177  if( *text == '*' ) // command like X12550Y19250*
178  {
180  }
181  break;
182 
183  case 'I':
184  case 'J': /* Auxiliary Move command */
185  m_IJPos = ReadIJCoord( text );
186 
187  if( *text == '*' ) // command like X35142Y15945J504*
188  {
190  }
191  break;
192 
193  case '%':
195  {
198  }
199  else //Error
200  {
201  AddMessageToList( wxT("Expected RS274X Command") );
203  text++;
204  }
205  break;
206 
207  default:
208  text++;
209  msg.Printf( wxT("Unexpected symbol <%c>"), *text );
210  AddMessageToList( msg );
211  break;
212  }
213  }
214  }
215 
216  fclose( m_Current_File );
217 
218  m_InUse = true;
219 
220  return true;
221 }
void AddMessageToList(const wxString &aMessage)
Function AddMessageToList Add a message to the message list.
bool Execute_DCODE_Command(char *&text, int D_command)
Definition: rs274d.cpp:584
char * StrPurge(char *text)
Function StrPurge removes leading and training spaces, tabs and end of line chars in text return a po...
Definition: string.cpp:194
Class LOCALE_IO is a class that can be instantiated within a scope in which you are expecting excepti...
Definition: common.h:166
wxPoint ReadXYCoord(char *&Text)
Function ReadXYCoord Returns the current coordinate type pointed to by XnnYnn Text (XnnnnYmmmm) ...
wxPoint ReadIJCoord(char *&Text)
Function ReadIJCoord Returns the current coordinate type pointed to by InnJnn Text (InnnnJmmmm) These...
void ClearMessageList()
Function ClearMessageList Clear the message list Call it before reading a Gerber file.
int GCodeNumber(char *&Text)
Definition: rs274d.cpp:415
static char lineBuffer[GERBER_BUFZ+1]
Definition: readgerb.cpp:111
int DCodeNumber(char *&Text)
Definition: rs274d.cpp:438
#define GERBER_BUFZ
Definition: readgerb.cpp:109
bool Execute_G_Command(char *&text, int G_command)
Definition: rs274d.cpp:458
bool ReadRS274XCommand(char *aBuff, unsigned int aBuffSize, char *&aText)
Function ReadRS274XCommand reads a single RS274X command terminated with a %.
Definition: rs274x.cpp:192
virtual void ResetDefaultValues()
virtual bool EDA_ITEM::Matches ( wxFindReplaceData &  aSearchData,
void *  aAuxData,
wxPoint aFindLocation 
)
inlinevirtualinherited

Function Matches compares 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.
aFindLocationA pointer to a wxPoint object to store the location of matched item. The pointer can be NULL if it is not used.
Returns
True if the item's text matches the search criteria in aSearchData.

Reimplemented in SCH_COMPONENT, SCH_SHEET, SCH_SHEET_PIN, SCH_FIELD, SCH_TEXT, LIB_PIN, and SCH_MARKER.

Definition at line 411 of file base_struct.h.

References EDA_ITEM::Replace().

Referenced by SCH_FIND_COLLECTOR::Inspect(), SCH_MARKER::Matches(), LIB_PIN::Matches(), SCH_TEXT::Matches(), SCH_FIELD::Matches(), SCH_SHEET_PIN::Matches(), SCH_SHEET::Matches(), and EDA_ITEM::Sort().

412  {
413  return false;
414  }
bool EDA_ITEM::Matches ( const wxString &  aText,
wxFindReplaceData &  aSearchData 
)
protectedinherited

Function Matches compares 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 183 of file base_struct.cpp.

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

184 {
185  wxString text = aText;
186  wxString searchText = aSearchData.GetFindString();
187 
188  // Don't match if searching for replaceable item and the item doesn't support text replace.
189  if( (aSearchData.GetFlags() & FR_SEARCH_REPLACE) && !IsReplaceable() )
190  return false;
191 
192  if( aSearchData.GetFlags() & wxFR_WHOLEWORD )
193  return aText.IsSameAs( searchText, aSearchData.GetFlags() & wxFR_MATCHCASE );
194 
195  if( aSearchData.GetFlags() & FR_MATCH_WILDCARD )
196  {
197  if( aSearchData.GetFlags() & wxFR_MATCHCASE )
198  return text.Matches( searchText );
199 
200  return text.MakeUpper().Matches( searchText.MakeUpper() );
201  }
202 
203  if( aSearchData.GetFlags() & wxFR_MATCHCASE )
204  return aText.Find( searchText ) != wxNOT_FOUND;
205 
206  return text.MakeUpper().Find( searchText.MakeUpper() ) != wxNOT_FOUND;
207 }
virtual bool IsReplaceable() const
Function IsReplaceable.
Definition: base_struct.h:455
Perform search using simple wild card matching (* & ?).
Perform a search for a item that has replaceable text.
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 240 of file base_struct.cpp.

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

Referenced by EDA_ITEM::IsReplaceable(), and LIB_ALIAS::operator==().

241 {
242  wxFAIL_MSG( wxString::Format( wxT( "Less than operator not defined for item type %s." ),
243  GetChars( GetClass() ) ) );
244 
245  return false;
246 }
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
virtual wxString GetClass() const =0
Function GetClass returns the class name.
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
bool GERBER_FILE_IMAGE::ReadApertureMacro ( char *  aBuff,
unsigned int  aBuffSize,
char *&  text,
FILE *  gerber_file 
)

Function ReadApertureMacro reads 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
bool - true if a macro was read in successfully, else false.

Definition at line 962 of file rs274x.cpp.

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(), GetChars(), 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().

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

Function ReadIJCoord Returns the current coordinate type pointed to by InnJnn Text (InnnnJmmmm) These coordinates are relative, so if coordinate is absent, it's value defaults to 0.

Definition at line 172 of file rs274_read_XY_and_IJ_coordinates.cpp.

References IsNumber, KiROUND(), m_FmtLen, m_FmtScale, m_GerbMetric, m_IJPos, m_NoTrailingZeros, scale_list, wxPoint::x, and wxPoint::y.

173 {
174  wxPoint pos( 0, 0 );
175 
176  int type_coord = 0, current_coord, nbdigits;
177  bool is_float = false;
178  char* text;
179  char line[256];
180 
181  if( Text == NULL )
182  return pos;
183 
184  text = line;
185  while( *Text )
186  {
187  if( (*Text == 'I') || (*Text == 'J') )
188  {
189  type_coord = *Text;
190  Text++;
191  text = line;
192  nbdigits = 0;
193  while( IsNumber( *Text ) )
194  {
195  if( *Text == '.' )
196  is_float = true;
197 
198  // count digits only (sign and decimal point are not counted)
199  if( (*Text >= '0') && (*Text <='9') )
200  nbdigits++;
201 
202  *(text++) = *(Text++);
203  }
204 
205  *text = 0;
206  if( is_float )
207  {
208  // When X or Y values are float numbers, they are given in mm or inches
209  if( m_GerbMetric ) // units are mm
210  current_coord = KiROUND( atof( line ) * IU_PER_MILS / 0.0254 );
211  else // units are inches
212  current_coord = KiROUND( atof( line ) * IU_PER_MILS * 1000 );
213  }
214  else
215  {
216  int fmt_scale =
217  (type_coord == 'I') ? m_FmtScale.x : m_FmtScale.y;
218 
219  if( m_NoTrailingZeros )
220  {
221  int min_digit =
222  (type_coord == 'I') ? m_FmtLen.x : m_FmtLen.y;
223  while( nbdigits < min_digit )
224  {
225  *(text++) = '0';
226  nbdigits++;
227  }
228 
229  *text = 0;
230  }
231 
232  current_coord = atoi( line );
233 
234  double real_scale = scale_list[fmt_scale];
235 
236  if( m_GerbMetric )
237  real_scale = real_scale / 25.4;
238 
239  current_coord = KiROUND( current_coord * real_scale );
240  }
241  if( type_coord == 'I' )
242  pos.x = current_coord;
243  else if( type_coord == 'J' )
244  pos.y = current_coord;
245 
246  continue;
247  }
248  else
249  break;
250  }
251 
252  m_IJPos = pos;
253  return pos;
254 }
static int KiROUND(double v)
KiROUND rounds a floating point number to an int using "round halfway cases away from zero"...
Definition: common.h:107
static double scale_list[SCALE_LIST_SIZE]
#define IsNumber(x)
bool GERBER_FILE_IMAGE::ReadRS274XCommand ( char *  aBuff,
unsigned int  aBuffSize,
char *&  aText 
)

Function ReadRS274XCommand reads a single RS274X command terminated with a %.

Definition at line 192 of file rs274x.cpp.

References CMD_IDLE, ExecuteRS274XCommand(), m_CommandState, m_Current_File, m_LineNum, and ReadXCommand().

193 {
194  bool ok = true;
195  int code_command;
196 
197  aText++;
198 
199  for( ; ; )
200  {
201  while( *aText )
202  {
203  switch( *aText )
204  {
205  case '%': // end of command
206  aText++;
208  goto exit; // success completion
209 
210  case ' ':
211  case '\r':
212  case '\n':
213  aText++;
214  break;
215 
216  case '*':
217  aText++;
218  break;
219 
220  default:
221  code_command = ReadXCommand( aText );
222  ok = ExecuteRS274XCommand( code_command, aBuff, aBuffSize, aText );
223  if( !ok )
224  goto exit;
225  break;
226  }
227  }
228 
229  // end of current line, read another one.
230  if( fgets( aBuff, aBuffSize, m_Current_File ) == NULL )
231  {
232  // end of file
233  ok = false;
234  break;
235  }
236  m_LineNum++;
237  aText = aBuff;
238  }
239 
240 exit:
241  return ok;
242 }
bool ExecuteRS274XCommand(int aCommand, char *aBuff, unsigned int aBuffSize, char *&aText)
Function ExecuteRS274XCommand executes 1 command.
Definition: rs274x.cpp:245
static int ReadXCommand(char *&text)
Function ReadXCommand reads in two bytes of data and assembles them into an int with the first byte i...
Definition: rs274x.cpp:123
wxPoint GERBER_FILE_IMAGE::ReadXYCoord ( char *&  Text)

Function ReadXYCoord Returns the current coordinate type pointed to by XnnYnn Text (XnnnnYmmmm)

Definition at line 72 of file rs274_read_XY_and_IJ_coordinates.cpp.

References IsNumber, KiROUND(), m_CurrentPos, m_FmtLen, m_FmtScale, m_GerbMetric, m_NoTrailingZeros, m_Relative, scale_list, wxPoint::x, and wxPoint::y.

73 {
74  wxPoint pos;
75  int type_coord = 0, current_coord, nbdigits;
76  bool is_float = false;
77  char* text;
78  char line[256];
79 
80 
81  if( m_Relative )
82  pos.x = pos.y = 0;
83  else
84  pos = m_CurrentPos;
85 
86  if( Text == NULL )
87  return pos;
88 
89  text = line;
90  while( *Text )
91  {
92  if( (*Text == 'X') || (*Text == 'Y') )
93  {
94  type_coord = *Text;
95  Text++;
96  text = line;
97  nbdigits = 0;
98 
99  while( IsNumber( *Text ) )
100  {
101  if( *Text == '.' ) // Force decimat format if reading a floating point number
102  is_float = true;
103 
104  // count digits only (sign and decimal point are not counted)
105  if( (*Text >= '0') && (*Text <='9') )
106  nbdigits++;
107  *(text++) = *(Text++);
108  }
109 
110  *text = 0;
111 
112  if( is_float )
113  {
114  // When X or Y values are float numbers, they are given in mm or inches
115  if( m_GerbMetric ) // units are mm
116  current_coord = KiROUND( atof( line ) * IU_PER_MILS / 0.0254 );
117  else // units are inches
118  current_coord = KiROUND( atof( line ) * IU_PER_MILS * 1000 );
119  }
120  else
121  {
122  int fmt_scale = (type_coord == 'X') ? m_FmtScale.x : m_FmtScale.y;
123 
124  if( m_NoTrailingZeros )
125  {
126  int min_digit =
127  (type_coord == 'X') ? m_FmtLen.x : m_FmtLen.y;
128  while( nbdigits < min_digit )
129  {
130  *(text++) = '0';
131  nbdigits++;
132  }
133 
134  *text = 0;
135  }
136 
137  current_coord = atoi( line );
138  double real_scale = scale_list[fmt_scale];
139 
140  if( m_GerbMetric )
141  real_scale = real_scale / 25.4;
142 
143  current_coord = KiROUND( current_coord * real_scale );
144  }
145 
146  if( type_coord == 'X' )
147  pos.x = current_coord;
148  else if( type_coord == 'Y' )
149  pos.y = current_coord;
150 
151  continue;
152  }
153  else
154  break;
155  }
156 
157  if( m_Relative )
158  {
159  pos.x += m_CurrentPos.x;
160  pos.y += m_CurrentPos.y;
161  }
162 
163  m_CurrentPos = pos;
164  return pos;
165 }
static int KiROUND(double v)
KiROUND rounds a floating point number to an int using "round halfway cases away from zero"...
Definition: common.h:107
static double scale_list[SCALE_LIST_SIZE]
#define IsNumber(x)
void GERBER_FILE_IMAGE::RemoveAttribute ( X2_ATTRIBUTE aAttribute)

Function RemoveAttribute.

Called when a TD command is found the Gerber file

Parameters
aAttributeis the X2_ATTRIBUTE which stores the full command 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

Definition at line 374 of file gerber_file_image.cpp.

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

Referenced by ExecuteRS274XCommand().

375 {
376  /* Called when a %TD command is found
377  * Remove the attribute specified by the %TD command.
378  * is no attribute, all current attributes specified by the %TO and the %TA
379  * commands are cleared.
380  * if a attribute name is specified (for instance %TD.CN*%) is specified,
381  * only this attribute is cleared
382  */
383  m_NetAttributeDict.ClearAttribute( &aAttribute.GetPrm( 1 ) );
384 
385  if( aAttribute.GetPrm( 1 ).IsEmpty() || aAttribute.GetPrm( 1 ) == ".AperFunction" )
386  m_AperFunction.Clear();
387 }
const wxString & GetPrm(int aIdx)
GBR_NETLIST_METADATA m_NetAttributeDict
void ClearAttribute(const wxString *aName)
remove the net attribute specified by aName If aName == NULL or empty, remove all attributes ...
bool EDA_ITEM::Replace ( wxFindReplaceData &  aSearchData,
wxString &  aText 
)
inherited

Helper function used in search and replace dialog Function Replace performs 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 210 of file base_struct.cpp.

References GetChars(), EDA_ITEM::GetClass(), EDA_ITEM::IsReplaceable(), and traceFindReplace.

Referenced by EDA_ITEM::Matches(), SCH_TEXT::Replace(), SCH_FIELD::Replace(), SCH_SHEET_PIN::Replace(), SCH_SHEET::Replace(), and SCH_FIND_COLLECTOR::ReplaceItem().

211 {
212  wxCHECK_MSG( IsReplaceable(), false,
213  wxT( "Attempt to replace text in <" ) + GetClass() + wxT( "> item." ) );
214 
215  wxString searchString = (aSearchData.GetFlags() & wxFR_MATCHCASE) ? aText : aText.Upper();
216 
217  int result = searchString.Find( (aSearchData.GetFlags() & wxFR_MATCHCASE) ?
218  aSearchData.GetFindString() :
219  aSearchData.GetFindString().Upper() );
220 
221  if( result == wxNOT_FOUND )
222  return false;
223 
224  wxString prefix = aText.Left( result );
225  wxString suffix;
226 
227  if( aSearchData.GetFindString().length() + result < aText.length() )
228  suffix = aText.Right( aText.length() - ( aSearchData.GetFindString().length() + result ) );
229 
230  wxLogTrace( traceFindReplace, wxT( "Replacing '%s', prefix '%s', replace '%s', suffix '%s'." ),
231  GetChars( aText ), GetChars( prefix ), GetChars( aSearchData.GetReplaceString() ),
232  GetChars( suffix ) );
233 
234  aText = prefix + aSearchData.GetReplaceString() + suffix;
235 
236  return true;
237 }
virtual bool IsReplaceable() const
Function IsReplaceable.
Definition: base_struct.h:455
const wxChar *const traceFindReplace
Flag to enable find and replace debug tracing.
static const wxChar * GetChars(const wxString &s)
Function GetChars returns a wxChar* to the actual wxChar* data within a wxString, and is helpful for ...
Definition: macros.h:92
virtual wxString GetClass() const =0
Function GetClass returns the class name.
virtual bool EDA_ITEM::Replace ( wxFindReplaceData &  aSearchData,
void *  aAuxData = NULL 
)
inlinevirtualinherited

Function Replace performs a text replace using the find and replace criteria in aSearchData on items that support text find and replace.

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

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

Reimplemented in SCH_SHEET, SCH_SHEET_PIN, SCH_FIELD, and SCH_TEXT.

Definition at line 443 of file base_struct.h.

443 { return false; }
void GERBER_FILE_IMAGE::ResetDefaultValues ( )
virtual

Reimplemented in EXCELLON_IMAGE.

Definition at line 178 of file gerber_file_image.cpp.

References GERB_INTERPOL_LINEAR_1X, m_360Arc_enbl, 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_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_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(), wxPoint::x, and wxPoint::y.

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

179 {
180  m_InUse = false;
182  m_FileName.Empty();
183  m_ImageName = wxT( "no name" ); // Image name from the IN command
184  m_ImageNegative = false; // true = Negative image
185  m_IsX2_file = false; // true only if a %TF, %TA or %TD command
186  delete m_FileFunction; // file function parameters
187  m_FileFunction = NULL;
188  m_MD5_value.Empty(); // MD5 value found in a %TF.MD5 command
189  m_PartString.Empty(); // string found in a %TF.Part command
190  m_hasNegativeItems = -1; // set to uninitialized
191  m_ImageJustifyOffset = wxPoint(0,0); // Image justify Offset
192  m_ImageJustifyXCenter = false; // Image Justify Center on X axis (default = false)
193  m_ImageJustifyYCenter = false; // Image Justify Center on Y axis (default = false)
194  m_GerbMetric = false; // false = Inches (default), true = metric
195  m_Relative = false; // false = absolute Coord,
196  // true = relative Coord
197  m_NoTrailingZeros = false; // true: trailing zeros deleted
198  m_ImageOffset.x = m_ImageOffset.y = 0; // Coord Offset, from IO command
199  m_ImageRotation = 0; // Allowed 0, 90, 180, 270 (in degree)
200  m_LocalRotation = 0.0; // Layer totation from RO command (in 0.1 degree)
201  m_Offset.x = 0;
202  m_Offset.y = 0; // Coord Offset, from OF command
203  m_Scale.x = m_Scale.y = 1.0; // scale (A and B) this layer
204  m_MirrorA = false; // true: miror / axe A (default = X)
205  m_MirrorB = false; // true: miror / axe B (default = Y)
206  m_SwapAxis = false; // false if A = X, B = Y; true if A =Y, B = Y
207  m_Has_DCode = false; // true = DCodes in file
208  // false = no DCode->
209  // search for separate DCode file
210  m_FmtScale.x = m_FmtScale.y = 4; // Initialize default format to 3.4 => 4
211  m_FmtLen.x = m_FmtLen.y = 3 + 4; // Initialize default format len = 3+4
212 
213  m_Iterpolation = GERB_INTERPOL_LINEAR_1X; // Linear, 90 arc, Circ.
214  m_360Arc_enbl = false; // 360 deg circular
215  // interpolation disable
216  m_Current_Tool = 0; // Current Dcode selected
217  m_CommandState = 0; // State of the current command
218  m_CurrentPos.x = m_CurrentPos.y = 0; // current specified coord
219  m_PreviousPos.x = m_PreviousPos.y = 0; // last specified coord
220  m_IJPos.x = m_IJPos.y = 0; // current centre coord for
221  // plot arcs & circles
222  m_LineNum = 0; // line number in file being read
223  m_Current_File = NULL; // Gerber file to read
224  m_PolygonFillMode = false;
226  m_Selected_Tool = 0;
227  m_Last_Pen_Command = 0;
228  m_Exposure = false;
229 }
X2_ATTRIBUTE_FILEFUNCTION * m_FileFunction
GERBER_LAYER m_GBRLayerParams
bool m_Exposure
whether an aperture macro tool is flashed on or off
void EDA_ITEM::SetBack ( EDA_ITEM aBack)
inlineinherited

Definition at line 223 of file base_struct.h.

Referenced by DHEAD::append(), DHEAD::insert(), SCH_EDIT_FRAME::PutDataInPreviousState(), DHEAD::remove(), and SwapItemData().

223 { Pback = aBack; }
EDA_ITEM * Pback
previous in linked list
Definition: base_struct.h:176
void EDA_ITEM::SetBrightened ( )
inlineinherited

Definition at line 240 of file base_struct.h.

References BRIGHTENED, and EDA_ITEM::SetFlags().

Referenced by GERBVIEW_SELECTION_TOOL::disambiguationMenu(), and SELECTION_TOOL::disambiguationMenu().

240 { SetFlags( BRIGHTENED ); }
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:264
#define BRIGHTENED
item is drawn with a bright contour
Definition: base_struct.h:133
void EDA_ITEM::SetFlags ( STATUS_FLAGS  aMask)
inlineinherited

Definition at line 264 of file base_struct.h.

Referenced by SCH_EAGLE_PLUGIN::addBusEntries(), SCH_SCREEN::addConnectedItemsToBlock(), PCB_BASE_FRAME::AddModuleToBoard(), AddSegmentToDragList(), PCBNEW_CONTROL::AppendBoard(), PCB_EDIT_FRAME::AppendBoardFile(), PCB_EDIT_FRAME::Begin_DrawSegment(), FOOTPRINT_EDIT_FRAME::Begin_Edge_Module(), PCB_EDIT_FRAME::Begin_Route(), PCB_EDIT_FRAME::Begin_Zone(), PCB_EDIT_FRAME::BeginMoveDimensionText(), PCB_EDIT_FRAME::BeginMoveTarget(), SCH_EDIT_FRAME::BeginSegment(), PCB_EDIT_FRAME::Change_Side_Module(), SCH_EDIT_FRAME::ConvertPart(), SCH_EDIT_FRAME::copyBlockItems(), CopyMarkedItems(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::copyPanelToOptions(), LIB_PART::CopySelectedItems(), LIB_EDIT_FRAME::copySelectedItems(), SCH_EDIT_FRAME::CreateBusBusEntry(), SCH_EDIT_FRAME::CreateBusWireEntry(), SCH_EDIT_FRAME::CreateNewImage(), SCH_EDIT_FRAME::CreateNewText(), LIB_EDIT_FRAME::CreatePin(), SCH_EDIT_FRAME::CreateSheet(), SCH_EDIT_FRAME::CreateSheetPin(), PCB_EDIT_FRAME::CreateTarget(), PCB_EDIT_FRAME::CreateTextePcb(), FOOTPRINT_EDIT_FRAME::CreateTextModule(), SCH_EDIT_FRAME::DeleteItem(), PCB_EDIT_FRAME::EditDimension(), PCB_EDIT_FRAME::FlipTextePcb(), LIB_EDIT_FRAME::GetComponentFromRedoList(), LIB_EDIT_FRAME::GetComponentFromUndoList(), SCH_SCREEN::GetConnection(), PCB_BASE_FRAME::GlobalChange_PadSettings(), FOOTPRINT_EDIT_FRAME::HandleBlockEnd(), PCB_BASE_FRAME::Import_Pad_Settings(), SCH_EDIT_FRAME::ImportSheetPin(), SCH_JUNCTION::IsSelectStateChanged(), SCH_NO_CONNECT::IsSelectStateChanged(), SCH_MARKER::IsSelectStateChanged(), SCH_BUS_ENTRY_BASE::IsSelectStateChanged(), SCH_BITMAP::IsSelectStateChanged(), SCH_LINE::IsSelectStateChanged(), SCH_TEXT::IsSelectStateChanged(), SCH_SHEET::IsSelectStateChanged(), SCH_COMPONENT::IsSelectStateChanged(), SCH_EDIT_FRAME::Load_Component(), SCH_SCREEN::MarkConnections(), MarkItemsInBloc(), moveBitmap(), SCH_EDIT_FRAME::MoveImage(), SCH_EDIT_FRAME::OnConvertTextType(), SCH_EDIT_FRAME::OnCopySchematicItemRequest(), LIB_EDIT_FRAME::OnEditPin(), TARGET_PROPERTIES_DIALOG_EDITOR::OnOkClick(), SCH_EDIT_FRAME::OnSelectUnit(), KIGFX::ORIGIN_VIEWITEM::ORIGIN_VIEWITEM(), PCB_EDIT_FRAME::Other_Layer_Route(), DRAWING_TOOL::PlaceText(), SCH_EDIT_FRAME::PrepareMoveItem(), LIB_EDIT_FRAME::Process_Special_Functions(), EDIT_TOOL::Properties(), SCH_EDIT_FRAME::PutDataInPreviousState(), SCH_EDIT_FRAME::RepeatDrawItem(), LIB_EDIT_FRAME::RepeatPinItem(), SCH_EDIT_FRAME::ReSizeSheet(), PCB_BASE_FRAME::Rotate_Module(), PCB_EDIT_FRAME::Rotate_Texte_Pcb(), LIB_EDIT_FRAME::SaveCopyInUndoList(), SCH_SCREEN::SelectBlockItems(), EDA_ITEM::SetBrightened(), LIB_PIN::SetConversion(), BLOCK_SELECTOR::SetFlags(), EDA_ITEM::SetHighlighted(), EDA_ITEM::SetModified(), EDA_ITEM::SetSelected(), EDA_ITEM::SetWireImage(), PCB_EDIT_FRAME::Start_DragTrackSegmentAndKeepSlope(), PCB_EDIT_FRAME::Start_Move_DrawItem(), FOOTPRINT_EDIT_FRAME::Start_Move_EdgeMod(), PCB_EDIT_FRAME::Start_Move_Zone_Corner(), PCB_EDIT_FRAME::Start_Move_Zone_Drag_Outline_Edge(), PCB_EDIT_FRAME::Start_Move_Zone_Outlines(), PCB_EDIT_FRAME::StartMoveModule(), PCB_EDIT_FRAME::StartMoveOneNodeOrSegment(), PCB_BASE_FRAME::StartMovePad(), LIB_EDIT_FRAME::StartMovePin(), PCB_BASE_FRAME::StartMoveTexteModule(), PCB_EDIT_FRAME::StartMoveTextePcb(), DIALOG_PCB_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), and UndrawAndMarkSegmentsToDrag().

264 { m_Flags |= aMask; }
STATUS_FLAGS m_Flags
Flag bits for editing and other uses.
Definition: base_struct.h:186
void EDA_ITEM::SetForceVisible ( bool  aEnable)
inlineinherited

Function SetForceVisible is used to set and cleag 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 276 of file base_struct.h.

Referenced by SCH_EDIT_FRAME::OnFindSchematicItem(), and SCH_EDIT_FRAME::updateFindReplaceView().

276 { m_forceVisible = aEnable; }
bool m_forceVisible
Set to true to override the visibility setting of the item.
Definition: base_struct.h:183
void EDA_ITEM::SetHighlighted ( )
inlineinherited

Definition at line 239 of file base_struct.h.

References HIGHLIGHTED, and EDA_ITEM::SetFlags().

239 { SetFlags( HIGHLIGHTED ); }
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:264
#define HIGHLIGHTED
item is drawn in normal colors, when the rest is darkened
Definition: base_struct.h:132
void EDA_ITEM::SetList ( DHEAD aList)
inlineinherited

Definition at line 225 of file base_struct.h.

Referenced by DHEAD::append(), DHEAD::insert(), DHEAD::remove(), and SwapItemData().

225 { m_List = aList; }
DHEAD * m_List
which DLIST I am on.
Definition: base_struct.h:177
void EDA_ITEM::SetModified ( )
inherited
void EDA_ITEM::SetNext ( EDA_ITEM aNext)
inlineinherited

Definition at line 222 of file base_struct.h.

Referenced by DHEAD::append(), DHEAD::insert(), SCH_EDIT_FRAME::PutDataInPreviousState(), DHEAD::remove(), and SwapItemData().

222 { Pnext = aNext; }
EDA_ITEM * Pnext
next in linked list
Definition: base_struct.h:175
void EDA_ITEM::SetParent ( EDA_ITEM aParent)
inlineinherited

Definition at line 224 of file base_struct.h.

Referenced by MODULE::Add(), BOARD::Add(), BOARD_NETLIST_UPDATER::addNewComponent(), LIB_FIELD::Copy(), SCH_EDIT_FRAME::copyBlockItems(), CopyMarkedItems(), SCH_EDIT_FRAME::CreateSheet(), DIALOG_LIB_EDIT_PIN::DIALOG_LIB_EDIT_PIN(), PCB_EDIT_FRAME::Exchange_Module(), DISPLAY_FOOTPRINTS_FRAME::Get_Module(), DIALOG_FOOTPRINT_FP_EDITOR::initModeditProperties(), DIALOG_FOOTPRINT_BOARD_EDITOR::InitModeditProperties(), LIB_PART::LIB_PART(), FOOTPRINT_EDIT_FRAME::Load_Module_From_BOARD(), SCH_LEGACY_PLUGIN::loadHierarchy(), LIB_EDIT_FRAME::LoadOneSymbol(), MODULE::MODULE(), DIALOG_FOOTPRINT_BOARD_EDITOR::OnEditReference(), DIALOG_FOOTPRINT_BOARD_EDITOR::OnEditValue(), DIALOG_LIB_EDIT_PIN::OnPaintShowPanel(), MODULE::operator=(), SCH_COMPONENT::operator=(), PCB_PARSER::parseMODULE_unchecked(), LIB_EDIT_FRAME::pasteClipboard(), PCBNEW_CONTROL::PasteItemsFromClipboard(), FOOTPRINT_EDIT_FRAME::Process_Special_Functions(), BOARD_COMMIT::Push(), FOOTPRINT_PREVIEW_PANEL::renderFootprint(), BOARD_NETLIST_UPDATER::replaceComponent(), BOARD::ReplaceNetlist(), PCB_BASE_EDIT_FRAME::SaveCopyInUndoList(), SaveCopyOfZones(), SCH_COMPONENT::SCH_COMPONENT(), SCH_SHEET::SCH_SHEET(), SCH_SHEET_PIN::SCH_SHEET_PIN(), LIB_PART::SetFields(), SetSchItemParent(), PCB_EDIT_FRAME::StartMoveModule(), SCH_SHEET::SwapData(), SCH_COMPONENT::SwapData(), and SwapItemData().

224 { m_Parent = aParent; }
EDA_ITEM * m_Parent
Linked list: Link (parent struct)
Definition: base_struct.h:179
void EDA_ITEM::SetSelected ( )
inlineinherited

Definition at line 238 of file base_struct.h.

References SELECTED, and EDA_ITEM::SetFlags().

Referenced by LIB_EDIT_FRAME::pasteClipboard(), GERBVIEW_SELECTION_TOOL::selectVisually(), and SELECTION_TOOL::selectVisually().

238 { SetFlags( SELECTED ); }
#define SELECTED
Definition: base_struct.h:116
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:264
void EDA_ITEM::SetStatus ( STATUS_FLAGS  aStatus)
inlineinherited
void EDA_ITEM::SetTimeStamp ( timestamp_t  aNewTimeStamp)
inlineinherited

Definition at line 214 of file base_struct.h.

Referenced by PCB_BASE_FRAME::AddModuleToBoard(), BOARD_NETLIST_UPDATER::addNewComponent(), PCAD2KICAD::PCB_TEXT::AddToBoard(), PCAD2KICAD::PCB_LINE::AddToBoard(), PCAD2KICAD::PCB_ARC::AddToBoard(), PCAD2KICAD::PCB_PAD::AddToBoard(), PCAD2KICAD::PCB_POLYGON::AddToBoard(), PCAD2KICAD::PCB_MODULE::AddToBoard(), SCH_EDIT_FRAME::AppendSchematic(), PCB_EDIT_FRAME::Begin_Zone(), SCH_EDIT_FRAME::CreateSheet(), Diagnose(), DuplicateItemsInList(), DuplicateStruct(), EDIT_TOOL::editFootprintInFpEditor(), PCB_EDIT_FRAME::Exchange_Module(), DIALOG_FOOTPRINT_BOARD_EDITOR::GotoModuleEditor(), EDA_ITEM::initVars(), BOARD::InsertArea(), LEGACY_PLUGIN::loadMODULE(), LEGACY_PLUGIN::loadPCB_TARGET(), LEGACY_PLUGIN::loadPCB_TEXT(), EAGLE_PLUGIN::loadPlain(), EAGLE_PLUGIN::loadSignals(), LEGACY_PLUGIN::loadTrackList(), EDA_ITEM::operator=(), EAGLE_PLUGIN::packageCircle(), EAGLE_PLUGIN::packagePolygon(), EAGLE_PLUGIN::packageRectangle(), EAGLE_PLUGIN::packageText(), PCB_PARSER::parseDIMENSION(), SCH_EDIT_FRAME::PasteListOfItems(), FOOTPRINT_EDIT_FRAME::Process_Special_Functions(), PCB_EDIT_FRAME::Process_Special_Functions(), SCH_SCREENS::ReplaceDuplicateTimeStamps(), BOARD::ReplaceNetlist(), SCH_SHEET::SCH_SHEET(), SCH_COMPONENT::SetTimeStamp(), SimilarLabelsDiagnose(), SwapItemData(), TestDuplicateSheetNames(), and DIALOG_ERC::TestErc().

214 { m_TimeStamp = aNewTimeStamp; }
timestamp_t m_TimeStamp
Time stamp used for logical links.
Definition: base_struct.h:180
void EDA_ITEM::SetWireImage ( )
inlineinherited

Definition at line 237 of file base_struct.h.

References IS_WIRE_IMAGE, and EDA_ITEM::SetFlags().

Referenced by moveItemWithMouseCursor().

237 { SetFlags( IS_WIRE_IMAGE ); }
void SetFlags(STATUS_FLAGS aMask)
Definition: base_struct.h:264
#define IS_WIRE_IMAGE
Item to be drawn as wireframe while editing.
Definition: base_struct.h:113
static bool EDA_ITEM::Sort ( const EDA_ITEM aLeft,
const EDA_ITEM aRight 
)
inlinestaticinherited

Function Sort is a 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 474 of file base_struct.h.

References EDA_ITEM::Matches(), EDA_ITEM::operator=(), EDA_ITEM::ViewBBox(), and EDA_ITEM::ViewGetLayers().

Referenced by PART_LIB::GetEntryTypePowerNames().

474 { return *aLeft < *aRight; }
void GERBER_FILE_IMAGE::StepAndRepeatItem ( const GERBER_DRAW_ITEM aItem)

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)

Parameters
aItem= the item to repeat

Definition at line 298 of file gerber_file_image.cpp.

References DLIST< T >::Append(), GetLayerParams(), m_Drawings, GERBER_LAYER::m_XRepeatCount, GERBER_LAYER::m_YRepeatCount, GERBER_DRAW_ITEM::MoveXY(), scaletoIU(), wxPoint::x, and wxPoint::y.

Referenced by Execute_DCODE_Command(), and Execute_G_Command().

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

Function Type()

returns the type of object. This attribute should never be changed after a constructor sets it, so there is no public "setter" method.

Returns
KICAD_T - the type of object.

Definition at line 209 of file base_struct.h.

References EDA_ITEM::m_StructType.

Referenced by Abort_Move_ModuleOutline(), abortMoveBitmap(), abortMoveItem(), AbortPinMove(), MODULE::Add(), CN_CLUSTER::Add(), BOARD::Add(), CN_CONNECTIVITY_ALGO::Add(), PCB_EDIT_FRAME::Add45DegreeSegment(), SCH_SCREEN::addConnectedItemsToBlock(), POINT_EDITOR::addCorner(), POINT_EDITOR::addCornerCondition(), SCH_EDIT_FRAME::addCurrentItemToList(), AddMenusForComponent(), AddMenusForEditComponent(), SCH_SHEET::AddPin(), ALIGN_DISTRIBUTE_TOOL::AlignBottom(), ALIGN_DISTRIBUTE_TOOL::AlignCenterX(), ALIGN_DISTRIBUTE_TOOL::AlignCenterY(), ALIGN_DISTRIBUTE_TOOL::AlignTop(), PCB_EDIT_FRAME::Attribut_Track(), PCB_EDIT_FRAME::Autoroute(), PCB_EDIT_FRAME::Begin_Route(), SCH_EDIT_FRAME::BeginSegment(), PCB_EDIT_FRAME::Block_Delete(), PCB_EDIT_FRAME::Block_Duplicate(), PCB_EDIT_FRAME::Block_Flip(), PCB_EDIT_FRAME::Block_Move(), PCB_EDIT_FRAME::Block_Rotate(), HIERARCHY_NAVIG_DLG::buildHierarchyTree(), SCH_SCREENS::buildScreenList(), SCH_SHEET_LIST::BuildSheetList(), calcArea(), calcMaxArea(), SCH_NO_CONNECT::CanConnect(), SCH_JUNCTION::CanConnect(), SCH_BUS_WIRE_ENTRY::CanConnect(), SCH_LINE::CanConnect(), SCH_BUS_BUS_ENTRY::CanConnect(), SCH_LABEL::CanConnect(), SCH_GLOBALLABEL::CanConnect(), SCH_HIERLABEL::CanConnect(), SCH_SHEET::CanConnect(), SCH_COMPONENT::CanConnect(), ROUTER_TOOL::CanInlineDrag(), DIALOG_EXCHANGE_FOOTPRINTS::changeSameFootprints(), SCH_SCREENS::ChangeSymbolLibNickname(), SCH_EDIT_FRAME::CheckListConnections(), EDGE_MODULE::ClassOf(), BOARD_CONNECTED_ITEM::ClassOf(), TEXTE_PCB::ClassOf(), TEXTE_MODULE::ClassOf(), DRAWSEGMENT::ClassOf(), TRACK::ClassOf(), NETINFO_ITEM::ClassOf(), MODULE::ClassOf(), D_PAD::ClassOf(), BOARD::ClassOf(), VIA::ClassOf(), SCH_SHEET::CleanupSheet(), Collect_TrackSegmentsToDrag(), LIB_BEZIER::compare(), LIB_CIRCLE::compare(), LIB_RECTANGLE::compare(), LIB_POLYLINE::compare(), LIB_TEXT::compare(), LIB_ARC::compare(), LIB_FIELD::compare(), LIB_PIN::compare(), SCH_SHEET::ComponentCount(), GRID_HELPER::computeAnchors(), SCH_SCREEN::CountConnectedItems(), SCH_SHEET::CountSheets(), MODULE::CoverageRatio(), LIB_EDIT_FRAME::CreateGraphicItem(), CINFO3D_VISU::createLayers(), BOARD::CreateLockPoint(), SCH_EDIT_FRAME::CreateNewText(), CINFO3D_VISU::createNewTrack(), PCB_EDIT_FRAME::createPopupMenuForTracks(), CreateRoutesSection(), PCB_EDITOR_CONTROL::CrossProbeSchToPcb(), D_PAD::D_PAD(), FOOTPRINT_EDIT_FRAME::Delete_Edge_Module(), PCB_EDIT_FRAME::Delete_Segment_Edge(), SCH_SCREENS::DeleteAllMarkers(), SCH_SCREEN::DeleteItem(), LIB_EDIT_FRAME::deleteItem(), deleteItem(), SCH_EDIT_FRAME::DeleteItem(), DeleteNullTrackSegments(), PYTHON_ACTION_PLUGINS::deregister_action(), DIALOG_SCH_EDIT_ONE_FIELD::DIALOG_SCH_EDIT_ONE_FIELD(), DIALOG_ERC::DisplayERC_MarkersList(), ALIGN_DISTRIBUTE_TOOL::doAlignLeft(), ALIGN_DISTRIBUTE_TOOL::doAlignRight(), DRC::doTrackDrc(), DRC::doTrackKeepoutDrc(), KIGFX::GERBVIEW_PAINTER::Draw(), KIGFX::PCB_PAINTER::Draw(), KIGFX::PCB_PAINTER::draw(), DrawMovePin(), DrawMovingBlockOutlines(), drawPickedItems(), CN_ITEM::Dump(), BOARD::Duplicate(), MODULE::Duplicate(), PCB_EDIT_FRAME::duplicateItems(), DuplicateItemsInList(), SCH_EDIT_FRAME::EditComponent(), SCH_EDIT_FRAME::EditComponentFieldText(), LIB_EDIT_FRAME::EditSymbolText(), SCH_EDIT_FRAME::EndSegment(), PCB_EDIT_FRAME::EraseRedundantTrack(), ExitSheet(), SCH_SCREEN::ExtractWires(), DRC::fillMarker(), find_vias_and_tracks_at(), SCH_EDIT_FRAME::FindComponentAndItem(), NETLIST_EXPORTER::findNextComponent(), NETLIST_EXPORTER::findNextComponentAndCreatePinList(), SCH_SHEET_PATH::FindNextItem(), SCH_SHEET_LIST::FindNextItem(), SCH_SHEET_PATH::FindPreviousItem(), SCH_SHEET_LIST::FindPreviousItem(), EDIT_TOOL::FootprintFilter(), FootprintWriteShape(), PCB_IO::Format(), PCB_IO::format(), FormatProbeItem(), POINT_EDITOR::get45DegConstrainer(), getAnchorPoint(), TRACK::GetBestInsertPoint(), BOARD_ITEM::GetBoard(), TRACK::GetBoundingBox(), BOARD_CONNECTED_ITEM::GetClearance(), KIGFX::PCB_RENDER_SETTINGS::GetColor(), NETLIST_OBJECT::GetComponentParent(), SCH_SCREEN::GetConnection(), SCH_TEXT::GetConnectionPoints(), SCH_TEXT::GetEndPoints(), SCH_SHEET::GetEndPoints(), GetFirstTrack(), GetFirstVia(), SCH_SCREEN::GetHierarchicalItems(), SCH_SCREENS::GetLibNicknames(), TEXTE_PCB::GetMsgPanelInfo(), SCH_TEXT::GetMsgPanelInfo(), BOARD_CONNECTED_ITEM::GetNetClass(), CONNECTIVITY_DATA::GetNetItems(), LIB_PART::GetNextDrawItem(), DRAWSEGMENT::GetParentModule(), SCH_SCREEN::GetPin(), LIB_PART::GetPin(), SCH_COMPONENT::GetPinPhysicalPosition(), getRect(), SELECTION::GetTopLeftItem(), LIB_EDIT_FRAME::GlobalSetPins(), SELECTION_TOOL::guessSelectionCandidates(), hash_eda(), SCH_SCREENS::HasNoFullyDefinedLibIds(), SCH_SHEET::HasUndefinedPins(), SCH_EDIT_FRAME::ImportSheetPin(), DIALOG_LABEL_EDITOR::InitDialog(), ROUTER_TOOL::InlineDrag(), SCH_COLLECTOR::Inspect(), GENERAL_COLLECTOR::Inspect(), SCH_FIND_COLLECTOR::Inspect(), PCB_LAYER_COLLECTOR::Inspect(), ARRAY_CREATOR::Invoke(), CN_ANCHOR::IsDangling(), SCH_TEXT::IsDanglingStateChanged(), SCH_COLLECTOR::IsNode(), TRACK::IsNull(), SCH_LINE::IsParallel(), SCH_SCREEN::IsTerminalPoint(), BOARD_ITEM::IsTrack(), itemIsIncludedByFilter(), CLIPBOARD_IO::Load(), PNS_PCBNEW_RULE_RESOLVER::localPadClearance(), SCH_EDIT_FRAME::LocateAndShowItem(), SCH_EDIT_FRAME::LocateItem(), SCH_SHEET::LocatePathOfScreen(), Magnetize(), EDIT_POINTS_FACTORY::Make(), SCH_SCREEN::MarkConnections(), CONNECTIVITY_DATA::MarkItemNetAsDirty(), CN_CONNECTIVITY_ALGO::markItemNetAsDirty(), MarkItemsInBloc(), BOARD::MarkTrace(), TRACKS_CLEANER::mergeCollinearSegmentIfPossible(), TRACKS_CLEANER::MergeCollinearTracks(), SCH_LINE::MergeOverlap(), FOOTPRINT_EDIT_FRAME::ModeditLocateAndDisplay(), moveItemWithMouseCursor(), MoveMarkedItems(), MoveMarkedItemsExactly(), ROUTER_TOOL::NeighboringSegmentFilter(), SCH_EDIT_FRAME::OnConvertTextType(), SCH_EDIT_FRAME::OnCopySchematicItemRequest(), SCH_EDIT_FRAME::OnDragItem(), SCH_EDIT_FRAME::OnEditItem(), FOOTPRINT_EDIT_FRAME::OnEditItemRequest(), PCB_EDIT_FRAME::OnEditItemRequest(), SCH_EDIT_FRAME::OnHotKey(), PCB_EDIT_FRAME::OnHotkeyCopyItem(), FOOTPRINT_EDIT_FRAME::OnHotkeyDeleteItem(), PCB_EDIT_FRAME::OnHotkeyDeleteItem(), FOOTPRINT_EDIT_FRAME::OnHotkeyDuplicateItem(), PCB_EDIT_FRAME::OnHotkeyDuplicateOrArrayItem(), FOOTPRINT_EDIT_FRAME::OnHotkeyEditItem(), PCB_EDIT_FRAME::OnHotkeyEditItem(), PCB_EDIT_FRAME::OnHotkeyFlipItem(), FOOTPRINT_EDIT_FRAME::OnHotkeyMoveItem(), PCB_EDIT_FRAME::OnHotkeyMoveItem(), FOOTPRINT_EDIT_FRAME::OnHotkeyMoveItemExact(), PCB_EDIT_FRAME::OnHotkeyPlaceItem(), FOOTPRINT_EDIT_FRAME::OnHotkeyRotateItem(), PCB_EDIT_FRAME::OnHotkeyRotateItem(), FOOTPRINT_EDIT_FRAME::OnLeftClick(), LIB_EDIT_FRAME::OnLeftClick(), SCH_EDIT_FRAME::OnLeftClick(), PCB_EDIT_FRAME::OnLeftClick(), SCH_EDIT_FRAME::OnLeftDClick(), LIB_EDIT_FRAME::OnLeftDClick(), PCB_EDIT_FRAME::OnLeftDClick(), SCH_EDIT_FRAME::OnMoveItem(), SCH_EDIT_FRAME::OnOpenLibraryEditor(), SCH_EDIT_FRAME::OnOrient(), FOOTPRINT_EDIT_FRAME::OnRightClick(), LIB_EDIT_FRAME::OnRightClick(), SCH_EDIT_FRAME::OnRightClick(), PCB_EDIT_FRAME::OnRightClick(), SCH_EDIT_FRAME::OnRotate(), SCH_EDIT_FRAME::OnSelectUnit(), SCH_LINE::operator<(), LIB_ITEM::operator<(), SCH_ITEM::operator<(), SCH_COMPONENT::operator<(), SCH_BITMAP::operator=(), SCH_SHEET::operator=(), SCH_COMPONENT::operator=(), LIB_ITEM::operator==(), OrCell_Trace(), SCH_EDIT_FRAME::OrientComponent(), BOARD_COMMIT::parentObject(), PCBNEW_CONTROL::PasteItemsFromClipboard(), SCH_EDIT_FRAME::PasteListOfItems(), PCB_BASE_FRAME::PcbGeneralLocateAndDisplay(), LIB_EDIT_FRAME::PlacePin(), SCH_FIELD::Plot(), BRDITEMS_PLOTTER::Plot_1_EdgeModule(), SCH_EDIT_FRAME::PrepareMoveItem(), GAL_ARRAY_CREATOR::prePushAction(), PCB_EDIT_FRAME::PrintPage(), FOOTPRINT_EDIT_FRAME::Process_Special_Functions(), LIB_EDIT_FRAME::Process_Special_Functions(), SCH_EDIT_FRAME::Process_Special_Functions(), PCB_EDIT_FRAME::Process_Special_Functions(), BOARD_COMMIT::Push(), PCB_BASE_EDIT_FRAME::PutDataInPreviousState(), RedrawWhileMovingCursor(), DIALOG_SYMBOL_REMAP::remapSymbolsToLibTable(), MODULE::Remove(), BOARD::Remove(), CN_CONNECTIVITY_ALGO::Remove(), POINT_EDITOR::removeCorner(), POINT_EDITOR::removeCornerCondition(), LIB_PART::RemoveDrawItem(), TRACKS_CLEANER::removeDuplicatesOfTrack(), SCH_SHEET::RemovePin(), FOOTPRINT_EDIT_FRAME::RemoveStruct(), PCB_EDIT_FRAME::RemoveStruct(), SCH_EDIT_FRAME::RepeatDrawItem(), LIB_EDIT_FRAME::RepeatPinItem(), SCH_SCREENS::ReplaceDuplicateTimeStamps(), SCH_SCREEN::ReplaceWires(), GERBVIEW_SELECTION_TOOL::RequestSelection(), SELECTION_TOOL::RequestSelection(), PCB_EDIT_FRAME::Reset_All_Tracks_And_Vias_To_Netclass_Values(), PCB_BASE_FRAME::ResetTextSize(), SCH_EDIT_FRAME::ReSizeSheet(), BOARD_COMMIT::Revert(), SCH_EDIT_FRAME::RotateField(), SCH_LEGACY_PLUGIN_CACHE::saveArc(), SCH_LEGACY_PLUGIN_CACHE::saveBezier(), SCH_LEGACY_PLUGIN_CACHE::saveCircle(), PCB_BASE_EDIT_FRAME::SaveCopyInUndoList(), SCH_LEGACY_PLUGIN_CACHE::saveField(), SCH_LEGACY_PLUGIN_CACHE::savePin(), SCH_LEGACY_PLUGIN_CACHE::savePolyLine(), SCH_LEGACY_PLUGIN_CACHE::saveRectangle(), SCH_LEGACY_PLUGIN_CACHE::saveText(), SCH_EDIT_FRAME::SaveUndoItemInUndoList(), SCH_EDIT_FRAME::SchematicCleanUp(), CN_CONNECTIVITY_ALGO::searchConnections(), SCH_SHEET::SearchHierarchy(), SELECTION_TOOL::select(), SELECTION_TOOL::selectable(), SCH_SCREEN::SelectBlockItems(), PCB_EDIT_FRAME::SelectHighLight(), SELECTION_TOOL::selectVisually(), ITEM_PICKER::SetItem(), SetSchItemParent(), DIALOG_LABEL_EDITOR::SetTitle(), PCB_EDIT_FRAME::SetTrackSegmentWidth(), PCB_EDIT_FRAME::Show_1_Ratsnest(), Show_MoveNode(), ShowClearance(), ShowNewTrackWhenMovingCursor(), SortByTimeStamp(), PCB_EDIT_FRAME::Start_DragTrackSegmentAndKeepSlope(), LIB_EDIT_FRAME::StartMoveDrawSymbol(), PCB_EDIT_FRAME::StartMoveOneNodeOrSegment(), SCH_NO_CONNECT::SwapData(), SCH_JUNCTION::SwapData(), SCH_BITMAP::SwapData(), PCB_TARGET::SwapData(), SCH_FIELD::SwapData(), SCH_SHEET_PIN::SwapData(), TEXTE_PCB::SwapData(), DIMENSION::SwapData(), DRAWSEGMENT::SwapData(), TRACK::SwapData(), SCH_SHEET::SwapData(), SCH_COMPONENT::SwapData(), VIA::SwapData(), ZONE_CONTAINER::SwapData(), MODULE::SwapData(), D_PAD::SwapData(), SwapItemData(), PCB_EDIT_FRAME::SwitchLayer(), TestDuplicateSheetNames(), TRACKS_CLEANER::testTrackEndpointDangling(), TEXTE_MODULE::TEXTE_MODULE(), DIALOG_LABEL_EDITOR::TextPropertiesAccept(), TraceSegmentPcb(), SELECTION_TOOL::unselectVisually(), SCH_SHEET_PATH::UpdateAllScreenReferences(), DIALOG_SCH_EDIT_ONE_FIELD::UpdateField(), POINT_EDITOR::updateItem(), POINT_EDITOR::updatePoints(), PCB_BRIGHT_BOX::ViewDraw(), TRACK::Visit(), GERBER_DRAW_ITEM::Visit(), EDA_ITEM::Visit(), SCH_SHEET::Visit(), and SCH_COMPONENT::Visit().

210  {
211  return m_StructType;
212  }
KICAD_T m_StructType
Run time identification, keep private so it can never be changed after a constructor sets it...
Definition: base_struct.h:171
const BOX2I EDA_ITEM::ViewBBox ( ) const
overridevirtualinherited

Function ViewBBox() returns the bounding box of the item covering all its layers.

Returns
BOX2I - the current bounding box

Implements KIGFX::VIEW_ITEM.

Reimplemented in D_PAD, MODULE, EDIT_POINTS, GERBER_DRAW_ITEM, DRAWSEGMENT, DIMENSION, TEXTE_MODULE, MARKER_PCB, KIGFX::WORKSHEET_VIEWITEM, ROUTER_PREVIEW_ITEM, KIGFX::PREVIEW::CENTRELINE_RECT_ITEM, KIGFX::ORIGIN_VIEWITEM, KIGFX::PREVIEW::POLYGON_ITEM, KIGFX::PREVIEW::SELECTION_AREA, KIGFX::PREVIEW::RULER_ITEM, KIGFX::RATSNEST_VIEWITEM, BRIGHT_BOX, and KIGFX::PREVIEW::ARC_ASSISTANT.

Definition at line 266 of file base_struct.cpp.

References EDA_ITEM::GetBoundingBox().

Referenced by SELECTION_TOOL::selectable(), SELECTION_TOOL::selectMultiple(), EDA_ITEM::Sort(), BRIGHT_BOX::ViewBBox(), DIMENSION::ViewBBox(), DRAWSEGMENT::ViewBBox(), BRIGHT_BOX::ViewDraw(), and COMMON_TOOLS::ZoomFitScreen().

267 {
268  // Basic fallback
269  return BOX2I( VECTOR2I( GetBoundingBox().GetOrigin() ),
270  VECTOR2I( GetBoundingBox().GetSize() ) );
271 }
virtual const EDA_RECT GetBoundingBox() const
Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes...
BOX2< VECTOR2I > BOX2I
Definition: box2.h:468
VECTOR2< int > VECTOR2I
Definition: vector2d.h:589
virtual void KIGFX::VIEW_ITEM::ViewDraw ( int  aLayer,
VIEW aView 
) const
inlinevirtualinherited

Function ViewDraw() Draws the parts of the object belonging to layer aLayer.

viewDraw() is an alternative way for drawing objects if 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
aLayercurrent drawing layer
aViewpointer to the VIEW device we are drawing on

Reimplemented in EDIT_POINTS, KIGFX::WORKSHEET_VIEWITEM, ROUTER_PREVIEW_ITEM, KIGFX::VIEW_GROUP, KIGFX::PREVIEW::SELECTION_AREA, KIGFX::PREVIEW::SIMPLE_OVERLAY_ITEM, KIGFX::ORIGIN_VIEWITEM, BRIGHT_BOX, KIGFX::PREVIEW::RULER_ITEM, KIGFX::RATSNEST_VIEWITEM, KIGFX::PREVIEW::ARC_ASSISTANT, and PCB_BRIGHT_BOX.

Definition at line 116 of file view_item.h.

References KIGFX::VIEW_ITEM::ViewGetLayers().

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

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

Function ViewGetLayers() Returns the all the layers within the VIEW the object is painted on.

For instance, a D_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[]output layer index array
aCountnumber of layer indices in aLayers[]

Implements KIGFX::VIEW_ITEM.

Reimplemented in D_PAD, MODULE, EDIT_POINTS, VIA, BOARD_ITEM, GERBER_DRAW_ITEM, TRACK, TEXTE_MODULE, ZONE_CONTAINER, MARKER_PCB, KIGFX::WORKSHEET_VIEWITEM, ROUTER_PREVIEW_ITEM, KIGFX::ORIGIN_VIEWITEM, KIGFX::PREVIEW::SIMPLE_OVERLAY_ITEM, BRIGHT_BOX, KIGFX::RATSNEST_VIEWITEM, and KIGFX::PREVIEW::RULER_ITEM.

Definition at line 274 of file base_struct.cpp.

Referenced by EDA_ITEM::Sort().

275 {
276  // Basic fallback
277  aCount = 1;
278  aLayers[0] = 0;
279 }
virtual unsigned int KIGFX::VIEW_ITEM::ViewGetLOD ( int  aLayer,
VIEW aView 
) const
inlinevirtualinherited

Function ViewGetLOD() Returns 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
aLayercurrent drawing layer
aViewpointer 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 D_PAD, MODULE, VIA, GERBER_DRAW_ITEM, TRACK, TEXTE_MODULE, and EDGE_MODULE.

Definition at line 140 of file view_item.h.

Referenced by KIGFX::VIEW::drawItem::operator()().

141  {
142  // By default always show the item
143  return 0;
144  }
SEARCH_RESULT GERBER_FILE_IMAGE::Visit ( INSPECTOR  inspector,
void *  testData,
const KICAD_T  scanTypes[] 
)
overridevirtual

>

Function Visit may be re-implemented for each derived class in order to handle all the types given by its member data. Implementations should call inspector->Inspect() on types in scanTypes[], and may use IterateForward() to do so on lists of such data.

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

Reimplemented from EDA_ITEM.

Definition at line 390 of file gerber_file_image.cpp.

References GERBER_DRAW_ITEM_T, GERBER_IMAGE_LIST_T, GERBER_IMAGE_T, GetClass(), EDA_ITEM::IterateForward(), m_Drawings, SEARCH_CONTINUE, and SEARCH_QUIT.

Referenced by GBR_LAYOUT::Visit().

391 {
392  KICAD_T stype;
394  const KICAD_T* p = scanTypes;
395  bool done = false;
396 
397 #if 0 && defined(DEBUG)
398  std::cout << GetClass().mb_str() << ' ';
399 #endif
400 
401  while( !done )
402  {
403  stype = *p;
404 
405  switch( stype )
406  {
407  case GERBER_IMAGE_T:
408  case GERBER_IMAGE_LIST_T:
409  ++p;
410  break;
411 
412  case GERBER_DRAW_ITEM_T:
413  result = IterateForward( &m_Drawings[0], inspector, testData, p );
414  ++p;
415  break;
416 
417  default: // catch EOT or ANY OTHER type here and return.
418  done = true;
419  break;
420  }
421 
422  if( result == SEARCH_QUIT )
423  break;
424  }
425 
426  return result;
427 }
static SEARCH_RESULT IterateForward(EDA_ITEM *listStart, INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
Function IterateForward walks through the object tree calling the inspector() on each object type req...
wxString GetClass() const override
Function GetClass returns the class name.
KICAD_T
Enum KICAD_T is the set of class identification values, stored in EDA_ITEM::m_StructType.
Definition: typeinfo.h:78
DLIST< GERBER_DRAW_ITEM > m_Drawings
SEARCH_RESULT
Definition: base_struct.h:64

Member Data Documentation

bool GERBER_FILE_IMAGE::m_360Arc_enbl
wxString GERBER_FILE_IMAGE::m_AperFunction

Definition at line 162 of file gerber_file_image.h.

Referenced by ExecuteRS274XCommand(), and RemoveAttribute().

D_CODE* GERBER_FILE_IMAGE::m_Aperture_List[TOOLS_MAX_COUNT]
private

Dcode (Aperture) List for this layer (max 999)

Definition at line 100 of file gerber_file_image.h.

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

APERTURE_MACRO_SET GERBER_FILE_IMAGE::m_aperture_macros

a collection of APERTURE_MACROS, sorted by name

Definition at line 158 of file gerber_file_image.h.

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

int GERBER_FILE_IMAGE::m_CommandState

Definition at line 143 of file gerber_file_image.h.

Referenced by ReadRS274XCommand(), and ResetDefaultValues().

std::map<wxString, int> GERBER_FILE_IMAGE::m_ComponentsList
FILE* GERBER_FILE_IMAGE::m_Current_File
int GERBER_FILE_IMAGE::m_Current_Tool
wxPoint GERBER_FILE_IMAGE::m_CurrentPos

Definition at line 145 of file gerber_file_image.h.

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

bool GERBER_FILE_IMAGE::m_Exposure
private

whether an aperture macro tool is flashed on or off

Definition at line 101 of file gerber_file_image.h.

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

STATUS_FLAGS EDA_ITEM::m_Flags
protectedinherited

Flag bits for editing and other uses.

Definition at line 186 of file base_struct.h.

Referenced by LIB_CIRCLE::BeginEdit(), LIB_RECTANGLE::BeginEdit(), LIB_POLYLINE::BeginEdit(), LIB_TEXT::BeginEdit(), LIB_ARC::BeginEdit(), LIB_FIELD::BeginEdit(), LIB_CIRCLE::calcEdit(), LIB_POLYLINE::calcEdit(), LIB_RECTANGLE::calcEdit(), LIB_TEXT::calcEdit(), LIB_ARC::calcEdit(), LIB_FIELD::calcEdit(), LIB_TEXT::Clone(), LIB_CIRCLE::ContinueEdit(), LIB_RECTANGLE::ContinueEdit(), LIB_POLYLINE::ContinueEdit(), LIB_TEXT::ContinueEdit(), LIB_ARC::ContinueEdit(), LIB_FIELD::ContinueEdit(), SCH_LINE::Draw(), TRACK::Draw(), DRAWSEGMENT::Draw(), MODULE::Draw(), SEGZONE::Draw(), LIB_CIRCLE::drawGraphic(), LIB_POLYLINE::drawGraphic(), LIB_RECTANGLE::drawGraphic(), LIB_BEZIER::drawGraphic(), LIB_ARC::drawGraphic(), DRAWSEGMENT::DRAWSEGMENT(), LIB_CIRCLE::EndEdit(), LIB_RECTANGLE::EndEdit(), LIB_POLYLINE::EndEdit(), LIB_TEXT::EndEdit(), LIB_ARC::EndEdit(), LIB_ITEM::EndEdit(), LIB_FIELD::EndEdit(), EDA_ITEM::GetFlags(), TRACK::GetMsgPanelInfoBase_Common(), SCH_JUNCTION::HitTest(), SCH_LINE::HitTest(), GERBER_DRAW_ITEM::HitTest(), SCH_COMPONENT::HitTest(), LIB_ITEM::InEditMode(), EDA_ITEM::initVars(), SCH_ITEM::IsConnected(), SCH_LINE::Move(), EDA_ITEM::operator=(), SCH_COMPONENT::SCH_COMPONENT(), LIB_PIN::SetConversion(), LIB_PIN::SetLength(), LIB_PIN::SetName(), LIB_PIN::SetNameTextSize(), LIB_PIN::SetNumberTextSize(), LIB_PIN::SetOrientation(), LIB_PIN::SetPartNumber(), LIB_PIN::SetPinPosition(), LIB_PIN::SetShape(), LIB_PIN::SetType(), and LIB_PIN::SetVisible().

wxSize GERBER_FILE_IMAGE::m_FmtLen
wxSize GERBER_FILE_IMAGE::m_FmtScale
bool EDA_ITEM::m_forceVisible
protectedinherited

Set to true to override the visibility setting of the item.

Definition at line 183 of file base_struct.h.

Referenced by SCH_FIELD::Draw(), EDA_ITEM::initVars(), and EDA_ITEM::operator=().

GERBER_LAYER GERBER_FILE_IMAGE::m_GBRLayerParams
private

Definition at line 103 of file gerber_file_image.h.

Referenced by ResetDefaultValues().

bool GERBER_FILE_IMAGE::m_Has_DCode
int GERBER_FILE_IMAGE::m_hasNegativeItems
private

Definition at line 170 of file gerber_file_image.h.

Referenced by HasNegativeItems(), and ResetDefaultValues().

wxPoint GERBER_FILE_IMAGE::m_IJPos

Definition at line 147 of file gerber_file_image.h.

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

bool GERBER_FILE_IMAGE::m_ImageJustifyXCenter

Definition at line 122 of file gerber_file_image.h.

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

bool GERBER_FILE_IMAGE::m_ImageJustifyYCenter

Definition at line 123 of file gerber_file_image.h.

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

wxString GERBER_FILE_IMAGE::m_ImageName
bool GERBER_FILE_IMAGE::m_InUse

Definition at line 108 of file gerber_file_image.h.

Referenced by GetDcodesCount(), ResetDefaultValues(), and sortZorder().

bool GERBER_FILE_IMAGE::m_IsVisible
bool GERBER_FILE_IMAGE::m_IsX2_file
int GERBER_FILE_IMAGE::m_Iterpolation
int GERBER_FILE_IMAGE::m_Last_Pen_Command

Definition at line 142 of file gerber_file_image.h.

Referenced by Execute_DCODE_Command(), and ResetDefaultValues().

DHEAD* EDA_ITEM::m_List
protectedinherited

which DLIST I am on.

Definition at line 177 of file base_struct.h.

Referenced by EDA_ITEM::GetList(), and EDA_ITEM::initVars().

double GERBER_FILE_IMAGE::m_LocalRotation
wxString GERBER_FILE_IMAGE::m_MD5_value

Definition at line 118 of file gerber_file_image.h.

Referenced by ExecuteRS274XCommand(), and ResetDefaultValues().

wxArrayString GERBER_FILE_IMAGE::m_messagesList
private

Definition at line 169 of file gerber_file_image.h.

bool GERBER_FILE_IMAGE::m_MirrorA
bool GERBER_FILE_IMAGE::m_MirrorB
GBR_NETLIST_METADATA GERBER_FILE_IMAGE::m_NetAttributeDict
std::map<wxString, int> GERBER_FILE_IMAGE::m_NetnamesList
bool GERBER_FILE_IMAGE::m_NoTrailingZeros
wxPoint GERBER_FILE_IMAGE::m_Offset
wxString GERBER_FILE_IMAGE::m_PartString

Definition at line 119 of file gerber_file_image.h.

Referenced by ExecuteRS274XCommand(), and ResetDefaultValues().

bool GERBER_FILE_IMAGE::m_PolygonFillMode
int GERBER_FILE_IMAGE::m_PolygonFillModeState
COLOR4D GERBER_FILE_IMAGE::m_PositiveDrawColor

Definition at line 112 of file gerber_file_image.h.

Referenced by GBR_LAYOUT::Draw(), and GERBER_FILE_IMAGE().

wxPoint GERBER_FILE_IMAGE::m_PreviousPos

Definition at line 146 of file gerber_file_image.h.

Referenced by Execute_DCODE_Command(), and ResetDefaultValues().

bool GERBER_FILE_IMAGE::m_Relative
wxRealPoint GERBER_FILE_IMAGE::m_Scale
bool GERBER_FILE_IMAGE::m_SwapAxis
EDA_ITEM* EDA_ITEM::Pback
protectedinherited

previous in linked list

Definition at line 176 of file base_struct.h.

Referenced by SCH_LINE::Back(), TRACK::Back(), BOARD_ITEM::Back(), EDA_ITEM::Back(), EDA_ITEM::initVars(), and TRACK::SetBack().


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