diff --git a/common/common_plotHPGL_functions.cpp b/common/common_plotHPGL_functions.cpp index 0a1a3fb4ae..0dec490dce 100644 --- a/common/common_plotHPGL_functions.cpp +++ b/common/common_plotHPGL_functions.cpp @@ -68,9 +68,25 @@ bool CloseFileHPGL( FILE* plot_file ) return TRUE; } +/************************************************************/ +void PlotRectHPGL( wxPoint p1, wxPoint p2, int fill, int width ) +/************************************************************/ +{ + char Line[256]; + + UserToDeviceCoordinate( p1 ); + UserToDeviceCoordinate( p2 ); + + Plume_HPGL( 'U' ); + sprintf( Line, "PA %d,%d;EA %d,%d;\n", p1.x, p1.y, p2.x, p2.y ); + fputs( Line, PlotOutputFile ); + + Plume_HPGL( 'U' ); return; +} + /************************************************************/ -void PlotCircle_HPGL( wxPoint centre, int diameter, int width ) +void PlotCircleHPGL( wxPoint centre, int diameter, int fill, int width ) /************************************************************/ { int rayon; @@ -91,7 +107,7 @@ void PlotCircle_HPGL( wxPoint centre, int diameter, int width ) /********************************************************************/ -void PlotArcHPGL( wxPoint centre, int StAngle, int EndAngle, int rayon, int width ) +void PlotArcHPGL( wxPoint centre, int StAngle, int EndAngle, int rayon, int fill, int width ) /********************************************************************/ /* trace d'un arc de cercle: diff --git a/common/common_plotPS_functions.cpp b/common/common_plotPS_functions.cpp index 45b506bdce..b1bbbf4af9 100644 --- a/common/common_plotPS_functions.cpp +++ b/common/common_plotPS_functions.cpp @@ -113,9 +113,20 @@ void PlotFilledSegmentPS( wxPoint start, wxPoint end, int width ) fprintf( PlotOutputFile, "%d %d %d %d line\n", start.x, start.y, end.x, end.y ); } +/***************************************************************/ +void PlotRectPS( wxPoint p1, wxPoint p2, int fill, int width ) +/***************************************************************/ +{ + UserToDeviceCoordinate( p1 ); + UserToDeviceCoordinate( p2 ); + + SetCurrentLineWidthPS( width ); + fprintf( PlotOutputFile, "%d %d %d %d rect%d\n", p1.x, p1.y, + p2.x-p1.x, p2.y-p1.y, fill ); +} /******************************************************/ -void PlotCircle_PS( wxPoint pos, int diametre, int width ) +void PlotCirclePS( wxPoint pos, int diametre, int fill, int width ) /******************************************************/ { int rayon; @@ -128,13 +139,13 @@ void PlotCircle_PS( wxPoint pos, int diametre, int width ) rayon = 0; SetCurrentLineWidthPS( width ); - sprintf( Line, "newpath %d %d %d 0 360 arc stroke\n", pos.x, pos.y, rayon ); + sprintf(Line, "%d %d %d cir%d\n", pos.x, pos.y, rayon, fill); fputs( Line, PlotOutputFile ); } /**************************************************************************************/ -void PlotArcPS( wxPoint centre, int StAngle, int EndAngle, int rayon, int width ) +void PlotArcPS( wxPoint centre, int StAngle, int EndAngle, int rayon, int fill, int width ) /**************************************************************************************/ /* Plot an arc: @@ -152,11 +163,13 @@ void PlotArcPS( wxPoint centre, int StAngle, int EndAngle, int rayon, int width UserToDeviceCoordinate( centre ); if( PlotOrientOptions == PLOT_MIROIR ) - sprintf( Line, "newpath %d %d %d %f %f arc stroke\n", centre.x, centre.y, - (int) (rayon * XScale), (float) StAngle / 10, (float) EndAngle / 10 ); + sprintf( Line, "%d %d %d %f %f arc%d\n", centre.x, centre.y, + (int) (rayon * XScale), (float) StAngle / 10, (float) EndAngle / 10, + fill); else - sprintf( Line, "newpath %d %d %d %f %f arc stroke\n", centre.x, centre.y, - (int) (rayon * XScale), -(float) EndAngle / 10, -(float) StAngle / 10 ); + sprintf( Line, "%d %d %d %f %f arc%d\n", centre.x, centre.y, + (int) (rayon * XScale), -(float) EndAngle / 10, -(float) StAngle / 10, + fill); // Undo internationalization printf (float x.y printed x,y) to_point( Line ); @@ -197,11 +210,7 @@ void PlotPolyPS( int nb_segm, int* coord, int fill, int width ) } // Fermeture du polygone - if( fill ) - fprintf( PlotOutputFile, "closepath " ); - if( fill == 1 ) - fprintf( PlotOutputFile, "fill " ); - fprintf( PlotOutputFile, "stroke\n" ); + fprintf(PlotOutputFile, "poly%d\n", fill); } @@ -260,7 +269,19 @@ void PrintHeaderPS( FILE* file, const wxString& Creator, " moveto\n", " lineto\n", " stroke\n", - "} def\n", + "} bind def\n", + "/cir0 { newpath 0 360 arc stroke } bind def\n", + "/cir1 { newpath 0 360 arc gsave fill grestore stroke } bind def\n", + "/cir2 { newpath 0 360 arc gsave fill grestore stroke } bind def\n", + "/arc0 { newpath arc stroke } bind def\n", + "/arc1 { newpath 4 index 4 index moveto arc closepath gsave fill grestore stroke } bind def\n", + "/arc2 { newpath 4 index 4 index moveto arc closepath gsave fill grestore stroke } bind def\n", + "/poly0 { stroke } bind def\n", + "/poly1 { closepath gsave fill grestore stroke } bind def\n", + "/poly2 { closepath gsave fill grestore stroke } bind def\n", + "/rect0 { rectstroke } bind def\n", + "/rect1 { rectfill } bind def\n", + "/rect2 { rectfill } bind def\n", "gsave\n", "72 72 scale\t\t\t% Talk inches\n", "1 setlinecap\n", diff --git a/eeschema/plot.cpp b/eeschema/plot.cpp index e12c8b4a5b..dd8a8ae21a 100644 --- a/eeschema/plot.cpp +++ b/eeschema/plot.cpp @@ -73,9 +73,24 @@ void SetCurrentLineWidth( int width ) } } +/*******************************************************************************/ +void PlotRect( wxPoint p1, wxPoint p2, int fill, int width ) +/*******************************************************************************/ +{ + switch( g_PlotFormat ) + { + case PLOT_FORMAT_HPGL: + PlotRectHPGL( p1, p2, fill, width ); + break; + + case PLOT_FORMAT_POST: + PlotRectPS( p1, p2, fill, width ); + break; + } +} /*******************************************************************************/ -void PlotArc( wxPoint centre, int StAngle, int EndAngle, int rayon, int width ) +void PlotArc( wxPoint centre, int StAngle, int EndAngle, int rayon, int fill, int width ) /*******************************************************************************/ /* trace d'un arc de cercle: @@ -87,28 +102,28 @@ void PlotArc( wxPoint centre, int StAngle, int EndAngle, int rayon, int width ) switch( g_PlotFormat ) { case PLOT_FORMAT_HPGL: - PlotArcHPGL( centre, StAngle, EndAngle, rayon, width ); + PlotArcHPGL( centre, StAngle, EndAngle, rayon, fill, width ); break; case PLOT_FORMAT_POST: - PlotArcPS( centre, StAngle, EndAngle, rayon, width ); + PlotArcPS( centre, StAngle, EndAngle, rayon, fill, width ); break; } } /*******************************************************/ -void PlotCercle( wxPoint pos, int diametre, int width ) +void PlotCercle( wxPoint pos, int diametre, int fill, int width ) /*******************************************************/ { switch( g_PlotFormat ) { case PLOT_FORMAT_HPGL: - PlotCircle_HPGL( pos, diametre, width ); + PlotCircleHPGL( pos, diametre, fill, width ); break; case PLOT_FORMAT_POST: - PlotCircle_PS( pos, diametre, width ); + PlotCirclePS( pos, diametre, fill, width ); break; } } @@ -204,7 +219,7 @@ void PlotLibPart( SCH_COMPONENT* DrawLibItem ) pos.y = PartY + TransMat[1][0] * Arc->m_Pos.x + TransMat[1][1] * Arc->m_Pos.y; MapAngles( &t1, &t2, TransMat ); - PlotArc( pos, t1, t2, Arc->m_Rayon, Arc->m_Width ); + PlotArc( pos, t1, t2, Arc->m_Rayon, Arc->m_Fill, Arc->m_Width ); } break; @@ -215,7 +230,7 @@ void PlotLibPart( SCH_COMPONENT* DrawLibItem ) TransMat[0][1] * Circle->m_Pos.y; pos.y = PartY + TransMat[1][0] * Circle->m_Pos.x + TransMat[1][1] * Circle->m_Pos.y; - PlotCercle( pos, Circle->m_Rayon * 2, Circle->m_Width ); + PlotCercle( pos, Circle->m_Rayon * 2, Circle->m_Fill, Circle->m_Width ); } break; @@ -251,12 +266,7 @@ void PlotLibPart( SCH_COMPONENT* DrawLibItem ) y2 = PartY + TransMat[1][0] * Square->m_End.x + TransMat[1][1] * Square->m_End.y; - SetCurrentLineWidth( Square->m_Width ); - Move_Plume( wxPoint( x1, y1 ), 'U' ); - Move_Plume( wxPoint( x1, y2 ), 'D' ); - Move_Plume( wxPoint( x2, y2 ), 'D' ); - Move_Plume( wxPoint( x2, y1 ), 'D' ); - Move_Plume( wxPoint( x1, y1 ), 'D' ); + PlotRect( wxPoint(x1, y1), wxPoint(x2, y2), Square->m_Fill, Square->m_Width ); } break; @@ -469,8 +479,8 @@ static void PlotPinSymbol( int posX, int posY, int len, int orient, int Shape ) if( Shape & INVERT ) { PlotCercle( wxPoint( MapX1 * INVERT_PIN_RADIUS + x1, - MapY1 * INVERT_PIN_RADIUS + y1 ), - INVERT_PIN_RADIUS * 2 ); + MapY1 * INVERT_PIN_RADIUS + y1), + INVERT_PIN_RADIUS * 2,0 ); Move_Plume( wxPoint( MapX1 * INVERT_PIN_RADIUS * 2 + x1, MapY1 * INVERT_PIN_RADIUS * 2 + y1 ), 'U' ); diff --git a/eeschema/plothpgl.cpp b/eeschema/plothpgl.cpp index 467a783641..cab5b82ae1 100644 --- a/eeschema/plothpgl.cpp +++ b/eeschema/plothpgl.cpp @@ -677,7 +677,7 @@ void WinEDA_PlotHPGLFrame::Plot_1_Page_HPGL( const wxString& FullFileName, #undef STRUCT #define STRUCT ( (DrawJunctionStruct*) DrawList ) x1 = STRUCT->m_Pos.x; y1 = STRUCT->m_Pos.y; - PlotCercle( wxPoint( x1, y1 ), DRAWJUNCTION_SIZE * 2 ); + PlotCercle( wxPoint( x1, y1 ), DRAWJUNCTION_SIZE * 2, 1 ); break; case TYPE_SCH_TEXT: diff --git a/eeschema/plotps.cpp b/eeschema/plotps.cpp index 67d01c811e..7f0b0242c6 100644 --- a/eeschema/plotps.cpp +++ b/eeschema/plotps.cpp @@ -559,7 +559,7 @@ void WinEDA_PlotPSFrame::PlotOneSheetPS( const wxString& FileName, #define STRUCT ( (DrawJunctionStruct*) DrawList ) if( g_PlotPSColorOpt ) SetColorMapPS( ReturnLayerColor( STRUCT->GetLayer() ) ); - PlotCercle( STRUCT->m_Pos, DRAWJUNCTION_SIZE ); + PlotCercle( STRUCT->m_Pos, DRAWJUNCTION_SIZE, 1 ); break; case TYPE_SCH_TEXT: diff --git a/eeschema/protos.h b/eeschema/protos.h index c4a7288c94..80b8c0f030 100644 --- a/eeschema/protos.h +++ b/eeschema/protos.h @@ -290,7 +290,7 @@ int CheckAnnotate(WinEDA_SchematicFrame * frame, bool OneSheetOnly); void SetCurrentLineWidth( int width); void PlotArc(wxPoint centre, int StAngle, int EndAngle, int rayon, int width = -1); -void PlotCercle(wxPoint centre, int diametre, int width = -1); +void PlotCercle(wxPoint centre, int diametre, int fill, int width = -1); void PlotPoly( int nb, int * coord, int fill, int width = -1); void PlotNoConnectStruct(DrawNoConnectStruct * Struct); diff --git a/include/plot_common.h b/include/plot_common.h index 72b19c21df..a701651687 100644 --- a/include/plot_common.h +++ b/include/plot_common.h @@ -61,8 +61,9 @@ void InitPlotParametresPS( wxPoint offset, double yscale, int orient = 0 ); void SetDefaultLineWidthPS( int width ); -void PlotCircle_PS( wxPoint pos, int diametre, int width = -1 ); -void PlotArcPS( wxPoint centre, int StAngle, int EndAngle, int rayon, int width = -1 ); +void PlotRectPS(wxPoint p1, wxPoint p2, int fill, int width = -1); +void PlotCirclePS( wxPoint pos, int diametre, int fill, int width = -1 ); +void PlotArcPS( wxPoint centre, int StAngle, int EndAngle, int rayon, int fill, int width = -1 ); // Plot an arc: StAngle, EndAngle = start and end arc in 0.1 degree void PlotPolyPS( int nb_segm, int* coord, int fill, int width = -1 ); @@ -84,8 +85,9 @@ void SetColorMapPS( int color ); void InitPlotParametresHPGL( wxPoint offset, double xscale, double yscale, int orient = 0 ); bool PrintHeaderHPGL( FILE* plot_file, int pen_speed, int pen_num ); bool CloseFileHPGL( FILE* plot_file ); -void PlotCircle_HPGL( wxPoint centre, int diameter, int width = -1 ); -void PlotArcHPGL( wxPoint centre, int StAngle, int EndAngle, int rayon, int width = -1 ); +void PlotCircleHPGL( wxPoint centre, int diameter, int fill, int width = -1 ); +void PlotRectHPGL(wxPoint t1, wxPoint t2, int fill, int width = -1); +void PlotArcHPGL( wxPoint centre, int StAngle, int EndAngle, int rayon, int fill, int width = -1 ); void PlotPolyHPGL( int nb, int* coord, int fill, int width = -1 ); void Move_Plume_HPGL( wxPoint pos, int plume ); void Plume_HPGL( int plume ); diff --git a/pcbnew/plot_rtn.cpp b/pcbnew/plot_rtn.cpp index 76782d5b77..f59a4d1ef7 100644 --- a/pcbnew/plot_rtn.cpp +++ b/pcbnew/plot_rtn.cpp @@ -791,7 +791,7 @@ void PlotCircle( int format_plot, int thickness, wxPoint centre, int radius ) break; case PLOT_FORMAT_POST: - PlotCircle_PS( centre, radius * 2, thickness ); + PlotCirclePS( centre, radius * 2, thickness, 0); break; } } @@ -837,7 +837,7 @@ void PlotArc( int format_plot, wxPoint centre, int start_angle, int end_angle, if( IsPostScript( format_plot ) ) { - PlotArcPS( centre, start_angle, end_angle, radius, thickness ); + PlotArcPS( centre, start_angle, end_angle, radius, thickness, 0 ); return; } diff --git a/pcbnew/plotps.cpp b/pcbnew/plotps.cpp index 230162bd0d..ee07b076f0 100644 --- a/pcbnew/plotps.cpp +++ b/pcbnew/plotps.cpp @@ -543,8 +543,8 @@ void trace_1_pastille_OVALE_POST( wxPoint pos, wxSize size, int orient, int mode rayon = 1; if( rayon < w ) w = rayon; - PlotArcPS( wxPoint( pos.x + x1, pos.y + y1 ), -orient, -orient + 1800, rayon, w ); - PlotArcPS( wxPoint( pos.x + x0, pos.y + y0 ), -orient + 1800, -orient, rayon, w ); + PlotArcPS( wxPoint( pos.x + x1, pos.y + y1 ), -orient, -orient + 1800, rayon, w, 0); + PlotArcPS( wxPoint( pos.x + x0, pos.y + y0 ), -orient + 1800, -orient, rayon, w, 0 ); x0 = -rayon; y0 = -delta / 2; diff --git a/pcbnew/specctra_export.cpp b/pcbnew/specctra_export.cpp index 8491a95e51..6c68d31fd3 100644 --- a/pcbnew/specctra_export.cpp +++ b/pcbnew/specctra_export.cpp @@ -132,26 +132,10 @@ void WinEDA_PcbFrame::ExportToSpecctra( wxCommandEvent& event ) namespace DSN { -struct POINT_PAIR -{ - POINT start; - POINT end; - BOARD_ITEM* item; ///< the item which has these points, TRACK or DRAWSEGMENT -}; -typedef std::vector POINT_PAIRS; - const KICAD_T SPECCTRA_DB::scanPADs[] = { TYPEPAD, EOT }; -static inline void swap( POINT_PAIR& pair ) -{ - POINT temp = pair.start; - pair.start = pair.end; - pair.end = temp; -} - - /** * Function scale * converts a distance from kicad units to our reported specctra dsn units: diff --git a/pcbnew/specctra_import.cpp b/pcbnew/specctra_import.cpp index 4ac4597cc3..844470af60 100644 --- a/pcbnew/specctra_import.cpp +++ b/pcbnew/specctra_import.cpp @@ -122,6 +122,15 @@ void WinEDA_PcbFrame::ImportSpecctraSession( wxCommandEvent& event ) namespace DSN { + +/** + * Function scale + * converts a session file distance to Kicad units of deci-mils. + * @param distance The session file length to convert. + * @param aResolution The session UNIT_RES which holds the engineering unit + * specifier + * @return int - The Kicad length in deci-mils + */ static int scale( double distance, UNIT_RES* aResolution ) { double resValue = aResolution->GetValue(); @@ -152,7 +161,7 @@ static int scale( double distance, UNIT_RES* aResolution ) // used within Kicad. factor *= 10.0; - int ret = (int) round(factor * distance / resValue); + int ret = (int) round( factor * distance / resValue ); return ret; }