diff --git a/3d-viewer/3d_draw.cpp b/3d-viewer/3d_draw.cpp index 8536410b10..64172a1aa1 100644 --- a/3d-viewer/3d_draw.cpp +++ b/3d-viewer/3d_draw.cpp @@ -20,7 +20,7 @@ #include "pcbstruct.h" #include "macros.h" -//#include "pcbnew.h" +// #include "pcbnew.h" #include "3d_viewer.h" #include "trackball.h" @@ -59,7 +59,8 @@ void Pcb3D_GLCanvas::Redraw( bool finish ) glRotatef(g_Parm_3D_Visu.m_Rot[1], 0.0, 1.0, 0.0); glRotatef(g_Parm_3D_Visu.m_Rot[2], 0.0, 0.0, 1.0); - if( m_gllist ) glCallList( m_gllist ); + if( m_gllist ) + glCallList( m_gllist ); else { m_gllist = CreateDrawGL_List(); @@ -67,15 +68,17 @@ void Pcb3D_GLCanvas::Redraw( bool finish ) } glFlush(); - if (finish) glFinish(); + if( finish ) + glFinish(); SwapBuffers(); - } +} + /**********************************************/ GLuint Pcb3D_GLCanvas::CreateDrawGL_List() /**********************************************/ /* Creation de la liste des elements a afficher -*/ + */ { GLuint gllist = glGenLists( 1 ); WinEDA_BasePcbFrame * pcbframe = m_Parent->m_Parent; @@ -93,20 +96,21 @@ int ii; g_Parm_3D_Visu.m_Layers = pcb->m_BoardSettings->m_CopperLayerCount; g_Parm_3D_Visu.m_BoardScale = 2.0 / MAX(g_Parm_3D_Visu.m_BoardSize.x, g_Parm_3D_Visu.m_BoardSize.y); float epoxy_width = 1.6; // epoxy width in mm - g_Parm_3D_Visu.m_Epoxy_Width = epoxy_width/2.54 * 1000 + g_Parm_3D_Visu.m_Epoxy_Width = epoxy_width / 2.54 * 1000 * g_Parm_3D_Visu.m_BoardScale; /* calcul de l'altitude de chaque couche */ - for ( ii = 0; ii < 32; ii++ ) + for( ii = 0; ii < 32; ii++ ) { - if ( ii < g_Parm_3D_Visu.m_Layers ) + if( ii < g_Parm_3D_Visu.m_Layers ) g_Parm_3D_Visu.m_LayerZcoord[ii] = g_Parm_3D_Visu.m_Epoxy_Width * ii - / (g_Parm_3D_Visu.m_Layers-1); - else g_Parm_3D_Visu.m_LayerZcoord[ii] = g_Parm_3D_Visu.m_Epoxy_Width; + / (g_Parm_3D_Visu.m_Layers - 1); + else + g_Parm_3D_Visu.m_LayerZcoord[ii] = g_Parm_3D_Visu.m_Epoxy_Width; } GLfloat zpos_cu = 500 * g_Parm_3D_Visu.m_BoardScale; GLfloat zpos_cmp = g_Parm_3D_Visu.m_Epoxy_Width + zpos_cu; - g_Parm_3D_Visu.m_LayerZcoord[ADHESIVE_N_CU] = -zpos_cu*2; + g_Parm_3D_Visu.m_LayerZcoord[ADHESIVE_N_CU] = -zpos_cu * 2; g_Parm_3D_Visu.m_LayerZcoord[ADHESIVE_N_CMP] = zpos_cmp + zpos_cu; g_Parm_3D_Visu.m_LayerZcoord[SILKSCREEN_N_CU] = -zpos_cu; g_Parm_3D_Visu.m_LayerZcoord[SILKSCREEN_N_CMP] = zpos_cmp; @@ -119,43 +123,49 @@ int ii; glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE); - /* draw axes*/ + /* draw axes */ glEnable(GL_COLOR_MATERIAL); SetGLColor(WHITE); glBegin(GL_LINES); - glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis - glVertex3f( 0.0 , 0.0, 0.0); glVertex3f(1.0, 0.0, 0.0); // X axis - glVertex3f( 0.0 , 0.0, 0.0); glVertex3f(0.0, -1.0, 0.0); // y axis - glNormal3f( 1.0, 0.0, 0.0); // Normal is Y axis - glVertex3f( 0.0 , 0.0, 0.0); glVertex3f(0.0, 0.0, 0.3); // z axis + glNormal3f( 0.0, 0.0, 1.0 ); // Normal is Z axis + glVertex3f( 0.0, 0.0, 0.0 ); + glVertex3f( 1.0, 0.0, 0.0 ); // X axis + glVertex3f( 0.0, 0.0, 0.0); + glVertex3f( 0.0, -1.0, 0.0); // Y axis + glNormal3f( 1.0, 0.0, 0.0); // Normal is Y axis + glVertex3f( 0.0 , 0.0, 0.0); + glVertex3f( 0.0, 0.0, 0.3 ); // Z axis glEnd(); - /* Draw epoxy limits (do not use, works and test in progress)*/ + /* Draw epoxy limits (do not use, works and test in progress) */ #if 0 -glEnable(GL_FOG); + glEnable(GL_FOG); GLfloat param; -// param = GL_LINEAR; glFogfv(GL_FOG_MODE,& param); - param = 0.2; glFogfv(GL_FOG_DENSITY,& param); - param = g_Parm_3D_Visu.m_LayerZcoord[15]; glFogfv(GL_FOG_END,& param); +// param = GL_LINEAR; +// glFogfv(GL_FOG_MODE, & param); + param = 0.2; + glFogfv(GL_FOG_DENSITY, & param); + param = g_Parm_3D_Visu.m_LayerZcoord[15]; + glFogfv(GL_FOG_END, & param); glBegin(GL_QUADS); SetGLColor(g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[CMP_N]); double sx = DataScale3D * g_Parm_3D_Visu.m_BoardSize.x / 2; double sy = DataScale3D * g_Parm_3D_Visu.m_BoardSize.y / 2; double zpos = g_Parm_3D_Visu.m_LayerZcoord[15]; - glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis + glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis sx = sy = 0.5; - glVertex3f( -sx, -sy , zpos); - glVertex3f( -sx, sy , zpos); - glVertex3f( sx, sy , zpos); - glVertex3f( sx, -sy , zpos); + glVertex3f( -sx, -sy, zpos ); + glVertex3f( -sx, sy, zpos ); + glVertex3f( sx, sy, zpos ); + glVertex3f( sx, -sy, zpos ); glEnd(); glBegin(GL_QUADS); SetGLColor(g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[COPPER_LAYER_N]); - glNormal3f( 0.0, 0.0, -1.0); // Normal is -Z axis - glVertex3f( -sx, -sy , 0); - glVertex3f( -sx, sy , 0); - glVertex3f( sx, sy , 0); - glVertex3f( sx, -sy , 0); + glNormal3f( 0.0, 0.0, -1.0 ); // Normal is -Z axis + glVertex3f( -sx, -sy, 0 ); + glVertex3f( -sx, sy, 0 ); + glVertex3f( sx, sy, 0 ); + glVertex3f( sx, -sy, 0 ); glEnd(); #endif @@ -164,27 +174,29 @@ glEnable(GL_FOG); -g_Parm_3D_Visu.m_BoardPos.y * g_Parm_3D_Visu.m_BoardScale, 0.0F); - glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis + glNormal3f( 0.0, 0.0, 1.0 ); // Normal is Z axis /* Tracé des pistes : */ - for (pt_piste = pcb->m_Track ; pt_piste != NULL ; pt_piste = (TRACK*) pt_piste->Pnext ) - { - if ( pt_piste->Type() == TYPEVIA ) + for( pt_piste = pcb->m_Track; pt_piste != NULL; pt_piste = (TRACK*) pt_piste->Pnext ) + { + if( pt_piste->Type() == TYPEVIA ) Draw3D_Via((SEGVIA*)pt_piste); - else Draw3D_Track( pt_piste); - } + else + Draw3D_Track( pt_piste); + } /* Tracé des edges */ EDA_BaseStruct * PtStruct; - for ( PtStruct = pcb->m_Drawings; PtStruct != NULL; PtStruct = PtStruct->Pnext) + for( PtStruct = pcb->m_Drawings; PtStruct != NULL; PtStruct = PtStruct->Pnext ) { #define STRUCT ((DRAWSEGMENT *) PtStruct) - if( PtStruct->Type() != TYPEDRAWSEGMENT ) continue; + if( PtStruct->Type() != TYPEDRAWSEGMENT ) + continue; Draw3D_DrawSegment(STRUCT); } /* tracé des modules */ MODULE * Module = (MODULE*) pcb->m_Modules; - for ( ; Module != NULL; Module = (MODULE *) Module->Pnext ) + for( ; Module != NULL; Module = (MODULE *) Module->Pnext ) { Module->Draw3D(this); } @@ -192,11 +204,12 @@ MODULE * Module = (MODULE*) pcb->m_Modules; /* Test for errors */ GLenum err = glGetError(); - if ( err != GL_NO_ERROR ) + if( err != GL_NO_ERROR ) DisplayError(this, wxT("Error in GL commands") ); return gllist; } + /************************************************/ void Pcb3D_GLCanvas::Draw3D_Track(TRACK * track) /************************************************/ @@ -207,13 +220,14 @@ int color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[layer]; double ox, oy, fx, fy; double w; - if ( color & ITEM_NOT_SHOW ) return; - if ( layer == CMP_N ) - layer = g_Parm_3D_Visu.m_Layers -1; + if( color & ITEM_NOT_SHOW ) + return; + if( layer == LAST_COPPER_LAYER ) + layer = g_Parm_3D_Visu.m_Layers - 1; zpos = g_Parm_3D_Visu.m_LayerZcoord[layer]; SetGLColor(color); - glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0); + glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0 ); w = track->m_Width * g_Parm_3D_Visu.m_BoardScale; ox = track->m_Start.x * g_Parm_3D_Visu.m_BoardScale; @@ -223,11 +237,12 @@ double w; Draw3D_FilledSegment(ox, -oy, fx, -fy, w, zpos); } + /********************************************/ void Pcb3D_GLCanvas::Draw3D_Via(SEGVIA * via) /*********************************************/ /* 3D drawing for a VIA (cylinder + filled circles) -*/ + */ { double x, y, r, hole; int layer, top_layer, bottom_layer; @@ -236,24 +251,26 @@ int color; r = via->m_Width * g_Parm_3D_Visu.m_BoardScale / 2; hole = g_Parm_3D_Visu.m_BoardSettings->m_ViaDrill * g_Parm_3D_Visu.m_BoardScale / 2; - x = via->m_Start.x * g_Parm_3D_Visu.m_BoardScale; + x = via->m_Start.x * g_Parm_3D_Visu.m_BoardScale; y = via->m_Start.y * g_Parm_3D_Visu.m_BoardScale; via->ReturnLayerPair(&top_layer, &bottom_layer); // Drawing filled circles: - for ( layer = bottom_layer; layer < g_Parm_3D_Visu.m_Layers; layer++ ) + for( layer = bottom_layer; layer < g_Parm_3D_Visu.m_Layers; layer++ ) { zpos = g_Parm_3D_Visu.m_LayerZcoord[layer]; - if ( layer < g_Parm_3D_Visu.m_Layers-1 ) + if( layer < g_Parm_3D_Visu.m_Layers - 1 ) color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[layer]; - else color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[CMP_N]; - if ( color & ITEM_NOT_SHOW ) continue; + else + color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[CMP_N]; + if( color & ITEM_NOT_SHOW ) + continue; SetGLColor(color); - glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0); + glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0 ); Draw3D_FilledCircle(x, -y, r, hole, zpos); - if ( layer >= top_layer) break; - + if( layer >= top_layer) + break; } // Drawing hole: SetGLColor(DARKGRAY); @@ -271,34 +288,34 @@ double x, y, xf, yf; double zpos, w; int color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[segment->GetLayer()]; - if ( color & ITEM_NOT_SHOW ) return; + if( color & ITEM_NOT_SHOW ) + return; SetGLColor(color); w = segment->m_Width * g_Parm_3D_Visu.m_BoardScale; x = segment->m_Start.x * g_Parm_3D_Visu.m_BoardScale; y = segment->m_Start.y * g_Parm_3D_Visu.m_BoardScale; xf = segment->m_End.x * g_Parm_3D_Visu.m_BoardScale; - yf = segment->m_End.y * g_Parm_3D_Visu.m_BoardScale; + yf = segment->m_End.y * g_Parm_3D_Visu.m_BoardScale; - if ( segment->GetLayer() == EDGE_N) + if( segment->GetLayer() == EDGE_N ) { - for ( layer = 0; layer < g_Parm_3D_Visu.m_Layers; layer++ ) + for( layer = 0; layer < g_Parm_3D_Visu.m_Layers; layer++ ) { - glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0); + glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0 ); zpos = g_Parm_3D_Visu.m_LayerZcoord[layer]; - Draw3D_FilledSegment( x, -y, xf, -yf, w, zpos); + Draw3D_FilledSegment( x, -y, xf, -yf, w, zpos ); } } else { zpos = g_Parm_3D_Visu.m_LayerZcoord[segment->GetLayer()]; - Draw3D_FilledSegment( x, -y, xf, -yf, w, zpos); + Draw3D_FilledSegment( x, -y, xf, -yf, w, zpos ); } } - /*********************************************/ void MODULE::Draw3D(Pcb3D_GLCanvas * glcanvas) /*********************************************/ @@ -308,43 +325,45 @@ D_PAD * pad = m_Pads; #if 0 if( ! DisplayOpt.Show_Modules_Cmp ) { - if(m_Layer == CMP_N) return; + if( m_Layer == CMP_N ) + return; } if( ! DisplayOpt.Show_Modules_Cu ) { - if(m_Layer == COPPER_LAYER_N) return; + if( m_Layer == COPPER_LAYER_N ) + return; } #endif /* Draw pads */ - glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE); - glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis + glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE); + glNormal3f( 0.0, 0.0, 1.0 ); // Normal is Z axis for( ; pad != NULL; pad = (D_PAD*) pad->Pnext ) { pad->Draw3D(glcanvas); } - /* Draw module shape: 3D shape if exists (or module edge if not exists)*/ + /* Draw module shape: 3D shape if exists (or module edge if not exists) */ Struct3D_Master * Struct3D = m_3D_Drawings; bool As3dShape = FALSE; glPushMatrix(); - glTranslatef(m_Pos.x * g_Parm_3D_Visu.m_BoardScale, + glTranslatef( m_Pos.x * g_Parm_3D_Visu.m_BoardScale, -m_Pos.y * g_Parm_3D_Visu.m_BoardScale, g_Parm_3D_Visu.m_LayerZcoord[m_Layer] ); - if ( m_Orient ) + if( m_Orient ) { glRotatef( (double)m_Orient / 10, 0.0, 0.0, 1.0 ); } - if ( m_Layer == COPPER_LAYER_N ) + if( m_Layer == COPPER_LAYER_N ) { glRotatef( 180.0, 0.0, 1.0, 0.0 ); glRotatef( 180.0, 0.0, 0.0, 1.0 ); } - DataScale3D = g_Parm_3D_Visu.m_BoardScale*UNITS3D_TO_UNITSPCB; + DataScale3D = g_Parm_3D_Visu.m_BoardScale * UNITS3D_TO_UNITSPCB; - for ( ; Struct3D != NULL; Struct3D = (Struct3D_Master *) Struct3D->Pnext ) + for( ; Struct3D != NULL; Struct3D = (Struct3D_Master *) Struct3D->Pnext ) { - if ( ! Struct3D->m_Shape3DName.IsEmpty() ) + if( ! Struct3D->m_Shape3DName.IsEmpty() ) { As3dShape = TRUE; Struct3D->ReadData(); @@ -352,39 +371,42 @@ bool As3dShape = FALSE; } glPopMatrix(); - if ( ! As3dShape) + if( ! As3dShape ) { - EDA_BaseStruct * Struct = m_Drawings; - glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis - for( ;Struct != NULL; Struct = Struct->Pnext ) + EDA_BaseStruct * Struct = m_Drawings; + glNormal3f( 0.0, 0.0, 1.0 ); // Normal is Z axis + for( ; Struct != NULL; Struct = Struct->Pnext ) { switch( Struct->Type() ) { - case TYPETEXTEMODULE: - break; + case TYPETEXTEMODULE: + break; - case TYPEEDGEMODULE: - ((EDGE_MODULE *) Struct)->Draw3D(glcanvas); - break; + case TYPEEDGEMODULE: + ((EDGE_MODULE *) Struct)->Draw3D(glcanvas); + break; - default: break; + default: + break; } } } } + /***************************************************/ void EDGE_MODULE::Draw3D(Pcb3D_GLCanvas * glcanvas) /***************************************************/ { -int ux0, uy0, dx, dy,rayon, StAngle, EndAngle; -double scale, x, y, fx, fy, w, zpos ; +int ux0, uy0, dx, dy, rayon, StAngle, EndAngle; +double scale, x, y, fx, fy, w, zpos; int color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[m_Layer]; - if ( color & ITEM_NOT_SHOW ) return; + if( color & ITEM_NOT_SHOW ) + return; SetGLColor(color); - glNormal3f( 0.0, 0.0, (m_Layer == COPPER_LAYER_N) ? -1.0 : 1.0); + glNormal3f( 0.0, 0.0, (m_Layer == COPPER_LAYER_N) ? -1.0 : 1.0 ); scale = g_Parm_3D_Visu.m_BoardScale; ux0 = m_Start.x; @@ -393,28 +415,28 @@ int color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[m_Layer]; dy = m_End.y; zpos = g_Parm_3D_Visu.m_LayerZcoord[m_Layer]; w = m_Width * g_Parm_3D_Visu.m_BoardScale; - switch (m_Shape ) - { - case S_SEGMENT: - x = m_Start.x * g_Parm_3D_Visu.m_BoardScale; - y = m_Start.y * g_Parm_3D_Visu.m_BoardScale; - fx = dx * g_Parm_3D_Visu.m_BoardScale; - fy = dy * g_Parm_3D_Visu.m_BoardScale; - Draw3D_FilledSegment(x, -y, fx, -fy, w, zpos); - break ; + switch( m_Shape ) + { + case S_SEGMENT: + x = m_Start.x * g_Parm_3D_Visu.m_BoardScale; + y = m_Start.y * g_Parm_3D_Visu.m_BoardScale; + fx = dx * g_Parm_3D_Visu.m_BoardScale; + fy = dy * g_Parm_3D_Visu.m_BoardScale; + Draw3D_FilledSegment(x, -y, fx, -fy, w, zpos); + break ; - case S_CIRCLE: - rayon = (int)hypot((double)(dx-ux0),(double)(dy-uy0) ); - /* TO DO */ - break; + case S_CIRCLE: + rayon = (int)hypot( (double)(dx - ux0), (double)(dy - uy0) ); + /* TO DO */ + break; - case S_ARC: - rayon = (int)hypot((double)(dx-ux0),(double)(dy-uy0) ); - StAngle = (int)ArcTangente( dy-uy0, dx-ux0 ); - EndAngle = StAngle + m_Angle; - /* TO DO */ - break; - } + case S_ARC: + rayon = (int)hypot( (double)(dx - ux0), (double)(dy - uy0) ); + StAngle = (int)ArcTangente( dy - uy0, dx - ux0 ); + EndAngle = StAngle + m_Angle; + /* TO DO */ + break; + } } @@ -422,11 +444,11 @@ int color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[m_Layer]; void D_PAD::Draw3D(Pcb3D_GLCanvas * glcanvas) /***********************************************/ /* Dessin 3D des pads avec leur trou de percage -*/ + */ { int ii, ll, layer, nlmax; -int ux0,uy0, - dx,dx0,dy,dy0, +int ux0, uy0, + dx, dx0, dy, dy0, delta_cx, delta_cy, xc, yc; int angle, delta_angle; @@ -443,7 +465,7 @@ int color; scale = g_Parm_3D_Visu.m_BoardScale; holeX = (double)m_Drill.x * scale / 2; holeY = (double)m_Drill.y * scale / 2; - hole = MIN (holeX,holeY); + hole = MIN(holeX, holeY); /* calcul du centre des formes des pads : */ shape_pos = ReturnShapePos(); @@ -453,86 +475,98 @@ int color; yc = uy0; /* le trace depend de la rotation de l'empreinte */ - dx = dx0 = m_Size.x >> 1 ; - dy = dy0 = m_Size.y >> 1 ; /* demi dim dx et dy */ + dx = dx0 = m_Size.x >> 1; + dy = dy0 = m_Size.y >> 1; /* demi dim dx et dy */ angle = m_Orient; - drillx = m_Pos.x * scale; + drillx = m_Pos.x * scale; drilly = m_Pos.y * scale; - /* Draw the pad hole (TODO: draw OBLONG hole)*/ - if ( holeX && holeY ) + /* Draw the pad hole (TODO: draw OBLONG hole) */ + if( holeX && holeY ) { SetGLColor(DARKGRAY); Draw3D_FilledCylinder(drillx, -drilly, hole, g_Parm_3D_Visu.m_LayerZcoord[CMP_N], 0.0); } - glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis - nlmax = g_Parm_3D_Visu.m_Layers-1; + glNormal3f( 0.0, 0.0, 1.0 ); // Normal is Z axis + nlmax = g_Parm_3D_Visu.m_Layers - 1; Oncu = (m_Masque_Layer & CUIVRE_LAYER) ? TRUE : FALSE; Oncmp = (m_Masque_Layer & CMP_LAYER) ? TRUE : FALSE; Both = Oncu && Oncmp; - switch (m_PadShape & 0x7F) + switch( m_PadShape & 0x7F ) + { + case CIRCLE : + x = xc * scale; + y = yc * scale; + r = (double)dx * scale; + for( layer = FIRST_COPPER_LAYER; layer <= LAST_COPPER_LAYER; layer++ ) { - case CIRCLE : - x = xc * scale; - y = yc * scale; - r = (double)dx * scale; - for ( layer = COPPER_LAYER_N; layer <= CMP_N; layer ++) - { - if (layer && (layer == nlmax) ) layer = CMP_N; - if ( (layer == CMP_N) && ! Oncmp ) continue; - if ( (layer == COPPER_LAYER_N) && ! Oncu ) continue; - if ( (layer > COPPER_LAYER_N) && (layer < CMP_N) && !Both) continue; - color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[layer]; - if ( color & ITEM_NOT_SHOW ) continue; - SetGLColor(color); - glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0); - zpos = g_Parm_3D_Visu.m_LayerZcoord[layer]; - Draw3D_FilledCircle(x, -y, r, hole, zpos); - } - break; + if( layer && (layer == nlmax) ) + layer = CMP_N; + if( (layer == CMP_N) && ! Oncmp ) + continue; + if( (layer == COPPER_LAYER_N) && ! Oncu ) + continue; + if( (layer > FIRST_COPPER_LAYER) && (layer < LAST_COPPER_LAYER) && !Both) + continue; + color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[layer]; + if( color & ITEM_NOT_SHOW ) + continue; + SetGLColor(color); + glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0 ); + zpos = g_Parm_3D_Visu.m_LayerZcoord[layer]; + Draw3D_FilledCircle(x, -y, r, hole, zpos); + } + break; - case OVALE : - /* calcul de l'entraxe de l'ellipse */ - if( dx > dy ) /* ellipse horizontale */ - { - delta_cx = dx - dy; delta_cy = 0; - w = m_Size.y * scale; - delta_angle = angle+900; - } - else /* ellipse verticale */ - { - delta_cx = 0; delta_cy = dy - dx; - w = m_Size.x * scale; - delta_angle = angle; - } - RotatePoint(&delta_cx, &delta_cy, angle); - { + case OVALE : + /* calcul de l'entraxe de l'ellipse */ + if( dx > dy ) /* ellipse horizontale */ + { + delta_cx = dx - dy; + delta_cy = 0; + w = m_Size.y * scale; + delta_angle = angle + 900; + } + else /* ellipse verticale */ + { + delta_cx = 0; + delta_cy = dy - dx; + w = m_Size.x * scale; + delta_angle = angle; + } + RotatePoint(&delta_cx, &delta_cy, angle); + { double ox, oy, fx, fy; ox = (double)(ux0 + delta_cx) * scale; oy = (double)(uy0 + delta_cy) * scale; fx = (double)(ux0 - delta_cx) * scale; fy = (double)(uy0 - delta_cy) * scale; - for ( layer = COPPER_LAYER_N; layer <= CMP_N; layer ++) + for( layer = FIRST_COPPER_LAYER; layer <= LAST_COPPER_LAYER; layer ++ ) { - if (layer && (layer == nlmax) ) layer = CMP_N; - if ( (layer == CMP_N) && ! Oncmp ) continue; - if ( (layer == COPPER_LAYER_N) && ! Oncu ) continue; - if ( (layer > COPPER_LAYER_N) && (layer < CMP_N) && !Both) continue; + if( layer && (layer == nlmax) ) + layer = CMP_N; + if( (layer == CMP_N) && ! Oncmp ) + continue; + if( (layer == COPPER_LAYER_N) && ! Oncu ) + continue; + if( (layer > FIRST_COPPER_LAYER) && (layer < LAST_COPPER_LAYER) && !Both ) + continue; color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[layer]; - glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0); - if ( color & ITEM_NOT_SHOW ) continue; + glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0 ); + if( color & ITEM_NOT_SHOW ) + continue; SetGLColor(color); zpos = g_Parm_3D_Visu.m_LayerZcoord[layer]; Draw3D_FilledSegmentWithHole(ox, -oy, fx, -fy, w, drillx, -drilly, hole, zpos); } - } - break; + } + break; - case RECT : -// case SPECIAL_PAD: - case TRAPEZE: - { + case RECT : +// case SPECIAL_PAD: + case TRAPEZE: + { int ddx, ddy ; ddx = m_DeltaSize.x >> 1 ; ddy = m_DeltaSize.y >> 1 ; /* demi dim dx et dy */ @@ -549,74 +583,84 @@ int color; coord[3][0] = + dx + ddy; coord[3][1] = + dy - ddx; - for (ii = 0; ii < 4; ii++) - { - RotatePoint(&coord[ii][0],&coord[ii][1], angle); + for( ii = 0; ii < 4; ii++ ) + { + RotatePoint(&coord[ii][0], &coord[ii][1], angle); coord[ii][0] += ux0; coord[ii][1] += uy0; - ll = ii*2; + ll = ii * 2; fcoord[ll][0] = coord[ii][0] * scale; fcoord[ll][1] = coord[ii][1] * scale; - } - for (ii = 0; ii < 7; ii+=2) - { - ll = ii+2; if (ll > 7) ll -= 8; - fcoord[ii+1][0] = (fcoord[ii][0] + fcoord[ll][0])/2; - fcoord[ii+1][1] = (fcoord[ii][1] + fcoord[ll][1])/2; - } - for (ii = 0; ii < 8; ii++) - { - f_hole_coord[ii][0] = -hole*0.707; - f_hole_coord[ii][1] = hole*0.707; + } + + for( ii = 0; ii < 7; ii += 2 ) + { + ll = ii + 2; + if( ll > 7 ) + ll -= 8; + fcoord[ii + 1][0] = (fcoord[ii][0] + fcoord[ll][0]) / 2; + fcoord[ii + 1][1] = (fcoord[ii][1] + fcoord[ll][1]) / 2; + } + + for( ii = 0; ii < 8; ii++ ) + { + f_hole_coord[ii][0] = -hole * 0.707; + f_hole_coord[ii][1] = hole * 0.707; RotatePoint(&f_hole_coord[ii][0], &f_hole_coord[ii][1], - angle -(ii * 450) ); + angle - (ii * 450)); f_hole_coord[ii][0] += drillx; f_hole_coord[ii][1] += drilly; - } + } - for ( layer = COPPER_LAYER_N; layer <= CMP_N; layer ++) + for( layer = FIRST_COPPER_LAYER; layer <= LAST_COPPER_LAYER; layer++ ) { - if (layer && (layer == nlmax) ) layer = CMP_N; - if ( (layer == CMP_N) && ! Oncmp ) continue; - if ( (layer == COPPER_LAYER_N) && ! Oncu ) continue; - if ( (layer > COPPER_LAYER_N) && (layer < CMP_N) && !Both) continue; + if( layer && (layer == nlmax) ) + layer = CMP_N; + if( (layer == CMP_N) && ! Oncmp ) + continue; + if( (layer == COPPER_LAYER_N) && ! Oncu ) + continue; + if( (layer > FIRST_COPPER_LAYER) && (layer < LAST_COPPER_LAYER) && !Both ) + continue; color = g_Parm_3D_Visu.m_BoardSettings->m_LayerColor[layer]; - glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0); - if ( color & ITEM_NOT_SHOW ) continue; + glNormal3f( 0.0, 0.0, (layer == COPPER_LAYER_N) ? -1.0 : 1.0 ); + if( color & ITEM_NOT_SHOW ) + continue; SetGLColor(color); zpos = g_Parm_3D_Visu.m_LayerZcoord[layer]; glBegin(GL_QUAD_STRIP); - for ( ii = 0; ii < 8; ii++ ) + for( ii = 0; ii < 8; ii++ ) { - glVertex3f( f_hole_coord[ii][0], -f_hole_coord[ii][1] , zpos); - glVertex3f( fcoord[ii][0], -fcoord[ii][1] , zpos); + glVertex3f( f_hole_coord[ii][0], -f_hole_coord[ii][1], zpos ); + glVertex3f( fcoord[ii][0], -fcoord[ii][1], zpos ); } - glVertex3f( f_hole_coord[0][0], -f_hole_coord[0][1] , zpos); - glVertex3f( fcoord[0][0], -fcoord[0][1] , zpos); + glVertex3f( f_hole_coord[0][0], -f_hole_coord[0][1], zpos ); + glVertex3f( fcoord[0][0], -fcoord[0][1], zpos ); glEnd(); } - break; - - default: - break; - } } + break; + default: + break; + } } + /*************************/ void SetGLColor(int color) /*************************/ { -double red, green,blue; -StructColors colordata = ColorRefs[color & MASKCOLOR]; +double red, green, blue; +StructColors colordata = ColorRefs[color & MASKCOLOR]; red = colordata.m_Red / 255.0; - blue = colordata.m_Blue / 255.0; - green = colordata.m_Green / 255.0; - glColor3f(red, green,blue); + blue = colordata.m_Blue / 255.0; + green = colordata.m_Green / 255.0; + glColor3f(red, green, blue); } + /********************************************************/ static void Draw3D_FilledCircle(double posx, double posy, double rayon, double hole, double zpos) @@ -626,18 +670,21 @@ int ii, slice = 16; double x, y; glBegin(GL_QUAD_STRIP); - for ( ii = 0; ii <= slice; ii++ ) + for( ii = 0; ii <= slice; ii++ ) { - x = hole; y = 0.0; + x = hole; + y = 0.0; RotatePoint(&x, &y, ii * 225); - glVertex3f( x + posx, y + posy, zpos); - x = rayon; y = 0.0; + glVertex3f( x + posx, y + posy, zpos ); + x = rayon; + y = 0.0; RotatePoint(&x, &y, ii * 225); - glVertex3f( x + posx, y + posy, zpos); + glVertex3f( x + posx, y + posy, zpos ); } glEnd(); } + /*********************************************************/ static void Draw3D_FilledCylinder(double posx, double posy, double rayon, double height, double zpos) @@ -649,43 +696,46 @@ double x, y; S3D_Vertex coords[4]; double tmp = DataScale3D; - DataScale3D = 1.0; //les coord sont deja a l'echelle pour Set_Object_Data(); + DataScale3D = 1.0; // les coord sont deja a l'echelle pour Set_Object_Data(); coords[0].x = coords[1].x = posx + rayon; coords[0].y = coords[1].y = posy; coords[0].z = coords[3].z = zpos; coords[1].z = coords[2].z = zpos + height; - for ( ii = 0; ii <= NB_SEGM; ii++ ) + for( ii = 0; ii <= NB_SEGM; ii++ ) { - x = rayon; y = 0.0; - RotatePoint(&x, &y, ii * (3600/NB_SEGM)); + x = rayon; + y = 0.0; + RotatePoint(&x, &y, ii * (3600 / NB_SEGM)); coords[2].x = coords[3].x = posx + x; coords[2].y = coords[3].y = posy + y; - Set_Object_Data(coords, 4 ); + Set_Object_Data( coords, 4 ); coords[0].x = coords[2].x; coords[0].y = coords[2].y; coords[1].x = coords[3].x; coords[1].y = coords[3].y; } - glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis + glNormal3f( 0.0, 0.0, 1.0); // Normal is Z axis DataScale3D = tmp; } + /*****************************************************************/ static void Draw3D_FilledSegment(double startx, double starty, double endx, double endy,double width, double zpos) /*****************************************************************/ /* trace un polygone semblable a un segment a bouts ronds -*/ + */ { double dx, dy, x, y, firstx=0, firsty=0; int ii, angle; - /* on va calculer les coordonnées du segment supposé horizontal, - puis tourner les cordonnes de l'angle voulu */ + // on va calculer les coordonnées du segment supposé horizontal, + // puis tourner les cordonnes de l'angle voulu - dx = endx - startx; dy = endy - starty; - angle = (int)(( atan2( dy, dx ) / M_PI * 1800)+0.5) ; + dx = endx - startx; + dy = endy - starty; + angle = (int)( ( atan2(dy, dx) * 1800 / M_PI ) + 0.5 ); RotatePoint(&dx, &dy, angle); // apres rotation: dx = longueur du segment // dy = 0; @@ -693,64 +743,71 @@ int ii, angle; glBegin(GL_POLYGON); // tracé de l'arrondi a droite (1er demi polygone a la fin du segment) - for ( ii = 0; ii <= 8; ii++ ) + for( ii = 0; ii <= 8; ii++ ) { - x = 0.0; y =-width; + x = 0.0; + y = -width; RotatePoint(&x, &y, -ii * 225); x += dx; RotatePoint(&x, &y, -angle); - glVertex3f( startx + x, starty+y, zpos); - if ( ii == 0 ) + glVertex3f( startx + x, starty+y, zpos ); + if( ii == 0 ) { firstx = startx + x; firsty = starty + y; } } // tracé de l'arrondi a gauche (2ieme demi polygone a l'origine du segment) - for ( ii = 0; ii <= 8; ii++ ) + for( ii = 0; ii <= 8; ii++ ) { int jj = ii * 225; - x = 0.0; y = width; - RotatePoint(&x, &y, -angle -jj); - glVertex3f( startx + x, starty+y, zpos); + x = 0.0; + y = width; + RotatePoint(&x, &y, -angle - jj); + glVertex3f( startx + x, starty+y, zpos ); } - glVertex3f( firstx, firsty, zpos); + glVertex3f( firstx, firsty, zpos ); glEnd(); } + /*****************************************************************/ static void Draw3D_FilledSegmentWithHole(double startx, double starty, - double endx, double endy,double width, + double endx, double endy, double width, double holex, double holey, double holeradius, double zpos) /*****************************************************************/ /* trace un polygone semblable a un segment a bouts ronds avec trou -*/ + */ { double x, y, xin, yin; -double firstx=0, firsty=0, firstxin=0, firstyin=0; +double firstx = 0, firsty = 0, firstxin = 0, firstyin = 0; int ii, angle, theta; - /* on va calculer les coordonnées du segment supposé horizontal, - puis tourner les cordonnes de l'angle voulu - Tous des calculs se font avec startx, starty comme origine du tracé */ + // on va calculer les coordonnées du segment supposé horizontal, + // puis tourner les cordonnes de l'angle voulu + // Tous des calculs se font avec startx, starty comme origine du tracé - endx -= startx; endy -= starty; - holex -= startx; holey -= starty; - angle = (int)(( atan2( endy, endx ) / M_PI * 1800)+0.5) ; + endx -= startx; + endy -= starty; + holex -= startx; + holey -= starty; + angle = (int)( ( atan2(endy, endx) * 1800 / M_PI ) + 0.5 ); - RotatePoint(&endx, &endy, angle); // apres rotation: endx = longueur du segment - // endy = 0; + RotatePoint(&endx, &endy, angle); // apres rotation: endx = longueur du segment + // endy = 0; RotatePoint(&holex, &holey, angle); width /= 2; glBegin(GL_QUAD_STRIP); // tracé de l'arrondi a droite (1er demi polygone a la fin du segment) // autour du demi-trou de percage - for ( ii = 0; ii <= 8; ii++ ) + for( ii = 0; ii <= 8; ii++ ) { - x = 0.0; y = -width; - xin = 0.0; yin = - holeradius; + x = 0.0; + y = -width; + xin = 0.0; + yin = -holeradius; theta = -ii * 225; RotatePoint(&x, &y, theta); RotatePoint(&xin, &yin, theta); @@ -758,9 +815,9 @@ int ii, angle, theta; RotatePoint(&x, &y, -angle); xin += holex; RotatePoint(&xin, &yin, -angle); - glVertex3f( startx + xin, starty+yin, zpos); - glVertex3f( startx + x, starty+y, zpos); - if ( ii == 0 ) // Memorisation du point de départ du tracé + glVertex3f( startx + xin, starty+yin, zpos ); + glVertex3f( startx + x, starty+y, zpos ); + if( ii == 0 ) // Memorisation du point de départ du tracé { firstx = startx + x; firsty = starty + y; @@ -769,21 +826,22 @@ int ii, angle, theta; } } // tracé de l'arrondi a gauche (2ieme demi polygone a l'origine du segment) - for ( ii = 0; ii <= 8; ii++ ) + for( ii = 0; ii <= 8; ii++ ) { - theta = - ii * 225; - x = 0.0; y = width; + theta = -ii * 225; + x = 0.0; + y = width; RotatePoint(&x, &y, -angle + theta); - xin = 0.0; yin = holeradius; + xin = 0.0; + yin = holeradius; RotatePoint(&xin, &yin, theta); xin += holex; RotatePoint(&xin, &yin, -angle); - glVertex3f( startx + xin,starty + yin, zpos); - glVertex3f( startx + x, starty + y, zpos); + glVertex3f( startx + xin,starty + yin, zpos ); + glVertex3f( startx + x, starty + y, zpos ); } - glVertex3f( firstxin, firstyin, zpos); - glVertex3f( firstx, firsty, zpos); + glVertex3f( firstxin, firstyin, zpos ); + glVertex3f( firstx, firsty, zpos ); glEnd(); } - diff --git a/change_log.txt b/change_log.txt index 4e995de94a..5279ce4edc 100644 --- a/change_log.txt +++ b/change_log.txt @@ -4,6 +4,14 @@ Started 2007-June-11 Please add newer entries at the top, list the date and your name with email address. +2007-Nov-01 UPDATE Geoff Harland +================================================================================ ++ pcbnew + * Provided new definitions of FIRST_COPPER_LAYER and LAST_COPPER_LAYER within + include/pcbstruct.h, and used those definitions within various other files. + Beautified and generally refined 3d-viewer/3d_draw.cpp and pcbnew/plotgerb.cpp. + + 2007-Oct-31 UPDATE Jean-Pierre Charras ================================================================================ +kicad: @@ -401,8 +409,8 @@ email address. field. (Refer to 2007-Oct-2 UPDATE notes for the relevance of this.) * Beautification and house keeping. + eeschema - * The editpart.cpp and editpart.cpp files (which are no longer used) have been - removed, and replaced with editpart.cpp.notused and editpart.cpp.notused + * The editpart.cpp and libedpart.cpp files (which are no longer used) have been + removed, and replaced with editpart.cpp.notused and libedpart.cpp.notused + cvpcb * Additional "OK", "Cancel", and "Apply" buttons have now been provided for the "Options" dialog box which lists various display options for footprints. diff --git a/gerbview/export_to_pcbnew.cpp b/gerbview/export_to_pcbnew.cpp index 7f904e66e4..bde5aa3c06 100644 --- a/gerbview/export_to_pcbnew.cpp +++ b/gerbview/export_to_pcbnew.cpp @@ -153,7 +153,7 @@ static int SavePcbFormatAscii( WinEDA_GerberFrame* frame, FILE* aFile, if( pcb_layer_number < 0 ) continue; - if( pcb_layer_number > CMP_N ) + if( pcb_layer_number > LAST_COPPER_LAYER ) { DRAWSEGMENT* drawitem = new DRAWSEGMENT( pcb, TYPEDRAWSEGMENT ); @@ -169,7 +169,7 @@ static int SavePcbFormatAscii( WinEDA_GerberFrame* frame, FILE* aFile, TRACK* newtrack; // replace spots with vias when possible - if( track->m_Shape == S_SPOT_CIRCLE + if( track->m_Shape == S_SPOT_CIRCLE || track->m_Shape == S_SPOT_RECT || track->m_Shape == S_SPOT_OVALE ) { diff --git a/gerbview/select_layers_to_pcb.cpp b/gerbview/select_layers_to_pcb.cpp index c1d8adf51e..e0bf008eb0 100644 --- a/gerbview/select_layers_to_pcb.cpp +++ b/gerbview/select_layers_to_pcb.cpp @@ -266,7 +266,7 @@ bool AsCmpLayer = false; AsCmpLayer = true; else { - if( LayerLookUpTable[ii] >= CMP_N ) + if( LayerLookUpTable[ii] >= LAST_COPPER_LAYER ) continue; // not a copper layer if( LayerLookUpTable[ii] >= g_DesignSettings.m_CopperLayerCount ) g_DesignSettings.m_CopperLayerCount++; @@ -275,8 +275,8 @@ bool AsCmpLayer = false; if( AsCmpLayer ) g_DesignSettings.m_CopperLayerCount++; - if( g_DesignSettings.m_CopperLayerCount > CMP_N + 1 ) // should not occur. - g_DesignSettings.m_CopperLayerCount = CMP_N + 1; + if( g_DesignSettings.m_CopperLayerCount > NB_COPPER_LAYERS ) // should not occur. + g_DesignSettings.m_CopperLayerCount = NB_COPPER_LAYERS; EndModal( 1 ); } diff --git a/include/pcbstruct.h b/include/pcbstruct.h index 81ab8735c3..c6002e129c 100644 --- a/include/pcbstruct.h +++ b/include/pcbstruct.h @@ -35,6 +35,7 @@ /* Layer identification (layer number) */ +#define FIRST_COPPER_LAYER 0 #define COPPER_LAYER_N 0 #define LAYER_N_2 1 /* Numero layer 2 */ #define LAYER_N_3 2 /* Numero layer 3 */ @@ -52,7 +53,8 @@ #define LAYER_N_15 14 /* Numero layer 15 */ #define LAYER_CMP_N 15 #define CMP_N 15 -#define NB_COPPER_LAYERS (CMP_N + 1) +#define LAST_COPPER_LAYER 15 +#define NB_COPPER_LAYERS (LAST_COPPER_LAYER + 1) #define FIRST_NO_COPPER_LAYER 16 #define ADHESIVE_N_CU 16 diff --git a/pcbnew/basepcbframe.cpp b/pcbnew/basepcbframe.cpp index b506977fdd..e313ef5e16 100644 --- a/pcbnew/basepcbframe.cpp +++ b/pcbnew/basepcbframe.cpp @@ -181,7 +181,7 @@ void WinEDA_BasePcbFrame::SwitchLayer( wxDC* DC, int layer ) // Copper layers cannot be selected unconditionally; how many // of those layers are currently enabled needs to be checked. - if( (layer >= COPPER_LAYER_N) && (layer <= CMP_N) ) + if( (layer >= FIRST_COPPER_LAYER) && (layer <= LAST_COPPER_LAYER) ) { // If only one copper layer is enabled, the only such layer // that can be selected to is the "Copper" layer (so the diff --git a/pcbnew/class_edge_mod.cpp b/pcbnew/class_edge_mod.cpp index abfd44e005..9d1e157299 100644 --- a/pcbnew/class_edge_mod.cpp +++ b/pcbnew/class_edge_mod.cpp @@ -173,7 +173,7 @@ void EDGE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC, GRSetDrawMode( DC, draw_mode ); typeaff = frame->m_DisplayModEdge; - if( m_Layer <= CMP_N ) + if( m_Layer <= LAST_COPPER_LAYER ) { typeaff = frame->m_DisplayPcbTrackFill; if( !typeaff ) diff --git a/pcbnew/class_pcb_text.cpp b/pcbnew/class_pcb_text.cpp index a05bcfa0ac..32f820b84d 100644 --- a/pcbnew/class_pcb_text.cpp +++ b/pcbnew/class_pcb_text.cpp @@ -99,8 +99,8 @@ int TEXTE_PCB::ReadTextePcbDescr( FILE* File, int* LineNum ) { sscanf( Line + 2, " %d %d %lX %d\n", &m_Layer, &m_Miroir, &m_TimeStamp, &dummy ); - if( m_Layer < COPPER_LAYER_N ) - m_Layer = COPPER_LAYER_N; + if( m_Layer < FIRST_COPPER_LAYER ) + m_Layer = FIRST_COPPER_LAYER; if( m_Layer > LAST_NO_COPPER_LAYER ) m_Layer = LAST_NO_COPPER_LAYER; diff --git a/pcbnew/class_track.cpp b/pcbnew/class_track.cpp index 8246a0a39c..59dfeec8ae 100644 --- a/pcbnew/class_track.cpp +++ b/pcbnew/class_track.cpp @@ -268,7 +268,7 @@ int TRACK::ReturnMaskLayer() if( via_type == VIA_THROUGH ) return ALL_CU_LAYERS; - // VIA_BLIND ou VIA_BURIED: + // VIA_BLIND or VIA_BURIED: int bottom_layer, top_layer; @@ -720,7 +720,7 @@ void TRACK::Draw( WinEDA_DrawPanel* panel, wxDC* DC, int draw_mode ) } /* Shows clearance (for tracks and vias, not for zone segments */ - if( DisplayOpt.DisplayTrackIsol && ( m_Layer <= CMP_N ) + if( DisplayOpt.DisplayTrackIsol && ( m_Layer <= LAST_COPPER_LAYER ) && ( Type() == TYPETRACK || Type() == TYPEVIA) ) { GRCSegm( &panel->m_ClipBox, DC, m_Start.x, m_Start.y, diff --git a/pcbnew/cotation.cpp b/pcbnew/cotation.cpp index 9dc7b1bece..a167c8eef5 100644 --- a/pcbnew/cotation.cpp +++ b/pcbnew/cotation.cpp @@ -136,12 +136,12 @@ WinEDA_CotationPropertiesFrame::WinEDA_CotationPropertiesFrame( WinEDA_PcbFrame* wxDefaultPosition, wxDefaultSize ); LeftBoxSizer->Add( m_SelLayerBox, 0, wxGROW | wxLEFT | wxRIGHT | wxBOTTOM, 5 ); int ii; - for( ii = CMP_N + 1; ii < NB_LAYERS; ii++ ) + for( ii = FIRST_NO_COPPER_LAYER; ii < NB_LAYERS; ii++ ) { m_SelLayerBox->Append( ReturnPcbLayerName( ii ) ); } - m_SelLayerBox->SetSelection( Cotation->GetLayer() - (CMP_N + 1) ); + m_SelLayerBox->SetSelection( Cotation->GetLayer() - FIRST_NO_COPPER_LAYER ); GetSizer()->Fit( this ); GetSizer()->SetSizeHints( this ); @@ -175,8 +175,8 @@ void WinEDA_CotationPropertiesFrame::OnOkClick( wxCommandEvent& event ) m_TxtWidthCtrl->GetValue(); CurrentCotation->m_Text->m_Miroir = (m_Mirror->GetSelection() == 0) ? 1 : 0; - CurrentCotation->SetLayer( m_SelLayerBox->GetChoice() + CMP_N + 1 ); - CurrentCotation->m_Text->SetLayer( m_SelLayerBox->GetChoice() + CMP_N + 1 ); + CurrentCotation->SetLayer( m_SelLayerBox->GetChoice() + FIRST_NO_COPPER_LAYER ); + CurrentCotation->m_Text->SetLayer( m_SelLayerBox->GetChoice() + FIRST_NO_COPPER_LAYER ); CurrentCotation->m_Text->CreateDrawData(); diff --git a/pcbnew/edgemod.cpp b/pcbnew/edgemod.cpp index aba263a7a7..3ef5f5ebe2 100644 --- a/pcbnew/edgemod.cpp +++ b/pcbnew/edgemod.cpp @@ -194,11 +194,11 @@ void WinEDA_ModuleEditFrame::Edit_Edge_Layer( EDGE_MODULE* Edge, wxDC* DC ) /* Ask for the new layer */ - new_layer = SelectLayer( new_layer, COPPER_LAYER_N, LAST_NO_COPPER_LAYER ); + new_layer = SelectLayer( new_layer, FIRST_COPPER_LAYER, LAST_NO_COPPER_LAYER ); if( new_layer < 0 ) return; - if ( new_layer >= COPPER_LAYER_N && new_layer <= LAYER_CMP_N ) + if ( new_layer >= FIRST_COPPER_LAYER && new_layer <= LAST_COPPER_LAYER ) /* an edge is put on a copper layer, and it is very dangerous. a confirmation is requested */ { if ( ! IsOK(this, _("The graphic item will be on a copper layer.It is very dangerous. Are you sure") ) ) diff --git a/pcbnew/edit.cpp b/pcbnew/edit.cpp index 8dedcea8a0..d837b6f84d 100644 --- a/pcbnew/edit.cpp +++ b/pcbnew/edit.cpp @@ -632,7 +632,7 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) break; case ID_POPUP_PCB_SELECT_CU_LAYER: - itmp = SelectLayer( GetScreen()->m_Active_Layer, -1, CMP_N ); + itmp = SelectLayer( GetScreen()->m_Active_Layer, -1, LAST_COPPER_LAYER ); if( itmp >= 0 ) GetScreen()->m_Active_Layer = itmp; break; @@ -1005,7 +1005,7 @@ void WinEDA_PcbFrame::SwitchLayer( wxDC* DC, int layer ) // Copper layers cannot be selected unconditionally; how many // of those layers are currently enabled needs to be checked. - if( (layer >= COPPER_LAYER_N) && (layer <= CMP_N) ) + if( (layer >= FIRST_COPPER_LAYER) && (layer <= LAST_COPPER_LAYER) ) { // If only one copper layer is enabled, the only such layer // that can be selected to is the "Copper" layer (so the diff --git a/pcbnew/editedge.cpp b/pcbnew/editedge.cpp index 53d214d00b..c0e4804847 100644 --- a/pcbnew/editedge.cpp +++ b/pcbnew/editedge.cpp @@ -162,7 +162,7 @@ void WinEDA_PcbFrame::Delete_Drawings_All_Layer( DRAWSEGMENT* Segment, wxDC* DC COTATION* Cotation; int layer = Segment->GetLayer(); - if( layer <= CMP_N ) + if( layer <= LAST_COPPER_LAYER ) { DisplayError( this, _( "Copper layer global delete not allowed!" ), 20 ); return; diff --git a/pcbnew/hotkeys.cpp b/pcbnew/hotkeys.cpp index 598c234fcd..c6028ca52f 100644 --- a/pcbnew/hotkeys.cpp +++ b/pcbnew/hotkeys.cpp @@ -202,12 +202,12 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, case HK_SWITCH_LAYER_TO_PREVIOUS: ll = GetScreen()->m_Active_Layer; - if( (ll <= COPPER_LAYER_N) || (ll > CMP_N) ) + if( (ll <= FIRST_COPPER_LAYER) || (ll > LAST_COPPER_LAYER) ) break; if( m_Pcb->m_BoardSettings->m_CopperLayerCount < 2 ) // Single layer ll = COPPER_LAYER_N; - else if( ll == CMP_N ) - ll = MAX( COPPER_LAYER_N, m_Pcb->m_BoardSettings->m_CopperLayerCount - 2 ); + else if( ll == LAST_COPPER_LAYER ) + ll = MAX( FIRST_COPPER_LAYER, m_Pcb->m_BoardSettings->m_CopperLayerCount - 2 ); else ll--; SwitchLayer( DC, ll ); @@ -215,12 +215,12 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, case HK_SWITCH_LAYER_TO_NEXT: ll = GetScreen()->m_Active_Layer; - if( (ll < COPPER_LAYER_N) || (ll >= CMP_N) ) + if( (ll < FIRST_COPPER_LAYER) || (ll >= LAST_COPPER_LAYER) ) break; if( m_Pcb->m_BoardSettings->m_CopperLayerCount < 2 ) // Single layer ll = COPPER_LAYER_N; else if( ll >= m_Pcb->m_BoardSettings->m_CopperLayerCount - 2 ) - ll = CMP_N; + ll = LAST_COPPER_LAYER; else ll++; SwitchLayer( DC, ll ); @@ -299,7 +299,7 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, break; case HK_BACK_SPACE: - if( m_ID_current_state == ID_TRACK_BUTT && GetScreen()->m_Active_Layer <= CMP_N ) + if( m_ID_current_state == ID_TRACK_BUTT && GetScreen()->m_Active_Layer <= LAST_COPPER_LAYER ) { if( ItemFree ) { @@ -570,7 +570,7 @@ bool WinEDA_PcbFrame::OnHotkeyDeleteItem( wxDC* DC, EDA_BaseStruct* DrawStruct ) switch( m_ID_current_state ) { case ID_TRACK_BUTT: - if( GetScreen()->m_Active_Layer > CMP_N ) + if( GetScreen()->m_Active_Layer > LAST_COPPER_LAYER ) return FALSE; if( ItemFree ) { diff --git a/pcbnew/onleftclick.cpp b/pcbnew/onleftclick.cpp index ee6d581b60..964343c619 100644 --- a/pcbnew/onleftclick.cpp +++ b/pcbnew/onleftclick.cpp @@ -163,9 +163,9 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) if( m_ID_current_state == ID_PCB_ARC_BUTT ) shape = S_ARC; - if( GetScreen()->m_Active_Layer <= CMP_N ) + if( GetScreen()->m_Active_Layer <= LAST_COPPER_LAYER ) { - DisplayError( this, _( "Graphic not autorized on Copper layers" ) ); + DisplayError( this, _( "Graphic not authorized on Copper layers" ) ); break; } if( (DrawStruct == NULL) || (DrawStruct->m_Flags == 0) ) @@ -186,7 +186,7 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) } case ID_TRACK_BUTT: - if( GetScreen()->m_Active_Layer > CMP_N ) + if( GetScreen()->m_Active_Layer > LAST_COPPER_LAYER ) { DisplayError( this, _( "Tracks on Copper layers only " ) ); break; @@ -262,9 +262,9 @@ void WinEDA_PcbFrame::OnLeftClick( wxDC* DC, const wxPoint& MousePos ) break; case ID_PCB_COTATION_BUTT: - if( GetScreen()->m_Active_Layer <= CMP_N ) + if( GetScreen()->m_Active_Layer <= LAST_COPPER_LAYER ) { - DisplayError( this, _( "Cotation not autorized on Copper layers" ) ); + DisplayError( this, _( "Cotation not authorized on Copper layers" ) ); break; } if( (DrawStruct == NULL) || (DrawStruct->m_Flags == 0) ) @@ -426,4 +426,3 @@ void WinEDA_PcbFrame::OnLeftDClick( wxDC* DC, const wxPoint& MousePos ) break; } } - diff --git a/pcbnew/plotgerb.cpp b/pcbnew/plotgerb.cpp index abf391bafc..9579046aa3 100644 --- a/pcbnew/plotgerb.cpp +++ b/pcbnew/plotgerb.cpp @@ -1,6 +1,6 @@ - /****************************************/ - /**** Routine de trace GERBER RS274X ****/ - /****************************************/ +/****************************************/ +/**** Routine de trace GERBER RS274X ****/ +/****************************************/ #include "fctsys.h" @@ -15,13 +15,13 @@ /* Variables locales : */ -static int s_Last_D_code ; -static float Gerb_scale_plot; /*Coeff de conversion d'unites des traces */ -static int scale_spot_mini; /* Ouverture mini (pour remplissages) */ -static D_CODE * s_DCodeList; /* Pointeur sur la zone de stockage des D_CODES */ +static int s_Last_D_code; +static float Gerb_scale_plot; // Coeff de conversion d'unites des traces +static int scale_spot_mini; // Ouverture mini (pour remplissages) +static D_CODE * s_DCodeList; // Pointeur sur la zone de stockage des D_CODES wxString GerberFullFileName; -static double scale_x , scale_y ; /* echelles de convertion en X et Y (compte tenu - des unites relatives du PCB et des traceurs*/ +static double scale_x, scale_y; // echelles de convertion en X et Y (compte tenu + // des unites relatives du PCB et des traceurs static bool ShowDcodeError = TRUE; /* Routines Locales */ @@ -29,22 +29,23 @@ static bool ShowDcodeError = TRUE; static void Init_Trace_GERBER(WinEDA_BasePcbFrame * frame, FILE * gerbfile); static void Init_ApertureList(); static void Fin_Trace_GERBER(WinEDA_BasePcbFrame * frame, FILE * gerbfile); -static void Plot_1_CIRCLE_pad_GERBER(wxPoint pos,int diametre) ; -static void trace_1_pastille_OVALE_GERBER(wxPoint pos, wxSize size,int orient); +static void Plot_1_CIRCLE_pad_GERBER(wxPoint pos, int diametre); +static void trace_1_pastille_OVALE_GERBER(wxPoint pos, wxSize size, int orient); static void PlotRectangularPad_GERBER(wxPoint pos, wxSize size, int orient); -static D_CODE * get_D_code(int dx,int dy, int type, int drill ) ; -static void trace_1_pad_TRAPEZE_GERBER(wxPoint pos, wxSize size,wxSize delta, - int orient,int modetrace); +static D_CODE * get_D_code(int dx, int dy, int type, int drill); +static void trace_1_pad_TRAPEZE_GERBER(wxPoint pos, wxSize size, wxSize delta, + int orient, int modetrace); /********************************************************************************/ void WinEDA_BasePcbFrame::Genere_GERBER(const wxString & FullFileName, int Layer, bool PlotOriginIsAuxAxis) /********************************************************************************/ + /* Genere les divers fichiers de trace: - Pour chaque couche 1 fichier xxxc.PHO au format RS274X -*/ + * Pour chaque couche 1 fichier xxxc.PHO au format RS274X + */ { int tracevia = 1; @@ -52,25 +53,25 @@ int tracevia = 1; GerberFullFileName = FullFileName; g_PlotOrient = 0; - if (Plot_Set_MIROIR) g_PlotOrient |= PLOT_MIROIR; + if( Plot_Set_MIROIR ) + g_PlotOrient |= PLOT_MIROIR; /* Calcul des echelles de conversion */ Gerb_scale_plot = 1.0; /* pour unites gerber en 0,1 Mils, format 3.4 */ - scale_spot_mini = (int)(spot_mini * 10 * Gerb_scale_plot); + scale_spot_mini = (int)(10 * spot_mini * Gerb_scale_plot); scale_x = Scale_X * Gerb_scale_plot; scale_y = Scale_Y * Gerb_scale_plot; g_PlotOffset.x = 0; g_PlotOffset.y = 0; - if ( PlotOriginIsAuxAxis ) - { + if( PlotOriginIsAuxAxis ) g_PlotOffset = m_Auxiliary_Axis_Position; - } - dest = wxFopen(FullFileName, wxT("wt")); - if (dest == NULL) + dest = wxFopen( FullFileName, wxT("wt") ); + if( dest == NULL ) { wxString msg = _("unable to create file ") + FullFileName; - DisplayError(this, msg); return ; + DisplayError(this, msg); + return; } setlocale(LC_NUMERIC, "C"); @@ -80,11 +81,11 @@ int tracevia = 1; /* Clear the memory used for handle the D_CODE (aperture) list */ Init_ApertureList(); - Affiche_1_Parametre(this, 0, _("File"),FullFileName,CYAN) ; + Affiche_1_Parametre(this, 0, _("File"), FullFileName, CYAN); - Init_Trace_GERBER(this, dest) ; + Init_Trace_GERBER(this, dest); - nb_plot_erreur = 0 ; + nb_plot_erreur = 0; int layer_mask = g_TabOneLayerMask[Layer]; // Specify that the contents of the "Edges Pcb" layer are also to be @@ -92,46 +93,48 @@ int tracevia = 1; if( ! Exclude_Edges_Pcb ) layer_mask |= EDGE_LAYER; - switch(Layer) - { - case COPPER_LAYER_N : - case LAYER_N_2 : - case LAYER_N_3 : - case LAYER_N_4 : - case LAYER_N_5 : - case LAYER_N_6 : - case LAYER_N_7 : - case LAYER_N_8 : - case LAYER_N_9 : - case LAYER_N_10 : - case LAYER_N_11: - case LAYER_N_12: - case LAYER_N_13 : - case LAYER_N_14 : - case LAYER_N_15 : - case CMP_N : - Plot_Layer_GERBER(dest, layer_mask, 0, 1); - break; + switch( Layer ) + { + case FIRST_COPPER_LAYER: + case LAYER_N_2: + case LAYER_N_3: + case LAYER_N_4: + case LAYER_N_5: + case LAYER_N_6: + case LAYER_N_7: + case LAYER_N_8: + case LAYER_N_9: + case LAYER_N_10: + case LAYER_N_11: + case LAYER_N_12: + case LAYER_N_13: + case LAYER_N_14: + case LAYER_N_15: + case LAST_COPPER_LAYER: + Plot_Layer_GERBER(dest, layer_mask, 0, 1); + break; - case SOLDERMASK_N_CU : - case SOLDERMASK_N_CMP : /* Trace du vernis epargne */ - if ( g_DrawViaOnMaskLayer ) tracevia = 1; - else tracevia = 0; - Plot_Layer_GERBER(dest, layer_mask, g_DesignSettings.m_MaskMargin, tracevia); - break; + case SOLDERMASK_N_CU: + case SOLDERMASK_N_CMP: /* Trace du vernis epargne */ + if( g_DrawViaOnMaskLayer ) + tracevia = 1; + else + tracevia = 0; + Plot_Layer_GERBER(dest, layer_mask, g_DesignSettings.m_MaskMargin, tracevia); + break; - case SOLDERPASTE_N_CU : - case SOLDERPASTE_N_CMP : /* Trace du masque de pate de soudure */ - Plot_Layer_GERBER(dest, layer_mask, 0, 0); - break; + case SOLDERPASTE_N_CU: + case SOLDERPASTE_N_CMP: /* Trace du masque de pate de soudure */ + Plot_Layer_GERBER(dest, layer_mask, 0, 0); + break; - default: - Plot_Serigraphie(PLOT_FORMAT_GERBER, dest, layer_mask); - break; - } + default: + Plot_Serigraphie(PLOT_FORMAT_GERBER, dest, layer_mask); + break; + } - Fin_Trace_GERBER(this, dest) ; - setlocale(LC_NUMERIC, ""); + Fin_Trace_GERBER( this, dest ); + setlocale( LC_NUMERIC, "" ); } @@ -139,8 +142,9 @@ int tracevia = 1; void WinEDA_BasePcbFrame::Plot_Layer_GERBER(FILE * File,int masque_layer, int garde, int tracevia) /***********************************************************************/ + /* Trace en format GERBER. d'une couche cuivre ou masque -*/ + */ { wxPoint pos; wxSize size; @@ -150,179 +154,198 @@ TRACK * track ; EDA_BaseStruct * PtStruct; wxString msg; -// (Following command has been superceded by new command on lines 92 and 93.) +// (Following command has been superceded by new command on lines 93 and 94.) // masque_layer |= EDGE_LAYER; /* Les elements de la couche EDGE sont tj traces */ /* trace des elements type Drawings Pcb : */ PtStruct = m_Pcb->m_Drawings; for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) - { + { switch( PtStruct->Type() ) + { + case TYPEDRAWSEGMENT: + PlotDrawSegment( (DRAWSEGMENT*) PtStruct, PLOT_FORMAT_GERBER, + masque_layer ); + break; + + case TYPETEXTE: + PlotTextePcb( (TEXTE_PCB*) PtStruct, PLOT_FORMAT_GERBER, + masque_layer ); + break; + + case TYPECOTATION: + PlotCotation( (COTATION*) PtStruct, PLOT_FORMAT_GERBER, + masque_layer ); + break; + + case TYPEMIRE: + PlotMirePcb( (MIREPCB*) PtStruct, PLOT_FORMAT_GERBER, + masque_layer ); + break; + + case TYPEMARQUEUR: + break; + + default: + DisplayError( this, wxT("Type Draw non gere") ); + break; + } + } + + /* Trace des Elements des modules autres que pads */ + nb_items = 0; + Affiche_1_Parametre(this, 38, wxT("DrawMod"), wxEmptyString, GREEN); + Module = m_Pcb->m_Modules; + for( ; Module != NULL; Module = (MODULE *)Module->Pnext ) + { + PtStruct = Module->m_Drawings; + for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) + { + switch( PtStruct->Type() ) { - case TYPEDRAWSEGMENT: - PlotDrawSegment( (DRAWSEGMENT*) PtStruct, PLOT_FORMAT_GERBER, - masque_layer ); - break; - - case TYPETEXTE: - PlotTextePcb( (TEXTE_PCB*) PtStruct, PLOT_FORMAT_GERBER, - masque_layer ); - break; - - case TYPECOTATION: - PlotCotation( (COTATION*) PtStruct, PLOT_FORMAT_GERBER, - masque_layer ); - break; - - case TYPEMIRE: - PlotMirePcb( (MIREPCB*) PtStruct, PLOT_FORMAT_GERBER, - masque_layer ); - break; - - case TYPEMARQUEUR: + case TYPEEDGEMODULE: + if( masque_layer & g_TabOneLayerMask[((EDGE_MODULE*)PtStruct)->GetLayer()] ) + Plot_1_EdgeModule(PLOT_FORMAT_GERBER, (EDGE_MODULE*) PtStruct); break; default: - DisplayError(this, wxT("Type Draw non gere")); break; } } - - /* Trace des Elements des modules autres que pads */ - nb_items = 0 ; - Affiche_1_Parametre(this, 38, wxT("DrawMod"), wxEmptyString,GREEN) ; - Module = m_Pcb->m_Modules; - for( ; Module != NULL ;Module = (MODULE *)Module->Pnext ) - { - PtStruct = Module->m_Drawings; - for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) - { - switch( PtStruct->Type() ) - { - case TYPEEDGEMODULE: - if( masque_layer & g_TabOneLayerMask[((EDGE_MODULE*)PtStruct)->GetLayer()] ) - Plot_1_EdgeModule(PLOT_FORMAT_GERBER, (EDGE_MODULE*) PtStruct); - break; - - default: break; - } - } - } + } /* Trace des Elements des modules : Pastilles */ - nb_items = 0 ; - Affiche_1_Parametre(this, 48, wxT("Pads"),wxEmptyString,GREEN) ; + nb_items = 0; + Affiche_1_Parametre(this, 48, wxT("Pads"), wxEmptyString, GREEN); Module = m_Pcb->m_Modules; - for( ; Module != NULL ;Module = (MODULE *)Module->Pnext ) + for( ; Module != NULL; Module = (MODULE *)Module->Pnext ) { PtPad = (D_PAD*) Module->m_Pads; - for ( ; PtPad != NULL ; PtPad = (D_PAD*)PtPad->Pnext ) + for( ; PtPad != NULL; PtPad = (D_PAD*)PtPad->Pnext ) { wxPoint shape_pos; - if( (PtPad->m_Masque_Layer & masque_layer) == 0) - continue ; + if( (PtPad->m_Masque_Layer & masque_layer) == 0 ) + continue; shape_pos = PtPad->ReturnShapePos(); pos = shape_pos; - size.x = PtPad->m_Size.x + (garde * 2) ; - size.y = PtPad->m_Size.y + (garde * 2) ; + size.x = PtPad->m_Size.x + 2 * garde; + size.y = PtPad->m_Size.y + 2 * garde; /* Don't draw a null size item : */ - if ( (size.x == 0) || (size.y == 0) ) continue; + if( size.x <= 0 || size.y <= 0 ) + continue; - nb_items++ ; + nb_items++; - switch (PtPad->m_PadShape) + switch( PtPad->m_PadShape ) { - case CIRCLE : - Plot_1_CIRCLE_pad_GERBER(pos,size.x) ; - break ; + case CIRCLE: + Plot_1_CIRCLE_pad_GERBER(pos, size.x); + break; - case OVALE : - { - trace_1_pastille_OVALE_GERBER(pos, size,PtPad->m_Orient); - break ; - } + case OVALE: + // Check whether the pad really has a circular shape instead + if( size.x == size.y ) + Plot_1_CIRCLE_pad_GERBER(pos, size.x); + else + trace_1_pastille_OVALE_GERBER(pos, size, PtPad->m_Orient); + break; - case TRAPEZE : - { + case TRAPEZE: + { wxSize delta = PtPad->m_DeltaSize; - trace_1_pad_TRAPEZE_GERBER(pos,size, - delta, PtPad->m_Orient, FILLED) ; - break ; - } + trace_1_pad_TRAPEZE_GERBER(pos, size, + delta, PtPad->m_Orient, FILLED); + } + break; - case RECT: - default: - PlotRectangularPad_GERBER(pos,size, PtPad->m_Orient) ; - break ; + case RECT: + default: + PlotRectangularPad_GERBER(pos, size, PtPad->m_Orient); + break; } - msg.Printf( wxT("%d"),nb_items) ; - Affiche_1_Parametre(this, 48,wxEmptyString, msg,GREEN) ; + msg.Printf( wxT("%d"), nb_items ); + Affiche_1_Parametre(this, 48, wxEmptyString, msg, GREEN); } } /* trace des VIAS : */ - if(tracevia) + if( tracevia ) { - nb_items = 0 ; - Affiche_1_Parametre(this, 56, wxT("Vias"), wxEmptyString,RED) ; - for( track = m_Pcb->m_Track; track != NULL; track = (TRACK*) track->Pnext) + nb_items = 0; + Affiche_1_Parametre(this, 56, wxT("Vias"), wxEmptyString, RED); + for( track = m_Pcb->m_Track; track != NULL; track = (TRACK*) track->Pnext ) { - if( track->Type() != TYPEVIA ) continue; + if( track->Type() != TYPEVIA ) + continue; SEGVIA * Via = (SEGVIA *) track; - /* vias not plotted if not on selected layer, but if layer - == SOLDERMASK_LAYER_CU or SOLDERMASK_LAYER_CMP, vias are drawn , - if they are on a external copper layer - */ + // vias not plotted if not on selected layer, but if layer + // == SOLDERMASK_LAYER_CU or SOLDERMASK_LAYER_CMP, vias are drawn, + // if they are on a external copper layer int via_mask_layer = Via->ReturnMaskLayer(); - if ( (via_mask_layer & CUIVRE_LAYER ) ) via_mask_layer |= SOLDERMASK_LAYER_CU; - if ( (via_mask_layer & CMP_LAYER ) ) via_mask_layer |= SOLDERMASK_LAYER_CMP; - if( (via_mask_layer & masque_layer) == 0 ) continue; + if( via_mask_layer & CUIVRE_LAYER ) + via_mask_layer |= SOLDERMASK_LAYER_CU; + if( via_mask_layer & CMP_LAYER ) + via_mask_layer |= SOLDERMASK_LAYER_CMP; + if( ( via_mask_layer & masque_layer) == 0 ) + continue; pos = Via->m_Start; - size.x = size.y = Via->m_Width + (garde * 2); - Plot_1_CIRCLE_pad_GERBER(pos,size.x) ; - nb_items++ ; msg.Printf( wxT("%d"),nb_items) ; - Affiche_1_Parametre(this, 56,wxEmptyString, msg,RED) ; + size.x = size.y = Via->m_Width + 2 * garde; + /* Don't draw a null size item : */ + if( size.x <= 0 ) + continue; + Plot_1_CIRCLE_pad_GERBER(pos, size.x); + nb_items++; + msg.Printf( wxT("%d"), nb_items ); + Affiche_1_Parametre(this, 56, wxEmptyString, msg, RED); } } /* trace des pistes : */ - nb_items = 0 ; - Affiche_1_Parametre(this, 64, wxT("Tracks"),wxEmptyString,YELLOW) ; + nb_items = 0; + Affiche_1_Parametre(this, 64, wxT("Tracks"), wxEmptyString, YELLOW); - for( track = m_Pcb->m_Track; track != NULL; track = (TRACK*) track->Pnext) + for( track = m_Pcb->m_Track; track != NULL; track = (TRACK*) track->Pnext ) { wxPoint end; - if ( track->Type() == TYPEVIA ) continue ; - if( (g_TabOneLayerMask[track->GetLayer()] & masque_layer) == 0 ) continue; + if( track->Type() == TYPEVIA ) + continue; + if( (g_TabOneLayerMask[track->GetLayer()] & masque_layer) == 0 ) + continue; size.x = size.y = track->m_Width; - pos = track->m_Start; end = track->m_End; + pos = track->m_Start; + end = track->m_End; - PlotGERBERLine(pos,end, size.x) ; + PlotGERBERLine(pos, end, size.x); - nb_items++ ; msg.Printf( wxT("%d"),nb_items) ; - Affiche_1_Parametre(this, 64, wxEmptyString, msg,YELLOW) ; + nb_items++; + msg.Printf( wxT("%d"), nb_items ); + Affiche_1_Parametre(this, 64, wxEmptyString, msg, YELLOW); } /* trace des zones: */ - nb_items = 0 ; - if ( m_Pcb->m_Zone ) Affiche_1_Parametre(this, 72, wxT("Zones "),wxEmptyString,YELLOW) ; + nb_items = 0; + if( m_Pcb->m_Zone ) + Affiche_1_Parametre(this, 72, wxT("Zones "), wxEmptyString, YELLOW); - for( track = m_Pcb->m_Zone; track != NULL; track = (TRACK*) track->Pnext) + for( track = m_Pcb->m_Zone; track != NULL; track = (TRACK*) track->Pnext ) { wxPoint end; - if( (g_TabOneLayerMask[track->GetLayer()] & masque_layer) == 0 ) continue; + if( (g_TabOneLayerMask[track->GetLayer()] & masque_layer) == 0 ) + continue; size.x = size.y = track->m_Width; - pos = track->m_Start; end = track->m_End; + pos = track->m_Start; + end = track->m_End; - PlotGERBERLine(pos,end, size.x) ; + PlotGERBERLine(pos, end, size.x); - nb_items++ ; msg.Printf( wxT("%d"),nb_items) ; - Affiche_1_Parametre(this, 72, wxEmptyString,msg,YELLOW) ; + nb_items++; + msg.Printf( wxT("%d"), nb_items ); + Affiche_1_Parametre(this, 72, wxEmptyString, msg, YELLOW); } } @@ -330,53 +353,57 @@ wxString msg; /**********************************************************************/ void trace_1_pastille_OVALE_GERBER(wxPoint pos, wxSize size, int orient) /**********************************************************************/ + /* Trace 1 pastille OVALE en position pos_X,Y: - dimensions dx,dy, - orientation orient - Pour une orientation verticale ou horizontale, la forme est flashee - Pour une orientation quelconque la forme est tracee comme un segment -*/ + * dimensions dx, dy, + * orientation orient + * Pour une orientation verticale ou horizontale, la forme est flashee + * Pour une orientation quelconque la forme est tracee comme un segment + */ { D_CODE * dcode_ptr; int x0, y0, x1, y1, delta; - if( (orient == 900) || (orient == 2700)) /* orient tournee de 90 deg */ - { - EXCHG(size.x,size.y); - } + if( orient == 900 || orient == 2700 ) /* orient tournee de 90 deg */ + EXCHG(size.x, size.y); /* Trace de la forme flashee */ - if( (orient == 0) || (orient == 900) || - (orient == 1800) || (orient == 2700) ) + if( orient == 0 || orient == 900 || orient == 1800 || orient == 2700 ) { - UserToDeviceCoordinate(pos) ; + UserToDeviceCoordinate(pos); UserToDeviceSize(size); - dcode_ptr = get_D_code(size.x,size.y,GERB_OVALE,0) ; - if (dcode_ptr->m_NumDcode != s_Last_D_code ) + dcode_ptr = get_D_code(size.x, size.y, GERB_OVALE, 0); + if( dcode_ptr->m_NumDcode != s_Last_D_code ) { - sprintf(cbuf,"G54D%d*\n",dcode_ptr->m_NumDcode) ; - fputs(cbuf,dest) ; + sprintf(cbuf, "G54D%d*\n", dcode_ptr->m_NumDcode); + fputs(cbuf, dest); s_Last_D_code = dcode_ptr->m_NumDcode; } - sprintf(cbuf,"X%5.5dY%5.5dD03*\n", pos.x, pos.y); - fputs(cbuf,dest) ; + sprintf(cbuf, "X%5.5dY%5.5dD03*\n", pos.x, pos.y); + fputs(cbuf, dest); } - else /* Forme tracee comme un segment */ + else /* Forme tracee comme un segment */ { - if(size.x > size.y ) + if( size.x > size.y ) { - EXCHG(size.x,size.y); orient += 900; + EXCHG(size.x, size.y); + if( orient < 2700 ) + orient += 900; + else + orient -= 2700; } /* la pastille est ramenee a une pastille ovale avec dy > dx */ delta = size.y - size.x; - x0 = 0; y0 = -delta / 2; - x1 = 0; y1 = delta / 2; - RotatePoint(&x0,&y0, orient); - RotatePoint(&x1,&y1, orient); + x0 = 0; + y0 = -delta / 2; + x1 = 0; + y1 = delta / 2; + RotatePoint(&x0, &y0, orient); + RotatePoint(&x1, &y1, orient); PlotGERBERLine( wxPoint(pos.x + x0, pos.y + y0), - wxPoint(pos.x + x1, pos.y + y1), size.x); + wxPoint(pos.x + x1, pos.y + y1), size.x ); } } @@ -384,8 +411,9 @@ int x0, y0, x1, y1, delta; /******************************************************************/ void Plot_1_CIRCLE_pad_GERBER(wxPoint pos,int diametre) /******************************************************************/ -/* Plot a circulat pad or via at the user position pos -*/ + +/* Plot a circular pad or via at the user position pos + */ { D_CODE * dcode_ptr; wxSize size(diametre, diametre); @@ -393,56 +421,59 @@ wxSize size(diametre, diametre); UserToDeviceCoordinate(pos); UserToDeviceSize(size); - dcode_ptr = get_D_code(size.x,size.x,GERB_CIRCLE,0) ; - if (dcode_ptr->m_NumDcode != s_Last_D_code ) + dcode_ptr = get_D_code(size.x, size.x, GERB_CIRCLE, 0); + if( dcode_ptr->m_NumDcode != s_Last_D_code ) { - sprintf(cbuf,"G54D%d*\n", dcode_ptr->m_NumDcode) ; - fputs(cbuf,dest) ; + sprintf(cbuf, "G54D%d*\n", dcode_ptr->m_NumDcode); + fputs(cbuf, dest); s_Last_D_code = dcode_ptr->m_NumDcode; } - sprintf(cbuf,"X%5.5dY%5.5dD03*\n", pos.x, pos.y); - fputs(cbuf,dest) ; + sprintf(cbuf, "X%5.5dY%5.5dD03*\n", pos.x, pos.y); + fputs(cbuf, dest); } + /**************************************************************************/ void PlotRectangularPad_GERBER(wxPoint pos, wxSize size, int orient) /**************************************************************************/ -/* - Trace 1 pad rectangulaire d'orientation quelconque - donne par son centre, ses dimensions, et son orientation - Pour une orientation verticale ou horizontale, la forme est flashee - Pour une orientation quelconque la forme est tracee par 4 segments - de largeur 1/2 largeur pad -*/ + +/* Trace 1 pad rectangulaire d'orientation quelconque + * donne par son centre, ses dimensions, et son orientation + * Pour une orientation verticale ou horizontale, la forme est flashee + * Pour une orientation quelconque la forme est tracee par 4 segments + * de largeur 1/2 largeur pad + */ { D_CODE * dcode_ptr; /* Trace de la forme flashee */ - switch (orient) + switch( orient ) { - case 900 : - case 2700 : /* la rotation de 90 ou 270 degres revient a permutter des dimensions */ - EXCHG(size.x,size.y); - case 1800 : - case 0 : - UserToDeviceCoordinate(pos) ; - UserToDeviceSize(size); + case 900: + case 2700: /* la rotation de 90 ou 270 degres revient a permutter des dimensions */ + EXCHG(size.x, size.y); + // Pass through - dcode_ptr = get_D_code(size.x,size.y,GERB_RECT,0) ; - if (dcode_ptr->m_NumDcode != s_Last_D_code ) - { - sprintf(cbuf,"G54D%d*\n", dcode_ptr->m_NumDcode) ; - fputs(cbuf,dest) ; - s_Last_D_code = dcode_ptr->m_NumDcode; - } - sprintf(cbuf,"X%5.5dY%5.5dD03*\n", pos.x, pos.y); - fputs(cbuf,dest) ; - break; + case 0: + case 1800: + UserToDeviceCoordinate(pos); + UserToDeviceSize(size); - default: /* Forme tracee par remplissage */ - trace_1_pad_TRAPEZE_GERBER(pos, size, wxSize(0, 0), orient,FILLED); - break; + dcode_ptr = get_D_code(size.x, size.y, GERB_RECT, 0); + if( dcode_ptr->m_NumDcode != s_Last_D_code ) + { + sprintf(cbuf, "G54D%d*\n", dcode_ptr->m_NumDcode); + fputs(cbuf, dest); + s_Last_D_code = dcode_ptr->m_NumDcode; + } + sprintf(cbuf, "X%5.5dY%5.5dD03*\n", pos.x, pos.y); + fputs(cbuf, dest); + break; + + default: /* Forme tracee par remplissage */ + trace_1_pad_TRAPEZE_GERBER(pos, size, wxSize(0, 0), orient, FILLED); + break; } } @@ -451,20 +482,22 @@ D_CODE * dcode_ptr; void trace_1_contour_GERBER(wxPoint pos, wxSize size, wxSize delta, int penwidth, int orient) /*****************************************************************/ -/* - Trace 1 contour rectangulaire ou trapezoidal d'orientation quelconque - donne par son centre, - ses dimensions , - ses variations , - l'epaisseur du trait, - et son orientation orient -*/ + +/* Trace 1 contour rectangulaire ou trapezoidal d'orientation quelconque + * donne par son centre, + * ses dimensions , + * ses variations , + * l'epaisseur du trait, + * et son orientation orient + */ { int ii; wxPoint coord[4]; - size.x /= 2; size.y /= 2 ; - delta.x /= 2; delta.y /= 2 ; /* demi dim dx et dy */ + size.x /= 2; + size.y /= 2; + delta.x /= 2; + delta.y /= 2; /* demi dim dx et dy */ coord[0].x = pos.x - size.x - delta.y; coord[0].y = pos.y + size.y + delta.x; @@ -478,16 +511,15 @@ wxPoint coord[4]; coord[3].x = pos.x + size.x + delta.y; coord[3].y = pos.y + size.y - delta.x; - for (ii = 0; ii < 4; ii++) - { + for( ii = 0; ii < 4; ii++ ) + { RotatePoint(&coord[ii].x, &coord[ii].y, pos.x, pos.y, orient); - } + } - - PlotGERBERLine( coord[0], coord[1], penwidth); - PlotGERBERLine( coord[1], coord[2], penwidth); - PlotGERBERLine( coord[2], coord[3], penwidth); - PlotGERBERLine( coord[3], coord[0], penwidth); + PlotGERBERLine( coord[0], coord[1], penwidth ); + PlotGERBERLine( coord[1], coord[2], penwidth ); + PlotGERBERLine( coord[2], coord[3], penwidth ); + PlotGERBERLine( coord[3], coord[0], penwidth ); } @@ -496,69 +528,74 @@ void trace_1_pad_TRAPEZE_GERBER(wxPoint pos, wxSize size,wxSize delta, int orient,int modetrace) /*******************************************************************/ -/* - Trace 1 pad trapezoidal donne par : - son centre pos.x,pos.y - ses dimensions size.x et size.y - les variations delta.x et delta.y ( 1 des deux au moins doit etre nulle) - son orientation orient en 0.1 degres - le mode de trace (FILLED, SKETCH, FILAIRE) - - Le trace n'est fait que pour un trapeze, c.a.d que delta.x ou delta.y - = 0. - - les notation des sommets sont ( vis a vis de la table tracante ) - -" 0 ------------- 3 " -" . . " -" . O . " -" . . " -" 1 ---- 2 " - - - exemple de Disposition pour delta.y > 0, delta.x = 0 -" 1 ---- 2 " -" . . " -" . O . " -" . . " -" 0 ------------- 3 " - - - exemple de Disposition pour delta.y = 0, delta.x > 0 -" 0 " -" . . " -" . . " -" . 3 " -" . . " -" . O . " -" . . " -" . 2 " -" . . " -" . . " -" 1 " -*/ +/* Trace 1 pad trapezoidal donne par : + * son centre pos.x,pos.y + * ses dimensions size.x et size.y + * les variations delta.x et delta.y ( 1 des deux au moins doit etre nulle) + * son orientation orient en 0.1 degres + * le mode de trace (FILLED, SKETCH, FILAIRE) + * + * Le trace n'est fait que pour un trapeze, c.a.d que delta.x ou delta.y + * = 0. + * + * les notation des sommets sont ( vis a vis de la table tracante ) + * + * " 0 ------------- 3 " + * " . . " + * " . O . " + * " . . " + * " 1 ---- 2 " + * + * + * exemple de Disposition pour delta.y > 0, delta.x = 0 + * " 1 ---- 2 " + * " . . " + * " . O . " + * " . . " + * " 0 ------------- 3 " + * + * + * exemple de Disposition pour delta.y = 0, delta.x > 0 + * " 0 " + * " . . " + * " . . " + * " . 3 " + * " . . " + * " . O . " + * " . . " + * " . 2 " + * " . . " + * " . . " + * " 1 " + */ { -int ii , jj; -int dx,dy; +int ii, jj; +int dx, dy; wxPoint polygone[4]; /* coord sommets */ int coord[8]; -int ddx, ddy ; +int ddx, ddy; /* calcul des dimensions optimales du spot choisi = 1/4 plus petite dim */ dx = size.x - abs(delta.y); dy = size.y - abs(delta.x); - dx = size.x / 2; dy = size.y / 2 ; - ddx = delta.x / 2; ddy = delta.y / 2 ; + dx = size.x / 2; + dy = size.y / 2; + ddx = delta.x / 2; + ddy = delta.y / 2; - polygone[0].x = - dx - ddy; polygone[0].y = + dy + ddx; - polygone[1].x = - dx + ddy; polygone[1].y = - dy - ddx; - polygone[2].x = + dx - ddy; polygone[2].y = - dy + ddx; - polygone[3].x = + dx + ddy; polygone[3].y = + dy - ddx; + polygone[0].x = - dx - ddy; + polygone[0].y = + dy + ddx; + polygone[1].x = - dx + ddy; + polygone[1].y = - dy - ddx; + polygone[2].x = + dx - ddy; + polygone[2].y = - dy + ddx; + polygone[3].x = + dx + ddy; + polygone[3].y = + dy - ddx; /* Dessin du polygone et Remplissage eventuel de l'interieur */ - for (ii = 0, jj = 0; ii < 4; ii++) + for( ii = 0, jj = 0; ii < 4; ii++ ) { RotatePoint(&polygone[ii].x, &polygone[ii].y, orient); coord[jj] = polygone[ii].x += pos.x; @@ -567,12 +604,12 @@ int ddx, ddy ; jj++; } - if(modetrace != FILLED ) + if( modetrace != FILLED ) { - PlotGERBERLine( polygone[0], polygone[1], scale_spot_mini); - PlotGERBERLine( polygone[1], polygone[2], scale_spot_mini); - PlotGERBERLine( polygone[2], polygone[3], scale_spot_mini); - PlotGERBERLine( polygone[3], polygone[0], scale_spot_mini); + PlotGERBERLine( polygone[0], polygone[1], scale_spot_mini ); + PlotGERBERLine( polygone[1], polygone[2], scale_spot_mini ); + PlotGERBERLine( polygone[2], polygone[3], scale_spot_mini ); + PlotGERBERLine( polygone[3], polygone[0], scale_spot_mini ); } else @@ -583,52 +620,63 @@ int ddx, ddy ; /**********************************************************/ void PlotGERBERLine(wxPoint start, wxPoint end, int large) /**********************************************************/ + /* Trace 1 segment de piste : -*/ + */ { D_CODE * dcode_ptr; UserToDeviceCoordinate(start); UserToDeviceCoordinate(end); - dcode_ptr = get_D_code(large,large,GERB_LINE,0) ; - if (dcode_ptr->m_NumDcode != s_Last_D_code ) + dcode_ptr = get_D_code(large, large, GERB_LINE, 0); + if(dcode_ptr->m_NumDcode != s_Last_D_code ) { - sprintf(cbuf,"G54D%d*\n", dcode_ptr->m_NumDcode) ; - fputs(cbuf,dest) ; + sprintf(cbuf, "G54D%d*\n", dcode_ptr->m_NumDcode); + fputs(cbuf, dest); s_Last_D_code = dcode_ptr->m_NumDcode; } - sprintf(cbuf,"X%5.5dY%5.5dD02*\n",start.x,start.y) ; fputs(cbuf,dest) ; - sprintf(cbuf,"X%5.5dY%5.5dD01*\n",end.x,end.y) ; fputs(cbuf,dest) ; + sprintf(cbuf, "X%5.5dY%5.5dD02*\n", start.x, start.y); + fputs(cbuf, dest); + sprintf(cbuf, "X%5.5dY%5.5dD01*\n", end.x, end.y); + fputs(cbuf, dest); } + /********************************************************************/ -void PlotCircle_GERBER( wxPoint centre, int rayon, int epaisseur) +void PlotCircle_GERBER( wxPoint centre, int rayon, int epaisseur ) /********************************************************************/ + /* routine de trace de 1 cercle de centre centre par approximation de segments -*/ + */ { -int ii ; +int ii; int ox, oy, fx, fy; int delta; /* increment (en 0.1 degres) angulaire pour trace de cercles */ delta = 120; /* un cercle sera trace en 3600/delta segments */ /* Correction pour petits cercles par rapport a l'epaisseur du trait */ - if( rayon < (epaisseur * 10) ) delta = 225; /* 16 segm pour 360 deg */ - if( rayon < (epaisseur * 5) ) delta = 300; /* 12 segm pour 360 deg */ - if( rayon < (epaisseur * 2) ) delta = 600; /* 6 segm pour 360 deg */ + if( rayon < (epaisseur * 10) ) + delta = 225; /* 16 segm pour 360 deg */ + if( rayon < (epaisseur * 5) ) + delta = 300; /* 12 segm pour 360 deg */ + if( rayon < (epaisseur * 2) ) + delta = 600; /* 6 segm pour 360 deg */ - ox = centre.x + rayon; oy = centre.y; - for (ii = delta ; ii < 3600 ; ii += delta ) - { + ox = centre.x + rayon; + oy = centre.y; + for( ii = delta; ii < 3600; ii += delta ) + { fx = centre.x + (int)(rayon * fcosinus[ii]); fy = centre.y + (int)(rayon * fsinus[ii]); - PlotGERBERLine(wxPoint(ox,oy), wxPoint(fx,fy), epaisseur) ; - ox = fx; oy = fy; - } + PlotGERBERLine(wxPoint(ox, oy), wxPoint(fx, fy), epaisseur); + ox = fx; + oy = fy; + } - fx = centre.x + rayon; fy = centre.y; - PlotGERBERLine(wxPoint(ox,oy), wxPoint(fx,fy), epaisseur) ; + fx = centre.x + rayon; + fy = centre.y; + PlotGERBERLine(wxPoint(ox ,oy), wxPoint(fx, fy), epaisseur); } @@ -640,16 +688,20 @@ int ii; wxPoint pos; fputs("G36*\n", dest); - pos.x = *coord; coord++; - pos.y = *coord; coord++; + pos.x = *coord; + coord++; + pos.y = *coord; + coord++; UserToDeviceCoordinate(pos); - fprintf(dest, "X%5.5dY%5.5dD02*\n", pos.x, pos.y ); - for ( ii = 1; ii < nb_segm; ii++ ) + fprintf( dest, "X%5.5dY%5.5dD02*\n", pos.x, pos.y ); + for( ii = 1; ii < nb_segm; ii++ ) { - pos.x = *coord; coord++; - pos.y = *coord; coord++; + pos.x = *coord; + coord++; + pos.y = *coord; + coord++; UserToDeviceCoordinate(pos); - fprintf(dest, "X%5.5dY%5.5dD01*\n", pos.x, pos.y ); + fprintf( dest, "X%5.5dY%5.5dD01*\n", pos.x, pos.y ); } fputs("G37*\n", dest); @@ -657,12 +709,12 @@ wxPoint pos; /*******************************************************/ -D_CODE * get_D_code(int dx,int dy, int type, int drill ) +D_CODE * get_D_code( int dx, int dy, int type, int drill ) /*******************************************************/ -/* - Fonction Recherchant et Creant eventuellement la description - du D_CODE du type et dimensions demandees -*/ + +/* Fonction Recherchant et Creant eventuellement la description + * du D_CODE du type et dimensions demandees + */ { D_CODE * ptr_tool, * last_dcode_ptr; int num_new_D_code = FIRST_DCODE_VALUE; @@ -670,32 +722,33 @@ int num_new_D_code = FIRST_DCODE_VALUE; ptr_tool = last_dcode_ptr = s_DCodeList; - while(ptr_tool && ptr_tool->m_Type >= 0 ) + while( ptr_tool && ptr_tool->m_Type >= 0 ) { if( ( ptr_tool->m_Size.x == dx ) && ( ptr_tool->m_Size.y == dy ) && ( ptr_tool->m_Type == type ) ) return(ptr_tool); /* D_code deja existant */ last_dcode_ptr = ptr_tool; - ptr_tool = ptr_tool->m_Pnext ; - num_new_D_code++ ; + ptr_tool = ptr_tool->m_Pnext; + num_new_D_code++; } /* At this point, the requested D_CODE does not exist: It will be created */ - if ( ptr_tool == NULL ) /* We must create a new data */ + if( ptr_tool == NULL ) /* We must create a new data */ { ptr_tool = new D_CODE(); ptr_tool->m_NumDcode = num_new_D_code; - if ( last_dcode_ptr ) + if( last_dcode_ptr ) { ptr_tool->m_Pback = last_dcode_ptr; last_dcode_ptr->m_Pnext = ptr_tool; } - else s_DCodeList = ptr_tool; + else + s_DCodeList = ptr_tool; } - ptr_tool->m_Size.x = dx ; - ptr_tool->m_Size.y = dy ; - ptr_tool->m_Type = type ; + ptr_tool->m_Size.x = dx; + ptr_tool->m_Size.y = dy; + ptr_tool->m_Type = type; return(ptr_tool); } @@ -706,20 +759,20 @@ void Init_Trace_GERBER(WinEDA_BasePcbFrame * frame, FILE * gerbfile) { char Line[1024]; - s_Last_D_code = 0 ; + s_Last_D_code = 0; DateAndTime(Line); wxString Title = g_Main_Title + wxT(" ") + GetBuildVersion(); - fprintf(gerbfile,"G04 (Genere par %s) le %s*\n",CONV_TO_UTF8(Title), Line); + fprintf(gerbfile, "G04 (Genere par %s) le %s*\n", CONV_TO_UTF8(Title), Line); // Specify linear interpol (G01), unit = INCH (G70), abs format (G90): fputs("G01*\nG70*\nG90*\n", gerbfile); fputs("%MOIN*%\n", gerbfile); // set unites = INCHES /* Set gerber format to 3.4 */ - strcpy(Line,"G04 Gerber Fmt 3.4, Leading zero omitted, Abs format*\n%FSLAX34Y34*%\n") ; + strcpy(Line, "G04 Gerber Fmt 3.4, Leading zero omitted, Abs format*\n%FSLAX34Y34*%\n"); - fputs(Line,gerbfile); + fputs(Line, gerbfile); fputs("G04 APERTURE LIST*\n", gerbfile); } @@ -728,21 +781,24 @@ char Line[1024]; /***********************************/ static void Init_ApertureList() /***********************************/ + /* Init the memory to handle the aperture list: - the member .m_Type is used by get_D_code() to handle the end of list: - .m_Type < 0 is the first free aperture descr */ + * the member .m_Type is used by get_D_code() to handle the end of list: + * .m_Type < 0 is the first free aperture descr + */ { D_CODE * ptr_tool; ptr_tool = s_DCodeList; - while ( ptr_tool ) + while( ptr_tool ) { s_DCodeList->m_Type = -1; - ptr_tool = ptr_tool->m_Pnext ; + ptr_tool = ptr_tool->m_Pnext; } ShowDcodeError = TRUE; } + /*****************************************************************/ void Fin_Trace_GERBER(WinEDA_BasePcbFrame * frame, FILE * gerbfile) /*****************************************************************/ @@ -751,22 +807,22 @@ char line[1024]; wxString TmpFileName, msg; FILE * outfile; - fputs("M02*\n",gerbfile); + fputs("M02*\n", gerbfile); fclose(gerbfile); // Reouverture gerbfile pour ajout des Apertures - gerbfile = wxFopen(GerberFullFileName, wxT("rt") ); - if (gerbfile == NULL) + gerbfile = wxFopen( GerberFullFileName, wxT("rt") ); + if( gerbfile == NULL ) { - msg.Printf( _("unable to reopen file <%s>"),GerberFullFileName.GetData() ) ; - DisplayError(frame, msg); return ; + msg.Printf( _("unable to reopen file <%s>"), GerberFullFileName.GetData() ); + DisplayError(frame, msg); + return; } - // Ouverture tmpfile TmpFileName = GerberFullFileName + wxT(".$$$"); - outfile = wxFopen(TmpFileName, wxT("wt") ); - if ( outfile == NULL ) + outfile = wxFopen( TmpFileName, wxT("wt") ); + if( outfile == NULL ) { fclose(gerbfile); DisplayError(frame, wxT("Fin_Trace_GERBER(): Can't Open tmp file")); @@ -775,10 +831,10 @@ FILE * outfile; // Placement des Apertures en RS274X rewind(gerbfile); - while ( fgets(line, 1024, gerbfile) ) + while( fgets(line, 1024, gerbfile) ) { fputs(line, outfile); - if ( strcmp(strtok(line, "\n\r"),"G04 APERTURE LIST*") == 0 ) + if( strcmp(strtok(line, "\n\r"), "G04 APERTURE LIST*") == 0 ) { frame->Gen_D_CODE_File(outfile); fputs("G04 APERTURE END LIST*\n", outfile); @@ -789,16 +845,16 @@ FILE * outfile; fclose(gerbfile); wxRemoveFile(GerberFullFileName); wxRenameFile(TmpFileName, GerberFullFileName); - } /******************************************************/ int WinEDA_BasePcbFrame::Gen_D_CODE_File(FILE * penfile) /******************************************************/ + /* Genere la liste courante des D_CODES - Retourne le nombre de D_Codes utilises - Genere une sequence RS274X + * Retourne le nombre de D_Codes utilises + * Genere une sequence RS274X */ { D_CODE * ptr_tool; @@ -807,44 +863,43 @@ int nb_dcodes = 0 ; /* Init : */ ptr_tool = s_DCodeList; - while(ptr_tool && (ptr_tool->m_Type >= 0 ) ) + while( ptr_tool && ( ptr_tool->m_Type >= 0 ) ) { - float fscale = 0.0001; // For 3.4 format + float fscale = 0.0001; // For 3.4 format char * text; - sprintf(cbuf,"%%ADD%d", ptr_tool->m_NumDcode); + sprintf(cbuf, "%%ADD%d", ptr_tool->m_NumDcode); text = cbuf + strlen(cbuf); - switch ( ptr_tool->m_Type ) + switch( ptr_tool->m_Type ) { - case 1: // Circle (flash ) - sprintf(text,"C,%f*%%\n", ptr_tool->m_Size.x * fscale); - break; + case 1: // Circle (flash ) + sprintf(text, "C,%f*%%\n", ptr_tool->m_Size.x * fscale); + break; - case 2: // RECT - sprintf(text,"R,%fX%f*%%\n", ptr_tool->m_Size.x * fscale, - ptr_tool->m_Size.y * fscale); - break; + case 2: // RECT + sprintf(text, "R,%fX%f*%%\n", ptr_tool->m_Size.x * fscale, + ptr_tool->m_Size.y * fscale); + break; - case 3: // Circle ( lines ) - sprintf(text,"C,%f*%%\n", ptr_tool->m_Size.x * fscale); - break; + case 3: // Circle ( lines ) + sprintf(text, "C,%f*%%\n", ptr_tool->m_Size.x * fscale); + break; - case 4: // OVALE - sprintf(text,"O,%fX%f*%%\n", ptr_tool->m_Size.x * fscale, - ptr_tool->m_Size.y * fscale); - break; + case 4: // OVALE + sprintf(text, "O,%fX%f*%%\n", ptr_tool->m_Size.x * fscale, + ptr_tool->m_Size.y * fscale); + break; - default: - DisplayError(this, wxT("Gen_D_CODE_File(): Dcode Type err") ); - break; + default: + DisplayError( this, wxT("Gen_D_CODE_File(): Dcode Type err") ); + break; } // compensation localisation printf (float x.y généré x,y) - to_point ( text + 2 ); + to_point( text + 2 ); - fputs(cbuf,penfile) ; - ptr_tool = ptr_tool->m_Pnext; nb_dcodes++ ; + fputs(cbuf, penfile); + ptr_tool = ptr_tool->m_Pnext; + nb_dcodes++; } - return(nb_dcodes); + return( nb_dcodes ); } - - diff --git a/pcbnew/plothpgl.cpp b/pcbnew/plothpgl.cpp index 6c979ae39b..5746398525 100644 --- a/pcbnew/plothpgl.cpp +++ b/pcbnew/plothpgl.cpp @@ -136,7 +136,7 @@ void WinEDA_BasePcbFrame::Genere_HPGL( const wxString& FullFileName, int Layer ) switch( Layer ) { - case COPPER_LAYER_N: + case FIRST_COPPER_LAYER: case LAYER_N_2: case LAYER_N_3: case LAYER_N_4: @@ -151,7 +151,7 @@ void WinEDA_BasePcbFrame::Genere_HPGL( const wxString& FullFileName, int Layer ) case LAYER_N_13: case LAYER_N_14: case LAYER_N_15: - case CMP_N: + case LAST_COPPER_LAYER: Plot_Layer_HPGL( dest, layer_mask, 0, 1, modetrace ); break; diff --git a/pcbnew/plotps.cpp b/pcbnew/plotps.cpp index 97cb1b0337..0857322e6e 100644 --- a/pcbnew/plotps.cpp +++ b/pcbnew/plotps.cpp @@ -178,7 +178,7 @@ void WinEDA_BasePcbFrame::Genere_PS( const wxString& FullFileName, int Layer ) Plot_Layer_PS( dest, layer_mask, 0, 1, modetrace ); break; - case COPPER_LAYER_N: + case FIRST_COPPER_LAYER: case LAYER_N_2: case LAYER_N_3: case LAYER_N_4: @@ -193,7 +193,7 @@ void WinEDA_BasePcbFrame::Genere_PS( const wxString& FullFileName, int Layer ) case LAYER_N_13: case LAYER_N_14: case LAYER_N_15: - case CMP_N: + case LAST_COPPER_LAYER: Plot_Layer_PS( dest, layer_mask, 0, 1, modetrace ); break;