144 lines
3.8 KiB
C++
144 lines
3.8 KiB
C++
/*****************************************/
|
|
/* Routines generales d'affichage du PCB */
|
|
/*****************************************/
|
|
|
|
/* fichier TRACEPCB.CPP */
|
|
/*
|
|
Routines d'affichage grille, Boite de coordonnees, Curseurs, marqueurs ...
|
|
*/
|
|
|
|
#include "fctsys.h"
|
|
|
|
#include "common.h"
|
|
#include "gerbview.h"
|
|
#include "pcbplot.h"
|
|
|
|
#include "protos.h"
|
|
|
|
|
|
/* Externes */
|
|
|
|
/* Variables Locales */
|
|
|
|
|
|
/**********************************************************************************/
|
|
void WinEDA_DrawPanel::PrintPage(wxDC *DC, bool Print_Sheet_Ref, int printmasklayer)
|
|
/**********************************************************************************/
|
|
/* routine de trace du pcb, avec selection des couches */
|
|
{
|
|
DISPLAY_OPTIONS save_opt;
|
|
|
|
save_opt = DisplayOpt;
|
|
if( printmasklayer & ALL_CU_LAYERS ) DisplayOpt.DisplayPadFill = FILLED;
|
|
else DisplayOpt.DisplayPadFill = SKETCH;
|
|
DisplayOpt.DisplayPadNum = 0;
|
|
DisplayOpt.DisplayPadNoConn = 0;
|
|
DisplayOpt.DisplayPadIsol = 0;
|
|
DisplayOpt.DisplayModEdge = FILLED;
|
|
DisplayOpt.DisplayModText = FILLED;
|
|
DisplayOpt.DisplayPcbTrackFill = FILLED;
|
|
DisplayOpt.DisplayTrackIsol = 0;
|
|
DisplayOpt.DisplayDrawItems = FILLED;
|
|
DisplayOpt.DisplayZones = 1;
|
|
|
|
((WinEDA_GerberFrame*)m_Parent)->Trace_Gerber(DC, GR_COPY);
|
|
|
|
if ( Print_Sheet_Ref )
|
|
m_Parent->TraceWorkSheet(DC, GetScreen(), 0);
|
|
|
|
DisplayOpt = save_opt;
|
|
}
|
|
|
|
/*******************************************************************/
|
|
void WinEDA_GerberFrame::RedrawActiveWindow(wxDC * DC, bool EraseBg)
|
|
/*******************************************************************/
|
|
/* Trace le PCB, et les elements complementaires ( axes, grille .. )
|
|
*/
|
|
{
|
|
PCB_SCREEN * screen = GetScreen();
|
|
|
|
if ( ! m_Pcb ) return;
|
|
ActiveScreen = screen;
|
|
GRSetDrawMode(DC, GR_COPY);
|
|
|
|
if ( EraseBg ) DrawPanel->EraseScreen(DC);
|
|
|
|
DrawPanel->DrawBackGround(DC);
|
|
|
|
Trace_Gerber(DC, GR_OR);
|
|
TraceWorkSheet(DC, screen, 0);
|
|
Affiche_Status_Box();
|
|
|
|
if( DrawPanel->ManageCurseur )
|
|
DrawPanel->ManageCurseur(DrawPanel, DC, FALSE);
|
|
|
|
DrawPanel->Trace_Curseur(DC);
|
|
}
|
|
|
|
/********************************************************/
|
|
void WinEDA_GerberFrame::Trace_Gerber(wxDC * DC, int mode)
|
|
/********************************************************/
|
|
/* Trace l'ensemble des elements du PCB sur l'ecran actif*/
|
|
{
|
|
|
|
if ( ! m_Pcb ) return;
|
|
|
|
// Draw tracks and flashes
|
|
Trace_Pistes(DrawPanel, DC, m_Pcb, mode);
|
|
|
|
// Draw filled polygons
|
|
#define NBMAX 2000
|
|
TRACK * track;
|
|
int nbpoints = 0;
|
|
int nbpointsmax = NBMAX;
|
|
int * coord = (int*) malloc(nbpointsmax * sizeof (int) * 2);
|
|
int * ptcoord = coord;
|
|
track = m_Pcb->m_Zone;
|
|
for ( ; track != NULL ; track = track->Next() )
|
|
{
|
|
if ( track->m_NetCode == 0 ) // StartPoint
|
|
{
|
|
if ( nbpoints )
|
|
{
|
|
int Color = g_DesignSettings.m_LayerColor[track->m_Layer];
|
|
GRClosedPoly(&DrawPanel->m_ClipBox, DC, nbpoints, coord,
|
|
1, Color, Color);
|
|
}
|
|
nbpoints = 2;
|
|
ptcoord = coord;
|
|
* ptcoord = track->m_Start.x; ptcoord++;
|
|
* ptcoord = track->m_Start.y; ptcoord++;
|
|
* ptcoord = track->m_End.x; ptcoord++;
|
|
* ptcoord = track->m_End.y; ptcoord++;
|
|
}
|
|
else
|
|
{
|
|
if ( nbpoints >= nbpointsmax )
|
|
{
|
|
nbpointsmax *= 2;
|
|
coord = (int*) realloc(coord, nbpointsmax * sizeof (int) * 2);
|
|
ptcoord = coord + nbpointsmax;
|
|
}
|
|
nbpoints++;
|
|
* ptcoord = track->m_End.x; ptcoord++;
|
|
* ptcoord = track->m_End.y; ptcoord++;
|
|
}
|
|
if ( track->Next() == NULL ) // Last point
|
|
{
|
|
int Color = g_DesignSettings.m_LayerColor[track->m_Layer];
|
|
GRClosedPoly(&DrawPanel->m_ClipBox, DC, nbpoints, coord,
|
|
1, Color, Color);
|
|
}
|
|
}
|
|
|
|
free(coord);
|
|
|
|
if ( DisplayOpt.DisplayPadNum )
|
|
Affiche_DCodes_Pistes(DrawPanel, DC, m_Pcb, GR_COPY);
|
|
|
|
GetScreen()->ClrRefreshReq();
|
|
}
|
|
|
|
|
|
|