/************************************************************************/ /* basepcbframe.cpp - fonctions des classes du type WinEDA_BasePcbFrame */ /************************************************************************/ #ifdef __GNUG__ #pragma implementation #endif #include "fctsys.h" #include "common.h" #include "pcbnew.h" #include "bitmaps.h" #include "protos.h" #include "id.h" #if defined(DEBUG) #include "collectors.h" #endif /*******************************/ /* class WinEDA_BasePcbFrame */ /*******************************/ /****************/ /* Constructeur */ /****************/ WinEDA_BasePcbFrame::WinEDA_BasePcbFrame( wxWindow* father, WinEDA_App* parent, int idtype, const wxString& title, const wxPoint& pos, const wxSize& size ) : WinEDA_DrawFrame( father, idtype, parent, title, pos, size ) { m_InternalUnits = 10000; // Internal unit = 1/10000 inch m_CurrentScreen = NULL; m_Pcb = NULL; m_DisplayPadFill = TRUE; // How to draw pads m_DisplayPadNum = TRUE; // show pads number m_DisplayModEdge = FILLED; // How to show module drawings m_DisplayModText = FILLED; // How to show module texts m_DisplayPcbTrackFill = TRUE; /* FALSE = sketch , TRUE = filled */ m_Draw3DFrame = NULL; // Display Window in 3D mode (OpenGL) #if defined(DEBUG) m_Collector = new GENERAL_COLLECTOR(); #endif } WinEDA_BasePcbFrame::~WinEDA_BasePcbFrame( void ) { #if defined(DEBUG) delete m_Collector; #endif } /**************************************/ int WinEDA_BasePcbFrame::BestZoom( void ) /**************************************/ { int dx, dy, ii, jj; int bestzoom; wxSize size; if( m_Pcb == NULL ) return 32; m_Pcb->ComputeBoundaryBox(); /* calcul du zoom montrant tout le dessim */ dx = m_Pcb->m_BoundaryBox.GetWidth(); dy = m_Pcb->m_BoundaryBox.GetHeight(); size = DrawPanel->GetClientSize(); ii = ( dx + (size.x / 2) ) / size.x; jj = ( dy + (size.y / 2) ) / size.y; bestzoom = MAX( ii, jj ) + 1; m_CurrentScreen->m_Curseur = m_Pcb->m_BoundaryBox.Centre(); return bestzoom; } void WinEDA_BasePcbFrame::ReCreateMenuBar( void ) // fonction virtuelle { } #include "3d_viewer.h" /***********************************************************/ void WinEDA_BasePcbFrame::Show3D_Frame( wxCommandEvent& event ) /***********************************************************/ /* Ouvre la frame d'affichage 3D */ { #ifndef GERBVIEW // Create the main frame window if( m_Draw3DFrame ) { DisplayInfo( this, _( "3D Frame already opened" ) ); return; } m_Draw3DFrame = new WinEDA3D_DrawFrame( this, m_Parent, _( "3D Viewer" ) ); // Show the frame m_Draw3DFrame->Show( TRUE ); #endif } /* Virtual functions: Do nothing for WinEDA_BasePcbFrame window */ /***********************************************************************************/ void WinEDA_BasePcbFrame::SaveCopyInUndoList( EDA_BaseStruct* ItemToCopy, int flag ) /***********************************************************************************/ { } /********************************************************/ void WinEDA_BasePcbFrame::GetComponentFromUndoList( void ) /********************************************************/ { } /********************************************************/ void WinEDA_BasePcbFrame::GetComponentFromRedoList( void ) /********************************************************/ { } /****************************************************************/ void WinEDA_BasePcbFrame::SwitchLayer( wxDC* DC, int layer ) /*****************************************************************/ { //Note: virtual, overridden in WinEDA_PcbFrame; int preslayer = GetScreen()->m_Active_Layer; //if there is only one layer, don't switch. if( m_Pcb->m_BoardSettings->m_CopperLayerCount <= 1 ) layer = LAYER_CUIVRE_N; // Of course we select the copper layer //otherwise, we select the requested layer only if it is possible if( layer != LAYER_CMP_N && layer >= m_Pcb->m_BoardSettings->m_CopperLayerCount - 1 ) return; if( preslayer == layer ) return; GetScreen()->m_Active_Layer = layer; if( DisplayOpt.ContrastModeDisplay ) GetScreen()->SetRefreshReq(); } #if defined(DEBUG) /****************************************************************/ GENERAL_COLLECTORS_GUIDE WinEDA_BasePcbFrame::GetCollectorsGuide() /****************************************************************/ { GENERAL_COLLECTORS_GUIDE guide( m_Pcb->m_BoardSettings->GetVisibleLayers(), GetScreen()->m_Active_Layer ); // account for the globals guide.SetIgnoreMTextsMarkedNoShow( g_ModuleTextNOVColor & ITEM_NOT_SHOW ); guide.SetIgnoreMTextsOnCopper( g_ModuleTextCUColor & ITEM_NOT_SHOW ); guide.SetIgnoreMTextsOnCmp( g_ModuleTextCMPColor & ITEM_NOT_SHOW ); guide.SetIgnoreModulesOnCu( !DisplayOpt.Show_Modules_Cu ); guide.SetIgnoreModulesOnCmp( !DisplayOpt.Show_Modules_Cmp ); return guide; } #endif