Lorenzo's postscript fill patch for bugs 2003834 and 1956732
This commit is contained in:
parent
0cdcd78ba0
commit
44071acf07
|
@ -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:
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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' );
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 );
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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_PAIR> 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:
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue