bitmap2component: better user interface (using wxWidgets) and more bitmaps file format import

This commit is contained in:
jean-pierre charras 2010-06-15 20:27:41 +02:00
parent 6e859e2671
commit 5ecb22b51d
2 changed files with 32 additions and 63 deletions

View File

@ -5,12 +5,17 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}
set(BITMAP2COMPONENT_SRCS
bitmap2component.cpp
bitmap2cmp_gui_base
bitmap2cmp_gui
)
add_executable(bitmap2component WIN32 MACOSX_BUNDLE ${BITMAP2COMPONENT_SRCS} ${BITMAP2COMPONENT_RESOURCES})
target_link_libraries( bitmap2component potrace kbool )
target_link_libraries( bitmap2component
${wxWidgets_LIBRARIES}
potrace
kbool )
install(TARGETS bitmap2component
DESTINATION ${KICAD_PLUGINS}

View File

@ -32,7 +32,7 @@
#include <vector>
#include "potracelib.h"
#include "bitmap_io.h"
//#include "bitmap_io.h"
#include "auxiliary.h"
@ -49,6 +49,13 @@ enum output_format {
PCBNEW_FMT,
EESCHEMA_FMT
};
/* free a potrace bitmap */
static void bm_free(potrace_bitmap_t *bm) {
if (bm != NULL) {
free(bm->map);
}
free(bm);
}
/* Helper class th handle useful info to convert a bitmpa to
@ -185,54 +192,12 @@ void ArmBoolEng( Bool_Engine* aBooleng, bool aConvertHoles )
}
int main( int argc, char* argv[] )
int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE * aOutfile, int aFormat )
{
potrace_bitmap_t* potrace_bitmap = NULL;
potrace_param_t* param;
potrace_state_t* st;
int error;
int fmt_option = '0';
FILE* infile, * outfile = NULL;
if( argc < 4 )
{
printf( "Usage:\nbitmap2component <infile_bitmap.ext> <outfile.ext> <0,1,2>\n" );
printf( " Allowed bitmap files formats are .bmp or .pgm\n" );
printf( "output format:\n 0 = pcbnew.emp, 1 = eeschema.lib, 2 = ps\n" );
return -1;
}
infile = fopen( argv[1], "r" );
if( infile == NULL )
{
printf( "File %s could not be opened\n", argv[1] );
return -2;
}
outfile = fopen( argv[2], "w" );
if( outfile == NULL )
{
printf( "File %s could not be opened\n", argv[2] );
return -2;
}
double threshold = 0.5; // = 0 to 1.0
error = bm_read( infile, threshold, &potrace_bitmap );
if( error != 0 )
{
printf( "Bitmap %s could not be read\n", argv[1] );
return -2;
}
if( !potrace_bitmap )
{
fprintf( stderr, "Error allocating bitmap: %s\n", strerror( errno ) );
return 1;
}
/* set tracing parameters, starting from defaults */
param = potrace_param_default();
if( !param )
@ -243,7 +208,7 @@ int main( int argc, char* argv[] )
param->turdsize = 0;
/* convert the bitmap to curves */
st = potrace_trace( param, potrace_bitmap );
st = potrace_trace( param, aPotrace_bitmap );
if( !st || st->status != POTRACE_STATUS_OK )
{
fprintf( stderr, "Error tracing bitmap: %s\n", strerror( errno ) );
@ -251,41 +216,40 @@ int main( int argc, char* argv[] )
}
BITMAPCONV_INFO info;
info.m_PixmapWidth = potrace_bitmap->w;
info.m_PixmapHeight = potrace_bitmap->h; // the bitmap size in pixels
info.m_PixmapWidth = aPotrace_bitmap->w;
info.m_PixmapHeight = aPotrace_bitmap->h; // the bitmap size in pixels
info.m_Paths = st->plist;
info.m_Outfile = outfile;
info.m_Outfile = aOutfile;
if( argc >= 4 )
fmt_option = argv[3][0];
switch( fmt_option )
switch( aFormat )
{
case '2':
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 );
break;
case '1':
case 1:
info.m_Format = EESCHEMA_FMT;
info.m_ScaleX = info.m_ScaleY = 1000.0 / 300; // the conversion scale
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 );
break;
case '0':
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
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 );
break;
default:
printf( "Unknown output format\n" );
break;
break;
}
CreateOutputFile( info );
bm_free( potrace_bitmap );
bm_free( aPotrace_bitmap );
potrace_state_free( st );
potrace_param_free( param );