212 lines
5.4 KiB
C++
212 lines
5.4 KiB
C++
/*****************************************/
|
|
/* Routines generales d'affichage du PCB */
|
|
/*****************************************/
|
|
|
|
/* fichier tracepcb.cpp */
|
|
|
|
/*
|
|
* Routines d'affichage grille, Boite de coordonnees, Curseurs, marqueurs ...
|
|
*/
|
|
|
|
#include "fctsys.h"
|
|
#include "gr_basic.h"
|
|
|
|
#include "common.h"
|
|
#include "pcbnew.h"
|
|
#include "autorout.h"
|
|
#include "pcbplot.h"
|
|
|
|
#include "protos.h"
|
|
|
|
/* Routines Locales : */
|
|
|
|
/* Variables Locales */
|
|
|
|
|
|
/**********************************************************************/
|
|
void WinEDA_ModuleEditFrame::RedrawActiveWindow( wxDC* DC, bool EraseBg )
|
|
/**********************************************************************/
|
|
|
|
/* Trace le PCB, et les elements complementaires ( axes, grille .. )
|
|
* pour l'ecran actif et ses sous ecran
|
|
*/
|
|
|
|
{
|
|
MODULE* Module;
|
|
PCB_SCREEN* screen = GetScreen();
|
|
|
|
if( !m_Pcb || !screen )
|
|
return;
|
|
|
|
ActiveScreen = screen;
|
|
GRSetDrawMode( DC, GR_COPY );
|
|
|
|
if( EraseBg )
|
|
DrawPanel->EraseScreen( DC );
|
|
|
|
DrawPanel->DrawBackGround( DC );
|
|
TraceWorkSheet( DC, screen, 0 );
|
|
|
|
Module = (MODULE*) m_Pcb->m_Modules;
|
|
for( ; Module != NULL; Module = (MODULE*) Module->Pnext )
|
|
{
|
|
Module->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_OR );
|
|
}
|
|
|
|
Affiche_Status_Box();
|
|
|
|
if( DrawPanel->ManageCurseur )
|
|
DrawPanel->ManageCurseur( DrawPanel, DC, FALSE );
|
|
|
|
/* Reaffichage du curseur */
|
|
DrawPanel->Trace_Curseur( DC );
|
|
|
|
screen->ClrRefreshReq();
|
|
}
|
|
|
|
|
|
/****************************************************************/
|
|
void WinEDA_PcbFrame::RedrawActiveWindow( wxDC* DC, bool EraseBg )
|
|
/****************************************************************/
|
|
|
|
/* Trace le PCB, et les elements complementaires ( axes, grille .. )
|
|
* pour l'ecran actif et ses sous ecran
|
|
*/
|
|
{
|
|
PCB_SCREEN* Screen = GetScreen();
|
|
|
|
if( !m_Pcb || !Screen )
|
|
return;
|
|
|
|
ActiveScreen = GetScreen();
|
|
GRSetDrawMode( DC, GR_COPY );
|
|
|
|
if( EraseBg )
|
|
DrawPanel->EraseScreen( DC );
|
|
|
|
DrawPanel->DrawBackGround( DC );
|
|
|
|
Trace_Pcb( DC, GR_OR );
|
|
TraceWorkSheet( DC, GetScreen(), 0 );
|
|
Affiche_Status_Box();
|
|
|
|
/* Reaffichage des curseurs */
|
|
for( Screen = GetScreen(); Screen != NULL; Screen = Screen->Next() )
|
|
{
|
|
if( DrawPanel->ManageCurseur )
|
|
DrawPanel->ManageCurseur( DrawPanel, DC, FALSE );
|
|
DrawPanel->Trace_Curseur( DC );
|
|
}
|
|
}
|
|
|
|
|
|
/****************************************************/
|
|
void WinEDA_PcbFrame::Trace_Pcb( wxDC* DC, int mode )
|
|
/****************************************************/
|
|
/* Trace l'ensemble des elements du PCB sur l'ecran actif*/
|
|
{
|
|
MARQUEUR* Marqueur;
|
|
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 )
|
|
{
|
|
if( Module->GetLayer() == CMP_N )
|
|
display = FALSE;
|
|
MaskLay &= ~CMP_LAYER;
|
|
}
|
|
if( !DisplayOpt.Show_Modules_Cu )
|
|
{
|
|
if( Module->GetLayer() == COPPER_LAYER_N )
|
|
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 );
|
|
}
|
|
|
|
/* Trace des elements particuliers de Drawings Pcb */
|
|
|
|
PtStruct = m_Pcb->m_Drawings;
|
|
for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext )
|
|
{
|
|
if( PtStruct->m_Flags & IS_MOVED )
|
|
continue;
|
|
|
|
switch( PtStruct->Type() )
|
|
{
|
|
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;
|
|
|
|
case TYPEMARQUEUR: /* Trace des marqueurs */
|
|
Marqueur = (MARQUEUR*) PtStruct;
|
|
Marqueur->Draw( DrawPanel, DC, mode );
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
Trace_Pistes( DrawPanel, m_Pcb, DC, mode );
|
|
if( g_HightLigt_Status )
|
|
DrawHightLight( DC, g_HightLigth_NetCode );
|
|
|
|
EDGE_ZONE* segment = m_Pcb->m_CurrentLimitZone;
|
|
for( ; segment != NULL; segment = (EDGE_ZONE*) segment->Pback )
|
|
{
|
|
if( segment->m_Flags & IS_MOVED )
|
|
continue;
|
|
Trace_DrawSegmentPcb( DrawPanel, DC, segment, mode );
|
|
}
|
|
|
|
Trace_PcbEdges( DC, mode );
|
|
DrawGeneralRatsnest( DC );
|
|
|
|
m_CurrentScreen->ClrRefreshReq();
|
|
}
|
|
|
|
|
|
/**************************************************************/
|
|
void WinEDA_PcbFrame::Trace_PcbEdges( wxDC* DC, int mode_color )
|
|
/**************************************************************/
|
|
/* impression des contours ( edge pcb) : et draw */
|
|
{
|
|
EDA_BaseStruct* PtStruct;
|
|
|
|
if( !m_Pcb )
|
|
return;
|
|
for( PtStruct = m_Pcb->m_Drawings; PtStruct != NULL; PtStruct = PtStruct->Pnext )
|
|
{
|
|
if( PtStruct->m_Flags & IS_MOVED )
|
|
continue;
|
|
if( PtStruct->Type() != TYPEDRAWSEGMENT )
|
|
continue;
|
|
Trace_DrawSegmentPcb( DrawPanel, DC, (DRAWSEGMENT*) PtStruct, mode_color );
|
|
}
|
|
}
|