Loading bitmap2component/bitmap2component.cpp +101 −71 Original line number Diff line number Diff line Loading @@ -71,20 +71,53 @@ static void bm_free( potrace_bitmap_t* bm ) } /* Helper class th handle useful info to convert a bitmpa to /* Helper class to handle useful info to convert a bitmap image to * a polygonal object description */ class BITMAPCONV_INFO { public: enum output_format m_Format; enum output_format m_Format; // File format int m_PixmapWidth; int m_PixmapHeight; // the bitmap size in pixels double m_ScaleX; double m_ScaleY; // the conversion scale potrace_path_t* m_Paths; // the list of paths, from potrace (list of lines and bezier curves) FILE* m_Outfile; public: BITMAPCONV_INFO(); FILE* m_Outfile; // File to create const char * m_CmpName; // The string used as cmp/footprint name public: BITMAPCONV_INFO(); /** * Function CreateOutputFile * Creates the output file specified by m_Outfile, * depending on file format given by m_Format */ void CreateOutputFile(); private: /** * Function OuputFileHeader * write to file the header depending on file format */ void OuputFileHeader(); /** * Function OuputFileEnd * write to file the last strings depending on file format */ void OuputFileEnd(); /** * Function OuputOnePolygon * write one polygon to output file. * Polygon coordinates are expected scaled by the polugon extraction function */ void OuputOnePolygon( KPolygon & aPolygon ); }; static void BezierToPolyline( std::vector <potrace_dpoint_t>& aCornersBuffer, Loading @@ -93,10 +126,6 @@ static void BezierToPolyline( std::vector <potrace_dpoint_t>& aCornersBuffer, potrace_dpoint_t p3, potrace_dpoint_t p4 ); static void CreateOutputFile( BITMAPCONV_INFO& aInfo ); static const char* CmpName = "LOGO"; BITMAPCONV_INFO::BITMAPCONV_INFO() { Loading @@ -107,6 +136,7 @@ BITMAPCONV_INFO::BITMAPCONV_INFO() m_ScaleY = 1.0; m_Paths = NULL; m_Outfile = NULL; m_CmpName = "LOGO"; } Loading @@ -116,7 +146,7 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, int aFo potrace_state_t* st; /* set tracing parameters, starting from defaults */ // set tracing parameters, starting from defaults param = potrace_param_default(); if( !param ) { Loading Loading @@ -144,22 +174,22 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, int aFo case 2: info.m_Format = POSTSCRIPT_FMT; info.m_ScaleX = info.m_ScaleY = 1.0; // the conversion scale /* output vector data, e.g. as a rudimentary EPS file */ CreateOutputFile( info ); // output vector data, e.g. as a rudimentary EPS file (mainly for tests) info.CreateOutputFile(); break; case 1: info.m_Format = EESCHEMA_FMT; info.m_ScaleX = 1000.0 / 300; // the conversion scale info.m_ScaleY = -info.m_ScaleX; // Y axis is bottom to Top for components in libs CreateOutputFile( info ); info.CreateOutputFile(); break; case 0: info.m_Format = PCBNEW_FMT; info.m_ScaleX = 10000.0 / 300; // the conversion scale info.m_ScaleY = info.m_ScaleX; // Y axis is top to bottom in modedit CreateOutputFile( info ); info.CreateOutputFile(); break; default: Loading @@ -175,75 +205,75 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, int aFo } static void OuputHeader( BITMAPCONV_INFO& aInfo ) void BITMAPCONV_INFO::OuputFileHeader() { int Ypos = (int) ( aInfo.m_PixmapHeight / 2 * aInfo.m_ScaleY ); int Ypos = (int) ( m_PixmapHeight / 2 * m_ScaleY ); int fieldSize; // fields text size = 60 mils switch( aInfo.m_Format ) switch( m_Format ) { case POSTSCRIPT_FMT: /* output vector data, e.g. as a rudimentary EPS file */ fprintf( aInfo.m_Outfile, "%%!PS-Adobe-3.0 EPSF-3.0\n" ); fprintf( aInfo.m_Outfile, "%%%%BoundingBox: 0 0 %d %d\n", aInfo.m_PixmapWidth, aInfo.m_PixmapHeight ); fprintf( aInfo.m_Outfile, "gsave\n" ); fprintf( m_Outfile, "%%!PS-Adobe-3.0 EPSF-3.0\n" ); fprintf( m_Outfile, "%%%%BoundingBox: 0 0 %d %d\n", m_PixmapWidth, m_PixmapHeight ); fprintf( m_Outfile, "gsave\n" ); break; case PCBNEW_FMT: #define FIELD_LAYER 21 fieldSize = 600; // fields text size = 60 mils Ypos += fieldSize / 2; fprintf( aInfo.m_Outfile, "PCBNEW-LibModule-V1\n" ); fprintf( aInfo.m_Outfile, "$INDEX\n%s\n$EndINDEX\n", CmpName ); fprintf( aInfo.m_Outfile, "#\n# %s\n", CmpName ); fprintf( aInfo.m_Outfile, "# pixmap w = %d, h = %d\n#\n", aInfo.m_PixmapWidth, aInfo.m_PixmapHeight ); fprintf( aInfo.m_Outfile, "$MODULE %s\n", CmpName ); fprintf( aInfo.m_Outfile, "Po 0 0 0 15 00000000 00000000 ~~\n" ); fprintf( aInfo.m_Outfile, "Li %s\n", CmpName ); fprintf( aInfo.m_Outfile, "T0 0 %d %d %d 0 %d N I %d \"G***\"\n", fprintf( m_Outfile, "PCBNEW-LibModule-V1\n" ); fprintf( m_Outfile, "$INDEX\n%s\n$EndINDEX\n", m_CmpName ); fprintf( m_Outfile, "#\n# %s\n", m_CmpName ); fprintf( m_Outfile, "# pixmap w = %d, h = %d\n#\n", m_PixmapWidth, m_PixmapHeight ); fprintf( m_Outfile, "$MODULE %s\n", m_CmpName ); fprintf( m_Outfile, "Po 0 0 0 15 00000000 00000000 ~~\n" ); fprintf( m_Outfile, "Li %s\n", m_CmpName ); fprintf( m_Outfile, "T0 0 %d %d %d 0 %d N I %d \"G***\"\n", Ypos, fieldSize, fieldSize, fieldSize / 5, FIELD_LAYER ); fprintf( aInfo.m_Outfile, "T1 0 %d %d %d 0 %d N I %d \"%s\"\n", -Ypos, fieldSize, fieldSize, fieldSize / 5, FIELD_LAYER, CmpName ); fprintf( m_Outfile, "T1 0 %d %d %d 0 %d N I %d \"%s\"\n", -Ypos, fieldSize, fieldSize, fieldSize / 5, FIELD_LAYER, m_CmpName ); break; case EESCHEMA_FMT: fprintf( aInfo.m_Outfile, "EESchema-LIBRARY Version 2.3\n" ); fprintf( aInfo.m_Outfile, "#\n# %s\n", CmpName ); fprintf( aInfo.m_Outfile, "# pixmap size w = %d, h = %d\n#\n", aInfo.m_PixmapWidth, aInfo.m_PixmapHeight ); fprintf( m_Outfile, "EESchema-LIBRARY Version 2.3\n" ); fprintf( m_Outfile, "#\n# %s\n", m_CmpName ); fprintf( m_Outfile, "# pixmap size w = %d, h = %d\n#\n", m_PixmapWidth, m_PixmapHeight ); // print reference and value fieldSize = 60; // fields text size = 60 mils Ypos += fieldSize / 2; fprintf( aInfo.m_Outfile, "DEF %s G 0 40 Y Y 1 F N\n", CmpName ); fprintf( aInfo.m_Outfile, "F0 \"#G\" 0 %d %d H I C CNN\n", Ypos, fieldSize ); fprintf( aInfo.m_Outfile, "F1 \"%s\" 0 %d %d H I C CNN\n", CmpName, -Ypos, fieldSize ); fprintf( aInfo.m_Outfile, "DRAW\n" ); fprintf( m_Outfile, "DEF %s G 0 40 Y Y 1 F N\n", m_CmpName ); fprintf( m_Outfile, "F0 \"#G\" 0 %d %d H I C CNN\n", Ypos, fieldSize ); fprintf( m_Outfile, "F1 \"%s\" 0 %d %d H I C CNN\n", m_CmpName, -Ypos, fieldSize ); fprintf( m_Outfile, "DRAW\n" ); break; } } static void OuputEnd( BITMAPCONV_INFO& aInfo ) void BITMAPCONV_INFO::OuputFileEnd() { switch( aInfo.m_Format ) switch( m_Format ) { case POSTSCRIPT_FMT: fprintf( aInfo.m_Outfile, "grestore\n" ); fprintf( aInfo.m_Outfile, "%%EOF\n" ); fprintf( m_Outfile, "grestore\n" ); fprintf( m_Outfile, "%%EOF\n" ); break; case PCBNEW_FMT: fprintf( aInfo.m_Outfile, "$EndMODULE %s\n", CmpName ); fprintf( aInfo.m_Outfile, "$EndLIBRARY\n" ); fprintf( m_Outfile, "$EndMODULE %s\n", m_CmpName ); fprintf( m_Outfile, "$EndLIBRARY\n" ); break; case EESCHEMA_FMT: fprintf( aInfo.m_Outfile, "ENDDRAW\n" ); fprintf( aInfo.m_Outfile, "ENDDEF\n" ); fprintf( m_Outfile, "ENDDRAW\n" ); fprintf( m_Outfile, "ENDDEF\n" ); break; } } Loading @@ -253,29 +283,29 @@ static void OuputEnd( BITMAPCONV_INFO& aInfo ) * write one polygon to output file. * Polygon coordinates are expected scaled by the polugon extraction function */ static void OuputOnePolygon( BITMAPCONV_INFO& aInfo, KPolygon & aPolygon ) void BITMAPCONV_INFO::OuputOnePolygon( KPolygon & aPolygon ) { unsigned ii; KPolyPoint currpoint; int offsetX = (int)( aInfo.m_PixmapWidth / 2 * aInfo.m_ScaleX ); int offsetY = (int)( aInfo.m_PixmapHeight / 2 * aInfo.m_ScaleY ); int offsetX = (int)( m_PixmapWidth / 2 * m_ScaleX ); int offsetY = (int)( m_PixmapHeight / 2 * m_ScaleY ); KPolyPoint startpoint = *aPolygon.begin(); switch( aInfo.m_Format ) switch( m_Format ) { case POSTSCRIPT_FMT: fprintf( aInfo.m_Outfile, "%d %d moveto\n", fprintf( m_Outfile, "%d %d moveto\n", startpoint.x(), startpoint.y() ); for( ii = 1; ii < aPolygon.size(); ii++ ) { currpoint = *(aPolygon.begin() + ii); fprintf( aInfo.m_Outfile, "%d %d lineto\n", fprintf( m_Outfile, "%d %d lineto\n", currpoint.x(), currpoint.y() ); } fprintf( aInfo.m_Outfile, "0 setgray fill\n" ); fprintf( m_Outfile, "0 setgray fill\n" ); break; case PCBNEW_FMT: Loading @@ -283,43 +313,43 @@ static void OuputOnePolygon( BITMAPCONV_INFO& aInfo, KPolygon & aPolygon ) #define SILKSCREEN_N_FRONT 21 int layer = SILKSCREEN_N_FRONT; int width = 1; fprintf( aInfo.m_Outfile, "DP %d %d %d %d %d %d %d\n", fprintf( m_Outfile, "DP %d %d %d %d %d %d %d\n", 0, 0, 0, 0, aPolygon.size() + 1, width, layer ); for( ii = 0; ii < aPolygon.size(); ii++ ) { currpoint = *( aPolygon.begin() + ii ); fprintf( aInfo.m_Outfile, "Dl %d %d\n", fprintf( m_Outfile, "Dl %d %d\n", currpoint.x() - offsetX, currpoint.y() - offsetY ); } // Close polygon fprintf( aInfo.m_Outfile, "Dl %d %d\n", fprintf( m_Outfile, "Dl %d %d\n", startpoint.x() - offsetX, startpoint.y() - offsetY ); } break; case EESCHEMA_FMT: fprintf( aInfo.m_Outfile, "P %d 0 0 1", aPolygon.size() + 1 ); fprintf( m_Outfile, "P %d 0 0 1", aPolygon.size() + 1 ); for( ii = 0; ii < aPolygon.size(); ii++ ) { currpoint = *(aPolygon.begin() + ii); fprintf( aInfo.m_Outfile, " %d %d", fprintf( m_Outfile, " %d %d", currpoint.x() - offsetX, currpoint.y() - offsetY ); } // Close polygon fprintf( aInfo.m_Outfile, " %d %d", fprintf( m_Outfile, " %d %d", startpoint.x() - offsetX, startpoint.y() - offsetY ); fprintf( aInfo.m_Outfile, " F\n" ); fprintf( m_Outfile, " F\n" ); break; } } static void CreateOutputFile( BITMAPCONV_INFO& aInfo ) void BITMAPCONV_INFO::CreateOutputFile() { KPolyPoint currpoint; Loading @@ -333,14 +363,14 @@ static void CreateOutputFile( BITMAPCONV_INFO& aInfo ) KPolygonSet polyset_holes; potrace_dpoint_t( *c )[3]; OuputHeader( aInfo ); OuputFileHeader(); bool main_outline = true; /* draw each as a polygon with no hole. * Bezier curves are approximated by a polyline */ potrace_path_t* paths = aInfo.m_Paths; // the list of paths potrace_path_t* paths = m_Paths; // the list of paths while( paths != NULL ) { int cnt = paths->curve.n; Loading Loading @@ -373,8 +403,8 @@ static void CreateOutputFile( BITMAPCONV_INFO& aInfo ) std::vector<KPolyPoint> cornerslist; // a simple boost polygon for( unsigned int i = 0; i < cornersBuffer.size(); i++ ) { currpoint.x( (coordinate_type) (cornersBuffer[i].x * aInfo.m_ScaleX) ); currpoint.y( (coordinate_type) (cornersBuffer[i].y * aInfo.m_ScaleY) ); currpoint.x( (coordinate_type) (cornersBuffer[i].x * m_ScaleX) ); currpoint.y( (coordinate_type) (cornersBuffer[i].y * m_ScaleY) ); cornerslist.push_back( currpoint ); } Loading @@ -388,8 +418,8 @@ static void CreateOutputFile( BITMAPCONV_INFO& aInfo ) std::vector<KPolyPoint> cornerslist; // a simple boost polygon for( unsigned int i = 0; i < cornersBuffer.size(); i++ ) { currpoint.x( (coordinate_type) (cornersBuffer[i].x * aInfo.m_ScaleX) ); currpoint.y( (coordinate_type) (cornersBuffer[i].y * aInfo.m_ScaleY) ); currpoint.x( (coordinate_type) (cornersBuffer[i].x * m_ScaleX) ); currpoint.y( (coordinate_type) (cornersBuffer[i].y * m_ScaleY) ); cornerslist.push_back( currpoint ); } Loading @@ -410,7 +440,7 @@ static void CreateOutputFile( BITMAPCONV_INFO& aInfo ) for( unsigned ii = 0; ii < polyset_areas.size(); ii++ ) { KPolygon& poly = polyset_areas[ii]; OuputOnePolygon( aInfo, poly ); OuputOnePolygon(poly ); } polyset_areas.clear(); Loading @@ -420,7 +450,7 @@ static void CreateOutputFile( BITMAPCONV_INFO& aInfo ) paths = paths->next; } OuputEnd( aInfo ); OuputFileEnd(); } Loading Loading
bitmap2component/bitmap2component.cpp +101 −71 Original line number Diff line number Diff line Loading @@ -71,20 +71,53 @@ static void bm_free( potrace_bitmap_t* bm ) } /* Helper class th handle useful info to convert a bitmpa to /* Helper class to handle useful info to convert a bitmap image to * a polygonal object description */ class BITMAPCONV_INFO { public: enum output_format m_Format; enum output_format m_Format; // File format int m_PixmapWidth; int m_PixmapHeight; // the bitmap size in pixels double m_ScaleX; double m_ScaleY; // the conversion scale potrace_path_t* m_Paths; // the list of paths, from potrace (list of lines and bezier curves) FILE* m_Outfile; public: BITMAPCONV_INFO(); FILE* m_Outfile; // File to create const char * m_CmpName; // The string used as cmp/footprint name public: BITMAPCONV_INFO(); /** * Function CreateOutputFile * Creates the output file specified by m_Outfile, * depending on file format given by m_Format */ void CreateOutputFile(); private: /** * Function OuputFileHeader * write to file the header depending on file format */ void OuputFileHeader(); /** * Function OuputFileEnd * write to file the last strings depending on file format */ void OuputFileEnd(); /** * Function OuputOnePolygon * write one polygon to output file. * Polygon coordinates are expected scaled by the polugon extraction function */ void OuputOnePolygon( KPolygon & aPolygon ); }; static void BezierToPolyline( std::vector <potrace_dpoint_t>& aCornersBuffer, Loading @@ -93,10 +126,6 @@ static void BezierToPolyline( std::vector <potrace_dpoint_t>& aCornersBuffer, potrace_dpoint_t p3, potrace_dpoint_t p4 ); static void CreateOutputFile( BITMAPCONV_INFO& aInfo ); static const char* CmpName = "LOGO"; BITMAPCONV_INFO::BITMAPCONV_INFO() { Loading @@ -107,6 +136,7 @@ BITMAPCONV_INFO::BITMAPCONV_INFO() m_ScaleY = 1.0; m_Paths = NULL; m_Outfile = NULL; m_CmpName = "LOGO"; } Loading @@ -116,7 +146,7 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, int aFo potrace_state_t* st; /* set tracing parameters, starting from defaults */ // set tracing parameters, starting from defaults param = potrace_param_default(); if( !param ) { Loading Loading @@ -144,22 +174,22 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, int aFo case 2: info.m_Format = POSTSCRIPT_FMT; info.m_ScaleX = info.m_ScaleY = 1.0; // the conversion scale /* output vector data, e.g. as a rudimentary EPS file */ CreateOutputFile( info ); // output vector data, e.g. as a rudimentary EPS file (mainly for tests) info.CreateOutputFile(); break; case 1: info.m_Format = EESCHEMA_FMT; info.m_ScaleX = 1000.0 / 300; // the conversion scale info.m_ScaleY = -info.m_ScaleX; // Y axis is bottom to Top for components in libs CreateOutputFile( info ); info.CreateOutputFile(); break; case 0: info.m_Format = PCBNEW_FMT; info.m_ScaleX = 10000.0 / 300; // the conversion scale info.m_ScaleY = info.m_ScaleX; // Y axis is top to bottom in modedit CreateOutputFile( info ); info.CreateOutputFile(); break; default: Loading @@ -175,75 +205,75 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, int aFo } static void OuputHeader( BITMAPCONV_INFO& aInfo ) void BITMAPCONV_INFO::OuputFileHeader() { int Ypos = (int) ( aInfo.m_PixmapHeight / 2 * aInfo.m_ScaleY ); int Ypos = (int) ( m_PixmapHeight / 2 * m_ScaleY ); int fieldSize; // fields text size = 60 mils switch( aInfo.m_Format ) switch( m_Format ) { case POSTSCRIPT_FMT: /* output vector data, e.g. as a rudimentary EPS file */ fprintf( aInfo.m_Outfile, "%%!PS-Adobe-3.0 EPSF-3.0\n" ); fprintf( aInfo.m_Outfile, "%%%%BoundingBox: 0 0 %d %d\n", aInfo.m_PixmapWidth, aInfo.m_PixmapHeight ); fprintf( aInfo.m_Outfile, "gsave\n" ); fprintf( m_Outfile, "%%!PS-Adobe-3.0 EPSF-3.0\n" ); fprintf( m_Outfile, "%%%%BoundingBox: 0 0 %d %d\n", m_PixmapWidth, m_PixmapHeight ); fprintf( m_Outfile, "gsave\n" ); break; case PCBNEW_FMT: #define FIELD_LAYER 21 fieldSize = 600; // fields text size = 60 mils Ypos += fieldSize / 2; fprintf( aInfo.m_Outfile, "PCBNEW-LibModule-V1\n" ); fprintf( aInfo.m_Outfile, "$INDEX\n%s\n$EndINDEX\n", CmpName ); fprintf( aInfo.m_Outfile, "#\n# %s\n", CmpName ); fprintf( aInfo.m_Outfile, "# pixmap w = %d, h = %d\n#\n", aInfo.m_PixmapWidth, aInfo.m_PixmapHeight ); fprintf( aInfo.m_Outfile, "$MODULE %s\n", CmpName ); fprintf( aInfo.m_Outfile, "Po 0 0 0 15 00000000 00000000 ~~\n" ); fprintf( aInfo.m_Outfile, "Li %s\n", CmpName ); fprintf( aInfo.m_Outfile, "T0 0 %d %d %d 0 %d N I %d \"G***\"\n", fprintf( m_Outfile, "PCBNEW-LibModule-V1\n" ); fprintf( m_Outfile, "$INDEX\n%s\n$EndINDEX\n", m_CmpName ); fprintf( m_Outfile, "#\n# %s\n", m_CmpName ); fprintf( m_Outfile, "# pixmap w = %d, h = %d\n#\n", m_PixmapWidth, m_PixmapHeight ); fprintf( m_Outfile, "$MODULE %s\n", m_CmpName ); fprintf( m_Outfile, "Po 0 0 0 15 00000000 00000000 ~~\n" ); fprintf( m_Outfile, "Li %s\n", m_CmpName ); fprintf( m_Outfile, "T0 0 %d %d %d 0 %d N I %d \"G***\"\n", Ypos, fieldSize, fieldSize, fieldSize / 5, FIELD_LAYER ); fprintf( aInfo.m_Outfile, "T1 0 %d %d %d 0 %d N I %d \"%s\"\n", -Ypos, fieldSize, fieldSize, fieldSize / 5, FIELD_LAYER, CmpName ); fprintf( m_Outfile, "T1 0 %d %d %d 0 %d N I %d \"%s\"\n", -Ypos, fieldSize, fieldSize, fieldSize / 5, FIELD_LAYER, m_CmpName ); break; case EESCHEMA_FMT: fprintf( aInfo.m_Outfile, "EESchema-LIBRARY Version 2.3\n" ); fprintf( aInfo.m_Outfile, "#\n# %s\n", CmpName ); fprintf( aInfo.m_Outfile, "# pixmap size w = %d, h = %d\n#\n", aInfo.m_PixmapWidth, aInfo.m_PixmapHeight ); fprintf( m_Outfile, "EESchema-LIBRARY Version 2.3\n" ); fprintf( m_Outfile, "#\n# %s\n", m_CmpName ); fprintf( m_Outfile, "# pixmap size w = %d, h = %d\n#\n", m_PixmapWidth, m_PixmapHeight ); // print reference and value fieldSize = 60; // fields text size = 60 mils Ypos += fieldSize / 2; fprintf( aInfo.m_Outfile, "DEF %s G 0 40 Y Y 1 F N\n", CmpName ); fprintf( aInfo.m_Outfile, "F0 \"#G\" 0 %d %d H I C CNN\n", Ypos, fieldSize ); fprintf( aInfo.m_Outfile, "F1 \"%s\" 0 %d %d H I C CNN\n", CmpName, -Ypos, fieldSize ); fprintf( aInfo.m_Outfile, "DRAW\n" ); fprintf( m_Outfile, "DEF %s G 0 40 Y Y 1 F N\n", m_CmpName ); fprintf( m_Outfile, "F0 \"#G\" 0 %d %d H I C CNN\n", Ypos, fieldSize ); fprintf( m_Outfile, "F1 \"%s\" 0 %d %d H I C CNN\n", m_CmpName, -Ypos, fieldSize ); fprintf( m_Outfile, "DRAW\n" ); break; } } static void OuputEnd( BITMAPCONV_INFO& aInfo ) void BITMAPCONV_INFO::OuputFileEnd() { switch( aInfo.m_Format ) switch( m_Format ) { case POSTSCRIPT_FMT: fprintf( aInfo.m_Outfile, "grestore\n" ); fprintf( aInfo.m_Outfile, "%%EOF\n" ); fprintf( m_Outfile, "grestore\n" ); fprintf( m_Outfile, "%%EOF\n" ); break; case PCBNEW_FMT: fprintf( aInfo.m_Outfile, "$EndMODULE %s\n", CmpName ); fprintf( aInfo.m_Outfile, "$EndLIBRARY\n" ); fprintf( m_Outfile, "$EndMODULE %s\n", m_CmpName ); fprintf( m_Outfile, "$EndLIBRARY\n" ); break; case EESCHEMA_FMT: fprintf( aInfo.m_Outfile, "ENDDRAW\n" ); fprintf( aInfo.m_Outfile, "ENDDEF\n" ); fprintf( m_Outfile, "ENDDRAW\n" ); fprintf( m_Outfile, "ENDDEF\n" ); break; } } Loading @@ -253,29 +283,29 @@ static void OuputEnd( BITMAPCONV_INFO& aInfo ) * write one polygon to output file. * Polygon coordinates are expected scaled by the polugon extraction function */ static void OuputOnePolygon( BITMAPCONV_INFO& aInfo, KPolygon & aPolygon ) void BITMAPCONV_INFO::OuputOnePolygon( KPolygon & aPolygon ) { unsigned ii; KPolyPoint currpoint; int offsetX = (int)( aInfo.m_PixmapWidth / 2 * aInfo.m_ScaleX ); int offsetY = (int)( aInfo.m_PixmapHeight / 2 * aInfo.m_ScaleY ); int offsetX = (int)( m_PixmapWidth / 2 * m_ScaleX ); int offsetY = (int)( m_PixmapHeight / 2 * m_ScaleY ); KPolyPoint startpoint = *aPolygon.begin(); switch( aInfo.m_Format ) switch( m_Format ) { case POSTSCRIPT_FMT: fprintf( aInfo.m_Outfile, "%d %d moveto\n", fprintf( m_Outfile, "%d %d moveto\n", startpoint.x(), startpoint.y() ); for( ii = 1; ii < aPolygon.size(); ii++ ) { currpoint = *(aPolygon.begin() + ii); fprintf( aInfo.m_Outfile, "%d %d lineto\n", fprintf( m_Outfile, "%d %d lineto\n", currpoint.x(), currpoint.y() ); } fprintf( aInfo.m_Outfile, "0 setgray fill\n" ); fprintf( m_Outfile, "0 setgray fill\n" ); break; case PCBNEW_FMT: Loading @@ -283,43 +313,43 @@ static void OuputOnePolygon( BITMAPCONV_INFO& aInfo, KPolygon & aPolygon ) #define SILKSCREEN_N_FRONT 21 int layer = SILKSCREEN_N_FRONT; int width = 1; fprintf( aInfo.m_Outfile, "DP %d %d %d %d %d %d %d\n", fprintf( m_Outfile, "DP %d %d %d %d %d %d %d\n", 0, 0, 0, 0, aPolygon.size() + 1, width, layer ); for( ii = 0; ii < aPolygon.size(); ii++ ) { currpoint = *( aPolygon.begin() + ii ); fprintf( aInfo.m_Outfile, "Dl %d %d\n", fprintf( m_Outfile, "Dl %d %d\n", currpoint.x() - offsetX, currpoint.y() - offsetY ); } // Close polygon fprintf( aInfo.m_Outfile, "Dl %d %d\n", fprintf( m_Outfile, "Dl %d %d\n", startpoint.x() - offsetX, startpoint.y() - offsetY ); } break; case EESCHEMA_FMT: fprintf( aInfo.m_Outfile, "P %d 0 0 1", aPolygon.size() + 1 ); fprintf( m_Outfile, "P %d 0 0 1", aPolygon.size() + 1 ); for( ii = 0; ii < aPolygon.size(); ii++ ) { currpoint = *(aPolygon.begin() + ii); fprintf( aInfo.m_Outfile, " %d %d", fprintf( m_Outfile, " %d %d", currpoint.x() - offsetX, currpoint.y() - offsetY ); } // Close polygon fprintf( aInfo.m_Outfile, " %d %d", fprintf( m_Outfile, " %d %d", startpoint.x() - offsetX, startpoint.y() - offsetY ); fprintf( aInfo.m_Outfile, " F\n" ); fprintf( m_Outfile, " F\n" ); break; } } static void CreateOutputFile( BITMAPCONV_INFO& aInfo ) void BITMAPCONV_INFO::CreateOutputFile() { KPolyPoint currpoint; Loading @@ -333,14 +363,14 @@ static void CreateOutputFile( BITMAPCONV_INFO& aInfo ) KPolygonSet polyset_holes; potrace_dpoint_t( *c )[3]; OuputHeader( aInfo ); OuputFileHeader(); bool main_outline = true; /* draw each as a polygon with no hole. * Bezier curves are approximated by a polyline */ potrace_path_t* paths = aInfo.m_Paths; // the list of paths potrace_path_t* paths = m_Paths; // the list of paths while( paths != NULL ) { int cnt = paths->curve.n; Loading Loading @@ -373,8 +403,8 @@ static void CreateOutputFile( BITMAPCONV_INFO& aInfo ) std::vector<KPolyPoint> cornerslist; // a simple boost polygon for( unsigned int i = 0; i < cornersBuffer.size(); i++ ) { currpoint.x( (coordinate_type) (cornersBuffer[i].x * aInfo.m_ScaleX) ); currpoint.y( (coordinate_type) (cornersBuffer[i].y * aInfo.m_ScaleY) ); currpoint.x( (coordinate_type) (cornersBuffer[i].x * m_ScaleX) ); currpoint.y( (coordinate_type) (cornersBuffer[i].y * m_ScaleY) ); cornerslist.push_back( currpoint ); } Loading @@ -388,8 +418,8 @@ static void CreateOutputFile( BITMAPCONV_INFO& aInfo ) std::vector<KPolyPoint> cornerslist; // a simple boost polygon for( unsigned int i = 0; i < cornersBuffer.size(); i++ ) { currpoint.x( (coordinate_type) (cornersBuffer[i].x * aInfo.m_ScaleX) ); currpoint.y( (coordinate_type) (cornersBuffer[i].y * aInfo.m_ScaleY) ); currpoint.x( (coordinate_type) (cornersBuffer[i].x * m_ScaleX) ); currpoint.y( (coordinate_type) (cornersBuffer[i].y * m_ScaleY) ); cornerslist.push_back( currpoint ); } Loading @@ -410,7 +440,7 @@ static void CreateOutputFile( BITMAPCONV_INFO& aInfo ) for( unsigned ii = 0; ii < polyset_areas.size(); ii++ ) { KPolygon& poly = polyset_areas[ii]; OuputOnePolygon( aInfo, poly ); OuputOnePolygon(poly ); } polyset_areas.clear(); Loading @@ -420,7 +450,7 @@ static void CreateOutputFile( BITMAPCONV_INFO& aInfo ) paths = paths->next; } OuputEnd( aInfo ); OuputFileEnd(); } Loading