2007-08-15 02:43:03 +00:00
|
|
|
/*****************************************/
|
|
|
|
/* Routines generales d'affichage du PCB */
|
|
|
|
/*****************************************/
|
|
|
|
|
|
|
|
/* fichier tracepcb.cpp */
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
|
|
/*
|
2007-08-15 02:43:03 +00:00
|
|
|
* Routines d'affichage grille, Boite de coordonnees, Curseurs, marqueurs ...
|
|
|
|
*/
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-12-30 03:30:34 +00:00
|
|
|
#include <vector>
|
2007-12-29 19:15:58 +00:00
|
|
|
|
2007-06-05 12:10:51 +00:00
|
|
|
#include "fctsys.h"
|
|
|
|
#include "gr_basic.h"
|
|
|
|
|
|
|
|
#include "common.h"
|
|
|
|
#include "pcbnew.h"
|
|
|
|
#include "autorout.h"
|
|
|
|
#include "pcbplot.h"
|
|
|
|
|
|
|
|
#include "protos.h"
|
|
|
|
|
2007-12-29 19:15:58 +00:00
|
|
|
using namespace std;
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************/
|
2007-08-15 02:43:03 +00:00
|
|
|
void WinEDA_ModuleEditFrame::RedrawActiveWindow( wxDC* DC, bool EraseBg )
|
2007-06-05 12:10:51 +00:00
|
|
|
/**********************************************************************/
|
|
|
|
|
2007-10-30 20:40:08 +00:00
|
|
|
/* Draw the footprint editor BOARD, and others elements : axis, grid ..
|
2007-08-15 02:43:03 +00:00
|
|
|
*/
|
2007-06-05 12:10:51 +00:00
|
|
|
|
|
|
|
{
|
2007-08-15 02:43:03 +00:00
|
|
|
MODULE* Module;
|
2008-02-12 21:12:46 +00:00
|
|
|
PCB_SCREEN* screen = (PCB_SCREEN*)GetScreen();
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
if( !m_Pcb || !screen )
|
|
|
|
return;
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
ActiveScreen = screen;
|
|
|
|
GRSetDrawMode( DC, GR_COPY );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
if( EraseBg )
|
|
|
|
DrawPanel->EraseScreen( DC );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
DrawPanel->DrawBackGround( DC );
|
|
|
|
TraceWorkSheet( DC, screen, 0 );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-10-30 20:40:08 +00:00
|
|
|
/* Redraw the footprint */
|
2007-08-15 02:43:03 +00:00
|
|
|
Module = (MODULE*) m_Pcb->m_Modules;
|
|
|
|
for( ; Module != NULL; Module = (MODULE*) Module->Pnext )
|
|
|
|
{
|
|
|
|
Module->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_OR );
|
|
|
|
}
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
Affiche_Status_Box();
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
if( DrawPanel->ManageCurseur )
|
|
|
|
DrawPanel->ManageCurseur( DrawPanel, DC, FALSE );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-10-30 20:40:08 +00:00
|
|
|
/* Redraw the cursor */
|
2007-08-15 02:43:03 +00:00
|
|
|
DrawPanel->Trace_Curseur( DC );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
screen->ClrRefreshReq();
|
2007-06-05 12:10:51 +00:00
|
|
|
}
|
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
|
2007-06-05 12:10:51 +00:00
|
|
|
/****************************************************************/
|
2007-08-15 02:43:03 +00:00
|
|
|
void WinEDA_PcbFrame::RedrawActiveWindow( wxDC* DC, bool EraseBg )
|
2007-06-05 12:10:51 +00:00
|
|
|
/****************************************************************/
|
2007-08-15 02:43:03 +00:00
|
|
|
|
2007-10-30 20:40:08 +00:00
|
|
|
/* Draw the BOARD, and others elements : axis, grid ..
|
2007-08-15 02:43:03 +00:00
|
|
|
*/
|
2007-06-05 12:10:51 +00:00
|
|
|
{
|
2008-02-12 21:12:46 +00:00
|
|
|
PCB_SCREEN* Screen = (PCB_SCREEN*)GetScreen();
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
if( !m_Pcb || !Screen )
|
|
|
|
return;
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
ActiveScreen = GetScreen();
|
|
|
|
GRSetDrawMode( DC, GR_COPY );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
if( EraseBg )
|
|
|
|
DrawPanel->EraseScreen( DC );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
DrawPanel->DrawBackGround( DC );
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
Trace_Pcb( DC, GR_OR );
|
|
|
|
TraceWorkSheet( DC, GetScreen(), 0 );
|
|
|
|
Affiche_Status_Box();
|
2007-06-05 12:10:51 +00:00
|
|
|
|
2007-10-30 20:40:08 +00:00
|
|
|
if( DrawPanel->ManageCurseur )
|
|
|
|
DrawPanel->ManageCurseur( DrawPanel, DC, FALSE );
|
|
|
|
/* Redraw the cursor */
|
|
|
|
DrawPanel->Trace_Curseur( DC );
|
2007-06-05 12:10:51 +00:00
|
|
|
}
|
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
|
2007-06-05 12:10:51 +00:00
|
|
|
/****************************************************/
|
2007-08-15 02:43:03 +00:00
|
|
|
void WinEDA_PcbFrame::Trace_Pcb( wxDC* DC, int mode )
|
2007-06-05 12:10:51 +00:00
|
|
|
/****************************************************/
|
2007-10-30 20:40:08 +00:00
|
|
|
/* Redraw the BOARD items but not cursors, axis or grid */
|
2007-06-05 12:10:51 +00:00
|
|
|
{
|
2007-08-15 02:43:03 +00:00
|
|
|
MODULE* Module;
|
|
|
|
EDA_BaseStruct* PtStruct;
|
|
|
|
|
|
|
|
if( !m_Pcb )
|
|
|
|
return;
|
|
|
|
|
|
|
|
Module = (MODULE*) m_Pcb->m_Modules;
|
|
|
|
for( ; Module != NULL; Module = (MODULE*) Module->Pnext )
|
|
|
|
{
|
|
|
|
bool display = true;
|
|
|
|
int MaskLay = ALL_CU_LAYERS;
|
|
|
|
|
|
|
|
if( Module->m_Flags & IS_MOVED )
|
|
|
|
continue;
|
|
|
|
|
|
|
|
if( !DisplayOpt.Show_Modules_Cmp )
|
|
|
|
{
|
2007-08-23 04:28:46 +00:00
|
|
|
if( Module->GetLayer() == CMP_N )
|
2007-08-15 02:43:03 +00:00
|
|
|
display = FALSE;
|
|
|
|
MaskLay &= ~CMP_LAYER;
|
|
|
|
}
|
|
|
|
if( !DisplayOpt.Show_Modules_Cu )
|
|
|
|
{
|
2007-10-07 18:24:15 +00:00
|
|
|
if( Module->GetLayer() == COPPER_LAYER_N )
|
2007-08-15 02:43:03 +00:00
|
|
|
display = FALSE;
|
|
|
|
MaskLay &= ~CUIVRE_LAYER;
|
|
|
|
}
|
|
|
|
|
|
|
|
if( display )
|
|
|
|
Module->Draw( DrawPanel, DC, wxPoint( 0, 0 ), mode );
|
|
|
|
else
|
|
|
|
Trace_Pads_Only( DrawPanel, DC, Module, 0, 0, MaskLay, mode );
|
|
|
|
}
|
|
|
|
|
2007-10-30 20:40:08 +00:00
|
|
|
/* Draw the graphic items */
|
2007-08-15 02:43:03 +00:00
|
|
|
|
|
|
|
PtStruct = m_Pcb->m_Drawings;
|
|
|
|
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext )
|
|
|
|
{
|
|
|
|
if( PtStruct->m_Flags & IS_MOVED )
|
|
|
|
continue;
|
|
|
|
|
2007-09-01 12:00:30 +00:00
|
|
|
switch( PtStruct->Type() )
|
2007-08-15 02:43:03 +00:00
|
|
|
{
|
|
|
|
case TYPECOTATION:
|
|
|
|
( (COTATION*) PtStruct )->Draw( DrawPanel, DC, wxPoint( 0, 0 ), mode );
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TYPETEXTE:
|
|
|
|
( (TEXTE_PCB*) PtStruct )->Draw( DrawPanel, DC, wxPoint( 0, 0 ), mode );
|
|
|
|
break;
|
|
|
|
|
|
|
|
case TYPEMIRE:
|
|
|
|
( (MIREPCB*) PtStruct )->Draw( DrawPanel, DC, wxPoint( 0, 0 ), mode );
|
|
|
|
break;
|
|
|
|
|
2007-10-30 20:40:08 +00:00
|
|
|
case TYPEDRAWSEGMENT:
|
|
|
|
Trace_DrawSegmentPcb( DrawPanel, DC, (DRAWSEGMENT*) PtStruct, mode );
|
|
|
|
break;
|
|
|
|
|
|
|
|
default:
|
2007-08-15 02:43:03 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2007-11-27 22:49:35 +00:00
|
|
|
// draw the BOARD's markers.
|
|
|
|
for( unsigned i=0; i<m_Pcb->m_markers.size(); ++i )
|
|
|
|
{
|
|
|
|
m_Pcb->m_markers[i]->Draw( DrawPanel, DC, mode );
|
|
|
|
}
|
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
Trace_Pistes( DrawPanel, m_Pcb, DC, mode );
|
|
|
|
if( g_HightLigt_Status )
|
|
|
|
DrawHightLight( DC, g_HightLigth_NetCode );
|
|
|
|
|
|
|
|
|
2008-02-01 01:09:39 +00:00
|
|
|
for( int ii = 0; ii < m_Pcb->GetAreaCount(); ii++ )
|
2007-12-29 19:15:58 +00:00
|
|
|
{
|
2008-01-31 20:53:44 +00:00
|
|
|
ZONE_CONTAINER* edge_zone = m_Pcb->GetArea(ii);
|
2008-02-04 11:26:56 +00:00
|
|
|
// Areas must be drawn here only if not moved or dragged,
|
|
|
|
// because these areas are drawn by ManageCursor() in a specific manner
|
|
|
|
if ( (edge_zone->m_Flags & (IN_EDIT | IS_DRAGGED | IS_MOVED)) == 0 )
|
|
|
|
edge_zone->Draw( DrawPanel, DC, wxPoint(0,0), mode);
|
2007-12-29 19:15:58 +00:00
|
|
|
}
|
|
|
|
|
2007-08-15 02:43:03 +00:00
|
|
|
DrawGeneralRatsnest( DC );
|
|
|
|
|
|
|
|
m_CurrentScreen->ClrRefreshReq();
|
2007-06-05 12:10:51 +00:00
|
|
|
}
|
|
|
|
|