Mostly EAGLE_PLUGIN work:
* Derive the pcbnew copper zone and non-copper zone dialog windows from DIAG_SHIM, which injects some template code. * Update UIpolicies.txt to talk about DIALOG_SHIM support. * Add zone support to eagle_plugin. * Organize ZONE_CONTAINER class declaration for future privacy and accessors.
This commit is contained in:
parent
52318f6988
commit
f2bd20ab34
|
@ -42,6 +42,14 @@ Dialogs:
|
||||||
leaving them all bundled tightly together. The dialog box should look
|
leaving them all bundled tightly together. The dialog box should look
|
||||||
nice at any size large enough to show all the components.
|
nice at any size large enough to show all the components.
|
||||||
|
|
||||||
|
When using wxFormBuilder, please add the following settings to the
|
||||||
|
"Dialog" node:
|
||||||
|
subclass.name <- DIALOG_SHIM
|
||||||
|
subclass.header <- dialog_shim.h
|
||||||
|
|
||||||
|
This will provide for an override of the Show( bool ) wxWindow() function
|
||||||
|
and provide retentitive size and position for the session.
|
||||||
|
|
||||||
Use tooltips to explain the functionality of each non-obvious control.
|
Use tooltips to explain the functionality of each non-obvious control.
|
||||||
This is important because the help files and the wiki often lag behind
|
This is important because the help files and the wiki often lag behind
|
||||||
the source code.
|
the source code.
|
||||||
|
|
|
@ -1468,7 +1468,7 @@ int BOARD::SetAreasNetCodesFromNetNames( void )
|
||||||
|
|
||||||
if( GetArea( ii )->GetNet() != 0 ) // i.e. if this zone is connected to a net
|
if( GetArea( ii )->GetNet() != 0 ) // i.e. if this zone is connected to a net
|
||||||
{
|
{
|
||||||
const NETINFO_ITEM* net = FindNet( GetArea( ii )->m_Netname );
|
const NETINFO_ITEM* net = FindNet( GetArea( ii )->GetNetName() );
|
||||||
|
|
||||||
if( net )
|
if( net )
|
||||||
{
|
{
|
||||||
|
|
|
@ -74,6 +74,7 @@ ZONE_CONTAINER::ZONE_CONTAINER( const ZONE_CONTAINER& aZone ) :
|
||||||
|
|
||||||
// For corner moving, corner index to drag, or -1 if no selection
|
// For corner moving, corner index to drag, or -1 if no selection
|
||||||
m_CornerSelection = -1;
|
m_CornerSelection = -1;
|
||||||
|
m_IsFilled = aZone.m_IsFilled;
|
||||||
m_ZoneClearance = aZone.m_ZoneClearance; // clearance value
|
m_ZoneClearance = aZone.m_ZoneClearance; // clearance value
|
||||||
m_ZoneMinThickness = aZone.m_ZoneMinThickness;
|
m_ZoneMinThickness = aZone.m_ZoneMinThickness;
|
||||||
m_FillMode = aZone.m_FillMode; // Filling mode (segments/polygons)
|
m_FillMode = aZone.m_FillMode; // Filling mode (segments/polygons)
|
||||||
|
@ -84,6 +85,11 @@ ZONE_CONTAINER::ZONE_CONTAINER( const ZONE_CONTAINER& aZone ) :
|
||||||
m_ThermalReliefCopperBridge = aZone.m_ThermalReliefCopperBridge;
|
m_ThermalReliefCopperBridge = aZone.m_ThermalReliefCopperBridge;
|
||||||
m_FilledPolysList = aZone.m_FilledPolysList;
|
m_FilledPolysList = aZone.m_FilledPolysList;
|
||||||
m_FillSegmList = aZone.m_FillSegmList;
|
m_FillSegmList = aZone.m_FillSegmList;
|
||||||
|
|
||||||
|
cornerSmoothingType = aZone.cornerSmoothingType;
|
||||||
|
cornerRadius = aZone.cornerRadius;
|
||||||
|
utility = aZone.utility;
|
||||||
|
utility2 = aZone.utility;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -717,7 +723,7 @@ void ZONE_CONTAINER::DisplayInfo( EDA_DRAW_FRAME* frame )
|
||||||
frame->AppendMsgPanel( _( "Corners" ), msg, BLUE );
|
frame->AppendMsgPanel( _( "Corners" ), msg, BLUE );
|
||||||
|
|
||||||
if( m_FillMode )
|
if( m_FillMode )
|
||||||
msg.Printf( _( "Segments" ), m_FillMode );
|
msg = _( "Segments" );
|
||||||
else
|
else
|
||||||
msg = _( "Polygons" );
|
msg = _( "Polygons" );
|
||||||
|
|
||||||
|
|
|
@ -77,58 +77,7 @@ struct SEGMENT
|
||||||
class ZONE_CONTAINER : public BOARD_CONNECTED_ITEM
|
class ZONE_CONTAINER : public BOARD_CONNECTED_ITEM
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
wxString m_Netname; // Net Name
|
|
||||||
CPolyLine* m_Poly; // outlines
|
|
||||||
|
|
||||||
// For corner moving, corner index to drag, or -1 if no selection.
|
|
||||||
int m_CornerSelection;
|
|
||||||
int m_ZoneClearance; // clearance value
|
|
||||||
int m_ZoneMinThickness; // Min thickness value in filled areas
|
|
||||||
|
|
||||||
// How to fill areas: 0 = use filled polygons, != 0 fill with segments.
|
|
||||||
int m_FillMode;
|
|
||||||
|
|
||||||
// number of segments to convert a circle to a polygon (uses
|
|
||||||
//ARC_APPROX_SEGMENTS_COUNT_LOW_DEF or ARC_APPROX_SEGMENTS_COUNT_HIGHT_DEF)
|
|
||||||
int m_ArcToSegmentsCount;
|
|
||||||
|
|
||||||
// thickness of the gap in thermal reliefs.
|
|
||||||
int m_ThermalReliefGap;
|
|
||||||
|
|
||||||
// thickness of the copper bridge in thermal reliefs
|
|
||||||
int m_ThermalReliefCopperBridge;
|
|
||||||
int utility, utility2; // flags used in polygon calculations
|
|
||||||
|
|
||||||
// true when a zone was filled, false after deleting the filled areas
|
|
||||||
bool m_IsFilled;
|
|
||||||
|
|
||||||
/* set of filled polygons used to draw a zone as a filled area.
|
|
||||||
* from outlines (m_Poly) but unlike m_Poly these filled polygons have no hole
|
|
||||||
* (they are* all in one piece) In very simple cases m_FilledPolysList is same
|
|
||||||
* as m_Poly. In less simple cases (when m_Poly has holes) m_FilledPolysList is
|
|
||||||
* a polygon equivalent to m_Poly, without holes but with extra outline segment
|
|
||||||
* connecting "holes" with external main outline. In complex cases an outline
|
|
||||||
* described by m_Poly can have many filled areas
|
|
||||||
*/
|
|
||||||
std::vector <CPolyPt> m_FilledPolysList;
|
|
||||||
|
|
||||||
/* set of segments used to fill area, when fill zone by segment is used.
|
|
||||||
* ( m_FillMode == 1 )
|
|
||||||
* in this case segments have m_ZoneMinThickness width
|
|
||||||
*/
|
|
||||||
std::vector <SEGMENT> m_FillSegmList;
|
|
||||||
|
|
||||||
private:
|
|
||||||
CPolyLine* smoothedPoly; // Corner-smoothed version of m_Poly
|
|
||||||
int cornerSmoothingType;
|
|
||||||
unsigned int cornerRadius;
|
|
||||||
// Priority: when a zone outline is inside and other zone, if its priority is higher
|
|
||||||
// the other zone priority, it will be created inside.
|
|
||||||
// if priorities are equal, a DRC error is set
|
|
||||||
unsigned m_priority;
|
|
||||||
ZoneConnection m_PadConnection;
|
|
||||||
|
|
||||||
public:
|
|
||||||
ZONE_CONTAINER( BOARD* parent );
|
ZONE_CONTAINER( BOARD* parent );
|
||||||
|
|
||||||
ZONE_CONTAINER( const ZONE_CONTAINER& aZone );
|
ZONE_CONTAINER( const ZONE_CONTAINER& aZone );
|
||||||
|
@ -257,13 +206,13 @@ public:
|
||||||
* returns the net name.
|
* returns the net name.
|
||||||
* @return const wxString& - The net name.
|
* @return const wxString& - The net name.
|
||||||
*/
|
*/
|
||||||
const wxString& GetNetName() const { return m_Netname; };
|
const wxString& GetNetName() const { return m_Netname; };
|
||||||
void SetNetName( const wxString& aName ) { m_Netname = aName; }
|
void SetNetName( const wxString& aName ) { m_Netname = aName; }
|
||||||
|
|
||||||
void SetFillMode( int aFillMode ) { m_FillMode = aFillMode; }
|
void SetFillMode( int aFillMode ) { m_FillMode = aFillMode; }
|
||||||
int GetFillMode() const { return m_FillMode; }
|
int GetFillMode() const { return m_FillMode; }
|
||||||
|
|
||||||
void SetThermalReliefGap( int aThermalReliefGap ) { m_ThermalReliefGap = aThermalReliefGap; }
|
void SetThermalReliefGap( int aThermalReliefGap ) { m_ThermalReliefGap = aThermalReliefGap; }
|
||||||
int GetThermalReliefGap( D_PAD* aPad = NULL ) const;
|
int GetThermalReliefGap( D_PAD* aPad = NULL ) const;
|
||||||
|
|
||||||
void SetThermalReliefCopperBridge( int aThermalReliefCopperBridge )
|
void SetThermalReliefCopperBridge( int aThermalReliefCopperBridge )
|
||||||
|
@ -547,6 +496,59 @@ public:
|
||||||
#if defined(DEBUG)
|
#if defined(DEBUG)
|
||||||
void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
|
void Show( int nestLevel, std::ostream& os ) const { ShowDummy( os ); } // override
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
CPolyLine* m_Poly; // outlines
|
||||||
|
|
||||||
|
// For corner moving, corner index to drag, or -1 if no selection.
|
||||||
|
int m_CornerSelection;
|
||||||
|
int m_ZoneClearance; // clearance value
|
||||||
|
int m_ZoneMinThickness; // Min thickness value in filled areas
|
||||||
|
|
||||||
|
// How to fill areas: 0 = use filled polygons, != 0 fill with segments.
|
||||||
|
int m_FillMode;
|
||||||
|
|
||||||
|
// number of segments to convert a circle to a polygon (uses
|
||||||
|
//ARC_APPROX_SEGMENTS_COUNT_LOW_DEF or ARC_APPROX_SEGMENTS_COUNT_HIGHT_DEF)
|
||||||
|
int m_ArcToSegmentsCount;
|
||||||
|
|
||||||
|
// thickness of the gap in thermal reliefs.
|
||||||
|
int m_ThermalReliefGap;
|
||||||
|
|
||||||
|
// thickness of the copper bridge in thermal reliefs
|
||||||
|
int m_ThermalReliefCopperBridge;
|
||||||
|
int utility, utility2; // flags used in polygon calculations
|
||||||
|
|
||||||
|
// true when a zone was filled, false after deleting the filled areas
|
||||||
|
bool m_IsFilled;
|
||||||
|
|
||||||
|
/* set of filled polygons used to draw a zone as a filled area.
|
||||||
|
* from outlines (m_Poly) but unlike m_Poly these filled polygons have no hole
|
||||||
|
* (they are* all in one piece) In very simple cases m_FilledPolysList is same
|
||||||
|
* as m_Poly. In less simple cases (when m_Poly has holes) m_FilledPolysList is
|
||||||
|
* a polygon equivalent to m_Poly, without holes but with extra outline segment
|
||||||
|
* connecting "holes" with external main outline. In complex cases an outline
|
||||||
|
* described by m_Poly can have many filled areas
|
||||||
|
*/
|
||||||
|
std::vector <CPolyPt> m_FilledPolysList;
|
||||||
|
|
||||||
|
/* set of segments used to fill area, when fill zone by segment is used.
|
||||||
|
* ( m_FillMode == 1 )
|
||||||
|
* in this case segments have m_ZoneMinThickness width
|
||||||
|
*/
|
||||||
|
std::vector <SEGMENT> m_FillSegmList;
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
wxString m_Netname; // Net Name
|
||||||
|
CPolyLine* smoothedPoly; // Corner-smoothed version of m_Poly
|
||||||
|
int cornerSmoothingType;
|
||||||
|
unsigned int cornerRadius;
|
||||||
|
// Priority: when a zone outline is inside and other zone, if its priority is higher
|
||||||
|
// the other zone priority, it will be created inside.
|
||||||
|
// if priorities are equal, a DRC error is set
|
||||||
|
unsigned m_priority;
|
||||||
|
ZoneConnection m_PadConnection;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -56,9 +56,6 @@ private:
|
||||||
|
|
||||||
wxListView* m_LayerSelectionCtrl;
|
wxListView* m_LayerSelectionCtrl;
|
||||||
|
|
||||||
static wxPoint prevPosition; ///< Dialog position & size
|
|
||||||
static wxSize prevSize;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function initDialog
|
* Function initDialog
|
||||||
* fills in the dialog controls using the current settings.
|
* fills in the dialog controls using the current settings.
|
||||||
|
@ -108,8 +105,6 @@ private:
|
||||||
|
|
||||||
// Initialize static member variables
|
// Initialize static member variables
|
||||||
wxString DIALOG_COPPER_ZONE::m_netNameShowFilter( wxT( "*" ) );
|
wxString DIALOG_COPPER_ZONE::m_netNameShowFilter( wxT( "*" ) );
|
||||||
wxPoint DIALOG_COPPER_ZONE::prevPosition( -1, -1 );
|
|
||||||
wxSize DIALOG_COPPER_ZONE::prevSize;
|
|
||||||
|
|
||||||
|
|
||||||
ZONE_EDIT_T InvokeCopperZonesEditor( PCB_BASE_FRAME* aCaller, ZONE_SETTINGS* aSettings )
|
ZONE_EDIT_T InvokeCopperZonesEditor( PCB_BASE_FRAME* aCaller, ZONE_SETTINGS* aSettings )
|
||||||
|
@ -157,11 +152,7 @@ DIALOG_COPPER_ZONE::DIALOG_COPPER_ZONE( PCB_BASE_FRAME* aParent, ZONE_SETTINGS*
|
||||||
|
|
||||||
GetSizer()->SetSizeHints( this );
|
GetSizer()->SetSizeHints( this );
|
||||||
|
|
||||||
if( prevPosition.x != -1 )
|
Center();
|
||||||
SetSize( prevPosition.x, prevPosition.y,
|
|
||||||
prevSize.x, prevSize.y );
|
|
||||||
else
|
|
||||||
Center();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -169,8 +160,6 @@ void DIALOG_COPPER_ZONE::initDialog()
|
||||||
{
|
{
|
||||||
BOARD* board = m_Parent->GetBoard();
|
BOARD* board = m_Parent->GetBoard();
|
||||||
|
|
||||||
SetFocus(); // Required under wxGTK if we want to demiss the dialog with the ESC key
|
|
||||||
|
|
||||||
wxString msg;
|
wxString msg;
|
||||||
|
|
||||||
if( m_settings.m_Zone_45_Only )
|
if( m_settings.m_Zone_45_Only )
|
||||||
|
@ -297,8 +286,6 @@ void DIALOG_COPPER_ZONE::OnButtonCancelClick( wxCommandEvent& event )
|
||||||
void DIALOG_COPPER_ZONE::OnButtonOkClick( wxCommandEvent& event )
|
void DIALOG_COPPER_ZONE::OnButtonOkClick( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
m_netNameShowFilter = m_ShowNetNameFilter->GetValue();
|
m_netNameShowFilter = m_ShowNetNameFilter->GetValue();
|
||||||
prevPosition = GetPosition();
|
|
||||||
prevSize = GetSize();
|
|
||||||
|
|
||||||
if( AcceptOptions( true ) )
|
if( AcceptOptions( true ) )
|
||||||
{
|
{
|
||||||
|
@ -311,9 +298,6 @@ void DIALOG_COPPER_ZONE::OnButtonOkClick( wxCommandEvent& event )
|
||||||
// called on system close button
|
// called on system close button
|
||||||
void DIALOG_COPPER_ZONE::OnClose( wxCloseEvent& event )
|
void DIALOG_COPPER_ZONE::OnClose( wxCloseEvent& event )
|
||||||
{
|
{
|
||||||
prevPosition = GetPosition();
|
|
||||||
prevSize = GetSize();
|
|
||||||
|
|
||||||
if( m_OnExitCode != ZONE_ABORT )
|
if( m_OnExitCode != ZONE_ABORT )
|
||||||
*m_ptr = m_settings;
|
*m_ptr = m_settings;
|
||||||
|
|
||||||
|
@ -384,7 +368,7 @@ bool DIALOG_COPPER_ZONE::AcceptOptions( bool aPromptForErrors, bool aUseExportab
|
||||||
wxString txtvalue = m_ZoneClearanceCtrl->GetValue();
|
wxString txtvalue = m_ZoneClearanceCtrl->GetValue();
|
||||||
m_settings.m_ZoneClearance = ReturnValueFromString( g_UserUnit, txtvalue );
|
m_settings.m_ZoneClearance = ReturnValueFromString( g_UserUnit, txtvalue );
|
||||||
|
|
||||||
// Test if this is a reasonnable value for this parameter
|
// Test if this is a reasonable value for this parameter
|
||||||
// A too large value can hang Pcbnew
|
// A too large value can hang Pcbnew
|
||||||
#define CLEARANCE_MAX_VALUE 5000 // in 1/10000 inch
|
#define CLEARANCE_MAX_VALUE 5000 // in 1/10000 inch
|
||||||
if( m_settings.m_ZoneClearance > CLEARANCE_MAX_VALUE )
|
if( m_settings.m_ZoneClearance > CLEARANCE_MAX_VALUE )
|
||||||
|
@ -519,9 +503,6 @@ void DIALOG_COPPER_ZONE::OnNetSortingOptionSelected( wxCommandEvent& event )
|
||||||
|
|
||||||
void DIALOG_COPPER_ZONE::ExportSetupToOtherCopperZones( wxCommandEvent& event )
|
void DIALOG_COPPER_ZONE::ExportSetupToOtherCopperZones( wxCommandEvent& event )
|
||||||
{
|
{
|
||||||
prevPosition = GetPosition();
|
|
||||||
prevSize = GetSize();
|
|
||||||
|
|
||||||
if( !AcceptOptions( true, true ) )
|
if( !AcceptOptions( true, true ) )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -1,256 +1,268 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// C++ code generated with wxFormBuilder (version Jun 30 2011)
|
// C++ code generated with wxFormBuilder (version Apr 11 2012)
|
||||||
// http://www.wxformbuilder.org/
|
// http://www.wxformbuilder.org/
|
||||||
//
|
//
|
||||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#include "dialog_copper_zones_base.h"
|
#include "dialog_copper_zones_base.h"
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE( DIALOG_COPPER_ZONE_BASE, wxDialog )
|
BEGIN_EVENT_TABLE( DIALOG_COPPER_ZONE_BASE, DIALOG_SHIM )
|
||||||
EVT_CLOSE( DIALOG_COPPER_ZONE_BASE::_wxFB_OnClose )
|
EVT_CLOSE( DIALOG_COPPER_ZONE_BASE::_wxFB_OnClose )
|
||||||
EVT_SIZE( DIALOG_COPPER_ZONE_BASE::_wxFB_OnSize )
|
EVT_SIZE( DIALOG_COPPER_ZONE_BASE::_wxFB_OnSize )
|
||||||
EVT_CHOICE( ID_M_NETDISPLAYOPTION, DIALOG_COPPER_ZONE_BASE::_wxFB_OnNetSortingOptionSelected )
|
EVT_CHOICE( ID_M_NETDISPLAYOPTION, DIALOG_COPPER_ZONE_BASE::_wxFB_OnNetSortingOptionSelected )
|
||||||
EVT_TEXT_ENTER( ID_TEXTCTRL_NETNAMES_FILTER, DIALOG_COPPER_ZONE_BASE::_wxFB_OnRunFiltersButtonClick )
|
EVT_TEXT_ENTER( ID_TEXTCTRL_NETNAMES_FILTER, DIALOG_COPPER_ZONE_BASE::_wxFB_OnRunFiltersButtonClick )
|
||||||
EVT_TEXT_ENTER( ID_TEXTCTRL_NETNAMES_FILTER, DIALOG_COPPER_ZONE_BASE::_wxFB_OnRunFiltersButtonClick )
|
EVT_TEXT_ENTER( ID_TEXTCTRL_NETNAMES_FILTER, DIALOG_COPPER_ZONE_BASE::_wxFB_OnRunFiltersButtonClick )
|
||||||
EVT_BUTTON( wxID_APPLY_FILTERS, DIALOG_COPPER_ZONE_BASE::_wxFB_OnRunFiltersButtonClick )
|
EVT_BUTTON( wxID_APPLY_FILTERS, DIALOG_COPPER_ZONE_BASE::_wxFB_OnRunFiltersButtonClick )
|
||||||
EVT_CHOICE( ID_CORNER_SMOOTHING, DIALOG_COPPER_ZONE_BASE::_wxFB_OnCornerSmoothingModeChoice )
|
EVT_CHOICE( ID_CORNER_SMOOTHING, DIALOG_COPPER_ZONE_BASE::_wxFB_OnCornerSmoothingModeChoice )
|
||||||
EVT_CHOICE( ID_M_PADINZONEOPT, DIALOG_COPPER_ZONE_BASE::_wxFB_OnPadsInZoneClick )
|
EVT_CHOICE( ID_M_PADINZONEOPT, DIALOG_COPPER_ZONE_BASE::_wxFB_OnPadsInZoneClick )
|
||||||
EVT_BUTTON( wxID_BUTTON_EXPORT, DIALOG_COPPER_ZONE_BASE::_wxFB_ExportSetupToOtherCopperZones )
|
EVT_BUTTON( wxID_BUTTON_EXPORT, DIALOG_COPPER_ZONE_BASE::_wxFB_ExportSetupToOtherCopperZones )
|
||||||
EVT_BUTTON( wxID_OK, DIALOG_COPPER_ZONE_BASE::_wxFB_OnButtonOkClick )
|
EVT_BUTTON( wxID_OK, DIALOG_COPPER_ZONE_BASE::_wxFB_OnButtonOkClick )
|
||||||
EVT_BUTTON( wxID_CANCEL, DIALOG_COPPER_ZONE_BASE::_wxFB_OnButtonCancelClick )
|
EVT_BUTTON( wxID_CANCEL, DIALOG_COPPER_ZONE_BASE::_wxFB_OnButtonCancelClick )
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
|
DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
|
||||||
{
|
{
|
||||||
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
||||||
|
|
||||||
m_MainBoxSizer = new wxBoxSizer( wxVERTICAL );
|
m_MainBoxSizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
wxBoxSizer* m_OptionsBoxSizer;
|
wxBoxSizer* m_OptionsBoxSizer;
|
||||||
m_OptionsBoxSizer = new wxBoxSizer( wxHORIZONTAL );
|
m_OptionsBoxSizer = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
m_layerSizer = new wxBoxSizer( wxVERTICAL );
|
m_layerSizer = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
m_staticText17 = new wxStaticText( this, wxID_ANY, _("Layer:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_staticText17 = new wxStaticText( this, wxID_ANY, _("Layer:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_staticText17->Wrap( -1 );
|
m_staticText17->Wrap( -1 );
|
||||||
m_layerSizer->Add( m_staticText17, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
m_layerSizer->Add( m_staticText17, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
|
|
||||||
m_OptionsBoxSizer->Add( m_layerSizer, 1, wxEXPAND, 5 );
|
|
||||||
|
m_OptionsBoxSizer->Add( m_layerSizer, 1, wxEXPAND, 5 );
|
||||||
wxBoxSizer* bSizer7;
|
|
||||||
bSizer7 = new wxBoxSizer( wxVERTICAL );
|
wxBoxSizer* bSizer7;
|
||||||
|
bSizer7 = new wxBoxSizer( wxVERTICAL );
|
||||||
m_staticText2 = new wxStaticText( this, wxID_ANY, _("Net:"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
m_staticText2->Wrap( -1 );
|
m_staticText2 = new wxStaticText( this, wxID_ANY, _("Net:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
bSizer7->Add( m_staticText2, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
m_staticText2->Wrap( -1 );
|
||||||
|
bSizer7->Add( m_staticText2, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
m_ListNetNameSelection = new wxListBox( this, ID_NETNAME_SELECTION, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
|
|
||||||
bSizer7->Add( m_ListNetNameSelection, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
m_ListNetNameSelection = new wxListBox( this, ID_NETNAME_SELECTION, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
|
||||||
|
bSizer7->Add( m_ListNetNameSelection, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
m_OptionsBoxSizer->Add( bSizer7, 1, wxEXPAND, 5 );
|
|
||||||
|
|
||||||
wxStaticBoxSizer* m_NetSortOptSizer;
|
m_OptionsBoxSizer->Add( bSizer7, 1, wxEXPAND, 5 );
|
||||||
m_NetSortOptSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Net Filtering") ), wxVERTICAL );
|
|
||||||
|
wxStaticBoxSizer* m_NetSortOptSizer;
|
||||||
m_staticText16 = new wxStaticText( this, wxID_ANY, _("Display:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_NetSortOptSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Net Filtering") ), wxVERTICAL );
|
||||||
m_staticText16->Wrap( -1 );
|
|
||||||
m_NetSortOptSizer->Add( m_staticText16, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
m_staticText16 = new wxStaticText( this, wxID_ANY, _("Display:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_staticText16->Wrap( -1 );
|
||||||
wxString m_NetDisplayOptionChoices[] = { _("Show all (alphabetical)"), _("Show all (advanced)"), _("Filtered (alphabetical)"), _("Filtered (advanced)") };
|
m_NetSortOptSizer->Add( m_staticText16, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
int m_NetDisplayOptionNChoices = sizeof( m_NetDisplayOptionChoices ) / sizeof( wxString );
|
|
||||||
m_NetDisplayOption = new wxChoice( this, ID_M_NETDISPLAYOPTION, wxDefaultPosition, wxDefaultSize, m_NetDisplayOptionNChoices, m_NetDisplayOptionChoices, 0 );
|
wxString m_NetDisplayOptionChoices[] = { _("Show all (alphabetical)"), _("Show all (advanced)"), _("Filtered (alphabetical)"), _("Filtered (advanced)") };
|
||||||
m_NetDisplayOption->SetSelection( 0 );
|
int m_NetDisplayOptionNChoices = sizeof( m_NetDisplayOptionChoices ) / sizeof( wxString );
|
||||||
m_NetSortOptSizer->Add( m_NetDisplayOption, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
m_NetDisplayOption = new wxChoice( this, ID_M_NETDISPLAYOPTION, wxDefaultPosition, wxDefaultSize, m_NetDisplayOptionNChoices, m_NetDisplayOptionChoices, 0 );
|
||||||
|
m_NetDisplayOption->SetSelection( 0 );
|
||||||
m_staticText5 = new wxStaticText( this, wxID_ANY, _("Hidden net filter:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_NetSortOptSizer->Add( m_NetDisplayOption, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
m_staticText5->Wrap( -1 );
|
|
||||||
m_NetSortOptSizer->Add( m_staticText5, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
m_staticText5 = new wxStaticText( this, wxID_ANY, _("Hidden net filter:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_staticText5->Wrap( -1 );
|
||||||
m_DoNotShowNetNameFilter = new wxTextCtrl( this, ID_TEXTCTRL_NETNAMES_FILTER, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
|
m_NetSortOptSizer->Add( m_staticText5, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
m_DoNotShowNetNameFilter->SetToolTip( _("Pattern to filter net names in filtered list.\nNet names matching this pattern are not displayed.") );
|
|
||||||
|
m_DoNotShowNetNameFilter = new wxTextCtrl( this, ID_TEXTCTRL_NETNAMES_FILTER, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
|
||||||
m_NetSortOptSizer->Add( m_DoNotShowNetNameFilter, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
m_DoNotShowNetNameFilter->SetToolTip( _("Pattern to filter net names in filtered list.\nNet names matching this pattern are not displayed.") );
|
||||||
|
|
||||||
m_staticText51 = new wxStaticText( this, wxID_ANY, _("Visible net filter:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_NetSortOptSizer->Add( m_DoNotShowNetNameFilter, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
m_staticText51->Wrap( -1 );
|
|
||||||
m_NetSortOptSizer->Add( m_staticText51, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
m_staticText51 = new wxStaticText( this, wxID_ANY, _("Visible net filter:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_staticText51->Wrap( -1 );
|
||||||
m_ShowNetNameFilter = new wxTextCtrl( this, ID_TEXTCTRL_NETNAMES_FILTER, _("*"), wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
|
m_NetSortOptSizer->Add( m_staticText51, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
m_ShowNetNameFilter->SetToolTip( _("Pattern to filter net names in filtered list.\nOnly net names matching this pattern are displayed.") );
|
|
||||||
|
m_ShowNetNameFilter = new wxTextCtrl( this, ID_TEXTCTRL_NETNAMES_FILTER, _("*"), wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
|
||||||
m_NetSortOptSizer->Add( m_ShowNetNameFilter, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
m_ShowNetNameFilter->SetToolTip( _("Pattern to filter net names in filtered list.\nOnly net names matching this pattern are displayed.") );
|
||||||
|
|
||||||
m_buttonRunFilter = new wxButton( this, wxID_APPLY_FILTERS, _("Apply Filters"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_NetSortOptSizer->Add( m_ShowNetNameFilter, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||||
m_NetSortOptSizer->Add( m_buttonRunFilter, 0, wxALL|wxEXPAND, 5 );
|
|
||||||
|
m_buttonRunFilter = new wxButton( this, wxID_APPLY_FILTERS, _("Apply Filters"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_OptionsBoxSizer->Add( m_NetSortOptSizer, 0, wxALL, 5 );
|
m_NetSortOptSizer->Add( m_buttonRunFilter, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
m_MainBoxSizer->Add( m_OptionsBoxSizer, 1, wxALL|wxEXPAND, 5 );
|
|
||||||
|
m_OptionsBoxSizer->Add( m_NetSortOptSizer, 0, wxALL, 5 );
|
||||||
wxStaticBoxSizer* m_ExportableSetupSizer;
|
|
||||||
m_ExportableSetupSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Settings") ), wxHORIZONTAL );
|
|
||||||
|
m_MainBoxSizer->Add( m_OptionsBoxSizer, 1, wxALL|wxEXPAND, 5 );
|
||||||
wxBoxSizer* bSizer9;
|
|
||||||
bSizer9 = new wxBoxSizer( wxVERTICAL );
|
wxStaticBoxSizer* m_ExportableSetupSizer;
|
||||||
|
m_ExportableSetupSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Settings") ), wxHORIZONTAL );
|
||||||
m_ClearanceValueTitle = new wxStaticText( this, wxID_ANY, _("Clearance"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
m_ClearanceValueTitle->Wrap( -1 );
|
wxBoxSizer* bSizer9;
|
||||||
bSizer9->Add( m_ClearanceValueTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
bSizer9 = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
m_ZoneClearanceCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
m_ClearanceValueTitle = new wxStaticText( this, wxID_ANY, _("Clearance"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
bSizer9->Add( m_ZoneClearanceCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
m_ClearanceValueTitle->Wrap( -1 );
|
||||||
|
bSizer9->Add( m_ClearanceValueTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
m_MinThicknessValueTitle = new wxStaticText( this, wxID_ANY, _("Minimum width"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
m_MinThicknessValueTitle->Wrap( -1 );
|
m_ZoneClearanceCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_MinThicknessValueTitle->SetToolTip( _("Minimun thickness of filled areas.") );
|
bSizer9->Add( m_ZoneClearanceCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
bSizer9->Add( m_MinThicknessValueTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
m_MinThicknessValueTitle = new wxStaticText( this, wxID_ANY, _("Minimum width"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_MinThicknessValueTitle->Wrap( -1 );
|
||||||
m_ZoneMinThicknessCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
m_MinThicknessValueTitle->SetToolTip( _("Minimun thickness of filled areas.") );
|
||||||
bSizer9->Add( m_ZoneMinThicknessCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
|
||||||
|
bSizer9->Add( m_MinThicknessValueTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
m_staticText151 = new wxStaticText( this, wxID_ANY, _("Corner smoothing:"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
m_staticText151->Wrap( -1 );
|
m_ZoneMinThicknessCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
bSizer9->Add( m_staticText151, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
bSizer9->Add( m_ZoneMinThicknessCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
wxString m_cornerSmoothingChoiceChoices[] = { _("None"), _("Chamfer"), _("Fillet") };
|
m_staticText151 = new wxStaticText( this, wxID_ANY, _("Corner smoothing:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
int m_cornerSmoothingChoiceNChoices = sizeof( m_cornerSmoothingChoiceChoices ) / sizeof( wxString );
|
m_staticText151->Wrap( -1 );
|
||||||
m_cornerSmoothingChoice = new wxChoice( this, ID_CORNER_SMOOTHING, wxDefaultPosition, wxDefaultSize, m_cornerSmoothingChoiceNChoices, m_cornerSmoothingChoiceChoices, 0 );
|
bSizer9->Add( m_staticText151, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
m_cornerSmoothingChoice->SetSelection( 0 );
|
|
||||||
bSizer9->Add( m_cornerSmoothingChoice, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
wxString m_cornerSmoothingChoiceChoices[] = { _("None"), _("Chamfer"), _("Fillet") };
|
||||||
|
int m_cornerSmoothingChoiceNChoices = sizeof( m_cornerSmoothingChoiceChoices ) / sizeof( wxString );
|
||||||
m_cornerSmoothingTitle = new wxStaticText( this, wxID_ANY, _("Chamfer distance (mm):"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_cornerSmoothingChoice = new wxChoice( this, ID_CORNER_SMOOTHING, wxDefaultPosition, wxDefaultSize, m_cornerSmoothingChoiceNChoices, m_cornerSmoothingChoiceChoices, 0 );
|
||||||
m_cornerSmoothingTitle->Wrap( -1 );
|
m_cornerSmoothingChoice->SetSelection( 0 );
|
||||||
bSizer9->Add( m_cornerSmoothingTitle, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
bSizer9->Add( m_cornerSmoothingChoice, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
m_cornerSmoothingCtrl = new wxTextCtrl( this, ID_M_CORNERSMOOTHINGCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
m_cornerSmoothingTitle = new wxStaticText( this, wxID_ANY, _("Chamfer distance (mm):"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
bSizer9->Add( m_cornerSmoothingCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
m_cornerSmoothingTitle->Wrap( -1 );
|
||||||
|
bSizer9->Add( m_cornerSmoothingTitle, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
m_ExportableSetupSizer->Add( bSizer9, 0, wxEXPAND, 5 );
|
|
||||||
|
m_cornerSmoothingCtrl = new wxTextCtrl( this, ID_M_CORNERSMOOTHINGCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
wxBoxSizer* m_LeftBox;
|
bSizer9->Add( m_cornerSmoothingCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
m_LeftBox = new wxBoxSizer( wxVERTICAL );
|
|
||||||
|
|
||||||
m_staticText13 = new wxStaticText( this, wxID_ANY, _("Pad connection:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_ExportableSetupSizer->Add( bSizer9, 0, wxEXPAND, 5 );
|
||||||
m_staticText13->Wrap( -1 );
|
|
||||||
m_LeftBox->Add( m_staticText13, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
wxBoxSizer* m_LeftBox;
|
||||||
|
m_LeftBox = new wxBoxSizer( wxVERTICAL );
|
||||||
wxString m_PadInZoneOptChoices[] = { _("Solid"), _("Thermal relief"), _("None") };
|
|
||||||
int m_PadInZoneOptNChoices = sizeof( m_PadInZoneOptChoices ) / sizeof( wxString );
|
m_staticText13 = new wxStaticText( this, wxID_ANY, _("Pad connection:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_PadInZoneOpt = new wxChoice( this, ID_M_PADINZONEOPT, wxDefaultPosition, wxDefaultSize, m_PadInZoneOptNChoices, m_PadInZoneOptChoices, 0 );
|
m_staticText13->Wrap( -1 );
|
||||||
m_PadInZoneOpt->SetSelection( 0 );
|
m_LeftBox->Add( m_staticText13, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
m_LeftBox->Add( m_PadInZoneOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
|
||||||
|
wxString m_PadInZoneOptChoices[] = { _("Solid"), _("Thermal relief"), _("None") };
|
||||||
wxStaticBoxSizer* m_ThermalShapesParamsSizer;
|
int m_PadInZoneOptNChoices = sizeof( m_PadInZoneOptChoices ) / sizeof( wxString );
|
||||||
m_ThermalShapesParamsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Thermal Reliefs") ), wxVERTICAL );
|
m_PadInZoneOpt = new wxChoice( this, ID_M_PADINZONEOPT, wxDefaultPosition, wxDefaultSize, m_PadInZoneOptNChoices, m_PadInZoneOptChoices, 0 );
|
||||||
|
m_PadInZoneOpt->SetSelection( 0 );
|
||||||
m_AntipadSizeText = new wxStaticText( this, wxID_ANY, _("Antipad clearance"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_LeftBox->Add( m_PadInZoneOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
m_AntipadSizeText->Wrap( -1 );
|
|
||||||
m_ThermalShapesParamsSizer->Add( m_AntipadSizeText, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
wxStaticBoxSizer* m_ThermalShapesParamsSizer;
|
||||||
|
m_ThermalShapesParamsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Thermal Reliefs") ), wxVERTICAL );
|
||||||
m_AntipadSizeValue = new wxTextCtrl( this, wxID_ANTIPAD_SIZE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
m_AntipadSizeValue->SetToolTip( _("Clearance between pads in the same net and filled areas.") );
|
m_AntipadSizeText = new wxStaticText( this, wxID_ANY, _("Antipad clearance"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_AntipadSizeText->Wrap( -1 );
|
||||||
m_ThermalShapesParamsSizer->Add( m_AntipadSizeValue, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
m_ThermalShapesParamsSizer->Add( m_AntipadSizeText, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
|
|
||||||
m_CopperBridgeWidthText = new wxStaticText( this, wxID_ANY, _("Spoke width"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_AntipadSizeValue = new wxTextCtrl( this, wxID_ANTIPAD_SIZE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_CopperBridgeWidthText->Wrap( -1 );
|
m_AntipadSizeValue->SetToolTip( _("Clearance between pads in the same net and filled areas.") );
|
||||||
m_ThermalShapesParamsSizer->Add( m_CopperBridgeWidthText, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
|
||||||
|
m_ThermalShapesParamsSizer->Add( m_AntipadSizeValue, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
m_CopperWidthValue = new wxTextCtrl( this, wxID_COPPER_BRIDGE_VALUE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
m_CopperWidthValue->SetToolTip( _("Width of copper in thermal reliefs.") );
|
m_CopperBridgeWidthText = new wxStaticText( this, wxID_ANY, _("Spoke width"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_CopperBridgeWidthText->Wrap( -1 );
|
||||||
m_ThermalShapesParamsSizer->Add( m_CopperWidthValue, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
m_ThermalShapesParamsSizer->Add( m_CopperBridgeWidthText, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_LeftBox->Add( m_ThermalShapesParamsSizer, 0, wxALL|wxEXPAND, 5 );
|
m_CopperWidthValue = new wxTextCtrl( this, wxID_COPPER_BRIDGE_VALUE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_CopperWidthValue->SetToolTip( _("Width of copper in thermal reliefs.") );
|
||||||
m_ExportableSetupSizer->Add( m_LeftBox, 0, wxEXPAND, 5 );
|
|
||||||
|
m_ThermalShapesParamsSizer->Add( m_CopperWidthValue, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
wxBoxSizer* m_MiddleBox;
|
|
||||||
m_MiddleBox = new wxBoxSizer( wxVERTICAL );
|
|
||||||
|
m_LeftBox->Add( m_ThermalShapesParamsSizer, 0, wxALL|wxEXPAND, 5 );
|
||||||
m_staticText171 = new wxStaticText( this, wxID_ANY, _("Priority level:"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
m_staticText171->Wrap( -1 );
|
|
||||||
m_staticText171->SetToolTip( _("On each copper layer, zones are filled by priority order.\nSo when a zone is inside an other zone:\n* If its priority is highter: its outlines are removed from the other layer.\n* If its priority is equal: a DRC error is set.") );
|
m_ExportableSetupSizer->Add( m_LeftBox, 0, wxEXPAND, 5 );
|
||||||
|
|
||||||
m_MiddleBox->Add( m_staticText171, 0, wxRIGHT|wxLEFT, 5 );
|
wxBoxSizer* m_MiddleBox;
|
||||||
|
m_MiddleBox = new wxBoxSizer( wxVERTICAL );
|
||||||
m_PriorityLevelCtrl = new wxSpinCtrl( this, ID_M_PRIORITYLEVELCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 0 );
|
|
||||||
m_MiddleBox->Add( m_PriorityLevelCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
m_staticText171 = new wxStaticText( this, wxID_ANY, _("Priority level:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_staticText171->Wrap( -1 );
|
||||||
m_staticText11 = new wxStaticText( this, wxID_ANY, _("Fill mode:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_staticText171->SetToolTip( _("On each copper layer, zones are filled by priority order.\nSo when a zone is inside an other zone:\n* If its priority is highter: its outlines are removed from the other layer.\n* If its priority is equal: a DRC error is set.") );
|
||||||
m_staticText11->Wrap( -1 );
|
|
||||||
m_MiddleBox->Add( m_staticText11, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
m_MiddleBox->Add( m_staticText171, 0, wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
wxString m_FillModeCtrlChoices[] = { _("Polygon"), _("Segment") };
|
m_PriorityLevelCtrl = new wxSpinCtrl( this, ID_M_PRIORITYLEVELCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 0 );
|
||||||
int m_FillModeCtrlNChoices = sizeof( m_FillModeCtrlChoices ) / sizeof( wxString );
|
m_MiddleBox->Add( m_PriorityLevelCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
m_FillModeCtrl = new wxChoice( this, ID_M_FILLMODECTRL, wxDefaultPosition, wxDefaultSize, m_FillModeCtrlNChoices, m_FillModeCtrlChoices, 0 );
|
|
||||||
m_FillModeCtrl->SetSelection( 0 );
|
m_staticText11 = new wxStaticText( this, wxID_ANY, _("Fill mode:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_MiddleBox->Add( m_FillModeCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
m_staticText11->Wrap( -1 );
|
||||||
|
m_MiddleBox->Add( m_staticText11, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
m_staticText12 = new wxStaticText( this, wxID_ANY, _("Segments / 360 deg:"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
m_staticText12->Wrap( -1 );
|
wxString m_FillModeCtrlChoices[] = { _("Polygon"), _("Segment") };
|
||||||
m_MiddleBox->Add( m_staticText12, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
int m_FillModeCtrlNChoices = sizeof( m_FillModeCtrlChoices ) / sizeof( wxString );
|
||||||
|
m_FillModeCtrl = new wxChoice( this, ID_M_FILLMODECTRL, wxDefaultPosition, wxDefaultSize, m_FillModeCtrlNChoices, m_FillModeCtrlChoices, 0 );
|
||||||
wxString m_ArcApproximationOptChoices[] = { _("16"), _("32") };
|
m_FillModeCtrl->SetSelection( 0 );
|
||||||
int m_ArcApproximationOptNChoices = sizeof( m_ArcApproximationOptChoices ) / sizeof( wxString );
|
m_MiddleBox->Add( m_FillModeCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
m_ArcApproximationOpt = new wxChoice( this, ID_M_ARCAPPROXIMATIONOPT, wxDefaultPosition, wxDefaultSize, m_ArcApproximationOptNChoices, m_ArcApproximationOptChoices, 0 );
|
|
||||||
m_ArcApproximationOpt->SetSelection( 0 );
|
m_staticText12 = new wxStaticText( this, wxID_ANY, _("Segments / 360 deg:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_MiddleBox->Add( m_ArcApproximationOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
m_staticText12->Wrap( -1 );
|
||||||
|
m_MiddleBox->Add( m_staticText12, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
m_ExportableSetupSizer->Add( m_MiddleBox, 0, wxEXPAND, 5 );
|
|
||||||
|
wxString m_ArcApproximationOptChoices[] = { _("16"), _("32") };
|
||||||
wxBoxSizer* bSizer81;
|
int m_ArcApproximationOptNChoices = sizeof( m_ArcApproximationOptChoices ) / sizeof( wxString );
|
||||||
bSizer81 = new wxBoxSizer( wxVERTICAL );
|
m_ArcApproximationOpt = new wxChoice( this, ID_M_ARCAPPROXIMATIONOPT, wxDefaultPosition, wxDefaultSize, m_ArcApproximationOptNChoices, m_ArcApproximationOptChoices, 0 );
|
||||||
|
m_ArcApproximationOpt->SetSelection( 0 );
|
||||||
m_staticText14 = new wxStaticText( this, wxID_ANY, _("Outline slope:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_MiddleBox->Add( m_ArcApproximationOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
m_staticText14->Wrap( -1 );
|
|
||||||
bSizer81->Add( m_staticText14, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
|
||||||
|
m_ExportableSetupSizer->Add( m_MiddleBox, 0, wxEXPAND, 5 );
|
||||||
wxString m_OrientEdgesOptChoices[] = { _("Arbitrary"), _("H, V, and 45 deg only") };
|
|
||||||
int m_OrientEdgesOptNChoices = sizeof( m_OrientEdgesOptChoices ) / sizeof( wxString );
|
wxBoxSizer* bSizer81;
|
||||||
m_OrientEdgesOpt = new wxChoice( this, ID_M_ORIENTEDGESOPT, wxDefaultPosition, wxDefaultSize, m_OrientEdgesOptNChoices, m_OrientEdgesOptChoices, 0 );
|
bSizer81 = new wxBoxSizer( wxVERTICAL );
|
||||||
m_OrientEdgesOpt->SetSelection( 0 );
|
|
||||||
bSizer81->Add( m_OrientEdgesOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
m_staticText14 = new wxStaticText( this, wxID_ANY, _("Outline slope:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_staticText14->Wrap( -1 );
|
||||||
m_staticText15 = new wxStaticText( this, wxID_ANY, _("Outline style:"), wxDefaultPosition, wxDefaultSize, 0 );
|
bSizer81->Add( m_staticText14, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
m_staticText15->Wrap( -1 );
|
|
||||||
bSizer81->Add( m_staticText15, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
wxString m_OrientEdgesOptChoices[] = { _("Arbitrary"), _("H, V, and 45 deg only") };
|
||||||
|
int m_OrientEdgesOptNChoices = sizeof( m_OrientEdgesOptChoices ) / sizeof( wxString );
|
||||||
wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched"), _("Fully hatched") };
|
m_OrientEdgesOpt = new wxChoice( this, ID_M_ORIENTEDGESOPT, wxDefaultPosition, wxDefaultSize, m_OrientEdgesOptNChoices, m_OrientEdgesOptChoices, 0 );
|
||||||
int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
|
m_OrientEdgesOpt->SetSelection( 0 );
|
||||||
m_OutlineAppearanceCtrl = new wxChoice( this, ID_M_OUTLINEAPPEARANCECTRL, wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 0 );
|
bSizer81->Add( m_OrientEdgesOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
m_OutlineAppearanceCtrl->SetSelection( 0 );
|
|
||||||
bSizer81->Add( m_OutlineAppearanceCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
m_staticText15 = new wxStaticText( this, wxID_ANY, _("Outline style:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_staticText15->Wrap( -1 );
|
||||||
m_ExportableSetupSizer->Add( bSizer81, 0, wxEXPAND, 5 );
|
bSizer81->Add( m_staticText15, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
|
|
||||||
m_MainBoxSizer->Add( m_ExportableSetupSizer, 1, wxALL|wxEXPAND, 5 );
|
wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched"), _("Fully hatched") };
|
||||||
|
int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
|
||||||
wxBoxSizer* bSizer10;
|
m_OutlineAppearanceCtrl = new wxChoice( this, ID_M_OUTLINEAPPEARANCECTRL, wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 0 );
|
||||||
bSizer10 = new wxBoxSizer( wxHORIZONTAL );
|
m_OutlineAppearanceCtrl->SetSelection( 0 );
|
||||||
|
bSizer81->Add( m_OutlineAppearanceCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
m_ExportSetupButton = new wxButton( this, wxID_BUTTON_EXPORT, _("Export Settings to Other Zones"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
m_ExportSetupButton->SetToolTip( _("Export this zone setup (excluding layer and net selection) to all other copper zones.") );
|
|
||||||
|
m_ExportableSetupSizer->Add( bSizer81, 0, wxEXPAND, 5 );
|
||||||
bSizer10->Add( m_ExportSetupButton, 0, wxALL|wxEXPAND, 5 );
|
|
||||||
|
|
||||||
m_OkButton = new wxButton( this, wxID_OK, _("Ok"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_MainBoxSizer->Add( m_ExportableSetupSizer, 1, wxALL|wxEXPAND, 5 );
|
||||||
m_OkButton->SetDefault();
|
|
||||||
bSizer10->Add( m_OkButton, 0, wxALL|wxEXPAND, 5 );
|
wxBoxSizer* bSizer10;
|
||||||
|
bSizer10 = new wxBoxSizer( wxHORIZONTAL );
|
||||||
m_ButtonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
bSizer10->Add( m_ButtonCancel, 0, wxALL|wxEXPAND, 5 );
|
m_ExportSetupButton = new wxButton( this, wxID_BUTTON_EXPORT, _("Export Settings to Other Zones"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_ExportSetupButton->SetToolTip( _("Export this zone setup (excluding layer and net selection) to all other copper zones.") );
|
||||||
m_MainBoxSizer->Add( bSizer10, 0, wxALIGN_RIGHT|wxALL, 5 );
|
|
||||||
|
bSizer10->Add( m_ExportSetupButton, 0, wxALL|wxEXPAND, 5 );
|
||||||
this->SetSizer( m_MainBoxSizer );
|
|
||||||
this->Layout();
|
m_OkButton = new wxButton( this, wxID_OK, _("Ok"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
}
|
m_OkButton->SetDefault();
|
||||||
|
bSizer10->Add( m_OkButton, 0, wxALL|wxEXPAND, 5 );
|
||||||
DIALOG_COPPER_ZONE_BASE::~DIALOG_COPPER_ZONE_BASE()
|
|
||||||
{
|
m_ButtonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
}
|
bSizer10->Add( m_ButtonCancel, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
m_MainBoxSizer->Add( bSizer10, 0, wxALIGN_RIGHT|wxALL, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
this->SetSizer( m_MainBoxSizer );
|
||||||
|
this->Layout();
|
||||||
|
}
|
||||||
|
|
||||||
|
DIALOG_COPPER_ZONE_BASE::~DIALOG_COPPER_ZONE_BASE()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,131 +1,132 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// C++ code generated with wxFormBuilder (version Jun 30 2011)
|
// C++ code generated with wxFormBuilder (version Apr 11 2012)
|
||||||
// http://www.wxformbuilder.org/
|
// http://www.wxformbuilder.org/
|
||||||
//
|
//
|
||||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifndef __DIALOG_COPPER_ZONES_BASE_H__
|
#ifndef __DIALOG_COPPER_ZONES_BASE_H__
|
||||||
#define __DIALOG_COPPER_ZONES_BASE_H__
|
#define __DIALOG_COPPER_ZONES_BASE_H__
|
||||||
|
|
||||||
#include <wx/artprov.h>
|
#include <wx/artprov.h>
|
||||||
#include <wx/xrc/xmlres.h>
|
#include <wx/xrc/xmlres.h>
|
||||||
#include <wx/intl.h>
|
#include <wx/intl.h>
|
||||||
#include <wx/string.h>
|
#include "dialog_shim.h"
|
||||||
#include <wx/stattext.h>
|
#include <wx/string.h>
|
||||||
#include <wx/gdicmn.h>
|
#include <wx/stattext.h>
|
||||||
#include <wx/font.h>
|
#include <wx/gdicmn.h>
|
||||||
#include <wx/colour.h>
|
#include <wx/font.h>
|
||||||
#include <wx/settings.h>
|
#include <wx/colour.h>
|
||||||
#include <wx/sizer.h>
|
#include <wx/settings.h>
|
||||||
#include <wx/listbox.h>
|
#include <wx/sizer.h>
|
||||||
#include <wx/choice.h>
|
#include <wx/listbox.h>
|
||||||
#include <wx/textctrl.h>
|
#include <wx/choice.h>
|
||||||
#include <wx/button.h>
|
#include <wx/textctrl.h>
|
||||||
#include <wx/statbox.h>
|
#include <wx/button.h>
|
||||||
#include <wx/spinctrl.h>
|
#include <wx/statbox.h>
|
||||||
#include <wx/dialog.h>
|
#include <wx/spinctrl.h>
|
||||||
|
#include <wx/dialog.h>
|
||||||
///////////////////////////////////////////////////////////////////////////
|
|
||||||
|
///////////////////////////////////////////////////////////////////////////
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
|
||||||
/// Class DIALOG_COPPER_ZONE_BASE
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
/// Class DIALOG_COPPER_ZONE_BASE
|
||||||
class DIALOG_COPPER_ZONE_BASE : public wxDialog
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
{
|
class DIALOG_COPPER_ZONE_BASE : public DIALOG_SHIM
|
||||||
DECLARE_EVENT_TABLE()
|
{
|
||||||
private:
|
DECLARE_EVENT_TABLE()
|
||||||
|
private:
|
||||||
// Private event handlers
|
|
||||||
void _wxFB_OnClose( wxCloseEvent& event ){ OnClose( event ); }
|
// Private event handlers
|
||||||
void _wxFB_OnSize( wxSizeEvent& event ){ OnSize( event ); }
|
void _wxFB_OnClose( wxCloseEvent& event ){ OnClose( event ); }
|
||||||
void _wxFB_OnNetSortingOptionSelected( wxCommandEvent& event ){ OnNetSortingOptionSelected( event ); }
|
void _wxFB_OnSize( wxSizeEvent& event ){ OnSize( event ); }
|
||||||
void _wxFB_OnRunFiltersButtonClick( wxCommandEvent& event ){ OnRunFiltersButtonClick( event ); }
|
void _wxFB_OnNetSortingOptionSelected( wxCommandEvent& event ){ OnNetSortingOptionSelected( event ); }
|
||||||
void _wxFB_OnCornerSmoothingModeChoice( wxCommandEvent& event ){ OnCornerSmoothingModeChoice( event ); }
|
void _wxFB_OnRunFiltersButtonClick( wxCommandEvent& event ){ OnRunFiltersButtonClick( event ); }
|
||||||
void _wxFB_OnPadsInZoneClick( wxCommandEvent& event ){ OnPadsInZoneClick( event ); }
|
void _wxFB_OnCornerSmoothingModeChoice( wxCommandEvent& event ){ OnCornerSmoothingModeChoice( event ); }
|
||||||
void _wxFB_ExportSetupToOtherCopperZones( wxCommandEvent& event ){ ExportSetupToOtherCopperZones( event ); }
|
void _wxFB_OnPadsInZoneClick( wxCommandEvent& event ){ OnPadsInZoneClick( event ); }
|
||||||
void _wxFB_OnButtonOkClick( wxCommandEvent& event ){ OnButtonOkClick( event ); }
|
void _wxFB_ExportSetupToOtherCopperZones( wxCommandEvent& event ){ ExportSetupToOtherCopperZones( event ); }
|
||||||
void _wxFB_OnButtonCancelClick( wxCommandEvent& event ){ OnButtonCancelClick( event ); }
|
void _wxFB_OnButtonOkClick( wxCommandEvent& event ){ OnButtonOkClick( event ); }
|
||||||
|
void _wxFB_OnButtonCancelClick( wxCommandEvent& event ){ OnButtonCancelClick( event ); }
|
||||||
|
|
||||||
protected:
|
|
||||||
enum
|
protected:
|
||||||
{
|
enum
|
||||||
ID_DIALOG_COPPER_ZONE_BASE = 1000,
|
{
|
||||||
ID_NETNAME_SELECTION,
|
ID_DIALOG_COPPER_ZONE_BASE = 1000,
|
||||||
ID_M_NETDISPLAYOPTION,
|
ID_NETNAME_SELECTION,
|
||||||
ID_TEXTCTRL_NETNAMES_FILTER,
|
ID_M_NETDISPLAYOPTION,
|
||||||
wxID_APPLY_FILTERS,
|
ID_TEXTCTRL_NETNAMES_FILTER,
|
||||||
ID_CORNER_SMOOTHING,
|
wxID_APPLY_FILTERS,
|
||||||
ID_M_CORNERSMOOTHINGCTRL,
|
ID_CORNER_SMOOTHING,
|
||||||
ID_M_PADINZONEOPT,
|
ID_M_CORNERSMOOTHINGCTRL,
|
||||||
wxID_ANTIPAD_SIZE,
|
ID_M_PADINZONEOPT,
|
||||||
wxID_COPPER_BRIDGE_VALUE,
|
wxID_ANTIPAD_SIZE,
|
||||||
ID_M_PRIORITYLEVELCTRL,
|
wxID_COPPER_BRIDGE_VALUE,
|
||||||
ID_M_FILLMODECTRL,
|
ID_M_PRIORITYLEVELCTRL,
|
||||||
ID_M_ARCAPPROXIMATIONOPT,
|
ID_M_FILLMODECTRL,
|
||||||
ID_M_ORIENTEDGESOPT,
|
ID_M_ARCAPPROXIMATIONOPT,
|
||||||
ID_M_OUTLINEAPPEARANCECTRL,
|
ID_M_ORIENTEDGESOPT,
|
||||||
wxID_BUTTON_EXPORT,
|
ID_M_OUTLINEAPPEARANCECTRL,
|
||||||
};
|
wxID_BUTTON_EXPORT
|
||||||
|
};
|
||||||
wxBoxSizer* m_MainBoxSizer;
|
|
||||||
wxBoxSizer* m_layerSizer;
|
wxBoxSizer* m_MainBoxSizer;
|
||||||
wxStaticText* m_staticText17;
|
wxBoxSizer* m_layerSizer;
|
||||||
wxStaticText* m_staticText2;
|
wxStaticText* m_staticText17;
|
||||||
wxListBox* m_ListNetNameSelection;
|
wxStaticText* m_staticText2;
|
||||||
wxStaticText* m_staticText16;
|
wxListBox* m_ListNetNameSelection;
|
||||||
wxChoice* m_NetDisplayOption;
|
wxStaticText* m_staticText16;
|
||||||
wxStaticText* m_staticText5;
|
wxChoice* m_NetDisplayOption;
|
||||||
wxTextCtrl* m_DoNotShowNetNameFilter;
|
wxStaticText* m_staticText5;
|
||||||
wxStaticText* m_staticText51;
|
wxTextCtrl* m_DoNotShowNetNameFilter;
|
||||||
wxTextCtrl* m_ShowNetNameFilter;
|
wxStaticText* m_staticText51;
|
||||||
wxButton* m_buttonRunFilter;
|
wxTextCtrl* m_ShowNetNameFilter;
|
||||||
wxStaticText* m_ClearanceValueTitle;
|
wxButton* m_buttonRunFilter;
|
||||||
wxTextCtrl* m_ZoneClearanceCtrl;
|
wxStaticText* m_ClearanceValueTitle;
|
||||||
wxStaticText* m_MinThicknessValueTitle;
|
wxTextCtrl* m_ZoneClearanceCtrl;
|
||||||
wxTextCtrl* m_ZoneMinThicknessCtrl;
|
wxStaticText* m_MinThicknessValueTitle;
|
||||||
wxStaticText* m_staticText151;
|
wxTextCtrl* m_ZoneMinThicknessCtrl;
|
||||||
wxChoice* m_cornerSmoothingChoice;
|
wxStaticText* m_staticText151;
|
||||||
wxStaticText* m_cornerSmoothingTitle;
|
wxChoice* m_cornerSmoothingChoice;
|
||||||
wxTextCtrl* m_cornerSmoothingCtrl;
|
wxStaticText* m_cornerSmoothingTitle;
|
||||||
wxStaticText* m_staticText13;
|
wxTextCtrl* m_cornerSmoothingCtrl;
|
||||||
wxChoice* m_PadInZoneOpt;
|
wxStaticText* m_staticText13;
|
||||||
wxStaticText* m_AntipadSizeText;
|
wxChoice* m_PadInZoneOpt;
|
||||||
wxTextCtrl* m_AntipadSizeValue;
|
wxStaticText* m_AntipadSizeText;
|
||||||
wxStaticText* m_CopperBridgeWidthText;
|
wxTextCtrl* m_AntipadSizeValue;
|
||||||
wxTextCtrl* m_CopperWidthValue;
|
wxStaticText* m_CopperBridgeWidthText;
|
||||||
wxStaticText* m_staticText171;
|
wxTextCtrl* m_CopperWidthValue;
|
||||||
wxSpinCtrl* m_PriorityLevelCtrl;
|
wxStaticText* m_staticText171;
|
||||||
wxStaticText* m_staticText11;
|
wxSpinCtrl* m_PriorityLevelCtrl;
|
||||||
wxChoice* m_FillModeCtrl;
|
wxStaticText* m_staticText11;
|
||||||
wxStaticText* m_staticText12;
|
wxChoice* m_FillModeCtrl;
|
||||||
wxChoice* m_ArcApproximationOpt;
|
wxStaticText* m_staticText12;
|
||||||
wxStaticText* m_staticText14;
|
wxChoice* m_ArcApproximationOpt;
|
||||||
wxChoice* m_OrientEdgesOpt;
|
wxStaticText* m_staticText14;
|
||||||
wxStaticText* m_staticText15;
|
wxChoice* m_OrientEdgesOpt;
|
||||||
wxChoice* m_OutlineAppearanceCtrl;
|
wxStaticText* m_staticText15;
|
||||||
wxButton* m_ExportSetupButton;
|
wxChoice* m_OutlineAppearanceCtrl;
|
||||||
wxButton* m_OkButton;
|
wxButton* m_ExportSetupButton;
|
||||||
wxButton* m_ButtonCancel;
|
wxButton* m_OkButton;
|
||||||
|
wxButton* m_ButtonCancel;
|
||||||
// Virtual event handlers, overide them in your derived class
|
|
||||||
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
|
// Virtual event handlers, overide them in your derived class
|
||||||
virtual void OnSize( wxSizeEvent& event ) { event.Skip(); }
|
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
|
||||||
virtual void OnNetSortingOptionSelected( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnSize( wxSizeEvent& event ) { event.Skip(); }
|
||||||
virtual void OnRunFiltersButtonClick( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnNetSortingOptionSelected( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnCornerSmoothingModeChoice( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnRunFiltersButtonClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnPadsInZoneClick( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnCornerSmoothingModeChoice( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void ExportSetupToOtherCopperZones( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnPadsInZoneClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnButtonOkClick( wxCommandEvent& event ) { event.Skip(); }
|
virtual void ExportSetupToOtherCopperZones( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnButtonCancelClick( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnButtonOkClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnButtonCancelClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
|
||||||
public:
|
|
||||||
|
public:
|
||||||
DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID id = ID_DIALOG_COPPER_ZONE_BASE, const wxString& title = _("Zone Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 550,500 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
|
||||||
~DIALOG_COPPER_ZONE_BASE();
|
DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID id = ID_DIALOG_COPPER_ZONE_BASE, const wxString& title = _("Zone Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 550,500 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||||
|
~DIALOG_COPPER_ZONE_BASE();
|
||||||
};
|
|
||||||
|
};
|
||||||
#endif //__DIALOG_COPPER_ZONES_BASE_H__
|
|
||||||
|
#endif //__DIALOG_COPPER_ZONES_BASE_H__
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// C++ code generated with wxFormBuilder (version Apr 16 2008)
|
// C++ code generated with wxFormBuilder (version Apr 11 2012)
|
||||||
// http://www.wxformbuilder.org/
|
// http://www.wxformbuilder.org/
|
||||||
//
|
//
|
||||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||||
|
@ -9,12 +9,12 @@
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
BEGIN_EVENT_TABLE( DialogNonCopperZonesPropertiesBase, wxDialog )
|
BEGIN_EVENT_TABLE( DialogNonCopperZonesPropertiesBase, DIALOG_SHIM )
|
||||||
EVT_BUTTON( wxID_OK, DialogNonCopperZonesPropertiesBase::_wxFB_OnOkClick )
|
EVT_BUTTON( wxID_OK, DialogNonCopperZonesPropertiesBase::_wxFB_OnOkClick )
|
||||||
EVT_BUTTON( wxID_CANCEL, DialogNonCopperZonesPropertiesBase::_wxFB_OnCancelClick )
|
EVT_BUTTON( wxID_CANCEL, DialogNonCopperZonesPropertiesBase::_wxFB_OnCancelClick )
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
|
|
||||||
DialogNonCopperZonesPropertiesBase::DialogNonCopperZonesPropertiesBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style )
|
DialogNonCopperZonesPropertiesBase::DialogNonCopperZonesPropertiesBase( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : DIALOG_SHIM( parent, id, title, pos, size, style )
|
||||||
{
|
{
|
||||||
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
this->SetSizeHints( wxDefaultSize, wxDefaultSize );
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@ DialogNonCopperZonesPropertiesBase::DialogNonCopperZonesPropertiesBase( wxWindow
|
||||||
m_ZoneMinThicknessCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
m_ZoneMinThicknessCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
sbLeftSizer_->Add( m_ZoneMinThicknessCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
sbLeftSizer_->Add( m_ZoneMinThicknessCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
|
|
||||||
m_UpperSizer->Add( sbLeftSizer_, 0, 0, 5 );
|
m_UpperSizer->Add( sbLeftSizer_, 0, 0, 5 );
|
||||||
|
|
||||||
wxStaticBoxSizer* m_OutilinesBoxOpt;
|
wxStaticBoxSizer* m_OutilinesBoxOpt;
|
||||||
|
@ -57,6 +58,7 @@ DialogNonCopperZonesPropertiesBase::DialogNonCopperZonesPropertiesBase( wxWindow
|
||||||
m_OutlineAppearanceCtrl->SetSelection( 1 );
|
m_OutlineAppearanceCtrl->SetSelection( 1 );
|
||||||
m_OutilinesBoxOpt->Add( m_OutlineAppearanceCtrl, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
m_OutilinesBoxOpt->Add( m_OutlineAppearanceCtrl, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
|
||||||
m_UpperSizer->Add( m_OutilinesBoxOpt, 0, 0, 5 );
|
m_UpperSizer->Add( m_OutilinesBoxOpt, 0, 0, 5 );
|
||||||
|
|
||||||
wxBoxSizer* m_ButtonsSizer;
|
wxBoxSizer* m_ButtonsSizer;
|
||||||
|
@ -69,8 +71,10 @@ DialogNonCopperZonesPropertiesBase::DialogNonCopperZonesPropertiesBase( wxWindow
|
||||||
m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_buttonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_ButtonsSizer->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
|
m_ButtonsSizer->Add( m_buttonCancel, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
|
||||||
|
|
||||||
|
|
||||||
m_UpperSizer->Add( m_ButtonsSizer, 1, wxALIGN_CENTER_VERTICAL, 5 );
|
m_UpperSizer->Add( m_ButtonsSizer, 1, wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
|
||||||
m_MainSizer->Add( m_UpperSizer, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
|
m_MainSizer->Add( m_UpperSizer, 1, wxEXPAND|wxALIGN_CENTER_HORIZONTAL, 5 );
|
||||||
|
|
||||||
m_staticTextLayerSelection = new wxStaticText( this, wxID_ANY, _("Layer selection:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_staticTextLayerSelection = new wxStaticText( this, wxID_ANY, _("Layer selection:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
@ -80,6 +84,7 @@ DialogNonCopperZonesPropertiesBase::DialogNonCopperZonesPropertiesBase( wxWindow
|
||||||
m_LayerSelectionCtrl = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
|
m_LayerSelectionCtrl = new wxListBox( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
|
||||||
m_MainSizer->Add( m_LayerSelectionCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
m_MainSizer->Add( m_LayerSelectionCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
|
|
||||||
this->SetSizer( m_MainSizer );
|
this->SetSizer( m_MainSizer );
|
||||||
this->Layout();
|
this->Layout();
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,15 +1,17 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// C++ code generated with wxFormBuilder (version Apr 16 2008)
|
// C++ code generated with wxFormBuilder (version Apr 11 2012)
|
||||||
// http://www.wxformbuilder.org/
|
// http://www.wxformbuilder.org/
|
||||||
//
|
//
|
||||||
// PLEASE DO "NOT" EDIT THIS FILE!
|
// PLEASE DO "NOT" EDIT THIS FILE!
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
#ifndef __dialog_non_copper_zones_properties_base__
|
#ifndef __DIALOG_NON_COPPER_ZONES_PROPERTIES_BASE_H__
|
||||||
#define __dialog_non_copper_zones_properties_base__
|
#define __DIALOG_NON_COPPER_ZONES_PROPERTIES_BASE_H__
|
||||||
|
|
||||||
|
#include <wx/artprov.h>
|
||||||
|
#include <wx/xrc/xmlres.h>
|
||||||
#include <wx/intl.h>
|
#include <wx/intl.h>
|
||||||
|
#include "dialog_shim.h"
|
||||||
#include <wx/string.h>
|
#include <wx/string.h>
|
||||||
#include <wx/radiobox.h>
|
#include <wx/radiobox.h>
|
||||||
#include <wx/gdicmn.h>
|
#include <wx/gdicmn.h>
|
||||||
|
@ -29,7 +31,7 @@
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
/// Class DialogNonCopperZonesPropertiesBase
|
/// Class DialogNonCopperZonesPropertiesBase
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
class DialogNonCopperZonesPropertiesBase : public wxDialog
|
class DialogNonCopperZonesPropertiesBase : public DIALOG_SHIM
|
||||||
{
|
{
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
private:
|
private:
|
||||||
|
@ -51,14 +53,15 @@ class DialogNonCopperZonesPropertiesBase : public wxDialog
|
||||||
wxListBox* m_LayerSelectionCtrl;
|
wxListBox* m_LayerSelectionCtrl;
|
||||||
|
|
||||||
// Virtual event handlers, overide them in your derived class
|
// Virtual event handlers, overide them in your derived class
|
||||||
virtual void OnOkClick( wxCommandEvent& event ){ event.Skip(); }
|
virtual void OnOkClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnCancelClick( wxCommandEvent& event ){ event.Skip(); }
|
virtual void OnCancelClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
DialogNonCopperZonesPropertiesBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Non Copper Zones Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 416,287 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER );
|
|
||||||
|
DialogNonCopperZonesPropertiesBase( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Non Copper Zones Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 416,287 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxSUNKEN_BORDER );
|
||||||
~DialogNonCopperZonesPropertiesBase();
|
~DialogNonCopperZonesPropertiesBase();
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //__dialog_non_copper_zones_properties_base__
|
#endif //__DIALOG_NON_COPPER_ZONES_PROPERTIES_BASE_H__
|
||||||
|
|
|
@ -55,6 +55,8 @@ Load() TODO's
|
||||||
*) fix text twisting and final location issues.
|
*) fix text twisting and final location issues.
|
||||||
*) netclass info?
|
*) netclass info?
|
||||||
*) code factoring, for polygon at least
|
*) code factoring, for polygon at least
|
||||||
|
*) zone fill clearances
|
||||||
|
*) package rectangles
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -92,7 +94,9 @@ typedef MODULE_MAP::const_iterator MODULE_CITER;
|
||||||
typedef boost::optional<std::string> opt_string;
|
typedef boost::optional<std::string> opt_string;
|
||||||
typedef boost::optional<int> opt_int;
|
typedef boost::optional<int> opt_int;
|
||||||
typedef boost::optional<double> opt_double;
|
typedef boost::optional<double> opt_double;
|
||||||
typedef boost::optional<CPTREE&> opt_cptree;
|
typedef boost::optional<bool> opt_bool;
|
||||||
|
//typedef boost::optional<CPTREE&> opt_cptree;
|
||||||
|
|
||||||
|
|
||||||
/// Eagle wire
|
/// Eagle wire
|
||||||
struct EWIRE
|
struct EWIRE
|
||||||
|
@ -179,9 +183,8 @@ struct ETEXT
|
||||||
opt_string font;
|
opt_string font;
|
||||||
opt_double ratio;
|
opt_double ratio;
|
||||||
opt_erot erot;
|
opt_erot erot;
|
||||||
opt_int align;
|
|
||||||
|
|
||||||
enum {
|
enum { // for align
|
||||||
CENTER,
|
CENTER,
|
||||||
CENTER_LEFT,
|
CENTER_LEFT,
|
||||||
TOP_CENTER,
|
TOP_CENTER,
|
||||||
|
@ -194,6 +197,78 @@ struct ETEXT
|
||||||
BOTTOM_LEFT = -TOP_RIGHT,
|
BOTTOM_LEFT = -TOP_RIGHT,
|
||||||
BOTTOM_RIGHT = -TOP_LEFT,
|
BOTTOM_RIGHT = -TOP_LEFT,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
opt_int align;
|
||||||
|
};
|
||||||
|
|
||||||
|
/// Eagle thru hol pad
|
||||||
|
struct EPAD
|
||||||
|
{
|
||||||
|
std::string name;
|
||||||
|
double x;
|
||||||
|
double y;
|
||||||
|
double drill;
|
||||||
|
opt_double diameter;
|
||||||
|
|
||||||
|
// for shape: (square | round | octagon | long | offset)
|
||||||
|
enum {
|
||||||
|
SQUARE,
|
||||||
|
ROUND,
|
||||||
|
OCTAGON,
|
||||||
|
LONG,
|
||||||
|
OFFSET,
|
||||||
|
};
|
||||||
|
|
||||||
|
opt_int shape;
|
||||||
|
|
||||||
|
opt_erot erot;
|
||||||
|
|
||||||
|
opt_bool stop;
|
||||||
|
opt_bool thermals;
|
||||||
|
opt_bool first;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/// Eagle SMD pad
|
||||||
|
struct ESMD
|
||||||
|
{
|
||||||
|
std::string name;
|
||||||
|
double x;
|
||||||
|
double y;
|
||||||
|
double dx;
|
||||||
|
double dy;
|
||||||
|
int layer;
|
||||||
|
opt_int roundness;
|
||||||
|
opt_erot erot;
|
||||||
|
opt_bool stop;
|
||||||
|
opt_bool thermals;
|
||||||
|
opt_bool cream;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct EVERTEX
|
||||||
|
{
|
||||||
|
double x;
|
||||||
|
double y;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Eagle polygon, without vertices which are parsed as needed
|
||||||
|
struct EPOLYGON
|
||||||
|
{
|
||||||
|
double width;
|
||||||
|
int layer;
|
||||||
|
opt_double spacing;
|
||||||
|
|
||||||
|
enum { // for pour
|
||||||
|
SOLID,
|
||||||
|
HATCH,
|
||||||
|
CUTOUT,
|
||||||
|
};
|
||||||
|
|
||||||
|
opt_int pour;
|
||||||
|
opt_double isolate;
|
||||||
|
opt_bool orphans;
|
||||||
|
opt_bool thermals;
|
||||||
|
opt_int rank;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -212,6 +287,18 @@ static inline unsigned long timeStamp( CPTREE& aTree )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static opt_bool parseOptionalBool( CPTREE& attribs, const char* aName )
|
||||||
|
{
|
||||||
|
opt_bool ret;
|
||||||
|
opt_string stemp = attribs.get_optional<std::string>( aName );
|
||||||
|
|
||||||
|
if( stemp )
|
||||||
|
ret = !stemp->compare( "yes" );
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
EAGLE_PLUGIN::EAGLE_PLUGIN()
|
EAGLE_PLUGIN::EAGLE_PLUGIN()
|
||||||
{
|
{
|
||||||
init( NULL );
|
init( NULL );
|
||||||
|
@ -459,40 +546,31 @@ void EAGLE_PLUGIN::loadPlain( CPTREE& aGraphics, const std::string& aXpath )
|
||||||
// net related info on it from the DTD.
|
// net related info on it from the DTD.
|
||||||
else if( !gr->first.compare( "rectangle" ) )
|
else if( !gr->first.compare( "rectangle" ) )
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
ERECT r = erect( gr->second );
|
ERECT r = erect( gr->second );
|
||||||
int layer = kicad_layer( r.layer );
|
int layer = kicad_layer( r.layer );
|
||||||
|
|
||||||
// hope the angle of rotation is zero.
|
|
||||||
|
|
||||||
// might be better off making this into a ZONE:
|
|
||||||
|
|
||||||
if( IsValidCopperLayerIndex( layer ) )
|
if( IsValidCopperLayerIndex( layer ) )
|
||||||
{
|
{
|
||||||
auto_ptr<DRAWSEGMENT> dseg = new DRAWSEGMENT( m_board );
|
// use a "netcode = 0" type ZONE:
|
||||||
|
ZONE_CONTAINER* zone = new ZONE_CONTAINER( m_board );
|
||||||
|
m_board->Add( zone, ADD_APPEND );
|
||||||
|
|
||||||
dseg->SetTimeStamp( timeStamp( gr->second ) );
|
zone->SetTimeStamp( timeStamp( gr->second ) );
|
||||||
dseg->SetLayer( layer );
|
zone->SetLayer( layer );
|
||||||
dseg->SetShape( S_POLYGON );
|
zone->SetNet( 0 );
|
||||||
dseg->SetWidth( Mils2iu( 12 ) );
|
|
||||||
|
|
||||||
std::vector<wxPoint> pts;
|
int outline_hatch = CPolyLine::DIAGONAL_EDGE;
|
||||||
|
|
||||||
pts.push_back( wxPoint( kicad_x( r.x1 ), kicad_y( r.y1 ) ) );
|
zone->m_Poly->Start( layer, kicad_x( r.x1 ), kicad_y( r.y1 ), outline_hatch );
|
||||||
pts.push_back( wxPoint( kicad_x( r.x2 ), kicad_y( r.y1 ) ) );
|
zone->AppendCorner( wxPoint( kicad_x( r.x2 ), kicad_y( r.y1 ) ) );
|
||||||
pts.push_back( wxPoint( kicad_x( r.x2 ), kicad_y( r.y2 ) ) );
|
zone->AppendCorner( wxPoint( kicad_x( r.x2 ), kicad_y( r.y2 ) ) );
|
||||||
pts.push_back( wxPoint( kicad_x( r.x1 ), kicad_y( r.y2 ) ) );
|
zone->AppendCorner( wxPoint( kicad_x( r.x1 ), kicad_y( r.y2 ) ) );
|
||||||
dseg->SetPolyPoints( pts );
|
zone->m_Poly->Close();
|
||||||
|
|
||||||
m_board->Add( dseg.release(), ADD_APPEND );
|
// this is not my fault:
|
||||||
|
zone->m_Poly->SetHatch( outline_hatch,
|
||||||
|
Mils2iu( zone->m_Poly->GetDefaultHatchPitchMils() ) );
|
||||||
}
|
}
|
||||||
#elif 0
|
|
||||||
// use a "netcode = 0" type ZONE:
|
|
||||||
auto_ptr<ZONE_CONTAINER> zone = new ZONE_CONTAINER( m_board );
|
|
||||||
|
|
||||||
;
|
|
||||||
m_board->Add( zone.release(), ADD_APPEND );
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
else if( !gr->first.compare( "hole" ) )
|
else if( !gr->first.compare( "hole" ) )
|
||||||
{
|
{
|
||||||
|
@ -630,18 +708,13 @@ void EAGLE_PLUGIN::loadElements( CPTREE& aElements, const std::string& aXpath )
|
||||||
|
|
||||||
for( D_PAD* pad = m->m_Pads; pad; pad = pad->Next() )
|
for( D_PAD* pad = m->m_Pads; pad; pad = pad->Next() )
|
||||||
{
|
{
|
||||||
const ENET& enet = m_pads_to_nets[ makeKey( name, TO_UTF8( pad->GetPadName())) ];
|
std::string key = makeKey( name, TO_UTF8( pad->GetPadName() ) );
|
||||||
|
|
||||||
D(printf( "refname:'%s' pad:'%s' netcode:%d netname:'%s'\n",
|
NET_MAP_CITER ni = m_pads_to_nets.find( key );
|
||||||
name.c_str(), TO_UTF8( pad->GetPadName() ),
|
if( ni != m_pads_to_nets.end() )
|
||||||
enet.netcode,
|
|
||||||
enet.netname.c_str()
|
|
||||||
);)
|
|
||||||
|
|
||||||
if( enet.netname.size() )
|
|
||||||
{
|
{
|
||||||
pad->SetNetname( FROM_UTF8( enet.netname.c_str() ) );
|
pad->SetNetname( FROM_UTF8( ni->second.netname.c_str() ) );
|
||||||
pad->SetNet( enet.netcode );
|
pad->SetNet( ni->second.netcode );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -808,7 +881,7 @@ ERECT EAGLE_PLUGIN::erect( CPTREE& aRect ) const
|
||||||
r.y2 = attribs.get<double>( "y2" );
|
r.y2 = attribs.get<double>( "y2" );
|
||||||
r.layer = attribs.get<int>( "layer" );
|
r.layer = attribs.get<int>( "layer" );
|
||||||
|
|
||||||
// @todo: hoping that rot is not used
|
// @todo: stop hoping that rot is not used
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
@ -883,7 +956,11 @@ EROT EAGLE_PLUGIN::erot( const std::string& aRot ) const
|
||||||
|
|
||||||
rot.spin = aRot.find( 'S' ) != aRot.npos;
|
rot.spin = aRot.find( 'S' ) != aRot.npos;
|
||||||
rot.mirror = aRot.find( 'M' ) != aRot.npos;
|
rot.mirror = aRot.find( 'M' ) != aRot.npos;
|
||||||
rot.degrees = strtod( aRot.c_str() + 1 + int( rot.spin || rot.mirror ), NULL );
|
rot.degrees = strtod( aRot.c_str()
|
||||||
|
+ 1 // skip leading 'R'
|
||||||
|
+ int( rot.spin ) // skip optional leading 'S'
|
||||||
|
+ int( rot.mirror ), // skip optional leading 'M'
|
||||||
|
NULL );
|
||||||
|
|
||||||
return rot;
|
return rot;
|
||||||
}
|
}
|
||||||
|
@ -947,6 +1024,173 @@ EATTR EAGLE_PLUGIN::eattr( CPTREE& aAttribute ) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
EPAD EAGLE_PLUGIN::epad( CPTREE& aPad ) const
|
||||||
|
{
|
||||||
|
EPAD p;
|
||||||
|
CPTREE& attribs = aPad.get_child( "<xmlattr>" );
|
||||||
|
|
||||||
|
/*
|
||||||
|
<!ELEMENT pad EMPTY>
|
||||||
|
<!ATTLIST pad
|
||||||
|
name %String; #REQUIRED
|
||||||
|
x %Coord; #REQUIRED
|
||||||
|
y %Coord; #REQUIRED
|
||||||
|
drill %Dimension; #REQUIRED
|
||||||
|
diameter %Dimension; "0"
|
||||||
|
shape %PadShape; "round"
|
||||||
|
rot %Rotation; "R0"
|
||||||
|
stop %Bool; "yes"
|
||||||
|
thermals %Bool; "yes"
|
||||||
|
first %Bool; "no"
|
||||||
|
>
|
||||||
|
*/
|
||||||
|
|
||||||
|
// the DTD says these must be present, throw exception if not found
|
||||||
|
p.name = attribs.get<std::string>( "name" );
|
||||||
|
p.x = attribs.get<double>( "x" );
|
||||||
|
p.y = attribs.get<double>( "y" );
|
||||||
|
p.drill = attribs.get<double>( "drill" );
|
||||||
|
|
||||||
|
p.diameter = attribs.get_optional<double>( "diameter" );
|
||||||
|
|
||||||
|
opt_string s = attribs.get_optional<std::string>( "shape" );
|
||||||
|
if( s )
|
||||||
|
{
|
||||||
|
// (square | round | octagon | long | offset)
|
||||||
|
if( !s->compare( "square" ) )
|
||||||
|
p.shape = EPAD::SQUARE;
|
||||||
|
else if( !s->compare( "round" ) )
|
||||||
|
p.shape = EPAD::ROUND;
|
||||||
|
else if( !s->compare( "octagon" ) )
|
||||||
|
p.shape = EPAD::OCTAGON;
|
||||||
|
else if( !s->compare( "long" ) )
|
||||||
|
p.shape = EPAD::LONG;
|
||||||
|
else if( !s->compare( "offset" ) )
|
||||||
|
p.shape = EPAD::OFFSET;
|
||||||
|
}
|
||||||
|
|
||||||
|
opt_string rot = attribs.get_optional<std::string>( "rot" );
|
||||||
|
if( rot )
|
||||||
|
{
|
||||||
|
p.erot = erot( *rot );
|
||||||
|
}
|
||||||
|
|
||||||
|
p.stop = parseOptionalBool( attribs, "stop" );
|
||||||
|
p.thermals = parseOptionalBool( attribs, "thermals" );
|
||||||
|
p.first = parseOptionalBool( attribs, "first" );
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ESMD EAGLE_PLUGIN::esmd( CPTREE& aSMD ) const
|
||||||
|
{
|
||||||
|
ESMD s;
|
||||||
|
CPTREE& attribs = aSMD.get_child( "<xmlattr>" );
|
||||||
|
|
||||||
|
/*
|
||||||
|
<!ATTLIST smd
|
||||||
|
name %String; #REQUIRED
|
||||||
|
x %Coord; #REQUIRED
|
||||||
|
y %Coord; #REQUIRED
|
||||||
|
dx %Dimension; #REQUIRED
|
||||||
|
dy %Dimension; #REQUIRED
|
||||||
|
layer %Layer; #REQUIRED
|
||||||
|
roundness %Int; "0"
|
||||||
|
rot %Rotation; "R0"
|
||||||
|
stop %Bool; "yes"
|
||||||
|
thermals %Bool; "yes"
|
||||||
|
cream %Bool; "yes"
|
||||||
|
>
|
||||||
|
*/
|
||||||
|
|
||||||
|
// the DTD says these must be present, throw exception if not found
|
||||||
|
s.name = attribs.get<std::string>( "name" );
|
||||||
|
s.x = attribs.get<double>( "x" );
|
||||||
|
s.y = attribs.get<double>( "y" );
|
||||||
|
s.dx = attribs.get<double>( "dx" );
|
||||||
|
s.dy = attribs.get<double>( "dy" );
|
||||||
|
s.layer = attribs.get<int>( "layer" );
|
||||||
|
|
||||||
|
opt_string rot = attribs.get_optional<std::string>( "rot" );
|
||||||
|
if( rot )
|
||||||
|
{
|
||||||
|
s.erot = erot( *rot );
|
||||||
|
}
|
||||||
|
|
||||||
|
s.roundness = attribs.get_optional<int>( "roundness" );
|
||||||
|
s.thermals = parseOptionalBool( attribs, "thermals" );
|
||||||
|
s.stop = parseOptionalBool( attribs, "stop" );
|
||||||
|
s.thermals = parseOptionalBool( attribs, "thermals" );
|
||||||
|
s.cream = parseOptionalBool( attribs, "cream" );
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
EVERTEX EAGLE_PLUGIN::evertex( CPTREE& aVertex ) const
|
||||||
|
{
|
||||||
|
EVERTEX v;
|
||||||
|
CPTREE& attribs = aVertex.get_child( "<xmlattr>" );
|
||||||
|
|
||||||
|
/*
|
||||||
|
<!ELEMENT vertex EMPTY>
|
||||||
|
<!ATTLIST vertex
|
||||||
|
x %Coord; #REQUIRED
|
||||||
|
y %Coord; #REQUIRED
|
||||||
|
curve %WireCurve; "0" -- the curvature from this vertex to the next one --
|
||||||
|
>
|
||||||
|
*/
|
||||||
|
|
||||||
|
v.x = attribs.get<double>( "x" );
|
||||||
|
v.y = attribs.get<double>( "y" );
|
||||||
|
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
EPOLYGON EAGLE_PLUGIN::epolygon( CPTREE& aPolygon ) const
|
||||||
|
{
|
||||||
|
EPOLYGON p;
|
||||||
|
CPTREE& attribs = aPolygon.get_child( "<xmlattr>" );
|
||||||
|
|
||||||
|
/*
|
||||||
|
<!ATTLIST polygon
|
||||||
|
width %Dimension; #REQUIRED
|
||||||
|
layer %Layer; #REQUIRED
|
||||||
|
spacing %Dimension; #IMPLIED
|
||||||
|
pour %PolygonPour; "solid"
|
||||||
|
isolate %Dimension; #IMPLIED -- only in <signal> or <package> context --
|
||||||
|
orphans %Bool; "no" -- only in <signal> context --
|
||||||
|
thermals %Bool; "yes" -- only in <signal> context --
|
||||||
|
rank %Int; "0" -- 1..6 in <signal> context, 0 or 7 in <package> context --
|
||||||
|
>
|
||||||
|
*/
|
||||||
|
|
||||||
|
p.width = attribs.get<double>( "width" );
|
||||||
|
p.layer = attribs.get<int>( "layer" );
|
||||||
|
p.spacing = attribs.get_optional<double>( "spacing" );
|
||||||
|
|
||||||
|
opt_string s = attribs.get_optional<std::string>( "pour" );
|
||||||
|
if( s )
|
||||||
|
{
|
||||||
|
// (solid | hatch | cutout)
|
||||||
|
if( !s->compare( "hatch" ) )
|
||||||
|
p.pour = EPOLYGON::HATCH;
|
||||||
|
else if( !s->compare( "cutout" ) )
|
||||||
|
p.pour = EPOLYGON::CUTOUT;
|
||||||
|
else
|
||||||
|
p.pour = EPOLYGON::SOLID;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.orphans = parseOptionalBool( attribs, "orphans" );
|
||||||
|
p.thermals = parseOptionalBool( attribs, "thermals" );
|
||||||
|
p.rank = attribs.get_optional<int>( "rank" );
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
MODULE* EAGLE_PLUGIN::makeModule( CPTREE& aPackage, const std::string& aPkgName ) const
|
MODULE* EAGLE_PLUGIN::makeModule( CPTREE& aPackage, const std::string& aPkgName ) const
|
||||||
{
|
{
|
||||||
std::auto_ptr<MODULE> m( new MODULE( NULL ) );
|
std::auto_ptr<MODULE> m( new MODULE( NULL ) );
|
||||||
|
@ -1014,11 +1258,10 @@ void EAGLE_PLUGIN::packageWire( MODULE* aModule, CPTREE& aTree ) const
|
||||||
|
|
||||||
void EAGLE_PLUGIN::packagePad( MODULE* aModule, CPTREE& aTree ) const
|
void EAGLE_PLUGIN::packagePad( MODULE* aModule, CPTREE& aTree ) const
|
||||||
{
|
{
|
||||||
// pay for this tree traversal only once
|
// this is thru hole technology here, no SMDs
|
||||||
CPTREE& attrs = aTree.get_child( "<xmlattr>" );
|
EPAD e = epad( aTree );
|
||||||
|
|
||||||
/* from <ealge>/doc/eagle.dtd
|
/* from <ealge>/doc/eagle.dtd
|
||||||
|
|
||||||
<!ELEMENT pad EMPTY>
|
<!ELEMENT pad EMPTY>
|
||||||
<!ATTLIST pad
|
<!ATTLIST pad
|
||||||
name %String; #REQUIRED
|
name %String; #REQUIRED
|
||||||
|
@ -1037,19 +1280,12 @@ void EAGLE_PLUGIN::packagePad( MODULE* aModule, CPTREE& aTree ) const
|
||||||
D_PAD* pad = new D_PAD( aModule );
|
D_PAD* pad = new D_PAD( aModule );
|
||||||
aModule->m_Pads.PushBack( pad );
|
aModule->m_Pads.PushBack( pad );
|
||||||
|
|
||||||
// the DTD says these must be present, throw exception if not found
|
pad->SetPadName( FROM_UTF8( e.name.c_str() ) );
|
||||||
const std::string& name = attrs.get<std::string>( "name" );
|
|
||||||
|
|
||||||
double x = attrs.get<double>( "x" );
|
|
||||||
double y = attrs.get<double>( "y" );
|
|
||||||
double drill = attrs.get<double>( "drill" );
|
|
||||||
|
|
||||||
// pad's "Position" is not relative to the module's,
|
// pad's "Position" is not relative to the module's,
|
||||||
// whereas Pos0 is relative to the module's but is the unrotated coordinate.
|
// whereas Pos0 is relative to the module's but is the unrotated coordinate.
|
||||||
|
|
||||||
pad->SetPadName( FROM_UTF8( name.c_str() ) );
|
wxPoint padpos( kicad_x( e.x ), kicad_y( e.y ) );
|
||||||
|
|
||||||
wxPoint padpos( kicad_x( x ), kicad_y( y ) );
|
|
||||||
|
|
||||||
pad->SetPos0( padpos );
|
pad->SetPos0( padpos );
|
||||||
|
|
||||||
|
@ -1057,34 +1293,31 @@ void EAGLE_PLUGIN::packagePad( MODULE* aModule, CPTREE& aTree ) const
|
||||||
|
|
||||||
pad->SetPosition( padpos + aModule->GetPosition() );
|
pad->SetPosition( padpos + aModule->GetPosition() );
|
||||||
|
|
||||||
pad->SetDrillSize( wxSize( kicad( drill ), kicad( drill ) ) );
|
pad->SetDrillSize( wxSize( kicad( e.drill ), kicad( e.drill ) ) );
|
||||||
|
|
||||||
pad->SetLayerMask( 0x00C0FFFF ); // should tell it to go through all layers
|
pad->SetLayerMask( ALL_CU_LAYERS | SOLDERMASK_LAYER_BACK | SOLDERMASK_LAYER_FRONT );
|
||||||
|
|
||||||
// Optional according to DTD.
|
if( e.diameter )
|
||||||
opt_double diameter = attrs.get_optional<double>( "diameter" );
|
|
||||||
opt_string shape = attrs.get_optional<std::string>( "shape" );
|
|
||||||
opt_string rot = attrs.get_optional<std::string>( "rot" );
|
|
||||||
/*
|
|
||||||
opt_string stop = attrs.get_optional<std::string>( "stop" );
|
|
||||||
opt_string thermals = attrs.get_optional<std::string>( "thermals" );
|
|
||||||
opt_string first = attrs.get_optional<std::string>( "first" );
|
|
||||||
*/
|
|
||||||
|
|
||||||
if( diameter )
|
|
||||||
{
|
{
|
||||||
int kidiam = kicad( *diameter );
|
int diameter = kicad( *e.diameter );
|
||||||
pad->SetSize( wxSize( kidiam, kidiam ) );
|
pad->SetSize( wxSize( diameter, diameter ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// the pad size is optional in the eagle DTD, supply something here that is a
|
||||||
|
// 6 mil copper surround as a minimum.
|
||||||
|
int drillz = pad->GetDrillSize().x;
|
||||||
|
int diameter = std::max( drillz + 2 * Mils2iu( 6 ), int( drillz * 1.2 ) );
|
||||||
|
pad->SetSize( wxSize( diameter, diameter ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( shape ) // if not shape, our default is circle and that matches their default "round"
|
if( e.shape ) // if not shape, our default is circle and that matches their default "round"
|
||||||
{
|
{
|
||||||
// <!ENTITY % PadShape "(square | round | octagon | long | offset)">
|
// <!ENTITY % PadShape "(square | round | octagon | long | offset)">
|
||||||
|
if( *e.shape == EPAD::ROUND )
|
||||||
if( !shape->compare( "round" ) )
|
|
||||||
wxASSERT( pad->GetShape()==PAD_CIRCLE ); // verify set in D_PAD constructor
|
wxASSERT( pad->GetShape()==PAD_CIRCLE ); // verify set in D_PAD constructor
|
||||||
|
|
||||||
else if( !shape->compare( "octagon" ) )
|
else if( *e.shape == EPAD::OCTAGON )
|
||||||
{
|
{
|
||||||
wxASSERT( pad->GetShape()==PAD_CIRCLE ); // verify set in D_PAD constructor
|
wxASSERT( pad->GetShape()==PAD_CIRCLE ); // verify set in D_PAD constructor
|
||||||
|
|
||||||
|
@ -1092,7 +1325,7 @@ void EAGLE_PLUGIN::packagePad( MODULE* aModule, CPTREE& aTree ) const
|
||||||
// pad->SetShape( PAD_OCTAGON );
|
// pad->SetShape( PAD_OCTAGON );
|
||||||
}
|
}
|
||||||
|
|
||||||
else if( !shape->compare( "long" ) )
|
else if( *e.shape == EPAD::LONG )
|
||||||
{
|
{
|
||||||
pad->SetShape( PAD_OVAL );
|
pad->SetShape( PAD_OVAL );
|
||||||
|
|
||||||
|
@ -1100,19 +1333,18 @@ void EAGLE_PLUGIN::packagePad( MODULE* aModule, CPTREE& aTree ) const
|
||||||
z.x *= 2;
|
z.x *= 2;
|
||||||
pad->SetSize( z );
|
pad->SetSize( z );
|
||||||
}
|
}
|
||||||
else if( !shape->compare( "square" ) )
|
else if( *e.shape == EPAD::SQUARE )
|
||||||
{
|
{
|
||||||
pad->SetShape( PAD_RECT );
|
pad->SetShape( PAD_RECT );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( rot )
|
if( e.erot )
|
||||||
{
|
{
|
||||||
EROT r = erot( *rot );
|
pad->SetOrientation( e.erot->degrees * 10 );
|
||||||
pad->SetOrientation( r.degrees * 10 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// don't know what stop and thermals should look like now.
|
// @todo: handle stop and thermal
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1236,32 +1468,8 @@ void EAGLE_PLUGIN::packageHole( MODULE* aModule, CPTREE& aTree ) const
|
||||||
|
|
||||||
void EAGLE_PLUGIN::packageSMD( MODULE* aModule, CPTREE& aTree ) const
|
void EAGLE_PLUGIN::packageSMD( MODULE* aModule, CPTREE& aTree ) const
|
||||||
{
|
{
|
||||||
// pay for this tree traversal only once
|
ESMD e = esmd( aTree );
|
||||||
CPTREE& attrs = aTree.get_child( "<xmlattr>" );
|
int layer = kicad_layer( e.layer );
|
||||||
|
|
||||||
/*
|
|
||||||
<!ATTLIST smd
|
|
||||||
name %String; #REQUIRED
|
|
||||||
x %Coord; #REQUIRED
|
|
||||||
y %Coord; #REQUIRED
|
|
||||||
dx %Dimension; #REQUIRED
|
|
||||||
dy %Dimension; #REQUIRED
|
|
||||||
layer %Layer; #REQUIRED
|
|
||||||
roundness %Int; "0"
|
|
||||||
rot %Rotation; "R0"
|
|
||||||
stop %Bool; "yes"
|
|
||||||
thermals %Bool; "yes"
|
|
||||||
cream %Bool; "yes"
|
|
||||||
>
|
|
||||||
*/
|
|
||||||
|
|
||||||
// the DTD says these must be present, throw exception if not found
|
|
||||||
const std::string& name = attrs.get<std::string>( "name" );
|
|
||||||
double x = attrs.get<double>( "x" );
|
|
||||||
double y = attrs.get<double>( "y" );
|
|
||||||
double dx = attrs.get<double>( "dx" );
|
|
||||||
double dy = attrs.get<double>( "dy" );
|
|
||||||
int layer = attrs.get<int>( "layer" );
|
|
||||||
|
|
||||||
if( !IsValidCopperLayerIndex( layer ) )
|
if( !IsValidCopperLayerIndex( layer ) )
|
||||||
{
|
{
|
||||||
|
@ -1271,15 +1479,14 @@ void EAGLE_PLUGIN::packageSMD( MODULE* aModule, CPTREE& aTree ) const
|
||||||
D_PAD* pad = new D_PAD( aModule );
|
D_PAD* pad = new D_PAD( aModule );
|
||||||
aModule->m_Pads.PushBack( pad );
|
aModule->m_Pads.PushBack( pad );
|
||||||
|
|
||||||
|
pad->SetPadName( FROM_UTF8( e.name.c_str() ) );
|
||||||
pad->SetPadName( FROM_UTF8( name.c_str() ) );
|
|
||||||
pad->SetShape( PAD_RECT );
|
pad->SetShape( PAD_RECT );
|
||||||
pad->SetAttribute( PAD_SMD );
|
pad->SetAttribute( PAD_SMD );
|
||||||
|
|
||||||
// pad's "Position" is not relative to the module's,
|
// pad's "Position" is not relative to the module's,
|
||||||
// whereas Pos0 is relative to the module's but is the unrotated coordinate.
|
// whereas Pos0 is relative to the module's but is the unrotated coordinate.
|
||||||
|
|
||||||
wxPoint padpos( kicad_x( x ), kicad_y( y ) );
|
wxPoint padpos( kicad_x( e.x ), kicad_y( e.y ) );
|
||||||
|
|
||||||
pad->SetPos0( padpos );
|
pad->SetPos0( padpos );
|
||||||
|
|
||||||
|
@ -1287,33 +1494,26 @@ void EAGLE_PLUGIN::packageSMD( MODULE* aModule, CPTREE& aTree ) const
|
||||||
|
|
||||||
pad->SetPosition( padpos + aModule->GetPosition() );
|
pad->SetPosition( padpos + aModule->GetPosition() );
|
||||||
|
|
||||||
pad->SetSize( wxSize( kicad( dx ), kicad( dy ) ) );
|
pad->SetSize( wxSize( kicad( e.dx ), kicad( e.dy ) ) );
|
||||||
|
|
||||||
pad->SetLayer( kicad_layer( layer ) );
|
pad->SetLayer( layer );
|
||||||
pad->SetLayerMask( 0x00888000 );
|
pad->SetLayerMask( LAYER_FRONT | SOLDERPASTE_LAYER_FRONT | SOLDERMASK_LAYER_FRONT );
|
||||||
|
|
||||||
// Optional according to DTD
|
// Optional according to DTD
|
||||||
opt_double roundness = attrs.get_optional<double>( "roundness" );
|
if( e.roundness ) // set set shape to PAD_RECT above, in case roundness is not present
|
||||||
opt_string rot = attrs.get_optional<std::string>( "rot" );
|
|
||||||
opt_string stop = attrs.get_optional<std::string>( "stop" );
|
|
||||||
opt_string thermals = attrs.get_optional<std::string>( "thermals" );
|
|
||||||
opt_string cream = attrs.get_optional<std::string>( "cream" );
|
|
||||||
|
|
||||||
if( roundness ) // set set shape to PAD_RECT above, in case roundness is not present
|
|
||||||
{
|
{
|
||||||
if( *roundness >= 75 ) // roundness goes from 0-100%
|
if( *e.roundness >= 75 ) // roundness goes from 0-100% as integer
|
||||||
{
|
{
|
||||||
if( dy == dx )
|
if( e.dy == e.dx )
|
||||||
pad->SetShape( PAD_ROUND );
|
pad->SetShape( PAD_ROUND );
|
||||||
else
|
else
|
||||||
pad->SetShape( PAD_OVAL );
|
pad->SetShape( PAD_OVAL );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( rot )
|
if( e.erot )
|
||||||
{
|
{
|
||||||
EROT r = erot( *rot );
|
pad->SetOrientation( e.erot->degrees * 10 );
|
||||||
pad->SetOrientation( r.degrees * 10 );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// don't know what stop, thermals, and cream should look like now.
|
// don't know what stop, thermals, and cream should look like now.
|
||||||
|
@ -1413,14 +1613,54 @@ void EAGLE_PLUGIN::loadSignals( CPTREE& aSignals, const std::string& aXpath )
|
||||||
|
|
||||||
std::string key = makeKey( reference, pad ) ;
|
std::string key = makeKey( reference, pad ) ;
|
||||||
|
|
||||||
D(printf( "adding refname:'%s' pad:'%s' netcode:%d netname:'%s'\n",
|
// D(printf( "adding refname:'%s' pad:'%s' netcode:%d netname:'%s'\n", reference.c_str(), pad.c_str(), netCode, nname.c_str() );)
|
||||||
reference.c_str(), pad.c_str(), netCode, nname.c_str() );)
|
|
||||||
|
|
||||||
m_pads_to_nets[ key ] = ENET( netCode, nname );
|
m_pads_to_nets[ key ] = ENET( netCode, nname );
|
||||||
}
|
}
|
||||||
|
|
||||||
else if( !it->first.compare( "polygon" ) )
|
else if( !it->first.compare( "polygon" ) )
|
||||||
{
|
{
|
||||||
|
EPOLYGON p = epolygon( it->second );
|
||||||
|
int layer = kicad_layer( p.layer );
|
||||||
|
|
||||||
|
if( IsValidCopperLayerIndex( layer ) )
|
||||||
|
{
|
||||||
|
// use a "netcode = 0" type ZONE:
|
||||||
|
ZONE_CONTAINER* zone = new ZONE_CONTAINER( m_board );
|
||||||
|
m_board->Add( zone, ADD_APPEND );
|
||||||
|
|
||||||
|
zone->SetTimeStamp( timeStamp( it->second ) );
|
||||||
|
zone->SetLayer( layer );
|
||||||
|
zone->SetNet( netCode );
|
||||||
|
zone->SetNetName( netName );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int outline_hatch = CPolyLine::DIAGONAL_EDGE;
|
||||||
|
|
||||||
|
bool first = true;
|
||||||
|
for( CITER vi = it->second.begin(); vi != it->second.end(); ++vi )
|
||||||
|
{
|
||||||
|
if( vi->first.compare( "vertex" ) ) // skip <xmlattr> node
|
||||||
|
continue;
|
||||||
|
|
||||||
|
EVERTEX v = evertex( vi->second );
|
||||||
|
|
||||||
|
// the ZONE_CONTAINER API needs work, as you can see:
|
||||||
|
if( first )
|
||||||
|
{
|
||||||
|
zone->m_Poly->Start( layer, kicad_x( v.x ), kicad_y( v.y ), outline_hatch );
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
zone->AppendCorner( wxPoint( kicad_x( v.x ), kicad_y( v.y ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
zone->m_Poly->Close();
|
||||||
|
|
||||||
|
zone->m_Poly->SetHatch( outline_hatch,
|
||||||
|
Mils2iu( zone->m_Poly->GetDefaultHatchPitchMils() ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,6 +57,7 @@ struct ENET
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef std::map< std::string, ENET > NET_MAP;
|
typedef std::map< std::string, ENET > NET_MAP;
|
||||||
|
typedef NET_MAP::const_iterator NET_MAP_CITER;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#include
|
#include
|
||||||
|
@ -81,7 +82,10 @@ struct EATTR;
|
||||||
struct ECIRCLE;
|
struct ECIRCLE;
|
||||||
struct ETEXT;
|
struct ETEXT;
|
||||||
struct ERECT;
|
struct ERECT;
|
||||||
|
struct EPAD;
|
||||||
|
struct ESMD;
|
||||||
|
struct EVERTEX;
|
||||||
|
struct EPOLYGON;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class EAGLE_PLUGIN
|
* Class EAGLE_PLUGIN
|
||||||
|
@ -190,20 +194,26 @@ private:
|
||||||
|
|
||||||
void loadElements( CPTREE& aElements, const std::string& aXpath );
|
void loadElements( CPTREE& aElements, const std::string& aXpath );
|
||||||
|
|
||||||
|
// none of the 'e'funcs do any "to KiCad" conversion, they merely read the XML into binary:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function ewire
|
* Function ewire
|
||||||
* converts a <wire>'s xml attributes to binary without additional conversion.
|
* converts a <wire>'s xml attributes to binary without additional conversion.
|
||||||
* @param aResult is an EWIRE to fill in with the <wire> data converted to binary.
|
* @param aResult is an EWIRE to fill in with the <wire> data converted to binary.
|
||||||
*/
|
*/
|
||||||
EWIRE ewire( CPTREE& aWire ) const;
|
EWIRE ewire( CPTREE& aWire ) const;
|
||||||
|
|
||||||
EVIA evia( CPTREE& aVia ) const;
|
EVIA evia( CPTREE& aVia ) const;
|
||||||
|
|
||||||
ECIRCLE ecircle( CPTREE& aCircle ) const;
|
ECIRCLE ecircle( CPTREE& aCircle ) const;
|
||||||
ETEXT etext( CPTREE& aText ) const;
|
ETEXT etext( CPTREE& aText ) const;
|
||||||
ERECT erect( CPTREE& aRect ) const;
|
ERECT erect( CPTREE& aRect ) const;
|
||||||
|
|
||||||
EROT erot( const std::string& aRot ) const;
|
EROT erot( const std::string& aRot ) const;
|
||||||
|
EPAD epad( CPTREE& aPad ) const;
|
||||||
|
ESMD esmd( CPTREE& aSMD ) const;
|
||||||
|
EVERTEX evertex( CPTREE& aVertex ) const;
|
||||||
|
EPOLYGON epolygon( CPTREE& aPolygon ) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function eattr
|
* Function eattr
|
||||||
|
|
|
@ -1152,7 +1152,7 @@ void SPECCTRA_DB::FromBOARD( BOARD* aBoard ) throw( IO_ERROR )
|
||||||
PATH* mainPolygon = new PATH( plane, T_polygon );
|
PATH* mainPolygon = new PATH( plane, T_polygon );
|
||||||
plane->SetShape( mainPolygon );
|
plane->SetShape( mainPolygon );
|
||||||
|
|
||||||
plane->name = TO_UTF8( item->m_Netname );
|
plane->name = TO_UTF8( item->GetNetName() );
|
||||||
|
|
||||||
if( plane->name.size() == 0 )
|
if( plane->name.size() == 0 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -800,7 +800,7 @@ void PCB_EDIT_FRAME::Edit_Zone_Params( wxDC* DC, ZONE_CONTAINER* aZone )
|
||||||
NETINFO_ITEM* net = GetBoard()->FindNet( zoneInfo.m_NetcodeSelection );
|
NETINFO_ITEM* net = GetBoard()->FindNet( zoneInfo.m_NetcodeSelection );
|
||||||
|
|
||||||
if( net ) // net == NULL should not occur
|
if( net ) // net == NULL should not occur
|
||||||
aZone->m_Netname = net->GetNetname();
|
aZone->SetNetName( net->GetNetname() );
|
||||||
|
|
||||||
// Combine zones if possible
|
// Combine zones if possible
|
||||||
GetBoard()->AreaPolygonModified( &_AuxiliaryList, aZone, true, s_Verbose );
|
GetBoard()->AreaPolygonModified( &_AuxiliaryList, aZone, true, s_Verbose );
|
||||||
|
|
|
@ -74,7 +74,6 @@ DIALOG_NON_COPPER_ZONES_EDITOR::DIALOG_NON_COPPER_ZONES_EDITOR( PCB_BASE_FRAME*
|
||||||
|
|
||||||
void DIALOG_NON_COPPER_ZONES_EDITOR::Init()
|
void DIALOG_NON_COPPER_ZONES_EDITOR::Init()
|
||||||
{
|
{
|
||||||
SetFocus();
|
|
||||||
SetReturnCode( ZONE_ABORT ); // Will be changed on button click
|
SetReturnCode( ZONE_ABORT ); // Will be changed on button click
|
||||||
|
|
||||||
m_FillModeCtrl->SetSelection( m_settings.m_FillMode ? 1 : 0 );
|
m_FillModeCtrl->SetSelection( m_settings.m_FillMode ? 1 : 0 );
|
||||||
|
|
|
@ -282,7 +282,7 @@ int BOARD::ClipAreaPolygon( PICKED_ITEMS_LIST * aNewZonesList,
|
||||||
{
|
{
|
||||||
wxString str;
|
wxString str;
|
||||||
str.Printf( wxT( "Area %08lX of net \"%s\" has arcs intersecting other sides.\n" ),
|
str.Printf( wxT( "Area %08lX of net \"%s\" has arcs intersecting other sides.\n" ),
|
||||||
aCurrArea->GetTimeStamp(), GetChars( aCurrArea->m_Netname ) );
|
aCurrArea->GetTimeStamp(), GetChars( aCurrArea->GetNetName() ) );
|
||||||
str += wxT( "This may cause problems with other editing operations,\n" );
|
str += wxT( "This may cause problems with other editing operations,\n" );
|
||||||
str += wxT( "such as adding cutouts. It can't be fixed automatically.\n" );
|
str += wxT( "such as adding cutouts. It can't be fixed automatically.\n" );
|
||||||
str += wxT( "Manual correction is recommended." );
|
str += wxT( "Manual correction is recommended." );
|
||||||
|
@ -305,7 +305,7 @@ int BOARD::ClipAreaPolygon( PICKED_ITEMS_LIST * aNewZonesList,
|
||||||
{
|
{
|
||||||
wxString str;
|
wxString str;
|
||||||
str.Printf( wxT( "Area %08lX of net \"%s\" is self-intersecting and will be clipped.\n" ),
|
str.Printf( wxT( "Area %08lX of net \"%s\" is self-intersecting and will be clipped.\n" ),
|
||||||
aCurrArea->GetTimeStamp(), GetChars( aCurrArea->m_Netname ) );
|
aCurrArea->GetTimeStamp(), GetChars( aCurrArea->GetNetName() ) );
|
||||||
str += wxT( "This may result in splitting the area.\n" );
|
str += wxT( "This may result in splitting the area.\n" );
|
||||||
str += wxT( "If the area is complex, this may take a few seconds." );
|
str += wxT( "If the area is complex, this may take a few seconds." );
|
||||||
wxMessageBox( str );
|
wxMessageBox( str );
|
||||||
|
@ -482,7 +482,7 @@ int BOARD::CombineAllAreasInNet( PICKED_ITEMS_LIST* aDeletedList, int aNetCode,
|
||||||
str.Printf( wxT( "Areas %d and %d of net \"%s\" intersect, but some of the intersecting sides are arcs.\n" ),
|
str.Printf( wxT( "Areas %d and %d of net \"%s\" intersect, but some of the intersecting sides are arcs.\n" ),
|
||||||
ia1 + 1,
|
ia1 + 1,
|
||||||
ia2 + 1,
|
ia2 + 1,
|
||||||
GetChars( curr_area->m_Netname ) );
|
GetChars( curr_area->GetNetName() ) );
|
||||||
str += wxT( "Therefore, these areas can't be combined." );
|
str += wxT( "Therefore, these areas can't be combined." );
|
||||||
wxMessageBox( str );
|
wxMessageBox( str );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue