Solved problem in fill zone calculations when using buried or blind vias (like micro vias)

This commit is contained in:
CHARRAS 2008-03-05 14:57:24 +00:00
parent cd213a054f
commit 10f1040b42
4 changed files with 33 additions and 14 deletions

View File

@ -5,6 +5,12 @@ Started 2007-June-11
Please add newer entries at the top, list the date and your name with
email address.
2008-Mar-3 UPDATE Dick Hollenbeck <dick@softplc.com>
================================================================================
+pcbnew
Solved problem in fill zone calculations when using buried or blind vias (like micro vias)
2008-Feb-18 UPDATE Igor Plyatov <plyatov@mail.ru>
================================================================================
+common

View File

@ -288,7 +288,7 @@ void PlaceCells( BOARD* Pcb, int net_code, int flag )
dx = PtText->Pitch() * PtText->GetLength();
dy = PtText->m_Size.y + PtText->m_Width;
/* Calcul du rectangle d'encadrement */
/* Put bounding box (rectangle) on matrix */
dx /= 2; dy /= 2; /* dx et dy = demi dimensionx X et Y */
ux1 = ux0 + dx; uy1 = uy0 + dy;
ux0 -= dx; uy0 -= dy;
@ -309,17 +309,18 @@ void PlaceCells( BOARD* Pcb, int net_code, int flag )
}
}
/* Placement des PISTES */
/* Put tracks and vias on matrix */
pt_segm = Pcb->m_Track;
for( ; pt_segm != NULL; pt_segm = (TRACK*) pt_segm->Pnext )
{
if( net_code == pt_segm->GetNet() )
continue;
TraceSegmentPcb( Pcb, pt_segm, HOLE, marge, WRITE_CELL );
TraceSegmentPcb( Pcb, pt_segm, VIA_IMPOSSIBLE, via_marge, WRITE_OR_CELL );
TraceSegmentPcb( Pcb, pt_segm, HOLE, marge, WRITE_CELL );
TraceSegmentPcb( Pcb, pt_segm, VIA_IMPOSSIBLE, via_marge, WRITE_OR_CELL );
}
/* Placement des ZONES */
/* Put zone filling on matrix */
pt_segm = (TRACK*) Pcb->m_Zone;
for( ; pt_segm != NULL; pt_segm = (TRACK*) pt_segm->Pnext )
{

View File

@ -251,7 +251,6 @@ void TraceSegmentPcb( BOARD* Pcb, TRACK* pt_segm, int color, int marge, int op_l
{
int demi_pas, demi_largeur;
int ux0, uy0, ux1, uy1;
int layer = pt_segm->GetLayer();
demi_pas = g_GridRoutingSize / 2;
@ -262,17 +261,32 @@ void TraceSegmentPcb( BOARD* Pcb, TRACK* pt_segm, int color, int marge, int op_l
ux1 = pt_segm->m_End.x - Pcb->m_BoundaryBox.m_Pos.x;
uy1 = pt_segm->m_End.y - Pcb->m_BoundaryBox.m_Pos.y;
if( color == VIA_IMPOSSIBLE )
layer = -1;
/* Test si VIA (cercle plein a tracer) */
if( pt_segm->Type() == TYPEVIA )
{
TraceFilledCercle( Pcb, pt_segm->m_Start.x, pt_segm->m_Start.y, demi_largeur,
0x0000FFFF, color, op_logique );
int mask_layer = 0;
if ( pt_segm->IsOnLayer(Route_Layer_BOTTOM) )
mask_layer = 1 << Route_Layer_BOTTOM;
if ( pt_segm->IsOnLayer(Route_Layer_TOP) )
{
if ( mask_layer == 0 )
mask_layer = 1 << Route_Layer_TOP;
else mask_layer = -1;
}
if( color == VIA_IMPOSSIBLE )
mask_layer = -1;
if ( mask_layer )
TraceFilledCercle( Pcb, pt_segm->m_Start.x, pt_segm->m_Start.y, demi_largeur,
mask_layer, color, op_logique );
return;
}
int layer = pt_segm->GetLayer();
if( color == VIA_IMPOSSIBLE )
layer = -1;
/* Le segment est ici un segment de droite ou un cercle ou un arc: */
if( pt_segm->m_Shape == S_CIRCLE )
{

View File

@ -116,9 +116,7 @@ OBJECTS= $(TARGET).o classpcb.o\
modedit.o\
export_gencad.o\
hotkeys.o \
collectors.o \
set_color.o
collectors.o
PolyLine.o: ../polygon/PolyLine.cpp ../polygon/PolyLine.h $(COMMON)