/* localize a gerber item and return a pointer to it. * Display info about this item */ GERBER_DRAW_ITEM* GERBVIEW_FRAME::Locate( const wxPoint& aPosition, int aTypeloc ) { m_messagePanel->EraseMsgBox(); wxPoint ref = aPosition; bool found = false; if( aTypeloc == CURSEUR_ON_GRILLE ) ref = GetNearestGridPosition( ref ); int layer = getActiveLayer(); // Search first on active layer GERBER_DRAW_ITEM* gerb_item = GetItemsList(); for( ; gerb_item; gerb_item = gerb_item->Next() ) { if( gerb_item->GetLayer()!= layer ) continue; if( gerb_item->HitTest( ref ) ) { found = true; break; } } if( !found ) // Search on all layers { for( gerb_item = GetItemsList(); gerb_item; gerb_item = gerb_item->Next() ) { if( gerb_item->HitTest( ref ) ) { found = true; break; } } } if( found ) { MSG_PANEL_ITEMS items; gerb_item->GetMsgPanelInfo( items ); SetMsgPanel( items ); return gerb_item; } return NULL; }
void GERBVIEW_FRAME::Block_Move( wxDC* DC ) { wxPoint delta; wxPoint oldpos; oldpos = GetCrossHairPosition(); m_canvas->SetMouseCaptureCallback( NULL ); SetCrossHairPosition( oldpos ); m_canvas->MoveCursorToCrossHair(); GetScreen()->SetModify(); GetScreen()->m_BlockLocate.Normalize(); /* Calculate displacement vectors. */ delta = GetScreen()->m_BlockLocate.GetMoveVector(); /* Move items in block */ for( GERBER_DRAW_ITEM* item = GetItemsList(); item; item = item->Next() ) { GERBER_DRAW_ITEM* gerb_item = (GERBER_DRAW_ITEM*) item; if( gerb_item->HitTest( GetScreen()->m_BlockLocate ) ) gerb_item->MoveAB( delta ); } m_canvas->Refresh( true ); }
/* Function HasNegativeItems * return true if at least one item must be drawn in background color * used to optimize screen refresh */ bool GERBER_FILE_IMAGE::HasNegativeItems() { if( m_hasNegativeItems < 0 ) // negative items are not yet searched: find them if any { if( m_ImageNegative ) // A negative layer is expected having always negative objects. m_hasNegativeItems = 1; else { m_hasNegativeItems = 0; for( GERBER_DRAW_ITEM* item = GetItemsList(); item; item = item->Next() ) { if( item->GetLayer() != m_GraphicLayer ) continue; if( item->HasNegativeItems() ) { m_hasNegativeItems = 1; break; } } } } return m_hasNegativeItems == 1; }
// -------------------------------------------------------------------------------- // void guAlListBox::ReloadItems( bool reset ) { wxArrayInt Selection; int FirstVisible = GetVisibleRowsBegin(); if( reset ) SetSelection( -1 ); else Selection = GetSelectedItems( false ); m_Items->Empty(); GetItemsList(); m_Items->Insert( new guAlbumItem( 0, wxString::Format( wxT( "%s (%lu)" ), _( "All" ), m_Items->Count() ) ), 0 ); SetItemCount( m_Items->Count() ); if( !reset ) { SetSelectedItems( Selection ); ScrollToRow( FirstVisible ); } RefreshAll(); }
bool GERBVIEW_FRAME::Read_EXCELLON_File( const wxString& aFullFileName ) { wxString msg; int layerId = GetActiveLayer(); // current layer used in GerbView GERBER_FILE_IMAGE_LIST* images = GetGerberLayout()->GetImagesList(); auto gerber_layer = images->GetGbrImage( layerId ); auto drill_layer = dynamic_cast<EXCELLON_IMAGE*>( gerber_layer ); if( gerber_layer && !drill_layer ) { // The active layer contains old gerber data we have to clear Erase_Current_DrawLayer( false ); } if( drill_layer == nullptr ) { drill_layer = new EXCELLON_IMAGE( layerId ); layerId = images->AddGbrImage( drill_layer, layerId ); } if( layerId < 0 ) { DisplayError( this, _( "No room to load file" ) ); return false; } // Read the Excellon drill file: bool success = drill_layer->LoadFile( aFullFileName ); if( !success ) { msg.Printf( _( "File %s not found" ), GetChars( aFullFileName ) ); DisplayError( this, msg ); return false; } // Display errors list if( drill_layer->GetMessages().size() > 0 ) { HTML_MESSAGE_BOX dlg( this, _( "Error reading EXCELLON drill file" ) ); dlg.ListSet( drill_layer->GetMessages() ); dlg.ShowModal(); } if( success ) { EDA_DRAW_PANEL_GAL* canvas = GetGalCanvas(); if( canvas ) { KIGFX::VIEW* view = canvas->GetView(); for( GERBER_DRAW_ITEM* item = drill_layer->GetItemsList(); item; item = item->Next() ) { view->Add( (KIGFX::VIEW_ITEM*) item ); } } } return success; }