/** * Common plot library \n * Plot settings, postscript plotting, gerber plotting. * * @file plot_common.h */ #ifndef __INCLUDE__PLOT_COMMON_H__ #define __INCLUDE__PLOT_COMMON_H__ 1 /** * Enum PlotFormat * must be kept in order of the radio buttons in the plot panel/window. */ enum PlotFormat { PLOT_FORMAT_HPGL, PLOT_FORMAT_GERBER, PLOT_FORMAT_POST }; static inline bool IsPostScript( int aFormat ) { return aFormat == PLOT_FORMAT_POST; } const int PLOT_MIROIR = 1; // Variables used in Common plot functions extern wxPoint g_Plot_PlotOffset; extern FILE* g_Plot_PlotOutputFile; extern double g_Plot_XScale, g_Plot_YScale; extern int g_Plot_DefaultPenWidth, g_Plot_CurrentPenWidth; extern int g_Plot_PlotOrientOptions, g_Plot_PenState; /*******************************/ /* common_plot_functions.cpp */ /*******************************/ void SetPlotScale( double aXScale, double aYScale ); // Set the plot scale for the current plotting) void Setg_Plot_PlotOffset( wxPoint offset ); // Set the plot offset for the current plotting) void InitPlotParametresGERBER( wxPoint offset, double aXScale, double aYScale ); // void PlotWorkSheet( int format_plot, BASE_SCREEN* screen ); now a member of WinEDA_DrawFrame void UserToDeviceCoordinate( wxPoint& pos ); // modifie les coord pos.x et pos.y pour le trace selon l'orientation, l'echelle, les offsets de trace void UserToDeviceSize( wxSize& size ); // modifie les dimension size.x et size.y pour le trace selon l'echelle void ForcePenReinit(); // set the flag g_Plot_CurrentPenWidth to -1 in order // to force a pen width redefinition for the next draw command /*******************************/ /* common_plotPS_functions.cpp */ /*******************************/ void SetCurrentLineWidthPS( int width ); void InitPlotParametresPS( wxPoint offset, Ki_PageDescr* sheet, double aXScale, double aYScale, int orient = 0 ); void SetDefaultLineWidthPS( int width ); void PlotRectPS( wxPoint p1, wxPoint p2, bool fill, int width = -1 ); void PlotCirclePS( wxPoint pos, int diametre, bool fill, int width = -1 ); void PlotArcPS( wxPoint centre, int StAngle, int EndAngle, int rayon, bool fill, int width = -1 ); // Plot an arc: StAngle, EndAngle = start and end arc in 0.1 degree void PlotPolyPS( int nb_segm, int* coord, bool fill, int width = -1 ); void PlotFilledSegmentPS( wxPoint start, wxPoint end, int width ); void LineTo_PS( wxPoint pos, int plume ); void PrintHeaderPS( FILE* file, const wxString& Creator, const wxString& FileName, int PageCount, int BBox[4], int PaperOrientation ); bool CloseFilePS( FILE* plot_file ); void SetColorMapPS( int color ); /*********************************/ /* common_plotHPGL_functions.cpp */ /*********************************/ void InitPlotParametresHPGL( wxPoint offset, double aXScale, double aYScale, int orient = 0 ); bool PrintHeaderHPGL( FILE* plot_file, int pen_speed, int pen_num ); bool CloseFileHPGL( FILE* plot_file ); void PlotCircleHPGL( wxPoint centre, int diameter, bool fill, int width = -1 ); void PlotRectHPGL( wxPoint t1, wxPoint t2, bool fill, int width = -1 ); void PlotArcHPGL( wxPoint centre, int StAngle, int EndAngle, int rayon, bool fill, int width = -1 ); void PlotPolyHPGL( int nb, int* coord, bool fill, int width = -1 ); void Move_Plume_HPGL( wxPoint pos, int plume ); void Plume_HPGL( int plume ); /*********************************/ /* common_plotGERBER_functions.cpp */ /*********************************/ /** Function InitPlotParametresGERBER * Set the plot offset for the current plotting * @param aOffset = plot offset * @param aXScale,aYScale = coordinate scale (scale coefficient for coordinates) */ void InitPlotParametresGERBER( wxPoint aOffset, double aXScale, double aYScale ); /** Function Write_Header_GERBER * Write GERBER header to file * initialize global variable g_Plot_PlotOutputFile * @param aTitle: the name of creator (comment) * @param aFile: an opened file to write to */ void Write_Header_GERBER( const wxString aTitle, FILE* aFile ); /** Function LineTo_GERBER * if aCommand = 'U' initialise the starting point of a line * if aCommand = 'D' draw a line from the starting point, or last point to aPos * @param aPos = end of the current line. * @param aCommand = 'U' or 'D' or 'Z' (Pen up , no moving ) */ void LineTo_GERBER( wxPoint aPos, int aCommand ); /** Function PlotGERBERLine * Plot a line * @param aStartPos = starting point of the line * @param aEndPos = ending point of the line * @param aThickness = line thickness */ void PlotGERBERLine( wxPoint aStartPos, wxPoint aEndPos, int aThickness ); /** Function PlotCircle_GERBER * writes a non filled circle to output file * Plot one circle as segments (6 to 16 depending on its radius * @param aCentre = centre coordintes * @param aRadius = radius of the circle * @param aWidth = line width (noc currently used, D_CODEs must be selected before) */ void PlotCircle_GERBER( wxPoint aCentre, int aRadius, int aWidth ); /** Function PlotPolygon_GERBER * writes a closed polyline (not a filled polygon) to output file * @param aCornersCount = numer of corners * @param aCoord = buffer of corners coordinates * @param aWidth = line width (noc currently used, D_CODEs must be selected before) */ void PlotPolygon_GERBER( int aCornersCount, int* aCoord, int aWidth ); /** Function PlotFilledPolygon_GERBER * writes a filled polyline to output file * @param aCornersCount = numer of corners * @param aCoord = buffer of corners coordinates */ void PlotFilledPolygon_GERBER( int aCornersCount, int* aCoord ); #endif /* __INCLUDE__PLOT_COMMON_H__ */