More NULL expunging.

This commit is contained in:
Wayne Stambaugh 2021-07-16 16:13:26 -04:00
parent d1c9572bcc
commit cb72da294a
119 changed files with 1305 additions and 1307 deletions

View File

@ -2,7 +2,7 @@
* This program source code file is part of KICAD, a free EDA CAD application. * This program source code file is part of KICAD, a free EDA CAD application.
* *
* Copyright (C) 1992-2010 jean-pierre.charras * Copyright (C) 1992-2010 jean-pierre.charras
* Copyright (C) 1992-2021 Kicad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -439,7 +439,7 @@ bool BM2CMP_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, int
m_Greyscale_Bitmap = wxBitmap( m_Greyscale_Image ); m_Greyscale_Bitmap = wxBitmap( m_Greyscale_Image );
m_NB_Image = m_Greyscale_Image; m_NB_Image = m_Greyscale_Image;
Binarize( (double) m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() ); Binarize( (double) m_sliderThreshold->GetValue() / m_sliderThreshold->GetMax() );
m_buttonExportFile->Enable( true ); m_buttonExportFile->Enable( true );
m_buttonExportClipboard->Enable( true ); m_buttonExportClipboard->Enable( true );
@ -526,7 +526,7 @@ void BM2CMP_FRAME::OnSizeChangeX( wxCommandEvent& event )
if( getUnitFromSelection() == EDA_UNITS::UNSCALED ) if( getUnitFromSelection() == EDA_UNITS::UNSCALED )
{ {
// for units in DPI, keeping aspect ratio cannot use m_AspectRatioLocked. // for units in DPI, keeping aspect ratio cannot use m_AspectRatioLocked.
// just rescale the other dpi // just re-scale the other dpi
double ratio = new_size / m_outputSizeX.GetOutputSize(); double ratio = new_size / m_outputSizeX.GetOutputSize();
calculatedY = m_outputSizeY.GetOutputSize() * ratio; calculatedY = m_outputSizeY.GetOutputSize() * ratio;
} }
@ -555,7 +555,7 @@ void BM2CMP_FRAME::OnSizeChangeY( wxCommandEvent& event )
if( getUnitFromSelection() == EDA_UNITS::UNSCALED ) if( getUnitFromSelection() == EDA_UNITS::UNSCALED )
{ {
// for units in DPI, keeping aspect ratio cannot use m_AspectRatioLocked. // for units in DPI, keeping aspect ratio cannot use m_AspectRatioLocked.
// just rescale the other dpi // just re-scale the other dpi
double ratio = new_size / m_outputSizeX.GetOutputSize(); double ratio = new_size / m_outputSizeX.GetOutputSize();
calculatedX = m_outputSizeX.GetOutputSize() * ratio; calculatedX = m_outputSizeX.GetOutputSize() * ratio;
} }
@ -671,6 +671,7 @@ void BM2CMP_FRAME::OnThresholdChange( wxScrollEvent& event )
void BM2CMP_FRAME::OnExportToFile( wxCommandEvent& event ) void BM2CMP_FRAME::OnExportToFile( wxCommandEvent& event )
{ {
m_exportToClipboard = false; m_exportToClipboard = false;
// choices of m_rbOutputFormat are expected to be in same order as // choices of m_rbOutputFormat are expected to be in same order as
// OUTPUT_FMT_ID. See bitmap2component.h // OUTPUT_FMT_ID. See bitmap2component.h
OUTPUT_FMT_ID format = (OUTPUT_FMT_ID) m_rbOutputFormat->GetSelection(); OUTPUT_FMT_ID format = (OUTPUT_FMT_ID) m_rbOutputFormat->GetSelection();
@ -681,6 +682,7 @@ void BM2CMP_FRAME::OnExportToFile( wxCommandEvent& event )
void BM2CMP_FRAME::OnExportToClipboard( wxCommandEvent& event ) void BM2CMP_FRAME::OnExportToClipboard( wxCommandEvent& event )
{ {
m_exportToClipboard = true; m_exportToClipboard = true;
// choices of m_rbOutputFormat are expected to be in same order as // choices of m_rbOutputFormat are expected to be in same order as
// OUTPUT_FMT_ID. See bitmap2component.h // OUTPUT_FMT_ID. See bitmap2component.h
OUTPUT_FMT_ID format = (OUTPUT_FMT_ID) m_rbOutputFormat->GetSelection(); OUTPUT_FMT_ID format = (OUTPUT_FMT_ID) m_rbOutputFormat->GetSelection();
@ -691,7 +693,7 @@ void BM2CMP_FRAME::OnExportToClipboard( wxCommandEvent& event )
wxLogNull doNotLog; // disable logging of failed clipboard actions wxLogNull doNotLog; // disable logging of failed clipboard actions
// Write buffer to the clipboard // Write buffer to the clipboard
if (wxTheClipboard->Open()) if( wxTheClipboard->Open() )
{ {
// This data objects are held by the clipboard, // This data objects are held by the clipboard,
// so do not delete them in the app. // so do not delete them in the app.
@ -700,7 +702,9 @@ void BM2CMP_FRAME::OnExportToClipboard( wxCommandEvent& event )
wxTheClipboard->Close(); wxTheClipboard->Close();
} }
else else
{
wxMessageBox( _( "Unable to export to the Clipboard") ); wxMessageBox( _( "Unable to export to the Clipboard") );
}
} }
@ -749,7 +753,7 @@ void BM2CMP_FRAME::OnExportLogo()
FILE* outfile; FILE* outfile;
outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) ); outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
if( outfile == NULL ) if( outfile == nullptr )
{ {
wxString msg; wxString msg;
msg.Printf( _( "File '%s' could not be created." ), m_ConvertedFileName ); msg.Printf( _( "File '%s' could not be created." ), m_ConvertedFileName );
@ -789,7 +793,7 @@ void BM2CMP_FRAME::exportPostScriptFormat()
FILE* outfile; FILE* outfile;
outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) ); outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
if( outfile == NULL ) if( outfile == nullptr )
{ {
wxString msg; wxString msg;
msg.Printf( _( "File '%s' could not be created." ), m_ConvertedFileName ); msg.Printf( _( "File '%s' could not be created." ), m_ConvertedFileName );
@ -828,7 +832,7 @@ void BM2CMP_FRAME::exportEeschemaFormat()
FILE* outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) ); FILE* outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
if( outfile == NULL ) if( outfile == nullptr )
{ {
wxString msg; wxString msg;
msg.Printf( _( "File '%s' could not be created." ), m_ConvertedFileName ); msg.Printf( _( "File '%s' could not be created." ), m_ConvertedFileName );
@ -867,7 +871,7 @@ void BM2CMP_FRAME::exportPcbnewFormat()
FILE* outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) ); FILE* outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) );
if( outfile == NULL ) if( outfile == nullptr )
{ {
wxString msg; wxString msg;
msg.Printf( _( "File '%s' could not be created." ), m_ConvertedFileName ); msg.Printf( _( "File '%s' could not be created." ), m_ConvertedFileName );
@ -917,7 +921,7 @@ void BM2CMP_FRAME::ExportToBuffer( std::string& aOutput, OUTPUT_FMT_ID aFormat )
BITMAPCONV_INFO converter( aOutput ); BITMAPCONV_INFO converter( aOutput );
converter.ConvertBitmap( potrace_bitmap, aFormat, m_outputSizeX.GetOutputDPI(), converter.ConvertBitmap( potrace_bitmap, aFormat, m_outputSizeX.GetOutputDPI(),
m_outputSizeY.GetOutputDPI(), modLayer ); m_outputSizeY.GetOutputDPI(), modLayer );
if( !converter.GetErrorMessages().empty() ) if( !converter.GetErrorMessages().empty() )
wxMessageBox( converter.GetErrorMessages().c_str(), _( "Errors" ) ); wxMessageBox( converter.GetErrorMessages().c_str(), _( "Errors" ) );

View File

@ -2,7 +2,7 @@
* This program source code file is part of KICAD, a free EDA CAD application. * This program source code file is part of KICAD, a free EDA CAD application.
* *
* Copyright (C) 1992-2010 jean-pierre.charras * Copyright (C) 1992-2010 jean-pierre.charras
* Copyright (C) 1992-2019 Kicad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2021 Kicad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -30,15 +30,14 @@
#include <settings/settings_manager.h> #include <settings/settings_manager.h>
//-----<KIFACE>-----------------------------------------------------------------
namespace BMP2CMP { namespace BMP2CMP {
static struct IFACE : public KIFACE_I static struct IFACE : public KIFACE_I
{ {
bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) override; bool OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) override;
wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 ) override wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway,
int aCtlBits = 0 ) override
{ {
InitSettings( new BITMAP2CMP_SETTINGS ); InitSettings( new BITMAP2CMP_SETTINGS );
Pgm().GetSettingsManager().RegisterSettings( KifaceSettings() ); Pgm().GetSettingsManager().RegisterSettings( KifaceSettings() );
@ -46,19 +45,18 @@ static struct IFACE : public KIFACE_I
} }
/** /**
* Function IfaceOrAddress * Return a pointer to the requested object.
* return a pointer to the requested object. The safest way to use this *
* is to retrieve a pointer to a static instance of an interface, similar to * The safest way to use this is to retrieve a pointer to a static instance of an interface,
* how the KIFACE interface is exported. But if you know what you are doing * similar to how the KIFACE interface is exported. But if you know what you are doing use
* use it to retrieve anything you want. * it to retrieve anything you want.
* *
* @param aDataId identifies which object you want the address of. * @param aDataId identifies which object you want the address of.
* * @return the object which must be cast into the known type.
* @return void* - and must be cast into the know type.
*/ */
void* IfaceOrAddress( int aDataId ) override void* IfaceOrAddress( int aDataId ) override
{ {
return NULL; return nullptr;
} }
IFACE( const char* aDSOname, KIWAY::FACE_T aType ) : IFACE( const char* aDSOname, KIWAY::FACE_T aType ) :
@ -73,6 +71,7 @@ using namespace BMP2CMP;
static PGM_BASE* process; static PGM_BASE* process;
KIFACE_I& Kiface() KIFACE_I& Kiface()
{ {
return kiface; return kiface;

View File

@ -2,7 +2,7 @@
* This program source code file is part of KICAD, a free EDA CAD application. * This program source code file is part of KICAD, a free EDA CAD application.
* *
* Copyright (C) 1992-2019 jean-pierre.charras * Copyright (C) 1992-2019 jean-pierre.charras
* Copyright (C) 1992-2019 Kicad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -43,10 +43,11 @@
/* free a potrace bitmap */ /* free a potrace bitmap */
static void bm_free( potrace_bitmap_t* bm ) static void bm_free( potrace_bitmap_t* bm )
{ {
if( bm != NULL ) if( bm != nullptr )
{ {
free( bm->map ); free( bm->map );
} }
free( bm ); free( bm );
} }
@ -66,14 +67,13 @@ BITMAPCONV_INFO::BITMAPCONV_INFO( std::string& aData ):
m_PixmapHeight = 0; m_PixmapHeight = 0;
m_ScaleX = 1.0; m_ScaleX = 1.0;
m_ScaleY = 1.0; m_ScaleY = 1.0;
m_Paths = NULL; m_Paths = nullptr;
m_CmpName = "LOGO"; m_CmpName = "LOGO";
} }
int BITMAPCONV_INFO::ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap, int BITMAPCONV_INFO::ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap, OUTPUT_FMT_ID aFormat,
OUTPUT_FMT_ID aFormat, int aDpi_X, int aDpi_Y, int aDpi_X, int aDpi_Y, BMP2CMP_MOD_LAYER aModLayer )
BMP2CMP_MOD_LAYER aModLayer )
{ {
potrace_param_t* param; potrace_param_t* param;
potrace_state_t* st; potrace_state_t* st;
@ -103,6 +103,7 @@ int BITMAPCONV_INFO::ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap,
{ {
potrace_state_free( st ); potrace_state_free( st );
} }
potrace_param_free( param ); potrace_param_free( param );
char msg[256]; char msg[256];
@ -128,6 +129,7 @@ int BITMAPCONV_INFO::ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap,
m_Format = POSTSCRIPT_FMT; m_Format = POSTSCRIPT_FMT;
m_ScaleX = 1.0; // the conversion scale m_ScaleX = 1.0; // the conversion scale
m_ScaleY = m_ScaleX; m_ScaleY = m_ScaleX;
// output vector data, e.g. as a rudimentary EPS file (mainly for tests) // output vector data, e.g. as a rudimentary EPS file (mainly for tests)
createOutputData(); createOutputData();
break; break;
@ -161,7 +163,7 @@ int BITMAPCONV_INFO::ConvertBitmap( potrace_bitmap_t* aPotrace_bitmap,
const char* BITMAPCONV_INFO::getBoardLayerName( BMP2CMP_MOD_LAYER aChoice ) const char* BITMAPCONV_INFO::getBoardLayerName( BMP2CMP_MOD_LAYER aChoice )
{ {
const char * layerName = "F.SilkS"; const char* layerName = "F.SilkS";
switch( aChoice ) switch( aChoice )
{ {
@ -210,10 +212,10 @@ void BITMAPCONV_INFO::outputDataHeader( const char * aBrdLayerName )
sprintf( strbuf, "(attr board_only exclude_from_pos_files exclude_from_bom)\n"); sprintf( strbuf, "(attr board_only exclude_from_pos_files exclude_from_bom)\n");
m_Data += strbuf; m_Data += strbuf;
sprintf( strbuf, " (fp_text reference \"G***\" (at 0 0) (layer %s)\n" sprintf( strbuf, " (fp_text reference \"G***\" (at 0 0) (layer %s)\n"
" (effects (font (thickness 0.3)))\n )\n", aBrdLayerName ); " (effects (font (thickness 0.3)))\n )\n", aBrdLayerName );
m_Data += strbuf; m_Data += strbuf;
sprintf( strbuf, " (fp_text value \"%s\" (at 0.75 0) (layer %s) hide\n" sprintf( strbuf, " (fp_text value \"%s\" (at 0.75 0) (layer %s) hide\n"
" (effects (font (thickness 0.3)))\n )\n", m_CmpName.c_str(), aBrdLayerName ); " (effects (font (thickness 0.3)))\n )\n", m_CmpName.c_str(), aBrdLayerName );
m_Data += strbuf; m_Data += strbuf;
break; break;
@ -226,8 +228,7 @@ void BITMAPCONV_INFO::outputDataHeader( const char * aBrdLayerName )
m_Data += strbuf; m_Data += strbuf;
sprintf( strbuf, "#\n# %s\n", m_CmpName.c_str() ); sprintf( strbuf, "#\n# %s\n", m_CmpName.c_str() );
m_Data += strbuf; m_Data += strbuf;
sprintf( strbuf, "# pixmap size w = %d, h = %d\n#\n", sprintf( strbuf, "# pixmap size w = %d, h = %d\n#\n", m_PixmapWidth, m_PixmapHeight );
m_PixmapWidth, m_PixmapHeight );
m_Data += strbuf; m_Data += strbuf;
// print reference and value // print reference and value
@ -270,7 +271,7 @@ void BITMAPCONV_INFO::outputDataEnd()
} }
void BITMAPCONV_INFO::outputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char* aBrdLayerName ) void BITMAPCONV_INFO::outputOnePolygon( SHAPE_LINE_CHAIN& aPolygon, const char* aBrdLayerName )
{ {
// write one polygon to output file. // write one polygon to output file.
// coordinates are expected in target unit. // coordinates are expected in target unit.
@ -287,15 +288,14 @@ void BITMAPCONV_INFO::outputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char*
{ {
case POSTSCRIPT_FMT: case POSTSCRIPT_FMT:
offsetY = (int)( m_PixmapHeight * m_ScaleY ); offsetY = (int)( m_PixmapHeight * m_ScaleY );
sprintf( strbuf, "newpath\n%d %d moveto\n", sprintf( strbuf, "newpath\n%d %d moveto\n", startpoint.x, offsetY - startpoint.y );
startpoint.x, offsetY - startpoint.y );
m_Data += strbuf; m_Data += strbuf;
jj = 0; jj = 0;
for( ii = 1; ii < aPolygon.PointCount(); ii++ ) for( ii = 1; ii < aPolygon.PointCount(); ii++ )
{ {
currpoint = aPolygon.CPoint( ii ); currpoint = aPolygon.CPoint( ii );
sprintf( strbuf, " %d %d lineto", sprintf( strbuf, " %d %d lineto", currpoint.x, offsetY - currpoint.y );
currpoint.x, offsetY - currpoint.y );
m_Data += strbuf; m_Data += strbuf;
if( jj++ > 6 ) if( jj++ > 6 )
@ -314,12 +314,13 @@ void BITMAPCONV_INFO::outputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char*
m_Data += " (fp_poly (pts"; m_Data += " (fp_poly (pts";
jj = 0; jj = 0;
for( ii = 0; ii < aPolygon.PointCount(); ii++ ) for( ii = 0; ii < aPolygon.PointCount(); ii++ )
{ {
currpoint = aPolygon.CPoint( ii ); currpoint = aPolygon.CPoint( ii );
sprintf( strbuf, " (xy %f %f)", sprintf( strbuf, " (xy %f %f)",
( currpoint.x - offsetX ) / PCB_IU_PER_MM, ( currpoint.x - offsetX ) / PCB_IU_PER_MM,
( currpoint.y - offsetY ) / PCB_IU_PER_MM ); ( currpoint.y - offsetY ) / PCB_IU_PER_MM );
m_Data += strbuf; m_Data += strbuf;
if( jj++ > 6 ) if( jj++ > 6 )
@ -329,6 +330,7 @@ void BITMAPCONV_INFO::outputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char*
} }
} }
// No need to close polygon // No need to close polygon
m_Data += " )"; m_Data += " )";
sprintf( strbuf, "(layer %s) (width %f)\n )\n", aBrdLayerName, width ); sprintf( strbuf, "(layer %s) (width %f)\n )\n", aBrdLayerName, width );
m_Data += strbuf; m_Data += strbuf;
@ -337,14 +339,16 @@ void BITMAPCONV_INFO::outputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char*
case KICAD_LOGO: case KICAD_LOGO:
m_Data += " (pts"; m_Data += " (pts";
// Internal units = micron, file unit = mm // Internal units = micron, file unit = mm
jj = 0; jj = 0;
for( ii = 0; ii < aPolygon.PointCount(); ii++ ) for( ii = 0; ii < aPolygon.PointCount(); ii++ )
{ {
currpoint = aPolygon.CPoint( ii ); currpoint = aPolygon.CPoint( ii );
sprintf( strbuf, " (xy %.3f %.3f)", sprintf( strbuf, " (xy %.3f %.3f)",
( currpoint.x - offsetX ) / PL_IU_PER_MM, ( currpoint.x - offsetX ) / PL_IU_PER_MM,
( currpoint.y - offsetY ) / PL_IU_PER_MM ); ( currpoint.y - offsetY ) / PL_IU_PER_MM );
m_Data += strbuf; m_Data += strbuf;
if( jj++ > 4 ) if( jj++ > 4 )
@ -353,6 +357,7 @@ void BITMAPCONV_INFO::outputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char*
m_Data += "\n "; m_Data += "\n ";
} }
} }
// Close polygon // Close polygon
sprintf( strbuf, " (xy %.3f %.3f) )\n", sprintf( strbuf, " (xy %.3f %.3f) )\n",
( startpoint.x - offsetX ) / PL_IU_PER_MM, ( startpoint.x - offsetX ) / PL_IU_PER_MM,
@ -364,20 +369,18 @@ void BITMAPCONV_INFO::outputOnePolygon( SHAPE_LINE_CHAIN & aPolygon, const char*
// The polygon outline thickness is fixed here to 1 mil, the minimal // The polygon outline thickness is fixed here to 1 mil, the minimal
// value in Eeschema (0 means use default thickness for graphics) // value in Eeschema (0 means use default thickness for graphics)
#define EE_LINE_THICKNESS 1 #define EE_LINE_THICKNESS 1
sprintf( strbuf, "P %d 0 0 %d", sprintf( strbuf, "P %d 0 0 %d", (int) aPolygon.PointCount() + 1, EE_LINE_THICKNESS );
(int) aPolygon.PointCount() + 1, EE_LINE_THICKNESS );
m_Data += strbuf; m_Data += strbuf;
for( ii = 0; ii < aPolygon.PointCount(); ii++ ) for( ii = 0; ii < aPolygon.PointCount(); ii++ )
{ {
currpoint = aPolygon.CPoint( ii ); currpoint = aPolygon.CPoint( ii );
sprintf( strbuf, " %d %d", sprintf( strbuf, " %d %d", currpoint.x - offsetX, currpoint.y - offsetY );
currpoint.x - offsetX, currpoint.y - offsetY );
m_Data += strbuf; m_Data += strbuf;
} }
// Close polygon // Close polygon
sprintf( strbuf, " %d %d", sprintf( strbuf, " %d %d", startpoint.x - offsetX, startpoint.y - offsetY );
startpoint.x - offsetX, startpoint.y - offsetY );
m_Data += strbuf; m_Data += strbuf;
m_Data += " F\n"; m_Data += " F\n";
@ -417,12 +420,13 @@ void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
m_errors += "No path in black and white image: no outline created\n"; m_errors += "No path in black and white image: no outline created\n";
} }
while( paths != NULL ) while( paths != nullptr )
{ {
int cnt = paths->curve.n; int cnt = paths->curve.n;
int* tag = paths->curve.tag; int* tag = paths->curve.tag;
c = paths->curve.c; c = paths->curve.c;
potrace_dpoint_t startpoint = c[cnt - 1][2]; potrace_dpoint_t startpoint = c[cnt - 1][2];
for( int i = 0; i < cnt; i++ ) for( int i = 0; i < cnt; i++ )
{ {
switch( tag[i] ) switch( tag[i] )
@ -457,6 +461,7 @@ void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
{ {
// Add current hole in polyset_holes // Add current hole in polyset_holes
polyset_holes.NewOutline(); polyset_holes.NewOutline();
for( unsigned int i = 0; i < cornersBuffer.size(); i++ ) for( unsigned int i = 0; i < cornersBuffer.size(); i++ )
{ {
polyset_holes.Append( int( cornersBuffer[i].x * m_ScaleX ), polyset_holes.Append( int( cornersBuffer[i].x * m_ScaleX ),
@ -466,9 +471,8 @@ void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
cornersBuffer.clear(); cornersBuffer.clear();
/* at the end of a group of a positive path and its negative children, fill. // at the end of a group of a positive path and its negative children, fill.
*/ if( paths->next == nullptr || paths->next->sign == '+' )
if( paths->next == NULL || paths->next->sign == '+' )
{ {
polyset_areas.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE ); polyset_areas.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
polyset_holes.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE ); polyset_holes.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
@ -491,6 +495,7 @@ void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
polyset_holes.RemoveAllContours(); polyset_holes.RemoveAllContours();
main_outline = true; main_outline = true;
} }
paths = paths->next; paths = paths->next;
} }
@ -500,15 +505,17 @@ void BITMAPCONV_INFO::createOutputData( BMP2CMP_MOD_LAYER aModLayer )
// a helper function to calculate a square value // a helper function to calculate a square value
inline double square( double x ) inline double square( double x )
{ {
return x*x; return x * x;
} }
// a helper function to calculate a cube value // a helper function to calculate a cube value
inline double cube( double x ) inline double cube( double x )
{ {
return x*x*x; return x * x * x;
} }
/* render a Bezier curve. */ /* render a Bezier curve. */
void BezierToPolyline( std::vector <potrace_dpoint_t>& aCornersBuffer, void BezierToPolyline( std::vector <potrace_dpoint_t>& aCornersBuffer,
potrace_dpoint_t p1, potrace_dpoint_t p1,

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 1992-2018 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -45,10 +45,10 @@
#define QUOTE '\'' #define QUOTE '\''
/* /**
* read the string between quotes and put it in aTarget * Read the string between quotes.
* put text in aTarget *
* return a pointer to the last read char (the second quote if OK) * @return a the quoted string.
*/ */
wxString GetQuotedText( wxString& text ) wxString GetQuotedText( wxString& text )
{ {
@ -76,7 +76,6 @@ bool sortListbyCmpValue( const FOOTPRINT_EQUIVALENCE& ref, const FOOTPRINT_EQUIV
} }
// read the .equ files and populate the list of equivalents
int CVPCB_MAINFRAME::buildEquivalenceList( FOOTPRINT_EQUIVALENCE_LIST& aList, int CVPCB_MAINFRAME::buildEquivalenceList( FOOTPRINT_EQUIVALENCE_LIST& aList,
wxString* aErrorMessages ) wxString* aErrorMessages )
{ {
@ -118,7 +117,7 @@ int CVPCB_MAINFRAME::buildEquivalenceList( FOOTPRINT_EQUIVALENCE_LIST& aList,
file = wxFopen( tmp, wxT( "rt" ) ); file = wxFopen( tmp, wxT( "rt" ) );
if( file == NULL ) if( file == nullptr )
{ {
error_count++; error_count++;
@ -135,7 +134,7 @@ int CVPCB_MAINFRAME::buildEquivalenceList( FOOTPRINT_EQUIVALENCE_LIST& aList,
continue; continue;
} }
while( GetLine( file, line, NULL, sizeof( line ) ) != NULL ) while( GetLine( file, line, nullptr, sizeof( line ) ) != nullptr )
{ {
if( *line == 0 ) if( *line == 0 )
continue; continue;

View File

@ -49,26 +49,26 @@ static struct IFACE : public KIFACE_I
void OnKifaceEnd() override; void OnKifaceEnd() override;
wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 ) override wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway,
int aCtlBits = 0 ) override
{ {
switch( aClassId ) switch( aClassId )
{ {
case FRAME_CVPCB: return new CVPCB_MAINFRAME( aKiway, aParent ); case FRAME_CVPCB: return new CVPCB_MAINFRAME( aKiway, aParent );
case FRAME_CVPCB_DISPLAY: return new DISPLAY_FOOTPRINTS_FRAME( aKiway, aParent ); case FRAME_CVPCB_DISPLAY: return new DISPLAY_FOOTPRINTS_FRAME( aKiway, aParent );
default: return NULL; default: return nullptr;
} }
} }
/** /**
* Function IfaceOrAddress * Return a pointer to the requested object.
* return a pointer to the requested object. The safest way to use this *
* is to retrieve a pointer to a static instance of an interface, similar to * The safest way to use this is to retrieve a pointer to a static instance of an interface,
* how the KIFACE interface is exported. But if you know what you are doing * similar to how the KIFACE interface is exported. But if you know what you are doing use
* use it to retrieve anything you want. * it to retrieve anything you want.
* *
* @param aDataId identifies which object you want the address of. * @param aDataId identifies which object you want the address of.
* * @return the object requested and must be cast into the known type.
* @return void* - and must be cast into the know type.
*/ */
void* IfaceOrAddress( int aDataId ) override void* IfaceOrAddress( int aDataId ) override
{ {
@ -133,18 +133,18 @@ PGM_BASE* PgmOrNull()
/// the fallback table for multiple projects). /// the fallback table for multiple projects).
FP_LIB_TABLE GFootprintTable; FP_LIB_TABLE GFootprintTable;
/// The global footprint info table. This is performance-intensive to build so we /// The global footprint info table. This is performance-intensive to build so we
/// keep a hash-stamped global version. Any deviation from the request vs. stored /// keep a hash-stamped global version. Any deviation from the request vs. stored
/// hash will result in it being rebuilt. /// hash will result in it being rebuilt.
FOOTPRINT_LIST_IMPL GFootprintList; FOOTPRINT_LIST_IMPL GFootprintList;
//!!!!!!!!!!!!!!! This code is obsolete because of the merge into pcbnew, don't bother with it. //!!!!!!!!!!!!!!! This code is obsolete because of the merge into Pcbnew, don't bother with it.
// A short lived implementation. cvpcb will get combine into pcbnew shortly, so // A short lived implementation. cvpcb will get combine into Pcbnew shortly, so
// we skip setting KICAD6_FOOTPRINT_DIR here for now. User should set the environment // we skip setting KICAD6_FOOTPRINT_DIR here for now. User should set the environment
// variable. // variable.
bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
{ {
// This is process level, not project level, initialization of the DSO. // This is process level, not project level, initialization of the DSO.
@ -171,15 +171,15 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
if( !FP_LIB_TABLE::LoadGlobalTable( GFootprintTable ) ) if( !FP_LIB_TABLE::LoadGlobalTable( GFootprintTable ) )
{ {
DisplayInfoMessage( NULL, _( "You have run CvPcb for the first time using the " DisplayInfoMessage( nullptr, _( "You have run CvPcb for the first time using the "
"new footprint library table method for finding " "new footprint library table method for finding "
"footprints.\nCvPcb has either copied the default " "footprints.\nCvPcb has either copied the default "
"table or created an empty table in your home " "table or created an empty table in your home "
"folder.\nYou must first configure the library " "folder.\nYou must first configure the library "
"table to include all footprint libraries not " "table to include all footprint libraries not "
"included with KiCad.\nSee the \"Footprint Library " "included with KiCad.\nSee the \"Footprint Library "
"Table\" section of the CvPcb documentation for " "Table\" section of the CvPcb documentation for "
"more information." ) ); "more information." ) );
} }
} }
catch( const IO_ERROR& ioe ) catch( const IO_ERROR& ioe )
@ -193,6 +193,7 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
return true; return true;
} }
void IFACE::OnKifaceEnd() void IFACE::OnKifaceEnd()
{ {
end_common(); end_common();

View File

@ -64,14 +64,14 @@ CVPCB_MAINFRAME::CVPCB_MAINFRAME( KIWAY* aKiway, wxWindow* aParent ) :
KIWAY_PLAYER( aKiway, aParent, FRAME_CVPCB, _( "Assign Footprints" ), wxDefaultPosition, KIWAY_PLAYER( aKiway, aParent, FRAME_CVPCB, _( "Assign Footprints" ), wxDefaultPosition,
wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, CVPCB_MAINFRAME_NAME ) wxDefaultSize, KICAD_DEFAULT_DRAWFRAME_STYLE, CVPCB_MAINFRAME_NAME )
{ {
m_symbolsListBox = NULL; m_symbolsListBox = nullptr;
m_footprintListBox = NULL; m_footprintListBox = nullptr;
m_librariesListBox = NULL; m_librariesListBox = nullptr;
m_mainToolBar = NULL; m_mainToolBar = nullptr;
m_modified = false; m_modified = false;
m_skipComponentSelect = false; m_skipComponentSelect = false;
m_filteringOptions = FOOTPRINTS_LISTBOX::UNFILTERED_FP_LIST; m_filteringOptions = FOOTPRINTS_LISTBOX::UNFILTERED_FP_LIST;
m_tcFilterString = NULL; m_tcFilterString = nullptr;
m_FootprintsList = FOOTPRINT_LIST::GetInstance( Kiway() ); m_FootprintsList = FOOTPRINT_LIST::GetInstance( Kiway() );
m_initialized = false; m_initialized = false;
m_aboutTitle = "CvPcb"; m_aboutTitle = "CvPcb";
@ -512,7 +512,7 @@ void CVPCB_MAINFRAME::AssociateFootprint( const CVPCB_ASSOCIATION& aAssociation,
COMPONENT* symbol = m_netlist.GetComponent( aAssociation.GetComponentIndex() ); COMPONENT* symbol = m_netlist.GetComponent( aAssociation.GetComponentIndex() );
if( symbol == NULL ) if( symbol == nullptr )
return; return;
LIB_ID fpid = aAssociation.GetNewFootprint(); LIB_ID fpid = aAssociation.GetNewFootprint();
@ -594,7 +594,7 @@ void CVPCB_MAINFRAME::refreshAfterSymbolSearch( COMPONENT* aSymbol )
if( m_auimgr.GetManagedWindow() ) // Be sure Aui Manager is initialized if( m_auimgr.GetManagedWindow() ) // Be sure Aui Manager is initialized
m_auimgr.Update(); // (could be not the case when starting CvPcb) m_auimgr.Update(); // (could be not the case when starting CvPcb)
if( aSymbol == NULL ) if( aSymbol == nullptr )
{ {
DisplayStatus(); DisplayStatus();
return; return;
@ -825,7 +825,7 @@ void CVPCB_MAINFRAME::SendMessageToEESCHEMA( bool aClearHighligntOnly )
if ( selection < 0 ) // Nothing selected if ( selection < 0 ) // Nothing selected
return; return;
if( m_netlist.GetComponent( selection ) == NULL ) if( m_netlist.GetComponent( selection ) == nullptr )
return; return;
// Now highlight the selected symbol: // Now highlight the selected symbol:
@ -878,13 +878,13 @@ void CVPCB_MAINFRAME::BuildFootprintsListBox()
{ {
wxFont guiFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ); wxFont guiFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
if( m_footprintListBox == NULL ) if( m_footprintListBox == nullptr )
{ {
m_footprintListBox = new FOOTPRINTS_LISTBOX( this, ID_CVPCB_FOOTPRINT_LIST ); m_footprintListBox = new FOOTPRINTS_LISTBOX( this, ID_CVPCB_FOOTPRINT_LIST );
m_footprintListBox->SetFont( KIUI::GetMonospacedUIFont() ); m_footprintListBox->SetFont( KIUI::GetMonospacedUIFont() );
} }
m_footprintListBox->SetFootprints( *m_FootprintsList, wxEmptyString, NULL, wxEmptyString, m_footprintListBox->SetFootprints( *m_FootprintsList, wxEmptyString, nullptr, wxEmptyString,
FOOTPRINTS_LISTBOX::UNFILTERED_FP_LIST ); FOOTPRINTS_LISTBOX::UNFILTERED_FP_LIST );
DisplayStatus(); DisplayStatus();
} }
@ -896,7 +896,7 @@ void CVPCB_MAINFRAME::BuildSymbolsListBox()
COMPONENT* symbol; COMPONENT* symbol;
wxFont guiFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ); wxFont guiFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
if( m_symbolsListBox == NULL ) if( m_symbolsListBox == nullptr )
{ {
m_symbolsListBox = new COMPONENTS_LISTBOX( this, ID_CVPCB_COMPONENT_LIST ); m_symbolsListBox = new COMPONENTS_LISTBOX( this, ID_CVPCB_COMPONENT_LIST );
m_symbolsListBox->SetFont( KIUI::GetMonospacedUIFont() ); m_symbolsListBox->SetFont( KIUI::GetMonospacedUIFont() );
@ -930,7 +930,7 @@ void CVPCB_MAINFRAME::BuildLibrariesListBox()
{ {
wxFont guiFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT ); wxFont guiFont = wxSystemSettings::GetFont( wxSYS_DEFAULT_GUI_FONT );
if( m_librariesListBox == NULL ) if( m_librariesListBox == nullptr )
{ {
m_librariesListBox = new LIBRARY_LISTBOX( this, ID_CVPCB_LIBRARY_LIST ); m_librariesListBox = new LIBRARY_LISTBOX( this, ID_CVPCB_LIBRARY_LIST );
m_librariesListBox->SetFont( KIUI::GetMonospacedUIFont() ); m_librariesListBox->SetFont( KIUI::GetMonospacedUIFont() );
@ -959,7 +959,7 @@ COMPONENT* CVPCB_MAINFRAME::GetSelectedComponent()
if( selection >= 0 && selection < (int) m_netlist.GetCount() ) if( selection >= 0 && selection < (int) m_netlist.GetCount() )
return m_netlist.GetComponent( selection ); return m_netlist.GetComponent( selection );
return NULL; return nullptr;
} }

View File

@ -3,7 +3,7 @@
* *
* Copyright (C) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2018 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 2015 Wayne Stambaugh <stambaughw@gmail.com> * Copyright (C) 2015 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 2007-2020 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 2007-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -50,8 +50,8 @@
#include <display_footprints_frame.h> #include <display_footprints_frame.h>
#include <tools/cvpcb_actions.h> #include <tools/cvpcb_actions.h>
#include <tools/pcb_actions.h> #include <tools/pcb_actions.h>
#include <tools/pcb_editor_conditions.h> // Shared conditions with other pcbnew frames #include <tools/pcb_editor_conditions.h> // Shared conditions with other Pcbnew frames
#include <tools/pcb_viewer_tools.h> // shared tools with other pcbnew frames #include <tools/pcb_viewer_tools.h> // shared tools with other Pcbnew frames
#include <tools/cvpcb_fpviewer_selection_tool.h> #include <tools/cvpcb_fpviewer_selection_tool.h>
#include <widgets/infobar.h> #include <widgets/infobar.h>
#include <wx/choice.h> #include <wx/choice.h>
@ -182,7 +182,7 @@ DISPLAY_FOOTPRINTS_FRAME::~DISPLAY_FOOTPRINTS_FRAME()
GetCanvas()->SetEvtHandlerEnabled( false ); GetCanvas()->SetEvtHandlerEnabled( false );
delete GetScreen(); delete GetScreen();
SetScreen( NULL ); // Be sure there is no double deletion SetScreen( nullptr ); // Be sure there is no double deletion
} }
@ -197,9 +197,12 @@ void DISPLAY_FOOTPRINTS_FRAME::setupUIConditions()
#define CHECK( x ) ACTION_CONDITIONS().Check( x ) #define CHECK( x ) ACTION_CONDITIONS().Check( x )
mgr->SetConditions( ACTIONS::zoomTool, CHECK( cond.CurrentTool( ACTIONS::zoomTool ) ) ); mgr->SetConditions( ACTIONS::zoomTool,
mgr->SetConditions( ACTIONS::selectionTool, CHECK( cond.CurrentTool( ACTIONS::selectionTool ) ) ); CHECK( cond.CurrentTool( ACTIONS::zoomTool ) ) );
mgr->SetConditions( ACTIONS::measureTool, CHECK( cond.CurrentTool( ACTIONS::measureTool ) ) ); mgr->SetConditions( ACTIONS::selectionTool,
CHECK( cond.CurrentTool( ACTIONS::selectionTool ) ) );
mgr->SetConditions( ACTIONS::measureTool,
CHECK( cond.CurrentTool( ACTIONS::measureTool ) ) );
mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) ); mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) );
mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) ); mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) );
@ -216,10 +219,12 @@ void DISPLAY_FOOTPRINTS_FRAME::setupUIConditions()
}; };
mgr->SetConditions( PCB_ACTIONS::zoomFootprintAutomatically, CHECK( autoZoomCond ) ); mgr->SetConditions( PCB_ACTIONS::zoomFootprintAutomatically, CHECK( autoZoomCond ) );
mgr->SetConditions( PCB_ACTIONS::showPadNumbers, CHECK( cond.PadNumbersDisplay() ) ); mgr->SetConditions( PCB_ACTIONS::showPadNumbers,
CHECK( cond.PadNumbersDisplay() ) );
mgr->SetConditions( PCB_ACTIONS::padDisplayMode, CHECK( !cond.PadFillDisplay() ) ); mgr->SetConditions( PCB_ACTIONS::padDisplayMode, CHECK( !cond.PadFillDisplay() ) );
mgr->SetConditions( PCB_ACTIONS::textOutlines, CHECK( !cond.TextFillDisplay() ) ); mgr->SetConditions( PCB_ACTIONS::textOutlines, CHECK( !cond.TextFillDisplay() ) );
mgr->SetConditions( PCB_ACTIONS::graphicsOutlines, CHECK( !cond.GraphicsFillDisplay() ) ); mgr->SetConditions( PCB_ACTIONS::graphicsOutlines,
CHECK( !cond.GraphicsFillDisplay() ) );
#undef CHECK #undef CHECK
} }
@ -296,7 +301,8 @@ void DISPLAY_FOOTPRINTS_FRAME::ReCreateHToolbar()
m_mainToolBar->Add( ACTIONS::zoomInCenter ); m_mainToolBar->Add( ACTIONS::zoomInCenter );
m_mainToolBar->Add( ACTIONS::zoomOutCenter ); m_mainToolBar->Add( ACTIONS::zoomOutCenter );
m_mainToolBar->Add( ACTIONS::zoomFitScreen ); m_mainToolBar->Add( ACTIONS::zoomFitScreen );
m_mainToolBar->Add( ACTIONS::zoomTool, ACTION_TOOLBAR::TOGGLE, ACTION_TOOLBAR::CANCEL ); m_mainToolBar->Add( ACTIONS::zoomTool,
ACTION_TOOLBAR::TOGGLE, ACTION_TOOLBAR::CANCEL );
m_mainToolBar->Add( PCB_ACTIONS::zoomFootprintAutomatically, ACTION_TOOLBAR::TOGGLE ); m_mainToolBar->Add( PCB_ACTIONS::zoomFootprintAutomatically, ACTION_TOOLBAR::TOGGLE );
m_mainToolBar->AddScaledSeparator( this ); m_mainToolBar->AddScaledSeparator( this );
@ -323,8 +329,7 @@ void DISPLAY_FOOTPRINTS_FRAME::ReCreateHToolbar()
m_mainToolBar->UpdateControlWidth( ID_ON_GRID_SELECT ); m_mainToolBar->UpdateControlWidth( ID_ON_GRID_SELECT );
m_mainToolBar->UpdateControlWidth( ID_ON_ZOOM_SELECT ); m_mainToolBar->UpdateControlWidth( ID_ON_ZOOM_SELECT );
// after adding the buttons to the toolbar, must call Realize() to reflect // after adding the buttons to the toolbar, must call Realize() to reflect the changes
// the changes
m_mainToolBar->Realize(); m_mainToolBar->Realize();
} }
@ -392,7 +397,7 @@ COLOR4D DISPLAY_FOOTPRINTS_FRAME::GetGridColor()
FOOTPRINT* DISPLAY_FOOTPRINTS_FRAME::GetFootprint( const wxString& aFootprintName, FOOTPRINT* DISPLAY_FOOTPRINTS_FRAME::GetFootprint( const wxString& aFootprintName,
REPORTER& aReporter ) REPORTER& aReporter )
{ {
FOOTPRINT* footprint = NULL; FOOTPRINT* footprint = nullptr;
LIB_ID fpid; LIB_ID fpid;
if( fpid.Parse( aFootprintName ) >= 0 ) if( fpid.Parse( aFootprintName ) >= 0 )
@ -400,7 +405,7 @@ FOOTPRINT* DISPLAY_FOOTPRINTS_FRAME::GetFootprint( const wxString& aFootprintNam
aReporter.Report( wxString::Format( _( "Footprint ID '%s' is not valid." ), aReporter.Report( wxString::Format( _( "Footprint ID '%s' is not valid." ),
aFootprintName ), aFootprintName ),
RPT_SEVERITY_ERROR ); RPT_SEVERITY_ERROR );
return NULL; return nullptr;
} }
wxString libNickname = FROM_UTF8( fpid.GetLibNickname().c_str() ); wxString libNickname = FROM_UTF8( fpid.GetLibNickname().c_str() );
@ -415,7 +420,7 @@ FOOTPRINT* DISPLAY_FOOTPRINTS_FRAME::GetFootprint( const wxString& aFootprintNam
aReporter.Report( wxString::Format( _( "Library '%s' is not in the footprint library table." ), aReporter.Report( wxString::Format( _( "Library '%s' is not in the footprint library table." ),
libNickname ), libNickname ),
RPT_SEVERITY_ERROR ); RPT_SEVERITY_ERROR );
return NULL; return nullptr;
} }
// See if the footprint requested is in the library // See if the footprint requested is in the library
@ -423,7 +428,7 @@ FOOTPRINT* DISPLAY_FOOTPRINTS_FRAME::GetFootprint( const wxString& aFootprintNam
{ {
aReporter.Report( wxString::Format( _( "Footprint '%s' not found." ), aFootprintName ), aReporter.Report( wxString::Format( _( "Footprint '%s' not found." ), aFootprintName ),
RPT_SEVERITY_ERROR ); RPT_SEVERITY_ERROR );
return NULL; return nullptr;
} }
try try
@ -436,7 +441,7 @@ FOOTPRINT* DISPLAY_FOOTPRINTS_FRAME::GetFootprint( const wxString& aFootprintNam
catch( const IO_ERROR& ioe ) catch( const IO_ERROR& ioe )
{ {
DisplayError( this, ioe.What() ); DisplayError( this, ioe.What() );
return NULL; return nullptr;
} }
if( footprint ) if( footprint )
@ -448,7 +453,7 @@ FOOTPRINT* DISPLAY_FOOTPRINTS_FRAME::GetFootprint( const wxString& aFootprintNam
aReporter.Report( wxString::Format( _( "Footprint '%s' not found." ), aFootprintName ), aReporter.Report( wxString::Format( _( "Footprint '%s' not found." ), aFootprintName ),
RPT_SEVERITY_ERROR ); RPT_SEVERITY_ERROR );
return NULL; return nullptr;
} }

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 1992-2012 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -31,14 +31,9 @@
#include <wx/dcclient.h> #include <wx/dcclient.h>
/******************************************************************************
* Basic class (from wxListView) to display symbol and footprint lists
* Not directly used: the 2 list boxes actually used are derived from it
******************************************************************************/
ITEMS_LISTBOX_BASE::ITEMS_LISTBOX_BASE( CVPCB_MAINFRAME* aParent, wxWindowID aId, ITEMS_LISTBOX_BASE::ITEMS_LISTBOX_BASE( CVPCB_MAINFRAME* aParent, wxWindowID aId,
const wxPoint& aLocation, const wxSize& aSize, const wxPoint& aLocation, const wxSize& aSize,
long aStyle) : long aStyle ) :
wxListView( aParent, aId, aLocation, aSize, LISTBOX_STYLE | aStyle ), wxListView( aParent, aId, aLocation, aSize, LISTBOX_STYLE | aStyle ),
columnWidth( 0 ) columnWidth( 0 )
{ {
@ -72,11 +67,6 @@ void ITEMS_LISTBOX_BASE::UpdateWidth( int aLine )
} }
/*
* Calculate the width of the given line, and increase the column width
* if needed. This is effectively the wxListCtrl code for autosizing.
* NB. it relies on the caller checking the given line number is valid.
*/
void ITEMS_LISTBOX_BASE::UpdateLineWidth( unsigned aLine ) void ITEMS_LISTBOX_BASE::UpdateLineWidth( unsigned aLine )
{ {
wxClientDC dc( this ); wxClientDC dc( this );
@ -84,7 +74,7 @@ void ITEMS_LISTBOX_BASE::UpdateLineWidth( unsigned aLine )
int newWidth = 10; // Value of AUTOSIZE_COL_MARGIN from wxWidgets source. int newWidth = 10; // Value of AUTOSIZE_COL_MARGIN from wxWidgets source.
dc.SetFont( GetFont() ); dc.SetFont( GetFont() );
dc.GetTextExtent( GetItemText( aLine, 0 ) + " ", &w, NULL ); dc.GetTextExtent( GetItemText( aLine, 0 ) + " ", &w, nullptr );
newWidth += w; newWidth += w;
if( newWidth > columnWidth ) if( newWidth > columnWidth )
@ -95,16 +85,12 @@ void ITEMS_LISTBOX_BASE::UpdateLineWidth( unsigned aLine )
} }
/*
* Return an index for the selected item
*/
int ITEMS_LISTBOX_BASE::GetSelection() int ITEMS_LISTBOX_BASE::GetSelection()
{ {
return GetFirstSelected(); return GetFirstSelected();
} }
/* Removes all selection in list
*/
void ITEMS_LISTBOX_BASE::DeselectAll() void ITEMS_LISTBOX_BASE::DeselectAll()
{ {
for( int i = 0; i < GetItemCount(); i++ ) for( int i = 0; i < GetItemCount(); i++ )

View File

@ -35,6 +35,9 @@ class FOOTPRINT_LIST;
#define LISTBOX_STYLE ( wxBORDER_NONE | wxLC_NO_HEADER | wxLC_REPORT | wxLC_VIRTUAL | \ #define LISTBOX_STYLE ( wxBORDER_NONE | wxLC_NO_HEADER | wxLC_REPORT | wxLC_VIRTUAL | \
wxVSCROLL | wxHSCROLL ) wxVSCROLL | wxHSCROLL )
/**
* Base class to display symbol and footprint lists.
*/
class ITEMS_LISTBOX_BASE : public wxListView class ITEMS_LISTBOX_BASE : public wxListView
{ {
public: public:
@ -48,10 +51,10 @@ public:
* @return the index of the selected item in lists allowing only one item selected * @return the index of the selected item in lists allowing only one item selected
* and the index of the first selected item in lists allowing many selection * and the index of the first selected item in lists allowing many selection
*/ */
int GetSelection(); int GetSelection();
/** /**
* Removes all selection in lists which can have more than one item selected * Remove all selection in lists which can have more than one item selected.
*/ */
void DeselectAll(); void DeselectAll();
@ -67,6 +70,11 @@ public:
void UpdateWidth( int aLine = -1 ); void UpdateWidth( int aLine = -1 );
private: private:
/**
* Calculate the width of the given line, and increase the column width
* if needed. This is effectively the wxListCtrl code for autosizing.
* NB. it relies on the caller checking the given line number is valid.
*/
void UpdateLineWidth( unsigned aLine ); void UpdateLineWidth( unsigned aLine );
int columnWidth; int columnWidth;
@ -154,7 +162,7 @@ public:
/** /**
* Called on a key press. * Called on a key press.
* *
* Call default handler for some special keys, and for "ascii" keys, select the first * Call default handler for some special keys, and for "ASCII" keys, select the first
* footprint that the name starts by the letter. * footprint that the name starts by the letter.
* *
* This is the default behavior of a listbox, but because we use virtual lists, the * This is the default behavior of a listbox, but because we use virtual lists, the
@ -199,7 +207,7 @@ public:
/** /**
* Called on a key press. * Called on a key press.
* *
* Call default handler for some special keys, and for "ascii" keys, select the first * Call default handler for some special keys, and for "ASCII" keys, select the first
* component that the name starts by the letter. * component that the name starts by the letter.
* *
* This is the default behavior of a listbox, but because we use virtual lists, the * This is the default behavior of a listbox, but because we use virtual lists, the

View File

@ -2,8 +2,8 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2018 Jean-Pierre Charras, jean-pierre.charras * Copyright (C) 2018 Jean-Pierre Charras, jean-pierre.charras
* Copyright (C) 2011-2016 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2011 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -34,9 +34,13 @@
#include <fp_conflict_assignment_selector.h> #include <fp_conflict_assignment_selector.h>
/// Return true if the resultant LIB_ID has a certain nickname. The guess /**
/// is only made if this footprint resides in only one library. * Return true if the resultant LIB_ID has a certain nickname.
/// @return int - 0 on success, 1 on not found, 2 on ambiguous i.e. multiple matches *
* The guess is only made if this footprint resides in only one library.
*
* @return int - 0 on success, 1 on not found, 2 on ambiguous i.e. multiple matches.
*/
static int guessNickname( FP_LIB_TABLE* aTbl, LIB_ID* aFootprintId ) static int guessNickname( FP_LIB_TABLE* aTbl, LIB_ID* aFootprintId )
{ {
if( aFootprintId->GetLibNickname().size() ) if( aFootprintId->GetLibNickname().size() )
@ -83,7 +87,7 @@ bool CVPCB_MAINFRAME::ReadNetListAndFpFiles( const std::string& aNetlist )
ReadSchematicNetlist( aNetlist ); ReadSchematicNetlist( aNetlist );
if( m_symbolsListBox == NULL ) if( m_symbolsListBox == nullptr )
return false; return false;
wxSafeYield(); wxSafeYield();
@ -182,7 +186,9 @@ bool CVPCB_MAINFRAME::ReadNetListAndFpFiles( const std::string& aNetlist )
dlg.ShowModal(); dlg.ShowModal();
#else #else
dlg.Fit(); dlg.Fit();
dlg.Show( true ); // modeless lets user watch while fixing the problems, but its not working.
// Modeless lets user watch while fixing the problems, but its not working.
dlg.Show( true );
#endif #endif
} }
} }
@ -195,7 +201,7 @@ bool CVPCB_MAINFRAME::ReadNetListAndFpFiles( const std::string& aNetlist )
if( component->GetFPID().IsLegacy() ) if( component->GetFPID().IsLegacy() )
{ {
component->SetFPID( LIB_ID() /* empty */ ); component->SetFPID( LIB_ID() );
m_modified = true; m_modified = true;
} }
} }
@ -239,7 +245,6 @@ bool CVPCB_MAINFRAME::ReadNetListAndFpFiles( const std::string& aNetlist )
if( dlg.ShowModal() == wxID_OK ) if( dlg.ShowModal() == wxID_OK )
{ {
// Update the fp selection: // Update the fp selection:
for( unsigned ii = 0; ii < m_indexes.size(); ii++ ) for( unsigned ii = 0; ii < m_indexes.size(); ii++ )
{ {

View File

@ -333,7 +333,7 @@ bool SCH_EDIT_FRAME::BreakSegments( const wxPoint& aPoint, SCH_SCREEN* aScreen )
SCH_LINE* wire = static_cast<SCH_LINE*>( item ); SCH_LINE* wire = static_cast<SCH_LINE*>( item );
if( IsPointOnSegment( wire->GetStartPoint(), wire->GetEndPoint(), aPoint ) if( IsPointOnSegment( wire->GetStartPoint(), wire->GetEndPoint(), aPoint )
&& !wire->IsEndPoint( aPoint ) ) && !wire->IsEndPoint( aPoint ) )
{ {
wires.push_back( wire ); wires.push_back( wire );
} }
@ -341,7 +341,7 @@ bool SCH_EDIT_FRAME::BreakSegments( const wxPoint& aPoint, SCH_SCREEN* aScreen )
} }
for( SCH_LINE* wire : wires ) for( SCH_LINE* wire : wires )
brokenSegments |= BreakSegment( wire, aPoint, NULL, aScreen ); brokenSegments |= BreakSegment( wire, aPoint, nullptr, aScreen );
return brokenSegments; return brokenSegments;
} }
@ -438,7 +438,6 @@ void SCH_EDIT_FRAME::DeleteJunction( SCH_ITEM* aJunction, bool aAppend )
SaveCopyInUndoList( undoList, UNDO_REDO::DELETED, aAppend ); SaveCopyInUndoList( undoList, UNDO_REDO::DELETED, aAppend );
for( SCH_LINE* line : lines ) for( SCH_LINE* line : lines )
{ {
if( line->GetEditFlags() & STRUCT_DELETED ) if( line->GetEditFlags() & STRUCT_DELETED )

View File

@ -2,6 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2018 CERN * Copyright (C) 2018 CERN
* Copyright (C) 2021 KiCad Developers, see AUTHORS.txt for contributors.
* @author Jon Evans <jon@craftyjon.com> * @author Jon Evans <jon@craftyjon.com>
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
@ -32,7 +33,7 @@ class SCH_SCREEN;
class BUS_ALIAS class BUS_ALIAS
{ {
public: public:
BUS_ALIAS( SCH_SCREEN* aParent = NULL ); BUS_ALIAS( SCH_SCREEN* aParent = nullptr );
~BUS_ALIAS(); ~BUS_ALIAS();

View File

@ -310,6 +310,7 @@ wxString buildFullReference( const SCH_REFERENCE& aItem, int aUnitNumber = -1 )
return fullref; return fullref;
} }
void SCH_REFERENCE_LIST::ReannotateDuplicates( const SCH_REFERENCE_LIST& aAdditionalReferences ) void SCH_REFERENCE_LIST::ReannotateDuplicates( const SCH_REFERENCE_LIST& aAdditionalReferences )
{ {
SplitReferences(); SplitReferences();
@ -348,7 +349,7 @@ void SCH_REFERENCE_LIST::Annotate( bool aUseSheetNum, int aSheetIntervalId, int
// The algorithm tries to allocate the new reference to symbols having the same // The algorithm tries to allocate the new reference to symbols having the same
// old reference. // old reference.
// This algo works fine as long as the previous annotation has no duplicates. // This algo works fine as long as the previous annotation has no duplicates.
// But when a hierarchy is reannotated with this option, the previous anotation can // But when a hierarchy is reannotated with this option, the previous annotation can
// have duplicate references, and obviously we must fix these duplicate. // have duplicate references, and obviously we must fix these duplicate.
// therefore do not try to allocate a full reference more than once when trying // therefore do not try to allocate a full reference more than once when trying
// to keep this order of multi units. // to keep this order of multi units.
@ -402,7 +403,8 @@ void SCH_REFERENCE_LIST::Annotate( bool aUseSheetNum, int aSheetIntervalId, int
continue; continue;
// Check whether this symbol is in aLockedUnitMap. // Check whether this symbol is in aLockedUnitMap.
SCH_REFERENCE_LIST* lockedList = NULL; SCH_REFERENCE_LIST* lockedList = nullptr;
for( SCH_MULTI_UNIT_REFERENCE_MAP::value_type& pair : aLockedUnitMap ) for( SCH_MULTI_UNIT_REFERENCE_MAP::value_type& pair : aLockedUnitMap )
{ {
unsigned n_refs = pair.second.GetCount(); unsigned n_refs = pair.second.GetCount();
@ -417,7 +419,9 @@ void SCH_REFERENCE_LIST::Annotate( bool aUseSheetNum, int aSheetIntervalId, int
break; break;
} }
} }
if( lockedList != NULL ) break;
if( lockedList != nullptr )
break;
} }
if( ( flatList[first].CompareRef( ref_unit ) != 0 ) if( ( flatList[first].CompareRef( ref_unit ) != 0 )
@ -469,7 +473,7 @@ void SCH_REFERENCE_LIST::Annotate( bool aUseSheetNum, int aSheetIntervalId, int
// If this symbol is in aLockedUnitMap, copy the annotation to all // If this symbol is in aLockedUnitMap, copy the annotation to all
// symbols that are not it // symbols that are not it
if( lockedList != NULL ) if( lockedList != nullptr )
{ {
unsigned n_refs = lockedList->GetCount(); unsigned n_refs = lockedList->GetCount();
@ -583,7 +587,7 @@ int SCH_REFERENCE_LIST::CheckAnnotation( ANNOTATION_ERROR_HANDLER aHandler )
SortByRefAndValue(); SortByRefAndValue();
// Spiit reference designators into name (prefix) and number: IC1 becomes IC, and 1. // Split reference designators into name (prefix) and number: IC1 becomes IC, and 1.
SplitReferences(); SplitReferences();
// count not yet annotated items or annotation error. // count not yet annotated items or annotation error.
@ -608,9 +612,7 @@ int SCH_REFERENCE_LIST::CheckAnnotation( ANNOTATION_ERROR_HANDLER aHandler )
} }
else else
{ {
msg.Printf( _( "Item not annotated: %s%s\n" ), msg.Printf( _( "Item not annotated: %s%s\n" ), flatList[ii].GetRef(), tmp );
flatList[ii].GetRef(),
tmp );
} }
aHandler( ERCE_UNANNOTATED, msg, &flatList[ii], nullptr ); aHandler( ERCE_UNANNOTATED, msg, &flatList[ii], nullptr );
@ -672,9 +674,7 @@ int SCH_REFERENCE_LIST::CheckAnnotation( ANNOTATION_ERROR_HANDLER aHandler )
} }
else else
{ {
msg.Printf( _( "Duplicate items %s%s\n" ), msg.Printf( _( "Duplicate items %s%s\n" ), flatList[ii].GetRef(), tmp );
flatList[ii].GetRef(),
tmp );
} }
aHandler( ERCE_DUPLICATE_REFERENCE, msg, &flatList[ii], &flatList[ii+1] ); aHandler( ERCE_DUPLICATE_REFERENCE, msg, &flatList[ii], &flatList[ii+1] );
@ -702,9 +702,7 @@ int SCH_REFERENCE_LIST::CheckAnnotation( ANNOTATION_ERROR_HANDLER aHandler )
} }
else else
{ {
msg.Printf( _( "Duplicate items %s%s\n" ), msg.Printf( _( "Duplicate items %s%s\n" ), flatList[ii].GetRef(), tmp );
flatList[ii].GetRef(),
tmp );
} }
aHandler( ERCE_DUPLICATE_REFERENCE, msg, &flatList[ii], &flatList[ii+1] ); aHandler( ERCE_DUPLICATE_REFERENCE, msg, &flatList[ii], &flatList[ii+1] );
@ -738,7 +736,7 @@ int SCH_REFERENCE_LIST::CheckAnnotation( ANNOTATION_ERROR_HANDLER aHandler )
SCH_REFERENCE::SCH_REFERENCE( SCH_SYMBOL* aSymbol, LIB_SYMBOL* aLibSymbol, SCH_REFERENCE::SCH_REFERENCE( SCH_SYMBOL* aSymbol, LIB_SYMBOL* aLibSymbol,
const SCH_SHEET_PATH& aSheetPath ) const SCH_SHEET_PATH& aSheetPath )
{ {
wxASSERT( aSymbol != NULL ); wxASSERT( aSymbol != nullptr );
m_rootSymbol = aSymbol; m_rootSymbol = aSymbol;
m_libPart = aLibSymbol; // Warning: can be nullptr for orphan symbols m_libPart = aLibSymbol; // Warning: can be nullptr for orphan symbols

View File

@ -2,6 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2018 CERN * Copyright (C) 2018 CERN
* Copyright (C) 2021 KiCad Developers, see AUTHORS.txt for contributors.
* @author Jon Evans <jon@craftyjon.com> * @author Jon Evans <jon@craftyjon.com>
* *
* This program is free software: you can redistribute it and/or modify it * This program is free software: you can redistribute it and/or modify it
@ -104,8 +105,8 @@ DIALOG_BUS_MANAGER::DIALOG_BUS_MANAGER( SCH_EDIT_FRAME* aParent )
wxDefaultPosition, wxDefaultSize, wxDefaultPosition, wxDefaultSize,
wxALIGN_LEFT ); wxALIGN_LEFT );
m_signal_edit = new wxTextCtrl( this, wxID_ANY, wxEmptyString, m_signal_edit = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition,
wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER ); wxDefaultSize, wxTE_PROCESS_ENTER );
auto right_button_sizer = new wxBoxSizer( wxHORIZONTAL ); auto right_button_sizer = new wxBoxSizer( wxHORIZONTAL );
@ -146,31 +147,31 @@ DIALOG_BUS_MANAGER::DIALOG_BUS_MANAGER( SCH_EDIT_FRAME* aParent )
Bind( wxEVT_INIT_DIALOG, &DIALOG_BUS_MANAGER::OnInitDialog, this ); Bind( wxEVT_INIT_DIALOG, &DIALOG_BUS_MANAGER::OnInitDialog, this );
m_bus_list_view->Connect( wxEVT_COMMAND_LIST_ITEM_DESELECTED, m_bus_list_view->Connect( wxEVT_COMMAND_LIST_ITEM_DESELECTED,
wxListEventHandler( DIALOG_BUS_MANAGER::OnSelectBus ), NULL, this ); wxListEventHandler( DIALOG_BUS_MANAGER::OnSelectBus ), nullptr, this );
m_bus_list_view->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, m_bus_list_view->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED,
wxListEventHandler( DIALOG_BUS_MANAGER::OnSelectBus ), NULL, this ); wxListEventHandler( DIALOG_BUS_MANAGER::OnSelectBus ), nullptr, this );
m_signal_list_view->Connect( wxEVT_COMMAND_LIST_ITEM_DESELECTED, m_signal_list_view->Connect( wxEVT_COMMAND_LIST_ITEM_DESELECTED,
wxListEventHandler( DIALOG_BUS_MANAGER::OnSelectSignal ), NULL, this ); wxListEventHandler( DIALOG_BUS_MANAGER::OnSelectSignal ), nullptr, this );
m_signal_list_view->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED, m_signal_list_view->Connect( wxEVT_COMMAND_LIST_ITEM_SELECTED,
wxListEventHandler( DIALOG_BUS_MANAGER::OnSelectSignal ), NULL, this ); wxListEventHandler( DIALOG_BUS_MANAGER::OnSelectSignal ), nullptr, this );
m_btn_add_bus->Connect( wxEVT_COMMAND_BUTTON_CLICKED, m_btn_add_bus->Connect( wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler( DIALOG_BUS_MANAGER::OnAddBus ), NULL, this ); wxCommandEventHandler( DIALOG_BUS_MANAGER::OnAddBus ), nullptr, this );
m_btn_rename_bus->Connect( wxEVT_COMMAND_BUTTON_CLICKED, m_btn_rename_bus->Connect( wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler( DIALOG_BUS_MANAGER::OnRenameBus ), NULL, this ); wxCommandEventHandler( DIALOG_BUS_MANAGER::OnRenameBus ), nullptr, this );
m_btn_remove_bus->Connect( wxEVT_COMMAND_BUTTON_CLICKED, m_btn_remove_bus->Connect( wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler( DIALOG_BUS_MANAGER::OnRemoveBus ), NULL, this ); wxCommandEventHandler( DIALOG_BUS_MANAGER::OnRemoveBus ), nullptr, this );
m_signal_edit->Connect( wxEVT_TEXT_ENTER, m_signal_edit->Connect( wxEVT_TEXT_ENTER,
wxCommandEventHandler( DIALOG_BUS_MANAGER::OnAddSignal ), NULL, this ); wxCommandEventHandler( DIALOG_BUS_MANAGER::OnAddSignal ), nullptr, this );
m_btn_add_signal->Connect( wxEVT_COMMAND_BUTTON_CLICKED, m_btn_add_signal->Connect( wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler( DIALOG_BUS_MANAGER::OnAddSignal ), NULL, this ); wxCommandEventHandler( DIALOG_BUS_MANAGER::OnAddSignal ), nullptr, this );
m_btn_rename_signal->Connect( wxEVT_COMMAND_BUTTON_CLICKED, m_btn_rename_signal->Connect( wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler( DIALOG_BUS_MANAGER::OnRenameSignal ), NULL, this ); wxCommandEventHandler( DIALOG_BUS_MANAGER::OnRenameSignal ), nullptr, this );
m_btn_remove_signal->Connect( wxEVT_COMMAND_BUTTON_CLICKED, m_btn_remove_signal->Connect( wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler( DIALOG_BUS_MANAGER::OnRemoveSignal ), NULL, this ); wxCommandEventHandler( DIALOG_BUS_MANAGER::OnRemoveSignal ), nullptr, this );
m_bus_edit->Connect( wxEVT_TEXT_ENTER, m_bus_edit->Connect( wxEVT_TEXT_ENTER,
wxCommandEventHandler( DIALOG_BUS_MANAGER::OnAddBus ), NULL, this ); wxCommandEventHandler( DIALOG_BUS_MANAGER::OnAddBus ), nullptr, this );
// Set initial UI state // Set initial UI state
@ -204,7 +205,7 @@ bool DIALOG_BUS_MANAGER::TransferDataToWindow()
std::vector< std::shared_ptr<BUS_ALIAS> > original_aliases; std::vector< std::shared_ptr<BUS_ALIAS> > original_aliases;
// collect aliases from each open sheet // collect aliases from each open sheet
for( SCH_SCREEN* screen = screens.GetFirst(); screen != NULL; screen = screens.GetNext() ) for( SCH_SCREEN* screen = screens.GetFirst(); screen != nullptr; screen = screens.GetNext() )
{ {
std::unordered_set<std::shared_ptr<BUS_ALIAS>> sheet_aliases = screen->GetBusAliases(); std::unordered_set<std::shared_ptr<BUS_ALIAS>> sheet_aliases = screen->GetBusAliases();
original_aliases.insert( original_aliases.end(), sheet_aliases.begin(), original_aliases.insert( original_aliases.end(), sheet_aliases.begin(),
@ -298,7 +299,7 @@ void DIALOG_BUS_MANAGER::OnSelectBus( wxListEvent& event )
} }
else else
{ {
m_active_alias = NULL; m_active_alias = nullptr;
m_bus_edit->Clear(); m_bus_edit->Clear();
m_signal_edit->Clear(); m_signal_edit->Clear();
m_signal_list_view->DeleteAllItems(); m_signal_list_view->DeleteAllItems();
@ -402,7 +403,7 @@ void DIALOG_BUS_MANAGER::OnRemoveBus( wxCommandEvent& aEvent )
m_aliases.erase( m_aliases.begin() + i ); m_aliases.erase( m_aliases.begin() + i );
m_bus_edit->Clear(); m_bus_edit->Clear();
m_active_alias = NULL; m_active_alias = nullptr;
auto evt = wxListEvent( wxEVT_COMMAND_LIST_ITEM_DESELECTED ); auto evt = wxListEvent( wxEVT_COMMAND_LIST_ITEM_DESELECTED );
OnSelectBus( evt ); OnSelectBus( evt );

View File

@ -96,7 +96,7 @@ DIALOG_CHOOSE_SYMBOL::DIALOG_CHOOSE_SYMBOL( SCH_BASE_FRAME* aParent, const wxStr
m_hsplitter = new wxSplitterWindow( m_vsplitter, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_hsplitter = new wxSplitterWindow( m_vsplitter, wxID_ANY, wxDefaultPosition, wxDefaultSize,
wxSP_LIVE_UPDATE | wxSP_NOBORDER | wxSP_3DSASH ); wxSP_LIVE_UPDATE | wxSP_NOBORDER | wxSP_3DSASH );
//Avoid the splitter window being assigned as the Parent to additional windows // Avoid the splitter window being assigned as the parent to additional windows.
m_vsplitter->SetExtraStyle( wxWS_EX_TRANSIENT ); m_vsplitter->SetExtraStyle( wxWS_EX_TRANSIENT );
m_hsplitter->SetExtraStyle( wxWS_EX_TRANSIENT ); m_hsplitter->SetExtraStyle( wxWS_EX_TRANSIENT );
@ -219,7 +219,7 @@ DIALOG_CHOOSE_SYMBOL::DIALOG_CHOOSE_SYMBOL( SCH_BASE_FRAME* aParent, const wxStr
if( m_details ) if( m_details )
{ {
m_details->Connect( wxEVT_CHAR_HOOK, wxKeyEventHandler( DIALOG_CHOOSE_SYMBOL::OnCharHook ), m_details->Connect( wxEVT_CHAR_HOOK, wxKeyEventHandler( DIALOG_CHOOSE_SYMBOL::OnCharHook ),
NULL, this ); nullptr, this );
} }
} }
@ -250,7 +250,8 @@ DIALOG_CHOOSE_SYMBOL::~DIALOG_CHOOSE_SYMBOL()
if( m_details ) if( m_details )
{ {
m_details->Disconnect( wxEVT_CHAR_HOOK, m_details->Disconnect( wxEVT_CHAR_HOOK,
wxKeyEventHandler( DIALOG_CHOOSE_SYMBOL::OnCharHook ), NULL, this ); wxKeyEventHandler( DIALOG_CHOOSE_SYMBOL::OnCharHook ), nullptr,
this );
} }
if( EESCHEMA_SETTINGS* cfg = dynamic_cast<EESCHEMA_SETTINGS*>( Kiface().KifaceSettings() ) ) if( EESCHEMA_SETTINGS* cfg = dynamic_cast<EESCHEMA_SETTINGS*>( Kiface().KifaceSettings() ) )

View File

@ -475,7 +475,7 @@ SCH_EDIT_FRAME* DIALOG_EDIT_SYMBOLS_LIBID::GetParent()
void DIALOG_EDIT_SYMBOLS_LIBID::AddRowToGrid( bool aMarkRow, const wxString& aReferences, void DIALOG_EDIT_SYMBOLS_LIBID::AddRowToGrid( bool aMarkRow, const wxString& aReferences,
const wxString& aStrLibId ) const wxString& aStrLibId )
{ {
int row = m_grid->GetNumberRows(); int row = m_grid->GetNumberRows();
@ -634,8 +634,9 @@ void DIALOG_EDIT_SYMBOLS_LIBID::onClickOrphansButton( wxCommandEvent& event )
m_grid->GetCellValue( grid_row_idx, COL_CURR_LIBID ) ); m_grid->GetCellValue( grid_row_idx, COL_CURR_LIBID ) );
wxSingleChoiceDialog dlg ( this, msg, wxSingleChoiceDialog dlg ( this, msg,
wxString::Format( _( "Candidates count %d " ), libIdCandidateCount ), wxString::Format( _( "Candidates count %d " ),
candidateSymbNames ); libIdCandidateCount ),
candidateSymbNames );
if( dlg.ShowModal() == wxID_OK ) if( dlg.ShowModal() == wxID_OK )
m_grid->SetCellValue( grid_row_idx, COL_NEW_LIBID, dlg.GetStringSelection() ); m_grid->SetCellValue( grid_row_idx, COL_NEW_LIBID, dlg.GetStringSelection() );
@ -649,7 +650,9 @@ void DIALOG_EDIT_SYMBOLS_LIBID::onClickOrphansButton( wxCommandEvent& event )
(unsigned) m_OrphansRowIndexes.size() - fixesCount ) ); (unsigned) m_OrphansRowIndexes.size() - fixesCount ) );
} }
else else
{
wxMessageBox( wxString::Format( _( "All %u link(s) resolved" ), fixesCount ) ); wxMessageBox( wxString::Format( _( "All %u link(s) resolved" ), fixesCount ) );
}
} }
@ -658,7 +661,7 @@ bool DIALOG_EDIT_SYMBOLS_LIBID::setLibIdByBrowser( int aRow )
#if 0 #if 0
// Use dialog symbol selector to choose a symbol // Use dialog symbol selector to choose a symbol
SCH_BASE_FRAME::HISTORY_LIST dummy; SCH_BASE_FRAME::HISTORY_LIST dummy;
SCH_BASE_FRAME::PICKED_SYMBOL sel = m_frame->SelectComponentFromLibrary( NULL, dummy, true, SCH_BASE_FRAME::PICKED_SYMBOL sel = m_frame->SelectComponentFromLibrary( nullptr, dummy, true,
0, 0, false ); 0, 0, false );
#else #else
// Use library viewer to choose a symbol // Use library viewer to choose a symbol
@ -671,7 +674,7 @@ bool DIALOG_EDIT_SYMBOLS_LIBID::setLibIdByBrowser( int aRow )
if( !current.IsEmpty() ) if( !current.IsEmpty() )
preselected.Parse( current, true ); preselected.Parse( current, true );
PICKED_SYMBOL sel = GetParent()->PickSymbolFromLibBrowser( this, NULL, preselected, 0, 0 ); PICKED_SYMBOL sel = GetParent()->PickSymbolFromLibBrowser( this, nullptr, preselected, 0, 0 );
#endif #endif
if( sel.LibId.empty() ) // command aborted if( sel.LibId.empty() ) // command aborted
@ -764,7 +767,7 @@ bool DIALOG_EDIT_SYMBOLS_LIBID::TransferDataFromWindow()
false, /* update ref */ false, /* update ref */
false, /* update other fields */ false, /* update other fields */
false, /* reset ref */ false, /* reset ref */
true /* reset other fields */ ); true /* reset other fields */ );
} }
} }
} }
@ -829,8 +832,8 @@ bool InvokeDialogEditSymbolsLibId( SCH_EDIT_FRAME* aCaller )
// quasimodal mode for the quasimodal frame support to work. So don't use // quasimodal mode for the quasimodal frame support to work. So don't use
// the QUASIMODAL macros here. // the QUASIMODAL macros here.
DIALOG_EDIT_SYMBOLS_LIBID dlg( aCaller ); DIALOG_EDIT_SYMBOLS_LIBID dlg( aCaller );
// DO NOT use ShowModal() here, otherwise the library browser will not work
// properly. // DO NOT use ShowModal() here, otherwise the library browser will not work properly.
dlg.ShowQuasiModal(); dlg.ShowQuasiModal();
return dlg.IsSchematicModified(); return dlg.IsSchematicModified();

View File

@ -103,7 +103,7 @@ DIALOG_LIB_SYMBOL_PROPERTIES::DIALOG_LIB_SYMBOL_PROPERTIES( SYMBOL_EDIT_FRAME* a
// wxFormBuilder doesn't include this event... // wxFormBuilder doesn't include this event...
m_grid->Connect( wxEVT_GRID_CELL_CHANGING, m_grid->Connect( wxEVT_GRID_CELL_CHANGING,
wxGridEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES::OnGridCellChanging ), wxGridEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES::OnGridCellChanging ),
NULL, this ); nullptr, this );
if( m_lastLayout != DIALOG_LIB_SYMBOL_PROPERTIES::NONE ) if( m_lastLayout != DIALOG_LIB_SYMBOL_PROPERTIES::NONE )
{ {
@ -137,7 +137,7 @@ DIALOG_LIB_SYMBOL_PROPERTIES::~DIALOG_LIB_SYMBOL_PROPERTIES()
m_grid->Disconnect( wxEVT_GRID_CELL_CHANGING, m_grid->Disconnect( wxEVT_GRID_CELL_CHANGING,
wxGridEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES::OnGridCellChanging ), wxGridEventHandler( DIALOG_LIB_SYMBOL_PROPERTIES::OnGridCellChanging ),
NULL, this ); nullptr, this );
// Delete the GRID_TRICKS. // Delete the GRID_TRICKS.
m_grid->PopEventHandler( true ); m_grid->PopEventHandler( true );
@ -171,7 +171,8 @@ bool DIALOG_LIB_SYMBOL_PROPERTIES::TransferDataToWindow()
m_DescCtrl->ChangeValue( m_libEntry->GetDescription() ); m_DescCtrl->ChangeValue( m_libEntry->GetDescription() );
m_KeywordCtrl->ChangeValue( m_libEntry->GetKeyWords() ); m_KeywordCtrl->ChangeValue( m_libEntry->GetKeyWords() );
m_SelNumberOfUnits->SetValue( m_libEntry->GetUnitCount() ); m_SelNumberOfUnits->SetValue( m_libEntry->GetUnitCount() );
m_OptionPartsInterchangeable->SetValue( !m_libEntry->UnitsLocked() || m_libEntry->GetUnitCount() == 1 ); m_OptionPartsInterchangeable->SetValue( !m_libEntry->UnitsLocked() ||
m_libEntry->GetUnitCount() == 1 );
m_AsConvertButt->SetValue( m_libEntry->HasConversion() ); m_AsConvertButt->SetValue( m_libEntry->HasConversion() );
m_OptionPower->SetValue( m_libEntry->IsPower() ); m_OptionPower->SetValue( m_libEntry->IsPower() );
m_excludeFromBomCheckBox->SetValue( !m_libEntry->GetIncludeInBom() ); m_excludeFromBomCheckBox->SetValue( !m_libEntry->GetIncludeInBom() );
@ -563,7 +564,9 @@ void DIALOG_LIB_SYMBOL_PROPERTIES::OnMoveDown( wxCommandEvent& event )
m_grid->MakeCellVisible( m_grid->GetGridCursorRow(), m_grid->GetGridCursorCol() ); m_grid->MakeCellVisible( m_grid->GetGridCursorRow(), m_grid->GetGridCursorCol() );
} }
else else
{
wxBell(); wxBell();
}
} }
@ -596,7 +599,7 @@ void DIALOG_LIB_SYMBOL_PROPERTIES::OnEditSpiceModel( wxCommandEvent& event )
} }
void DIALOG_LIB_SYMBOL_PROPERTIES::OnFilterDClick( wxMouseEvent& event) void DIALOG_LIB_SYMBOL_PROPERTIES::OnFilterDClick( wxMouseEvent& event )
{ {
int idx = m_FootprintFilterListBox->HitTest( event.GetPosition() ); int idx = m_FootprintFilterListBox->HitTest( event.GetPosition() );
wxCommandEvent dummy; wxCommandEvent dummy;

View File

@ -217,9 +217,9 @@ NETLIST_PAGE_DIALOG::NETLIST_PAGE_DIALOG( wxNotebook* parent, const wxString& ti
{ {
m_IdNetType = id_NetType; m_IdNetType = id_NetType;
m_pageNetFmtName = title; m_pageNetFmtName = title;
m_CommandStringCtrl = NULL; m_CommandStringCtrl = nullptr;
m_TitleStringCtrl = NULL; m_TitleStringCtrl = nullptr;
m_AdjustPassiveValues = NULL; m_AdjustPassiveValues = nullptr;
wxString netfmtName = static_cast<NETLIST_DIALOG*>( parent->GetParent() )->m_DefaultNetFmtName; wxString netfmtName = static_cast<NETLIST_DIALOG*>( parent->GetParent() )->m_DefaultNetFmtName;
@ -254,7 +254,7 @@ NETLIST_DIALOG::NETLIST_DIALOG( SCH_EDIT_FRAME* parent ) :
m_DefaultNetFmtName = settings.m_NetFormatName; m_DefaultNetFmtName = settings.m_NetFormatName;
for( NETLIST_PAGE_DIALOG*& page : m_PanelNetType) for( NETLIST_PAGE_DIALOG*& page : m_PanelNetType)
page = NULL; page = nullptr;
// Add notebook pages: // Add notebook pages:
m_PanelNetType[PANELPCBNEW] = new NETLIST_PAGE_DIALOG( m_NoteBook, wxT( "KiCad" ), m_PanelNetType[PANELPCBNEW] = new NETLIST_PAGE_DIALOG( m_NoteBook, wxT( "KiCad" ),
@ -334,7 +334,7 @@ void NETLIST_DIALOG::InstallPageSpice()
wxStaticText* spice_label = new wxStaticText( page, -1, _( "External simulator command:" ) ); wxStaticText* spice_label = new wxStaticText( page, -1, _( "External simulator command:" ) );
spice_label->SetToolTip( _( "Enter the command line to run spice\n" spice_label->SetToolTip( _( "Enter the command line to run spice\n"
"Usually <path to spice binary> %I\n" "Usually <path to spice binary> %I\n"
"%I will be replaced by the actual spice netlist name") ); "%I will be replaced by the actual spice netlist name" ) );
page->m_LowBoxSizer->Add( spice_label, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 ); page->m_LowBoxSizer->Add( spice_label, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 );
page->m_CommandStringCtrl = new wxTextCtrl( page, -1, simulatorCommand, page->m_CommandStringCtrl = new wxTextCtrl( page, -1, simulatorCommand,
@ -415,7 +415,7 @@ void NETLIST_DIALOG::OnNetlistTypeSelection( wxNotebookEvent& event )
{ {
NETLIST_PAGE_DIALOG* currPage = (NETLIST_PAGE_DIALOG*) m_NoteBook->GetCurrentPage(); NETLIST_PAGE_DIALOG* currPage = (NETLIST_PAGE_DIALOG*) m_NoteBook->GetCurrentPage();
if( currPage == NULL ) if( currPage == nullptr )
return; return;
m_DefaultNetFmtName = currPage->GetPageNetFmtName(); m_DefaultNetFmtName = currPage->GetPageNetFmtName();
@ -496,7 +496,7 @@ bool NETLIST_DIALOG::TransferDataFromWindow()
wxString fullname = fn.GetFullName(); wxString fullname = fn.GetFullName();
wxString path = fn.GetPath(); wxString path = fn.GetPath();
// fullname does not and should not include the path, per wx docs. // full name does not and should not include the path, per wx docs.
wxFileDialog dlg( this, title, path, fullname, fileWildcard, wxFD_SAVE ); wxFileDialog dlg( this, title, path, fullname, fileWildcard, wxFD_SAVE );
if( dlg.ShowModal() == wxID_CANCEL ) if( dlg.ShowModal() == wxID_CANCEL )
@ -578,7 +578,7 @@ void NETLIST_DIALOG::WriteCurrentNetlistSetup()
{ {
NETLIST_PAGE_DIALOG* currPage = m_PanelNetType[ii + PANELCUSTOMBASE]; NETLIST_PAGE_DIALOG* currPage = m_PanelNetType[ii + PANELCUSTOMBASE];
if( currPage == NULL ) if( currPage == nullptr )
break; break;
wxString title = currPage->m_TitleStringCtrl->GetValue(); wxString title = currPage->m_TitleStringCtrl->GetValue();
@ -626,7 +626,7 @@ void NETLIST_DIALOG::OnAddGenerator( wxCommandEvent& event )
netTypeId = PANELCUSTOMBASE + ii; netTypeId = PANELCUSTOMBASE + ii;
currPage = m_PanelNetType[ii + PANELCUSTOMBASE]; currPage = m_PanelNetType[ii + PANELCUSTOMBASE];
if( currPage == NULL ) if( currPage == nullptr )
break; break;
if( currPage->GetPageNetFmtName() == title ) if( currPage->GetPageNetFmtName() == title )

View File

@ -37,6 +37,7 @@
#include <wx/print.h> #include <wx/print.h>
#include <wx/printdlg.h> #include <wx/printdlg.h>
class DIALOG_PRINT_USING_PRINTER : public DIALOG_PRINT_USING_PRINTER_BASE class DIALOG_PRINT_USING_PRINTER : public DIALOG_PRINT_USING_PRINTER_BASE
{ {
public: public:
@ -70,7 +71,7 @@ public:
SCH_PRINTOUT( SCH_EDIT_FRAME* aParent, const wxString& aTitle ) : SCH_PRINTOUT( SCH_EDIT_FRAME* aParent, const wxString& aTitle ) :
wxPrintout( aTitle ) wxPrintout( aTitle )
{ {
wxASSERT( aParent != NULL ); wxASSERT( aParent != nullptr );
m_parent = aParent; m_parent = aParent;
} }
@ -336,6 +337,7 @@ bool DIALOG_PRINT_USING_PRINTER::TransferDataFromWindow()
m_parent->GetPageSetupData() = printer.GetPrintDialogData().GetPrintData(); m_parent->GetPageSetupData() = printer.GetPrintDialogData().GetPrintData();
} }
} }
Pgm().m_Printing = false; Pgm().m_Printing = false;
return true; return true;
@ -349,7 +351,7 @@ bool SCH_PRINTOUT::OnPrintPage( int page )
wxCHECK_MSG( page >= 1 && page <= (int)sheetList.size(), false, wxCHECK_MSG( page >= 1 && page <= (int)sheetList.size(), false,
wxT( "Cannot print invalid page number." ) ); wxT( "Cannot print invalid page number." ) );
wxCHECK_MSG( sheetList[ page - 1].LastScreen() != NULL, false, wxCHECK_MSG( sheetList[ page - 1].LastScreen() != nullptr, false,
wxT( "Cannot print page with NULL screen." ) ); wxT( "Cannot print page with NULL screen." ) );
wxString msg; wxString msg;

View File

@ -81,7 +81,8 @@ DIALOG_SCHEMATIC_SETUP::DIALOG_SCHEMATIC_SETUP( SCH_EDIT_FRAME* aFrame ) :
// Connect Events // Connect Events
m_treebook->Connect( wxEVT_TREEBOOK_PAGE_CHANGED, m_treebook->Connect( wxEVT_TREEBOOK_PAGE_CHANGED,
wxBookCtrlEventHandler( DIALOG_SCHEMATIC_SETUP::OnPageChange ), NULL, this ); wxBookCtrlEventHandler( DIALOG_SCHEMATIC_SETUP::OnPageChange ), nullptr,
this );
if( Prj().IsReadOnly() ) if( Prj().IsReadOnly() )
{ {
@ -96,7 +97,8 @@ DIALOG_SCHEMATIC_SETUP::DIALOG_SCHEMATIC_SETUP( SCH_EDIT_FRAME* aFrame ) :
DIALOG_SCHEMATIC_SETUP::~DIALOG_SCHEMATIC_SETUP() DIALOG_SCHEMATIC_SETUP::~DIALOG_SCHEMATIC_SETUP()
{ {
m_treebook->Disconnect( wxEVT_TREEBOOK_PAGE_CHANGED, m_treebook->Disconnect( wxEVT_TREEBOOK_PAGE_CHANGED,
wxBookCtrlEventHandler( DIALOG_SCHEMATIC_SETUP::OnPageChange ), NULL, this ); wxBookCtrlEventHandler( DIALOG_SCHEMATIC_SETUP::OnPageChange ), nullptr,
this );
} }

View File

@ -247,21 +247,19 @@ bool DIALOG_SPICE_MODEL::TransferDataFromWindow()
switch( m_pasType->GetSelection() ) switch( m_pasType->GetSelection() )
{ {
case 0: m_fieldsTmp[SF_PRIMITIVE] = (char) SP_RESISTOR; break; case 0: m_fieldsTmp[SF_PRIMITIVE] = (char) SP_RESISTOR; break;
case 1: m_fieldsTmp[SF_PRIMITIVE] = (char) SP_CAPACITOR; break; case 1: m_fieldsTmp[SF_PRIMITIVE] = (char) SP_CAPACITOR; break;
case 2: m_fieldsTmp[SF_PRIMITIVE] = (char) SP_INDUCTOR; break; case 2: m_fieldsTmp[SF_PRIMITIVE] = (char) SP_INDUCTOR; break;
default: default:
wxASSERT_MSG( false, "Unhandled passive type" ); wxASSERT_MSG( false, "Unhandled passive type" );
return false; return false;
break; break;
} }
m_fieldsTmp[SF_MODEL] = m_pasValue->GetValue(); m_fieldsTmp[SF_MODEL] = m_pasValue->GetValue();
} }
else if( page == m_model ) // Model
// Model
else if( page == m_model )
{ {
if( !m_model->Validate() ) if( !m_model->Validate() )
return false; return false;
@ -656,7 +654,7 @@ bool DIALOG_SPICE_MODEL::parsePowerSource( const wxString& aModel )
} }
bool DIALOG_SPICE_MODEL::generatePowerSource( wxString& aTarget ) const bool DIALOG_SPICE_MODEL::generatePowerSource( wxString& aTarget )
{ {
wxString acdc, trans; wxString acdc, trans;
wxWindow* page = m_powerNotebook->GetCurrentPage(); wxWindow* page = m_powerNotebook->GetCurrentPage();
@ -677,7 +675,7 @@ bool DIALOG_SPICE_MODEL::generatePowerSource( wxString& aTarget ) const
} }
catch( ... ) catch( ... )
{ {
DisplayError( NULL, wxT( "Invalid DC value" ) ); DisplayError( this, wxT( "Invalid DC value" ) );
return false; return false;
} }
@ -695,7 +693,7 @@ bool DIALOG_SPICE_MODEL::generatePowerSource( wxString& aTarget ) const
} }
catch( ... ) catch( ... )
{ {
DisplayError( NULL, wxT( "Invalid AC magnitude or phase" ) ); DisplayError( this, wxT( "Invalid AC magnitude or phase" ) );
return false; return false;
} }
@ -839,6 +837,7 @@ void DIALOG_SPICE_MODEL::loadLibrary( const wxString& aFilePath )
{ {
//First, expand env vars, if any //First, expand env vars, if any
wxString libname = ExpandEnvVarSubstitutions( aFilePath, &Prj() ); wxString libname = ExpandEnvVarSubstitutions( aFilePath, &Prj() );
// Make path absolute, especially if it is relative to the project path // Make path absolute, especially if it is relative to the project path
libname = Prj().AbsolutePath( libname ); libname = Prj().AbsolutePath( libname );
@ -848,7 +847,7 @@ void DIALOG_SPICE_MODEL::loadLibrary( const wxString& aFilePath )
bool in_subckt = false; // flag indicating that the parser is inside a .subckt section bool in_subckt = false; // flag indicating that the parser is inside a .subckt section
if( !filePath.Exists() ) if( !filePath.Exists() )
return; return;
// Display the library contents // Display the library contents
wxWindowUpdateLocker updateLock( this ); wxWindowUpdateLocker updateLock( this );
@ -889,7 +888,6 @@ void DIALOG_SPICE_MODEL::loadLibrary( const wxString& aFilePath )
if( type != SP_UNKNOWN ) if( type != SP_UNKNOWN )
m_models.emplace( name, MODEL( line_nr, type ) ); m_models.emplace( name, MODEL( line_nr, type ) );
} }
else if( token == ".subckt" ) else if( token == ".subckt" )
{ {
wxASSERT( !in_subckt ); wxASSERT( !in_subckt );
@ -902,7 +900,6 @@ void DIALOG_SPICE_MODEL::loadLibrary( const wxString& aFilePath )
m_models.emplace( name, MODEL( line_nr, SP_SUBCKT ) ); m_models.emplace( name, MODEL( line_nr, SP_SUBCKT ) );
} }
else if( token == ".ends" ) else if( token == ".ends" )
{ {
wxASSERT( in_subckt ); wxASSERT( in_subckt );
@ -944,9 +941,10 @@ SCH_FIELD& DIALOG_SPICE_MODEL::getSchField( int aFieldType )
NETLIST_EXPORTER_PSPICE::GetSpiceFieldName( (SPICE_FIELD) aFieldType ); NETLIST_EXPORTER_PSPICE::GetSpiceFieldName( (SPICE_FIELD) aFieldType );
auto fieldIt = std::find_if( m_schfields->begin(), m_schfields->end(), auto fieldIt = std::find_if( m_schfields->begin(), m_schfields->end(),
[&]( const SCH_FIELD& f ) { [&]( const SCH_FIELD& f )
return f.GetName() == spiceField; {
} ); return f.GetName() == spiceField;
} );
// Found one, so return it // Found one, so return it
if( fieldIt != m_schfields->end() ) if( fieldIt != m_schfields->end() )
@ -1014,6 +1012,7 @@ void DIALOG_SPICE_MODEL::onSelectLibrary( wxCommandEvent& event )
{ {
//First, expand env vars, if any, in lib path //First, expand env vars, if any, in lib path
wxString libname = ExpandEnvVarSubstitutions( m_modelLibrary->GetValue(), &Prj() ); wxString libname = ExpandEnvVarSubstitutions( m_modelLibrary->GetValue(), &Prj() );
// Make path absolute, especially if it is relative to the project path // Make path absolute, especially if it is relative to the project path
libname = Prj().AbsolutePath( libname ); libname = Prj().AbsolutePath( libname );
@ -1024,7 +1023,7 @@ void DIALOG_SPICE_MODEL::onSelectLibrary( wxCommandEvent& event )
wxString wildcards = SpiceLibraryFileWildcard() + "|" + AllFilesWildcard(); wxString wildcards = SpiceLibraryFileWildcard() + "|" + AllFilesWildcard();
wxFileDialog openDlg( this, _( "Select library" ), searchPath, "", wildcards, wxFileDialog openDlg( this, _( "Select library" ), searchPath, "", wildcards,
wxFD_OPEN | wxFD_FILE_MUST_EXIST ); wxFD_OPEN | wxFD_FILE_MUST_EXIST );
if( openDlg.ShowModal() == wxID_CANCEL ) if( openDlg.ShowModal() == wxID_CANCEL )
return; return;

View File

@ -62,7 +62,7 @@ private:
* @param aTarget is the destination for the generated string. * @param aTarget is the destination for the generated string.
* @return True if the string was saved successfully. * @return True if the string was saved successfully.
*/ */
bool generatePowerSource( wxString& aTarget ) const; bool generatePowerSource( wxString& aTarget );
/** /**
* Load a list of components (.model and .subckt) from a spice library file and add them to * Load a list of components (.model and .subckt) from a spice library file and add them to

View File

@ -101,8 +101,10 @@ protected:
if( event.GetId() == MYID_SELECT_FOOTPRINT ) if( event.GetId() == MYID_SELECT_FOOTPRINT )
{ {
// pick a footprint using the footprint picker. // pick a footprint using the footprint picker.
wxString fpid = m_grid->GetCellValue( m_grid->GetGridCursorRow(), FOOTPRINT_FIELD ); wxString fpid = m_grid->GetCellValue( m_grid->GetGridCursorRow(),
KIWAY_PLAYER* frame = m_dlg->Kiway().Player( FRAME_FOOTPRINT_VIEWER_MODAL, true, m_dlg ); FOOTPRINT_FIELD );
KIWAY_PLAYER* frame = m_dlg->Kiway().Player( FRAME_FOOTPRINT_VIEWER_MODAL, true,
m_dlg );
if( frame->ShowModal( &fpid, m_dlg ) ) if( frame->ShowModal( &fpid, m_dlg ) )
m_grid->SetCellValue( m_grid->GetGridCursorRow(), FOOTPRINT_FIELD, fpid ); m_grid->SetCellValue( m_grid->GetGridCursorRow(), FOOTPRINT_FIELD, fpid );
@ -111,7 +113,8 @@ protected:
} }
else if (event.GetId() == MYID_SHOW_DATASHEET ) else if (event.GetId() == MYID_SHOW_DATASHEET )
{ {
wxString datasheet_uri = m_grid->GetCellValue( m_grid->GetGridCursorRow(), DATASHEET_FIELD ); wxString datasheet_uri = m_grid->GetCellValue( m_grid->GetGridCursorRow(),
DATASHEET_FIELD );
GetAssociatedDocument( m_dlg, datasheet_uri, &m_dlg->Prj() ); GetAssociatedDocument( m_dlg, datasheet_uri, &m_dlg->Prj() );
} }
else else
@ -816,7 +819,7 @@ DIALOG_SYMBOL_FIELDS_TABLE::DIALOG_SYMBOL_FIELDS_TABLE( SCH_EDIT_FRAME* parent )
// Connect Events // Connect Events
m_grid->Connect( wxEVT_GRID_COL_SORT, m_grid->Connect( wxEVT_GRID_COL_SORT,
wxGridEventHandler( DIALOG_SYMBOL_FIELDS_TABLE::OnColSort ), NULL, this ); wxGridEventHandler( DIALOG_SYMBOL_FIELDS_TABLE::OnColSort ), nullptr, this );
} }
@ -824,7 +827,8 @@ DIALOG_SYMBOL_FIELDS_TABLE::~DIALOG_SYMBOL_FIELDS_TABLE()
{ {
// Disconnect Events // Disconnect Events
m_grid->Disconnect( wxEVT_GRID_COL_SORT, m_grid->Disconnect( wxEVT_GRID_COL_SORT,
wxGridEventHandler( DIALOG_SYMBOL_FIELDS_TABLE::OnColSort ), NULL, this ); wxGridEventHandler( DIALOG_SYMBOL_FIELDS_TABLE::OnColSort ), nullptr,
this );
// Delete the GRID_TRICKS. // Delete the GRID_TRICKS.
m_grid->PopEventHandler( true ); m_grid->PopEventHandler( true );
@ -934,10 +938,6 @@ void DIALOG_SYMBOL_FIELDS_TABLE::AddField( const wxString& aDisplayName,
} }
/**
* Constructs the rows of m_fieldsCtrl and the columns of m_dataModel from a union of all
* field names in use.
*/
void DIALOG_SYMBOL_FIELDS_TABLE::LoadFieldNames() void DIALOG_SYMBOL_FIELDS_TABLE::LoadFieldNames()
{ {
std::set<wxString> userFieldNames; std::set<wxString> userFieldNames;

View File

@ -46,6 +46,11 @@ public:
private: private:
void AddField( const wxString& displayName, const wxString& aCanonicalName, bool defaultShow, void AddField( const wxString& displayName, const wxString& aCanonicalName, bool defaultShow,
bool defaultSortBy ); bool defaultSortBy );
/**
* Construct the rows of m_fieldsCtrl and the columns of m_dataModel from a union of all
* field names in use.
*/
void LoadFieldNames(); void LoadFieldNames();
void OnColSort( wxGridEvent& aEvent ); void OnColSort( wxGridEvent& aEvent );

View File

@ -121,7 +121,7 @@ void DIALOG_SYMBOL_REMAP::OnRemapSymbols( wxCommandEvent& aEvent )
} }
createProjectSymbolLibTable( m_messagePanel->Reporter() ); createProjectSymbolLibTable( m_messagePanel->Reporter() );
Prj().SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, NULL ); Prj().SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, nullptr );
Prj().SchSymbolLibTable(); Prj().SchSymbolLibTable();
remapSymbolsToLibTable( m_messagePanel->Reporter() ); remapSymbolsToLibTable( m_messagePanel->Reporter() );
@ -133,7 +133,7 @@ void DIALOG_SYMBOL_REMAP::OnRemapSymbols( wxCommandEvent& aEvent )
SYMBOL_LIBS::LibNamesAndPaths( &Prj(), true, &paths, &libNames ); SYMBOL_LIBS::LibNamesAndPaths( &Prj(), true, &paths, &libNames );
// Reload the cache symbol library. // Reload the cache symbol library.
Prj().SetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS, NULL ); Prj().SetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS, nullptr );
Prj().SchLibs(); Prj().SchLibs();
Raise(); Raise();
@ -283,7 +283,7 @@ void DIALOG_SYMBOL_REMAP::remapSymbolsToLibTable( REPORTER& aReporter )
bool DIALOG_SYMBOL_REMAP::remapSymbolToLibTable( SCH_SYMBOL* aSymbol ) bool DIALOG_SYMBOL_REMAP::remapSymbolToLibTable( SCH_SYMBOL* aSymbol )
{ {
wxCHECK_MSG( aSymbol != NULL, false, "Null pointer passed to remapSymbolToLibTable." ); wxCHECK_MSG( aSymbol != nullptr, false, "Null pointer passed to remapSymbolToLibTable." );
wxCHECK_MSG( aSymbol->GetLibId().GetLibNickname().empty(), false, wxCHECK_MSG( aSymbol->GetLibId().GetLibNickname().empty(), false,
"Cannot remap symbol that is already mapped." ); "Cannot remap symbol that is already mapped." );
wxCHECK_MSG( !aSymbol->GetLibId().GetLibItemName().empty(), false, wxCHECK_MSG( !aSymbol->GetLibId().GetLibItemName().empty(), false,

View File

@ -215,8 +215,8 @@ bool EE_COLLECTOR::IsCorner() const
if( GetCount() != 2 ) if( GetCount() != 2 )
return false; return false;
bool is_busentry0 = ( dynamic_cast<SCH_BUS_ENTRY_BASE*>( m_list[0] ) != NULL); bool is_busentry0 = ( dynamic_cast<SCH_BUS_ENTRY_BASE*>( m_list[0] ) != nullptr );
bool is_busentry1 = ( dynamic_cast<SCH_BUS_ENTRY_BASE*>( m_list[1] ) != NULL); bool is_busentry1 = ( dynamic_cast<SCH_BUS_ENTRY_BASE*>( m_list[1] ) != nullptr );
if(( m_list[0]->Type() == SCH_LINE_T) && ( m_list[1]->Type() == SCH_LINE_T) ) if(( m_list[0]->Type() == SCH_LINE_T) && ( m_list[1]->Type() == SCH_LINE_T) )
return ( ( SCH_LINE* ) m_list[0])->GetLayer() == ( ( SCH_LINE* ) m_list[1])->GetLayer(); return ( ( SCH_LINE* ) m_list[0])->GetLayer() == ( ( SCH_LINE* ) m_list[1])->GetLayer();

View File

@ -36,9 +36,6 @@ class SCH_SHEET_PATH;
class SCH_SYMBOL; class SCH_SYMBOL;
/**
* EE_COLLECTOR
*/
class EE_COLLECTOR : public COLLECTOR class EE_COLLECTOR : public COLLECTOR
{ {
public: public:
@ -68,7 +65,7 @@ public:
if( (unsigned)aIndex < (unsigned)GetCount() ) if( (unsigned)aIndex < (unsigned)GetCount() )
return (SCH_ITEM*) m_list[ aIndex ]; return (SCH_ITEM*) m_list[ aIndex ];
return NULL; return nullptr;
} }
SEARCH_RESULT Inspect( EDA_ITEM* aItem, void* aTestData ) override; SEARCH_RESULT Inspect( EDA_ITEM* aItem, void* aTestData ) override;

View File

@ -50,7 +50,7 @@
#include <connection_graph.h> #include <connection_graph.h>
// The main sheet of the project // The main sheet of the project
SCH_SHEET* g_RootSheet = NULL; SCH_SHEET* g_RootSheet = nullptr;
// a transform matrix, to display symbols in lib editor // a transform matrix, to display symbols in lib editor
TRANSFORM DefaultTransform = TRANSFORM( 1, 0, 0, -1 ); TRANSFORM DefaultTransform = TRANSFORM( 1, 0, 0, -1 );
@ -123,7 +123,8 @@ static struct IFACE : public KIFACE_I
void OnKifaceEnd() override; void OnKifaceEnd() override;
wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway, int aCtlBits = 0 ) override wxWindow* CreateWindow( wxWindow* aParent, int aClassId, KIWAY* aKiway,
int aCtlBits = 0 ) override
{ {
switch( aClassId ) switch( aClassId )
{ {
@ -167,17 +168,19 @@ static struct IFACE : public KIFACE_I
return nullptr; return nullptr;
default: default:
return NULL; return nullptr;
} }
} }
/** /**
* Function IfaceOrAddress * Return a pointer to the requested object.
* return a pointer to the requested object. The safest way to use this is to retrieve *
* a pointer to a static instance of an interface, similar to how the KIFACE interface * The safest way to use this is to retrieve a pointer to a static instance of an interface,
* is exported. But if you know what you are doing use it to retrieve anything you want. * similar to how the KIFACE interface is exported. But if you know what you are doing use
* it to retrieve anything you want.
*
* @param aDataId identifies which object you want the address of. * @param aDataId identifies which object you want the address of.
* @return void* - and must be cast into the know type. * @return the object requested and must be cast into the know type.
*/ */
void* IfaceOrAddress( int aDataId ) override void* IfaceOrAddress( int aDataId ) override
{ {
@ -186,11 +189,11 @@ static struct IFACE : public KIFACE_I
case KIFACE_NETLIST_SCHEMATIC: case KIFACE_NETLIST_SCHEMATIC:
return (void*) generateSchematicNetlist; return (void*) generateSchematicNetlist;
} }
return NULL;
return nullptr;
} }
/** /**
* Function SaveFileAs
* Saving a file under a different name is delegated to the various KIFACEs because * Saving a file under a different name is delegated to the various KIFACEs because
* the project doesn't know the internal format of the various files (which may have * the project doesn't know the internal format of the various files (which may have
* paths in them that need updating). * paths in them that need updating).
@ -247,7 +250,7 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
if( !fn.FileExists() ) if( !fn.FileExists() )
{ {
DIALOG_GLOBAL_SYM_LIB_TABLE_CONFIG fpDialog( NULL ); DIALOG_GLOBAL_SYM_LIB_TABLE_CONFIG fpDialog( nullptr );
fpDialog.ShowModal(); fpDialog.ShowModal();
} }
@ -271,7 +274,7 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits )
"Please edit this global symbol library table in Preferences menu." "Please edit this global symbol library table in Preferences menu."
); );
DisplayErrorMessage( NULL, msg, ioe.What() ); DisplayErrorMessage( nullptr, msg, ioe.What() );
} }
} }
@ -284,6 +287,7 @@ void IFACE::OnKifaceEnd()
end_common(); end_common();
} }
static void traverseSEXPR( SEXPR::SEXPR* aNode, static void traverseSEXPR( SEXPR::SEXPR* aNode,
const std::function<void( SEXPR::SEXPR* )>& aVisitor ) const std::function<void( SEXPR::SEXPR* )>& aVisitor )
{ {
@ -311,8 +315,10 @@ void IFACE::SaveFileAs( const wxString& aProjectBasePath, const wxString& aProje
destFile.SetPath( destPath ); destFile.SetPath( destPath );
if( ext == LegacySchematicFileExtension || ext == LegacySchematicFileExtension + BackupFileSuffix || if( ext == LegacySchematicFileExtension ||
ext == KiCadSchematicFileExtension || ext == KiCadSchematicFileExtension + BackupFileSuffix ) ext == LegacySchematicFileExtension + BackupFileSuffix ||
ext == KiCadSchematicFileExtension ||
ext == KiCadSchematicFileExtension + BackupFileSuffix )
{ {
if( destFile.GetName() == aProjectName ) if( destFile.GetName() == aProjectName )
destFile.SetName( aNewProjectName ); destFile.SetName( aNewProjectName );
@ -416,7 +422,8 @@ void IFACE::SaveFileAs( const wxString& aProjectBasePath, const wxString& aProje
wxString uri = row.GetFullURI(); wxString uri = row.GetFullURI();
uri.Replace( "/" + aProjectName + "-cache.lib", "/" + aNewProjectName + "-cache.lib" ); uri.Replace( "/" + aProjectName + "-cache.lib", "/" + aNewProjectName + "-cache.lib" );
uri.Replace( "/" + aProjectName + "-rescue.lib", "/" + aNewProjectName + "-rescue.lib" ); uri.Replace( "/" + aProjectName + "-rescue.lib", "/" + aNewProjectName +
"-rescue.lib" );
uri.Replace( "/" + aProjectName + ".lib", "/" + aNewProjectName + ".lib" ); uri.Replace( "/" + aProjectName + ".lib", "/" + aNewProjectName + ".lib" );
row.SetFullURI( uri ); row.SetFullURI( uri );

View File

@ -139,7 +139,7 @@ void SCH_EDIT_FRAME::SaveProjectSettings()
void SCH_EDIT_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg ) void SCH_EDIT_FRAME::LoadSettings( APP_SETTINGS_BASE* aCfg )
{ {
// For now, axes are forced off in eeschema even if turned on in config // For now, axes are forced off in Eeschema even if turned on in config
eeconfig()->m_Window.grid.axes_enabled = false; eeconfig()->m_Window.grid.axes_enabled = false;
SCH_BASE_FRAME::LoadSettings( eeconfig() ); SCH_BASE_FRAME::LoadSettings( eeconfig() );
@ -270,7 +270,7 @@ SYMBOL_LIB_TABLE* PROJECT::SchSymbolLibTable()
wxString msg; wxString msg;
msg.Printf( _( "Error loading the symbol library table '%s'." ), msg.Printf( _( "Error loading the symbol library table '%s'." ),
fn.GetFullPath() ); fn.GetFullPath() );
DisplayErrorMessage( NULL, msg, ioe.What() ); DisplayErrorMessage( nullptr, msg, ioe.What() );
} }
} }
} }

View File

@ -287,7 +287,7 @@ int ERC_TESTER::TestConflictingBusAliases()
SCH_SCREENS screens( m_schematic->Root() ); SCH_SCREENS screens( m_schematic->Root() );
std::vector< std::shared_ptr<BUS_ALIAS> > aliases; std::vector< std::shared_ptr<BUS_ALIAS> > aliases;
for( SCH_SCREEN* screen = screens.GetFirst(); screen != NULL; screen = screens.GetNext() ) for( SCH_SCREEN* screen = screens.GetFirst(); screen != nullptr; screen = screens.GetNext() )
{ {
std::unordered_set< std::shared_ptr<BUS_ALIAS> > screen_aliases = screen->GetBusAliases(); std::unordered_set< std::shared_ptr<BUS_ALIAS> > screen_aliases = screen->GetBusAliases();
@ -682,7 +682,7 @@ int ERC_TESTER::TestLibSymbolIssues()
SCH_SCREENS screens( m_schematic->Root() ); SCH_SCREENS screens( m_schematic->Root() );
for( SCH_SCREEN* screen = screens.GetFirst(); screen != NULL; screen = screens.GetNext() ) for( SCH_SCREEN* screen = screens.GetFirst(); screen != nullptr; screen = screens.GetNext() )
{ {
std::vector<SCH_MARKER*> markers; std::vector<SCH_MARKER*> markers;

View File

@ -189,6 +189,7 @@ void LIB_ARC::MirrorHorizontal( const wxPoint& aCenter )
std::swap( m_t1, m_t2 ); std::swap( m_t1, m_t2 );
m_t1 = 1800 - m_t1; m_t1 = 1800 - m_t1;
m_t2 = 1800 - m_t2; m_t2 = 1800 - m_t2;
if( m_t1 > 3600 || m_t2 > 3600 ) if( m_t1 > 3600 || m_t2 > 3600 )
{ {
m_t1 -= 3600; m_t1 -= 3600;
@ -201,6 +202,7 @@ void LIB_ARC::MirrorHorizontal( const wxPoint& aCenter )
} }
} }
void LIB_ARC::MirrorVertical( const wxPoint& aCenter ) void LIB_ARC::MirrorVertical( const wxPoint& aCenter )
{ {
m_Pos.y -= aCenter.y; m_Pos.y -= aCenter.y;
@ -216,6 +218,7 @@ void LIB_ARC::MirrorVertical( const wxPoint& aCenter )
std::swap( m_t1, m_t2 ); std::swap( m_t1, m_t2 );
m_t1 = - m_t1; m_t1 = - m_t1;
m_t2 = - m_t2; m_t2 = - m_t2;
if( m_t1 > 3600 || m_t2 > 3600 ) if( m_t1 > 3600 || m_t2 > 3600 )
{ {
m_t1 -= 3600; m_t1 -= 3600;
@ -228,6 +231,7 @@ void LIB_ARC::MirrorVertical( const wxPoint& aCenter )
} }
} }
void LIB_ARC::Rotate( const wxPoint& aCenter, bool aRotateCCW ) void LIB_ARC::Rotate( const wxPoint& aCenter, bool aRotateCCW )
{ {
int rot_angle = aRotateCCW ? -900 : 900; int rot_angle = aRotateCCW ? -900 : 900;
@ -236,6 +240,7 @@ void LIB_ARC::Rotate( const wxPoint& aCenter, bool aRotateCCW )
RotatePoint( &m_ArcEnd, aCenter, rot_angle ); RotatePoint( &m_ArcEnd, aCenter, rot_angle );
m_t1 -= rot_angle; m_t1 -= rot_angle;
m_t2 -= rot_angle; m_t2 -= rot_angle;
if( m_t1 > 3600 || m_t2 > 3600 ) if( m_t1 > 3600 || m_t2 > 3600 )
{ {
m_t1 -= 3600; m_t1 -= 3600;
@ -249,11 +254,10 @@ void LIB_ARC::Rotate( const wxPoint& aCenter, bool aRotateCCW )
} }
void LIB_ARC::Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, void LIB_ARC::Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ) const const TRANSFORM& aTransform ) const
{ {
wxASSERT( aPlotter != NULL ); wxASSERT( aPlotter != nullptr );
int t1 = m_t1; int t1 = m_t1;
int t2 = m_t2; int t2 = m_t2;
@ -541,7 +545,7 @@ void LIB_ARC::CalcRadiusAngles()
m_Radius = KiROUND( EuclideanNorm( centerStartVector ) ); m_Radius = KiROUND( EuclideanNorm( centerStartVector ) );
// Angles in eeschema are still integers // Angles in Eeschema are still integers
m_t1 = KiROUND( ArcTangente( centerStartVector.y, centerStartVector.x ) ); m_t1 = KiROUND( ArcTangente( centerStartVector.y, centerStartVector.x ) );
m_t2 = KiROUND( ArcTangente( centerEndVector.y, centerEndVector.x ) ); m_t2 = KiROUND( ArcTangente( centerEndVector.y, centerEndVector.x ) );
@ -550,18 +554,18 @@ void LIB_ARC::CalcRadiusAngles()
// Restrict angle to less than 180 to avoid PBS display mirror Trace because it is // Restrict angle to less than 180 to avoid PBS display mirror Trace because it is
// assumed that the arc is less than 180 deg to find orientation after rotate or mirror. // assumed that the arc is less than 180 deg to find orientation after rotate or mirror.
if( (m_t2 - m_t1) > 1800 ) if( ( m_t2 - m_t1 ) > 1800 )
m_t2 -= 3600; m_t2 -= 3600;
else if( (m_t2 - m_t1) <= -1800 ) else if( ( m_t2 - m_t1 ) <= -1800 )
m_t2 += 3600; m_t2 += 3600;
while( (m_t2 - m_t1) >= 1800 ) while( ( m_t2 - m_t1 ) >= 1800 )
{ {
m_t2--; m_t2--;
m_t1++; m_t1++;
} }
while( (m_t1 - m_t2) >= 1800 ) while( ( m_t1 - m_t2 ) >= 1800 )
{ {
m_t2++; m_t2++;
m_t1--; m_t1--;

View File

@ -1,7 +1,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2004-2020 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 2004-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -97,6 +97,7 @@ void LIB_BEZIER::MoveTo( const wxPoint& aPosition )
Offset( aPosition - m_PolyPoints[ 0 ] ); Offset( aPosition - m_PolyPoints[ 0 ] );
} }
const wxPoint LIB_BEZIER::GetOffset() const const wxPoint LIB_BEZIER::GetOffset() const
{ {
if ( !m_PolyPoints.size() ) if ( !m_PolyPoints.size() )
@ -105,6 +106,7 @@ const wxPoint LIB_BEZIER::GetOffset() const
return m_PolyPoints[0]; return m_PolyPoints[0];
} }
void LIB_BEZIER::MirrorHorizontal( const wxPoint& aCenter ) void LIB_BEZIER::MirrorHorizontal( const wxPoint& aCenter )
{ {
size_t i, imax = m_PolyPoints.size(); size_t i, imax = m_PolyPoints.size();
@ -126,6 +128,7 @@ void LIB_BEZIER::MirrorHorizontal( const wxPoint& aCenter )
} }
} }
void LIB_BEZIER::MirrorVertical( const wxPoint& aCenter ) void LIB_BEZIER::MirrorVertical( const wxPoint& aCenter )
{ {
size_t i, imax = m_PolyPoints.size(); size_t i, imax = m_PolyPoints.size();
@ -147,6 +150,7 @@ void LIB_BEZIER::MirrorVertical( const wxPoint& aCenter )
} }
} }
void LIB_BEZIER::Rotate( const wxPoint& aCenter, bool aRotateCCW ) void LIB_BEZIER::Rotate( const wxPoint& aCenter, bool aRotateCCW )
{ {
int rot_angle = aRotateCCW ? -900 : 900; int rot_angle = aRotateCCW ? -900 : 900;
@ -162,7 +166,7 @@ void LIB_BEZIER::Rotate( const wxPoint& aCenter, bool aRotateCCW )
void LIB_BEZIER::Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, void LIB_BEZIER::Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ) const const TRANSFORM& aTransform ) const
{ {
wxASSERT( aPlotter != NULL ); wxASSERT( aPlotter != nullptr );
static std::vector< wxPoint > cornerList; static std::vector< wxPoint > cornerList;
cornerList.clear(); cornerList.clear();

View File

@ -48,14 +48,14 @@ LIB_FIELD::LIB_FIELD( LIB_SYMBOL* aParent, int idfield ) :
LIB_FIELD::LIB_FIELD( int idfield ) : LIB_FIELD::LIB_FIELD( int idfield ) :
LIB_ITEM( LIB_FIELD_T, NULL ) LIB_ITEM( LIB_FIELD_T, nullptr )
{ {
Init( idfield ); Init( idfield );
} }
LIB_FIELD::LIB_FIELD( int aID, const wxString& aName ) : LIB_FIELD::LIB_FIELD( int aID, const wxString& aName ) :
LIB_ITEM( LIB_FIELD_T, NULL ) LIB_ITEM( LIB_FIELD_T, nullptr )
{ {
Init( aID ); Init( aID );
m_name = aName; m_name = aName;
@ -402,9 +402,7 @@ void LIB_FIELD::SetName( const wxString& aName )
wxString LIB_FIELD::GetSelectMenuText( EDA_UNITS aUnits ) const wxString LIB_FIELD::GetSelectMenuText( EDA_UNITS aUnits ) const
{ {
return wxString::Format( "%s '%s'", return wxString::Format( "%s '%s'", GetName(), ShortenedShownText() );
GetName(),
ShortenedShownText() );
} }

View File

@ -121,7 +121,7 @@ void LIB_POLYLINE::Rotate( const wxPoint& aCenter, bool aRotateCCW )
void LIB_POLYLINE::Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, void LIB_POLYLINE::Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ) const const TRANSFORM& aTransform ) const
{ {
wxASSERT( aPlotter != NULL ); wxASSERT( aPlotter != nullptr );
static std::vector< wxPoint > cornerList; static std::vector< wxPoint > cornerList;
cornerList.clear(); cornerList.clear();
@ -348,8 +348,7 @@ void LIB_POLYLINE::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, MSG_PANEL_ITEMS& aLi
wxString LIB_POLYLINE::GetSelectMenuText( EDA_UNITS aUnits ) const wxString LIB_POLYLINE::GetSelectMenuText( EDA_UNITS aUnits ) const
{ {
return wxString::Format( _( "Polyline, %d points" ), return wxString::Format( _( "Polyline, %d points" ), int( m_PolyPoints.size() ) );
int( m_PolyPoints.size() ) );
} }

View File

@ -124,7 +124,7 @@ void LIB_RECTANGLE::Rotate( const wxPoint& aCenter, bool aRotateCCW )
void LIB_RECTANGLE::Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill, void LIB_RECTANGLE::Plot( PLOTTER* aPlotter, const wxPoint& aOffset, bool aFill,
const TRANSFORM& aTransform ) const const TRANSFORM& aTransform ) const
{ {
wxASSERT( aPlotter != NULL ); wxASSERT( aPlotter != nullptr );
wxPoint pos = aTransform.TransformCoordinate( m_Pos ) + aOffset; wxPoint pos = aTransform.TransformCoordinate( m_Pos ) + aOffset;
wxPoint end = aTransform.TransformCoordinate( m_End ) + aOffset; wxPoint end = aTransform.TransformCoordinate( m_End ) + aOffset;

View File

@ -530,7 +530,7 @@ void LIB_SYMBOL::Print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset
} }
else if( drawItem.Type() == LIB_FIELD_T ) else if( drawItem.Type() == LIB_FIELD_T )
{ {
drawItem.Print( aSettings, aOffset, (void*) NULL, aOpts.transform ); drawItem.Print( aSettings, aOffset, (void*) nullptr, aOpts.transform );
} }
else else
{ {
@ -544,7 +544,7 @@ void LIB_SYMBOL::Print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffset
void LIB_SYMBOL::Plot( PLOTTER* aPlotter, int aUnit, int aConvert, const wxPoint& aOffset, void LIB_SYMBOL::Plot( PLOTTER* aPlotter, int aUnit, int aConvert, const wxPoint& aOffset,
const TRANSFORM& aTransform ) const const TRANSFORM& aTransform ) const
{ {
wxASSERT( aPlotter != NULL ); wxASSERT( aPlotter != nullptr );
aPlotter->SetColor( aPlotter->RenderSettings()->GetLayerColor( LAYER_DEVICE ) ); aPlotter->SetColor( aPlotter->RenderSettings()->GetLayerColor( LAYER_DEVICE ) );
bool fill = aPlotter->GetColorMode(); bool fill = aPlotter->GetColorMode();
@ -590,7 +590,7 @@ void LIB_SYMBOL::Plot( PLOTTER* aPlotter, int aUnit, int aConvert, const wxPoint
void LIB_SYMBOL::PlotLibFields( PLOTTER* aPlotter, int aUnit, int aConvert, void LIB_SYMBOL::PlotLibFields( PLOTTER* aPlotter, int aUnit, int aConvert,
const wxPoint& aOffset, const TRANSFORM& aTransform ) const wxPoint& aOffset, const TRANSFORM& aTransform )
{ {
wxASSERT( aPlotter != NULL ); wxASSERT( aPlotter != nullptr );
aPlotter->SetColor( aPlotter->RenderSettings()->GetLayerColor( LAYER_FIELDS ) ); aPlotter->SetColor( aPlotter->RenderSettings()->GetLayerColor( LAYER_FIELDS ) );
bool fill = aPlotter->GetColorMode(); bool fill = aPlotter->GetColorMode();
@ -626,7 +626,7 @@ void LIB_SYMBOL::PlotLibFields( PLOTTER* aPlotter, int aUnit, int aConvert,
void LIB_SYMBOL::RemoveDrawItem( LIB_ITEM* aItem ) void LIB_SYMBOL::RemoveDrawItem( LIB_ITEM* aItem )
{ {
wxASSERT( aItem != NULL ); wxASSERT( aItem != nullptr );
// none of the MANDATORY_FIELDS may be removed in RAM, but they may be // none of the MANDATORY_FIELDS may be removed in RAM, but they may be
// omitted when saving to disk. // omitted when saving to disk.
@ -663,7 +663,7 @@ void LIB_SYMBOL::AddDrawItem( LIB_ITEM* aItem, bool aSort )
LIB_ITEM* LIB_SYMBOL::GetNextDrawItem( const LIB_ITEM* aItem, KICAD_T aType ) LIB_ITEM* LIB_SYMBOL::GetNextDrawItem( const LIB_ITEM* aItem, KICAD_T aType )
{ {
if( aItem == NULL ) if( aItem == nullptr )
{ {
LIB_ITEMS_CONTAINER::ITERATOR it1 = m_drawings.begin( aType ); LIB_ITEMS_CONTAINER::ITERATOR it1 = m_drawings.begin( aType );
@ -686,7 +686,7 @@ LIB_ITEM* LIB_SYMBOL::GetNextDrawItem( const LIB_ITEM* aItem, KICAD_T aType )
return &( *it ); return &( *it );
} }
return NULL; return nullptr;
} }
@ -731,7 +731,7 @@ LIB_PIN* LIB_SYMBOL::GetPin( const wxString& aNumber, int aUnit, int aConvert )
return pinList[i]; return pinList[i];
} }
return NULL; return nullptr;
} }
@ -946,7 +946,7 @@ LIB_FIELD* LIB_SYMBOL::GetFieldById( int aId ) const
return field; return field;
} }
return NULL; return nullptr;
} }
@ -958,7 +958,7 @@ LIB_FIELD* LIB_SYMBOL::FindField( const wxString& aFieldName )
return static_cast<LIB_FIELD*>( &item ); return static_cast<LIB_FIELD*>( &item );
} }
return NULL; return nullptr;
} }
@ -970,14 +970,14 @@ const LIB_FIELD* LIB_SYMBOL::FindField( const wxString& aFieldName ) const
return static_cast<const LIB_FIELD*>( &item ); return static_cast<const LIB_FIELD*>( &item );
} }
return NULL; return nullptr;
} }
LIB_FIELD& LIB_SYMBOL::GetValueField() LIB_FIELD& LIB_SYMBOL::GetValueField()
{ {
LIB_FIELD* field = GetFieldById( VALUE_FIELD ); LIB_FIELD* field = GetFieldById( VALUE_FIELD );
wxASSERT( field != NULL ); wxASSERT( field != nullptr );
return *field; return *field;
} }
@ -985,7 +985,7 @@ LIB_FIELD& LIB_SYMBOL::GetValueField()
LIB_FIELD& LIB_SYMBOL::GetReferenceField() LIB_FIELD& LIB_SYMBOL::GetReferenceField()
{ {
LIB_FIELD* field = GetFieldById( REFERENCE_FIELD ); LIB_FIELD* field = GetFieldById( REFERENCE_FIELD );
wxASSERT( field != NULL ); wxASSERT( field != nullptr );
return *field; return *field;
} }
@ -993,7 +993,7 @@ LIB_FIELD& LIB_SYMBOL::GetReferenceField()
LIB_FIELD& LIB_SYMBOL::GetFootprintField() LIB_FIELD& LIB_SYMBOL::GetFootprintField()
{ {
LIB_FIELD* field = GetFieldById( FOOTPRINT_FIELD ); LIB_FIELD* field = GetFieldById( FOOTPRINT_FIELD );
wxASSERT( field != NULL ); wxASSERT( field != nullptr );
return *field; return *field;
} }
@ -1001,7 +1001,7 @@ LIB_FIELD& LIB_SYMBOL::GetFootprintField()
LIB_FIELD& LIB_SYMBOL::GetDatasheetField() LIB_FIELD& LIB_SYMBOL::GetDatasheetField()
{ {
LIB_FIELD* field = GetFieldById( DATASHEET_FIELD ); LIB_FIELD* field = GetFieldById( DATASHEET_FIELD );
wxASSERT( field != NULL ); wxASSERT( field != nullptr );
return *field; return *field;
} }
@ -1070,7 +1070,7 @@ LIB_ITEM* LIB_SYMBOL::LocateDrawItem( int aUnit, int aConvert,
return &item; return &item;
} }
return NULL; return nullptr;
} }

View File

@ -99,7 +99,7 @@ public:
LIB_SYMBOL( const wxString& aName, LIB_SYMBOL* aParent = nullptr, LIB_SYMBOL( const wxString& aName, LIB_SYMBOL* aParent = nullptr,
SYMBOL_LIB* aLibrary = nullptr ); SYMBOL_LIB* aLibrary = nullptr );
LIB_SYMBOL( const LIB_SYMBOL& aSymbol, SYMBOL_LIB* aLibrary = NULL ); LIB_SYMBOL( const LIB_SYMBOL& aSymbol, SYMBOL_LIB* aLibrary = nullptr );
virtual ~LIB_SYMBOL(); virtual ~LIB_SYMBOL();
@ -354,7 +354,7 @@ public:
* if TYPE_NOT_INIT search for all items types * if TYPE_NOT_INIT search for all items types
* @return - The next drawing object in the list if found, otherwise NULL. * @return - The next drawing object in the list if found, otherwise NULL.
*/ */
LIB_ITEM* GetNextDrawItem( const LIB_ITEM* aItem = NULL, KICAD_T aType = TYPE_NOT_INIT ); LIB_ITEM* GetNextDrawItem( const LIB_ITEM* aItem = nullptr, KICAD_T aType = TYPE_NOT_INIT );
size_t GetPinCount() const { return m_drawings.size( LIB_PIN_T ); } size_t GetPinCount() const { return m_drawings.size( LIB_PIN_T ); }
@ -369,7 +369,7 @@ public:
* first pin in the draw object list. * first pin in the draw object list.
* @return - The next pin object in the list if found, otherwise NULL. * @return - The next pin object in the list if found, otherwise NULL.
*/ */
LIB_PIN* GetNextPin( LIB_PIN* aItem = NULL ) LIB_PIN* GetNextPin( LIB_PIN* aItem = nullptr )
{ {
return (LIB_PIN*) GetNextDrawItem( (LIB_ITEM*) aItem, LIB_PIN_T ); return (LIB_PIN*) GetNextDrawItem( (LIB_ITEM*) aItem, LIB_PIN_T );
} }

View File

@ -265,7 +265,7 @@ void LIB_TEXT::Rotate( const wxPoint& center, bool aRotateCCW )
void LIB_TEXT::Plot( PLOTTER* plotter, const wxPoint& offset, bool fill, void LIB_TEXT::Plot( PLOTTER* plotter, const wxPoint& offset, bool fill,
const TRANSFORM& aTransform ) const const TRANSFORM& aTransform ) const
{ {
wxASSERT( plotter != NULL ); wxASSERT( plotter != nullptr );
EDA_RECT bBox = GetBoundingBox(); EDA_RECT bBox = GetBoundingBox();
// convert coordinates from draw Y axis to symbol_editor Y axis // convert coordinates from draw Y axis to symbol_editor Y axis

View File

@ -41,13 +41,13 @@ bool NETLIST_EXPORTER_CADSTAR::WriteNetlist( const wxString& aOutFileName,
{ {
(void)aNetlistOptions; //unused (void)aNetlistOptions; //unused
int ret = 0; int ret = 0;
FILE* f = NULL; FILE* f = nullptr;
if( ( f = wxFopen( aOutFileName, wxT( "wt" ) ) ) == NULL ) if( ( f = wxFopen( aOutFileName, wxT( "wt" ) ) ) == nullptr )
{ {
wxString msg; wxString msg;
msg.Printf( _( "Failed to create file '%s'." ), aOutFileName ); msg.Printf( _( "Failed to create file '%s'." ), aOutFileName );
DisplayError( NULL, msg ); DisplayError( nullptr, msg );
return false; return false;
} }

View File

@ -3,7 +3,7 @@
* *
* Copyright (C) 1992-2013 jp.charras at wanadoo.fr * Copyright (C) 1992-2013 jp.charras at wanadoo.fr
* Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com> * Copyright (C) 2013 SoftPLC Corporation, Dick Hollenbeck <dick@softplc.com>
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.TXT for contributors. * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.TXT for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -31,10 +31,7 @@
#include <connection_graph.h> #include <connection_graph.h>
#include "netlist_exporter_kicad.h" #include "netlist_exporter_kicad.h"
/**
* Generate the KiCad netlist format supported by Pcbnew. It is basically the XML netlist
* just formatted slightly different.
*/
bool NETLIST_EXPORTER_KICAD::WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions ) bool NETLIST_EXPORTER_KICAD::WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions )
{ {
try try
@ -45,7 +42,7 @@ bool NETLIST_EXPORTER_KICAD::WriteNetlist( const wxString& aOutFileName, unsigne
catch( const IO_ERROR& ioe ) catch( const IO_ERROR& ioe )
{ {
DisplayError( NULL, ioe.What() ); DisplayError( nullptr, ioe.What() );
return false; return false;
} }

View File

@ -45,6 +45,9 @@ public:
/** /**
* Write netlist to \a aOutFileName. * Write netlist to \a aOutFileName.
*
* Generate the KiCad netlist format supported by Pcbnew. It is basically the XML netlist
* just formatted slightly different.
*/ */
bool WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions ) override; bool WriteNetlist( const wxString& aOutFileName, unsigned aNetlistOptions ) override;

View File

@ -40,18 +40,18 @@ bool NETLIST_EXPORTER_ORCADPCB2::WriteNetlist( const wxString& aOutFileName,
unsigned aNetlistOptions ) unsigned aNetlistOptions )
{ {
(void)aNetlistOptions; //unused (void)aNetlistOptions; //unused
FILE* f = NULL; FILE* f = nullptr;
wxString field; wxString field;
wxString footprint; wxString footprint;
int ret = 0; // zero now, OR in the sign bit on error int ret = 0; // zero now, OR in the sign bit on error
wxString netName; wxString netName;
if( ( f = wxFopen( aOutFileName, wxT( "wt" ) ) ) == NULL ) if( ( f = wxFopen( aOutFileName, wxT( "wt" ) ) ) == nullptr )
{ {
wxString msg; wxString msg;
msg.Printf( _( "Failed to create file '%s'." ), aOutFileName ); msg.Printf( _( "Failed to create file '%s'." ), aOutFileName );
DisplayError( NULL, msg ); DisplayError( nullptr, msg );
return false; return false;
} }

View File

@ -88,7 +88,7 @@ static void getSymbols( SCHEMATIC* aSchematic, std::vector<SCH_SYMBOL*>& aSymbol
*/ */
static LIB_SYMBOL* findSymbol( const wxString& aName, SYMBOL_LIBS* aLibs, bool aCached ) static LIB_SYMBOL* findSymbol( const wxString& aName, SYMBOL_LIBS* aLibs, bool aCached )
{ {
LIB_SYMBOL *symbol = NULL; LIB_SYMBOL *symbol = nullptr;
wxString new_name = LIB_ID::FixIllegalChars( aName, false ); wxString new_name = LIB_ID::FixIllegalChars( aName, false );
for( SYMBOL_LIB& each_lib : *aLibs ) for( SYMBOL_LIB& each_lib : *aLibs )
@ -233,8 +233,8 @@ RESCUE_CACHE_CANDIDATE::RESCUE_CACHE_CANDIDATE( const wxString& aRequestedName,
RESCUE_CACHE_CANDIDATE::RESCUE_CACHE_CANDIDATE() RESCUE_CACHE_CANDIDATE::RESCUE_CACHE_CANDIDATE()
{ {
m_cache_candidate = NULL; m_cache_candidate = nullptr;
m_lib_candidate = NULL; m_lib_candidate = nullptr;
} }
@ -359,8 +359,8 @@ RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::RESCUE_SYMBOL_LIB_TABLE_CANDIDATE(
RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::RESCUE_SYMBOL_LIB_TABLE_CANDIDATE() RESCUE_SYMBOL_LIB_TABLE_CANDIDATE::RESCUE_SYMBOL_LIB_TABLE_CANDIDATE()
{ {
m_cache_candidate = NULL; m_cache_candidate = nullptr;
m_lib_candidate = NULL; m_lib_candidate = nullptr;
} }
@ -729,7 +729,7 @@ bool LEGACY_RESCUER::WriteRescueLibrary( wxWindow *aParent )
boost::ptr_vector<SYMBOL_LIB> libsSave; boost::ptr_vector<SYMBOL_LIB> libsSave;
libsSave.transfer( libsSave.end(), libs->begin(), libs->end(), *libs ); libsSave.transfer( libsSave.end(), libs->begin(), libs->end(), *libs );
m_prj->SetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS, NULL ); m_prj->SetElem( PROJECT::ELEM_SCH_SYMBOL_LIBS, nullptr );
libs = new SYMBOL_LIBS(); libs = new SYMBOL_LIBS();
@ -843,7 +843,7 @@ bool SYMBOL_LIB_TABLE_RESCUER::WriteRescueLibrary( wxWindow *aParent )
} }
// Relaod the symbol library table. // Relaod the symbol library table.
m_prj->SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, NULL ); m_prj->SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, nullptr );
// This can only happen if the symbol library table file was corrupted on write. // This can only happen if the symbol library table file was corrupted on write.
if( !m_prj->SchSymbolLibTable() ) if( !m_prj->SchSymbolLibTable() )

View File

@ -82,7 +82,7 @@ public:
* Get the part that can be loaded from the project cache, if possible, or * Get the part that can be loaded from the project cache, if possible, or
* else NULL. * else NULL.
*/ */
virtual LIB_SYMBOL* GetCacheCandidate() const { return NULL; } virtual LIB_SYMBOL* GetCacheCandidate() const { return nullptr; }
/** /**
* Get the part the would be loaded from the libraries, if possible, or else * Get the part the would be loaded from the libraries, if possible, or else
@ -138,7 +138,7 @@ public:
RESCUE_CASE_CANDIDATE( const wxString& aRequestedName, const wxString& aNewName, RESCUE_CASE_CANDIDATE( const wxString& aRequestedName, const wxString& aNewName,
LIB_SYMBOL* aLibCandidate, int aUnit = 0, int aConvert = 0 ); LIB_SYMBOL* aLibCandidate, int aUnit = 0, int aConvert = 0 );
RESCUE_CASE_CANDIDATE() { m_lib_candidate = NULL; } RESCUE_CASE_CANDIDATE() { m_lib_candidate = nullptr; }
virtual wxString GetActionDescription() const override; virtual wxString GetActionDescription() const override;

View File

@ -195,7 +195,7 @@ void SCH_BASE_FRAME::UpdateStatusBar()
LIB_SYMBOL* SCH_BASE_FRAME::GetLibSymbol( const LIB_ID& aLibId, bool aUseCacheLib, LIB_SYMBOL* SCH_BASE_FRAME::GetLibSymbol( const LIB_ID& aLibId, bool aUseCacheLib,
bool aShowErrorMsg ) bool aShowErrorMsg )
{ {
SYMBOL_LIB* cache = ( aUseCacheLib ) ? Prj().SchLibs()->GetCacheLibrary() : NULL; SYMBOL_LIB* cache = ( aUseCacheLib ) ? Prj().SchLibs()->GetCacheLibrary() : nullptr;
return SchGetLibSymbol( aLibId, Prj().SchSymbolLibTable(), cache, this, aShowErrorMsg ); return SchGetLibSymbol( aLibId, Prj().SchSymbolLibTable(), cache, this, aShowErrorMsg );
} }

View File

@ -73,7 +73,7 @@ class SYMBOL_EDITOR_SETTINGS;
* @return The symbol found in the library or NULL if the symbol was not found. * @return The symbol found in the library or NULL if the symbol was not found.
*/ */
LIB_SYMBOL* SchGetLibSymbol( const LIB_ID& aLibId, SYMBOL_LIB_TABLE* aLibTable, LIB_SYMBOL* SchGetLibSymbol( const LIB_ID& aLibId, SYMBOL_LIB_TABLE* aLibTable,
SYMBOL_LIB* aCacheLib = NULL, wxWindow* aParent = NULL, SYMBOL_LIB* aCacheLib = nullptr, wxWindow* aParent = nullptr,
bool aShowErrorMsg = false ); bool aShowErrorMsg = false );
/** /**

View File

@ -41,7 +41,7 @@
SCH_BITMAP::SCH_BITMAP( const wxPoint& pos ) : SCH_BITMAP::SCH_BITMAP( const wxPoint& pos ) :
SCH_ITEM( NULL, SCH_BITMAP_T ) SCH_ITEM( nullptr, SCH_BITMAP_T )
{ {
m_pos = pos; m_pos = pos;
m_layer = LAYER_NOTES; // used only to draw/plot a rectangle, m_layer = LAYER_NOTES; // used only to draw/plot a rectangle,
@ -95,8 +95,8 @@ EDA_ITEM* SCH_BITMAP::Clone() const
void SCH_BITMAP::SwapData( SCH_ITEM* aItem ) void SCH_BITMAP::SwapData( SCH_ITEM* aItem )
{ {
wxCHECK_RET( aItem->Type() == SCH_BITMAP_T, wxCHECK_RET( aItem->Type() == SCH_BITMAP_T,
wxString::Format( wxT( "SCH_BITMAP object cannot swap data with %s object." ), wxString::Format( wxT( "SCH_BITMAP object cannot swap data with %s object." ),
aItem->GetClass() ) ); aItem->GetClass() ) );
SCH_BITMAP* item = (SCH_BITMAP*) aItem; SCH_BITMAP* item = (SCH_BITMAP*) aItem;
std::swap( m_pos, item->m_pos ); std::swap( m_pos, item->m_pos );

View File

@ -53,7 +53,7 @@ public:
BITMAP_BASE* GetImage() const BITMAP_BASE* GetImage() const
{ {
wxCHECK_MSG( m_image != NULL, NULL, "Invalid SCH_BITMAP init, m_image is NULL." ); wxCHECK_MSG( m_image != nullptr, nullptr, "Invalid SCH_BITMAP init, m_image is NULL." );
return m_image; return m_image;
} }

View File

@ -39,7 +39,7 @@
SCH_BUS_ENTRY_BASE::SCH_BUS_ENTRY_BASE( KICAD_T aType, const wxPoint& pos, bool aFlipY ) : SCH_BUS_ENTRY_BASE::SCH_BUS_ENTRY_BASE( KICAD_T aType, const wxPoint& pos, bool aFlipY ) :
SCH_ITEM( NULL, aType ) SCH_ITEM( nullptr, aType )
{ {
m_pos = pos; m_pos = pos;
m_size.x = Mils2iu( DEFAULT_SCH_ENTRY_SIZE ); m_size.x = Mils2iu( DEFAULT_SCH_ENTRY_SIZE );

View File

@ -95,8 +95,6 @@ static void add_search_paths( SEARCH_STACK* aDst, const SEARCH_STACK& aSrc, int
} }
//-----<SCH "data on demand" functions>-------------------------------------------
SEARCH_STACK* PROJECT::SchSearchS() SEARCH_STACK* PROJECT::SchSearchS()
{ {
SEARCH_STACK* ss = (SEARCH_STACK*) GetElem( PROJECT::ELEM_SCH_SEARCH_STACK ); SEARCH_STACK* ss = (SEARCH_STACK*) GetElem( PROJECT::ELEM_SCH_SEARCH_STACK );
@ -190,8 +188,6 @@ SYMBOL_LIBS* PROJECT::SchLibs()
return libs; return libs;
} }
//-----</SCH "data on demand" functions>------------------------------------------
BEGIN_EVENT_TABLE( SCH_EDIT_FRAME, EDA_DRAW_FRAME ) BEGIN_EVENT_TABLE( SCH_EDIT_FRAME, EDA_DRAW_FRAME )
EVT_SOCKET( ID_EDA_SOCKET_EVENT_SERV, EDA_DRAW_FRAME::OnSockRequestServer ) EVT_SOCKET( ID_EDA_SOCKET_EVENT_SERV, EDA_DRAW_FRAME::OnSockRequestServer )
@ -326,7 +322,7 @@ SCH_EDIT_FRAME::~SCH_EDIT_FRAME()
delete m_item_to_repeat; // we own the cloned object, see this->SaveCopyForRepeatItem() delete m_item_to_repeat; // we own the cloned object, see this->SaveCopyForRepeatItem()
SetScreen( NULL ); SetScreen( nullptr );
delete m_schematic; delete m_schematic;
m_schematic = nullptr; m_schematic = nullptr;
@ -393,7 +389,8 @@ void SCH_EDIT_FRAME::setupUIConditions()
mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) ); mgr->SetConditions( ACTIONS::toggleGrid, CHECK( cond.GridVisible() ) );
mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) ); mgr->SetConditions( ACTIONS::toggleCursorStyle, CHECK( cond.FullscreenCursor() ) );
mgr->SetConditions( ACTIONS::millimetersUnits, CHECK( cond.Units( EDA_UNITS::MILLIMETRES ) ) ); mgr->SetConditions( ACTIONS::millimetersUnits,
CHECK( cond.Units( EDA_UNITS::MILLIMETRES ) ) );
mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCHES ) ) ); mgr->SetConditions( ACTIONS::inchesUnits, CHECK( cond.Units( EDA_UNITS::INCHES ) ) );
mgr->SetConditions( ACTIONS::milsUnits, CHECK( cond.Units( EDA_UNITS::MILS ) ) ); mgr->SetConditions( ACTIONS::milsUnits, CHECK( cond.Units( EDA_UNITS::MILS ) ) );
@ -410,11 +407,14 @@ void SCH_EDIT_FRAME::setupUIConditions()
mgr->SetConditions( EE_ACTIONS::mirrorH, ENABLE( hasElements ) ); mgr->SetConditions( EE_ACTIONS::mirrorH, ENABLE( hasElements ) );
mgr->SetConditions( EE_ACTIONS::mirrorV, ENABLE( hasElements ) ); mgr->SetConditions( EE_ACTIONS::mirrorV, ENABLE( hasElements ) );
mgr->SetConditions( ACTIONS::zoomTool, CHECK( cond.CurrentTool( ACTIONS::zoomTool ) ) ); mgr->SetConditions( ACTIONS::zoomTool,
mgr->SetConditions( ACTIONS::selectionTool, CHECK( cond.CurrentTool( ACTIONS::selectionTool ) ) ); CHECK( cond.CurrentTool( ACTIONS::zoomTool ) ) );
mgr->SetConditions( ACTIONS::selectionTool,
CHECK( cond.CurrentTool( ACTIONS::selectionTool ) ) );
if( SCRIPTING::IsWxAvailable() ) if( SCRIPTING::IsWxAvailable() )
mgr->SetConditions( EE_ACTIONS::showPythonConsole, CHECK( cond.ScriptingConsoleVisible() ) ); mgr->SetConditions( EE_ACTIONS::showPythonConsole,
CHECK( cond.ScriptingConsoleVisible() ) );
auto showHiddenPinsCond = auto showHiddenPinsCond =
[this] ( const SELECTION& ) [this] ( const SELECTION& )
@ -486,6 +486,7 @@ void SCH_EDIT_FRAME::SaveCopyForRepeatItem( const SCH_ITEM* aItem )
delete m_item_to_repeat; delete m_item_to_repeat;
m_item_to_repeat = (SCH_ITEM*) aItem->Clone(); m_item_to_repeat = (SCH_ITEM*) aItem->Clone();
// Clone() preserves the flags, we want 'em cleared. // Clone() preserves the flags, we want 'em cleared.
m_item_to_repeat->ClearFlags(); m_item_to_repeat->ClearFlags();
} }
@ -518,7 +519,7 @@ void SCH_EDIT_FRAME::SetSheetNumberAndCount()
sheet_number++; // Not found, increment before this current path sheet_number++; // Not found, increment before this current path
} }
for( screen = s_list.GetFirst(); screen != NULL; screen = s_list.GetNext() ) for( screen = s_list.GetFirst(); screen != nullptr; screen = s_list.GetNext() )
screen->SetPageCount( sheet_count ); screen->SetPageCount( sheet_count );
GetCurrentSheet().SetVirtualPageNumber( sheet_number ); GetCurrentSheet().SetVirtualPageNumber( sheet_number );
@ -569,7 +570,7 @@ void SCH_EDIT_FRAME::CreateScreens()
m_schematic->Root().AddInstance( rootSheetPath.Path() ); m_schematic->Root().AddInstance( rootSheetPath.Path() );
m_schematic->Root().SetPageNumber( rootSheetPath, wxT( "1" ) ); m_schematic->Root().SetPageNumber( rootSheetPath, wxT( "1" ) );
if( GetScreen() == NULL ) if( GetScreen() == nullptr )
{ {
SCH_SCREEN* screen = new SCH_SCREEN( m_schematic ); SCH_SCREEN* screen = new SCH_SCREEN( m_schematic );
SetScreen( screen ); SetScreen( screen );
@ -695,7 +696,7 @@ void SCH_EDIT_FRAME::doCloseWindow()
SCH_SCREENS screens( Schematic().Root() ); SCH_SCREENS screens( Schematic().Root() );
wxFileName fn; wxFileName fn;
for( SCH_SCREEN* screen = screens.GetFirst(); screen != NULL; screen = screens.GetNext() ) for( SCH_SCREEN* screen = screens.GetFirst(); screen != nullptr; screen = screens.GetNext() )
{ {
fn = Prj().AbsolutePath( screen->GetFileName() ); fn = Prj().AbsolutePath( screen->GetFileName() );
@ -1165,7 +1166,7 @@ static void inheritNetclass( const SCH_SHEET_PATH& aSheetPath, SCH_TEXT* aItem )
void SCH_EDIT_FRAME::AddItemToScreenAndUndoList( SCH_SCREEN* aScreen, SCH_ITEM* aItem, void SCH_EDIT_FRAME::AddItemToScreenAndUndoList( SCH_SCREEN* aScreen, SCH_ITEM* aItem,
bool aUndoAppend ) bool aUndoAppend )
{ {
wxCHECK_RET( aItem != NULL, wxT( "Cannot add null item to list." ) ); wxCHECK_RET( aItem != nullptr, wxT( "Cannot add null item to list." ) );
SCH_SHEET* parentSheet = nullptr; SCH_SHEET* parentSheet = nullptr;
SCH_SYMBOL* parentSymbol = nullptr; SCH_SYMBOL* parentSymbol = nullptr;
@ -1356,7 +1357,7 @@ void SCH_EDIT_FRAME::RecomputeIntersheetRefs()
std::vector<wxString> pageNumbers; std::vector<wxString> pageNumbers;
/* Iterate over screens */ /* Iterate over screens */
for( SCH_SCREEN* screen = screens.GetFirst(); screen != NULL; screen = screens.GetNext() ) for( SCH_SCREEN* screen = screens.GetFirst(); screen != nullptr; screen = screens.GetNext() )
{ {
pageNumbers.clear(); pageNumbers.clear();

View File

@ -253,7 +253,7 @@ void SCH_FIELD::ImportValues( const LIB_FIELD& aSource )
void SCH_FIELD::SwapData( SCH_ITEM* aItem ) void SCH_FIELD::SwapData( SCH_ITEM* aItem )
{ {
wxCHECK_RET( (aItem != NULL) && (aItem->Type() == SCH_FIELD_T), wxCHECK_RET( ( aItem != nullptr ) && ( aItem->Type() == SCH_FIELD_T ),
wxT( "Cannot swap field data with invalid item." ) ); wxT( "Cannot swap field data with invalid item." ) );
SCH_FIELD* item = (SCH_FIELD*) aItem; SCH_FIELD* item = (SCH_FIELD*) aItem;
@ -474,9 +474,7 @@ void SCH_FIELD::Rotate( const wxPoint& aCenter )
wxString SCH_FIELD::GetSelectMenuText( EDA_UNITS aUnits ) const wxString SCH_FIELD::GetSelectMenuText( EDA_UNITS aUnits ) const
{ {
return wxString::Format( "%s '%s'", return wxString::Format( "%s '%s'", GetName(), ShortenedShownText() );
GetName(),
ShortenedShownText() );
} }

View File

@ -175,7 +175,7 @@ public:
bool Matches( const wxFindReplaceData& aSearchData, void* aAuxData ) const override; bool Matches( const wxFindReplaceData& aSearchData, void* aAuxData ) const override;
bool Replace( const wxFindReplaceData& aSearchData, void* aAuxData = NULL ) override; bool Replace( const wxFindReplaceData& aSearchData, void* aAuxData = nullptr ) override;
wxString GetSelectMenuText( EDA_UNITS aUnits ) const override; wxString GetSelectMenuText( EDA_UNITS aUnits ) const override;

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2016 CERN * Copyright (C) 2016 CERN
* Copyright (C) 2016-2020 KiCad Developers, see change_log.txt for contributors. * Copyright (C) 2016-2021 KiCad Developers, see change_log.txt for contributors.
* *
* @author Wayne Stambaugh <stambaughw@gmail.com> * @author Wayne Stambaugh <stambaughw@gmail.com>
* *
@ -123,7 +123,7 @@ const wxString SCH_IO_MGR::GetFileExtension( SCH_FILE_T aFileType )
wxString ext = wxEmptyString; wxString ext = wxEmptyString;
SCH_PLUGIN* plugin = FindPlugin( aFileType ); SCH_PLUGIN* plugin = FindPlugin( aFileType );
if( plugin != NULL ) if( plugin != nullptr )
{ {
ext = plugin->GetFileExtension(); ext = plugin->GetFileExtension();
ReleasePlugin( plugin ); ReleasePlugin( plugin );
@ -138,7 +138,7 @@ const wxString SCH_IO_MGR::GetLibraryFileExtension( SCH_FILE_T aFileType )
wxString ext = wxEmptyString; wxString ext = wxEmptyString;
SCH_PLUGIN* plugin = FindPlugin( aFileType ); SCH_PLUGIN* plugin = FindPlugin( aFileType );
if( plugin != NULL ) if( plugin != nullptr )
{ {
ext = plugin->GetLibraryFileExtension(); ext = plugin->GetLibraryFileExtension();
ReleasePlugin( plugin ); ReleasePlugin( plugin );

View File

@ -40,7 +40,7 @@
#include <settings/color_settings.h> #include <settings/color_settings.h>
SCH_JUNCTION::SCH_JUNCTION( const wxPoint& aPosition, int aDiameter, SCH_LAYER_ID aLayer ) : SCH_JUNCTION::SCH_JUNCTION( const wxPoint& aPosition, int aDiameter, SCH_LAYER_ID aLayer ) :
SCH_ITEM( NULL, SCH_JUNCTION_T ) SCH_ITEM( nullptr, SCH_JUNCTION_T )
{ {
m_pos = aPosition; m_pos = aPosition;
m_color = COLOR4D::UNSPECIFIED; m_color = COLOR4D::UNSPECIFIED;
@ -57,7 +57,7 @@ EDA_ITEM* SCH_JUNCTION::Clone() const
void SCH_JUNCTION::SwapData( SCH_ITEM* aItem ) void SCH_JUNCTION::SwapData( SCH_ITEM* aItem )
{ {
wxCHECK_RET( (aItem != NULL) && (aItem->Type() == SCH_JUNCTION_T), wxCHECK_RET( ( aItem != nullptr ) && ( aItem->Type() == SCH_JUNCTION_T ),
wxT( "Cannot swap junction data with invalid item." ) ); wxT( "Cannot swap junction data with invalid item." ) );
SCH_JUNCTION* item = (SCH_JUNCTION*) aItem; SCH_JUNCTION* item = (SCH_JUNCTION*) aItem;
@ -119,7 +119,8 @@ void SCH_JUNCTION::Print( const RENDER_SETTINGS* aSettings, const wxPoint& aOffs
SHAPE_CIRCLE circle = getEffectiveShape(); SHAPE_CIRCLE circle = getEffectiveShape();
GRFilledCircle( NULL, DC, (wxPoint) circle.GetCenter() + aOffset, circle.GetRadius(), color ); GRFilledCircle( nullptr, DC, (wxPoint) circle.GetCenter() + aOffset, circle.GetRadius(),
color );
} }

View File

@ -36,7 +36,7 @@
#include <board_item.h> #include <board_item.h>
SCH_LINE::SCH_LINE( const wxPoint& pos, int layer ) : SCH_LINE::SCH_LINE( const wxPoint& pos, int layer ) :
SCH_ITEM( NULL, SCH_LINE_T ) SCH_ITEM( nullptr, SCH_LINE_T )
{ {
m_start = pos; m_start = pos;
m_end = pos; m_end = pos;
@ -439,7 +439,7 @@ int SCH_LINE::GetReverseAngleFrom( const wxPoint& aPoint ) const
bool SCH_LINE::IsParallel( const SCH_LINE* aLine ) const bool SCH_LINE::IsParallel( const SCH_LINE* aLine ) const
{ {
wxCHECK_MSG( aLine != NULL && aLine->Type() == SCH_LINE_T, false, wxCHECK_MSG( aLine != nullptr && aLine->Type() == SCH_LINE_T, false,
wxT( "Cannot test line segment for overlap." ) ); wxT( "Cannot test line segment for overlap." ) );
wxPoint firstSeg = m_end - m_start; wxPoint firstSeg = m_end - m_start;
@ -460,7 +460,7 @@ SCH_LINE* SCH_LINE::MergeOverlap( SCH_SCREEN* aScreen, SCH_LINE* aLine, bool aCh
return lhs.x < rhs.x; return lhs.x < rhs.x;
}; };
wxCHECK_MSG( aLine != NULL && aLine->Type() == SCH_LINE_T, NULL, wxCHECK_MSG( aLine != nullptr && aLine->Type() == SCH_LINE_T, nullptr,
wxT( "Cannot test line segment for overlap." ) ); wxT( "Cannot test line segment for overlap." ) );
if( this == aLine || GetLayer() != aLine->GetLayer() ) if( this == aLine || GetLayer() != aLine->GetLayer() )

View File

@ -39,7 +39,7 @@
SCH_NO_CONNECT::SCH_NO_CONNECT( const wxPoint& pos ) : SCH_NO_CONNECT::SCH_NO_CONNECT( const wxPoint& pos ) :
SCH_ITEM( NULL, SCH_NO_CONNECT_T ) SCH_ITEM( nullptr, SCH_NO_CONNECT_T )
{ {
m_pos = pos; m_pos = pos;
m_size = Mils2iu( DEFAULT_NOCONNECT_SIZE ); ///< No-connect symbol size. m_size = Mils2iu( DEFAULT_NOCONNECT_SIZE ); ///< No-connect symbol size.
@ -56,7 +56,7 @@ EDA_ITEM* SCH_NO_CONNECT::Clone() const
void SCH_NO_CONNECT::SwapData( SCH_ITEM* aItem ) void SCH_NO_CONNECT::SwapData( SCH_ITEM* aItem )
{ {
wxCHECK_RET( (aItem != NULL) && (aItem->Type() == SCH_NO_CONNECT_T), wxCHECK_RET( ( aItem != nullptr ) && ( aItem->Type() == SCH_NO_CONNECT_T ),
wxT( "Cannot swap no connect data with invalid item." ) ); wxT( "Cannot swap no connect data with invalid item." ) );
SCH_NO_CONNECT* item = (SCH_NO_CONNECT*)aItem; SCH_NO_CONNECT* item = (SCH_NO_CONNECT*)aItem;
@ -144,6 +144,7 @@ bool SCH_NO_CONNECT::doIsConnected( const wxPoint& aPosition ) const
return m_pos == aPosition; return m_pos == aPosition;
} }
bool SCH_NO_CONNECT::HitTest( const wxPoint& aPosition, int aAccuracy ) const bool SCH_NO_CONNECT::HitTest( const wxPoint& aPosition, int aAccuracy ) const
{ {
int delta = ( GetPenWidth() + GetSize() ) / 2 + aAccuracy; int delta = ( GetPenWidth() + GetSize() ) / 2 + aAccuracy;

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2016 CERN * Copyright (C) 2016 CERN
* Copyright (C) 2016-2017 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 2016-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* @author Wayne Stambaugh <stambaughw@gmail.com> * @author Wayne Stambaugh <stambaughw@gmail.com>
* *
@ -52,7 +52,7 @@ SCH_SHEET* SCH_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchematic,
SCH_SHEET* aAppendToMe, const PROPERTIES* aProperties ) SCH_SHEET* aAppendToMe, const PROPERTIES* aProperties )
{ {
not_implemented( this, __FUNCTION__ ); not_implemented( this, __FUNCTION__ );
return NULL; return nullptr;
} }
@ -87,7 +87,7 @@ LIB_SYMBOL* SCH_PLUGIN::LoadSymbol( const wxString& aLibraryPath, const wxString
{ {
// not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface. // not pure virtual so that plugins only have to implement subset of the SCH_PLUGIN interface.
not_implemented( this, __FUNCTION__ ); not_implemented( this, __FUNCTION__ );
return NULL; return nullptr;
} }

View File

@ -161,7 +161,7 @@ wxFileName SCH_ALTIUM_PLUGIN::getLibFileName()
SCH_SHEET* SCH_ALTIUM_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchematic, SCH_SHEET* SCH_ALTIUM_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchematic,
SCH_SHEET* aAppendToMe, const PROPERTIES* aProperties ) SCH_SHEET* aAppendToMe, const PROPERTIES* aProperties )
{ {
wxASSERT( !aFileName || aSchematic != NULL ); wxASSERT( !aFileName || aSchematic != nullptr );
wxFileName fileName( aFileName ); wxFileName fileName( aFileName );
fileName.SetExt( KiCadSchematicFileExtension ); fileName.SetExt( KiCadSchematicFileExtension );
@ -197,7 +197,7 @@ SCH_SHEET* SCH_ALTIUM_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchem
SYMBOL_LIB_TABLE* libTable = m_schematic->Prj().SchSymbolLibTable(); SYMBOL_LIB_TABLE* libTable = m_schematic->Prj().SchSymbolLibTable();
wxCHECK_MSG( libTable, NULL, "Could not load symbol lib table." ); wxCHECK_MSG( libTable, nullptr, "Could not load symbol lib table." );
m_pi.set( SCH_IO_MGR::FindPlugin( SCH_IO_MGR::SCH_KICAD ) ); m_pi.set( SCH_IO_MGR::FindPlugin( SCH_IO_MGR::SCH_KICAD ) );
@ -224,7 +224,7 @@ SCH_SHEET* SCH_ALTIUM_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchem
} }
// Reload the symbol library table. // Reload the symbol library table.
m_schematic->Prj().SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, NULL ); m_schematic->Prj().SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, nullptr );
m_schematic->Prj().SchSymbolLibTable(); m_schematic->Prj().SchSymbolLibTable();
} }
@ -579,9 +579,10 @@ void SCH_ALTIUM_PLUGIN::ParseComponent( int aIndex,
SCH_SYMBOL* symbol = new SCH_SYMBOL(); SCH_SYMBOL* symbol = new SCH_SYMBOL();
symbol->SetPosition( elem.location + m_sheetOffset ); symbol->SetPosition( elem.location + m_sheetOffset );
//component->SetOrientation( elem.orientation ); // TODO: keep it simple for now, and only set position
// TODO: keep it simple for now, and only set position.
//component->SetOrientation( elem.orientation );
symbol->SetLibId( libId ); symbol->SetLibId( libId );
//component->SetLibSymbol( ksymbol ); // this has to be done after parsing the LIB_SYMBOL!
symbol->SetUnit( elem.currentpartid ); symbol->SetUnit( elem.currentpartid );
@ -651,6 +652,7 @@ void SCH_ALTIUM_PLUGIN::ParsePin( const std::map<wxString, wxString>& aPropertie
// TODO: position can be sometimes off a little bit! // TODO: position can be sometimes off a little bit!
pin->SetPosition( GetRelativePosition( pinLocation + m_sheetOffset, symbol ) ); pin->SetPosition( GetRelativePosition( pinLocation + m_sheetOffset, symbol ) );
// TODO: the following fix is even worse for now? // TODO: the following fix is even worse for now?
// pin->SetPosition( GetRelativePosition( elem.kicadLocation, symbol ) ); // pin->SetPosition( GetRelativePosition( elem.kicadLocation, symbol ) );
@ -920,7 +922,7 @@ void SCH_ALTIUM_PLUGIN::ParseNote( const std::map<wxString, wxString>& aProperti
// TODO: set border and background color once KiCad supports them. // TODO: set border and background color once KiCad supports them.
// TODO: need some sort of propety system for storing author.... // TODO: need some sort of property system for storing author....
size_t fontId = static_cast<int>( elem.fontId ); size_t fontId = static_cast<int>( elem.fontId );
@ -969,7 +971,7 @@ void SCH_ALTIUM_PLUGIN::ParseBezier( const std::map<wxString, wxString>& aProper
} }
else else
{ {
// simulate bezier using line segments // simulate Bezier using line segments
std::vector<wxPoint> bezierPoints; std::vector<wxPoint> bezierPoints;
std::vector<wxPoint> polyPoints; std::vector<wxPoint> polyPoints;
@ -1031,7 +1033,7 @@ void SCH_ALTIUM_PLUGIN::ParseBezier( const std::map<wxString, wxString>& aProper
} }
else else
{ {
// bezier always has maximum of 4 control points // Bezier always has maximum of 4 control points
LIB_BEZIER* bezier = new LIB_BEZIER( libSymbolIt->second ); LIB_BEZIER* bezier = new LIB_BEZIER( libSymbolIt->second );
libSymbolIt->second->AddDrawItem( bezier ); libSymbolIt->second->AddDrawItem( bezier );
@ -1236,6 +1238,7 @@ void SCH_ALTIUM_PLUGIN::ParseRoundRectangle( const std::map<wxString, wxString>&
return; return;
SCH_SYMBOL* symbol = m_symbols.at( libSymbolIt->first ); SCH_SYMBOL* symbol = m_symbols.at( libSymbolIt->first );
// TODO: misses rounded edges // TODO: misses rounded edges
LIB_RECTANGLE* rect = new LIB_RECTANGLE( libSymbolIt->second ); LIB_RECTANGLE* rect = new LIB_RECTANGLE( libSymbolIt->second );
libSymbolIt->second->AddDrawItem( rect ); libSymbolIt->second->AddDrawItem( rect );
@ -1776,7 +1779,8 @@ void SCH_ALTIUM_PLUGIN::ParsePowerPort( const std::map<wxString, wxString>& aPro
pin->SetType( ELECTRICAL_PINTYPE::PT_POWER_IN ); pin->SetType( ELECTRICAL_PINTYPE::PT_POWER_IN );
pin->SetVisible( false ); pin->SetVisible( false );
wxPoint valueFieldPos = HelperGeneratePowerPortGraphics( libSymbol, elem.style, m_reporter ); wxPoint valueFieldPos = HelperGeneratePowerPortGraphics( libSymbol, elem.style,
m_reporter );
libSymbol->GetValueField().SetPosition( valueFieldPos ); libSymbol->GetValueField().SetPosition( valueFieldPos );

View File

@ -79,7 +79,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::Load( SCHEMATIC* aSchematic, SCH_SHEET* aRootSh
(double) maxDesignSizekicad / SCH_IU_PER_MM ) ); (double) maxDesignSizekicad / SCH_IU_PER_MM ) );
} }
// Assume the centre at 0,0 since we are going to be translating the design afterwards anyway // Assume the center at 0,0 since we are going to be translating the design afterwards anyway
m_designCenter = { 0, 0 }; m_designCenter = { 0, 0 };
m_schematic = aSchematic; m_schematic = aSchematic;
@ -124,7 +124,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::Load( SCHEMATIC* aSchematic, SCH_SHEET* aRootSh
} }
// For all sheets, centre all elements and re calculate the page size: // For all sheets, center all elements and re calculate the page size:
for( std::pair<LAYER_ID, SCH_SHEET*> sheetPair : m_sheetMap ) for( std::pair<LAYER_ID, SCH_SHEET*> sheetPair : m_sheetMap )
{ {
SCH_SHEET* sheet = sheetPair.second; SCH_SHEET* sheet = sheetPair.second;
@ -196,7 +196,6 @@ void CADSTAR_SCH_ARCHIVE_LOADER::Load( SCHEMATIC* aSchematic, SCH_SHEET* aRootSh
// Set the new sheet size. // Set the new sheet size.
sheet->GetScreen()->SetPageSettings( pageInfo ); sheet->GetScreen()->SetPageSettings( pageInfo );
wxSize pageSizeIU = sheet->GetScreen()->GetPageSettings().GetSizeIU(); wxSize pageSizeIU = sheet->GetScreen()->GetPageSettings().GetSizeIU();
wxPoint sheetcentre( pageSizeIU.x / 2, pageSizeIU.y / 2 ); wxPoint sheetcentre( pageSizeIU.x / 2, pageSizeIU.y / 2 );
wxPoint itemsCentre = sheetBoundingBox.Centre(); wxPoint itemsCentre = sheetBoundingBox.Centre();
@ -428,7 +427,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadSchematicSymbolInstances()
} }
LIB_SYMBOL* scaledPart = getScaledLibPart( kiPart, sym.ScaleRatioNumerator, LIB_SYMBOL* scaledPart = getScaledLibPart( kiPart, sym.ScaleRatioNumerator,
sym.ScaleRatioDenominator ); sym.ScaleRatioDenominator );
double symOrientDeciDeg = 0.0; double symOrientDeciDeg = 0.0;
SCH_SYMBOL* symbol = loadSchematicSymbol( sym, *scaledPart, symOrientDeciDeg ); SCH_SYMBOL* symbol = loadSchematicSymbol( sym, *scaledPart, symOrientDeciDeg );
@ -854,7 +853,6 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadNets()
m_sheetMap.at( bus.LayerID )->GetScreen()->Append( label ); m_sheetMap.at( bus.LayerID )->GetScreen()->Append( label );
} }
for( std::pair<NETELEMENT_ID, NET_SCH::DANGLER> danglerPair : net.Danglers ) for( std::pair<NETELEMENT_ID, NET_SCH::DANGLER> danglerPair : net.Danglers )
{ {
NET_SCH::DANGLER dangler = danglerPair.second; NET_SCH::DANGLER dangler = danglerPair.second;
@ -868,7 +866,6 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadNets()
m_sheetMap.at( dangler.LayerID )->GetScreen()->Append( label ); m_sheetMap.at( dangler.LayerID )->GetScreen()->Append( label );
} }
for( NET_SCH::CONNECTION_SCH conn : net.Connections ) for( NET_SCH::CONNECTION_SCH conn : net.Connections )
{ {
if( conn.LayerID == wxT( "NO_SHEET" ) ) if( conn.LayerID == wxT( "NO_SHEET" ) )
@ -952,8 +949,8 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadNets()
} }
else else
{ {
// The block terminal is either inside or on the shape edge. Lets use the // The block terminal is either inside or on the shape edge. Lets use
// first interection point // the first intersection point.
VECTOR2I intsctPt = wireToSheetIntersects.at( 0 ).p; VECTOR2I intsctPt = wireToSheetIntersects.at( 0 ).p;
int intsctIndx = wireChain.FindSegment( intsctPt ); int intsctIndx = wireChain.FindSegment( intsctPt );
wxASSERT_MSG( intsctIndx != -1, "Can't find intersecting segment" ); wxASSERT_MSG( intsctIndx != -1, "Can't find intersecting segment" );
@ -1112,7 +1109,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadDocumentationSymbols()
FIGURE fig = figPair.second; FIGURE fig = figPair.second;
loadFigure( fig, docSym.LayerID, LAYER_NOTES, moveVector, rotationAngle, scalingFactor, loadFigure( fig, docSym.LayerID, LAYER_NOTES, moveVector, rotationAngle, scalingFactor,
centreOfTransform, mirrorInvert ); centreOfTransform, mirrorInvert );
} }
for( std::pair<TEXT_ID, TEXT> textPair : docSymDef.Texts ) for( std::pair<TEXT_ID, TEXT> textPair : docSymDef.Texts )
@ -1463,7 +1460,8 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadSymDefIntoLibrary( const SYMDEF_ID& aSymdef
}; };
// Load all attributes in the Part Definition // Load all attributes in the Part Definition
for( std::pair<ATTRIBUTE_ID, ATTRIBUTE_VALUE> attr : aCadstarPart->Definition.AttributeValues ) for( std::pair<ATTRIBUTE_ID,
ATTRIBUTE_VALUE> attr : aCadstarPart->Definition.AttributeValues )
{ {
ATTRIBUTE_VALUE attrVal = attr.second; ATTRIBUTE_VALUE attrVal = attr.second;
loadLibraryField( attrVal ); loadLibraryField( attrVal );
@ -1949,7 +1947,8 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadShapeVertices( const std::vector<VERTEX>& a
else else
arcAngleDeciDeg = NormalizeAngleNeg( arcAngleDeciDeg ); arcAngleDeciDeg = NormalizeAngleNeg( arcAngleDeciDeg );
SHAPE_ARC tempArc( VECTOR2I(centerPoint), VECTOR2I(startPoint), arcAngleDeciDeg / 10.0 ); SHAPE_ARC tempArc( VECTOR2I(centerPoint), VECTOR2I(startPoint),
arcAngleDeciDeg / 10.0 );
SHAPE_LINE_CHAIN arcSegments = tempArc.ConvertToPolyline( Millimeter2iu( 0.1 ) ); SHAPE_LINE_CHAIN arcSegments = tempArc.ConvertToPolyline( Millimeter2iu( 0.1 ) );
// Load the arc as a series of piece-wise segments // Load the arc as a series of piece-wise segments
@ -1959,17 +1958,17 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadShapeVertices( const std::vector<VERTEX>& a
wxPoint segStart = (wxPoint) arcSegments.Segment( jj ).A; wxPoint segStart = (wxPoint) arcSegments.Segment( jj ).A;
wxPoint segEnd = (wxPoint) arcSegments.Segment( jj ).B; wxPoint segEnd = (wxPoint) arcSegments.Segment( jj ).B;
loadGraphicStaightSegment( segStart, segEnd, aCadstarLineCodeID, loadGraphicStaightSegment( segStart, segEnd, aCadstarLineCodeID, aCadstarSheetID,
aCadstarSheetID, aKiCadSchLayerID, aMoveVector, aRotationAngleDeciDeg, aKiCadSchLayerID, aMoveVector, aRotationAngleDeciDeg,
aScalingFactor, aTransformCentre, aMirrorInvert ); aScalingFactor, aTransformCentre, aMirrorInvert );
} }
} }
break; break;
case VERTEX_TYPE::POINT: case VERTEX_TYPE::POINT:
loadGraphicStaightSegment( startPoint, endPoint, aCadstarLineCodeID, aCadstarSheetID, loadGraphicStaightSegment( startPoint, endPoint, aCadstarLineCodeID, aCadstarSheetID,
aKiCadSchLayerID, aMoveVector, aRotationAngleDeciDeg, aScalingFactor, aKiCadSchLayerID, aMoveVector, aRotationAngleDeciDeg,
aTransformCentre, aMirrorInvert ); aScalingFactor, aTransformCentre, aMirrorInvert );
break; break;
default: default:
@ -1988,14 +1987,14 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadFigure( const FIGURE& aCadstarFigure,
const double& aScalingFactor, const wxPoint& aTransformCentre, const bool& aMirrorInvert ) const double& aScalingFactor, const wxPoint& aTransformCentre, const bool& aMirrorInvert )
{ {
loadShapeVertices( aCadstarFigure.Shape.Vertices, aCadstarFigure.LineCodeID, loadShapeVertices( aCadstarFigure.Shape.Vertices, aCadstarFigure.LineCodeID,
aCadstarSheetIDOverride, aKiCadSchLayerID, aMoveVector, aRotationAngleDeciDeg, aCadstarSheetIDOverride, aKiCadSchLayerID, aMoveVector,
aScalingFactor, aTransformCentre, aMirrorInvert ); aRotationAngleDeciDeg, aScalingFactor, aTransformCentre, aMirrorInvert );
for( CUTOUT cutout : aCadstarFigure.Shape.Cutouts ) for( CUTOUT cutout : aCadstarFigure.Shape.Cutouts )
{ {
loadShapeVertices( cutout.Vertices, aCadstarFigure.LineCodeID, aCadstarSheetIDOverride, loadShapeVertices( cutout.Vertices, aCadstarFigure.LineCodeID, aCadstarSheetIDOverride,
aKiCadSchLayerID, aMoveVector, aRotationAngleDeciDeg, aScalingFactor, aKiCadSchLayerID, aMoveVector, aRotationAngleDeciDeg, aScalingFactor,
aTransformCentre, aMirrorInvert ); aTransformCentre, aMirrorInvert );
} }
} }
@ -2039,7 +2038,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadSheetAndChildSheets(
wxString pageNumStr = wxString::Format( "%d", getSheetNumber( aCadstarSheetID ) ); wxString pageNumStr = wxString::Format( "%d", getSheetNumber( aCadstarSheetID ) );
sheet->SetPageNumber( instance, pageNumStr ); sheet->SetPageNumber( instance, pageNumStr );
sheet->AutoplaceFields( /* aScreen */ NULL, /* aManual */ false ); sheet->AutoplaceFields( /* aScreen */ nullptr, /* aManual */ false );
m_sheetMap.insert( { aCadstarSheetID, sheet } ); m_sheetMap.insert( { aCadstarSheetID, sheet } );
@ -2047,8 +2046,8 @@ void CADSTAR_SCH_ARCHIVE_LOADER::loadSheetAndChildSheets(
} }
void CADSTAR_SCH_ARCHIVE_LOADER::loadChildSheets( void CADSTAR_SCH_ARCHIVE_LOADER::loadChildSheets( LAYER_ID aCadstarSheetID,
LAYER_ID aCadstarSheetID, const SCH_SHEET_PATH& aSheet ) const SCH_SHEET_PATH& aSheet )
{ {
wxCHECK_MSG( m_sheetMap.find( aCadstarSheetID ) != m_sheetMap.end(), , wxCHECK_MSG( m_sheetMap.find( aCadstarSheetID ) != m_sheetMap.end(), ,
"FIXME! Parent sheet should be loaded before attempting to load subsheets" ); "FIXME! Parent sheet should be loaded before attempting to load subsheets" );
@ -2227,6 +2226,7 @@ CADSTAR_SCH_ARCHIVE_LOADER::SYMDEF_ID CADSTAR_SCH_ARCHIVE_LOADER::getSymDefFromN
return SYMDEF_ID(); return SYMDEF_ID();
} }
bool CADSTAR_SCH_ARCHIVE_LOADER::isAttributeVisible( const ATTRIBUTE_ID& aCadstarAttributeID ) bool CADSTAR_SCH_ARCHIVE_LOADER::isAttributeVisible( const ATTRIBUTE_ID& aCadstarAttributeID )
{ {
// Use CADSTAR visibility settings to determine if an attribute is visible // Use CADSTAR visibility settings to determine if an attribute is visible
@ -2253,7 +2253,7 @@ PLOT_DASH_TYPE CADSTAR_SCH_ARCHIVE_LOADER::getLineStyle( const LINECODE_ID& aCad
{ {
wxCHECK( Assignments.Codedefs.LineCodes.find( aCadstarLineCodeID ) wxCHECK( Assignments.Codedefs.LineCodes.find( aCadstarLineCodeID )
!= Assignments.Codedefs.LineCodes.end(), != Assignments.Codedefs.LineCodes.end(),
PLOT_DASH_TYPE::SOLID ); PLOT_DASH_TYPE::SOLID );
// clang-format off // clang-format off
switch( Assignments.Codedefs.LineCodes.at( aCadstarLineCodeID ).Style ) switch( Assignments.Codedefs.LineCodes.at( aCadstarLineCodeID ).Style )
@ -2276,7 +2276,7 @@ CADSTAR_SCH_ARCHIVE_LOADER::TEXTCODE CADSTAR_SCH_ARCHIVE_LOADER::getTextCode(
{ {
wxCHECK( Assignments.Codedefs.TextCodes.find( aCadstarTextCodeID ) wxCHECK( Assignments.Codedefs.TextCodes.find( aCadstarTextCodeID )
!= Assignments.Codedefs.TextCodes.end(), != Assignments.Codedefs.TextCodes.end(),
TEXTCODE() ); TEXTCODE() );
return Assignments.Codedefs.TextCodes.at( aCadstarTextCodeID ); return Assignments.Codedefs.TextCodes.at( aCadstarTextCodeID );
} }
@ -2286,7 +2286,7 @@ wxString CADSTAR_SCH_ARCHIVE_LOADER::getAttributeName( const ATTRIBUTE_ID& aCads
{ {
wxCHECK( Assignments.Codedefs.AttributeNames.find( aCadstarAttributeID ) wxCHECK( Assignments.Codedefs.AttributeNames.find( aCadstarAttributeID )
!= Assignments.Codedefs.AttributeNames.end(), != Assignments.Codedefs.AttributeNames.end(),
wxEmptyString ); wxEmptyString );
return Assignments.Codedefs.AttributeNames.at( aCadstarAttributeID ).Name; return Assignments.Codedefs.AttributeNames.at( aCadstarAttributeID ).Name;
} }
@ -2306,7 +2306,7 @@ CADSTAR_SCH_ARCHIVE_LOADER::ROUTECODE CADSTAR_SCH_ARCHIVE_LOADER::getRouteCode(
{ {
wxCHECK( Assignments.Codedefs.RouteCodes.find( aCadstarRouteCodeID ) wxCHECK( Assignments.Codedefs.RouteCodes.find( aCadstarRouteCodeID )
!= Assignments.Codedefs.RouteCodes.end(), != Assignments.Codedefs.RouteCodes.end(),
ROUTECODE() ); ROUTECODE() );
return Assignments.Codedefs.RouteCodes.at( aCadstarRouteCodeID ); return Assignments.Codedefs.RouteCodes.at( aCadstarRouteCodeID );
} }
@ -2356,8 +2356,8 @@ int CADSTAR_SCH_ARCHIVE_LOADER::getKiCadUnitNumberFromGate( const GATE_ID& aCads
} }
LABEL_SPIN_STYLE CADSTAR_SCH_ARCHIVE_LOADER::getSpinStyle( LABEL_SPIN_STYLE CADSTAR_SCH_ARCHIVE_LOADER::getSpinStyle( const long long& aCadstarOrientation,
const long long& aCadstarOrientation, bool aMirror ) bool aMirror )
{ {
double orientationDeciDegree = getAngleTenthDegree( aCadstarOrientation ); double orientationDeciDegree = getAngleTenthDegree( aCadstarOrientation );
LABEL_SPIN_STYLE spinStyle = getSpinStyleDeciDeg( orientationDeciDegree ); LABEL_SPIN_STYLE spinStyle = getSpinStyleDeciDeg( orientationDeciDegree );
@ -2402,14 +2402,17 @@ CADSTAR_SCH_ARCHIVE_LOADER::mirrorX( const ALIGNMENT& aCadstarAlignment )
case ALIGNMENT::BOTTOMLEFT: return ALIGNMENT::BOTTOMRIGHT; case ALIGNMENT::BOTTOMLEFT: return ALIGNMENT::BOTTOMRIGHT;
case ALIGNMENT::CENTERLEFT: return ALIGNMENT::CENTERRIGHT; case ALIGNMENT::CENTERLEFT: return ALIGNMENT::CENTERRIGHT;
case ALIGNMENT::TOPLEFT: return ALIGNMENT::TOPRIGHT; case ALIGNMENT::TOPLEFT: return ALIGNMENT::TOPRIGHT;
//Change right to left: //Change right to left:
case ALIGNMENT::BOTTOMRIGHT: return ALIGNMENT::BOTTOMLEFT; case ALIGNMENT::BOTTOMRIGHT: return ALIGNMENT::BOTTOMLEFT;
case ALIGNMENT::CENTERRIGHT: return ALIGNMENT::CENTERLEFT; case ALIGNMENT::CENTERRIGHT: return ALIGNMENT::CENTERLEFT;
case ALIGNMENT::TOPRIGHT: return ALIGNMENT::TOPLEFT; case ALIGNMENT::TOPRIGHT: return ALIGNMENT::TOPLEFT;
// Center alignment does not mirror: // Center alignment does not mirror:
case ALIGNMENT::BOTTOMCENTER: case ALIGNMENT::BOTTOMCENTER:
case ALIGNMENT::CENTERCENTER: case ALIGNMENT::CENTERCENTER:
case ALIGNMENT::TOPCENTER: return aCadstarAlignment; case ALIGNMENT::TOPCENTER: return aCadstarAlignment;
// Shouldn't be here // Shouldn't be here
default: wxFAIL_MSG( "Unknown Cadstar Alignment" ); return aCadstarAlignment; default: wxFAIL_MSG( "Unknown Cadstar Alignment" ); return aCadstarAlignment;
} }
@ -2431,6 +2434,7 @@ CADSTAR_SCH_ARCHIVE_LOADER::rotate180( const ALIGNMENT& aCadstarAlignment )
case ALIGNMENT::CENTERLEFT: return ALIGNMENT::CENTERRIGHT; case ALIGNMENT::CENTERLEFT: return ALIGNMENT::CENTERRIGHT;
case ALIGNMENT::CENTERCENTER: return ALIGNMENT::CENTERCENTER; case ALIGNMENT::CENTERCENTER: return ALIGNMENT::CENTERCENTER;
case ALIGNMENT::CENTERRIGHT: return ALIGNMENT::CENTERLEFT; case ALIGNMENT::CENTERRIGHT: return ALIGNMENT::CENTERLEFT;
// Shouldn't be here // Shouldn't be here
default: wxFAIL_MSG( "Unknown Cadstar Alignment" ); return aCadstarAlignment; default: wxFAIL_MSG( "Unknown Cadstar Alignment" ); return aCadstarAlignment;
} }
@ -2444,9 +2448,9 @@ void CADSTAR_SCH_ARCHIVE_LOADER::applyTextSettings( EDA_TEXT* aKiCadT
const long long aCadstarOrientAngle, const long long aCadstarOrientAngle,
bool aMirrored ) bool aMirrored )
{ {
// Justification ignored for now as not supported in eeschema, but leaving this code in // Justification ignored for now as not supported in Eeschema, but leaving this code in
// place for future upgrades. // place for future upgrades.
// TODO update this when eeschema supports justification independent of anchor position. // TODO update this when Eeschema supports justification independent of anchor position.
TEXTCODE textCode = getTextCode( aCadstarTextCodeID ); TEXTCODE textCode = getTextCode( aCadstarTextCodeID );
int textHeight = KiROUND( (double) getKiCadLength( textCode.Height ) * TXT_HEIGHT_RATIO ); int textHeight = KiROUND( (double) getKiCadLength( textCode.Height ) * TXT_HEIGHT_RATIO );
@ -2613,6 +2617,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::applyTextSettings( EDA_TEXT* aKiCadT
} }
} }
SCH_TEXT* CADSTAR_SCH_ARCHIVE_LOADER::getKiCadSchText( const TEXT& aCadstarTextElement ) SCH_TEXT* CADSTAR_SCH_ARCHIVE_LOADER::getKiCadSchText( const TEXT& aCadstarTextElement )
{ {
SCH_TEXT* kiTxt = new SCH_TEXT(); SCH_TEXT* kiTxt = new SCH_TEXT();
@ -2802,8 +2807,7 @@ void CADSTAR_SCH_ARCHIVE_LOADER::fixUpLibraryPins( LIB_SYMBOL* aSymbolToFix, int
} }
std::pair<wxPoint, wxSize> std::pair<wxPoint, wxSize> CADSTAR_SCH_ARCHIVE_LOADER::getFigureExtentsKiCad(
CADSTAR_SCH_ARCHIVE_LOADER::getFigureExtentsKiCad(
const FIGURE& aCadstarFigure ) const FIGURE& aCadstarFigure )
{ {
wxPoint upperLeft( Assignments.Settings.DesignLimit.x, 0 ); wxPoint upperLeft( Assignments.Settings.DesignLimit.x, 0 );
@ -2862,8 +2866,8 @@ wxPoint CADSTAR_SCH_ARCHIVE_LOADER::getKiCadPoint( wxPoint aCadstarPoint )
} }
wxPoint CADSTAR_SCH_ARCHIVE_LOADER::getKiCadLibraryPoint( wxPoint CADSTAR_SCH_ARCHIVE_LOADER::getKiCadLibraryPoint( wxPoint aCadstarPoint,
wxPoint aCadstarPoint, wxPoint aCadstarCentre ) wxPoint aCadstarCentre )
{ {
wxPoint retval; wxPoint retval;

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2020 Roberto Fernandez Bautista <roberto.fer.bau@gmail.com> * Copyright (C) 2020 Roberto Fernandez Bautista <roberto.fer.bau@gmail.com>
* Copyright (C) 2020 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 2020-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software: you can redistribute it and/or modify it * This program is free software: you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
@ -38,8 +38,6 @@ class SCH_SCREEN;
class CADSTAR_SCH_ARCHIVE_PLUGIN : public SCH_PLUGIN class CADSTAR_SCH_ARCHIVE_PLUGIN : public SCH_PLUGIN
{ {
public: public:
//-----<PUBLIC SCH_PLUGIN API>-------------------------------------------------
const wxString GetName() const override; const wxString GetName() const override;
void SetReporter( REPORTER* aReporter ) override { m_reporter = aReporter; } void SetReporter( REPORTER* aReporter ) override { m_reporter = aReporter; }
@ -51,45 +49,11 @@ public:
int GetModifyHash() const override; int GetModifyHash() const override;
SCH_SHEET* Load( const wxString& aFileName, SCHEMATIC* aSchematic, SCH_SHEET* Load( const wxString& aFileName, SCHEMATIC* aSchematic,
SCH_SHEET* aAppendToMe = NULL, const PROPERTIES* aProperties = NULL ) override; SCH_SHEET* aAppendToMe = nullptr,
const PROPERTIES* aProperties = nullptr ) override;
bool CheckHeader( const wxString& aFileName ) override; bool CheckHeader( const wxString& aFileName ) override;
// unimplemented functions. Will trigger a not_implemented IO error.
//void SaveLibrary( const wxString& aFileName, const PROPERTIES* aProperties = NULL ) override;
//void Save( const wxString& aFileName, SCH_SCREEN* aSchematic, KIWAY* aKiway,
// const PROPERTIES* aProperties = NULL ) override;
//void EnumerateSymbolLib( wxArrayString& aAliasNameList, const wxString& aLibraryPath,
// const PROPERTIES* aProperties = NULL ) override;
//LIB_SYMBOL* LoadSymbol( const wxString& aLibraryPath, const wxString& aAliasName,
// const PROPERTIES* aProperties = NULL ) override;
//void SaveSymbol( const wxString& aLibraryPath, const LIB_SYMBOL* aSymbol,
// const PROPERTIES* aProperties = NULL ) override;
//void DeleteAlias( const wxString& aLibraryPath, const wxString& aAliasName,
// const PROPERTIES* aProperties = NULL ) override;
//void DeleteSymbol( const wxString& aLibraryPath, const wxString& aAliasName,
// const PROPERTIES* aProperties = NULL ) override;
//void CreateSymbolLib( const wxString& aLibraryPath,
// const PROPERTIES* aProperties = NULL ) override;
// bool DeleteSymbolLib( const wxString& aLibraryPath,
// const PROPERTIES* aProperties = NULL ) override;
//bool IsSymbolLibWritable( const wxString& aLibraryPath ) override;
//void SymbolLibOptions( PROPERTIES* aListToAppendTo ) const override;
//-----</PUBLIC SCH_PLUGIN API>------------------------------------------------
CADSTAR_SCH_ARCHIVE_PLUGIN() CADSTAR_SCH_ARCHIVE_PLUGIN()
{ {
m_reporter = &WXLOG_REPORTER::GetInstance(); m_reporter = &WXLOG_REPORTER::GetInstance();

View File

@ -408,7 +408,7 @@ void SCH_EAGLE_PLUGIN::checkpoint()
/ std::max( 1U, m_totalCount ) ); / std::max( 1U, m_totalCount ) );
if( !m_progressReporter->KeepRefreshing() ) if( !m_progressReporter->KeepRefreshing() )
THROW_IO_ERROR( ( "Open cancelled by user." ) ); THROW_IO_ERROR( ( "Open canceled by user." ) );
m_lastProgressCount = m_doneCount; m_lastProgressCount = m_doneCount;
} }
@ -430,7 +430,7 @@ SCH_SHEET* SCH_EAGLE_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchema
m_progressReporter->Report( wxString::Format( _( "Loading %s..." ), aFileName ) ); m_progressReporter->Report( wxString::Format( _( "Loading %s..." ), aFileName ) );
if( !m_progressReporter->KeepRefreshing() ) if( !m_progressReporter->KeepRefreshing() )
THROW_IO_ERROR( ( "Open cancelled by user." ) ); THROW_IO_ERROR( ( "Open canceled by user." ) );
} }
// Load the document // Load the document
@ -469,7 +469,7 @@ SCH_SHEET* SCH_EAGLE_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchema
SYMBOL_LIB_TABLE* libTable = m_schematic->Prj().SchSymbolLibTable(); SYMBOL_LIB_TABLE* libTable = m_schematic->Prj().SchSymbolLibTable();
wxCHECK_MSG( libTable, NULL, "Could not load symbol lib table." ); wxCHECK_MSG( libTable, nullptr, "Could not load symbol lib table." );
m_pi.set( SCH_IO_MGR::FindPlugin( SCH_IO_MGR::SCH_KICAD ) ); m_pi.set( SCH_IO_MGR::FindPlugin( SCH_IO_MGR::SCH_KICAD ) );
m_properties = std::make_unique<PROPERTIES>(); m_properties = std::make_unique<PROPERTIES>();
@ -498,7 +498,7 @@ SCH_SHEET* SCH_EAGLE_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchema
} }
// Reload the symbol library table. // Reload the symbol library table.
m_schematic->Prj().SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, NULL ); m_schematic->Prj().SetElem( PROJECT::ELEM_SYMBOL_LIB_TABLE, nullptr );
m_schematic->Prj().SchSymbolLibTable(); m_schematic->Prj().SchSymbolLibTable();
} }
@ -1382,7 +1382,7 @@ void SCH_EAGLE_PLUGIN::loadInstance( wxXmlNode* aInstanceNode )
if( attributeNode->GetName() == "attribute" ) if( attributeNode->GetName() == "attribute" )
{ {
auto attr = EATTR( attributeNode ); auto attr = EATTR( attributeNode );
SCH_FIELD* field = NULL; SCH_FIELD* field = nullptr;
if( attr.name.Lower() == "name" ) if( attr.name.Lower() == "name" )
{ {
@ -1616,7 +1616,6 @@ bool SCH_EAGLE_PLUGIN::loadSymbol( wxXmlNode* aSymbolNode, std::unique_ptr<LIB_S
} }
} }
if( aDevice->connects.size() != 0 ) if( aDevice->connects.size() != 0 )
{ {
for( const auto& connect : aDevice->connects ) for( const auto& connect : aDevice->connects )
@ -1663,7 +1662,8 @@ bool SCH_EAGLE_PLUGIN::loadSymbol( wxXmlNode* aSymbolNode, std::unique_ptr<LIB_S
} }
else if( nodeName == "text" ) else if( nodeName == "text" )
{ {
std::unique_ptr<LIB_TEXT> libtext( loadSymbolText( aSymbol, currentNode, aGateNumber ) ); std::unique_ptr<LIB_TEXT> libtext( loadSymbolText( aSymbol, currentNode,
aGateNumber ) );
if( libtext->GetText().Upper() == ">NAME" ) if( libtext->GetText().Upper() == ">NAME" )
{ {
@ -2261,7 +2261,6 @@ void SCH_EAGLE_PLUGIN::adjustNetLabels()
if( segAttached && !onIntersection( labelPos ) ) if( segAttached && !onIntersection( labelPos ) )
continue; // label is placed correctly continue; // label is placed correctly
// Move the label to the nearest wire // Move the label to the nearest wire
if( !segAttached ) if( !segAttached )
{ {
@ -2272,7 +2271,6 @@ void SCH_EAGLE_PLUGIN::adjustNetLabels()
continue; continue;
} }
// Create a vector pointing in the direction of the wire, 50 mils long // Create a vector pointing in the direction of the wire, 50 mils long
VECTOR2I wireDirection( segAttached->B - segAttached->A ); VECTOR2I wireDirection( segAttached->B - segAttached->A );
wireDirection = wireDirection.Resize( Mils2iu( 50 ) ); wireDirection = wireDirection.Resize( Mils2iu( 50 ) );

View File

@ -423,7 +423,7 @@ double SCH_SEXPR_PARSER::parseDouble()
char* tmp; char* tmp;
// In case the file got saved with the wrong locale. // In case the file got saved with the wrong locale.
if( strchr( CurText(), ',' ) != NULL ) if( strchr( CurText(), ',' ) != nullptr )
{ {
THROW_PARSE_ERROR( _( "Floating point number with incorrect locale" ), CurSource(), THROW_PARSE_ERROR( _( "Floating point number with incorrect locale" ), CurSource(),
CurLine(), CurLineNumber(), CurOffset() ); CurLine(), CurLineNumber(), CurOffset() );
@ -1094,7 +1094,8 @@ LIB_BEZIER* SCH_SEXPR_PARSER::parseBezier()
LIB_CIRCLE* SCH_SEXPR_PARSER::parseCircle() LIB_CIRCLE* SCH_SEXPR_PARSER::parseCircle()
{ {
wxCHECK_MSG( CurTok() == T_circle, nullptr, wxCHECK_MSG( CurTok() == T_circle, nullptr,
wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as a circle token." ) ); wxT( "Cannot parse " ) + GetTokenString( CurTok() ) +
wxT( " as a circle token." ) );
T token; T token;
FILL_PARAMS fill; FILL_PARAMS fill;
@ -1439,7 +1440,8 @@ LIB_POLYLINE* SCH_SEXPR_PARSER::parsePolyLine()
LIB_RECTANGLE* SCH_SEXPR_PARSER::parseRectangle() LIB_RECTANGLE* SCH_SEXPR_PARSER::parseRectangle()
{ {
wxCHECK_MSG( CurTok() == T_rectangle, nullptr, wxCHECK_MSG( CurTok() == T_rectangle, nullptr,
wxT( "Cannot parse " ) + GetTokenString( CurTok() ) + wxT( " as a rectangle token." ) ); wxT( "Cannot parse " ) + GetTokenString( CurTok() ) +
wxT( " as a rectangle token." ) );
T token; T token;
FILL_PARAMS fill; FILL_PARAMS fill;
@ -1732,7 +1734,8 @@ SCH_FIELD* SCH_SEXPR_PARSER::parseSchField( SCH_ITEM* aParent )
// Empty property values are valid. // Empty property values are valid.
wxString value = FromUTF8(); wxString value = FromUTF8();
std::unique_ptr<SCH_FIELD> field = std::make_unique<SCH_FIELD>( wxDefaultPosition, -1, aParent, name ); std::unique_ptr<SCH_FIELD> field = std::make_unique<SCH_FIELD>( wxDefaultPosition, -1,
aParent, name );
field->SetText( value ); field->SetText( value );
field->SetVisible( true ); field->SetVisible( true );

View File

@ -96,12 +96,12 @@ class SCH_SEXPR_PARSER : public SCHEMATIC_LEXER
inline long parseHex() inline long parseHex()
{ {
NextTok(); NextTok();
return strtol( CurText(), NULL, 16 ); return strtol( CurText(), nullptr, 16 );
} }
inline int parseInt() inline int parseInt()
{ {
return (int)strtol( CurText(), NULL, 10 ); return (int)strtol( CurText(), nullptr, 10 );
} }
inline int parseInt( const char* aExpected ) inline int parseInt( const char* aExpected )

View File

@ -369,7 +369,7 @@ public:
SCH_SEXPR_PLUGIN::SCH_SEXPR_PLUGIN() : SCH_SEXPR_PLUGIN::SCH_SEXPR_PLUGIN() :
m_progressReporter( nullptr ) m_progressReporter( nullptr )
{ {
init( NULL ); init( nullptr );
} }
@ -431,7 +431,7 @@ SCH_SHEET* SCH_SEXPR_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchema
m_currentPath.push( m_path ); m_currentPath.push( m_path );
init( aSchematic, aProperties ); init( aSchematic, aProperties );
if( aAppendToMe == NULL ) if( aAppendToMe == nullptr )
{ {
// Clean up any allocated memory if an exception occurs loading the schematic. // Clean up any allocated memory if an exception occurs loading the schematic.
std::unique_ptr<SCH_SHEET> newSheet = std::make_unique<SCH_SHEET>( aSchematic ); std::unique_ptr<SCH_SHEET> newSheet = std::make_unique<SCH_SHEET>( aSchematic );
@ -469,7 +469,7 @@ SCH_SHEET* SCH_SEXPR_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchema
void SCH_SEXPR_PLUGIN::loadHierarchy( SCH_SHEET* aSheet ) void SCH_SEXPR_PLUGIN::loadHierarchy( SCH_SHEET* aSheet )
{ {
SCH_SCREEN* screen = NULL; SCH_SCREEN* screen = nullptr;
if( !aSheet->GetScreen() ) if( !aSheet->GetScreen() )
{ {
@ -576,7 +576,7 @@ void SCH_SEXPR_PLUGIN::LoadContent( LINE_READER& aReader, SCH_SHEET* aSheet, int
void SCH_SEXPR_PLUGIN::Save( const wxString& aFileName, SCH_SHEET* aSheet, SCHEMATIC* aSchematic, void SCH_SEXPR_PLUGIN::Save( const wxString& aFileName, SCH_SHEET* aSheet, SCHEMATIC* aSchematic,
const PROPERTIES* aProperties ) const PROPERTIES* aProperties )
{ {
wxCHECK_RET( aSheet != NULL, "NULL SCH_SHEET object." ); wxCHECK_RET( aSheet != nullptr, "NULL SCH_SHEET object." );
wxCHECK_RET( !aFileName.IsEmpty(), "No schematic file name defined." ); wxCHECK_RET( !aFileName.IsEmpty(), "No schematic file name defined." );
LOCALE_IO toggle; // toggles on, then off, the C locale, to write floating point values. LOCALE_IO toggle; // toggles on, then off, the C locale, to write floating point values.
@ -599,8 +599,8 @@ void SCH_SEXPR_PLUGIN::Save( const wxString& aFileName, SCH_SHEET* aSheet, SCHEM
void SCH_SEXPR_PLUGIN::Format( SCH_SHEET* aSheet ) void SCH_SEXPR_PLUGIN::Format( SCH_SHEET* aSheet )
{ {
wxCHECK_RET( aSheet != NULL, "NULL SCH_SHEET* object." ); wxCHECK_RET( aSheet != nullptr, "NULL SCH_SHEET* object." );
wxCHECK_RET( m_schematic != NULL, "NULL SCHEMATIC* object." ); wxCHECK_RET( m_schematic != nullptr, "NULL SCHEMATIC* object." );
SCH_SCREEN* screen = aSheet->GetScreen(); SCH_SCREEN* screen = aSheet->GetScreen();
@ -1051,7 +1051,7 @@ void SCH_SEXPR_PLUGIN::saveBitmap( SCH_BITMAP* aBitmap, int aNestLevel )
const wxImage* image = aBitmap->GetImage()->GetImageData(); const wxImage* image = aBitmap->GetImage()->GetImageData();
wxCHECK_RET( image != NULL, "wxImage* is NULL" ); wxCHECK_RET( image != nullptr, "wxImage* is NULL" );
m_out->Print( aNestLevel, "(image (at %s %s)", m_out->Print( aNestLevel, "(image (at %s %s)",
FormatInternalUnits( aBitmap->GetPosition().x ).c_str(), FormatInternalUnits( aBitmap->GetPosition().x ).c_str(),
@ -1306,7 +1306,7 @@ void SCH_SEXPR_PLUGIN::saveText( SCH_TEXT* aText, int aNestLevel )
void SCH_SEXPR_PLUGIN::saveBusAlias( std::shared_ptr<BUS_ALIAS> aAlias, int aNestLevel ) void SCH_SEXPR_PLUGIN::saveBusAlias( std::shared_ptr<BUS_ALIAS> aAlias, int aNestLevel )
{ {
wxCHECK_RET( aAlias != NULL, "BUS_ALIAS* is NULL" ); wxCHECK_RET( aAlias != nullptr, "BUS_ALIAS* is NULL" );
wxString members; wxString members;
@ -1434,17 +1434,17 @@ bool SCH_SEXPR_PLUGIN_CACHE::IsFileChanged() const
LIB_SYMBOL* SCH_SEXPR_PLUGIN_CACHE::removeSymbol( LIB_SYMBOL* aSymbol ) LIB_SYMBOL* SCH_SEXPR_PLUGIN_CACHE::removeSymbol( LIB_SYMBOL* aSymbol )
{ {
wxCHECK_MSG( aSymbol != NULL, NULL, "NULL pointer cannot be removed from library." ); wxCHECK_MSG( aSymbol != nullptr, nullptr, "NULL pointer cannot be removed from library." );
LIB_SYMBOL* firstChild = NULL; LIB_SYMBOL* firstChild = nullptr;
LIB_SYMBOL_MAP::iterator it = m_symbols.find( aSymbol->GetName() ); LIB_SYMBOL_MAP::iterator it = m_symbols.find( aSymbol->GetName() );
if( it == m_symbols.end() ) if( it == m_symbols.end() )
return NULL; return nullptr;
// If the entry pointer doesn't match the name it is mapped to in the library, we // If the entry pointer doesn't match the name it is mapped to in the library, we
// have done something terribly wrong. // have done something terribly wrong.
wxCHECK_MSG( *it->second == aSymbol, NULL, wxCHECK_MSG( *it->second == aSymbol, nullptr,
"Pointer mismatch while attempting to remove alias entry <" + aSymbol->GetName() + "Pointer mismatch while attempting to remove alias entry <" + aSymbol->GetName() +
"> from library cache <" + m_libFileName.GetName() + ">." ); "> from library cache <" + m_libFileName.GetName() + ">." );
@ -1944,8 +1944,7 @@ void SCH_SEXPR_PLUGIN_CACHE::saveField( LIB_FIELD* aField, OUTPUTFORMATTER& aFor
} }
void SCH_SEXPR_PLUGIN_CACHE::savePin( LIB_PIN* aPin, void SCH_SEXPR_PLUGIN_CACHE::savePin( LIB_PIN* aPin, OUTPUTFORMATTER& aFormatter,
OUTPUTFORMATTER& aFormatter,
int aNestLevel ) int aNestLevel )
{ {
wxCHECK_RET( aPin && aPin->Type() == LIB_PIN_T, "Invalid LIB_PIN object." ); wxCHECK_RET( aPin && aPin->Type() == LIB_PIN_T, "Invalid LIB_PIN object." );
@ -1989,8 +1988,7 @@ void SCH_SEXPR_PLUGIN_CACHE::savePin( LIB_PIN* aPin,
} }
void SCH_SEXPR_PLUGIN_CACHE::savePolyLine( LIB_POLYLINE* aPolyLine, void SCH_SEXPR_PLUGIN_CACHE::savePolyLine( LIB_POLYLINE* aPolyLine, OUTPUTFORMATTER& aFormatter,
OUTPUTFORMATTER& aFormatter,
int aNestLevel ) int aNestLevel )
{ {
wxCHECK_RET( aPolyLine && aPolyLine->Type() == LIB_POLYLINE_T, "Invalid LIB_POLYLINE object." ); wxCHECK_RET( aPolyLine && aPolyLine->Type() == LIB_POLYLINE_T, "Invalid LIB_POLYLINE object." );

View File

@ -122,7 +122,7 @@ static bool is_eol( char c )
* @param aOutput - A pointer to a string pointer to the end of the comparison if not NULL. * @param aOutput - A pointer to a string pointer to the end of the comparison if not NULL.
* @return true if \a aString was found starting at \a aLine. Otherwise false. * @return true if \a aString was found starting at \a aLine. Otherwise false.
*/ */
static bool strCompare( const char* aString, const char* aLine, const char** aOutput = NULL ) static bool strCompare( const char* aString, const char* aLine, const char** aOutput = nullptr )
{ {
size_t len = strlen( aString ); size_t len = strlen( aString );
bool retv = ( strncasecmp( aLine, aString, len ) == 0 ) && bool retv = ( strncasecmp( aLine, aString, len ) == 0 ) &&
@ -159,7 +159,7 @@ static bool strCompare( const char* aString, const char* aLine, const char** aOu
* @throw An #IO_ERROR on an unexpected end of line. * @throw An #IO_ERROR on an unexpected end of line.
* @throw A #PARSE_ERROR if the parsed token is not a valid integer. * @throw A #PARSE_ERROR if the parsed token is not a valid integer.
*/ */
static int parseInt( LINE_READER& aReader, const char* aLine, const char** aOutput = NULL ) static int parseInt( LINE_READER& aReader, const char* aLine, const char** aOutput = nullptr )
{ {
if( !*aLine ) if( !*aLine )
SCH_PARSE_ERROR( _( "unexpected end of line" ), aReader, aLine ); SCH_PARSE_ERROR( _( "unexpected end of line" ), aReader, aLine );
@ -201,7 +201,7 @@ static int parseInt( LINE_READER& aReader, const char* aLine, const char** aOutp
* @throw IO_ERROR on an unexpected end of line. * @throw IO_ERROR on an unexpected end of line.
* @throw PARSE_ERROR if the parsed token is not a valid integer. * @throw PARSE_ERROR if the parsed token is not a valid integer.
*/ */
static uint32_t parseHex( LINE_READER& aReader, const char* aLine, const char** aOutput = NULL ) static uint32_t parseHex( LINE_READER& aReader, const char* aLine, const char** aOutput = nullptr )
{ {
if( !*aLine ) if( !*aLine )
SCH_PARSE_ERROR( _( "unexpected end of line" ), aReader, aLine ); SCH_PARSE_ERROR( _( "unexpected end of line" ), aReader, aLine );
@ -247,7 +247,7 @@ static uint32_t parseHex( LINE_READER& aReader, const char* aLine, const char**
* @throw PARSE_ERROR if the parsed token is not a valid integer. * @throw PARSE_ERROR if the parsed token is not a valid integer.
*/ */
static double parseDouble( LINE_READER& aReader, const char* aLine, static double parseDouble( LINE_READER& aReader, const char* aLine,
const char** aOutput = NULL ) const char** aOutput = nullptr )
{ {
if( !*aLine ) if( !*aLine )
SCH_PARSE_ERROR( _( "unexpected end of line" ), aReader, aLine ); SCH_PARSE_ERROR( _( "unexpected end of line" ), aReader, aLine );
@ -288,7 +288,7 @@ static double parseDouble( LINE_READER& aReader, const char* aLine,
* @throw PARSE_ERROR if the parsed token is not a single character token. * @throw PARSE_ERROR if the parsed token is not a single character token.
*/ */
static char parseChar( LINE_READER& aReader, const char* aCurrentToken, static char parseChar( LINE_READER& aReader, const char* aCurrentToken,
const char** aNextToken = NULL ) const char** aNextToken = nullptr )
{ {
while( *aCurrentToken && isspace( *aCurrentToken ) ) while( *aCurrentToken && isspace( *aCurrentToken ) )
aCurrentToken++; aCurrentToken++;
@ -328,7 +328,7 @@ static char parseChar( LINE_READER& aReader, const char* aCurrentToken,
* @throw PARSE_ERROR if the \a aCanBeEmpty is false and no string was parsed. * @throw PARSE_ERROR if the \a aCanBeEmpty is false and no string was parsed.
*/ */
static void parseUnquotedString( wxString& aString, LINE_READER& aReader, static void parseUnquotedString( wxString& aString, LINE_READER& aReader,
const char* aCurrentToken, const char** aNextToken = NULL, const char* aCurrentToken, const char** aNextToken = nullptr,
bool aCanBeEmpty = false ) bool aCanBeEmpty = false )
{ {
if( !*aCurrentToken ) if( !*aCurrentToken )
@ -390,7 +390,7 @@ static void parseUnquotedString( wxString& aString, LINE_READER& aReader,
* @throw PARSE_ERROR if the \a aCanBeEmpty is false and no string was parsed. * @throw PARSE_ERROR if the \a aCanBeEmpty is false and no string was parsed.
*/ */
static void parseQuotedString( wxString& aString, LINE_READER& aReader, static void parseQuotedString( wxString& aString, LINE_READER& aReader,
const char* aCurrentToken, const char** aNextToken = NULL, const char* aCurrentToken, const char** aNextToken = nullptr,
bool aCanBeEmpty = false ) bool aCanBeEmpty = false )
{ {
if( !*aCurrentToken ) if( !*aCurrentToken )
@ -589,7 +589,7 @@ SCH_LEGACY_PLUGIN::SCH_LEGACY_PLUGIN() :
m_lastProgressLine( 0 ), m_lastProgressLine( 0 ),
m_lineCount( 0 ) m_lineCount( 0 )
{ {
init( NULL ); init( nullptr );
} }
@ -634,7 +634,7 @@ void SCH_LEGACY_PLUGIN::checkpoint()
SCH_SHEET* SCH_LEGACY_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchematic, SCH_SHEET* SCH_LEGACY_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchematic,
SCH_SHEET* aAppendToMe, const PROPERTIES* aProperties ) SCH_SHEET* aAppendToMe, const PROPERTIES* aProperties )
{ {
wxASSERT( !aFileName || aSchematic != NULL ); wxASSERT( !aFileName || aSchematic != nullptr );
LOCALE_IO toggle; // toggles on, then off, the C locale. LOCALE_IO toggle; // toggles on, then off, the C locale.
SCH_SHEET* sheet; SCH_SHEET* sheet;
@ -672,7 +672,7 @@ SCH_SHEET* SCH_LEGACY_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchem
m_currentPath.push( m_path ); m_currentPath.push( m_path );
init( aSchematic, aProperties ); init( aSchematic, aProperties );
if( aAppendToMe == NULL ) if( aAppendToMe == nullptr )
{ {
// Clean up any allocated memory if an exception occurs loading the schematic. // Clean up any allocated memory if an exception occurs loading the schematic.
std::unique_ptr<SCH_SHEET> newSheet = std::make_unique<SCH_SHEET>( aSchematic ); std::unique_ptr<SCH_SHEET> newSheet = std::make_unique<SCH_SHEET>( aSchematic );
@ -702,7 +702,7 @@ SCH_SHEET* SCH_LEGACY_PLUGIN::Load( const wxString& aFileName, SCHEMATIC* aSchem
void SCH_LEGACY_PLUGIN::loadHierarchy( SCH_SHEET* aSheet ) void SCH_LEGACY_PLUGIN::loadHierarchy( SCH_SHEET* aSheet )
{ {
SCH_SCREEN* screen = NULL; SCH_SCREEN* screen = nullptr;
if( !aSheet->GetScreen() ) if( !aSheet->GetScreen() )
{ {
@ -904,7 +904,7 @@ void SCH_LEGACY_PLUGIN::loadHeader( LINE_READER& aReader, SCH_SCREEN* aScreen )
void SCH_LEGACY_PLUGIN::loadPageSettings( LINE_READER& aReader, SCH_SCREEN* aScreen ) void SCH_LEGACY_PLUGIN::loadPageSettings( LINE_READER& aReader, SCH_SCREEN* aScreen )
{ {
wxASSERT( aScreen != NULL ); wxASSERT( aScreen != nullptr );
wxString buf; wxString buf;
const char* line = aReader.Line(); const char* line = aReader.Line();
@ -941,7 +941,7 @@ void SCH_LEGACY_PLUGIN::loadPageSettings( LINE_READER& aReader, SCH_SCREEN* aScr
aScreen->SetPageSettings( pageInfo ); aScreen->SetPageSettings( pageInfo );
while( line != NULL ) while( line != nullptr )
{ {
buf.clear(); buf.clear();
@ -1037,7 +1037,7 @@ SCH_SHEET* SCH_LEGACY_PLUGIN::loadSheet( LINE_READER& aReader )
const char* line = aReader.ReadLine(); const char* line = aReader.ReadLine();
while( line != NULL ) while( line != nullptr )
{ {
if( strCompare( "S", line, &line ) ) // Sheet dimensions. if( strCompare( "S", line, &line ) ) // Sheet dimensions.
{ {
@ -1090,7 +1090,7 @@ SCH_SHEET* SCH_LEGACY_PLUGIN::loadSheet( LINE_READER& aReader )
sheetPin->SetText( text ); sheetPin->SetText( text );
if( line == NULL ) if( line == nullptr )
THROW_IO_ERROR( _( "unexpected end of line" ) ); THROW_IO_ERROR( _( "unexpected end of line" ) );
switch( parseChar( aReader, line, &line ) ) switch( parseChar( aReader, line, &line ) )
@ -1128,7 +1128,7 @@ SCH_SHEET* SCH_LEGACY_PLUGIN::loadSheet( LINE_READER& aReader )
} }
else if( strCompare( "$EndSheet", line ) ) else if( strCompare( "$EndSheet", line ) )
{ {
sheet->AutoplaceFields( /* aScreen */ NULL, /* aManual */ false ); sheet->AutoplaceFields( /* aScreen */ nullptr, /* aManual */ false );
return sheet.release(); return sheet.release();
} }
@ -1137,7 +1137,7 @@ SCH_SHEET* SCH_LEGACY_PLUGIN::loadSheet( LINE_READER& aReader )
SCH_PARSE_ERROR( "missing '$EndSheet`", aReader, line ); SCH_PARSE_ERROR( "missing '$EndSheet`", aReader, line );
return NULL; // Prevents compiler warning. Should never get here. return nullptr; // Prevents compiler warning. Should never get here.
} }
@ -1147,11 +1147,11 @@ SCH_BITMAP* SCH_LEGACY_PLUGIN::loadBitmap( LINE_READER& aReader )
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK( strCompare( "$Bitmap", line, &line ), NULL ); wxCHECK( strCompare( "$Bitmap", line, &line ), nullptr );
line = aReader.ReadLine(); line = aReader.ReadLine();
while( line != NULL ) while( line != nullptr )
{ {
if( strCompare( "Pos", line, &line ) ) if( strCompare( "Pos", line, &line ) )
{ {
@ -1213,7 +1213,7 @@ SCH_BITMAP* SCH_LEGACY_PLUGIN::loadBitmap( LINE_READER& aReader )
} }
} }
if( line == NULL ) if( line == nullptr )
THROW_IO_ERROR( _( "unexpected end of file" ) ); THROW_IO_ERROR( _( "unexpected end of file" ) );
} }
else if( strCompare( "$EndBitmap", line ) ) else if( strCompare( "$EndBitmap", line ) )
@ -1232,7 +1232,7 @@ SCH_JUNCTION* SCH_LEGACY_PLUGIN::loadJunction( LINE_READER& aReader )
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK( strCompare( "Connection", line, &line ), NULL ); wxCHECK( strCompare( "Connection", line, &line ), nullptr );
wxString name; wxString name;
@ -1254,7 +1254,7 @@ SCH_NO_CONNECT* SCH_LEGACY_PLUGIN::loadNoConnect( LINE_READER& aReader )
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK( strCompare( "NoConn", line, &line ), NULL ); wxCHECK( strCompare( "NoConn", line, &line ), nullptr );
wxString name; wxString name;
@ -1276,7 +1276,7 @@ SCH_LINE* SCH_LEGACY_PLUGIN::loadWire( LINE_READER& aReader )
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK( strCompare( "Wire", line, &line ), NULL ); wxCHECK( strCompare( "Wire", line, &line ), nullptr );
if( strCompare( "Wire", line, &line ) ) if( strCompare( "Wire", line, &line ) )
wire->SetLayer( LAYER_WIRE ); wire->SetLayer( LAYER_WIRE );
@ -1372,7 +1372,7 @@ SCH_BUS_ENTRY_BASE* SCH_LEGACY_PLUGIN::loadBusEntry( LINE_READER& aReader )
{ {
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK( strCompare( "Entry", line, &line ), NULL ); wxCHECK( strCompare( "Entry", line, &line ), nullptr );
std::unique_ptr<SCH_BUS_ENTRY_BASE> busEntry; std::unique_ptr<SCH_BUS_ENTRY_BASE> busEntry;
@ -1428,7 +1428,7 @@ SCH_TEXT* SCH_LEGACY_PLUGIN::loadText( LINE_READER& aReader )
{ {
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK( strCompare( "Text", line, &line ), NULL ); wxCHECK( strCompare( "Text", line, &line ), nullptr );
std::unique_ptr<SCH_TEXT> text; std::unique_ptr<SCH_TEXT> text;
@ -1545,13 +1545,13 @@ SCH_SYMBOL* SCH_LEGACY_PLUGIN::loadSymbol( LINE_READER& aReader )
{ {
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK( strCompare( "$Comp", line, &line ), NULL ); wxCHECK( strCompare( "$Comp", line, &line ), nullptr );
std::unique_ptr<SCH_SYMBOL> symbol = std::make_unique<SCH_SYMBOL>(); std::unique_ptr<SCH_SYMBOL> symbol = std::make_unique<SCH_SYMBOL>();
line = aReader.ReadLine(); line = aReader.ReadLine();
while( line != NULL ) while( line != nullptr )
{ {
if( strCompare( "L", line, &line ) ) if( strCompare( "L", line, &line ) )
{ {
@ -1853,7 +1853,7 @@ SCH_SYMBOL* SCH_LEGACY_PLUGIN::loadSymbol( LINE_READER& aReader )
SCH_PARSE_ERROR( "invalid symbol line", aReader, line ); SCH_PARSE_ERROR( "invalid symbol line", aReader, line );
return NULL; // Prevents compiler warning. Should never get here. return nullptr; // Prevents compiler warning. Should never get here.
} }
@ -1863,7 +1863,7 @@ std::shared_ptr<BUS_ALIAS> SCH_LEGACY_PLUGIN::loadBusAlias( LINE_READER& aReader
auto busAlias = std::make_shared<BUS_ALIAS>( aScreen ); auto busAlias = std::make_shared<BUS_ALIAS>( aScreen );
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK( strCompare( "BusAlias", line, &line ), NULL ); wxCHECK( strCompare( "BusAlias", line, &line ), nullptr );
wxString buf; wxString buf;
parseUnquotedString( buf, aReader, line, &line ); parseUnquotedString( buf, aReader, line, &line );
@ -1886,7 +1886,7 @@ std::shared_ptr<BUS_ALIAS> SCH_LEGACY_PLUGIN::loadBusAlias( LINE_READER& aReader
void SCH_LEGACY_PLUGIN::Save( const wxString& aFileName, SCH_SHEET* aSheet, SCHEMATIC* aSchematic, void SCH_LEGACY_PLUGIN::Save( const wxString& aFileName, SCH_SHEET* aSheet, SCHEMATIC* aSchematic,
const PROPERTIES* aProperties ) const PROPERTIES* aProperties )
{ {
wxCHECK_RET( aSheet != NULL, "NULL SCH_SHEET object." ); wxCHECK_RET( aSheet != nullptr, "NULL SCH_SHEET object." );
wxCHECK_RET( !aFileName.IsEmpty(), "No schematic file name defined." ); wxCHECK_RET( !aFileName.IsEmpty(), "No schematic file name defined." );
LOCALE_IO toggle; // toggles on, then off, the C locale, to write floating point values. LOCALE_IO toggle; // toggles on, then off, the C locale, to write floating point values.
@ -1909,8 +1909,8 @@ void SCH_LEGACY_PLUGIN::Save( const wxString& aFileName, SCH_SHEET* aSheet, SCHE
void SCH_LEGACY_PLUGIN::Format( SCH_SHEET* aSheet ) void SCH_LEGACY_PLUGIN::Format( SCH_SHEET* aSheet )
{ {
wxCHECK_RET( aSheet != NULL, "NULL SCH_SHEET* object." ); wxCHECK_RET( aSheet != nullptr, "NULL SCH_SHEET* object." );
wxCHECK_RET( m_schematic != NULL, "NULL SCHEMATIC* object." ); wxCHECK_RET( m_schematic != nullptr, "NULL SCHEMATIC* object." );
SCH_SCREEN* screen = aSheet->GetScreen(); SCH_SCREEN* screen = aSheet->GetScreen();
@ -2195,11 +2195,11 @@ void SCH_LEGACY_PLUGIN::saveField( SCH_FIELD* aField )
void SCH_LEGACY_PLUGIN::saveBitmap( SCH_BITMAP* aBitmap ) void SCH_LEGACY_PLUGIN::saveBitmap( SCH_BITMAP* aBitmap )
{ {
wxCHECK_RET( aBitmap != NULL, "SCH_BITMAP* is NULL" ); wxCHECK_RET( aBitmap != nullptr, "SCH_BITMAP* is NULL" );
const wxImage* image = aBitmap->GetImage()->GetImageData(); const wxImage* image = aBitmap->GetImage()->GetImageData();
wxCHECK_RET( image != NULL, "wxImage* is NULL" ); wxCHECK_RET( image != nullptr, "wxImage* is NULL" );
m_out->Print( 0, "$Bitmap\n" ); m_out->Print( 0, "$Bitmap\n" );
m_out->Print( 0, "Pos %-4d %-4d\n", m_out->Print( 0, "Pos %-4d %-4d\n",
@ -2235,7 +2235,7 @@ void SCH_LEGACY_PLUGIN::saveBitmap( SCH_BITMAP* aBitmap )
void SCH_LEGACY_PLUGIN::saveSheet( SCH_SHEET* aSheet ) void SCH_LEGACY_PLUGIN::saveSheet( SCH_SHEET* aSheet )
{ {
wxCHECK_RET( aSheet != NULL, "SCH_SHEET* is NULL" ); wxCHECK_RET( aSheet != nullptr, "SCH_SHEET* is NULL" );
m_out->Print( 0, "$Sheet\n" ); m_out->Print( 0, "$Sheet\n" );
m_out->Print( 0, "S %-4d %-4d %-4d %-4d\n", m_out->Print( 0, "S %-4d %-4d %-4d %-4d\n",
@ -2299,7 +2299,7 @@ void SCH_LEGACY_PLUGIN::saveSheet( SCH_SHEET* aSheet )
void SCH_LEGACY_PLUGIN::saveJunction( SCH_JUNCTION* aJunction ) void SCH_LEGACY_PLUGIN::saveJunction( SCH_JUNCTION* aJunction )
{ {
wxCHECK_RET( aJunction != NULL, "SCH_JUNCTION* is NULL" ); wxCHECK_RET( aJunction != nullptr, "SCH_JUNCTION* is NULL" );
m_out->Print( 0, "Connection ~ %-4d %-4d\n", m_out->Print( 0, "Connection ~ %-4d %-4d\n",
Iu2Mils( aJunction->GetPosition().x ), Iu2Mils( aJunction->GetPosition().x ),
@ -2309,7 +2309,7 @@ void SCH_LEGACY_PLUGIN::saveJunction( SCH_JUNCTION* aJunction )
void SCH_LEGACY_PLUGIN::saveNoConnect( SCH_NO_CONNECT* aNoConnect ) void SCH_LEGACY_PLUGIN::saveNoConnect( SCH_NO_CONNECT* aNoConnect )
{ {
wxCHECK_RET( aNoConnect != NULL, "SCH_NOCONNECT* is NULL" ); wxCHECK_RET( aNoConnect != nullptr, "SCH_NOCONNECT* is NULL" );
m_out->Print( 0, "NoConn ~ %-4d %-4d\n", m_out->Print( 0, "NoConn ~ %-4d %-4d\n",
Iu2Mils( aNoConnect->GetPosition().x ), Iu2Mils( aNoConnect->GetPosition().x ),
@ -2319,7 +2319,7 @@ void SCH_LEGACY_PLUGIN::saveNoConnect( SCH_NO_CONNECT* aNoConnect )
void SCH_LEGACY_PLUGIN::saveBusEntry( SCH_BUS_ENTRY_BASE* aBusEntry ) void SCH_LEGACY_PLUGIN::saveBusEntry( SCH_BUS_ENTRY_BASE* aBusEntry )
{ {
wxCHECK_RET( aBusEntry != NULL, "SCH_BUS_ENTRY_BASE* is NULL" ); wxCHECK_RET( aBusEntry != nullptr, "SCH_BUS_ENTRY_BASE* is NULL" );
if( aBusEntry->GetLayer() == LAYER_WIRE ) if( aBusEntry->GetLayer() == LAYER_WIRE )
m_out->Print( 0, "Entry Wire Line\n\t%-4d %-4d %-4d %-4d\n", m_out->Print( 0, "Entry Wire Line\n\t%-4d %-4d %-4d %-4d\n",
@ -2336,7 +2336,7 @@ void SCH_LEGACY_PLUGIN::saveBusEntry( SCH_BUS_ENTRY_BASE* aBusEntry )
void SCH_LEGACY_PLUGIN::saveLine( SCH_LINE* aLine ) void SCH_LEGACY_PLUGIN::saveLine( SCH_LINE* aLine )
{ {
wxCHECK_RET( aLine != NULL, "SCH_LINE* is NULL" ); wxCHECK_RET( aLine != nullptr, "SCH_LINE* is NULL" );
const char* layer = "Notes"; const char* layer = "Notes";
const char* width = "Line"; const char* width = "Line";
@ -2375,7 +2375,7 @@ void SCH_LEGACY_PLUGIN::saveLine( SCH_LINE* aLine )
void SCH_LEGACY_PLUGIN::saveText( SCH_TEXT* aText ) void SCH_LEGACY_PLUGIN::saveText( SCH_TEXT* aText )
{ {
wxCHECK_RET( aText != NULL, "SCH_TEXT* is NULL" ); wxCHECK_RET( aText != nullptr, "SCH_TEXT* is NULL" );
const char* italics = "~"; const char* italics = "~";
const char* textType = "Notes"; const char* textType = "Notes";
@ -2448,7 +2448,7 @@ void SCH_LEGACY_PLUGIN::saveText( SCH_TEXT* aText )
void SCH_LEGACY_PLUGIN::saveBusAlias( std::shared_ptr<BUS_ALIAS> aAlias ) void SCH_LEGACY_PLUGIN::saveBusAlias( std::shared_ptr<BUS_ALIAS> aAlias )
{ {
wxCHECK_RET( aAlias != NULL, "BUS_ALIAS* is NULL" ); wxCHECK_RET( aAlias != nullptr, "BUS_ALIAS* is NULL" );
wxString members = boost::algorithm::join( aAlias->Members(), " " ); wxString members = boost::algorithm::join( aAlias->Members(), " " );
@ -2523,17 +2523,17 @@ bool SCH_LEGACY_PLUGIN_CACHE::IsFileChanged() const
LIB_SYMBOL* SCH_LEGACY_PLUGIN_CACHE::removeSymbol( LIB_SYMBOL* aSymbol ) LIB_SYMBOL* SCH_LEGACY_PLUGIN_CACHE::removeSymbol( LIB_SYMBOL* aSymbol )
{ {
wxCHECK_MSG( aSymbol != NULL, NULL, "NULL pointer cannot be removed from library." ); wxCHECK_MSG( aSymbol != nullptr, nullptr, "NULL pointer cannot be removed from library." );
LIB_SYMBOL* firstChild = NULL; LIB_SYMBOL* firstChild = nullptr;
LIB_SYMBOL_MAP::iterator it = m_symbols.find( aSymbol->GetName() ); LIB_SYMBOL_MAP::iterator it = m_symbols.find( aSymbol->GetName() );
if( it == m_symbols.end() ) if( it == m_symbols.end() )
return NULL; return nullptr;
// If the entry pointer doesn't match the name it is mapped to in the library, we // If the entry pointer doesn't match the name it is mapped to in the library, we
// have done something terribly wrong. // have done something terribly wrong.
wxCHECK_MSG( *it->second == aSymbol, NULL, wxCHECK_MSG( *it->second == aSymbol, nullptr,
"Pointer mismatch while attempting to remove alias entry <" + aSymbol->GetName() + "Pointer mismatch while attempting to remove alias entry <" + aSymbol->GetName() +
"> from library cache <" + m_libFileName.GetName() + ">." ); "> from library cache <" + m_libFileName.GetName() + ">." );
@ -2697,7 +2697,7 @@ void SCH_LEGACY_PLUGIN_CACHE::loadDocs()
wxString text; wxString text;
wxString aliasName; wxString aliasName;
wxFileName fn = m_libFileName; wxFileName fn = m_libFileName;
LIB_SYMBOL* symbol = NULL;; LIB_SYMBOL* symbol = nullptr;;
fn.SetExt( DOC_EXT ); fn.SetExt( DOC_EXT );
@ -3275,7 +3275,7 @@ LIB_ARC* SCH_LEGACY_PLUGIN_CACHE::loadArc( std::unique_ptr<LIB_SYMBOL>& aSymbol,
{ {
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK_MSG( strCompare( "A", line, &line ), NULL, "Invalid LIB_ARC definition" ); wxCHECK_MSG( strCompare( "A", line, &line ), nullptr, "Invalid LIB_ARC definition" );
LIB_ARC* arc = new LIB_ARC( aSymbol.get() ); LIB_ARC* arc = new LIB_ARC( aSymbol.get() );
@ -3341,7 +3341,7 @@ LIB_CIRCLE* SCH_LEGACY_PLUGIN_CACHE::loadCircle( std::unique_ptr<LIB_SYMBOL>& aS
{ {
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK_MSG( strCompare( "C", line, &line ), NULL, "Invalid LIB_CIRCLE definition" ); wxCHECK_MSG( strCompare( "C", line, &line ), nullptr, "Invalid LIB_CIRCLE definition" );
LIB_CIRCLE* circle = new LIB_CIRCLE( aSymbol.get() ); LIB_CIRCLE* circle = new LIB_CIRCLE( aSymbol.get() );
@ -3370,7 +3370,7 @@ LIB_TEXT* SCH_LEGACY_PLUGIN_CACHE::loadText( std::unique_ptr<LIB_SYMBOL>& aSymbo
{ {
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK_MSG( strCompare( "T", line, &line ), NULL, "Invalid LIB_TEXT definition" ); wxCHECK_MSG( strCompare( "T", line, &line ), nullptr, "Invalid LIB_TEXT definition" );
LIB_TEXT* text = new LIB_TEXT( aSymbol.get() ); LIB_TEXT* text = new LIB_TEXT( aSymbol.get() );
@ -3461,7 +3461,7 @@ LIB_RECTANGLE* SCH_LEGACY_PLUGIN_CACHE::loadRectangle( std::unique_ptr<LIB_SYMBO
{ {
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK_MSG( strCompare( "S", line, &line ), NULL, "Invalid LIB_RECTANGLE definition" ); wxCHECK_MSG( strCompare( "S", line, &line ), nullptr, "Invalid LIB_RECTANGLE definition" );
LIB_RECTANGLE* rectangle = new LIB_RECTANGLE( aSymbol.get() ); LIB_RECTANGLE* rectangle = new LIB_RECTANGLE( aSymbol.get() );
@ -3493,7 +3493,7 @@ LIB_PIN* SCH_LEGACY_PLUGIN_CACHE::loadPin( std::unique_ptr<LIB_SYMBOL>& aSymbol,
{ {
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK_MSG( strCompare( "X", line, &line ), NULL, "Invalid LIB_PIN definition" ); wxCHECK_MSG( strCompare( "X", line, &line ), nullptr, "Invalid LIB_PIN definition" );
wxString name; wxString name;
wxString number; wxString number;
@ -3683,7 +3683,7 @@ LIB_POLYLINE* SCH_LEGACY_PLUGIN_CACHE::loadPolyLine( std::unique_ptr<LIB_SYMBOL>
{ {
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK_MSG( strCompare( "P", line, &line ), NULL, "Invalid LIB_POLYLINE definition" ); wxCHECK_MSG( strCompare( "P", line, &line ), nullptr, "Invalid LIB_POLYLINE definition" );
LIB_POLYLINE* polyLine = new LIB_POLYLINE( aSymbol.get() ); LIB_POLYLINE* polyLine = new LIB_POLYLINE( aSymbol.get() );
@ -3714,7 +3714,7 @@ LIB_BEZIER* SCH_LEGACY_PLUGIN_CACHE::loadBezier( std::unique_ptr<LIB_SYMBOL>& aS
{ {
const char* line = aReader.Line(); const char* line = aReader.Line();
wxCHECK_MSG( strCompare( "B", line, &line ), NULL, "Invalid LIB_BEZIER definition" ); wxCHECK_MSG( strCompare( "B", line, &line ), nullptr, "Invalid LIB_BEZIER definition" );
LIB_BEZIER* bezier = new LIB_BEZIER( aSymbol.get() ); LIB_BEZIER* bezier = new LIB_BEZIER( aSymbol.get() );

View File

@ -48,8 +48,8 @@ public:
SCH_REFERENCE() : SCH_REFERENCE() :
m_sheetPath() m_sheetPath()
{ {
m_rootSymbol = NULL; m_rootSymbol = nullptr;
m_libPart = NULL; m_libPart = nullptr;
m_unit = 0; m_unit = 0;
m_isNew = false; m_isNew = false;
m_numRef = 0; m_numRef = 0;

View File

@ -371,7 +371,7 @@ std::set<SCH_ITEM*> SCH_SCREEN::MarkConnections( SCH_LINE* aSegment )
SCH_LINE* line = static_cast<SCH_LINE*>( item ); SCH_LINE* line = static_cast<SCH_LINE*>( item );
if( ( test_item->IsEndPoint( line->GetStartPoint() ) if( ( test_item->IsEndPoint( line->GetStartPoint() )
&& !GetPin( line->GetStartPoint(), NULL, true ) ) && !GetPin( line->GetStartPoint(), nullptr, true ) )
|| ( test_item->IsEndPoint( line->GetEndPoint() ) || ( test_item->IsEndPoint( line->GetEndPoint() )
&& !GetPin( line->GetEndPoint(), nullptr, true ) ) ) && !GetPin( line->GetEndPoint(), nullptr, true ) ) )
{ {
@ -509,7 +509,7 @@ bool SCH_SCREEN::IsTerminalPoint( const wxPoint& aPosition, int aLayer ) const
if( GetItem( aPosition, 1, SCH_JUNCTION_T ) ) if( GetItem( aPosition, 1, SCH_JUNCTION_T ) )
return true; return true;
if( GetPin( aPosition, NULL, true ) ) if( GetPin( aPosition, nullptr, true ) )
return true; return true;
if( GetWire( aPosition ) ) if( GetWire( aPosition ) )
@ -832,8 +832,8 @@ void SCH_SCREEN::ClearDrawingState()
LIB_PIN* SCH_SCREEN::GetPin( const wxPoint& aPosition, SCH_SYMBOL** aSymbol, LIB_PIN* SCH_SCREEN::GetPin( const wxPoint& aPosition, SCH_SYMBOL** aSymbol,
bool aEndPointOnly ) const bool aEndPointOnly ) const
{ {
SCH_SYMBOL* candidate = NULL; SCH_SYMBOL* candidate = nullptr;
LIB_PIN* pin = NULL; LIB_PIN* pin = nullptr;
for( SCH_ITEM* item : Items().Overlapping( SCH_SYMBOL_T, aPosition ) ) for( SCH_ITEM* item : Items().Overlapping( SCH_SYMBOL_T, aPosition ) )
{ {
@ -841,7 +841,7 @@ LIB_PIN* SCH_SCREEN::GetPin( const wxPoint& aPosition, SCH_SYMBOL** aSymbol,
if( aEndPointOnly ) if( aEndPointOnly )
{ {
pin = NULL; pin = nullptr;
if( !candidate->GetLibSymbolRef() ) if( !candidate->GetLibSymbolRef() )
continue; continue;
@ -1021,7 +1021,7 @@ SCH_LINE* SCH_SCREEN::GetLine( const wxPoint& aPosition, int aAccuracy, int aLay
} }
} }
return NULL; return nullptr;
} }
@ -1044,7 +1044,7 @@ SCH_TEXT* SCH_SCREEN::GetLabel( const wxPoint& aPosition, int aAccuracy ) const
} }
} }
return NULL; return nullptr;
} }
@ -1105,7 +1105,7 @@ SCH_SCREEN* SCH_SCREENS::GetFirst()
if( m_screens.size() > 0 ) if( m_screens.size() > 0 )
return m_screens[0]; return m_screens[0];
return NULL; return nullptr;
} }
@ -1123,7 +1123,7 @@ SCH_SCREEN* SCH_SCREENS::GetScreen( unsigned int aIndex ) const
if( aIndex < m_screens.size() ) if( aIndex < m_screens.size() )
return m_screens[ aIndex ]; return m_screens[ aIndex ];
return NULL; return nullptr;
} }
@ -1132,13 +1132,13 @@ SCH_SHEET* SCH_SCREENS::GetSheet( unsigned int aIndex ) const
if( aIndex < m_sheets.size() ) if( aIndex < m_sheets.size() )
return m_sheets[ aIndex ]; return m_sheets[ aIndex ];
return NULL; return nullptr;
} }
void SCH_SCREENS::addScreenToList( SCH_SCREEN* aScreen, SCH_SHEET* aSheet ) void SCH_SCREENS::addScreenToList( SCH_SCREEN* aScreen, SCH_SHEET* aSheet )
{ {
if( aScreen == NULL ) if( aScreen == nullptr )
return; return;
for( const SCH_SCREEN* screen : m_screens ) for( const SCH_SCREEN* screen : m_screens )

View File

@ -77,7 +77,7 @@ SCH_SHEET::SCH_SHEET( EDA_ITEM* aParent, const wxPoint& pos ) :
m_layer = LAYER_SHEET; m_layer = LAYER_SHEET;
m_pos = pos; m_pos = pos;
m_size = wxSize( Mils2iu( MIN_SHEET_WIDTH ), Mils2iu( MIN_SHEET_HEIGHT ) ); m_size = wxSize( Mils2iu( MIN_SHEET_WIDTH ), Mils2iu( MIN_SHEET_HEIGHT ) );
m_screen = NULL; m_screen = nullptr;
for( int i = 0; i < SHEET_MANDATORY_FIELDS; ++i ) for( int i = 0; i < SHEET_MANDATORY_FIELDS; ++i )
{ {
@ -159,14 +159,14 @@ void SCH_SHEET::SetScreen( SCH_SCREEN* aScreen )
if( aScreen == m_screen ) if( aScreen == m_screen )
return; return;
if( m_screen != NULL ) if( m_screen != nullptr )
{ {
m_screen->DecRefCount(); m_screen->DecRefCount();
if( m_screen->GetRefCount() == 0 ) if( m_screen->GetRefCount() == 0 )
{ {
delete m_screen; delete m_screen;
m_screen = NULL; m_screen = nullptr;
} }
} }
@ -179,7 +179,7 @@ void SCH_SHEET::SetScreen( SCH_SCREEN* aScreen )
int SCH_SHEET::GetScreenCount() const int SCH_SHEET::GetScreenCount() const
{ {
if( m_screen == NULL ) if( m_screen == nullptr )
return 0; return 0;
return m_screen->GetRefCount(); return m_screen->GetRefCount();
@ -299,7 +299,7 @@ void SCH_SHEET::SwapData( SCH_ITEM* aItem )
void SCH_SHEET::AddPin( SCH_SHEET_PIN* aSheetPin ) void SCH_SHEET::AddPin( SCH_SHEET_PIN* aSheetPin )
{ {
wxASSERT( aSheetPin != NULL ); wxASSERT( aSheetPin != nullptr );
wxASSERT( aSheetPin->Type() == SCH_SHEET_PIN_T ); wxASSERT( aSheetPin->Type() == SCH_SHEET_PIN_T );
aSheetPin->SetParent( this ); aSheetPin->SetParent( this );
@ -310,7 +310,7 @@ void SCH_SHEET::AddPin( SCH_SHEET_PIN* aSheetPin )
void SCH_SHEET::RemovePin( const SCH_SHEET_PIN* aSheetPin ) void SCH_SHEET::RemovePin( const SCH_SHEET_PIN* aSheetPin )
{ {
wxASSERT( aSheetPin != NULL ); wxASSERT( aSheetPin != nullptr );
wxASSERT( aSheetPin->Type() == SCH_SHEET_PIN_T ); wxASSERT( aSheetPin->Type() == SCH_SHEET_PIN_T );
for( auto i = m_pins.begin(); i < m_pins.end(); ++i ) for( auto i = m_pins.begin(); i < m_pins.end(); ++i )
@ -476,7 +476,7 @@ void SCH_SHEET::CleanupSheet()
while( i != m_pins.end() ) while( i != m_pins.end() )
{ {
/* Search the schematic for a hierarchical label corresponding to this sheet label. */ /* Search the schematic for a hierarchical label corresponding to this sheet label. */
const SCH_HIERLABEL* HLabel = NULL; const SCH_HIERLABEL* HLabel = nullptr;
for( SCH_ITEM* aItem : m_screen->Items().OfType( SCH_HIER_LABEL_T ) ) for( SCH_ITEM* aItem : m_screen->Items().OfType( SCH_HIER_LABEL_T ) )
{ {
@ -487,7 +487,7 @@ void SCH_SHEET::CleanupSheet()
} }
} }
if( HLabel == NULL ) // Hlabel not found: delete sheet label. if( HLabel == nullptr ) // Hlabel not found: delete sheet label.
i = m_pins.erase( i ); i = m_pins.erase( i );
else else
++i; ++i;
@ -503,7 +503,7 @@ SCH_SHEET_PIN* SCH_SHEET::GetPin( const wxPoint& aPosition )
return pin; return pin;
} }
return NULL; return nullptr;
} }
@ -757,7 +757,7 @@ void SCH_SHEET::Rotate( const wxPoint& aCenter )
if( m_fieldsAutoplaced == FIELDS_AUTOPLACED_AUTO ) if( m_fieldsAutoplaced == FIELDS_AUTOPLACED_AUTO )
{ {
AutoplaceFields( /* aScreen */ NULL, /* aManual */ false ); AutoplaceFields( /* aScreen */ nullptr, /* aManual */ false );
} }
else else
{ {
@ -810,7 +810,7 @@ void SCH_SHEET::Resize( const wxSize& aSize )
// Move the fields if we're in autoplace mode // Move the fields if we're in autoplace mode
if( m_fieldsAutoplaced == FIELDS_AUTOPLACED_AUTO ) if( m_fieldsAutoplaced == FIELDS_AUTOPLACED_AUTO )
AutoplaceFields( /* aScreen */ NULL, /* aManual */ false ); AutoplaceFields( /* aScreen */ nullptr, /* aManual */ false );
// Move the sheet labels according to the new sheet size. // Move the sheet labels according to the new sheet size.
for( SCH_SHEET_PIN* sheetPin : m_pins ) for( SCH_SHEET_PIN* sheetPin : m_pins )
@ -883,7 +883,7 @@ SEARCH_RESULT SCH_SHEET::Visit( INSPECTOR aInspector, void* testData, const KICA
// If caller wants to inspect my type // If caller wants to inspect my type
if( stype == SCH_LOCATE_ANY_T || stype == Type() ) if( stype == SCH_LOCATE_ANY_T || stype == Type() )
{ {
if( SEARCH_RESULT::QUIT == aInspector( this, NULL ) ) if( SEARCH_RESULT::QUIT == aInspector( this, nullptr ) )
return SEARCH_RESULT::QUIT; return SEARCH_RESULT::QUIT;
} }

View File

@ -75,8 +75,8 @@ void SCH_SHEET_PIN::Print( const RENDER_SETTINGS* aSettings, const wxPoint& aOff
void SCH_SHEET_PIN::SwapData( SCH_ITEM* aItem ) void SCH_SHEET_PIN::SwapData( SCH_ITEM* aItem )
{ {
wxCHECK_RET( aItem->Type() == SCH_SHEET_PIN_T, wxCHECK_RET( aItem->Type() == SCH_SHEET_PIN_T,
wxString::Format( wxT( "SCH_SHEET_PIN object cannot swap data with %s object." ), wxString::Format( wxT( "SCH_SHEET_PIN object cannot swap data with %s object." ),
aItem->GetClass() ) ); aItem->GetClass() ) );
SCH_SHEET_PIN* pin = ( SCH_SHEET_PIN* ) aItem; SCH_SHEET_PIN* pin = ( SCH_SHEET_PIN* ) aItem;
SCH_TEXT::SwapData( (SCH_TEXT*) pin ); SCH_TEXT::SwapData( (SCH_TEXT*) pin );
@ -157,7 +157,7 @@ void SCH_SHEET_PIN::ConstrainOnEdge( wxPoint Pos )
{ {
SCH_SHEET* sheet = GetParent(); SCH_SHEET* sheet = GetParent();
if( sheet == NULL ) if( sheet == nullptr )
return; return;
int leftSide = sheet->m_pos.x; int leftSide = sheet->m_pos.x;

View File

@ -159,7 +159,7 @@ public:
return SCH_ITEM::Matches( GetText(), aSearchData ); return SCH_ITEM::Matches( GetText(), aSearchData );
} }
bool Replace( const wxFindReplaceData& aSearchData, void* aAuxData = NULL ) override bool Replace( const wxFindReplaceData& aSearchData, void* aAuxData = nullptr ) override
{ {
return EDA_TEXT::Replace( aSearchData ); return EDA_TEXT::Replace( aSearchData );
} }

View File

@ -103,7 +103,7 @@ SCH_SYMBOL::SCH_SYMBOL( const wxPoint& aPos, SCH_ITEM* aParent ) :
SCH_SYMBOL::SCH_SYMBOL( const LIB_SYMBOL& aSymbol, const LIB_ID& aLibId, SCH_SYMBOL::SCH_SYMBOL( const LIB_SYMBOL& aSymbol, const LIB_ID& aLibId,
const SCH_SHEET_PATH* aSheet, int unit, int convert, const wxPoint& pos ) : const SCH_SHEET_PATH* aSheet, int unit, int convert, const wxPoint& pos ) :
SCH_ITEM( NULL, SCH_SYMBOL_T ) SCH_ITEM( nullptr, SCH_SYMBOL_T )
{ {
Init( pos ); Init( pos );
@ -741,7 +741,7 @@ SCH_FIELD* SCH_SYMBOL::FindField( const wxString& aFieldName, bool aIncludeDefau
return &m_fields[i]; return &m_fields[i];
} }
return NULL; return nullptr;
} }
@ -881,7 +881,7 @@ std::vector<SCH_PIN*> SCH_SYMBOL::GetPins( const SCH_SHEET_PATH* aSheet ) const
void SCH_SYMBOL::SwapData( SCH_ITEM* aItem ) void SCH_SYMBOL::SwapData( SCH_ITEM* aItem )
{ {
wxCHECK_RET( (aItem != NULL) && (aItem->Type() == SCH_SYMBOL_T), wxCHECK_RET( (aItem != nullptr) && (aItem->Type() == SCH_SYMBOL_T),
wxT( "Cannot swap data with invalid symbol." ) ); wxT( "Cannot swap data with invalid symbol." ) );
SCH_SYMBOL* symbol = (SCH_SYMBOL*) aItem; SCH_SYMBOL* symbol = (SCH_SYMBOL*) aItem;
@ -1570,7 +1570,7 @@ bool SCH_SYMBOL::UpdateDanglingState( std::vector<DANGLING_END_ITEM>& aItemList,
wxPoint SCH_SYMBOL::GetPinPhysicalPosition( const LIB_PIN* Pin ) const wxPoint SCH_SYMBOL::GetPinPhysicalPosition( const LIB_PIN* Pin ) const
{ {
wxCHECK_MSG( Pin != NULL && Pin->Type() == LIB_PIN_T, wxPoint( 0, 0 ), wxCHECK_MSG( Pin != nullptr && Pin->Type() == LIB_PIN_T, wxPoint( 0, 0 ),
wxT( "Cannot get physical position of pin." ) ); wxT( "Cannot get physical position of pin." ) );
return m_transform.TransformCoordinate( Pin->GetPosition() ) + m_pos; return m_transform.TransformCoordinate( Pin->GetPosition() ) + m_pos;
@ -1611,7 +1611,7 @@ LIB_ITEM* SCH_SYMBOL::GetDrawItem( const wxPoint& aPosition, KICAD_T aType )
return m_part->LocateDrawItem( m_unit, m_convert, aType, libPosition, m_transform ); return m_part->LocateDrawItem( m_unit, m_convert, aType, libPosition, m_transform );
} }
return NULL; return nullptr;
} }

View File

@ -78,7 +78,7 @@ extern std::string toUTFTildaText( const wxString& txt );
class SCH_SYMBOL : public SCH_ITEM class SCH_SYMBOL : public SCH_ITEM
{ {
public: public:
SCH_SYMBOL( const wxPoint& pos = wxPoint( 0, 0 ), SCH_ITEM* aParent = NULL ); SCH_SYMBOL( const wxPoint& pos = wxPoint( 0, 0 ), SCH_ITEM* aParent = nullptr );
/** /**
* Create schematic symbol from library symbol object. * Create schematic symbol from library symbol object.

View File

@ -87,6 +87,7 @@ bool IncrementLabelMember( wxString& name, int aIncrement )
return true; return true;
} }
} }
return false; return false;
} }
@ -200,7 +201,7 @@ LABEL_SPIN_STYLE LABEL_SPIN_STYLE::MirrorY()
SCH_TEXT::SCH_TEXT( const wxPoint& pos, const wxString& text, KICAD_T aType ) : SCH_TEXT::SCH_TEXT( const wxPoint& pos, const wxString& text, KICAD_T aType ) :
SCH_ITEM( NULL, aType ), SCH_ITEM( nullptr, aType ),
EDA_TEXT( text ), EDA_TEXT( text ),
m_shape( PINSHEETLABEL_SHAPE::PS_INPUT ), m_shape( PINSHEETLABEL_SHAPE::PS_INPUT ),
m_isDangling( false ), m_isDangling( false ),
@ -792,6 +793,7 @@ void SCH_TEXT::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, MSG_PANEL_ITEMS& aList )
} }
} }
#if defined(DEBUG) #if defined(DEBUG)
void SCH_TEXT::Show( int nestLevel, std::ostream& os ) const void SCH_TEXT::Show( int nestLevel, std::ostream& os ) const
@ -969,7 +971,7 @@ SEARCH_RESULT SCH_GLOBALLABEL::Visit( INSPECTOR aInspector, void* testData,
// If caller wants to inspect my type // If caller wants to inspect my type
if( stype == SCH_LOCATE_ANY_T || stype == Type() ) if( stype == SCH_LOCATE_ANY_T || stype == Type() )
{ {
if( SEARCH_RESULT::QUIT == aInspector( this, NULL ) ) if( SEARCH_RESULT::QUIT == aInspector( this, nullptr ) )
return SEARCH_RESULT::QUIT; return SEARCH_RESULT::QUIT;
} }

View File

@ -51,7 +51,7 @@
class SCH_FIELD_VALIDATOR : public wxTextValidator class SCH_FIELD_VALIDATOR : public wxTextValidator
{ {
public: public:
SCH_FIELD_VALIDATOR( bool aIsLibEditor, int aFieldId, wxString* aValue = NULL ); SCH_FIELD_VALIDATOR( bool aIsLibEditor, int aFieldId, wxString* aValue = nullptr );
SCH_FIELD_VALIDATOR( const SCH_FIELD_VALIDATOR& aValidator ); SCH_FIELD_VALIDATOR( const SCH_FIELD_VALIDATOR& aValidator );

View File

@ -85,7 +85,7 @@ public:
void OnSimStateChange( SPICE_SIMULATOR* aObject, SIM_STATE aNewState ) override void OnSimStateChange( SPICE_SIMULATOR* aObject, SIM_STATE aNewState ) override
{ {
wxCommandEvent* event = NULL; wxCommandEvent* event = nullptr;
switch( aNewState ) switch( aNewState )
{ {
@ -339,8 +339,7 @@ void SIM_PLOT_FRAME::initWorkbook()
void SIM_PLOT_FRAME::updateTitle() void SIM_PLOT_FRAME::updateTitle()
{ {
wxFileName filename = Prj().AbsolutePath( wxFileName filename = Prj().AbsolutePath( m_simulator->Settings()->GetWorkbookFilename() );
m_simulator->Settings()->GetWorkbookFilename() );
bool readOnly = false; bool readOnly = false;
bool unsaved = false; bool unsaved = false;
@ -818,7 +817,7 @@ void SIM_PLOT_FRAME::updateSignalList()
wxMemoryDC bmDC; wxMemoryDC bmDC;
const int isize = bmDC.GetCharHeight(); const int isize = bmDC.GetCharHeight();
if( m_signalsIconColorList == NULL ) if( m_signalsIconColorList == nullptr )
m_signalsIconColorList = new wxImageList( isize, isize, false ); m_signalsIconColorList = new wxImageList( isize, isize, false );
else else
m_signalsIconColorList->RemoveAll(); m_signalsIconColorList->RemoveAll();
@ -1068,6 +1067,7 @@ bool SIM_PLOT_FRAME::saveWorkbook( const wxString& aPath )
return res; return res;
} }
SIM_PLOT_TYPE SIM_PLOT_FRAME::getXAxisType( SIM_TYPE aType ) const SIM_PLOT_TYPE SIM_PLOT_FRAME::getXAxisType( SIM_TYPE aType ) const
{ {
switch( aType ) switch( aType )
@ -1545,14 +1545,14 @@ void SIM_PLOT_FRAME::onShowNetlist( wxCommandEvent& event )
sizer->Add( text, 1, wxEXPAND ); sizer->Add( text, 1, wxEXPAND );
SetSizer( sizer ); SetSizer( sizer );
Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( NETLIST_VIEW_DIALOG::onClose ), NULL, Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( NETLIST_VIEW_DIALOG::onClose ),
this ); nullptr, this );
finishDialogSettings(); finishDialogSettings();
} }
}; };
if( m_schematicFrame == NULL || m_simulator == NULL ) if( m_schematicFrame == nullptr || m_simulator == nullptr )
return; return;
NETLIST_VIEW_DIALOG dlg( this, m_simulator->GetNetlist() ); NETLIST_VIEW_DIALOG dlg( this, m_simulator->GetNetlist() );
@ -1793,7 +1793,7 @@ SIM_PLOT_FRAME::SIGNAL_CONTEXT_MENU::SIGNAL_CONTEXT_MENU( const wxString& aSigna
AddMenuItem( this, SHOW_CURSOR, _( "Show Cursor" ), KiBitmap( BITMAPS::pcb_target ) ); AddMenuItem( this, SHOW_CURSOR, _( "Show Cursor" ), KiBitmap( BITMAPS::pcb_target ) );
Connect( wxEVT_COMMAND_MENU_SELECTED, wxMenuEventHandler( SIGNAL_CONTEXT_MENU::onMenuEvent ), Connect( wxEVT_COMMAND_MENU_SELECTED, wxMenuEventHandler( SIGNAL_CONTEXT_MENU::onMenuEvent ),
NULL, this ); nullptr, this );
} }

View File

@ -452,7 +452,7 @@ void SIM_PLOT_PANEL::UpdateTraceStyle( TRACE* trace )
bool SIM_PLOT_PANEL::addTrace( const wxString& aName, int aPoints, const double* aX, bool SIM_PLOT_PANEL::addTrace( const wxString& aName, int aPoints, const double* aX,
const double* aY, SIM_PLOT_TYPE aType, const wxString& aParam ) const double* aY, SIM_PLOT_TYPE aType, const wxString& aParam )
{ {
TRACE* trace = NULL; TRACE* trace = nullptr;
wxString name = aName; wxString name = aName;
if( aType & SPT_AC_MAG ) if( aType & SPT_AC_MAG )
@ -601,7 +601,7 @@ void SIM_PLOT_PANEL::EnableCursor( const wxString& aName, bool aEnable )
else else
{ {
CURSOR* c = t->GetCursor(); CURSOR* c = t->GetCursor();
t->SetCursor( NULL ); t->SetCursor( nullptr );
m_plotWin->DelLayer( c, true ); m_plotWin->DelLayer( c, true );
} }

View File

@ -219,7 +219,7 @@ public:
{ {
auto trace = m_traces.find( aName ); auto trace = m_traces.find( aName );
return trace == m_traces.end() ? NULL : trace->second; return trace == m_traces.end() ? nullptr : trace->second;
} }
void ShowGrid( bool aEnable ) void ShowGrid( bool aEnable )
@ -270,10 +270,10 @@ public:
///< Returns true if the trace has cursor shown. ///< Returns true if the trace has cursor shown.
bool HasCursorEnabled( const wxString& aName ) const; bool HasCursorEnabled( const wxString& aName ) const;
///< Toggles cursor for a particular trace. ///< Toggle cursor for a particular trace.
void EnableCursor( const wxString& aName, bool aEnable ); void EnableCursor( const wxString& aName, bool aEnable );
///< Resets scale ranges to fit the current traces ///< Reset scale ranges to fit the current traces.
void ResetScales(); void ResetScales();
///< Update trace line style ///< Update trace line style

View File

@ -129,7 +129,7 @@ void SYMBOL_EDIT_FRAME::ExportSymbol()
fn = dlg.GetPath(); fn = dlg.GetPath();
fn.MakeAbsolute(); fn.MakeAbsolute();
LIB_SYMBOL* old_symbol = NULL; LIB_SYMBOL* old_symbol = nullptr;
SCH_IO_MGR::SCH_FILE_T pluginType = SCH_IO_MGR::GuessPluginTypeFromLibPath( fn.GetFullPath() ); SCH_IO_MGR::SCH_FILE_T pluginType = SCH_IO_MGR::GuessPluginTypeFromLibPath( fn.GetFullPath() );
SCH_PLUGIN::SCH_PLUGIN_RELEASER pi( SCH_IO_MGR::FindPlugin( pluginType ) ); SCH_PLUGIN::SCH_PLUGIN_RELEASER pi( SCH_IO_MGR::FindPlugin( pluginType ) );

View File

@ -126,7 +126,7 @@ public:
* a row is not found in this table. No ownership is * a row is not found in this table. No ownership is
* taken of aFallBackTable. * taken of aFallBackTable.
*/ */
SYMBOL_LIB_TABLE( SYMBOL_LIB_TABLE* aFallBackTable = NULL ); SYMBOL_LIB_TABLE( SYMBOL_LIB_TABLE* aFallBackTable = nullptr );
/** /**
* Return an SYMBOL_LIB_TABLE_ROW if \a aNickName is found in this table or in any chained * Return an SYMBOL_LIB_TABLE_ROW if \a aNickName is found in this table or in any chained

View File

@ -253,7 +253,7 @@ public:
* Save or load the names of the currently configured symbol libraries (without paths). * Save or load the names of the currently configured symbol libraries (without paths).
*/ */
static void LibNamesAndPaths( PROJECT* aProject, bool doSave, static void LibNamesAndPaths( PROJECT* aProject, bool doSave,
wxString* aPaths, wxArrayString* aNames=NULL ); wxString* aPaths, wxArrayString* aNames = nullptr );
/** /**
* Return the name of the cache library after potentially fixing it from * Return the name of the cache library after potentially fixing it from

View File

@ -154,10 +154,10 @@ SYMBOL_VIEWER_FRAME::SYMBOL_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAM
ReCreateMenuBar(); ReCreateMenuBar();
m_libList = new wxListBox( this, ID_LIBVIEW_LIB_LIST, wxDefaultPosition, wxDefaultSize, m_libList = new wxListBox( this, ID_LIBVIEW_LIB_LIST, wxDefaultPosition, wxDefaultSize,
0, NULL, wxLB_HSCROLL | wxNO_BORDER ); 0, nullptr, wxLB_HSCROLL | wxNO_BORDER );
m_symbolList = new wxListBox( this, ID_LIBVIEW_SYM_LIST, wxDefaultPosition, wxDefaultSize, m_symbolList = new wxListBox( this, ID_LIBVIEW_SYM_LIST, wxDefaultPosition, wxDefaultSize,
0, NULL, wxLB_HSCROLL | wxNO_BORDER ); 0, nullptr, wxLB_HSCROLL | wxNO_BORDER );
if( aLibraryName.empty() ) if( aLibraryName.empty() )
{ {
@ -178,13 +178,15 @@ SYMBOL_VIEWER_FRAME::SYMBOL_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAM
m_auimgr.SetManagedWindow( this ); m_auimgr.SetManagedWindow( this );
// Manage main toolbar // Manage main toolbar
m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" ).Top().Layer(6) ); m_auimgr.AddPane( m_mainToolBar, EDA_PANE().HToolbar().Name( "MainToolbar" ).Top().Layer( 6 ) );
m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" ).Bottom().Layer(6) ); m_auimgr.AddPane( m_messagePanel, EDA_PANE().Messages().Name( "MsgPanel" )
.Bottom().Layer( 6 ) );
m_auimgr.AddPane( m_libList, EDA_PANE().Palette().Name( "Libraries" ).Left().Layer(3) m_auimgr.AddPane( m_libList, EDA_PANE().Palette().Name( "Libraries" ).Left().Layer(3)
.CaptionVisible( false ).MinSize( 80, -1 ).BestSize( m_libListWidth, -1 ) ); .CaptionVisible( false ).MinSize( 80, -1 ).BestSize( m_libListWidth, -1 ) );
m_auimgr.AddPane( m_symbolList, EDA_PANE().Palette().Name( "Symbols" ).Left().Layer(1) m_auimgr.AddPane( m_symbolList, EDA_PANE().Palette().Name( "Symbols" ).Left().Layer(1)
.CaptionVisible( false ).MinSize( 80, -1 ).BestSize( m_symbolListWidth, -1 ) ); .CaptionVisible( false ).MinSize( 80, -1 )
.BestSize( m_symbolListWidth, -1 ) );
m_auimgr.AddPane( GetCanvas(), EDA_PANE().Canvas().Name( "DrawFrame" ).Center() ); m_auimgr.AddPane( GetCanvas(), EDA_PANE().Canvas().Name( "DrawFrame" ).Center() );
@ -208,7 +210,7 @@ SYMBOL_VIEWER_FRAME::SYMBOL_VIEWER_FRAME( KIWAY* aKiway, wxWindow* aParent, FRAM
double max_size_x = Millimeter2iu( 450 ); double max_size_x = Millimeter2iu( 450 );
double max_size_y = Millimeter2iu( 450 ); double max_size_y = Millimeter2iu( 450 );
BOX2D bbox; BOX2D bbox;
bbox.SetOrigin( -max_size_x /2, -max_size_y/2 ); bbox.SetOrigin( -max_size_x / 2, -max_size_y / 2 );
bbox.SetSize( max_size_x, max_size_y ); bbox.SetSize( max_size_x, max_size_y );
GetCanvas()->GetView()->SetBoundary( bbox ); GetCanvas()->GetView()->SetBoundary( bbox );
GetToolManager()->RunAction( ACTIONS::zoomFitScreen, true ); GetToolManager()->RunAction( ACTIONS::zoomFitScreen, true );
@ -466,7 +468,9 @@ void SYMBOL_VIEWER_FRAME::onUpdateUnitChoice( wxUpdateUIEvent& aEvent )
m_unitChoice->SetSelection( std::max( 0, m_unit - 1 ) ); m_unitChoice->SetSelection( std::max( 0, m_unit - 1 ) );
} }
else if( m_unitChoice->GetCount() ) else if( m_unitChoice->GetCount() )
{
m_unitChoice->Clear(); m_unitChoice->Clear();
}
} }
@ -544,7 +548,7 @@ bool SYMBOL_VIEWER_FRAME::ReCreateLibList()
bool SYMBOL_VIEWER_FRAME::ReCreateSymbolList() bool SYMBOL_VIEWER_FRAME::ReCreateSymbolList()
{ {
if( m_symbolList == NULL ) if( m_symbolList == nullptr )
return false; return false;
wxArrayString aliasNames; wxArrayString aliasNames;

View File

@ -129,7 +129,7 @@ bool SCH_EDITOR_CONTROL::processCmpToFootprintLinkFile( const wxString& aFullFil
FILE* cmpFile = wxFopen( aFullFilename, wxT( "rt" ) ); FILE* cmpFile = wxFopen( aFullFilename, wxT( "rt" ) );
if( cmpFile == NULL ) if( cmpFile == nullptr )
return false; return false;
// cmpFileReader dtor will close cmpFile // cmpFileReader dtor will close cmpFile

View File

@ -74,7 +74,7 @@ VECTOR2I EE_GRID_HELPER::BestDragOrigin( const VECTOR2I &aMousePos, int aLayer,
ANCHOR* nearestOutline = nearestAnchor( aMousePos, OUTLINE, aLayer ); ANCHOR* nearestOutline = nearestAnchor( aMousePos, OUTLINE, aLayer );
ANCHOR* nearestCorner = nearestAnchor( aMousePos, CORNER, aLayer ); ANCHOR* nearestCorner = nearestAnchor( aMousePos, CORNER, aLayer );
ANCHOR* nearestOrigin = nearestAnchor( aMousePos, ORIGIN, aLayer ); ANCHOR* nearestOrigin = nearestAnchor( aMousePos, ORIGIN, aLayer );
ANCHOR* best = NULL; ANCHOR* best = nullptr;
double minDist = std::numeric_limits<double>::max(); double minDist = std::numeric_limits<double>::max();
if( nearestOrigin ) if( nearestOrigin )
@ -298,14 +298,16 @@ void EE_GRID_HELPER::computeAnchors( SCH_ITEM *aItem, const VECTOR2I &aRefPos, b
{ {
VECTOR2I possible( line->GetStartPoint().x, pt.y ); VECTOR2I possible( line->GetStartPoint().x, pt.y );
if( TestSegmentHit( wxPoint( possible ), line->GetStartPoint(), line->GetEndPoint(), 0 ) ) if( TestSegmentHit( wxPoint( possible ), line->GetStartPoint(), line->GetEndPoint(),
0 ) )
addAnchor( possible, SNAPPABLE | VERTICAL, aItem ); addAnchor( possible, SNAPPABLE | VERTICAL, aItem );
} }
else if( line->GetStartPoint().y == line->GetEndPoint().y ) else if( line->GetStartPoint().y == line->GetEndPoint().y )
{ {
VECTOR2I possible( pt.x, line->GetStartPoint().y ); VECTOR2I possible( pt.x, line->GetStartPoint().y );
if( TestSegmentHit( wxPoint( possible ), line->GetStartPoint(), line->GetEndPoint(), 0 ) ) if( TestSegmentHit( wxPoint( possible ), line->GetStartPoint(), line->GetEndPoint(),
0 ) )
addAnchor( possible, SNAPPABLE | HORIZONTAL, aItem ); addAnchor( possible, SNAPPABLE | HORIZONTAL, aItem );
} }
@ -317,7 +319,7 @@ EE_GRID_HELPER::ANCHOR* EE_GRID_HELPER::nearestAnchor( const VECTOR2I& aPos, int
int aMatchLayer ) int aMatchLayer )
{ {
double minDist = std::numeric_limits<double>::max(); double minDist = std::numeric_limits<double>::max();
ANCHOR* best = NULL; ANCHOR* best = nullptr;
for( ANCHOR& a : m_anchors ) for( ANCHOR& a : m_anchors )
{ {

View File

@ -580,7 +580,7 @@ void EE_POINT_EDITOR::updateParentItem() const
// Update the fields if we're in autoplace mode // Update the fields if we're in autoplace mode
if( sheet->GetFieldsAutoplaced() == FIELDS_AUTOPLACED_AUTO ) if( sheet->GetFieldsAutoplaced() == FIELDS_AUTOPLACED_AUTO )
sheet->AutoplaceFields( /* aScreen */ NULL, /* aManual */ false ); sheet->AutoplaceFields( /* aScreen */ nullptr, /* aManual */ false );
// Keep sheet pins attached to edges: // Keep sheet pins attached to edges:
for( SCH_SHEET_PIN* pin : sheet->GetPins() ) for( SCH_SHEET_PIN* pin : sheet->GetPins() )

View File

@ -90,7 +90,7 @@ bool SCH_DRAWING_TOOLS::Init()
EDA_RECT SCH_DRAWING_TOOLS::GetCanvasFreeAreaPixels() EDA_RECT SCH_DRAWING_TOOLS::GetCanvasFreeAreaPixels()
{ {
// calculate thearea of the canvas in pixels that create no autopan when // calculate the area of the canvas in pixels that create no autopan when
// is inside this area the mouse cursor // is inside this area the mouse cursor
wxSize canvas_size = m_frame->GetCanvas()->GetSize(); wxSize canvas_size = m_frame->GetCanvas()->GetSize();
EDA_RECT canvas_area( wxPoint( 0, 0 ), canvas_size ); EDA_RECT canvas_area( wxPoint( 0, 0 ), canvas_size );
@ -256,7 +256,7 @@ int SCH_DRAWING_TOOLS::PlaceSymbol( const TOOL_EVENT& aEvent )
controls->WarpCursor( controls->GetCursorPosition(), true ); controls->WarpCursor( controls->GetCursorPosition(), true );
else if( !canvas_area.Contains( wxPoint( newMousePos ) ) ) else if( !canvas_area.Contains( wxPoint( newMousePos ) ) )
// The mouse is outside the canvas area, after closing the dialog, // The mouse is outside the canvas area, after closing the dialog,
// thus can creating autopan issues. Warp the mouse to the canvas centre // thus can creating autopan issues. Warp the mouse to the canvas center
controls->WarpCursor( canvas_area.Centre(), false ); controls->WarpCursor( canvas_area.Centre(), false );
LIB_SYMBOL* libSymbol = sel.LibId.IsValid() ? LIB_SYMBOL* libSymbol = sel.LibId.IsValid() ?
@ -275,7 +275,7 @@ int SCH_DRAWING_TOOLS::PlaceSymbol( const TOOL_EVENT& aEvent )
else else
{ {
if( m_frame->eeconfig()->m_AutoplaceFields.enable ) if( m_frame->eeconfig()->m_AutoplaceFields.enable )
symbol->AutoplaceFields( /* aScreen */ NULL, /* aManual */ false ); symbol->AutoplaceFields( /* aScreen */ nullptr, /* aManual */ false );
symbol->ClearEditFlags(); symbol->ClearEditFlags();
@ -501,7 +501,7 @@ int SCH_DRAWING_TOOLS::PlaceImage( const TOOL_EVENT& aEvent )
controls->WarpCursor( controls->GetCursorPosition(), true ); controls->WarpCursor( controls->GetCursorPosition(), true );
else if( !canvas_area.Contains( wxPoint( newMousePos ) ) ) else if( !canvas_area.Contains( wxPoint( newMousePos ) ) )
// The mouse is outside the canvas area, after closing the dialog, // The mouse is outside the canvas area, after closing the dialog,
// thus can creating autopan issues. Warp the mouse to the canvas centre // thus can creating autopan issues. Warp the mouse to the canvas center
controls->WarpCursor( canvas_area.Centre(), false ); controls->WarpCursor( canvas_area.Centre(), false );
cursorPos = controls->GetMousePosition( true ); cursorPos = controls->GetMousePosition( true );
@ -1175,9 +1175,7 @@ int SCH_DRAWING_TOOLS::TwoClickPlace( const TOOL_EVENT& aEvent )
controls->SetCursorPosition( cursorPos, false ); controls->SetCursorPosition( cursorPos, false );
} }
else // ... and second click places:
// ... and second click places:
else
{ {
item->ClearFlags( IS_MOVING ); item->ClearFlags( IS_MOVING );
m_frame->AddItemToScreenAndUndoList( m_frame->GetScreen(), (SCH_ITEM*) item, m_frame->AddItemToScreenAndUndoList( m_frame->GetScreen(), (SCH_ITEM*) item,
@ -1336,7 +1334,7 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
sheet = new SCH_SHEET( m_frame->GetCurrentSheet().Last(), sheet = new SCH_SHEET( m_frame->GetCurrentSheet().Last(),
static_cast<wxPoint>( cursorPos ) ); static_cast<wxPoint>( cursorPos ) );
sheet->SetFlags( IS_NEW | IS_RESIZING ); sheet->SetFlags( IS_NEW | IS_RESIZING );
sheet->SetScreen( NULL ); sheet->SetScreen( nullptr );
sheet->SetBorderWidth( cfg->m_Drawing.default_line_thickness ); sheet->SetBorderWidth( cfg->m_Drawing.default_line_thickness );
sheet->SetBorderColor( cfg->m_Drawing.default_sheet_border_color ); sheet->SetBorderColor( cfg->m_Drawing.default_sheet_border_color );
sheet->SetBackgroundColor( cfg->m_Drawing.default_sheet_background_color ); sheet->SetBackgroundColor( cfg->m_Drawing.default_sheet_background_color );
@ -1376,7 +1374,7 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
if( m_frame->EditSheetProperties( static_cast<SCH_SHEET*>( sheet ), if( m_frame->EditSheetProperties( static_cast<SCH_SHEET*>( sheet ),
&m_frame->GetCurrentSheet(), nullptr ) ) &m_frame->GetCurrentSheet(), nullptr ) )
{ {
sheet->AutoplaceFields( /* aScreen */ NULL, /* aManual */ false ); sheet->AutoplaceFields( /* aScreen */ nullptr, /* aManual */ false );
m_frame->AddItemToScreenAndUndoList( m_frame->GetScreen(), sheet, false ); m_frame->AddItemToScreenAndUndoList( m_frame->GetScreen(), sheet, false );
m_frame->UpdateHierarchyNavigator(); m_frame->UpdateHierarchyNavigator();

View File

@ -288,7 +288,7 @@ int SYMBOL_EDITOR_EDIT_TOOL::DoDelete( const TOOL_EVENT& aEvent )
wxString name = pin->GetName(); wxString name = pin->GetName();
LIB_PIN* next_pin = symbol->GetNextPin(); LIB_PIN* next_pin = symbol->GetNextPin();
while( next_pin != NULL ) while( next_pin != nullptr )
{ {
pin = next_pin; pin = next_pin;
next_pin = symbol->GetNextPin( pin ); next_pin = symbol->GetNextPin( pin );
@ -468,7 +468,7 @@ int SYMBOL_EDITOR_EDIT_TOOL::Properties( const TOOL_EVENT& aEvent )
void SYMBOL_EDITOR_EDIT_TOOL::editGraphicProperties( LIB_ITEM* aItem ) void SYMBOL_EDITOR_EDIT_TOOL::editGraphicProperties( LIB_ITEM* aItem )
{ {
if( aItem == NULL ) if( aItem == nullptr )
return; return;
DIALOG_LIB_EDIT_DRAW_ITEM dlg( m_frame, aItem ); DIALOG_LIB_EDIT_DRAW_ITEM dlg( m_frame, aItem );
@ -492,7 +492,7 @@ void SYMBOL_EDITOR_EDIT_TOOL::editGraphicProperties( LIB_ITEM* aItem )
void SYMBOL_EDITOR_EDIT_TOOL::editTextProperties( LIB_ITEM* aItem ) void SYMBOL_EDITOR_EDIT_TOOL::editTextProperties( LIB_ITEM* aItem )
{ {
if ( ( aItem == NULL ) || ( aItem->Type() != LIB_TEXT_T ) ) if ( ( aItem == nullptr ) || ( aItem->Type() != LIB_TEXT_T ) )
return; return;
DIALOG_LIB_EDIT_TEXT dlg( m_frame, (LIB_TEXT*) aItem ); DIALOG_LIB_EDIT_TEXT dlg( m_frame, (LIB_TEXT*) aItem );
@ -508,7 +508,7 @@ void SYMBOL_EDITOR_EDIT_TOOL::editTextProperties( LIB_ITEM* aItem )
void SYMBOL_EDITOR_EDIT_TOOL::editFieldProperties( LIB_FIELD* aField ) void SYMBOL_EDITOR_EDIT_TOOL::editFieldProperties( LIB_FIELD* aField )
{ {
if( aField == NULL ) if( aField == nullptr )
return; return;
wxString caption; wxString caption;

View File

@ -1,8 +1,8 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2010 Wayne Stambaugh <stambaughw@verizon.net> * Copyright (C) 2010 Wayne Stambaugh <stambaughw@gmail.com>
* Copyright (C) 2015-2017 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 2015-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -53,10 +53,8 @@ EDA_RECT TRANSFORM::TransformCoordinate( const EDA_RECT& aRect ) const
return rect; return rect;
} }
/*
* Calculate the Inverse mirror/rotation transform. TRANSFORM TRANSFORM::InverseTransform() const
*/
TRANSFORM TRANSFORM::InverseTransform( ) const
{ {
int invx1; int invx1;
int invx2; int invx2;
@ -64,9 +62,9 @@ TRANSFORM TRANSFORM::InverseTransform( ) const
int invy2; int invy2;
/* Calculates the inverse matrix coeffs: /* Calculates the inverse matrix coeffs:
* for a matrix m{x1, x2, y1, y2} * for a matrix m{x1, x2, y1, y2}
* the inverse matrix is 1/(x1*y2 -x2*y1) m{y2,-x2,-y1,x1) * the inverse matrix is 1/(x1*y2 -x2*y1) m{y2,-x2,-y1,x1)
*/ */
int det = x1*y2 -x2*y1; // Is never null, because the inverse matrix exists int det = x1*y2 -x2*y1; // Is never null, because the inverse matrix exists
invx1 = y2/det; invx1 = y2/det;
invx2 = -x2/det; invx2 = -x2/det;
@ -80,7 +78,7 @@ TRANSFORM TRANSFORM::InverseTransform( ) const
bool TRANSFORM::MapAngles( int* aAngle1, int* aAngle2 ) const bool TRANSFORM::MapAngles( int* aAngle1, int* aAngle2 ) const
{ {
wxCHECK_MSG( aAngle1 != NULL && aAngle2 != NULL, false, wxCHECK_MSG( aAngle1 != nullptr && aAngle2 != nullptr, false,
wxT( "Cannot map NULL point angles." ) ); wxT( "Cannot map NULL point angles." ) );
int Angle, Delta; int Angle, Delta;
@ -88,6 +86,7 @@ bool TRANSFORM::MapAngles( int* aAngle1, int* aAngle2 ) const
bool swap = false; bool swap = false;
Delta = *aAngle2 - *aAngle1; Delta = *aAngle2 - *aAngle1;
if( Delta >= 1800 ) if( Delta >= 1800 )
{ {
*aAngle1 -= 1; *aAngle1 -= 1;
@ -110,6 +109,7 @@ bool TRANSFORM::MapAngles( int* aAngle1, int* aAngle2 ) const
NORMALIZE_ANGLE_POS( *aAngle1 ); NORMALIZE_ANGLE_POS( *aAngle1 );
NORMALIZE_ANGLE_POS( *aAngle2 ); NORMALIZE_ANGLE_POS( *aAngle2 );
if( *aAngle2 < *aAngle1 ) if( *aAngle2 < *aAngle1 )
*aAngle2 += 3600; *aAngle2 += 3600;
@ -121,8 +121,10 @@ bool TRANSFORM::MapAngles( int* aAngle1, int* aAngle2 ) const
NORMALIZE_ANGLE_POS( *aAngle1 ); NORMALIZE_ANGLE_POS( *aAngle1 );
NORMALIZE_ANGLE_POS( *aAngle2 ); NORMALIZE_ANGLE_POS( *aAngle2 );
if( *aAngle2 < *aAngle1 ) if( *aAngle2 < *aAngle1 )
*aAngle2 += 3600; *aAngle2 += 3600;
swap = true; swap = true;
} }

View File

@ -2,6 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2015 Simon Richter <Simon.Richter@hogyros.de> * Copyright (C) 2015 Simon Richter <Simon.Richter@hogyros.de>
* Copyright (C) 2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -35,15 +36,15 @@ public:
/// @todo C++11: replace with forwarder /// @todo C++11: replace with forwarder
PinShapeComboBox( wxWindow* parent, PinShapeComboBox( wxWindow* parent,
wxWindowID id = wxID_ANY, wxWindowID id = wxID_ANY,
const wxString& value = wxEmptyString, const wxString& value = wxEmptyString,
const wxPoint& pos = wxDefaultPosition, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, const wxSize& size = wxDefaultSize,
int n = 0, int n = 0,
const wxString choices[] = NULL, const wxString choices[] = nullptr,
long style = 0, long style = 0,
const wxValidator& validator = wxDefaultValidator, const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxBitmapComboBoxNameStr ); const wxString& name = wxBitmapComboBoxNameStr );
GRAPHIC_PINSHAPE GetPinShapeSelection(); GRAPHIC_PINSHAPE GetPinShapeSelection();
void SetSelection( GRAPHIC_PINSHAPE aShape ); void SetSelection( GRAPHIC_PINSHAPE aShape );

View File

@ -2,6 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2015 Simon Richter <Simon.Richter@hogyros.de> * Copyright (C) 2015 Simon Richter <Simon.Richter@hogyros.de>
* Copyright (C) 2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -36,15 +37,15 @@ public:
/// @todo C++11: replace with forwarder /// @todo C++11: replace with forwarder
PinTypeComboBox( wxWindow* parent, PinTypeComboBox( wxWindow* parent,
wxWindowID id = wxID_ANY, wxWindowID id = wxID_ANY,
const wxString& value = wxEmptyString, const wxString& value = wxEmptyString,
const wxPoint& pos = wxDefaultPosition, const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize, const wxSize& size = wxDefaultSize,
int n = 0, int n = 0,
const wxString choices[] = NULL, const wxString choices[] = nullptr,
long style = 0, long style = 0,
const wxValidator& validator = wxDefaultValidator, const wxValidator& validator = wxDefaultValidator,
const wxString& name = wxBitmapComboBoxNameStr ); const wxString& name = wxBitmapComboBoxNameStr );
ELECTRICAL_PINTYPE GetPinTypeSelection(); ELECTRICAL_PINTYPE GetPinTypeSelection();
void SetSelection( ELECTRICAL_PINTYPE aType ); void SetSelection( ELECTRICAL_PINTYPE aType );

View File

@ -60,7 +60,7 @@ SYMBOL_PREVIEW_WIDGET::SYMBOL_PREVIEW_WIDGET( wxWindow* aParent, KIWAY& aKiway,
// Do not display the grid: the look is not good for a small canvas area. // Do not display the grid: the look is not good for a small canvas area.
// But mainly, due to some strange bug I (JPC) was unable to fix, the grid creates // But mainly, due to some strange bug I (JPC) was unable to fix, the grid creates
// strange artifacts on Windows when eeschema is run from Kicad manager (but not in // strange artifacts on Windows when Eeschema is run from KiCad manager (but not in
// stand alone...). // stand alone...).
m_preview->GetGAL()->SetGridVisibility( false ); m_preview->GetGAL()->SetGridVisibility( false );
@ -105,7 +105,7 @@ SYMBOL_PREVIEW_WIDGET::SYMBOL_PREVIEW_WIDGET( wxWindow* aParent, KIWAY& aKiway,
SetSizer( m_outerSizer ); SetSizer( m_outerSizer );
Layout(); Layout();
Connect( wxEVT_SIZE, wxSizeEventHandler( SYMBOL_PREVIEW_WIDGET::onSize ), NULL, this ); Connect( wxEVT_SIZE, wxSizeEventHandler( SYMBOL_PREVIEW_WIDGET::onSize ), nullptr, this );
} }
@ -206,7 +206,7 @@ void SYMBOL_PREVIEW_WIDGET::DisplaySymbol( const LIB_ID& aSymbolID, int aUnit, i
view->Add( m_previewItem ); view->Add( m_previewItem );
// Get the symbole size, in internal units // Get the symbol size, in internal units
m_itemBBox = m_previewItem->GetUnitBoundingBox( settings->m_ShowUnit, m_itemBBox = m_previewItem->GetUnitBoundingBox( settings->m_ShowUnit,
settings->m_ShowConvert ); settings->m_ShowConvert );
@ -241,7 +241,9 @@ void SYMBOL_PREVIEW_WIDGET::DisplayPart( LIB_SYMBOL* aSymbol, int aUnit, int aCo
m_previewItem = new LIB_SYMBOL( *aSymbol ); m_previewItem = new LIB_SYMBOL( *aSymbol );
// For symbols having a De Morgan body style, use the first style // For symbols having a De Morgan body style, use the first style
auto settings = static_cast<KIGFX::SCH_RENDER_SETTINGS*>( view->GetPainter()->GetSettings() ); auto settings =
static_cast<KIGFX::SCH_RENDER_SETTINGS*>( view->GetPainter()->GetSettings() );
// If unit isn't specified for a multi-unit part, pick the first. (Otherwise we'll // If unit isn't specified for a multi-unit part, pick the first. (Otherwise we'll
// draw all of them.) // draw all of them.)
settings->m_ShowUnit = ( m_previewItem->IsMulti() && aUnit == 0 ) ? 1 : aUnit; settings->m_ShowUnit = ( m_previewItem->IsMulti() && aUnit == 0 ) ? 1 : aUnit;
@ -251,7 +253,7 @@ void SYMBOL_PREVIEW_WIDGET::DisplayPart( LIB_SYMBOL* aSymbol, int aUnit, int aCo
view->Add( m_previewItem ); view->Add( m_previewItem );
// Get the symbole size, in internal units // Get the symbol size, in internal units
m_itemBBox = aSymbol->GetUnitBoundingBox( settings->m_ShowUnit, settings->m_ShowConvert ); m_itemBBox = aSymbol->GetUnitBoundingBox( settings->m_ShowUnit, settings->m_ShowConvert );
// Calculate the draw scale to fit the drawing area // Calculate the draw scale to fit the drawing area

View File

@ -53,7 +53,7 @@ TUNER_SLIDER::TUNER_SLIDER( SIM_PLOT_FRAME* aFrame, wxWindow* aParent, SCH_SYMBO
updateSlider(); updateSlider();
m_simTimer.SetOwner( this ); m_simTimer.SetOwner( this );
Connect( wxEVT_TIMER, wxTimerEventHandler( TUNER_SLIDER::onSimTimer ), NULL, this ); Connect( wxEVT_TIMER, wxTimerEventHandler( TUNER_SLIDER::onSimTimer ), nullptr, this );
} }
@ -201,7 +201,7 @@ void TUNER_SLIDER::onMinTextEnter( wxCommandEvent& event )
void TUNER_SLIDER::onSimTimer( wxTimerEvent& event ) void TUNER_SLIDER::onSimTimer( wxTimerEvent& event )
{ {
if(m_changed) if( m_changed )
{ {
wxQueueEvent( m_frame, new wxCommandEvent( EVT_SIM_UPDATE ) ); wxQueueEvent( m_frame, new wxCommandEvent( EVT_SIM_UPDATE ) );
m_changed = false; m_changed = false;

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2010-2014 Jean-Pierre Charras jp.charras at wanadoo.fr * Copyright (C) 2010-2014 Jean-Pierre Charras jp.charras at wanadoo.fr
* Copyright (C) 1992-2014 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -45,33 +45,24 @@
#include <X2_gerber_attributes.h> #include <X2_gerber_attributes.h>
#include <macros.h> #include <macros.h>
/*
* X2_ATTRIBUTE
* The attribute value consists of a number of substrings separated by a comma
*/
X2_ATTRIBUTE::X2_ATTRIBUTE() X2_ATTRIBUTE::X2_ATTRIBUTE()
{ {
} }
X2_ATTRIBUTE::~X2_ATTRIBUTE() X2_ATTRIBUTE::~X2_ATTRIBUTE()
{ {
} }
/* return the attribute name (for instance .FileFunction)
* which is given by TF command.
*/
const wxString& X2_ATTRIBUTE::GetAttribute() const wxString& X2_ATTRIBUTE::GetAttribute()
{ {
return m_Prms.Item( 0 ); return m_Prms.Item( 0 );
} }
/* return a parameter
* aIdx = the index of the parameter const wxString& X2_ATTRIBUTE::GetPrm( int aIdx )
* aIdx = 0 is the parameter read after the TF function
* (the same as GetAttribute())
*/
const wxString& X2_ATTRIBUTE::GetPrm( int aIdx)
{ {
static const wxString dummy; static const wxString dummy;
@ -81,15 +72,16 @@ const wxString& X2_ATTRIBUTE::GetPrm( int aIdx)
return dummy; return dummy;
} }
// Debug function: print using wxLogMessage the list of parameters
void X2_ATTRIBUTE::DbgListPrms() void X2_ATTRIBUTE::DbgListPrms()
{ {
wxLogMessage( wxT("prms count %d"), GetPrmCount() ); wxLogMessage( wxT( "prms count %d" ), GetPrmCount() );
for( int ii = 0; ii < GetPrmCount(); ii++ ) for( int ii = 0; ii < GetPrmCount(); ii++ )
wxLogMessage( m_Prms.Item( ii ) ); wxLogMessage( m_Prms.Item( ii ) );
} }
bool X2_ATTRIBUTE::ParseAttribCmd( FILE* aFile, char *aBuffer, int aBuffSize, char* &aText, bool X2_ATTRIBUTE::ParseAttribCmd( FILE* aFile, char *aBuffer, int aBuffSize, char* &aText,
int& aLineNum ) int& aLineNum )
{ {
@ -136,7 +128,7 @@ bool X2_ATTRIBUTE::ParseAttribCmd( FILE* aFile, char *aBuffer, int aBuffSize, ch
// end of current line, read another one. // end of current line, read another one.
if( aBuffer && aFile ) if( aBuffer && aFile )
{ {
if( fgets( aBuffer, aBuffSize, aFile ) == NULL ) if( fgets( aBuffer, aBuffSize, aFile ) == nullptr )
{ {
// end of file // end of file
ok = false; ok = false;
@ -147,27 +139,15 @@ bool X2_ATTRIBUTE::ParseAttribCmd( FILE* aFile, char *aBuffer, int aBuffSize, ch
aText = aBuffer; aText = aBuffer;
} }
else else
{
return ok; return ok;
}
} }
return ok; return ok;
} }
/*
* X2_ATTRIBUTE_FILEFUNCTION ( from %TF.FileFunction in Gerber file)
* Example file function:
* %TF.FileFunction,Copper,L1,Top*%
* - Type. Such as copper, solder mask etc.
* - Position. Specifies where the file appears in the PCB layer structure.
* Corresponding position substring:
* Copper layer: L1, L2, L3...to indicate the layer position followed by Top, Inr or
* Bot. L1 is always the top copper layer. E.g. L2,Inr.
* Extra layer, e.g. solder mask: Top or Bot - defines the attachment of the layer.
* Drill/rout layer: E.g. 1,4 - where 1 is the start and 4 is the end copper layer. The
* pair 1,4 defines the span of the drill/rout file
* Optional index. This can be used in instances where for example there are two solder
* masks on the same side. The index counts from the PCB surface outwards.
*/
X2_ATTRIBUTE_FILEFUNCTION::X2_ATTRIBUTE_FILEFUNCTION( X2_ATTRIBUTE& aAttributeBase ) X2_ATTRIBUTE_FILEFUNCTION::X2_ATTRIBUTE_FILEFUNCTION( X2_ATTRIBUTE& aAttributeBase )
: X2_ATTRIBUTE() : X2_ATTRIBUTE()
{ {
@ -181,18 +161,21 @@ X2_ATTRIBUTE_FILEFUNCTION::X2_ATTRIBUTE_FILEFUNCTION( X2_ATTRIBUTE& aAttributeBa
set_Z_Order(); set_Z_Order();
} }
const wxString& X2_ATTRIBUTE_FILEFUNCTION::GetFileType() const wxString& X2_ATTRIBUTE_FILEFUNCTION::GetFileType()
{ {
// the type of layer (Copper, Soldermask ... ) // the type of layer (Copper, Soldermask ... )
return m_Prms.Item( 1 ); return m_Prms.Item( 1 );
} }
const wxString& X2_ATTRIBUTE_FILEFUNCTION::GetBrdLayerId() const wxString& X2_ATTRIBUTE_FILEFUNCTION::GetBrdLayerId()
{ {
// the brd layer identifier: Ln (for Copper type) or Top, Bot // the brd layer identifier: Ln (for Copper type) or Top, Bot
return m_Prms.Item( 2 ); return m_Prms.Item( 2 );
} }
const wxString X2_ATTRIBUTE_FILEFUNCTION::GetDrillLayerPair() const wxString X2_ATTRIBUTE_FILEFUNCTION::GetDrillLayerPair()
{ {
// the layer pair identifiers, for drill files, i.e. // the layer pair identifiers, for drill files, i.e.
@ -201,6 +184,7 @@ const wxString X2_ATTRIBUTE_FILEFUNCTION::GetDrillLayerPair()
return lpair; return lpair;
} }
const wxString& X2_ATTRIBUTE_FILEFUNCTION::GetBrdLayerSide() const wxString& X2_ATTRIBUTE_FILEFUNCTION::GetBrdLayerSide()
{ {
if( IsCopper() ) if( IsCopper() )
@ -250,11 +234,6 @@ bool X2_ATTRIBUTE_FILEFUNCTION::IsDrillFile()
} }
// Initialize the z order priority of the current file, from its attributes
// this priority is the order of layers from top to bottom to draw/display gerber images
// Stack up is( from external copper layer to external)
// copper, then solder paste, then solder mask, then silk screen.
// and global stackup is Front (top) layers then internal copper layers then Back (bottom) layers
void X2_ATTRIBUTE_FILEFUNCTION::set_Z_Order() void X2_ATTRIBUTE_FILEFUNCTION::set_Z_Order()
{ {
m_z_order = -100; // low level m_z_order = -100; // low level
@ -266,6 +245,7 @@ void X2_ATTRIBUTE_FILEFUNCTION::set_Z_Order()
m_z_order = 0; m_z_order = 0;
wxString num = GetBrdLayerId().Mid( 1 ); wxString num = GetBrdLayerId().Mid( 1 );
long lnum; long lnum;
if( num.ToLong( &lnum ) ) if( num.ToLong( &lnum ) )
m_z_sub_order = -lnum; m_z_sub_order = -lnum;
} }

View File

@ -37,16 +37,16 @@
/** /**
* Function scaletoIU * Convert a distance given in floating point to our internal units.
* converts a distance given in floating point to our internal units
*/ */
extern int scaletoIU( double aCoord, bool isMetric ); // defined it rs274d_read_XY_and_IJ_coordinates.cpp extern int scaletoIU( double aCoord, bool isMetric );
/** /**
* Function mapPt * Translate a point from the aperture macro coordinate system to our
* translates a point from the aperture macro coordinate system to our
* deci-mils coordinate system. * deci-mils coordinate system.
* @return wxPoint - The GerbView coordinate system vector. *
* @return The GerbView coordinate system vector.
*/ */
static wxPoint mapPt( double x, double y, bool isMetric ) static wxPoint mapPt( double x, double y, bool isMetric )
{ {
@ -89,22 +89,28 @@ bool AM_PRIMITIVE::IsAMPrimitiveExposureOn( const GERBER_DRAW_ITEM* aParent ) co
} }
} }
// TODO(snh): Remove hard coded count // TODO(snh): Remove hard coded count
const int seg_per_circle = 64; // Number of segments to approximate a circle const int seg_per_circle = 64; // Number of segments to approximate a circle
void AM_PRIMITIVE::DrawBasicShape( const GERBER_DRAW_ITEM* aParent,
SHAPE_POLY_SET& aShapeBuffer, void AM_PRIMITIVE::DrawBasicShape( const GERBER_DRAW_ITEM* aParent, SHAPE_POLY_SET& aShapeBuffer,
wxPoint aShapePos ) wxPoint aShapePos )
{ {
#define TO_POLY_SHAPE { if( polybuffer.size() > 1 )\ #define TO_POLY_SHAPE \
{ aShapeBuffer.NewOutline(); \ { \
for( unsigned jj = 0; jj < polybuffer.size(); jj++ )\ if( polybuffer.size() > 1 ) \
aShapeBuffer.Append( polybuffer[jj].x, polybuffer[jj].y );\ { \
aShapeBuffer.Append( polybuffer[0].x, polybuffer[0].y );}\ aShapeBuffer.NewOutline(); \
} for( unsigned jj = 0; jj < polybuffer.size(); jj++ ) \
aShapeBuffer.Append( polybuffer[jj].x, polybuffer[jj].y ); \
aShapeBuffer.Append( polybuffer[0].x, polybuffer[0].y ); \
} \
}
// Draw the primitive shape for flashed items. // Draw the primitive shape for flashed items.
static std::vector<wxPoint> polybuffer; // create a static buffer to avoid a lot of memory reallocation // Create a static buffer to avoid a lot of memory reallocation.
static std::vector<wxPoint> polybuffer;
polybuffer.clear(); polybuffer.clear();
wxPoint curPos = aShapePos; wxPoint curPos = aShapePos;
@ -144,8 +150,8 @@ void AM_PRIMITIVE::DrawBasicShape( const GERBER_DRAW_ITEM* aParent,
} }
TO_POLY_SHAPE; TO_POLY_SHAPE;
break;
} }
break;
case AMP_LINE2: case AMP_LINE2:
case AMP_LINE20: // Line with rectangle ends. (Width, start and end pos + rotation) case AMP_LINE20: // Line with rectangle ends. (Width, start and end pos + rotation)
@ -178,8 +184,8 @@ void AM_PRIMITIVE::DrawBasicShape( const GERBER_DRAW_ITEM* aParent,
} }
TO_POLY_SHAPE; TO_POLY_SHAPE;
break;
} }
break;
case AMP_LINE_CENTER: case AMP_LINE_CENTER:
{ {
@ -210,8 +216,8 @@ void AM_PRIMITIVE::DrawBasicShape( const GERBER_DRAW_ITEM* aParent,
} }
TO_POLY_SHAPE; TO_POLY_SHAPE;
break;
} }
break;
case AMP_LINE_LOWER_LEFT: case AMP_LINE_LOWER_LEFT:
{ {
@ -238,8 +244,8 @@ void AM_PRIMITIVE::DrawBasicShape( const GERBER_DRAW_ITEM* aParent,
} }
TO_POLY_SHAPE; TO_POLY_SHAPE;
break;
} }
break;
case AMP_THERMAL: case AMP_THERMAL:
{ {
@ -248,7 +254,8 @@ void AM_PRIMITIVE::DrawBasicShape( const GERBER_DRAW_ITEM* aParent,
* type (7), center.x , center.y, outside diam, inside diam, crosshair thickness, rotation * type (7), center.x , center.y, outside diam, inside diam, crosshair thickness, rotation
* type is not stored in parameters list, so the first parameter is center.x * type is not stored in parameters list, so the first parameter is center.x
* *
* The thermal primitive is a ring (annulus) interrupted by four gaps. Exposure is always on. * The thermal primitive is a ring (annulus) interrupted by four gaps. Exposure is always
* on.
*/ */
std::vector<wxPoint> subshape_poly; std::vector<wxPoint> subshape_poly;
curPos += mapPt( params[0].GetValue( tool ), params[1].GetValue( tool ), m_GerbMetric ); curPos += mapPt( params[0].GetValue( tool ), params[1].GetValue( tool ), m_GerbMetric );
@ -290,8 +297,9 @@ void AM_PRIMITIVE::DrawBasicShape( const GERBER_DRAW_ITEM* aParent,
/* Generated by an aperture macro declaration like: /* Generated by an aperture macro declaration like:
* "6,0,0,0.125,.01,0.01,3,0.003,0.150,0" * "6,0,0,0.125,.01,0.01,3,0.003,0.150,0"
* type(6), pos.x, pos.y, diam, penwidth, gap, circlecount, crosshair thickness, crosshaire len, rotation * type(6), pos.x, pos.y, diam, penwidth, gap, circlecount, crosshair thickness,
* type is not stored in parameters list, so the first parameter is pos.x * crosshair len, rotation. The type is not stored in parameters list, so the first
* parameter is pos.x.
*/ */
int outerDiam = scaletoIU( params[2].GetValue( tool ), m_GerbMetric ); int outerDiam = scaletoIU( params[2].GetValue( tool ), m_GerbMetric );
int penThickness = scaletoIU( params[3].GetValue( tool ), m_GerbMetric ); int penThickness = scaletoIU( params[3].GetValue( tool ), m_GerbMetric );
@ -300,8 +308,9 @@ void AM_PRIMITIVE::DrawBasicShape( const GERBER_DRAW_ITEM* aParent,
// Draw circles: // Draw circles:
wxPoint center = aParent->GetABPosition( curPos ); wxPoint center = aParent->GetABPosition( curPos );
// adjust outerDiam by this on each nested circle // adjust outerDiam by this on each nested circle
int diamAdjust = (gap + penThickness) * 2; int diamAdjust = ( gap + penThickness ) * 2;
for( int i = 0; i < numCircles; ++i, outerDiam -= diamAdjust ) for( int i = 0; i < numCircles; ++i, outerDiam -= diamAdjust )
{ {
@ -327,37 +336,42 @@ void AM_PRIMITIVE::DrawBasicShape( const GERBER_DRAW_ITEM* aParent,
ConvertShapeToPolygon( aParent, polybuffer ); ConvertShapeToPolygon( aParent, polybuffer );
rotation = params[8].GetValue( tool ) * 10.0; rotation = params[8].GetValue( tool ) * 10.0;
for( unsigned ii = 0; ii < polybuffer.size(); ii++ ) for( unsigned ii = 0; ii < polybuffer.size(); ii++ )
{ {
// shape rotation: // shape rotation:
RotatePoint( &polybuffer[ii], -rotation ); RotatePoint( &polybuffer[ii], -rotation );
// Move to current position: // Move to current position:
polybuffer[ii] += curPos; polybuffer[ii] += curPos;
polybuffer[ii] = aParent->GetABPosition( polybuffer[ii] ); polybuffer[ii] = aParent->GetABPosition( polybuffer[ii] );
} }
TO_POLY_SHAPE; TO_POLY_SHAPE;
}
break; break;
}
case AMP_OUTLINE: case AMP_OUTLINE:
{ {
/* Outline, Primitive Code 4 /* Outline, Primitive Code 4
* An outline primitive is an area enclosed by an n-point polygon defined by its start point and n * An outline primitive is an area enclosed by an n-point polygon defined by its start
* subsequent points. The outline must be closed, i.e. the last point must be equal to the start * point and n
* point. There must be at least one subsequent point (to close the outline). * subsequent points. The outline must be closed, i.e. the last point must be equal to
* The outline of the primitive is actually the contour (see 2.6) that consists of linear segments * the start point. There must be at least one subsequent point (to close the outline).
* only, so it must conform to all the requirements described for contours. * The outline of the primitive is actually the contour (see 2.6) that consists of linear
* segments only, so it must conform to all the requirements described for contours.
* Warning: Make no mistake: n is the number of subsequent points, being the number of * Warning: Make no mistake: n is the number of subsequent points, being the number of
* vertices of the outline or one less than the number of coordinate pairs. * vertices of the outline or one less than the number of coordinate pairs.
*/ */
/* Generated by an aperture macro declaration like: /* Generated by an aperture macro declaration like:
* "4,1,3,0.0,0.0,0.0,0.5,0.5,0.5,0.5,0.0,-25" * "4,1,3,0.0,0.0,0.0,0.5,0.5,0.5,0.5,0.0,-25"
* type(4), exposure, corners count, corner1.x, corner.1y, ..., corner1.x, corner.1y, rotation * type(4), exposure, corners count, corner1.x, corner.1y, ..., corner1.x, corner.1y,
* rotation
* type is not stored in parameters list, so the first parameter is exposure * type is not stored in parameters list, so the first parameter is exposure
*/ */
// params[0] is the exposure and params[1] is the corners count after the first corner // params[0] is the exposure and params[1] is the corners count after the first corner
int numCorners = (int) params[1].GetValue( tool ); int numCorners = (int) params[1].GetValue( tool );
// the shape rotation is the last param of list, after corners // the shape rotation is the last param of list, after corners
int last_prm = params.size() - 1; int last_prm = params.size() - 1;
rotation = params[last_prm].GetValue( tool ) * 10.0; rotation = params[last_prm].GetValue( tool ) * 10.0;
@ -383,12 +397,12 @@ void AM_PRIMITIVE::DrawBasicShape( const GERBER_DRAW_ITEM* aParent,
if( prm_idx >= last_prm ) if( prm_idx >= last_prm )
break; break;
} }
// rotate polygon and move it to the actual position
// shape rotation: // rotate polygon and move it to the actual position shape rotation:
for( unsigned ii = 0; ii < polybuffer.size(); ii++ ) for( unsigned ii = 0; ii < polybuffer.size(); ii++ )
{ {
RotatePoint( &polybuffer[ii], -rotation ); RotatePoint( &polybuffer[ii], -rotation );
} }
// Move to current position: // Move to current position:
for( unsigned ii = 0; ii < polybuffer.size(); ii++ ) for( unsigned ii = 0; ii < polybuffer.size(); ii++ )
@ -397,14 +411,14 @@ void AM_PRIMITIVE::DrawBasicShape( const GERBER_DRAW_ITEM* aParent,
polybuffer[ii] = aParent->GetABPosition( polybuffer[ii] ); polybuffer[ii] = aParent->GetABPosition( polybuffer[ii] );
} }
break;
TO_POLY_SHAPE; TO_POLY_SHAPE;
} }
break;
case AMP_POLYGON: case AMP_POLYGON:
/* Polygon, Primitive Code 5 /* Polygon, Primitive Code 5
* A polygon primitive is a regular polygon defined by the number of vertices n, the center point * A polygon primitive is a regular polygon defined by the number of vertices n, the
* and the diameter of the circumscribed circle * center point and the diameter of the circumscribed circle
*/ */
/* Generated by an aperture macro declaration like: /* Generated by an aperture macro declaration like:
* "5,1,0.6,0,0,0.5,25" * "5,1,0.6,0,0,0.5,25"
@ -412,6 +426,7 @@ void AM_PRIMITIVE::DrawBasicShape( const GERBER_DRAW_ITEM* aParent,
* type is not stored in parameters list, so the first parameter is exposure * type is not stored in parameters list, so the first parameter is exposure
*/ */
curPos += mapPt( params[2].GetValue( tool ), params[3].GetValue( tool ), m_GerbMetric ); curPos += mapPt( params[2].GetValue( tool ), params[3].GetValue( tool ), m_GerbMetric );
// Creates the shape: // Creates the shape:
ConvertShapeToPolygon( aParent, polybuffer ); ConvertShapeToPolygon( aParent, polybuffer );
@ -439,16 +454,6 @@ void AM_PRIMITIVE::DrawBasicShape( const GERBER_DRAW_ITEM* aParent,
} }
/**
* Function ConvertShapeToPolygon (virtual)
* convert a shape to an equivalent polygon.
* Arcs and circles are approximated by segments
* Useful when a shape is not a graphic primitive (shape with hole,
* rotated shape ... ) and cannot be easily drawn.
* note for some schapes conbining circles and solid lines (rectangles), only rectangles are converted
* because circles are very easy to draw (no rotation problem) so convert them in polygons,
* and draw them as polygons is not a good idea.
*/
void AM_PRIMITIVE::ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent, void AM_PRIMITIVE::ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent,
std::vector<wxPoint>& aBuffer ) std::vector<wxPoint>& aBuffer )
{ {
@ -465,12 +470,14 @@ void AM_PRIMITIVE::ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent,
* type is not stored in parameters list, so the first parameter is exposure * type is not stored in parameters list, so the first parameter is exposure
*/ */
int radius = scaletoIU( params[1].GetValue( tool ), m_GerbMetric ) / 2; int radius = scaletoIU( params[1].GetValue( tool ), m_GerbMetric ) / 2;
// A circle primitive can have a 0 size (for instance when used in roundrect macro), // A circle primitive can have a 0 size (for instance when used in roundrect macro),
// so skip it // so skip it
if( radius <= 0 ) if( radius <= 0 )
break; break;
wxPoint center = mapPt( params[2].GetValue( tool ), params[3].GetValue( tool ), m_GerbMetric ); wxPoint center = mapPt( params[2].GetValue( tool ), params[3].GetValue( tool ),
m_GerbMetric );
wxPoint corner; wxPoint corner;
const int delta = 3600 / seg_per_circle; // rot angle in 0.1 degree const int delta = 3600 / seg_per_circle; // rot angle in 0.1 degree
@ -482,8 +489,9 @@ void AM_PRIMITIVE::ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent,
corner += center; corner += center;
aBuffer.push_back( corner ); aBuffer.push_back( corner );
} }
}
break; break;
}
case AMP_LINE2: case AMP_LINE2:
case AMP_LINE20: // Line with rectangle ends. (Width, start and end pos + rotation) case AMP_LINE20: // Line with rectangle ends. (Width, start and end pos + rotation)
@ -516,13 +524,16 @@ void AM_PRIMITIVE::ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent,
RotatePoint( &aBuffer[ii], -angle ); RotatePoint( &aBuffer[ii], -angle );
aBuffer[ii] += start; aBuffer[ii] += start;
} }
}
break; break;
}
case AMP_LINE_CENTER: case AMP_LINE_CENTER:
{ {
wxPoint size = mapPt( params[1].GetValue( tool ), params[2].GetValue( tool ), m_GerbMetric ); wxPoint size = mapPt( params[1].GetValue( tool ), params[2].GetValue( tool ),
wxPoint pos = mapPt( params[3].GetValue( tool ), params[4].GetValue( tool ), m_GerbMetric ); m_GerbMetric );
wxPoint pos = mapPt( params[3].GetValue( tool ), params[4].GetValue( tool ),
m_GerbMetric );
// Build poly: // Build poly:
pos.x -= size.x / 2; pos.x -= size.x / 2;
@ -534,14 +545,15 @@ void AM_PRIMITIVE::ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent,
aBuffer.push_back( pos ); aBuffer.push_back( pos );
pos.y -= size.y; // lower right pos.y -= size.y; // lower right
aBuffer.push_back( pos ); aBuffer.push_back( pos );
break;
} }
break;
case AMP_LINE_LOWER_LEFT: case AMP_LINE_LOWER_LEFT:
{ {
wxPoint size = mapPt( params[1].GetValue( tool ), params[2].GetValue( tool ), m_GerbMetric ); wxPoint size = mapPt( params[1].GetValue( tool ), params[2].GetValue( tool ),
wxPoint lowerLeft = mapPt( params[3].GetValue( tool ), params[4].GetValue( m_GerbMetric );
tool ), m_GerbMetric ); wxPoint lowerLeft = mapPt( params[3].GetValue( tool ), params[4].GetValue( tool ),
m_GerbMetric );
// Build poly: // Build poly:
aBuffer.push_back( lowerLeft ); aBuffer.push_back( lowerLeft );
@ -551,14 +563,15 @@ void AM_PRIMITIVE::ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent,
aBuffer.push_back( lowerLeft ); aBuffer.push_back( lowerLeft );
lowerLeft.y -= size.y; // lower right lowerLeft.y -= size.y; // lower right
aBuffer.push_back( lowerLeft ); aBuffer.push_back( lowerLeft );
break;
} }
break;
case AMP_THERMAL: case AMP_THERMAL:
{ {
// Only 1/4 of the full shape is built, because the other 3 shapes will be draw from this first // Only 1/4 of the full shape is built, because the other 3 shapes will be draw from
// rotated by 90, 180 and 270 deg. // this first rotated by 90, 180 and 270 deg.
// params = center.x (unused here), center.y (unused here), outside diam, inside diam, crosshair thickness // params = center.x (unused here), center.y (unused here), outside diam, inside diam,
// crosshair thickness.
int outerRadius = scaletoIU( params[2].GetValue( tool ), m_GerbMetric ) / 2; int outerRadius = scaletoIU( params[2].GetValue( tool ), m_GerbMetric ) / 2;
int innerRadius = scaletoIU( params[3].GetValue( tool ), m_GerbMetric ) / 2; int innerRadius = scaletoIU( params[3].GetValue( tool ), m_GerbMetric ) / 2;
@ -569,12 +582,13 @@ void AM_PRIMITIVE::ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent,
int halfthickness = scaletoIU( params[4].GetValue( tool ), m_GerbMetric ) / 2; int halfthickness = scaletoIU( params[4].GetValue( tool ), m_GerbMetric ) / 2;
double angle_start = RAD2DECIDEG( asin( (double) halfthickness / innerRadius ) ); double angle_start = RAD2DECIDEG( asin( (double) halfthickness / innerRadius ) );
// Draw shape in the first cadrant (X and Y > 0) // Draw shape in the first quadrant (X and Y > 0)
wxPoint pos, startpos; wxPoint pos, startpos;
// Inner arc // Inner arc
startpos.x = innerRadius; startpos.x = innerRadius;
double angle_end = 900 - angle_start; double angle_end = 900 - angle_start;
for( double angle = angle_start; angle < angle_end; angle += 100 ) for( double angle = angle_start; angle < angle_end; angle += 100 )
{ {
pos = startpos; pos = startpos;
@ -610,14 +624,15 @@ void AM_PRIMITIVE::ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent,
} }
break; break;
case AMP_MOIRE: // A cross hair with n concentric circles. Only the cross is built as polygon case AMP_MOIRE:
// because circles can be drawn easily
{ {
// A cross hair with n concentric circles. Only the cross is built as
// polygon because circles can be drawn easily
int crossHairThickness = scaletoIU( params[6].GetValue( tool ), m_GerbMetric ); int crossHairThickness = scaletoIU( params[6].GetValue( tool ), m_GerbMetric );
int crossHairLength = scaletoIU( params[7].GetValue( tool ), m_GerbMetric ); int crossHairLength = scaletoIU( params[7].GetValue( tool ), m_GerbMetric );
// Create cross. First create 1/4 of the shape. // Create cross. First create 1/4 of the shape.
// Others point are the same, totated by 90, 180 and 270 deg // Others point are the same, rotated by 90, 180 and 270 deg
wxPoint pos( crossHairThickness / 2, crossHairLength / 2 ); wxPoint pos( crossHairThickness / 2, crossHairLength / 2 );
aBuffer.push_back( pos ); aBuffer.push_back( pos );
pos.y = crossHairThickness / 2; pos.y = crossHairThickness / 2;
@ -637,8 +652,9 @@ void AM_PRIMITIVE::ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent,
aBuffer.push_back( pos ); aBuffer.push_back( pos );
} }
} }
break;
} }
break;
case AMP_OUTLINE: case AMP_OUTLINE:
// already is a polygon. Do nothing // already is a polygon. Do nothing
@ -648,19 +664,23 @@ void AM_PRIMITIVE::ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent,
{ {
int vertexcount = KiROUND( params[1].GetValue( tool ) ); int vertexcount = KiROUND( params[1].GetValue( tool ) );
int radius = scaletoIU( params[4].GetValue( tool ), m_GerbMetric ) / 2; int radius = scaletoIU( params[4].GetValue( tool ), m_GerbMetric ) / 2;
// rs274x said: vertex count = 3 ... 10, and the first corner is on the X axis // rs274x said: vertex count = 3 ... 10, and the first corner is on the X axis
if( vertexcount < 3 ) if( vertexcount < 3 )
vertexcount = 3; vertexcount = 3;
if( vertexcount > 10 ) if( vertexcount > 10 )
vertexcount = 10; vertexcount = 10;
for( int ii = 0; ii <= vertexcount; ii++ ) for( int ii = 0; ii <= vertexcount; ii++ )
{ {
wxPoint pos( radius, 0); wxPoint pos( radius, 0);
RotatePoint( &pos, ii * 3600 / vertexcount ); RotatePoint( &pos, ii * 3600 / vertexcount );
aBuffer.push_back( pos ); aBuffer.push_back( pos );
} }
}
break; break;
}
case AMP_COMMENT: case AMP_COMMENT:
case AMP_UNKNOWN: case AMP_UNKNOWN:
@ -669,16 +689,7 @@ void AM_PRIMITIVE::ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent,
} }
} }
/** GetShapeDim
* Calculate a value that can be used to evaluate the size of text
* when displaying the D-Code of an item
* due to the complexity of the shape of some primitives
* one cannot calculate the "size" of a shape (only abounding box)
* but here, the "dimension" of the shape is the diameter of the primitive
* or for lines the width of the line
* @param aParent = the parent GERBER_DRAW_ITEM which is actually drawn
* @return a dimension, or -1 if no dim to calculate
*/
int AM_PRIMITIVE::GetShapeDim( const GERBER_DRAW_ITEM* aParent ) int AM_PRIMITIVE::GetShapeDim( const GERBER_DRAW_ITEM* aParent )
{ {
int dim = -1; int dim = -1;
@ -693,42 +704,47 @@ int AM_PRIMITIVE::GetShapeDim( const GERBER_DRAW_ITEM* aParent )
case AMP_LINE2: case AMP_LINE2:
case AMP_LINE20: // Line with rectangle ends. (Width, start and end pos + rotation) case AMP_LINE20: // Line with rectangle ends. (Width, start and end pos + rotation)
dim = scaletoIU( params[1].GetValue( tool ), m_GerbMetric ); // linne width dim = scaletoIU( params[1].GetValue( tool ), m_GerbMetric ); // line width
break; break;
case AMP_LINE_CENTER: case AMP_LINE_CENTER:
{ {
wxPoint size = mapPt( params[1].GetValue( tool ), params[2].GetValue( tool ), m_GerbMetric ); wxPoint size = mapPt( params[1].GetValue( tool ), params[2].GetValue( tool ),
m_GerbMetric );
dim = std::min(size.x, size.y); dim = std::min(size.x, size.y);
break;
} }
break;
case AMP_LINE_LOWER_LEFT: case AMP_LINE_LOWER_LEFT:
{ {
wxPoint size = mapPt( params[1].GetValue( tool ), params[2].GetValue( tool ), m_GerbMetric ); wxPoint size = mapPt( params[1].GetValue( tool ), params[2].GetValue( tool ),
m_GerbMetric );
dim = std::min(size.x, size.y); dim = std::min(size.x, size.y);
break;
} }
break;
case AMP_THERMAL: case AMP_THERMAL:
{ {
// Only 1/4 of the full shape is built, because the other 3 shapes will be draw from this first // Only 1/4 of the full shape is built, because the other 3 shapes will be draw from
// rotated by 90, 180 and 270 deg. // this first rotated by 90, 180 and 270 deg.
// params = center.x (unused here), center.y (unused here), outside diam, inside diam, crosshair thickness // params = center.x (unused here), center.y (unused here), outside diam, inside diam,
// crosshair thickness.
dim = scaletoIU( params[2].GetValue( tool ), m_GerbMetric ) / 2; // Outer diam dim = scaletoIU( params[2].GetValue( tool ), m_GerbMetric ) / 2; // Outer diam
break;
} }
break;
case AMP_MOIRE: // A cross hair with n concentric circles. case AMP_MOIRE: // A cross hair with n concentric circles.
dim = scaletoIU( params[7].GetValue( tool ), m_GerbMetric ); // = cross hair len dim = scaletoIU( params[7].GetValue( tool ), m_GerbMetric ); // = cross hair len
break; break;
case AMP_OUTLINE: // a free polygon : case AMP_OUTLINE: // a free polygon :
// dim = min side of the bounding box (this is a poor criteria, but what is a good criteria b?)
{ {
// dim = min side of the bounding box (this is a poor criteria, but what is a good
// criteria b?)
// exposure, corners count, corner1.x, corner.1y, ..., rotation // exposure, corners count, corner1.x, corner.1y, ..., rotation
// note: corners count is the count of corners following corner1 // note: corners count is the count of corners following corner1
int numPoints = (int) params[1].GetValue( tool ); int numPoints = (int) params[1].GetValue( tool );
// Read points. numPoints does not include the starting point, so add 1. // Read points. numPoints does not include the starting point, so add 1.
// and calculate the bounding box; // and calculate the bounding box;
wxSize pos_min, pos_max, pos; wxSize pos_min, pos_max, pos;
@ -741,18 +757,24 @@ int AM_PRIMITIVE::GetShapeDim( const GERBER_DRAW_ITEM* aParent )
prm_idx++; prm_idx++;
pos.y = scaletoIU( params[prm_idx].GetValue( tool ), m_GerbMetric ); pos.y = scaletoIU( params[prm_idx].GetValue( tool ), m_GerbMetric );
prm_idx++; prm_idx++;
if( i == 0 ) if( i == 0 )
{
pos_min = pos_max = pos; pos_min = pos_max = pos;
}
else else
{ {
// upper right corner: // upper right corner:
if( pos_min.x > pos.x ) if( pos_min.x > pos.x )
pos_min.x = pos.x; pos_min.x = pos.x;
if( pos_min.y > pos.y ) if( pos_min.y > pos.y )
pos_min.y = pos.y; pos_min.y = pos.y;
// lower left corner: // lower left corner:
if( pos_max.x < pos.x ) if( pos_max.x < pos.x )
pos_max.x = pos.x; pos_max.x = pos.x;
if( pos_max.y < pos.y ) if( pos_max.y < pos.y )
pos_max.y = pos.y; pos_max.y = pos.y;
} }
@ -763,13 +785,14 @@ int AM_PRIMITIVE::GetShapeDim( const GERBER_DRAW_ITEM* aParent )
if( prm_idx >= last_prm ) if( prm_idx >= last_prm )
break; break;
} }
// calculate dim // calculate dim
wxSize size; wxSize size;
size.x = pos_max.x - pos_min.x; size.x = pos_max.x - pos_min.x;
size.y = pos_max.y - pos_min.y; size.y = pos_max.y - pos_min.y;
dim = std::min( size.x, size.y ); dim = std::min( size.x, size.y );
}
break; break;
}
case AMP_POLYGON: // Regular polygon case AMP_POLYGON: // Regular polygon
dim = scaletoIU( params[4].GetValue( tool ), m_GerbMetric ) / 2; // Radius dim = scaletoIU( params[4].GetValue( tool ), m_GerbMetric ) / 2; // Radius
@ -780,6 +803,7 @@ int AM_PRIMITIVE::GetShapeDim( const GERBER_DRAW_ITEM* aParent )
case AMP_EOF: case AMP_EOF:
break; break;
} }
return dim; return dim;
} }
@ -799,7 +823,9 @@ SHAPE_POLY_SET* APERTURE_MACRO::GetApertureMacroShape( const GERBER_DRAW_ITEM* a
continue; continue;
if( prim_macro->IsAMPrimitiveExposureOn( aParent ) ) if( prim_macro->IsAMPrimitiveExposureOn( aParent ) )
{
prim_macro->DrawBasicShape( aParent, m_shape, aShapePos ); prim_macro->DrawBasicShape( aParent, m_shape, aShapePos );
}
else else
{ {
prim_macro->DrawBasicShape( aParent, holeBuffer, aShapePos ); prim_macro->DrawBasicShape( aParent, holeBuffer, aShapePos );
@ -831,15 +857,9 @@ SHAPE_POLY_SET* APERTURE_MACRO::GetApertureMacroShape( const GERBER_DRAW_ITEM* a
} }
/* void APERTURE_MACRO::DrawApertureMacroShape( GERBER_DRAW_ITEM* aParent, EDA_RECT* aClipBox,
* Function DrawApertureMacroShape wxDC* aDC, COLOR4D aColor, wxPoint aShapePos,
* Draw the primitive shape for flashed items. bool aFilledShape )
* When an item is flashed, this is the shape of the item
*/
void APERTURE_MACRO::DrawApertureMacroShape( GERBER_DRAW_ITEM* aParent,
EDA_RECT* aClipBox, wxDC* aDC,
COLOR4D aColor,
wxPoint aShapePos, bool aFilledShape )
{ {
SHAPE_POLY_SET* shapeBuffer = GetApertureMacroShape( aParent, aShapePos ); SHAPE_POLY_SET* shapeBuffer = GetApertureMacroShape( aParent, aShapePos );
@ -851,27 +871,20 @@ void APERTURE_MACRO::DrawApertureMacroShape( GERBER_DRAW_ITEM* aParent,
SHAPE_LINE_CHAIN& poly = shapeBuffer->Outline( ii ); SHAPE_LINE_CHAIN& poly = shapeBuffer->Outline( ii );
GRClosedPoly( aClipBox, aDC, poly.PointCount(), (wxPoint*) &poly.CPoint( 0 ), aFilledShape, GRClosedPoly( aClipBox, aDC, poly.PointCount(), (wxPoint*) &poly.CPoint( 0 ), aFilledShape,
aColor, aColor ); aColor, aColor );
} }
} }
/** GetShapeDim
* Calculate a value that can be used to evaluate the size of text
* when displaying the D-Code of an item
* due to the complexity of a shape using many primitives
* one cannot calculate the "size" of a shape (only abounding box)
* but most of aperture macro are using one or few primitives
* and the "dimension" of the shape is the diameter of the primitive
* (or the max diameter of primitives)
* @return a dimension, or -1 if no dim to calculate
*/
int APERTURE_MACRO::GetShapeDim( GERBER_DRAW_ITEM* aParent ) int APERTURE_MACRO::GetShapeDim( GERBER_DRAW_ITEM* aParent )
{ {
int dim = -1; int dim = -1;
for( AM_PRIMITIVES::iterator prim_macro = primitives.begin(); for( AM_PRIMITIVES::iterator prim_macro = primitives.begin();
prim_macro != primitives.end(); ++prim_macro ) prim_macro != primitives.end(); ++prim_macro )
{ {
int pdim = prim_macro->GetShapeDim( aParent ); int pdim = prim_macro->GetShapeDim( aParent );
if( dim < pdim ) if( dim < pdim )
dim = pdim; dim = pdim;
} }
@ -880,20 +893,10 @@ int APERTURE_MACRO::GetShapeDim( GERBER_DRAW_ITEM* aParent )
} }
/**
* function GetLocalParam
* Usually, parameters are defined inside the aperture primitive
* using immediate mode or defered mode.
* in defered mode the value is defined in a DCODE that want to use the aperture macro.
* But some parameters are defined outside the aperture primitive
* and are local to the aperture macro
* @return the value of a defered parameter defined inside the aperture macro
* @param aParamId = the param id (defined by $3 or $5 ..) to evaluate
*/
double APERTURE_MACRO::GetLocalParam( const D_CODE* aDcode, unsigned aParamId ) const double APERTURE_MACRO::GetLocalParam( const D_CODE* aDcode, unsigned aParamId ) const
{ {
// find parameter descr. // find parameter descr.
const AM_PARAM * param = NULL; const AM_PARAM * param = nullptr;
for( unsigned ii = 0; ii < m_localparamStack.size(); ii ++ ) for( unsigned ii = 0; ii < m_localparamStack.size(); ii ++ )
{ {
@ -904,7 +907,7 @@ double APERTURE_MACRO::GetLocalParam( const D_CODE* aDcode, unsigned aParamId )
} }
} }
if ( param == NULL ) // not found if ( param == nullptr ) // not found
return 0.0; return 0.0;
// Evaluate parameter // Evaluate parameter

View File

@ -150,6 +150,10 @@ private:
* *
* Arcs and circles are approximated by segments. Useful when a shape is not a graphic * Arcs and circles are approximated by segments. Useful when a shape is not a graphic
* primitive (shape with hole, rotated shape ... ) and cannot be easily drawn. * primitive (shape with hole, rotated shape ... ) and cannot be easily drawn.
*
* @note Some schapes conbining circles and solid lines (rectangles), only rectangles are
* converted because circles are very easy to draw (no rotation problem) so convert
* them in polygons and draw them as polygons is not a good idea.
*/ */
void ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent, std::vector<wxPoint>& aBuffer ); void ConvertShapeToPolygon( const GERBER_DRAW_ITEM* aParent, std::vector<wxPoint>& aBuffer );
}; };

View File

@ -2,7 +2,7 @@
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 2016 Jean-Pierre Charras, jp.charras at wanadoo.fr * Copyright (C) 2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
* Copyright (C) 1992-2016 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -39,7 +39,7 @@
bool GERBVIEW_FRAME::Clear_DrawLayers( bool query ) bool GERBVIEW_FRAME::Clear_DrawLayers( bool query )
{ {
if( GetGerberLayout() == NULL ) if( GetGerberLayout() == nullptr )
return false; return false;
if( query && GetScreen()->IsContentModified() ) if( query && GetScreen()->IsContentModified() )

View File

@ -77,7 +77,7 @@ void D_CODE::Clear_D_CODE_Data()
m_DrillShape = APT_DEF_NO_HOLE; m_DrillShape = APT_DEF_NO_HOLE;
m_InUse = false; m_InUse = false;
m_Defined = false; m_Defined = false;
m_Macro = NULL; m_Macro = nullptr;
m_Rotation = 0.0; m_Rotation = 0.0;
m_EdgesCount = 0; m_EdgesCount = 0;
m_Polygon.RemoveAllContours(); m_Polygon.RemoveAllContours();
@ -159,27 +159,29 @@ void D_CODE::DrawFlashedShape( GERBER_DRAW_ITEM* aParent, EDA_RECT* aClipBox, wx
case APT_CIRCLE: case APT_CIRCLE:
radius = m_Size.x >> 1; radius = m_Size.x >> 1;
if( !aFilledShape )
GRCircle( aClipBox, aDC, aParent->GetABPosition(aShapePos), radius, 0, aColor );
else
if( m_DrillShape == APT_DEF_NO_HOLE )
{
GRFilledCircle( aClipBox, aDC, aParent->GetABPosition(aShapePos),
radius, aColor );
}
else if( m_DrillShape == APT_DEF_ROUND_HOLE ) // round hole in shape
{
int width = (m_Size.x - m_Drill.x ) / 2;
GRCircle( aClipBox, aDC, aParent->GetABPosition(aShapePos),
radius - (width / 2), width, aColor );
}
else // rectangular hole
{
if( m_Polygon.OutlineCount() == 0 )
ConvertShapeToPolygon();
DrawFlashedPolygon( aParent, aClipBox, aDC, aColor, aFilledShape, aShapePos ); if( !aFilledShape )
} {
GRCircle( aClipBox, aDC, aParent->GetABPosition(aShapePos), radius, 0, aColor );
}
else if( m_DrillShape == APT_DEF_NO_HOLE )
{
GRFilledCircle( aClipBox, aDC, aParent->GetABPosition(aShapePos), radius, aColor );
}
else if( m_DrillShape == APT_DEF_ROUND_HOLE ) // round hole in shape
{
int width = (m_Size.x - m_Drill.x ) / 2;
GRCircle( aClipBox, aDC, aParent->GetABPosition(aShapePos),
radius - (width / 2), width, aColor );
}
else // rectangular hole
{
if( m_Polygon.OutlineCount() == 0 )
ConvertShapeToPolygon();
DrawFlashedPolygon( aParent, aClipBox, aDC, aColor, aFilledShape, aShapePos );
}
break; break;
case APT_RECT: case APT_RECT:
@ -248,6 +250,7 @@ void D_CODE::DrawFlashedShape( GERBER_DRAW_ITEM* aParent, EDA_RECT* aClipBox, wx
DrawFlashedPolygon( aParent, aClipBox, aDC, aColor, aFilledShape, aShapePos ); DrawFlashedPolygon( aParent, aClipBox, aDC, aColor, aFilledShape, aShapePos );
} }
} }
break; break;
case APT_POLYGON: case APT_POLYGON:
@ -334,7 +337,7 @@ void D_CODE::ConvertShapeToPolygon()
// we create an horizontal oval shape. then rotate if needed // we create an horizontal oval shape. then rotate if needed
if( m_Size.x > m_Size.y ) // horizontal oval if( m_Size.x > m_Size.y ) // horizontal oval
{ {
delta = (m_Size.x - m_Size.y) / 2; delta = ( m_Size.x - m_Size.y ) / 2;
radius = m_Size.y / 2; radius = m_Size.y / 2;
} }
else // vertical oval else // vertical oval
@ -374,6 +377,7 @@ void D_CODE::ConvertShapeToPolygon()
addHoleToPolygon( &m_Polygon, m_DrillShape, m_Drill, initialpos ); addHoleToPolygon( &m_Polygon, m_DrillShape, m_Drill, initialpos );
} }
break; break;
case APT_POLYGON: case APT_POLYGON:

View File

@ -6,7 +6,7 @@
/* /*
* This program source code file is part of KiCad, a free EDA CAD application. * This program source code file is part of KiCad, a free EDA CAD application.
* *
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors. * Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License * modify it under the terms of the GNU General Public License
@ -40,9 +40,10 @@
#include <wx/msgdlg.h> #include <wx/msgdlg.h>
// Imported function
extern const wxString GetPCBDefaultLayerName( LAYER_NUM aLayerNumber ); extern const wxString GetPCBDefaultLayerName( LAYER_NUM aLayerNumber );
enum swap_layer_id { enum swap_layer_id {
ID_LAYERS_MAP_DIALOG = ID_GERBER_END_LIST, ID_LAYERS_MAP_DIALOG = ID_GERBER_END_LIST,
ID_BUTTON_0, ID_BUTTON_0,
@ -50,12 +51,6 @@ enum swap_layer_id {
}; };
/*
* This dialog shows the gerber files loaded, and allows user to choose:
* what gerber file and what board layer are used
* the number of copper layers
*/
int LAYERS_MAP_DIALOG::m_exportBoardCopperLayersCount = 2; int LAYERS_MAP_DIALOG::m_exportBoardCopperLayersCount = 2;
@ -108,7 +103,7 @@ void LAYERS_MAP_DIALOG::initDialog()
for( unsigned ii = 0; ii < GERBER_DRAWLAYERS_COUNT; ++ii ) for( unsigned ii = 0; ii < GERBER_DRAWLAYERS_COUNT; ++ii )
{ {
if( images->GetGbrImage( ii ) == NULL ) if( images->GetGbrImage( ii ) == nullptr )
break; break;
m_buttonTable[m_gerberActiveLayersCount] = ii; m_buttonTable[m_gerberActiveLayersCount] = ii;
@ -209,7 +204,7 @@ void LAYERS_MAP_DIALOG::initDialog()
m_layersList[ii] = text; m_layersList[ii] = text;
} }
// If the user has never stored any Gerber to Kicad layer mapping, // If the user has never stored any Gerber to KiCad layer mapping,
// then disable the button to retrieve it // then disable the button to retrieve it
if( config->m_GerberToPcbLayerMapping.size() == 0 ) if( config->m_GerberToPcbLayerMapping.size() == 0 )
m_buttonRetrieve->Enable( false ); m_buttonRetrieve->Enable( false );
@ -256,9 +251,7 @@ void LAYERS_MAP_DIALOG::initDialog()
} }
} }
/* Ensure m_exportBoardCopperLayersCount = 2 to BOARD_COPPER_LAYERS_MAX_COUNT
* and it is an even value because Boards have always an even layer count
*/
void LAYERS_MAP_DIALOG::normalizeBrdLayersCount() void LAYERS_MAP_DIALOG::normalizeBrdLayersCount()
{ {
if( ( m_exportBoardCopperLayersCount & 1 ) ) if( ( m_exportBoardCopperLayersCount & 1 ) )
@ -272,18 +265,14 @@ void LAYERS_MAP_DIALOG::normalizeBrdLayersCount()
} }
/*
* Called when user change the current board copper layers count
*/
void LAYERS_MAP_DIALOG::OnBrdLayersCountSelection( wxCommandEvent& event ) void LAYERS_MAP_DIALOG::OnBrdLayersCountSelection( wxCommandEvent& event )
{ {
int id = event.GetSelection(); int id = event.GetSelection();
m_exportBoardCopperLayersCount = (id+1) * 2; m_exportBoardCopperLayersCount = (id+1) * 2;
} }
/*
* reset pcb layers selection to the default value
*/
void LAYERS_MAP_DIALOG::OnResetClick( wxCommandEvent& event ) void LAYERS_MAP_DIALOG::OnResetClick( wxCommandEvent& event )
{ {
wxString msg; wxString msg;
@ -299,8 +288,6 @@ void LAYERS_MAP_DIALOG::OnResetClick( wxCommandEvent& event )
} }
/* Stores the current layers selection in config
*/
void LAYERS_MAP_DIALOG::OnStoreSetup( wxCommandEvent& event ) void LAYERS_MAP_DIALOG::OnStoreSetup( wxCommandEvent& event )
{ {
auto config = static_cast<GERBVIEW_SETTINGS*>( Kiface().KifaceSettings() ); auto config = static_cast<GERBVIEW_SETTINGS*>( Kiface().KifaceSettings() );
@ -318,6 +305,7 @@ void LAYERS_MAP_DIALOG::OnStoreSetup( wxCommandEvent& event )
m_buttonRetrieve->Enable( true ); m_buttonRetrieve->Enable( true );
} }
void LAYERS_MAP_DIALOG::OnGetSetup( wxCommandEvent& event ) void LAYERS_MAP_DIALOG::OnGetSetup( wxCommandEvent& event )
{ {
GERBVIEW_SETTINGS* config = static_cast<GERBVIEW_SETTINGS*>( Kiface().KifaceSettings() ); GERBVIEW_SETTINGS* config = static_cast<GERBVIEW_SETTINGS*>( Kiface().KifaceSettings() );
@ -340,6 +328,7 @@ void LAYERS_MAP_DIALOG::OnGetSetup( wxCommandEvent& event )
for( int ii = 0; ii < m_gerberActiveLayersCount; ii++ ) for( int ii = 0; ii < m_gerberActiveLayersCount; ii++ )
{ {
LAYER_NUM layer = m_layersLookUpTable[ii]; LAYER_NUM layer = m_layersLookUpTable[ii];
if( layer == UNSELECTED_LAYER ) if( layer == UNSELECTED_LAYER )
{ {
m_layersList[ii]->SetLabel( _( "Do not export" ) ); m_layersList[ii]->SetLabel( _( "Do not export" ) );
@ -366,7 +355,7 @@ void LAYERS_MAP_DIALOG::OnSelectLayer( wxCommandEvent& event )
if( (ii < 0) || (ii >= GERBER_DRAWLAYERS_COUNT) ) if( (ii < 0) || (ii >= GERBER_DRAWLAYERS_COUNT) )
{ {
wxFAIL_MSG( wxT("Bad layer id") ); wxFAIL_MSG( wxT( "Bad layer id" ) );
return; return;
} }
@ -377,6 +366,7 @@ void LAYERS_MAP_DIALOG::OnSelectLayer( wxCommandEvent& event )
// Get file name of Gerber loaded on this layer // Get file name of Gerber loaded on this layer
wxFileName fn( m_Parent->GetGerberLayout()->GetImagesList()->GetGbrImage( ii )->m_FileName ); wxFileName fn( m_Parent->GetGerberLayout()->GetImagesList()->GetGbrImage( ii )->m_FileName );
// Surround it with quotes to make it stand out on the dialog title bar // Surround it with quotes to make it stand out on the dialog title bar
wxString layerName = "\"" + fn.GetFullName() + "\""; wxString layerName = "\"" + fn.GetFullName() + "\"";
@ -426,6 +416,7 @@ void LAYERS_MAP_DIALOG::OnOkClick( wxCommandEvent& event )
normalizeBrdLayersCount(); normalizeBrdLayersCount();
int inner_layer_max = 0; int inner_layer_max = 0;
for( int ii = 0; ii < GERBER_DRAWLAYERS_COUNT; ++ii ) for( int ii = 0; ii < GERBER_DRAWLAYERS_COUNT; ++ii )
{ {
if( m_layersLookUpTable[ii] < F_Cu ) if( m_layersLookUpTable[ii] < F_Cu )
@ -440,8 +431,8 @@ void LAYERS_MAP_DIALOG::OnOkClick( wxCommandEvent& event )
// internal copper layers = m_exportBoardCopperLayersCount-2 // internal copper layers = m_exportBoardCopperLayersCount-2
if( inner_layer_max > m_exportBoardCopperLayersCount-2 ) if( inner_layer_max > m_exportBoardCopperLayersCount-2 )
{ {
wxMessageBox( wxMessageBox( _("Exported board does not have enough copper layers to handle selected "
_("Exported board does not have enough copper layers to handle selected inner layers") ); "inner layers") );
return; return;
} }
@ -803,7 +794,6 @@ int LAYERS_MAP_DIALOG::findNumX2GerbersLoaded( std::vector<int>& aGerber2KicadMa
mapThis << x2->GetBrdLayerId() << x2->GetFileType(); mapThis << x2->GetBrdLayerId() << x2->GetFileType();
} }
// Check if the string we've isolated matches any known X2 layer names // Check if the string we've isolated matches any known X2 layer names
it = kicadLayers.find( mapThis ); it = kicadLayers.find( mapThis );

View File

@ -170,14 +170,15 @@ void DIALOG_PRINT_GERBVIEW::createExtraOptions()
// Print mirrored // Print mirrored
m_checkboxMirror = new wxCheckBox( box, wxID_ANY, _( "Print mirrored" ) ); m_checkboxMirror = new wxCheckBox( box, wxID_ANY, _( "Print mirrored" ) );
optionsSizer->Add( m_checkboxMirror, wxGBPosition( rows, 0 ), wxGBSpan( 1, cols ), optionsSizer->Add( m_checkboxMirror, wxGBPosition( rows, 0 ), wxGBSpan( 1, cols ),
wxBOTTOM | wxRIGHT | wxLEFT, 5 ); wxBOTTOM | wxRIGHT | wxLEFT, 5 );
} }
void DIALOG_PRINT_GERBVIEW::createLeftPanel() void DIALOG_PRINT_GERBVIEW::createLeftPanel()
{ {
wxStaticBoxSizer* sbLayersSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxStaticBoxSizer* sbLayersSizer =
wxID_ANY, _( "Included Layers" ) ), wxVERTICAL ); new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _( "Included Layers" ) ),
wxVERTICAL );
// Layer lists // Layer lists
wxBoxSizer* bLayerListsSizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* bLayerListsSizer = new wxBoxSizer( wxHORIZONTAL );
@ -195,9 +196,11 @@ void DIALOG_PRINT_GERBVIEW::createLeftPanel()
_( "Deselect all" ) ); _( "Deselect all" ) );
m_buttonSelectAll->Connect( wxEVT_COMMAND_BUTTON_CLICKED, m_buttonSelectAll->Connect( wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler( DIALOG_PRINT_GERBVIEW::onSelectAllClick ), NULL, this ); wxCommandEventHandler( DIALOG_PRINT_GERBVIEW::onSelectAllClick ),
nullptr, this );
m_buttonDeselectAll->Connect( wxEVT_COMMAND_BUTTON_CLICKED, m_buttonDeselectAll->Connect( wxEVT_COMMAND_BUTTON_CLICKED,
wxCommandEventHandler( DIALOG_PRINT_GERBVIEW::onDeselectAllClick ), NULL, this ); wxCommandEventHandler( DIALOG_PRINT_GERBVIEW::onDeselectAllClick ),
nullptr, this );
wxBoxSizer* buttonSizer = new wxBoxSizer( wxHORIZONTAL ); wxBoxSizer* buttonSizer = new wxBoxSizer( wxHORIZONTAL );
buttonSizer->Add( m_buttonSelectAll, 1, wxALL, 5 ); buttonSizer->Add( m_buttonSelectAll, 1, wxALL, 5 );

View File

@ -46,7 +46,7 @@ GBR_TO_PCB_EXPORTER::GBR_TO_PCB_EXPORTER( GERBVIEW_FRAME* aFrame, const wxString
{ {
m_gerbview_frame = aFrame; m_gerbview_frame = aFrame;
m_pcb_file_name = aFileName; m_pcb_file_name = aFileName;
m_fp = NULL; m_fp = nullptr;
m_pcbCopperLayersCount = 2; m_pcbCopperLayersCount = 2;
} }
@ -62,7 +62,7 @@ bool GBR_TO_PCB_EXPORTER::ExportPcb( const LAYER_NUM* aLayerLookUpTable, int aCo
m_fp = wxFopen( m_pcb_file_name, wxT( "wt" ) ); m_fp = wxFopen( m_pcb_file_name, wxT( "wt" ) );
if( m_fp == NULL ) if( m_fp == nullptr )
{ {
wxString msg; wxString msg;
msg.Printf( _( "Failed to create file '%s'." ), m_pcb_file_name ); msg.Printf( _( "Failed to create file '%s'." ), m_pcb_file_name );
@ -83,7 +83,7 @@ bool GBR_TO_PCB_EXPORTER::ExportPcb( const LAYER_NUM* aLayerLookUpTable, int aCo
{ {
EXCELLON_IMAGE* excellon = dynamic_cast<EXCELLON_IMAGE*>( images->GetGbrImage( layer ) ); EXCELLON_IMAGE* excellon = dynamic_cast<EXCELLON_IMAGE*>( images->GetGbrImage( layer ) );
if( excellon == NULL ) // Layer not yet used or not a drill image if( excellon == nullptr ) // Layer not yet used or not a drill image
continue; continue;
for( GERBER_DRAW_ITEM* gerb_item : excellon->GetItems() ) for( GERBER_DRAW_ITEM* gerb_item : excellon->GetItems() )
@ -95,7 +95,7 @@ bool GBR_TO_PCB_EXPORTER::ExportPcb( const LAYER_NUM* aLayerLookUpTable, int aCo
{ {
GERBER_FILE_IMAGE* gerber = images->GetGbrImage( layer ); GERBER_FILE_IMAGE* gerber = images->GetGbrImage( layer );
if( gerber == NULL ) // Graphic layer not yet used if( gerber == nullptr ) // Graphic layer not yet used
continue; continue;
LAYER_NUM pcb_layer_number = aLayerLookUpTable[layer]; LAYER_NUM pcb_layer_number = aLayerLookUpTable[layer];
@ -115,7 +115,7 @@ bool GBR_TO_PCB_EXPORTER::ExportPcb( const LAYER_NUM* aLayerLookUpTable, int aCo
{ {
GERBER_FILE_IMAGE* gerber = images->GetGbrImage( layer ); GERBER_FILE_IMAGE* gerber = images->GetGbrImage( layer );
if( gerber == NULL ) // Graphic layer not yet used if( gerber == nullptr ) // Graphic layer not yet used
continue; continue;
LAYER_NUM pcb_layer_number = aLayerLookUpTable[layer]; LAYER_NUM pcb_layer_number = aLayerLookUpTable[layer];
@ -134,12 +134,13 @@ bool GBR_TO_PCB_EXPORTER::ExportPcb( const LAYER_NUM* aLayerLookUpTable, int aCo
fprintf( m_fp, ")\n" ); fprintf( m_fp, ")\n" );
fclose( m_fp ); fclose( m_fp );
m_fp = NULL; m_fp = nullptr;
return true; return true;
} }
void GBR_TO_PCB_EXPORTER::export_non_copper_item( const GERBER_DRAW_ITEM* aGbrItem, LAYER_NUM aLayer ) void GBR_TO_PCB_EXPORTER::export_non_copper_item( const GERBER_DRAW_ITEM* aGbrItem,
LAYER_NUM aLayer )
{ {
// used when a D_CODE is not found. default D_CODE to draw a flashed item // used when a D_CODE is not found. default D_CODE to draw a flashed item
static D_CODE dummyD_CODE( 0 ); static D_CODE dummyD_CODE( 0 );
@ -149,7 +150,7 @@ void GBR_TO_PCB_EXPORTER::export_non_copper_item( const GERBER_DRAW_ITEM* aGbrIt
D_CODE* d_codeDescr = aGbrItem->GetDcodeDescr(); D_CODE* d_codeDescr = aGbrItem->GetDcodeDescr();
SHAPE_POLY_SET polygon; SHAPE_POLY_SET polygon;
if( d_codeDescr == NULL ) if( d_codeDescr == nullptr )
d_codeDescr = &dummyD_CODE; d_codeDescr = &dummyD_CODE;
switch( aGbrItem->m_Shape ) switch( aGbrItem->m_Shape )
@ -159,11 +160,11 @@ void GBR_TO_PCB_EXPORTER::export_non_copper_item( const GERBER_DRAW_ITEM* aGbrIt
break; break;
case GBR_SPOT_CIRCLE: case GBR_SPOT_CIRCLE:
{ {
VECTOR2I center = aGbrItem->GetABPosition( seg_start ); VECTOR2I center = aGbrItem->GetABPosition( seg_start );
int radius = d_codeDescr->m_Size.x / 2; int radius = d_codeDescr->m_Size.x / 2;
writePcbFilledCircle( center, radius, aLayer ); writePcbFilledCircle( center, radius, aLayer );
} }
break; break;
case GBR_SPOT_RECT: case GBR_SPOT_RECT:
@ -249,17 +250,6 @@ void GBR_TO_PCB_EXPORTER::export_non_copper_item( const GERBER_DRAW_ITEM* aGbrIt
} }
/*
* Many holes will be pads, but we have no way to create those without footprints, and creating
* a footprint per pad is not really viable.
*
* So we use vias to mimic holes, with the loss of any hole shape (as we only have round holes
* in vias at present).
*
* We start out with a via size minimally larger than the hole. We'll leave it this way if
* the pad gets drawn as a copper polygon, or increase it to the proper size if it has a
* circular, concentric copper flashing.
*/
void GBR_TO_PCB_EXPORTER::collect_hole( const GERBER_DRAW_ITEM* aGbrItem ) void GBR_TO_PCB_EXPORTER::collect_hole( const GERBER_DRAW_ITEM* aGbrItem )
{ {
int size = std::min( aGbrItem->m_Size.x, aGbrItem->m_Size.y ); int size = std::min( aGbrItem->m_Size.x, aGbrItem->m_Size.y );
@ -321,7 +311,8 @@ void GBR_TO_PCB_EXPORTER::export_copper_item( const GERBER_DRAW_ITEM* aGbrItem,
} }
void GBR_TO_PCB_EXPORTER::export_segline_copper_item( const GERBER_DRAW_ITEM* aGbrItem, LAYER_NUM aLayer ) void GBR_TO_PCB_EXPORTER::export_segline_copper_item( const GERBER_DRAW_ITEM* aGbrItem,
LAYER_NUM aLayer )
{ {
wxPoint seg_start, seg_end; wxPoint seg_start, seg_end;
@ -350,7 +341,8 @@ void GBR_TO_PCB_EXPORTER::writeCopperLineItem( const wxPoint& aStart,
} }
void GBR_TO_PCB_EXPORTER::export_segarc_copper_item( const GERBER_DRAW_ITEM* aGbrItem, LAYER_NUM aLayer ) void GBR_TO_PCB_EXPORTER::export_segarc_copper_item( const GERBER_DRAW_ITEM* aGbrItem,
LAYER_NUM aLayer )
{ {
double a = atan2( (double) ( aGbrItem->m_Start.y - aGbrItem->m_ArcCentre.y ), double a = atan2( (double) ( aGbrItem->m_Start.y - aGbrItem->m_ArcCentre.y ),
(double) ( aGbrItem->m_Start.x - aGbrItem->m_ArcCentre.x ) ); (double) ( aGbrItem->m_Start.x - aGbrItem->m_ArcCentre.x ) );
@ -384,6 +376,7 @@ void GBR_TO_PCB_EXPORTER::export_segarc_copper_item( const GERBER_DRAW_ITEM* aGb
RotatePoint( &curr_end, aGbrItem->m_ArcCentre, RotatePoint( &curr_end, aGbrItem->m_ArcCentre,
-RAD2DECIDEG( DELTA_ANGLE * ii ) ); -RAD2DECIDEG( DELTA_ANGLE * ii ) );
seg_end = curr_end; seg_end = curr_end;
// Reverse Y axis: // Reverse Y axis:
seg_start.y = -seg_start.y; seg_start.y = -seg_start.y;
seg_end.y = -seg_end.y; seg_end.y = -seg_end.y;
@ -395,6 +388,7 @@ void GBR_TO_PCB_EXPORTER::export_segarc_copper_item( const GERBER_DRAW_ITEM* aGb
{ {
seg_start = curr_start; seg_start = curr_start;
seg_end = end; seg_end = end;
// Reverse Y axis: // Reverse Y axis:
seg_start.y = -seg_start.y; seg_start.y = -seg_start.y;
seg_end.y = -seg_end.y; seg_end.y = -seg_end.y;
@ -403,14 +397,6 @@ void GBR_TO_PCB_EXPORTER::export_segarc_copper_item( const GERBER_DRAW_ITEM* aGb
} }
/*
* Flashed items are usually pads or vias. Pads are problematic because we have no way to
* represent one in Pcbnew outside of a footprint (and creating a footprint per pad isn't really
* viable).
* If we've already created a via from a hole, and the flashed copper item is a simple circle
* then we'll enlarge the via to the proper size. Otherwise we create a copper polygon to
* represent the flashed item (which is presumably a pad).
*/
void GBR_TO_PCB_EXPORTER::export_flashed_copper_item( const GERBER_DRAW_ITEM* aGbrItem, void GBR_TO_PCB_EXPORTER::export_flashed_copper_item( const GERBER_DRAW_ITEM* aGbrItem,
LAYER_NUM aLayer ) LAYER_NUM aLayer )
{ {
@ -419,7 +405,7 @@ void GBR_TO_PCB_EXPORTER::export_flashed_copper_item( const GERBER_DRAW_ITEM* aG
D_CODE* d_codeDescr = aGbrItem->GetDcodeDescr(); D_CODE* d_codeDescr = aGbrItem->GetDcodeDescr();
SHAPE_POLY_SET polygon; SHAPE_POLY_SET polygon;
if( d_codeDescr == NULL ) if( d_codeDescr == nullptr )
d_codeDescr = &flashed_item_D_CODE; d_codeDescr = &flashed_item_D_CODE;
if( aGbrItem->m_Shape == GBR_SPOT_CIRCLE ) if( aGbrItem->m_Shape == GBR_SPOT_CIRCLE )
@ -530,8 +516,8 @@ void GBR_TO_PCB_EXPORTER::writePcbPolygon( const SHAPE_POLY_SET& aPolys, LAYER_N
} }
fprintf( m_fp, " (xy %s %s)", fprintf( m_fp, " (xy %s %s)",
Double2Str( MapToPcbUnits( poly.CPoint( ii ).x + aOffset.x ) ).c_str(), Double2Str( MapToPcbUnits( poly.CPoint( ii ).x + aOffset.x ) ).c_str(),
Double2Str( MapToPcbUnits( -poly.CPoint( ii ).y + aOffset.y ) ).c_str() ); Double2Str( MapToPcbUnits( -poly.CPoint( ii ).y + aOffset.y ) ).c_str() );
} }
fprintf( m_fp, ")" ); fprintf( m_fp, ")" );
@ -539,8 +525,7 @@ void GBR_TO_PCB_EXPORTER::writePcbPolygon( const SHAPE_POLY_SET& aPolys, LAYER_N
if( jj != MAX_COORD_CNT ) if( jj != MAX_COORD_CNT )
fprintf( m_fp, "\n" ); fprintf( m_fp, "\n" );
fprintf( m_fp, "(layer %s) (width 0) )\n", fprintf( m_fp, "(layer %s) (width 0) )\n", TO_UTF8( GetPCBDefaultLayerName( aLayer ) ) );
TO_UTF8( GetPCBDefaultLayerName( aLayer ) ) );
} }
@ -553,7 +538,7 @@ void GBR_TO_PCB_EXPORTER::writePcbZoneItem( const GERBER_DRAW_ITEM* aGbrItem, LA
return; return;
fprintf( m_fp, "(zone (net 0) (net_name \"\") (layer %s) (tstamp 0000000) (hatch edge 0.508)\n", fprintf( m_fp, "(zone (net 0) (net_name \"\") (layer %s) (tstamp 0000000) (hatch edge 0.508)\n",
TO_UTF8( GetPCBDefaultLayerName( aLayer ) ) ); TO_UTF8( GetPCBDefaultLayerName( aLayer ) ) );
fprintf( m_fp, " (connect_pads (clearance 0.0))\n" ); fprintf( m_fp, " (connect_pads (clearance 0.0))\n" );

View File

@ -63,7 +63,12 @@ private:
/** /**
* Collect holes from a drill layer. * Collect holes from a drill layer.
* *
* We'll use these later when writing pads & vias. * We'll use these later when writing pads & vias. Many holes will be pads, but we have
* no way to create those without footprints, and creating a footprint per pad is not
* really viable. We use vias to mimic holes, with the loss of any hole shape (as we only
* have round holes in vias at present). We start out with a via size minimally larger
* than the hole. We'll leave it this way if the pad gets drawn as a copper polygon, or
* increase it to the proper size if it has a circular, concentric copper flashing.
*/ */
void collect_hole( const GERBER_DRAW_ITEM* aGbrItem ); void collect_hole( const GERBER_DRAW_ITEM* aGbrItem );

Some files were not shown because too many files have changed in this diff Show More