From af7c26e8bea3535f7b588b84da355d35c2135c64 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Fri, 25 Jun 2010 21:02:39 +0200 Subject: [PATCH 1/2] bitmap2component minor enhancements --- CHANGELOG.txt | 9 +++++++++ bitmap2component/bitmap2cmp_gui.cpp | 12 ++++++------ bitmap2component/bitmap2cmp_gui_base.cpp | 2 +- bitmap2component/bitmap2cmp_gui_base.fbp | 6 +++--- demos/pic_programmer/pic_programmer.pro | 2 +- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 5e625f6add..486e1abcab 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -4,6 +4,15 @@ KiCad ChangeLog 2010 Please add newer entries at the top, list the date and your name with email address. +2010-jun-24 UPDATE Wayne Stambaugh +================================================================================ +++EESchema component library and hierarchical sheet label object improvements. + * Continue component library class clean up and encapsulation work. + * Change hierarchical sheet label container to boost::vector_ptr. + * Encapsulate hierarchical label handling in hierarchical sheet class. + * Convert some missed occurrences of wxString::GetData() to GetChars( wxString ). + * Fix some minor code formatting issues. + 2010-jun-23, UPDATE Jean-Pierre Charras ================================================================================ ++eeschema: diff --git a/bitmap2component/bitmap2cmp_gui.cpp b/bitmap2component/bitmap2cmp_gui.cpp index a376582919..3eab77a013 100644 --- a/bitmap2component/bitmap2cmp_gui.cpp +++ b/bitmap2component/bitmap2cmp_gui.cpp @@ -71,7 +71,7 @@ private: void OnLoadFile( wxCommandEvent& event ); void OnExportEeschema( wxCommandEvent& event ); void OnExportPcbnew( wxCommandEvent& event ); - void Binarize( int aThreshold ); + void Binarize( double aThreshold ); // aThreshold = 0.0 (black level) to 1.0 (white level) void OnOptionsSelection( wxCommandEvent& event ); void OnThresholdChange( wxScrollEvent& event ); void NegateGreyscaleImage( ); @@ -196,18 +196,18 @@ void BM2CMP_FRAME::OnLoadFile( wxCommandEvent& event ) m_Greyscale_Bitmap = wxBitmap( m_Greyscale_Image ); m_NB_Image = m_Greyscale_Image; - Binarize( m_sliderThreshold->GetValue() ); + Binarize( (double)m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() ); Refresh(); } -void BM2CMP_FRAME::Binarize( int aThreshold ) +void BM2CMP_FRAME::Binarize( double aThreshold ) { unsigned int pixin; unsigned char pixout; int h = m_Greyscale_Image.GetHeight(); int w = m_Greyscale_Image.GetWidth(); - unsigned int threshold = (aThreshold * 256) / 10; + unsigned int threshold = (int)(aThreshold * 256); for( int y = 1; y < h; y++ ) for( int x = 1; x < w; x++ ) @@ -243,13 +243,13 @@ void BM2CMP_FRAME::OnOptionsSelection( wxCommandEvent& event ) { NegateGreyscaleImage( ); m_Greyscale_Bitmap = wxBitmap( m_Greyscale_Image ); - Binarize( m_sliderThreshold->GetValue() ); + Binarize( (double)m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() ); Refresh(); } void BM2CMP_FRAME::OnThresholdChange( wxScrollEvent& event ) { - Binarize( m_sliderThreshold->GetValue() ); + Binarize( (double)m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() ); Refresh(); } diff --git a/bitmap2component/bitmap2cmp_gui_base.cpp b/bitmap2component/bitmap2cmp_gui_base.cpp index 832e699a65..fa72459275 100644 --- a/bitmap2component/bitmap2cmp_gui_base.cpp +++ b/bitmap2component/bitmap2cmp_gui_base.cpp @@ -87,7 +87,7 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS m_ThresholdText->Wrap( -1 ); brightSizer->Add( m_ThresholdText, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - m_sliderThreshold = new wxSlider( this, wxID_ANY, 5, 0, 10, wxDefaultPosition, wxDefaultSize, wxSL_AUTOTICKS|wxSL_HORIZONTAL|wxSL_LABELS|wxSL_TOP ); + m_sliderThreshold = new wxSlider( this, wxID_ANY, 25, 0, 50, wxDefaultPosition, wxDefaultSize, wxSL_AUTOTICKS|wxSL_HORIZONTAL|wxSL_TOP ); brightSizer->Add( m_sliderThreshold, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); bMainSizer->Add( brightSizer, 0, wxEXPAND, 5 ); diff --git a/bitmap2component/bitmap2cmp_gui_base.fbp b/bitmap2component/bitmap2cmp_gui_base.fbp index a7fb614d88..d008ba62fd 100644 --- a/bitmap2component/bitmap2cmp_gui_base.fbp +++ b/bitmap2component/bitmap2cmp_gui_base.fbp @@ -670,7 +670,7 @@ 0 wxID_ANY - 10 + 50 0 @@ -678,10 +678,10 @@ protected - wxSL_AUTOTICKS|wxSL_HORIZONTAL|wxSL_LABELS|wxSL_TOP + wxSL_AUTOTICKS|wxSL_HORIZONTAL|wxSL_TOP - 5 + 25 diff --git a/demos/pic_programmer/pic_programmer.pro b/demos/pic_programmer/pic_programmer.pro index 750daa8a11..52544d9d8f 100644 --- a/demos/pic_programmer/pic_programmer.pro +++ b/demos/pic_programmer/pic_programmer.pro @@ -1,4 +1,4 @@ -update=23/06/2010 18:43:01 +update=24/06/2010 21:06:23 last_client=pcbnew [general] version=1 From c580d5d72c2b5677a4f76b5891cf6bf87f72e793 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Mon, 28 Jun 2010 15:11:14 +0200 Subject: [PATCH 2/2] fixed a serious bug in zone filling, for pads with drill but not on all layers --- eeschema/class_netlist_object.cpp | 2 +- eeschema/erc.cpp | 34 +++++++++++-------- eeschema/netlist_control.cpp | 9 +++++ .../zones_convert_brd_items_to_polygons.cpp | 5 +-- 4 files changed, 32 insertions(+), 18 deletions(-) diff --git a/eeschema/class_netlist_object.cpp b/eeschema/class_netlist_object.cpp index ce3c2bbded..28cda6b3e3 100644 --- a/eeschema/class_netlist_object.cpp +++ b/eeschema/class_netlist_object.cpp @@ -81,7 +81,7 @@ void NETLIST_OBJECT::Show( std::ostream& out, int ndx ) out << " \n"; - if( m_Label ) + if( !m_Label.IsEmpty() ) out << " \n"; if( m_Comp ) diff --git a/eeschema/erc.cpp b/eeschema/erc.cpp index cffbd49cb0..9efb32e6d2 100644 --- a/eeschema/erc.cpp +++ b/eeschema/erc.cpp @@ -174,8 +174,11 @@ static int MinimalReq[PIN_NMAX][PIN_NMAX] = /** Function TestDuplicateSheetNames( ) * inside a given sheet, one cannot have sheets with duplicate names (file * names can be duplicated). + * @return the error count + * @param aCreateMarker: true = create error markers in schematic, + * false = calculate error count only */ -int TestDuplicateSheetNames() +int TestDuplicateSheetNames(bool aCreateMarker) { int err_count = 0; EDA_ScreenList ScreenList; // Created the list of screen @@ -203,17 +206,20 @@ int TestDuplicateSheetNames() ( ( SCH_SHEET* ) item_to_test )-> m_SheetName ) == 0 ) { - /* Create a new marker type ERC error*/ - SCH_MARKER* Marker = new SCH_MARKER(); - Marker->m_TimeStamp = GetTimeStamp(); - Marker->SetData( ERCE_DUPLICATE_SHEET_NAME, - ( (SCH_SHEET*) item_to_test )->m_Pos, - _( "Duplicate Sheet name" ), - ( (SCH_SHEET*) item_to_test )->m_Pos ); - Marker->SetMarkerType( MARK_ERC ); - Marker->SetErrorLevel( ERR ); - Marker->SetNext( Screen->EEDrawList ); - Screen->EEDrawList = Marker; + if( aCreateMarker ) + { + /* Create a new marker type ERC error*/ + SCH_MARKER* Marker = new SCH_MARKER(); + Marker->m_TimeStamp = GetTimeStamp(); + Marker->SetData( ERCE_DUPLICATE_SHEET_NAME, + ( (SCH_SHEET*) item_to_test )->m_Pos, + _( "Duplicate Sheet name" ), + ( (SCH_SHEET*) item_to_test )->m_Pos ); + Marker->SetMarkerType( MARK_ERC ); + Marker->SetErrorLevel( ERR ); + Marker->SetNext( Screen->EEDrawList ); + Screen->EEDrawList = Marker; + } err_count++; } } @@ -279,9 +285,8 @@ void DIALOG_ERC::TestErc( wxArrayString* aMessagesList ) * inside a given sheet, one cannot have sheets with duplicate names (file * names can be duplicated). */ - int errcnt = TestDuplicateSheetNames(); + int errcnt = TestDuplicateSheetNames( true ); g_EESchemaVar.NbErrorErc += errcnt; - g_EESchemaVar.NbWarningErc += errcnt; m_Parent->BuildNetListBase(); @@ -290,7 +295,6 @@ void DIALOG_ERC::TestErc( wxArrayString* aMessagesList ) for( unsigned ii = 0; ii < g_NetObjectslist.size(); ii++ ) g_NetObjectslist[ii]->m_FlagOfConnection = UNCONNECTED; - StartNet = OldItem = 0; NetNbItems = 0; MinConn = NOC; diff --git a/eeschema/netlist_control.cpp b/eeschema/netlist_control.cpp index 7c47e53bb9..67eb8e1f35 100644 --- a/eeschema/netlist_control.cpp +++ b/eeschema/netlist_control.cpp @@ -24,6 +24,8 @@ #include "protos.h" #include "netlist_control.h" +//Imported function: +int TestDuplicateSheetNames(bool aCreateMarker); // ID for configuration: #define CUSTOM_NETLIST_TITLE wxT( "CustomNetlistTitle" ) @@ -492,6 +494,13 @@ void WinEDA_NetlistFrame::GenNetlist( wxCommandEvent& event ) return; } + // Test duplicate sheet names: + if( TestDuplicateSheetNames(false ) > 0 ) + { + if( !IsOK( this, _( "Error: duplicate sheet names. Continue?" ) ) ) + return; + } + /* Cleanup the entire hierarchy */ EDA_ScreenList ScreenList; for( SCH_SCREEN* screen = ScreenList.GetFirst(); diff --git a/pcbnew/zones_convert_brd_items_to_polygons.cpp b/pcbnew/zones_convert_brd_items_to_polygons.cpp index e966854346..3c71300d21 100644 --- a/pcbnew/zones_convert_brd_items_to_polygons.cpp +++ b/pcbnew/zones_convert_brd_items_to_polygons.cpp @@ -216,11 +216,12 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb ) have_poly_to_substract = false; D_PAD dummyPad((MODULE*)NULL); - + D_PAD * nextpad; for( MODULE* module = aPcb->m_Modules; module; module = module->Next() ) { - for( D_PAD* pad = module->m_Pads; pad != NULL; pad = pad->Next() ) + for( D_PAD* pad = module->m_Pads; pad != NULL; pad = nextpad ) { + nextpad = pad->Next(); // pad pointer can be modified by next code, so calculate the next pad here if( !pad->IsOnLayer( GetLayer() ) ) { /* Test fo pads that are on top or bottom only and have a hole. * There are curious pads but they can be used for some components that are inside the