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

fixed bug 603481. Better bitmap2component look. fixed some locate problems for...

fixed bug 603481. Better bitmap2component look. fixed some locate problems for footprints using polygons (mainly created by bitmap2component)
parent ce0eec89
......@@ -17,6 +17,7 @@ if(WIN32)
set(BITMAP2COMPONENT_RESOURCES bitmap2component.rc)
endif(MINGW)
endif(WIN32)
add_executable(bitmap2component WIN32 MACOSX_BUNDLE
${BITMAP2COMPONENT_SRCS}
${BITMAP2COMPONENT_RESOURCES})
......@@ -28,6 +29,6 @@ target_link_libraries( bitmap2component
kbool )
install(TARGETS bitmap2component
DESTINATION ${KICAD_PLUGINS}
DESTINATION ${KICAD_BIN}
COMPONENT binary)
......@@ -69,6 +69,7 @@ private:
// Event handlers
void OnPaint( wxPaintEvent& event );
void OnLoadFile( wxCommandEvent& event );
bool LoadFile( wxString& aFullFileName );
void OnExportEeschema( wxCommandEvent& event );
void OnExportPcbnew( wxCommandEvent& event );
void Binarize( double aThreshold ); // aThreshold = 0.0 (black level) to 1.0 (white level)
......@@ -94,16 +95,13 @@ BM2CMP_FRAME::BM2CMP_FRAME() : BM2CMP_FRAME_BASE( NULL )
SetIcon( wxICON( bitmap2component ) );
#endif
wxString msg( wxT( "000000" ) );
m_gridInfo->SetCellValue( 0, 0, msg );
m_gridInfo->SetCellValue( 1, 0, msg );
if( GetSizer() )
{
GetSizer()->SetSizeHints( this );
}
SetSize( m_FramePos.x, m_FramePos.y, m_FrameSize.x, m_FrameSize.y );
m_buttonExportEeschema->Enable( false );
m_buttonExportPcbnew->Enable( false );
if ( m_FramePos == wxDefaultPosition )
Centre();
}
......@@ -162,13 +160,24 @@ void BM2CMP_FRAME::OnLoadFile( wxCommandEvent& event )
if( diag != wxID_OK )
return;
wxString fullFilename = FileDlg.GetPath();
if( ! LoadFile( fullFilename ) )
return;
m_BitmapFileName = FileDlg.GetPath();
m_buttonExportEeschema->Enable( true );
m_buttonExportPcbnew->Enable( true );
SetStatusText( fullFilename );
Refresh();
}
bool BM2CMP_FRAME::LoadFile( wxString& aFullFileName )
{
m_BitmapFileName = aFullFileName;
if( !m_Pict_Image.LoadFile( m_BitmapFileName ) )
{
wxMessageBox( _( "Couldn't load image from <%s>" ), m_BitmapFileName.c_str() );
return;
return false;
}
m_Pict_Bitmap = wxBitmap( m_Pict_Image );
......@@ -178,12 +187,12 @@ void BM2CMP_FRAME::OnLoadFile( wxCommandEvent& event )
int nb = m_Pict_Bitmap.GetDepth();
wxString msg;
msg.Printf( wxT( "%d" ), h );
m_gridInfo->SetCellValue( 0, 0, msg );
msg.Printf( wxT( "%d" ), w );
m_gridInfo->SetCellValue( 1, 0, msg );
m_SizeXValue->SetLabel(msg);
msg.Printf( wxT( "%d" ), h );
m_SizeYValue->SetLabel(msg);
msg.Printf( wxT( "%d" ), nb );
m_gridInfo->SetCellValue( 2, 0, msg );
m_BPPValue->SetLabel(msg);
m_InitialPicturePanel->SetVirtualSize( w, h );
m_GreyscalePicturePanel->SetVirtualSize( w, h );
......@@ -197,9 +206,9 @@ void BM2CMP_FRAME::OnLoadFile( wxCommandEvent& event )
m_NB_Image = m_Greyscale_Image;
Binarize( (double)m_sliderThreshold->GetValue()/m_sliderThreshold->GetMax() );
Refresh();
}
return true;
}
void BM2CMP_FRAME::Binarize( double aThreshold )
{
......@@ -261,7 +270,7 @@ void BM2CMP_FRAME::OnExportEeschema( wxCommandEvent& event )
if( path.IsEmpty() || !wxDirExists(path) )
path = ::wxGetCwd();
wxString msg = _( "Schematic lib file (*.lib)|*.lib" );
wxFileDialog FileDlg( this, _( "Create lib file" ), path, wxEmptyString,
wxFileDialog FileDlg( this, _( "Create a lib file for Eeschema" ), path, wxEmptyString,
msg,
wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
int diag = FileDlg.ShowModal();
......@@ -291,8 +300,9 @@ void BM2CMP_FRAME::OnExportPcbnew( wxCommandEvent& event )
wxString path = fn.GetPath();
if( path.IsEmpty() || !wxDirExists(path) )
path = ::wxGetCwd();
wxString msg = _( "Footprint export file (*.emp)|*.emp" );
wxFileDialog FileDlg( this, _( "Create footprint export file" ), path, wxEmptyString,
wxString msg = _( "Footprint file (*.mod)|*.mod" );
wxFileDialog FileDlg( this, _( "Create a footprint file for PcbNew" ),
path, wxEmptyString,
msg,
wxFD_SAVE | wxFD_OVERWRITE_PROMPT );
int diag = FileDlg.ShowModal();
......
......@@ -36,45 +36,65 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
wxBoxSizer* brightSizer;
brightSizer = new wxBoxSizer( wxVERTICAL );
m_gridInfo = new wxGrid( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
// Grid
m_gridInfo->CreateGrid( 3, 1 );
m_gridInfo->EnableEditing( false );
m_gridInfo->EnableGridLines( true );
m_gridInfo->EnableDragGridSize( false );
m_gridInfo->SetMargins( 0, 0 );
// Columns
m_gridInfo->SetColSize( 0, 80 );
m_gridInfo->EnableDragColMove( false );
m_gridInfo->EnableDragColSize( true );
m_gridInfo->SetColLabelSize( 30 );
m_gridInfo->SetColLabelValue( 0, _("Value") );
m_gridInfo->SetColLabelAlignment( wxALIGN_CENTRE, wxALIGN_CENTRE );
// Rows
m_gridInfo->AutoSizeRows();
m_gridInfo->EnableDragRowSize( true );
m_gridInfo->SetRowLabelSize( 80 );
m_gridInfo->SetRowLabelValue( 0, _("Size X") );
m_gridInfo->SetRowLabelValue( 1, _("Size Y") );
m_gridInfo->SetRowLabelValue( 2, _("BPP") );
m_gridInfo->SetRowLabelAlignment( wxALIGN_RIGHT, wxALIGN_CENTRE );
// Label Appearance
// Cell Defaults
m_gridInfo->SetDefaultCellAlignment( wxALIGN_LEFT, wxALIGN_TOP );
brightSizer->Add( m_gridInfo, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
wxStaticBoxSizer* sbSizerInfo;
sbSizerInfo = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Bitmap info:") ), wxVERTICAL );
wxFlexGridSizer* fgSizerInfo;
fgSizerInfo = new wxFlexGridSizer( 3, 3, 0, 0 );
fgSizerInfo->SetFlexibleDirection( wxBOTH );
fgSizerInfo->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
m_staticTextSizeX = new wxStaticText( this, wxID_ANY, _("Size X:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextSizeX->Wrap( -1 );
fgSizerInfo->Add( m_staticTextSizeX, 0, wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_SizeXValue = new wxStaticText( this, wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
m_SizeXValue->Wrap( -1 );
fgSizerInfo->Add( m_SizeXValue, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_SizeXunits = new wxStaticText( this, wxID_ANY, _("pixels"), wxDefaultPosition, wxDefaultSize, 0 );
m_SizeXunits->Wrap( -1 );
fgSizerInfo->Add( m_SizeXunits, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_staticTextSizeY = new wxStaticText( this, wxID_ANY, _("Size Y:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextSizeY->Wrap( -1 );
fgSizerInfo->Add( m_staticTextSizeY, 0, wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_SizeYValue = new wxStaticText( this, wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
m_SizeYValue->Wrap( -1 );
fgSizerInfo->Add( m_SizeYValue, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_SizeYunits = new wxStaticText( this, wxID_ANY, _("pixels"), wxDefaultPosition, wxDefaultSize, 0 );
m_SizeYunits->Wrap( -1 );
fgSizerInfo->Add( m_SizeYunits, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_staticTextBPP = new wxStaticText( this, wxID_ANY, _("BPP:"), wxDefaultPosition, wxDefaultSize, 0 );
m_staticTextBPP->Wrap( -1 );
fgSizerInfo->Add( m_staticTextBPP, 0, wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_BPPValue = new wxStaticText( this, wxID_ANY, _("0000"), wxDefaultPosition, wxDefaultSize, 0 );
m_BPPValue->Wrap( -1 );
fgSizerInfo->Add( m_BPPValue, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
m_BPPunits = new wxStaticText( this, wxID_ANY, _("bits"), wxDefaultPosition, wxDefaultSize, 0 );
m_BPPunits->Wrap( -1 );
fgSizerInfo->Add( m_BPPunits, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
sbSizerInfo->Add( fgSizerInfo, 0, wxEXPAND|wxBOTTOM, 5 );
brightSizer->Add( sbSizerInfo, 0, wxEXPAND|wxALL, 5 );
m_buttonLoad = new wxButton( this, wxID_ANY, _("Load Bitmap"), wxDefaultPosition, wxDefaultSize, 0 );
brightSizer->Add( m_buttonLoad, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
m_buttonExportEeschema = new wxButton( this, wxID_ANY, _("Export to eeschema"), wxDefaultPosition, wxDefaultSize, 0 );
m_buttonExportEeschema->SetToolTip( _("Create a lib file for Eeschema") );
brightSizer->Add( m_buttonExportEeschema, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
m_buttonExportPcbnew = new wxButton( this, wxID_ANY, _("Export to Pcbnew"), wxDefaultPosition, wxDefaultSize, 0 );
m_buttonExportPcbnew->SetToolTip( _("Create a footprint file for PcbNew") );
brightSizer->Add( m_buttonExportPcbnew, 0, wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
wxString m_rbOptionsChoices[] = { _("Normal"), _("Negative") };
......@@ -94,6 +114,7 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
this->SetSizer( bMainSizer );
this->Layout();
m_statusBar = this->CreateStatusBar( 1, wxST_SIZEGRIP, wxID_ANY );
// Connect Events
m_InitialPicturePanel->Connect( wxEVT_PAINT, wxPaintEventHandler( BM2CMP_FRAME_BASE::OnPaint ), NULL, this );
......
This diff is collapsed.
......@@ -20,12 +20,13 @@
#include <wx/image.h>
#include <wx/icon.h>
#include <wx/notebook.h>
#include <wx/grid.h>
#include <wx/stattext.h>
#include <wx/sizer.h>
#include <wx/statbox.h>
#include <wx/button.h>
#include <wx/radiobox.h>
#include <wx/stattext.h>
#include <wx/slider.h>
#include <wx/sizer.h>
#include <wx/statusbr.h>
#include <wx/frame.h>
///////////////////////////////////////////////////////////////////////////
......@@ -43,13 +44,22 @@ class BM2CMP_FRAME_BASE : public wxFrame
wxScrolledWindow* m_InitialPicturePanel;
wxScrolledWindow* m_GreyscalePicturePanel;
wxScrolledWindow* m_BNPicturePanel;
wxGrid* m_gridInfo;
wxStaticText* m_staticTextSizeX;
wxStaticText* m_SizeXValue;
wxStaticText* m_SizeXunits;
wxStaticText* m_staticTextSizeY;
wxStaticText* m_SizeYValue;
wxStaticText* m_SizeYunits;
wxStaticText* m_staticTextBPP;
wxStaticText* m_BPPValue;
wxStaticText* m_BPPunits;
wxButton* m_buttonLoad;
wxButton* m_buttonExportEeschema;
wxButton* m_buttonExportPcbnew;
wxRadioBox* m_rbOptions;
wxStaticText* m_ThresholdText;
wxSlider* m_sliderThreshold;
wxStatusBar* m_statusBar;
// Virtual event handlers, overide them in your derived class
virtual void OnPaint( wxPaintEvent& event ){ event.Skip(); }
......
/* XPM */
const char *bitmap2component_16x16_xpm[] = {
/* columns rows colors chars-per-pixel */
"16 16 16 1",
"& c #128B26",
" c #0CFA0C",
"# c #A75104",
"@ c #22204C",
"O c #050304",
"; c #191327",
"X c #054306",
"* c #F27504",
"o c #0C7E0C",
": c #1ACC2E",
"$ c #51280C",
"- c #391E07",
". c #0CBE0C",
"% c #289F55",
"= c #703505",
"+ c #1C563C",
/* pixels */
" . X",
"oooooooooooo .. ",
"oXO+ooooooXO .. ",
"@@#$+%+& XX X",
"OO#*#O#=OX XOOO",
"OO#*=O$-OO;@@@: ",
"OO=OO.%:XOO***$o",
"%:% X. ;***#X",
"ooooo . .o;***#;",
"OO=$OXooOOO###;o",
"OO#*#O#$OOX+o&: ",
"OO#*=O=-OX XOOO",
"&X=;& %% XX X",
"oX;oooooooXO .. ",
"oooooooooooo .. ",
" . X"
};
......@@ -443,7 +443,7 @@ int ExecuteFile( wxWindow* frame, const wxString& ExecFile,
}
wxString msg;
msg.Printf( _( "Command <%s> could not found" ), GetChars( ExecFile ) );
msg.Printf( _( "Command <%s> could not found" ), GetChars( FullFileName ) );
DisplayError( frame, msg, 20 );
return -1;
}
......
update=30/06/2010 12:54:53
update=05/07/2010 19:03:21
version=1
last_client=pcbnew
[common]
......
......@@ -181,7 +181,7 @@ wxPoint SCH_TEXT::GetSchematicTextOffset()
}
bool SCH_TEXT::Matches( wxFindReplaceData& aSearchData, void * aAuxData )
bool SCH_TEXT::Matches( wxFindReplaceData& aSearchData, void* aAuxData )
{
return SCH_ITEM::Matches( m_Text, aSearchData );
}
......@@ -212,12 +212,21 @@ void SCH_TEXT::Mirror_Y( int aYaxis_position )
int px = m_Pos.x;
int dx;
if( m_Orient == 0 ) /* horizontal text */
switch( GetSchematicTextOrientation() )
{
case 0: /* horizontal text */
dx = LenSize( m_Text ) / 2;
else if( m_Orient == 2 ) /* invert horizontal text*/
break;
case 2: /* invert horizontal text*/
dx = -LenSize( m_Text ) / 2;
else
break;
default:
dx = 0;
break;
}
px += dx;
px -= aYaxis_position;
NEGATE( px );
......@@ -270,14 +279,23 @@ wxPoint SCH_HIERLABEL::GetSchematicTextOffset()
*/
void SCH_HIERLABEL::Mirror_Y( int aYaxis_position )
{
// Text is NOT really mirrored; it is moved to a suitable position
// which is the closest position for a true mirrored text
// The center position is mirrored and the text is moved for half
// horizontal len
if( m_Orient == 0 ) /* horizontal text */
m_Orient = 2;
else if( m_Orient == 2 ) /* invert horizontal text*/
m_Orient = 0;
/* The hierarchical label is NOT really mirrored.
* for an horizontal label, the schematic orientation is changed.
* for a vericalal label, the schematic orientation is not changed.
* and the label is moved to a suitable position
*/
switch( GetSchematicTextOrientation() )
{
case 0: /* horizontal text */
SetSchematicTextOrientation( 2 );
break;
case 2: /* invert horizontal text*/
SetSchematicTextOrientation( 0 );
break;
}
m_Pos.x -= aYaxis_position;
NEGATE( m_Pos.x );
m_Pos.x += aYaxis_position;
......@@ -290,14 +308,22 @@ void SCH_HIERLABEL::Mirror_Y( int aYaxis_position )
*/
void SCH_GLOBALLABEL::Mirror_Y( int aYaxis_position )
{
// Text is NOT really mirrored; it is moved to a suitable position
// which is the closest position for a true mirrored text
// The center position is mirrored and the text is moved for half
// horizontal len
if( m_Orient == 0 ) /* horizontal text */
m_Orient = 2;
else if( m_Orient == 2 ) /* invert horizontal text*/
m_Orient = 0;
/* The global label is NOT really mirrored.
* for an horizontal label, the schematic orientation is changed.
* for a vericalal label, the schematic orientation is not changed.
* and the label is moved to a suitable position
*/
switch( GetSchematicTextOrientation() )
{
case 0: /* horizontal text */
SetSchematicTextOrientation( 2 );
break;
case 2: /* invert horizontal text*/
SetSchematicTextOrientation( 0 );
break;
}
m_Pos.x -= aYaxis_position;
NEGATE( m_Pos.x );
m_Pos.x += aYaxis_position;
......@@ -583,6 +609,7 @@ void SCH_TEXT::Draw( WinEDA_DrawPanel* panel, wxDC* DC, const wxPoint& aOffset,
int DrawMode, int Color )
{
/****************************************************************************/
/* Text type Comment (text on layer "NOTE") have 4 directions, and the Text
* origin is the first letter
*/
......@@ -756,6 +783,7 @@ bool SCH_GLOBALLABEL::Save( FILE* aFile ) const
bool SCH_GLOBALLABEL::HitTest( const wxPoint& aPosRef )
{
/************************************************/
/** Function HitTest
* @return true if the point aPosRef is within item area
* @param aPosRef = a wxPoint to test
......@@ -807,6 +835,7 @@ bool SCH_HIERLABEL::Save( FILE* aFile ) const
bool SCH_HIERLABEL::HitTest( const wxPoint& aPosRef )
{
/************************************************/
/** Function HitTest
* @return true if the point aPosRef is within item area
* @param aPosRef = a wxPoint to test
......@@ -834,6 +863,7 @@ void SCH_HIERLABEL::Draw( WinEDA_DrawPanel* panel,
int Color )
{
/*****************************************************************************/
/* Texts type Global Label have 4 directions, and the Text origin is the
* graphic icon
*/
......@@ -969,6 +999,7 @@ void SCH_GLOBALLABEL::Draw( WinEDA_DrawPanel* panel,
int Color )
{
/*****************************************************************************/
/* Texts type Global Label have 4 directions, and the Text origin is the
* graphic icon
*/
......@@ -1035,6 +1066,7 @@ void SCH_GLOBALLABEL::CreateGraphicShape( std::vector <wxPoint>& aCorner_list,
// 50% more for negation bar
int y = wxRound( (double) HalfSize * 1.5 + (double) linewidth + 3.0 );
// Starting point(anchor)
aCorner_list.push_back( wxPoint( 0, 0 ) );
aCorner_list.push_back( wxPoint( 0, -y ) ); // Up
......@@ -1113,6 +1145,7 @@ EDA_Rect SCH_GLOBALLABEL::GetBoundingBox()
int width = (m_Width == 0) ? g_DrawDefaultLineThickness : m_Width;
height = ( (m_Size.y * 15) / 10 ) + width + 2 * TXTMARGE;
// text X size add height for triangular shapes(bidirectional)
length = LenSize( m_Text ) + height + DANGLING_SYMBOL_SIZE;
......@@ -1202,6 +1235,7 @@ EDA_Rect SCH_LABEL::GetBoundingBox()
return box;
}
/***********************************/
EDA_Rect SCH_TEXT::GetBoundingBox()
/***********************************/
......@@ -1210,6 +1244,7 @@ EDA_Rect SCH_TEXT::GetBoundingBox()
// when calculating the bounding box
int linewidth =
(m_Width == 0) ? g_DrawDefaultLineThickness : m_Width;
linewidth = Clamp_Text_PenSize( linewidth, m_Size, m_Bold );
EXCHG( linewidth, m_Width ); // Set the real width
EDA_Rect rect = GetTextBox( -1 );
......@@ -1221,8 +1256,8 @@ EDA_Rect SCH_TEXT::GetBoundingBox()
wxPoint end = rect.GetEnd();
RotatePoint( &pos, m_Pos, m_Orient );
RotatePoint( &end, m_Pos, m_Orient );
rect.SetOrigin(pos);
rect.SetEnd(end);
rect.SetOrigin( pos );
rect.SetEnd( end );
}
rect.Normalize();
......
......@@ -30,7 +30,7 @@ class WinEDA_DrawPanel;
*/
// default name for nameless projects
#define NAMELESS_PROJECT wxT("noname")
#define NAMELESS_PROJECT wxT( "noname" )
#define NB_ITEMS 11
......@@ -49,21 +49,24 @@ enum pseudokeys {
/* TODO Executable names TODO*/
#ifdef __WINDOWS__
# define CVPCB_EXE wxT( "cvpcb.exe" )
# define PCBNEW_EXE wxT( "pcbnew.exe" )
# define EESCHEMA_EXE wxT( "eeschema.exe" )
# define GERBVIEW_EXE wxT( "gerbview.exe" )
#define CVPCB_EXE wxT( "cvpcb.exe" )
#define PCBNEW_EXE wxT( "pcbnew.exe" )
#define EESCHEMA_EXE wxT( "eeschema.exe" )
#define GERBVIEW_EXE wxT( "gerbview.exe" )
#define BITMAPCONVERTER_EXE wxT( "bitmap2component.exe" )
#else
# ifndef __WXMAC__
# define CVPCB_EXE wxT( "cvpcb" )
# define PCBNEW_EXE wxT( "pcbnew" )
# define EESCHEMA_EXE wxT( "eeschema" )
# define GERBVIEW_EXE wxT( "gerbview" )
#ifndef __WXMAC__
#define CVPCB_EXE wxT( "cvpcb" )
#define PCBNEW_EXE wxT( "pcbnew" )
#define EESCHEMA_EXE wxT( "eeschema" )
#define GERBVIEW_EXE wxT( "gerbview" )
#define BITMAPCONVERTER_EXE wxT( "bitmap2component" )
#else
# define CVPCB_EXE wxT( "cvpcb.app/Contents/MacOS/cvpcb" )
# define PCBNEW_EXE wxT( "pcbnew.app/Contents/MacOS/pcbnew" )
# define EESCHEMA_EXE wxT( "eeschema.app/Contents/MacOS/eeschema" )
# define GERBVIEW_EXE wxT( "gerbview.app/Contents/MacOS/gerbview" )
#define CVPCB_EXE wxT( "cvpcb.app/Contents/MacOS/cvpcb" )
#define PCBNEW_EXE wxT( "pcbnew.app/Contents/MacOS/pcbnew" )
#define EESCHEMA_EXE wxT( "eeschema.app/Contents/MacOS/eeschema" )
#define GERBVIEW_EXE wxT( "gerbview.app/Contents/MacOS/gerbview" )
#define BITMAPCONVERTER_EXE wxT( "bitmap2component.app/Contents/MacOS/bitmap2component" )
# endif
#endif
......
......@@ -9,16 +9,20 @@
#include "kicad.h"
#include "../bitmap2component/bitmap2component_16x16.xpm"
RIGHT_KM_FRAME::RIGHT_KM_FRAME( WinEDA_MainFrame* parent ) :
wxSashLayoutWindow( parent, wxID_ANY )
{
#define BUTTON_HEIGHT 32
m_Parent = parent;
m_DialogWin = NULL;
m_ButtPanel = new wxPanel( this, wxID_ANY );
m_ButtonSeparation = 10; // control of command buttons position
m_ButtonLastPosition.x = 20; // control of command buttons position
m_ButtonLastPosition.y = 20; // control of command buttons position
m_ButtonsPanelHeight = (m_ButtonLastPosition.y * 2) + 32;
m_ButtonsListPosition.x = 20;
m_ButtonsListPosition.y = 20 + BUTTON_HEIGHT;
m_ButtonLastPosition = m_ButtonsListPosition;
m_ButtonsPanelHeight = m_ButtonsListPosition.y + 20;
CreateCommandToolbar();
m_DialogWin = new wxTextCtrl( this, wxID_ANY, wxEmptyString,
wxDefaultPosition, wxDefaultSize,
......@@ -84,6 +88,11 @@ void RIGHT_KM_FRAME::CreateCommandToolbar( void )
btn->SetToolTip( _( "GerbView (Gerber viewer)" ) );
AddFastLaunch( btn );
btn = new wxBitmapButton( parent, ID_TO_BITMAP_CONVERTER,
wxBitmap( bitmap2component_16x16_xpm ) );
btn->SetToolTip( _( "Bitmap2Component (Bitmap converter to create logos)" ) );
AddFastLaunch( btn );
}
......@@ -96,6 +105,8 @@ void RIGHT_KM_FRAME::AddFastLaunch( wxBitmapButton* button )
* @param button = wxBitmapButton to add to the window
*/
{
button->Move( m_ButtonLastPosition );
wxPoint buttPos = m_ButtonLastPosition;
buttPos.y -= button->GetSize().GetHeight();
button->Move( buttPos );
m_ButtonLastPosition.x += button->GetSize().GetWidth() + m_ButtonSeparation;
}
......@@ -43,6 +43,7 @@ enum id_kicad_frm {
ID_TO_EDITOR,
ID_TO_EESCHEMA,
ID_TO_GERBVIEW,
ID_TO_BITMAP_CONVERTER,
ID_BROWSE_AN_SELECT_FILE,
ID_SELECT_PREFERED_EDITOR,
ID_SELECT_PREFERED_PDF_BROWSER_NAME,
......@@ -90,6 +91,7 @@ public:
void OnRunCvpcb( wxCommandEvent& event );
void OnRunEeschema( wxCommandEvent& event );
void OnRunGerbview( wxCommandEvent& event );
void OnRunBitmapConverter( wxCommandEvent& event );
void OnOpenTextEditor( wxCommandEvent& event );
void OnOpenFileInTextEditor( wxCommandEvent& event );
......@@ -144,8 +146,11 @@ private:
WinEDA_MainFrame* m_Parent;
int m_ButtonsPanelHeight;
wxPanel* m_ButtPanel;
wxPoint m_ButtonLastPosition; /* position of the last button in the window */
int m_ButtonSeparation; /* button distance in pixels */
int m_ButtonSeparation; // button distance in pixels
wxPoint m_ButtonsListPosition; /* position of the left bottom corner
* of the first bitmap button
*/
wxPoint m_ButtonLastPosition; // position of the last button in the window
public:
RIGHT_KM_FRAME( WinEDA_MainFrame* parent );
......
......@@ -171,6 +171,11 @@ void WinEDA_MainFrame::OnExit( wxCommandEvent& event )
Close( true );
}
void WinEDA_MainFrame::OnRunBitmapConverter( wxCommandEvent& event )
{
ExecuteFile( this, BITMAPCONVERTER_EXE, wxEmptyString );
}
void WinEDA_MainFrame::OnRunPcbNew( wxCommandEvent& event )
{
......
......@@ -55,6 +55,7 @@ BEGIN_EVENT_TABLE( WinEDA_MainFrame, WinEDA_BasicFrame )
EVT_BUTTON( ID_TO_CVPCB, WinEDA_MainFrame::OnRunCvpcb )
EVT_BUTTON( ID_TO_EESCHEMA, WinEDA_MainFrame::OnRunEeschema )
EVT_BUTTON( ID_TO_GERBVIEW, WinEDA_MainFrame::OnRunGerbview )
EVT_BUTTON( ID_TO_BITMAP_CONVERTER, WinEDA_MainFrame::OnRunBitmapConverter )
EVT_UPDATE_UI( ID_SELECT_DEFAULT_PDF_BROWSER,
WinEDA_MainFrame::OnUpdateDefaultPdfBrowser )
......
......@@ -94,21 +94,20 @@ EDA_Rect EDGE_MODULE::GetBoundingBox()
// We must compute true coordinates from m_PolyPoints
// which are relative to module position, orientation 0
std::vector<wxPoint> points = m_PolyPoints;
wxPoint p_end = m_Start;
wxPoint p_end;
MODULE* Module = (MODULE*) m_Parent;
for( unsigned ii = 0; ii < points.size(); ii++ )
for( unsigned ii = 0; ii < m_PolyPoints.size(); ii++ )
{
wxPoint& pt = points[ii];
wxPoint pt = m_PolyPoints[ii];
if( Module )
{
RotatePoint( &pt.x, &pt.y, Module->m_Orient );
RotatePoint( &pt, Module->m_Orient );
pt += Module->m_Pos;
}
pt += m_Start0;
if( ii == 0 )
p_end = pt;
bbox.m_Pos.x = MIN( bbox.m_Pos.x, pt.x );
bbox.m_Pos.y = MIN( bbox.m_Pos.y, pt.y );
p_end.x = MAX( p_end.x, pt.x );
......@@ -121,6 +120,7 @@ EDA_Rect EDGE_MODULE::GetBoundingBox()
}
}
bbox.Inflate( (m_Width+1) / 2 );
return bbox;
}
......@@ -269,8 +269,7 @@ void EDGE_MODULE::Draw( WinEDA_DrawPanel* panel, wxDC* DC,
wxPoint& pt = points[ii];
RotatePoint( &pt.x, &pt.y, module->m_Orient );
pt += module->m_Pos;
pt += m_Start0 - offset;
pt += module->m_Pos - offset;
}
GRPoly( &panel->m_ClipBox, DC, points.size(), &points[0],
......
......@@ -9,17 +9,19 @@ class EDGE_MODULE : public BOARD_ITEM
{
public:
int m_Width; // 0 = line, > 0 = tracks, bus ...
wxPoint m_Start; // Line start point
wxPoint m_End; // Line end point
wxPoint m_Start; // Line start point / circle and arc center
wxPoint m_End; // Line end point / circle and arc starting point
int m_Shape; // enum Track_Shapes
wxPoint m_Start0; // Start point.
wxPoint m_End0; // End point.
wxPoint m_Start0; // Start point or centre, relative to module origin, orient 0.
wxPoint m_End0; // End point, relative to module origin, orient 0.
int m_Angle; // Arcs: angle in 0.1 degrees
std::vector<wxPoint> m_PolyPoints; // For polygons: number of points (> 2)
// Coord are relative to Origin, orient 0
std::vector<wxPoint> m_PolyPoints; /* For polygons: number of points (> 2)
* Coord are relative to Origin, orient 0
* m_Start0 and m_End0 are not used for polygons
*/
public:
EDGE_MODULE( MODULE* parent );
......@@ -40,6 +42,7 @@ public:
return m_Start;
}
void Copy( EDGE_MODULE* source ); // copy structure
/**
......@@ -95,9 +98,11 @@ public:
virtual wxString GetClass() const
{
return wxT( "MGRAPHIC" );
// return wxT( "EDGE" ); ?
}
/** Function TransformShapeWithClearanceToPolygon
* Convert the track shape to a closed polygon
* Used in filling zones calculations
......@@ -117,6 +122,7 @@ public:
double aCorrectionFactor );
#if defined(DEBUG)
/**
* Function Show
* is used to output the object tree, currently for debugging only.
......
......@@ -36,7 +36,7 @@ MODULE::MODULE( BOARD* parent ) :
m_ModuleStatus = 0;
flag = 0;
m_CntRot90 = m_CntRot180 = 0;
m_Surface = 0;
m_Surface = 0.0;
m_Link = 0;
m_LastEdit_Time = time( NULL );
m_LocalClearance = 0;
......@@ -634,13 +634,11 @@ void MODULE::Set_Rectangle_Encadrement()
int width;
int cx, cy, uxf, uyf, rayon;
int xmax, ymax;
int xmin, ymin;
/* Initial coordinates of the module has a nonzero limit value. */
m_BoundaryBox.m_Pos.x = -500;
m_BoundaryBox.m_Pos.y = -500;
xmax = 500;
ymax = 500;
xmin = ymin = -250;
xmax = ymax = 250;
for( EDGE_MODULE* pt_edge_mod = (EDGE_MODULE*) m_Drawings.GetFirst();
pt_edge_mod; pt_edge_mod = pt_edge_mod->Next() )
......@@ -655,50 +653,59 @@ void MODULE::Set_Rectangle_Encadrement()
case S_ARC:
case S_CIRCLE:
{
cx = pt_edge_mod->m_Start0.x; cy = pt_edge_mod->m_Start0.y; // center
cx = pt_edge_mod->m_Start0.x;
cy = pt_edge_mod->m_Start0.y; // center
uxf = pt_edge_mod->m_End0.x; uyf = pt_edge_mod->m_End0.y;
rayon = (int) hypot( (double) (cx - uxf), (double) (cy - uyf) );
rayon += width;
m_BoundaryBox.m_Pos.x = MIN( m_BoundaryBox.m_Pos.x, cx - rayon );
m_BoundaryBox.m_Pos.y = MIN( m_BoundaryBox.m_Pos.y, cy - rayon );
xmin = MIN( xmin, cx - rayon );
ymin = MIN( ymin, cy - rayon );
xmax = MAX( xmax, cx + rayon );
ymax = MAX( ymax, cy + rayon );
break;
}
default:
m_BoundaryBox.m_Pos.x = MIN( m_BoundaryBox.m_Pos.x,
pt_edge_mod->m_Start0.x - width );
m_BoundaryBox.m_Pos.x = MIN( m_BoundaryBox.m_Pos.x,
pt_edge_mod->m_End0.x - width );
m_BoundaryBox.m_Pos.y = MIN( m_BoundaryBox.m_Pos.y,
pt_edge_mod->m_Start0.y - width );
m_BoundaryBox.m_Pos.y = MIN( m_BoundaryBox.m_Pos.y,
pt_edge_mod->m_End0.y - width );
case S_SEGMENT:
xmin = MIN( xmin, pt_edge_mod->m_Start0.x - width );
xmin = MIN( xmin, pt_edge_mod->m_End0.x - width );
ymin = MIN( ymin, pt_edge_mod->m_Start0.y - width );
ymin = MIN( ymin, pt_edge_mod->m_End0.y - width );
xmax = MAX( xmax, pt_edge_mod->m_Start0.x + width );
xmax = MAX( xmax, pt_edge_mod->m_End0.x + width );
ymax = MAX( ymax, pt_edge_mod->m_Start0.y + width );
ymax = MAX( ymax, pt_edge_mod->m_End0.y + width );
break;
case S_POLYGON:
for( unsigned ii = 0; ii < pt_edge_mod->m_PolyPoints.size(); ii++ )
{
wxPoint pt = pt_edge_mod->m_PolyPoints[ii];
xmin = MIN( xmin, (pt.x - width) );
ymin = MIN( ymin, (pt.y - width) );
xmax = MAX( xmax, (pt.x + width) );
ymax = MAX( ymax, (pt.y + width) );
}
break;
}
}
/* Pads: find the min and max coordinates and update the bounding
* rectangle.
/* Pads: find the min and max coordinates and update the bounding box.
*/
for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
{
rayon = pad->m_Rayon;
cx = pad->m_Pos0.x;
cy = pad->m_Pos0.y;
m_BoundaryBox.m_Pos.x = MIN( m_BoundaryBox.m_Pos.x, cx - rayon );
m_BoundaryBox.m_Pos.y = MIN( m_BoundaryBox.m_Pos.y, cy - rayon );
xmin = MIN( xmin, cx - rayon );
ymin = MIN( ymin, cy - rayon );
xmax = MAX( xmax, cx + rayon );
ymax = MAX( ymax, cy + rayon );
}
m_BoundaryBox.SetWidth( xmax - m_BoundaryBox.m_Pos.x );
m_BoundaryBox.SetHeight( ymax - m_BoundaryBox.m_Pos.y );
m_BoundaryBox.m_Pos.x = xmin;
m_BoundaryBox.m_Pos.y = ymin;
m_BoundaryBox.SetWidth( xmax - xmin );
m_BoundaryBox.SetHeight( ymax - ymin );
}
......@@ -709,75 +716,28 @@ void MODULE::Set_Rectangle_Encadrement()
*/
void MODULE::SetRectangleExinscrit()
{
int width;
int cx, cy, uxf, uyf, rayon;
int xmax, ymax;
m_RealBoundaryBox.m_Pos.x = xmax = m_Pos.x;
m_RealBoundaryBox.m_Pos.y = ymax = m_Pos.y;
m_RealBoundaryBox.m_Pos = m_Pos;
m_RealBoundaryBox.SetEnd( m_Pos );
m_RealBoundaryBox.Inflate( 500 ); // Give a min size
for( EDGE_MODULE* edge = (EDGE_MODULE*) m_Drawings.GetFirst();
edge; edge = edge->Next() )
{
if( edge->Type() != TYPE_EDGE_MODULE )
if( edge->Type() != TYPE_EDGE_MODULE ) // Shoud not occur
continue;
width = edge->m_Width / 2;
switch( edge->m_Shape )
{
case S_ARC:
case S_CIRCLE:
{
cx = edge->m_Start.x;
cy = edge->m_Start.y; // center
uxf = edge->m_End.x;
uyf = edge->m_End.y;
rayon = (int) hypot( (double) (cx - uxf), (double) (cy - uyf) );
rayon += width;
m_RealBoundaryBox.m_Pos.x = MIN( m_RealBoundaryBox.m_Pos.x,
cx - rayon );
m_RealBoundaryBox.m_Pos.y = MIN( m_RealBoundaryBox.m_Pos.y,
cy - rayon );
xmax = MAX( xmax, cx + rayon );
ymax = MAX( ymax, cy + rayon );
break;
EDA_Rect rect = edge->GetBoundingBox();
m_RealBoundaryBox.Merge(rect);
}
default:
m_RealBoundaryBox.m_Pos.x = MIN( m_RealBoundaryBox.m_Pos.x,
edge->m_Start.x - width );
m_RealBoundaryBox.m_Pos.x = MIN( m_RealBoundaryBox.m_Pos.x,
edge->m_End.x - width );
m_RealBoundaryBox.m_Pos.y = MIN( m_RealBoundaryBox.m_Pos.y,
edge->m_Start.y - width );
m_RealBoundaryBox.m_Pos.y = MIN( m_RealBoundaryBox.m_Pos.y,
edge->m_End.y - width );
xmax = MAX( xmax, edge->m_Start.x + width );
xmax = MAX( xmax, edge->m_End.x + width );
ymax = MAX( ymax, edge->m_Start.y + width );
ymax = MAX( ymax, edge->m_End.y + width );
break;
}
}
for( D_PAD* pad = m_Pads; pad; pad = pad->Next() )
{
rayon = pad->m_Rayon;
cx = pad->m_Pos.x;
cy = pad->m_Pos.y;
m_RealBoundaryBox.m_Pos.x = MIN( m_RealBoundaryBox.m_Pos.x, cx - rayon );
m_RealBoundaryBox.m_Pos.y = MIN( m_RealBoundaryBox.m_Pos.y, cy - rayon );
xmax = MAX( xmax, cx + rayon );
ymax = MAX( ymax, cy + rayon );
EDA_Rect rect = pad->GetBoundingBox();
m_RealBoundaryBox.Merge(rect);
}
m_RealBoundaryBox.SetWidth( xmax - m_RealBoundaryBox.m_Pos.x );
m_RealBoundaryBox.SetHeight( ymax - m_RealBoundaryBox.m_Pos.y );
m_Surface = ABS( (float) m_RealBoundaryBox.GetWidth()
m_Surface = ABS( (double) m_RealBoundaryBox.GetWidth()
* m_RealBoundaryBox.GetHeight() );
}
......
......@@ -67,7 +67,7 @@ public:
* (UP <->Down) */
wxSize m_Ext; /* Automatic placement margin around
* the module */
float m_Surface; // Bounding box area
double m_Surface; // Bounding box area
unsigned long m_Link; /* Temporary variable ( used in
* editions, ...) */
......
......@@ -341,8 +341,10 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
break;
case ID_POPUP_PCB_SWITCH_TRACK_POSTURE:
/* XXX POSTURE XXX */
ShowNewTrackWhenMovingCursor( DrawPanel, &dc, true );
/* change the position of initial segment when creating new tracks
* switch from _/ to -\ .
*/
ShowNewTrackWhenMovingCursor( DrawPanel, &dc, false );
g_Alternate_Track_Posture = !g_Alternate_Track_Posture;
ShowNewTrackWhenMovingCursor( DrawPanel, &dc, false );
break;
......
......@@ -499,7 +499,10 @@ void WinEDA_PcbFrame::OnHotKey( wxDC* DC, int hotkey, EDA_BaseStruct* DrawStruct
DrawPanel->Refresh();
break;
case HK_SWITCH_TRACK_POSTURE: // change the position of initial segment when creating new tracks
case HK_SWITCH_TRACK_POSTURE:
/* change the position of initial segment when creating new tracks
* switch from _/ to -\ .
*/
ShowNewTrackWhenMovingCursor( DrawPanel, DC, false );
g_Alternate_Track_Posture = !g_Alternate_Track_Posture;
ShowNewTrackWhenMovingCursor( DrawPanel, DC, false );
......
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