Commit b0e2908c authored by jean-pierre charras's avatar jean-pierre charras

pl_editor: add a PPI (pixel per inch) setup option for bitmaps.

parent 6bb62a71
...@@ -46,11 +46,12 @@ ...@@ -46,11 +46,12 @@
BITMAP_BASE::BITMAP_BASE( const wxPoint& pos ) BITMAP_BASE::BITMAP_BASE( const wxPoint& pos )
{ {
m_Scale = 1.0; // 1.0 = original bitmap size m_Scale = 1.0; // 1.0 = original bitmap size
m_bitmap = NULL; m_bitmap = NULL;
m_image = NULL; m_image = NULL;
m_pixelScaleFactor = 3.33; // a value OK for bitmaps using 300 PPI m_ppi = 300; // the bitmap definition. the default is 300PPI
// (Eeschema uses currently 1000PPI m_pixelScaleFactor = 1000.0 / m_ppi; // a value OK for bitmaps using 300 PPI
// for Eeschema which uses currently 1000PPI
} }
...@@ -72,6 +73,7 @@ void BITMAP_BASE::ImportData( BITMAP_BASE* aItem ) ...@@ -72,6 +73,7 @@ void BITMAP_BASE::ImportData( BITMAP_BASE* aItem )
*m_image = *aItem->m_image; *m_image = *aItem->m_image;
*m_bitmap = *aItem->m_bitmap; *m_bitmap = *aItem->m_bitmap;
m_Scale = aItem->m_Scale; m_Scale = aItem->m_Scale;
m_ppi = aItem->m_ppi;
m_pixelScaleFactor = aItem->m_pixelScaleFactor; m_pixelScaleFactor = aItem->m_pixelScaleFactor;
} }
......
...@@ -540,4 +540,38 @@ void WORKSHEET_DATAITEM_TEXT::SetConstrainedTextSize() ...@@ -540,4 +540,38 @@ void WORKSHEET_DATAITEM_TEXT::SetConstrainedTextSize()
} }
} }
/* set the pixel scale factor of the bitmap
* this factor depend on the application internal unit
* and the PPI bitmap factor
* the pixel scale factor should be initialized before drawing the bitmap
*/
void WORKSHEET_DATAITEM_BITMAP::SetPixelScaleFactor()
{
if( m_ImageBitmap )
{
// m_WSunits2Iu is the page layout unit to application internal unit
// i.e. the mm to to application internal unit
// however the bitmap definition is always known in pixels per inches
double scale = m_WSunits2Iu * 25.4 / m_ImageBitmap->GetPPI();
m_ImageBitmap->SetPixelScaleFactor( scale );
}
}
/* return the PPI of the bitmap
*/
int WORKSHEET_DATAITEM_BITMAP::GetPPI() const
{
if( m_ImageBitmap )
return m_ImageBitmap->GetPPI() / m_ImageBitmap->m_Scale;
return 300;
}
/*adjust the PPI of the bitmap
*/
void WORKSHEET_DATAITEM_BITMAP::SetPPI( int aBitmapPPI )
{
if( m_ImageBitmap )
m_ImageBitmap->m_Scale = (double) m_ImageBitmap->GetPPI() / aBitmapPPI;
}
...@@ -54,6 +54,7 @@ private: ...@@ -54,6 +54,7 @@ private:
// to convert the bitmap size (in pixels) // to convert the bitmap size (in pixels)
// to internal KiCad units // to internal KiCad units
// Usually does not change // Usually does not change
int m_ppi; // the bitmap definition. the default is 300PPI
public: BITMAP_BASE( const wxPoint& pos = wxPoint( 0, 0 ) ); public: BITMAP_BASE( const wxPoint& pos = wxPoint( 0, 0 ) );
...@@ -128,7 +129,7 @@ public: BITMAP_BASE( const wxPoint& pos = wxPoint( 0, 0 ) ); ...@@ -128,7 +129,7 @@ public: BITMAP_BASE( const wxPoint& pos = wxPoint( 0, 0 ) );
*/ */
int GetPPI() const int GetPPI() const
{ {
return 300; return m_ppi;
} }
/** /**
......
...@@ -485,6 +485,17 @@ public: ...@@ -485,6 +485,17 @@ public:
*/ */
virtual bool HasEndPoint() { return false; } virtual bool HasEndPoint() { return false; }
/**
* @return the PPI of the bitmap
*/
int GetPPI() const;
/**
* adjust the PPI of the bitmap
* @param aBitmapPPI = the ned PPI for the bitmap
*/
void SetPPI( int aBitmapPPI );
/** /**
* set the pixel scale factor of the bitmap * set the pixel scale factor of the bitmap
* this factor depend on the application internal unit * this factor depend on the application internal unit
...@@ -492,17 +503,7 @@ public: ...@@ -492,17 +503,7 @@ public:
* the pixel scale factor is the pixel size to application internal unit * the pixel scale factor is the pixel size to application internal unit
* and should be initialized before printing or drawing the bitmap * and should be initialized before printing or drawing the bitmap
*/ */
void SetPixelScaleFactor() void SetPixelScaleFactor();
{
if( m_ImageBitmap )
{
// m_WSunits2Iu is the page layout unit to application internal unit
// i.e. the mm to to application internal unit
// however the bitmap definition is always known in pixels per inches
double scale = m_WSunits2Iu * 25.4 / m_ImageBitmap->GetPPI();
m_ImageBitmap->SetPixelScaleFactor( scale );
}
}
}; };
......
...@@ -317,28 +317,27 @@ PANEL_PROPERTIES_BASE::PANEL_PROPERTIES_BASE( wxWindow* parent, wxWindowID id, c ...@@ -317,28 +317,27 @@ PANEL_PROPERTIES_BASE::PANEL_PROPERTIES_BASE( wxWindow* parent, wxWindowID id, c
bSizerMain->Add( m_SizerEndPosition, 0, 0, 5 ); bSizerMain->Add( m_SizerEndPosition, 0, 0, 5 );
wxBoxSizer* bSizerLineThickness; m_SizerLineThickness = new wxBoxSizer( wxHORIZONTAL );
bSizerLineThickness = new wxBoxSizer( wxHORIZONTAL );
wxBoxSizer* bSizerthickness; wxBoxSizer* bSizerThickness;
bSizerthickness = new wxBoxSizer( wxVERTICAL ); bSizerThickness = new wxBoxSizer( wxVERTICAL );
m_staticTextThickness = new wxStaticText( m_swItemProperties, wxID_ANY, _("Thickness"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextThickness = new wxStaticText( m_swItemProperties, wxID_ANY, _("Thickness"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextThickness->Wrap( -1 ); m_staticTextThickness->Wrap( -1 );
bSizerthickness->Add( m_staticTextThickness, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); bSizerThickness->Add( m_staticTextThickness, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
m_textCtrlThickness = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); m_textCtrlThickness = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
bSizerthickness->Add( m_textCtrlThickness, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); bSizerThickness->Add( m_textCtrlThickness, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
bSizerLineThickness->Add( bSizerthickness, 0, wxEXPAND, 5 ); m_SizerLineThickness->Add( bSizerThickness, 0, wxEXPAND, 5 );
m_staticTextInfoThickness = new wxStaticText( m_swItemProperties, wxID_ANY, _("Set to 0 to use default"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticTextInfoThickness = new wxStaticText( m_swItemProperties, wxID_ANY, _("Set to 0 to use default"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextInfoThickness->Wrap( -1 ); m_staticTextInfoThickness->Wrap( -1 );
bSizerLineThickness->Add( m_staticTextInfoThickness, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); m_SizerLineThickness->Add( m_staticTextInfoThickness, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
bSizerMain->Add( bSizerLineThickness, 0, 0, 5 ); bSizerMain->Add( m_SizerLineThickness, 0, 0, 5 );
m_SizerRotation = new wxBoxSizer( wxVERTICAL ); m_SizerRotation = new wxBoxSizer( wxVERTICAL );
...@@ -361,6 +360,18 @@ PANEL_PROPERTIES_BASE::PANEL_PROPERTIES_BASE( wxWindow* parent, wxWindowID id, c ...@@ -361,6 +360,18 @@ PANEL_PROPERTIES_BASE::PANEL_PROPERTIES_BASE( wxWindow* parent, wxWindowID id, c
bSizerMain->Add( m_SizerRotation, 0, wxEXPAND, 5 ); bSizerMain->Add( m_SizerRotation, 0, wxEXPAND, 5 );
m_SizerBitmapPPI = new wxBoxSizer( wxHORIZONTAL );
m_staticTextBitmapPPI = new wxStaticText( m_swItemProperties, wxID_ANY, _("Bitmap PPI"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextBitmapPPI->Wrap( -1 );
m_SizerBitmapPPI->Add( m_staticTextBitmapPPI, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
m_textCtrlBitmapPPI = new wxTextCtrl( m_swItemProperties, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
m_SizerBitmapPPI->Add( m_textCtrlBitmapPPI, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
bSizerMain->Add( m_SizerBitmapPPI, 0, wxEXPAND, 5 );
m_staticline4 = new wxStaticLine( m_swItemProperties, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); m_staticline4 = new wxStaticLine( m_swItemProperties, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
bSizerMain->Add( m_staticline4, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); bSizerMain->Add( m_staticline4, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
......
...@@ -85,6 +85,7 @@ class PANEL_PROPERTIES_BASE : public wxPanel ...@@ -85,6 +85,7 @@ class PANEL_PROPERTIES_BASE : public wxPanel
wxTextCtrl* m_textCtrlEndY; wxTextCtrl* m_textCtrlEndY;
wxStaticText* m_staticTextOrgEnd; wxStaticText* m_staticTextOrgEnd;
wxComboBox* m_comboBoxCornerEnd; wxComboBox* m_comboBoxCornerEnd;
wxBoxSizer* m_SizerLineThickness;
wxStaticText* m_staticTextThickness; wxStaticText* m_staticTextThickness;
wxTextCtrl* m_textCtrlThickness; wxTextCtrl* m_textCtrlThickness;
wxStaticText* m_staticTextInfoThickness; wxStaticText* m_staticTextInfoThickness;
...@@ -92,6 +93,9 @@ class PANEL_PROPERTIES_BASE : public wxPanel ...@@ -92,6 +93,9 @@ class PANEL_PROPERTIES_BASE : public wxPanel
wxStaticLine* m_staticline1; wxStaticLine* m_staticline1;
wxStaticText* m_staticTextRot; wxStaticText* m_staticTextRot;
wxTextCtrl* m_textCtrlRotation; wxTextCtrl* m_textCtrlRotation;
wxBoxSizer* m_SizerBitmapPPI;
wxStaticText* m_staticTextBitmapPPI;
wxTextCtrl* m_textCtrlBitmapPPI;
wxStaticLine* m_staticline4; wxStaticLine* m_staticline4;
wxStaticText* m_staticTextRepeatPrms; wxStaticText* m_staticTextRepeatPrms;
wxStaticText* m_staticTextRepeatCnt; wxStaticText* m_staticTextRepeatCnt;
......
...@@ -153,6 +153,7 @@ void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( WORKSHEET_DATAITEM* aItem ) ...@@ -153,6 +153,7 @@ void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( WORKSHEET_DATAITEM* aItem )
m_textCtrlPosX->SetValue( msg ); m_textCtrlPosX->SetValue( msg );
msg.Printf( wxT("%.3f"), aItem->m_Pos.m_Pos.y ); msg.Printf( wxT("%.3f"), aItem->m_Pos.m_Pos.y );
m_textCtrlPosY->SetValue( msg ); m_textCtrlPosY->SetValue( msg );
switch( aItem->m_Pos.m_Anchor ) switch( aItem->m_Pos.m_Anchor )
{ {
case RB_CORNER: // right bottom corner case RB_CORNER: // right bottom corner
...@@ -170,6 +171,7 @@ void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( WORKSHEET_DATAITEM* aItem ) ...@@ -170,6 +171,7 @@ void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( WORKSHEET_DATAITEM* aItem )
m_textCtrlEndX->SetValue( msg ); m_textCtrlEndX->SetValue( msg );
msg.Printf( wxT("%.3f"), aItem->m_End.m_Pos.y ); msg.Printf( wxT("%.3f"), aItem->m_End.m_Pos.y );
m_textCtrlEndY->SetValue( msg ); m_textCtrlEndY->SetValue( msg );
switch( aItem->m_End.m_Anchor ) switch( aItem->m_End.m_Anchor )
{ {
case RB_CORNER: // right bottom corner case RB_CORNER: // right bottom corner
...@@ -242,33 +244,53 @@ void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( WORKSHEET_DATAITEM* aItem ) ...@@ -242,33 +244,53 @@ void PROPERTIES_FRAME::CopyPrmsFromItemToPanel( WORKSHEET_DATAITEM* aItem )
if( aItem->GetType() == WORKSHEET_DATAITEM::WS_POLYPOLYGON ) if( aItem->GetType() == WORKSHEET_DATAITEM::WS_POLYPOLYGON )
{ {
m_staticTextInfoThickness->Show( false );
WORKSHEET_DATAITEM_POLYPOLYGON* item = (WORKSHEET_DATAITEM_POLYPOLYGON*) aItem; WORKSHEET_DATAITEM_POLYPOLYGON* item = (WORKSHEET_DATAITEM_POLYPOLYGON*) aItem;
// Rotation (poly and text) // Rotation (poly and text)
msg.Printf( wxT("%.3f"), item->m_Orient ); msg.Printf( wxT("%.3f"), item->m_Orient );
m_textCtrlRotation->SetValue( msg ); m_textCtrlRotation->SetValue( msg );
} }
else if(aItem->GetType() == WORKSHEET_DATAITEM::WS_BITMAP )
{
m_staticTextInfoThickness->Show( false );
}
else
{
m_staticTextInfoThickness->Show( true );
}
if( aItem->GetType() == WORKSHEET_DATAITEM::WS_SEGMENT || if( aItem->GetType() == WORKSHEET_DATAITEM::WS_BITMAP )
aItem->GetType() == WORKSHEET_DATAITEM::WS_RECT ||
aItem->GetType() == WORKSHEET_DATAITEM::WS_BITMAP )
{ {
m_SizerRotation->Show( false ); WORKSHEET_DATAITEM_BITMAP* item = (WORKSHEET_DATAITEM_BITMAP*) aItem;
m_SizerEndPosition->Show(true); // select definition in PPI
msg.Printf( wxT("%d"), item->GetPPI() );
m_textCtrlBitmapPPI->SetValue( msg );
} }
else
switch( aItem->GetType() )
{ {
m_SizerRotation->Show( true ); case WORKSHEET_DATAITEM::WS_SEGMENT:
m_SizerEndPosition->Show(false); case WORKSHEET_DATAITEM::WS_RECT:
m_SizerBitmapPPI->Show( false );
m_SizerLineThickness->Show( true );
m_staticTextInfoThickness->Show( true );
m_SizerRotation->Show( false );
m_SizerEndPosition->Show(true);
break;
case WORKSHEET_DATAITEM::WS_TEXT:
m_SizerBitmapPPI->Show( false );
m_SizerLineThickness->Show( true );
m_staticTextInfoThickness->Show( true );
m_SizerRotation->Show( true );
m_SizerEndPosition->Show(false);
break;
case WORKSHEET_DATAITEM::WS_POLYPOLYGON:
m_SizerBitmapPPI->Show( false );
m_SizerLineThickness->Show( true );
m_staticTextInfoThickness->Show( false ); // No defaut value for thickness
m_SizerRotation->Show( true );
m_SizerEndPosition->Show(false);
break;
case WORKSHEET_DATAITEM::WS_BITMAP:
m_SizerBitmapPPI->Show( true );
m_SizerLineThickness->Show( false );
m_SizerRotation->Show( false );
m_SizerEndPosition->Show(false);
break;
} }
// Repeat parameters // Repeat parameters
...@@ -456,6 +478,16 @@ bool PROPERTIES_FRAME::CopyPrmsFromPanelToItem( WORKSHEET_DATAITEM* aItem ) ...@@ -456,6 +478,16 @@ bool PROPERTIES_FRAME::CopyPrmsFromPanelToItem( WORKSHEET_DATAITEM* aItem )
item->m_Orient = dtmp; item->m_Orient = dtmp;
} }
if( aItem->GetType() == WORKSHEET_DATAITEM::WS_BITMAP )
{
WORKSHEET_DATAITEM_BITMAP* item = (WORKSHEET_DATAITEM_BITMAP*) aItem;
// Set definition in PPI
long value;
msg = m_textCtrlBitmapPPI->GetValue();
if( msg.ToLong( &value ) )
item->SetPPI( (int)value );
}
return true; return true;
} }
...@@ -101,7 +101,7 @@ void PCB_EDIT_FRAME::Process_Config( wxCommandEvent& event ) ...@@ -101,7 +101,7 @@ void PCB_EDIT_FRAME::Process_Config( wxCommandEvent& event )
wxString msg; wxString msg;
msg.Printf( _( "Error occurred saving the global footprint library " msg.Printf( _( "Error occurred saving the global footprint library "
"table:\n\n%s" ), ioe.errorText.GetData() ); "table:\n\n%s" ), ioe.errorText.GetData() );
wxMessageBox( msg, _( "File Seave Error" ), wxOK | wxICON_ERROR ); wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
} }
} }
...@@ -120,7 +120,7 @@ void PCB_EDIT_FRAME::Process_Config( wxCommandEvent& event ) ...@@ -120,7 +120,7 @@ void PCB_EDIT_FRAME::Process_Config( wxCommandEvent& event )
wxString msg; wxString msg;
msg.Printf( _( "Error occurred saving project specific footprint library " msg.Printf( _( "Error occurred saving project specific footprint library "
"table:\n\n%s" ), ioe.errorText.GetData() ); "table:\n\n%s" ), ioe.errorText.GetData() );
wxMessageBox( msg, _( "File Seave Error" ), wxOK | wxICON_ERROR ); wxMessageBox( msg, _( "File Save Error" ), wxOK | wxICON_ERROR );
} }
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment