Add priority level to zones.
This commit is contained in:
parent
c0d39da548
commit
ee8d721c3c
|
@ -8,6 +8,7 @@
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
#include <fctsys.h>
|
#include <fctsys.h>
|
||||||
|
#include <polygons_defs.h>
|
||||||
#include <pcbnew.h>
|
#include <pcbnew.h>
|
||||||
#include <wxPcbStruct.h>
|
#include <wxPcbStruct.h>
|
||||||
#include <trigo.h>
|
#include <trigo.h>
|
||||||
|
@ -17,6 +18,7 @@
|
||||||
#include <class_track.h>
|
#include <class_track.h>
|
||||||
#include <class_drawsegment.h>
|
#include <class_drawsegment.h>
|
||||||
#include <class_pcb_text.h>
|
#include <class_pcb_text.h>
|
||||||
|
#include <class_zone.h>
|
||||||
|
|
||||||
|
|
||||||
/* Exported functions */
|
/* Exported functions */
|
||||||
|
@ -130,6 +132,90 @@ void TEXTE_PCB::TransformShapeWithClearanceToPolygon( std::vector <CPolyPt>& aCo
|
||||||
aCornerBuffer.back().end_contour = true;
|
aCornerBuffer.back().end_contour = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Function TransformShapeWithClearanceToPolygon
|
||||||
|
* Convert the track shape to a closed polygon
|
||||||
|
* Used in filling zones calculations
|
||||||
|
* Circles (vias) and arcs (ends of tracks) are approximated by segments
|
||||||
|
* param aCornerBuffer = a buffer to store the polygon
|
||||||
|
* param aClearanceValue = the clearance around the pad
|
||||||
|
* param aCircleToSegmentsCount = the number of segments to approximate a circle
|
||||||
|
* param aCorrectionFactor = the correction to apply to circles radius to keep
|
||||||
|
* param aAddClearance = true to add a clearance area to the polygon
|
||||||
|
* false to create the outline polygon.
|
||||||
|
* clearance when the circle is approximated by segment bigger or equal
|
||||||
|
* to the real clearance value (usually near from 1.0)
|
||||||
|
*/
|
||||||
|
void ZONE_CONTAINER::TransformShapeWithClearanceToPolygon( std::vector <CPolyPt>& aCornerBuffer,
|
||||||
|
int aClearanceValue,
|
||||||
|
int aCircleToSegmentsCount,
|
||||||
|
double aCorrectionFactor,
|
||||||
|
bool aAddClearance )
|
||||||
|
{
|
||||||
|
|
||||||
|
/* Creates the main polygon (i.e. the filled area using only one outline)
|
||||||
|
* and reserve a clearance margin around the outlines and holes
|
||||||
|
*/
|
||||||
|
std::vector <CPolyPt> zoneOutines;
|
||||||
|
BuildFilledPolysListData( NULL, &zoneOutines );
|
||||||
|
int clearance = 0;
|
||||||
|
if( aAddClearance )
|
||||||
|
{
|
||||||
|
GetClearance();
|
||||||
|
if( aClearanceValue > clearance )
|
||||||
|
clearance = aClearanceValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate the polygon with clearance and holes
|
||||||
|
// holes are linked to the main outline, so only one polygon should be created.
|
||||||
|
KPolygonSet polyset_zone_solid_areas;
|
||||||
|
std::vector<KPolyPoint> cornerslist;
|
||||||
|
unsigned ic = 0;
|
||||||
|
unsigned corners_count = zoneOutines.size();
|
||||||
|
while( ic < corners_count )
|
||||||
|
{
|
||||||
|
cornerslist.clear();
|
||||||
|
KPolygon poly;
|
||||||
|
{
|
||||||
|
for( ; ic < corners_count; ic++ )
|
||||||
|
{
|
||||||
|
CPolyPt* corner = &zoneOutines[ic];
|
||||||
|
cornerslist.push_back( KPolyPoint( corner->x, corner->y ) );
|
||||||
|
if( corner->end_contour )
|
||||||
|
{
|
||||||
|
ic++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bpl::set_points( poly, cornerslist.begin(), cornerslist.end() );
|
||||||
|
polyset_zone_solid_areas.push_back( poly );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
polyset_zone_solid_areas += clearance;
|
||||||
|
|
||||||
|
// Put the resultng polygon in buffer
|
||||||
|
for( unsigned ii = 0; ii < polyset_zone_solid_areas.size(); ii++ )
|
||||||
|
{
|
||||||
|
KPolygon& poly = polyset_zone_solid_areas[ii];
|
||||||
|
CPolyPt corner( 0, 0, false );
|
||||||
|
|
||||||
|
for( unsigned jj = 0; jj < poly.size(); jj++ )
|
||||||
|
{
|
||||||
|
KPolyPoint point = *(poly.begin() + jj);
|
||||||
|
corner.x = point.x();
|
||||||
|
corner.y = point.y();
|
||||||
|
corner.end_contour = false;
|
||||||
|
aCornerBuffer.push_back( corner );
|
||||||
|
}
|
||||||
|
|
||||||
|
corner.end_contour = true;
|
||||||
|
aCornerBuffer.pop_back();
|
||||||
|
aCornerBuffer.push_back( corner );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function TransformShapeWithClearanceToPolygon
|
* Function TransformShapeWithClearanceToPolygon
|
||||||
|
|
|
@ -55,6 +55,7 @@ ZONE_CONTAINER::ZONE_CONTAINER( BOARD* parent ) :
|
||||||
m_CornerSelection = -1;
|
m_CornerSelection = -1;
|
||||||
m_IsFilled = false; // fill status : true when the zone is filled
|
m_IsFilled = false; // fill status : true when the zone is filled
|
||||||
m_FillMode = 0; // How to fill areas: 0 = use filled polygons, != 0 fill with segments
|
m_FillMode = 0; // How to fill areas: 0 = use filled polygons, != 0 fill with segments
|
||||||
|
m_priority = 0;
|
||||||
smoothedPoly = NULL;
|
smoothedPoly = NULL;
|
||||||
cornerSmoothingType = ZONE_SETTING::SMOOTHING_NONE;
|
cornerSmoothingType = ZONE_SETTING::SMOOTHING_NONE;
|
||||||
cornerRadius = 0;
|
cornerRadius = 0;
|
||||||
|
@ -77,6 +78,7 @@ ZONE_CONTAINER::ZONE_CONTAINER( const ZONE_CONTAINER& aZone ) :
|
||||||
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)
|
||||||
|
m_priority = aZone.m_priority;
|
||||||
m_ArcToSegmentsCount = aZone.m_ArcToSegmentsCount;
|
m_ArcToSegmentsCount = aZone.m_ArcToSegmentsCount;
|
||||||
m_PadOption = aZone.m_PadOption;
|
m_PadOption = aZone.m_PadOption;
|
||||||
m_ThermalReliefGap = aZone.m_ThermalReliefGap;
|
m_ThermalReliefGap = aZone.m_ThermalReliefGap;
|
||||||
|
@ -677,16 +679,21 @@ void ZONE_CONTAINER::DisplayInfo( EDA_DRAW_FRAME* frame )
|
||||||
}
|
}
|
||||||
|
|
||||||
frame->AppendMsgPanel( _( "NetName" ), msg, RED );
|
frame->AppendMsgPanel( _( "NetName" ), msg, RED );
|
||||||
|
#if 1
|
||||||
|
// Display net code : (useful in test or debug)
|
||||||
|
msg.Printf( wxT( "%d" ), GetNet() );
|
||||||
|
frame->AppendMsgPanel( _( "NetCode" ), msg, RED );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Display priority level
|
||||||
|
msg.Printf( wxT( "%d" ), GetPriority() );
|
||||||
|
frame->AppendMsgPanel( _( "Priority" ), msg, BLUE );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
frame->AppendMsgPanel( _( "Non Copper Zone" ), wxEmptyString, RED );
|
frame->AppendMsgPanel( _( "Non Copper Zone" ), wxEmptyString, RED );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Display net code : (useful in test or debug) */
|
|
||||||
msg.Printf( wxT( "%d" ), GetNet() );
|
|
||||||
frame->AppendMsgPanel( _( "NetCode" ), msg, RED );
|
|
||||||
|
|
||||||
msg = board->GetLayerName( m_Layer );
|
msg = board->GetLayerName( m_Layer );
|
||||||
frame->AppendMsgPanel( _( "Layer" ), msg, BROWN );
|
frame->AppendMsgPanel( _( "Layer" ), msg, BROWN );
|
||||||
|
|
||||||
|
|
|
@ -124,6 +124,10 @@ private:
|
||||||
CPolyLine* smoothedPoly; // Corner-smoothed version of m_Poly
|
CPolyLine* smoothedPoly; // Corner-smoothed version of m_Poly
|
||||||
int cornerSmoothingType;
|
int cornerSmoothingType;
|
||||||
unsigned int cornerRadius;
|
unsigned int cornerRadius;
|
||||||
|
// Priority: when a zone outline is inside and other zone, if its priority is highter
|
||||||
|
// the other zone priority, it will be created inside.
|
||||||
|
// if priorities are equal, a DRC erroc is set
|
||||||
|
unsigned m_priority;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ZONE_CONTAINER( BOARD* parent );
|
ZONE_CONTAINER( BOARD* parent );
|
||||||
|
@ -149,6 +153,18 @@ public:
|
||||||
const wxPoint GetPosition() const; // overload
|
const wxPoint GetPosition() const; // overload
|
||||||
void SetPosition( const wxPoint& aPos ); // overload
|
void SetPosition( const wxPoint& aPos ); // overload
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function SetPriority
|
||||||
|
* @param aPriority = the priority level
|
||||||
|
*/
|
||||||
|
void SetPriority( unsigned aPriority ) { m_priority = aPriority; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function GetPriority
|
||||||
|
* @return the priority level of this zone
|
||||||
|
*/
|
||||||
|
unsigned GetPriority() const { return m_priority; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function copy
|
* Function copy
|
||||||
* copy useful data from the source.
|
* copy useful data from the source.
|
||||||
|
@ -305,11 +321,13 @@ public:
|
||||||
* in order to have drawable (and plottable) filled polygons
|
* in order to have drawable (and plottable) filled polygons
|
||||||
* drawable filled polygons are polygons without hole
|
* drawable filled polygons are polygons without hole
|
||||||
* @param aPcb: the current board (can be NULL for non copper zones)
|
* @param aPcb: the current board (can be NULL for non copper zones)
|
||||||
|
* @param aCornerBuffer: A reference to a buffer to put polygon corners, or NULL
|
||||||
|
* if NULL (default), uses m_FilledPolysList and fill current zone.
|
||||||
* @return number of polygons
|
* @return number of polygons
|
||||||
* This function does not add holes for pads and tracks but calls
|
* This function does not add holes for pads and tracks but calls
|
||||||
* AddClearanceAreasPolygonsToPolysList() to do that for copper layers
|
* AddClearanceAreasPolygonsToPolysList() to do that for copper layers
|
||||||
*/
|
*/
|
||||||
int BuildFilledPolysListData( BOARD* aPcb );
|
int BuildFilledPolysListData( BOARD* aPcb, std::vector <CPolyPt>* aCornerBuffer = NULL );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function AddClearanceAreasPolygonsToPolysList
|
* Function AddClearanceAreasPolygonsToPolysList
|
||||||
|
@ -484,7 +502,26 @@ public:
|
||||||
return m_Poly->GetHatchStyle();
|
return m_Poly->GetHatchStyle();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Function TransformShapeWithClearanceToPolygon
|
||||||
|
* Convert the track shape to a closed polygon
|
||||||
|
* Used in filling zones calculations
|
||||||
|
* Circles (vias) and arcs (ends of tracks) are approximated by segments
|
||||||
|
* @param aCornerBuffer = a buffer to store the polygon
|
||||||
|
* @param aClearanceValue = the clearance around the pad
|
||||||
|
* @param aCircleToSegmentsCount = the number of segments to approximate a circle
|
||||||
|
* @param aCorrectionFactor = the correction to apply to circles radius to keep
|
||||||
|
* @param aAddClearance = true to add a clearance area to the polygon
|
||||||
|
* false to create the outline polygon.
|
||||||
|
* clearance when the circle is approximated by segment bigger or equal
|
||||||
|
* to the real clearance value (usually near from 1.0)
|
||||||
|
*/
|
||||||
|
void TransformShapeWithClearanceToPolygon( std::vector <CPolyPt>& aCornerBuffer,
|
||||||
|
int aClearanceValue,
|
||||||
|
int aCircleToSegmentsCount,
|
||||||
|
double aCorrectionFactor,
|
||||||
|
bool aAddClearance );
|
||||||
|
/**
|
||||||
* Function IsSame
|
* Function IsSame
|
||||||
* tests if 2 zones are equivalent:
|
* tests if 2 zones are equivalent:
|
||||||
* 2 zones are equivalent if they have same parameters and same outlines
|
* 2 zones are equivalent if they have same parameters and same outlines
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
ZONE_SETTING::ZONE_SETTING( void )
|
ZONE_SETTING::ZONE_SETTING( void )
|
||||||
{
|
{
|
||||||
|
m_ZonePriority = 0;
|
||||||
m_FillMode = 0; // Mode for filling zone : 1 use segments, 0 use polygons
|
m_FillMode = 0; // Mode for filling zone : 1 use segments, 0 use polygons
|
||||||
m_ZoneClearance = 200; // Clearance value
|
m_ZoneClearance = 200; // Clearance value
|
||||||
m_ZoneMinThickness = 100; // Min thickness value in filled areas
|
m_ZoneMinThickness = 100; // Min thickness value in filled areas
|
||||||
|
@ -50,7 +51,8 @@ ZONE_SETTING::ZONE_SETTING( void )
|
||||||
*/
|
*/
|
||||||
void ZONE_SETTING::ImportSetting( const ZONE_CONTAINER& aSource )
|
void ZONE_SETTING::ImportSetting( const ZONE_CONTAINER& aSource )
|
||||||
{
|
{
|
||||||
m_FillMode = aSource.m_FillMode;
|
m_ZonePriority = aSource.GetPriority();
|
||||||
|
m_FillMode = aSource.m_FillMode;
|
||||||
m_ZoneClearance = aSource.m_ZoneClearance;
|
m_ZoneClearance = aSource.m_ZoneClearance;
|
||||||
m_ZoneMinThickness = aSource.m_ZoneMinThickness;
|
m_ZoneMinThickness = aSource.m_ZoneMinThickness;
|
||||||
m_NetcodeSelection = aSource.GetNet();
|
m_NetcodeSelection = aSource.GetNet();
|
||||||
|
@ -88,6 +90,7 @@ void ZONE_SETTING::ExportSetting( ZONE_CONTAINER& aTarget, bool aFullExport )
|
||||||
aTarget.SetCornerRadius( cornerRadius );
|
aTarget.SetCornerRadius( cornerRadius );
|
||||||
if( aFullExport )
|
if( aFullExport )
|
||||||
{
|
{
|
||||||
|
aTarget.SetPriority( m_ZonePriority );
|
||||||
aTarget.SetNet( m_NetcodeSelection );
|
aTarget.SetNet( m_NetcodeSelection );
|
||||||
aTarget.SetLayer( m_CurrentZone_Layer );
|
aTarget.SetLayer( m_CurrentZone_Layer );
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,8 @@ public:
|
||||||
// Mode for filling zone : 1 use segments, 0 use polygons
|
// Mode for filling zone : 1 use segments, 0 use polygons
|
||||||
int m_FillMode;
|
int m_FillMode;
|
||||||
|
|
||||||
|
int m_ZonePriority; // Priority (0 ... N) of the zone
|
||||||
|
|
||||||
int m_ZoneClearance; // Clearance value
|
int m_ZoneClearance; // Clearance value
|
||||||
int m_ZoneMinThickness; // Min thickness value in filled areas
|
int m_ZoneMinThickness; // Min thickness value in filled areas
|
||||||
int m_NetcodeSelection; // Net code selection for the current zone
|
int m_NetcodeSelection; // Net code selection for the current zone
|
||||||
|
|
|
@ -119,6 +119,8 @@ void DIALOG_COPPER_ZONE::initDialog()
|
||||||
m_CopperWidthValue->Enable( true );
|
m_CopperWidthValue->Enable( true );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_PriorityLevelCtrl->SetValue( m_Zone_Setting->m_ZonePriority );
|
||||||
|
|
||||||
AddUnitSymbol( *m_AntipadSizeText, g_UserUnit );
|
AddUnitSymbol( *m_AntipadSizeText, g_UserUnit );
|
||||||
AddUnitSymbol( *m_CopperBridgeWidthText, g_UserUnit );
|
AddUnitSymbol( *m_CopperBridgeWidthText, g_UserUnit );
|
||||||
PutValueInLocalUnits( *m_AntipadSizeValue,
|
PutValueInLocalUnits( *m_AntipadSizeValue,
|
||||||
|
@ -323,6 +325,8 @@ bool DIALOG_COPPER_ZONE::AcceptOptions( bool aPromptForErrors, bool aUseExportab
|
||||||
txtvalue = m_cornerSmoothingCtrl->GetValue();
|
txtvalue = m_cornerSmoothingCtrl->GetValue();
|
||||||
m_Zone_Setting->SetCornerRadius( ReturnValueFromString( g_UserUnit, txtvalue, m_Parent->GetInternalUnits() ) );
|
m_Zone_Setting->SetCornerRadius( ReturnValueFromString( g_UserUnit, txtvalue, m_Parent->GetInternalUnits() ) );
|
||||||
|
|
||||||
|
m_Zone_Setting->m_ZonePriority = m_PriorityLevelCtrl->GetValue();
|
||||||
|
|
||||||
if( m_OrientEdgesOpt->GetSelection() == 0 )
|
if( m_OrientEdgesOpt->GetSelection() == 0 )
|
||||||
g_Zone_45_Only = false;
|
g_Zone_45_Only = false;
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,247 +1,256 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// C++ code generated with wxFormBuilder (version Nov 18 2010)
|
// C++ code generated with wxFormBuilder (version Jun 30 2011)
|
||||||
// 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, wxDialog )
|
||||||
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 ) : wxDialog( 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;
|
wxBoxSizer* bSizer7;
|
||||||
bSizer7 = new wxBoxSizer( wxVERTICAL );
|
bSizer7 = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
m_staticText2 = new wxStaticText( this, wxID_ANY, _("Net:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_staticText2 = new wxStaticText( this, wxID_ANY, _("Net:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_staticText2->Wrap( -1 );
|
m_staticText2->Wrap( -1 );
|
||||||
bSizer7->Add( m_staticText2, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
bSizer7->Add( m_staticText2, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_ListNetNameSelection = new wxListBox( this, ID_NETNAME_SELECTION, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
|
m_ListNetNameSelection = new wxListBox( this, ID_NETNAME_SELECTION, wxDefaultPosition, wxDefaultSize, 0, NULL, 0 );
|
||||||
bSizer7->Add( m_ListNetNameSelection, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
bSizer7->Add( m_ListNetNameSelection, 1, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_OptionsBoxSizer->Add( bSizer7, 1, wxEXPAND, 5 );
|
m_OptionsBoxSizer->Add( bSizer7, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
wxStaticBoxSizer* m_NetSortOptSizer;
|
wxStaticBoxSizer* m_NetSortOptSizer;
|
||||||
m_NetSortOptSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Net Filtering") ), wxVERTICAL );
|
m_NetSortOptSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Net Filtering") ), wxVERTICAL );
|
||||||
|
|
||||||
m_staticText16 = new wxStaticText( this, wxID_ANY, _("Display:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_staticText16 = new wxStaticText( this, wxID_ANY, _("Display:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_staticText16->Wrap( -1 );
|
m_staticText16->Wrap( -1 );
|
||||||
m_NetSortOptSizer->Add( m_staticText16, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
m_NetSortOptSizer->Add( m_staticText16, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
|
|
||||||
wxString m_NetDisplayOptionChoices[] = { _("Show all (alphabetical)"), _("Show all (advanced)"), _("Filtered (alphabetical)"), _("Filtered (advanced)") };
|
wxString m_NetDisplayOptionChoices[] = { _("Show all (alphabetical)"), _("Show all (advanced)"), _("Filtered (alphabetical)"), _("Filtered (advanced)") };
|
||||||
int m_NetDisplayOptionNChoices = sizeof( m_NetDisplayOptionChoices ) / sizeof( wxString );
|
int m_NetDisplayOptionNChoices = sizeof( m_NetDisplayOptionChoices ) / sizeof( wxString );
|
||||||
m_NetDisplayOption = new wxChoice( this, ID_M_NETDISPLAYOPTION, wxDefaultPosition, wxDefaultSize, m_NetDisplayOptionNChoices, m_NetDisplayOptionChoices, 0 );
|
m_NetDisplayOption = new wxChoice( this, ID_M_NETDISPLAYOPTION, wxDefaultPosition, wxDefaultSize, m_NetDisplayOptionNChoices, m_NetDisplayOptionChoices, 0 );
|
||||||
m_NetDisplayOption->SetSelection( 0 );
|
m_NetDisplayOption->SetSelection( 0 );
|
||||||
m_NetSortOptSizer->Add( m_NetDisplayOption, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
m_NetSortOptSizer->Add( m_NetDisplayOption, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
m_staticText5 = new wxStaticText( this, wxID_ANY, _("Hidden net filter:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_staticText5 = new wxStaticText( this, wxID_ANY, _("Hidden net filter:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_staticText5->Wrap( -1 );
|
m_staticText5->Wrap( -1 );
|
||||||
m_NetSortOptSizer->Add( m_staticText5, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
m_NetSortOptSizer->Add( m_staticText5, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_DoNotShowNetNameFilter = new wxTextCtrl( this, ID_TEXTCTRL_NETNAMES_FILTER, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
|
m_DoNotShowNetNameFilter = new wxTextCtrl( this, ID_TEXTCTRL_NETNAMES_FILTER, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
|
||||||
m_DoNotShowNetNameFilter->SetToolTip( _("Pattern to filter net names in filtered list.\nNet names matching this pattern are not displayed.") );
|
m_DoNotShowNetNameFilter->SetToolTip( _("Pattern to filter net names in filtered list.\nNet names matching this pattern are not displayed.") );
|
||||||
|
|
||||||
m_NetSortOptSizer->Add( m_DoNotShowNetNameFilter, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
m_NetSortOptSizer->Add( m_DoNotShowNetNameFilter, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_staticText51 = new wxStaticText( this, wxID_ANY, _("Visible net filter:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_staticText51 = new wxStaticText( this, wxID_ANY, _("Visible net filter:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_staticText51->Wrap( -1 );
|
m_staticText51->Wrap( -1 );
|
||||||
m_NetSortOptSizer->Add( m_staticText51, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
m_NetSortOptSizer->Add( m_staticText51, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_ShowNetNameFilter = new wxTextCtrl( this, ID_TEXTCTRL_NETNAMES_FILTER, _("*"), wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
|
m_ShowNetNameFilter = new wxTextCtrl( this, ID_TEXTCTRL_NETNAMES_FILTER, _("*"), wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER );
|
||||||
m_ShowNetNameFilter->SetToolTip( _("Pattern to filter net names in filtered list.\nOnly net names matching this pattern are displayed.") );
|
m_ShowNetNameFilter->SetToolTip( _("Pattern to filter net names in filtered list.\nOnly net names matching this pattern are displayed.") );
|
||||||
|
|
||||||
m_NetSortOptSizer->Add( m_ShowNetNameFilter, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
m_NetSortOptSizer->Add( m_ShowNetNameFilter, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||||
|
|
||||||
m_buttonRunFilter = new wxButton( this, wxID_APPLY_FILTERS, _("Apply Filters"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_buttonRunFilter = new wxButton( this, wxID_APPLY_FILTERS, _("Apply Filters"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_NetSortOptSizer->Add( m_buttonRunFilter, 0, wxALL|wxEXPAND, 5 );
|
m_NetSortOptSizer->Add( m_buttonRunFilter, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
m_OptionsBoxSizer->Add( m_NetSortOptSizer, 0, wxALL, 5 );
|
m_OptionsBoxSizer->Add( m_NetSortOptSizer, 0, wxALL, 5 );
|
||||||
|
|
||||||
m_MainBoxSizer->Add( m_OptionsBoxSizer, 1, wxALL|wxEXPAND, 5 );
|
m_MainBoxSizer->Add( m_OptionsBoxSizer, 1, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
wxStaticBoxSizer* m_ExportableSetupSizer;
|
wxStaticBoxSizer* m_ExportableSetupSizer;
|
||||||
m_ExportableSetupSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Settings") ), wxHORIZONTAL );
|
m_ExportableSetupSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Settings") ), wxHORIZONTAL );
|
||||||
|
|
||||||
wxBoxSizer* bSizer9;
|
wxBoxSizer* bSizer9;
|
||||||
bSizer9 = new wxBoxSizer( wxVERTICAL );
|
bSizer9 = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
m_ClearanceValueTitle = new wxStaticText( this, wxID_ANY, _("Clearance"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_ClearanceValueTitle = new wxStaticText( this, wxID_ANY, _("Clearance"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_ClearanceValueTitle->Wrap( -1 );
|
m_ClearanceValueTitle->Wrap( -1 );
|
||||||
bSizer9->Add( m_ClearanceValueTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
bSizer9->Add( m_ClearanceValueTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_ZoneClearanceCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
m_ZoneClearanceCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
bSizer9->Add( m_ZoneClearanceCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
bSizer9->Add( m_ZoneClearanceCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_MinThicknessValueTitle = new wxStaticText( this, wxID_ANY, _("Minimum width"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_MinThicknessValueTitle = new wxStaticText( this, wxID_ANY, _("Minimum width"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_MinThicknessValueTitle->Wrap( -1 );
|
m_MinThicknessValueTitle->Wrap( -1 );
|
||||||
bSizer9->Add( m_MinThicknessValueTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
m_MinThicknessValueTitle->SetToolTip( _("Minimun thickness of filled areas.") );
|
||||||
|
|
||||||
m_ZoneMinThicknessCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
bSizer9->Add( m_MinThicknessValueTitle, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
m_ZoneMinThicknessCtrl->SetToolTip( _("Minimun thickness of filled areas.") );
|
|
||||||
|
m_ZoneMinThicknessCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
bSizer9->Add( m_ZoneMinThicknessCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
bSizer9->Add( m_ZoneMinThicknessCtrl, 0, wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_staticText151 = new wxStaticText( this, wxID_ANY, _("Corner smoothing:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_staticText151 = new wxStaticText( this, wxID_ANY, _("Corner smoothing:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_staticText151->Wrap( -1 );
|
m_staticText151->Wrap( -1 );
|
||||||
bSizer9->Add( m_staticText151, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
bSizer9->Add( m_staticText151, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
|
|
||||||
wxString m_cornerSmoothingChoiceChoices[] = { _("None"), _("Chamfer"), _("Fillet") };
|
wxString m_cornerSmoothingChoiceChoices[] = { _("None"), _("Chamfer"), _("Fillet") };
|
||||||
int m_cornerSmoothingChoiceNChoices = sizeof( m_cornerSmoothingChoiceChoices ) / sizeof( wxString );
|
int m_cornerSmoothingChoiceNChoices = sizeof( m_cornerSmoothingChoiceChoices ) / sizeof( wxString );
|
||||||
m_cornerSmoothingChoice = new wxChoice( this, ID_CORNER_SMOOTHING, wxDefaultPosition, wxDefaultSize, m_cornerSmoothingChoiceNChoices, m_cornerSmoothingChoiceChoices, 0 );
|
m_cornerSmoothingChoice = new wxChoice( this, ID_CORNER_SMOOTHING, wxDefaultPosition, wxDefaultSize, m_cornerSmoothingChoiceNChoices, m_cornerSmoothingChoiceChoices, 0 );
|
||||||
m_cornerSmoothingChoice->SetSelection( 0 );
|
m_cornerSmoothingChoice->SetSelection( 0 );
|
||||||
bSizer9->Add( m_cornerSmoothingChoice, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
bSizer9->Add( m_cornerSmoothingChoice, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
m_cornerSmoothingTitle = new wxStaticText( this, wxID_ANY, _("Chamfer distance (mm):"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_cornerSmoothingTitle = new wxStaticText( this, wxID_ANY, _("Chamfer distance (mm):"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_cornerSmoothingTitle->Wrap( -1 );
|
m_cornerSmoothingTitle->Wrap( -1 );
|
||||||
bSizer9->Add( m_cornerSmoothingTitle, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
bSizer9->Add( m_cornerSmoothingTitle, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
|
|
||||||
m_cornerSmoothingCtrl = new wxTextCtrl( this, ID_M_CORNERSMOOTHINGCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
m_cornerSmoothingCtrl = new wxTextCtrl( this, ID_M_CORNERSMOOTHINGCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
bSizer9->Add( m_cornerSmoothingCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
bSizer9->Add( m_cornerSmoothingCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
m_ExportableSetupSizer->Add( bSizer9, 0, wxEXPAND, 5 );
|
m_ExportableSetupSizer->Add( bSizer9, 0, wxEXPAND, 5 );
|
||||||
|
|
||||||
wxBoxSizer* m_LeftBox;
|
wxBoxSizer* m_LeftBox;
|
||||||
m_LeftBox = new wxBoxSizer( wxVERTICAL );
|
m_LeftBox = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
m_staticText13 = new wxStaticText( this, wxID_ANY, _("Pad connection:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_staticText13 = new wxStaticText( this, wxID_ANY, _("Pad connection:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_staticText13->Wrap( -1 );
|
m_staticText13->Wrap( -1 );
|
||||||
m_LeftBox->Add( m_staticText13, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
m_LeftBox->Add( m_staticText13, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
|
|
||||||
wxString m_PadInZoneOptChoices[] = { _("Solid"), _("Thermal relief"), _("None") };
|
wxString m_PadInZoneOptChoices[] = { _("Solid"), _("Thermal relief"), _("None") };
|
||||||
int m_PadInZoneOptNChoices = sizeof( m_PadInZoneOptChoices ) / sizeof( wxString );
|
int m_PadInZoneOptNChoices = sizeof( m_PadInZoneOptChoices ) / sizeof( wxString );
|
||||||
m_PadInZoneOpt = new wxChoice( this, ID_M_PADINZONEOPT, wxDefaultPosition, wxDefaultSize, m_PadInZoneOptNChoices, m_PadInZoneOptChoices, 0 );
|
m_PadInZoneOpt = new wxChoice( this, ID_M_PADINZONEOPT, wxDefaultPosition, wxDefaultSize, m_PadInZoneOptNChoices, m_PadInZoneOptChoices, 0 );
|
||||||
m_PadInZoneOpt->SetSelection( 0 );
|
m_PadInZoneOpt->SetSelection( 0 );
|
||||||
m_LeftBox->Add( m_PadInZoneOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
m_LeftBox->Add( m_PadInZoneOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
wxStaticBoxSizer* m_ThermalShapesParamsSizer;
|
wxStaticBoxSizer* m_ThermalShapesParamsSizer;
|
||||||
m_ThermalShapesParamsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Thermal Reliefs") ), wxVERTICAL );
|
m_ThermalShapesParamsSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Thermal Reliefs") ), wxVERTICAL );
|
||||||
|
|
||||||
m_AntipadSizeText = new wxStaticText( this, wxID_ANY, _("Antipad clearance"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_AntipadSizeText = new wxStaticText( this, wxID_ANY, _("Antipad clearance"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_AntipadSizeText->Wrap( -1 );
|
m_AntipadSizeText->Wrap( -1 );
|
||||||
m_ThermalShapesParamsSizer->Add( m_AntipadSizeText, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
m_ThermalShapesParamsSizer->Add( m_AntipadSizeText, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
|
|
||||||
m_AntipadSizeValue = new wxTextCtrl( this, wxID_ANTIPAD_SIZE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
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_AntipadSizeValue->SetToolTip( _("Clearance between pads in the same net and filled areas.") );
|
||||||
|
|
||||||
m_ThermalShapesParamsSizer->Add( m_AntipadSizeValue, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
m_ThermalShapesParamsSizer->Add( m_AntipadSizeValue, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
m_CopperBridgeWidthText = new wxStaticText( this, wxID_ANY, _("Spoke width"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_CopperBridgeWidthText = new wxStaticText( this, wxID_ANY, _("Spoke width"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_CopperBridgeWidthText->Wrap( -1 );
|
m_CopperBridgeWidthText->Wrap( -1 );
|
||||||
m_ThermalShapesParamsSizer->Add( m_CopperBridgeWidthText, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
m_ThermalShapesParamsSizer->Add( m_CopperBridgeWidthText, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||||
|
|
||||||
m_CopperWidthValue = new wxTextCtrl( this, wxID_COPPER_BRIDGE_VALUE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
m_CopperWidthValue = new wxTextCtrl( this, wxID_COPPER_BRIDGE_VALUE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_CopperWidthValue->SetToolTip( _("Width of copper in thermal reliefs.") );
|
m_CopperWidthValue->SetToolTip( _("Width of copper in thermal reliefs.") );
|
||||||
|
|
||||||
m_ThermalShapesParamsSizer->Add( m_CopperWidthValue, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
m_ThermalShapesParamsSizer->Add( m_CopperWidthValue, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
m_LeftBox->Add( m_ThermalShapesParamsSizer, 0, wxALL|wxEXPAND, 5 );
|
m_LeftBox->Add( m_ThermalShapesParamsSizer, 0, wxALL|wxEXPAND, 5 );
|
||||||
|
|
||||||
m_ExportableSetupSizer->Add( m_LeftBox, 0, wxEXPAND, 5 );
|
m_ExportableSetupSizer->Add( m_LeftBox, 0, wxEXPAND, 5 );
|
||||||
|
|
||||||
wxBoxSizer* m_MiddleBox;
|
wxBoxSizer* m_MiddleBox;
|
||||||
m_MiddleBox = new wxBoxSizer( wxVERTICAL );
|
m_MiddleBox = new wxBoxSizer( wxVERTICAL );
|
||||||
|
|
||||||
m_staticText11 = new wxStaticText( this, wxID_ANY, _("Fill mode:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_staticText171 = new wxStaticText( this, wxID_ANY, _("Priority level:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_staticText11->Wrap( -1 );
|
m_staticText171->Wrap( -1 );
|
||||||
m_MiddleBox->Add( m_staticText11, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
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.") );
|
||||||
|
|
||||||
wxString m_FillModeCtrlChoices[] = { _("Polygon"), _("Segment") };
|
m_MiddleBox->Add( m_staticText171, 0, wxRIGHT|wxLEFT, 5 );
|
||||||
int m_FillModeCtrlNChoices = sizeof( m_FillModeCtrlChoices ) / sizeof( wxString );
|
|
||||||
m_FillModeCtrl = new wxChoice( this, ID_M_FILLMODECTRL, wxDefaultPosition, wxDefaultSize, m_FillModeCtrlNChoices, m_FillModeCtrlChoices, 0 );
|
m_PriorityLevelCtrl = new wxSpinCtrl( this, ID_M_PRIORITYLEVELCTRL, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 100, 0 );
|
||||||
m_FillModeCtrl->SetSelection( 0 );
|
m_MiddleBox->Add( m_PriorityLevelCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||||
m_MiddleBox->Add( m_FillModeCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
|
||||||
|
m_staticText11 = new wxStaticText( this, wxID_ANY, _("Fill mode:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_staticText12 = new wxStaticText( this, wxID_ANY, _("Segments / 360 deg:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_staticText11->Wrap( -1 );
|
||||||
m_staticText12->Wrap( -1 );
|
m_MiddleBox->Add( m_staticText11, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
m_MiddleBox->Add( m_staticText12, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
|
||||||
|
wxString m_FillModeCtrlChoices[] = { _("Polygon"), _("Segment") };
|
||||||
wxString m_ArcApproximationOptChoices[] = { _("16"), _("32") };
|
int m_FillModeCtrlNChoices = sizeof( m_FillModeCtrlChoices ) / sizeof( wxString );
|
||||||
int m_ArcApproximationOptNChoices = sizeof( m_ArcApproximationOptChoices ) / sizeof( wxString );
|
m_FillModeCtrl = new wxChoice( this, ID_M_FILLMODECTRL, wxDefaultPosition, wxDefaultSize, m_FillModeCtrlNChoices, m_FillModeCtrlChoices, 0 );
|
||||||
m_ArcApproximationOpt = new wxChoice( this, ID_M_ARCAPPROXIMATIONOPT, wxDefaultPosition, wxDefaultSize, m_ArcApproximationOptNChoices, m_ArcApproximationOptChoices, 0 );
|
m_FillModeCtrl->SetSelection( 0 );
|
||||||
m_ArcApproximationOpt->SetSelection( 0 );
|
m_MiddleBox->Add( m_FillModeCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
m_MiddleBox->Add( m_ArcApproximationOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
|
||||||
|
m_staticText12 = new wxStaticText( this, wxID_ANY, _("Segments / 360 deg:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_ExportableSetupSizer->Add( m_MiddleBox, 0, wxEXPAND, 5 );
|
m_staticText12->Wrap( -1 );
|
||||||
|
m_MiddleBox->Add( m_staticText12, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
wxBoxSizer* bSizer81;
|
|
||||||
bSizer81 = new wxBoxSizer( wxVERTICAL );
|
wxString m_ArcApproximationOptChoices[] = { _("16"), _("32") };
|
||||||
|
int m_ArcApproximationOptNChoices = sizeof( m_ArcApproximationOptChoices ) / sizeof( wxString );
|
||||||
m_staticText14 = new wxStaticText( this, wxID_ANY, _("Outline slope:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_ArcApproximationOpt = new wxChoice( this, ID_M_ARCAPPROXIMATIONOPT, wxDefaultPosition, wxDefaultSize, m_ArcApproximationOptNChoices, m_ArcApproximationOptChoices, 0 );
|
||||||
m_staticText14->Wrap( -1 );
|
m_ArcApproximationOpt->SetSelection( 0 );
|
||||||
bSizer81->Add( m_staticText14, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
m_MiddleBox->Add( m_ArcApproximationOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
|
|
||||||
wxString m_OrientEdgesOptChoices[] = { _("Arbitrary"), _("H, V, and 45 deg only") };
|
m_ExportableSetupSizer->Add( m_MiddleBox, 0, wxEXPAND, 5 );
|
||||||
int m_OrientEdgesOptNChoices = sizeof( m_OrientEdgesOptChoices ) / sizeof( wxString );
|
|
||||||
m_OrientEdgesOpt = new wxChoice( this, ID_M_ORIENTEDGESOPT, wxDefaultPosition, wxDefaultSize, m_OrientEdgesOptNChoices, m_OrientEdgesOptChoices, 0 );
|
wxBoxSizer* bSizer81;
|
||||||
m_OrientEdgesOpt->SetSelection( 0 );
|
bSizer81 = new wxBoxSizer( wxVERTICAL );
|
||||||
bSizer81->Add( m_OrientEdgesOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
|
||||||
|
m_staticText14 = new wxStaticText( this, wxID_ANY, _("Outline slope:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_staticText15 = new wxStaticText( this, wxID_ANY, _("Outline style:"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_staticText14->Wrap( -1 );
|
||||||
m_staticText15->Wrap( -1 );
|
bSizer81->Add( m_staticText14, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
||||||
bSizer81->Add( m_staticText15, 0, wxLEFT|wxRIGHT|wxTOP, 5 );
|
|
||||||
|
wxString m_OrientEdgesOptChoices[] = { _("Arbitrary"), _("H, V, and 45 deg only") };
|
||||||
wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched"), _("Fully hatched") };
|
int m_OrientEdgesOptNChoices = sizeof( m_OrientEdgesOptChoices ) / sizeof( wxString );
|
||||||
int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
|
m_OrientEdgesOpt = new wxChoice( this, ID_M_ORIENTEDGESOPT, wxDefaultPosition, wxDefaultSize, m_OrientEdgesOptNChoices, m_OrientEdgesOptChoices, 0 );
|
||||||
m_OutlineAppearanceCtrl = new wxChoice( this, ID_M_OUTLINEAPPEARANCECTRL, wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 0 );
|
m_OrientEdgesOpt->SetSelection( 0 );
|
||||||
m_OutlineAppearanceCtrl->SetSelection( 0 );
|
bSizer81->Add( m_OrientEdgesOpt, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
bSizer81->Add( m_OutlineAppearanceCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
|
||||||
|
m_staticText15 = new wxStaticText( this, wxID_ANY, _("Outline style:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
m_ExportableSetupSizer->Add( bSizer81, 0, wxEXPAND, 5 );
|
m_staticText15->Wrap( -1 );
|
||||||
|
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") };
|
||||||
wxBoxSizer* bSizer10;
|
int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
|
||||||
bSizer10 = new wxBoxSizer( wxHORIZONTAL );
|
m_OutlineAppearanceCtrl = new wxChoice( this, ID_M_OUTLINEAPPEARANCECTRL, wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 0 );
|
||||||
|
m_OutlineAppearanceCtrl->SetSelection( 0 );
|
||||||
m_ExportSetupButton = new wxButton( this, wxID_BUTTON_EXPORT, _("Export Settings to Other Zones"), wxDefaultPosition, wxDefaultSize, 0 );
|
bSizer81->Add( m_OutlineAppearanceCtrl, 0, wxBOTTOM|wxEXPAND|wxLEFT|wxRIGHT, 5 );
|
||||||
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_MainBoxSizer->Add( m_ExportableSetupSizer, 1, wxALL|wxEXPAND, 5 );
|
||||||
m_OkButton = new wxButton( this, wxID_OK, _("Ok"), wxDefaultPosition, wxDefaultSize, 0 );
|
|
||||||
m_OkButton->SetDefault();
|
wxBoxSizer* bSizer10;
|
||||||
bSizer10->Add( m_OkButton, 0, wxALL|wxEXPAND, 5 );
|
bSizer10 = new wxBoxSizer( wxHORIZONTAL );
|
||||||
|
|
||||||
m_ButtonCancel = new wxButton( this, wxID_CANCEL, _("Cancel"), wxDefaultPosition, wxDefaultSize, 0 );
|
m_ExportSetupButton = new wxButton( this, wxID_BUTTON_EXPORT, _("Export Settings to Other Zones"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
bSizer10->Add( m_ButtonCancel, 0, wxALL|wxEXPAND, 5 );
|
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 );
|
m_OkButton = new wxButton( this, wxID_OK, _("Ok"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
this->Layout();
|
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,126 +1,131 @@
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// C++ code generated with wxFormBuilder (version Nov 18 2010)
|
// C++ code generated with wxFormBuilder (version Jun 30 2011)
|
||||||
// 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__
|
#ifndef __DIALOG_COPPER_ZONES_BASE_H__
|
||||||
#define __dialog_copper_zones_base__
|
#define __DIALOG_COPPER_ZONES_BASE_H__
|
||||||
|
|
||||||
#include <wx/intl.h>
|
#include <wx/artprov.h>
|
||||||
|
#include <wx/xrc/xmlres.h>
|
||||||
#include <wx/string.h>
|
#include <wx/intl.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/dialog.h>
|
#include <wx/statbox.h>
|
||||||
|
#include <wx/spinctrl.h>
|
||||||
///////////////////////////////////////////////////////////////////////////
|
#include <wx/dialog.h>
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
/// Class DIALOG_COPPER_ZONE_BASE
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
class DIALOG_COPPER_ZONE_BASE : public wxDialog
|
/// Class DIALOG_COPPER_ZONE_BASE
|
||||||
{
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
DECLARE_EVENT_TABLE()
|
class DIALOG_COPPER_ZONE_BASE : public wxDialog
|
||||||
private:
|
{
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
// Private event handlers
|
private:
|
||||||
void _wxFB_OnClose( wxCloseEvent& event ){ OnClose( event ); }
|
|
||||||
void _wxFB_OnSize( wxSizeEvent& event ){ OnSize( event ); }
|
// Private event handlers
|
||||||
void _wxFB_OnNetSortingOptionSelected( wxCommandEvent& event ){ OnNetSortingOptionSelected( event ); }
|
void _wxFB_OnClose( wxCloseEvent& event ){ OnClose( event ); }
|
||||||
void _wxFB_OnRunFiltersButtonClick( wxCommandEvent& event ){ OnRunFiltersButtonClick( event ); }
|
void _wxFB_OnSize( wxSizeEvent& event ){ OnSize( event ); }
|
||||||
void _wxFB_OnCornerSmoothingModeChoice( wxCommandEvent& event ){ OnCornerSmoothingModeChoice( event ); }
|
void _wxFB_OnNetSortingOptionSelected( wxCommandEvent& event ){ OnNetSortingOptionSelected( event ); }
|
||||||
void _wxFB_OnPadsInZoneClick( wxCommandEvent& event ){ OnPadsInZoneClick( event ); }
|
void _wxFB_OnRunFiltersButtonClick( wxCommandEvent& event ){ OnRunFiltersButtonClick( event ); }
|
||||||
void _wxFB_ExportSetupToOtherCopperZones( wxCommandEvent& event ){ ExportSetupToOtherCopperZones( event ); }
|
void _wxFB_OnCornerSmoothingModeChoice( wxCommandEvent& event ){ OnCornerSmoothingModeChoice( event ); }
|
||||||
void _wxFB_OnButtonOkClick( wxCommandEvent& event ){ OnButtonOkClick( event ); }
|
void _wxFB_OnPadsInZoneClick( wxCommandEvent& event ){ OnPadsInZoneClick( event ); }
|
||||||
void _wxFB_OnButtonCancelClick( wxCommandEvent& event ){ OnButtonCancelClick( event ); }
|
void _wxFB_ExportSetupToOtherCopperZones( wxCommandEvent& event ){ ExportSetupToOtherCopperZones( event ); }
|
||||||
|
void _wxFB_OnButtonOkClick( wxCommandEvent& event ){ OnButtonOkClick( event ); }
|
||||||
|
void _wxFB_OnButtonCancelClick( wxCommandEvent& event ){ OnButtonCancelClick( event ); }
|
||||||
protected:
|
|
||||||
enum
|
|
||||||
{
|
protected:
|
||||||
ID_DIALOG_COPPER_ZONE_BASE = 1000,
|
enum
|
||||||
ID_NETNAME_SELECTION,
|
{
|
||||||
ID_M_NETDISPLAYOPTION,
|
ID_DIALOG_COPPER_ZONE_BASE = 1000,
|
||||||
ID_TEXTCTRL_NETNAMES_FILTER,
|
ID_NETNAME_SELECTION,
|
||||||
wxID_APPLY_FILTERS,
|
ID_M_NETDISPLAYOPTION,
|
||||||
ID_CORNER_SMOOTHING,
|
ID_TEXTCTRL_NETNAMES_FILTER,
|
||||||
ID_M_CORNERSMOOTHINGCTRL,
|
wxID_APPLY_FILTERS,
|
||||||
ID_M_PADINZONEOPT,
|
ID_CORNER_SMOOTHING,
|
||||||
wxID_ANTIPAD_SIZE,
|
ID_M_CORNERSMOOTHINGCTRL,
|
||||||
wxID_COPPER_BRIDGE_VALUE,
|
ID_M_PADINZONEOPT,
|
||||||
ID_M_FILLMODECTRL,
|
wxID_ANTIPAD_SIZE,
|
||||||
ID_M_ARCAPPROXIMATIONOPT,
|
wxID_COPPER_BRIDGE_VALUE,
|
||||||
ID_M_ORIENTEDGESOPT,
|
ID_M_PRIORITYLEVELCTRL,
|
||||||
ID_M_OUTLINEAPPEARANCECTRL,
|
ID_M_FILLMODECTRL,
|
||||||
wxID_BUTTON_EXPORT,
|
ID_M_ARCAPPROXIMATIONOPT,
|
||||||
};
|
ID_M_ORIENTEDGESOPT,
|
||||||
|
ID_M_OUTLINEAPPEARANCECTRL,
|
||||||
wxBoxSizer* m_MainBoxSizer;
|
wxID_BUTTON_EXPORT,
|
||||||
wxBoxSizer* m_layerSizer;
|
};
|
||||||
wxStaticText* m_staticText17;
|
|
||||||
wxStaticText* m_staticText2;
|
wxBoxSizer* m_MainBoxSizer;
|
||||||
wxListBox* m_ListNetNameSelection;
|
wxBoxSizer* m_layerSizer;
|
||||||
wxStaticText* m_staticText16;
|
wxStaticText* m_staticText17;
|
||||||
wxChoice* m_NetDisplayOption;
|
wxStaticText* m_staticText2;
|
||||||
wxStaticText* m_staticText5;
|
wxListBox* m_ListNetNameSelection;
|
||||||
wxTextCtrl* m_DoNotShowNetNameFilter;
|
wxStaticText* m_staticText16;
|
||||||
wxStaticText* m_staticText51;
|
wxChoice* m_NetDisplayOption;
|
||||||
wxTextCtrl* m_ShowNetNameFilter;
|
wxStaticText* m_staticText5;
|
||||||
wxButton* m_buttonRunFilter;
|
wxTextCtrl* m_DoNotShowNetNameFilter;
|
||||||
wxStaticText* m_ClearanceValueTitle;
|
wxStaticText* m_staticText51;
|
||||||
wxTextCtrl* m_ZoneClearanceCtrl;
|
wxTextCtrl* m_ShowNetNameFilter;
|
||||||
wxStaticText* m_MinThicknessValueTitle;
|
wxButton* m_buttonRunFilter;
|
||||||
wxTextCtrl* m_ZoneMinThicknessCtrl;
|
wxStaticText* m_ClearanceValueTitle;
|
||||||
wxStaticText* m_staticText151;
|
wxTextCtrl* m_ZoneClearanceCtrl;
|
||||||
wxChoice* m_cornerSmoothingChoice;
|
wxStaticText* m_MinThicknessValueTitle;
|
||||||
wxStaticText* m_cornerSmoothingTitle;
|
wxTextCtrl* m_ZoneMinThicknessCtrl;
|
||||||
wxTextCtrl* m_cornerSmoothingCtrl;
|
wxStaticText* m_staticText151;
|
||||||
wxStaticText* m_staticText13;
|
wxChoice* m_cornerSmoothingChoice;
|
||||||
wxChoice* m_PadInZoneOpt;
|
wxStaticText* m_cornerSmoothingTitle;
|
||||||
wxStaticText* m_AntipadSizeText;
|
wxTextCtrl* m_cornerSmoothingCtrl;
|
||||||
wxTextCtrl* m_AntipadSizeValue;
|
wxStaticText* m_staticText13;
|
||||||
wxStaticText* m_CopperBridgeWidthText;
|
wxChoice* m_PadInZoneOpt;
|
||||||
wxTextCtrl* m_CopperWidthValue;
|
wxStaticText* m_AntipadSizeText;
|
||||||
wxStaticText* m_staticText11;
|
wxTextCtrl* m_AntipadSizeValue;
|
||||||
wxChoice* m_FillModeCtrl;
|
wxStaticText* m_CopperBridgeWidthText;
|
||||||
wxStaticText* m_staticText12;
|
wxTextCtrl* m_CopperWidthValue;
|
||||||
wxChoice* m_ArcApproximationOpt;
|
wxStaticText* m_staticText171;
|
||||||
wxStaticText* m_staticText14;
|
wxSpinCtrl* m_PriorityLevelCtrl;
|
||||||
wxChoice* m_OrientEdgesOpt;
|
wxStaticText* m_staticText11;
|
||||||
wxStaticText* m_staticText15;
|
wxChoice* m_FillModeCtrl;
|
||||||
wxChoice* m_OutlineAppearanceCtrl;
|
wxStaticText* m_staticText12;
|
||||||
wxButton* m_ExportSetupButton;
|
wxChoice* m_ArcApproximationOpt;
|
||||||
wxButton* m_OkButton;
|
wxStaticText* m_staticText14;
|
||||||
wxButton* m_ButtonCancel;
|
wxChoice* m_OrientEdgesOpt;
|
||||||
|
wxStaticText* m_staticText15;
|
||||||
// Virtual event handlers, overide them in your derived class
|
wxChoice* m_OutlineAppearanceCtrl;
|
||||||
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
|
wxButton* m_ExportSetupButton;
|
||||||
virtual void OnSize( wxSizeEvent& event ) { event.Skip(); }
|
wxButton* m_OkButton;
|
||||||
virtual void OnNetSortingOptionSelected( wxCommandEvent& event ) { event.Skip(); }
|
wxButton* m_ButtonCancel;
|
||||||
virtual void OnRunFiltersButtonClick( wxCommandEvent& event ) { event.Skip(); }
|
|
||||||
virtual void OnCornerSmoothingModeChoice( wxCommandEvent& event ) { event.Skip(); }
|
// Virtual event handlers, overide them in your derived class
|
||||||
virtual void OnPadsInZoneClick( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
|
||||||
virtual void ExportSetupToOtherCopperZones( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnSize( wxSizeEvent& event ) { event.Skip(); }
|
||||||
virtual void OnButtonOkClick( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnNetSortingOptionSelected( wxCommandEvent& event ) { event.Skip(); }
|
||||||
virtual void OnButtonCancelClick( wxCommandEvent& event ) { event.Skip(); }
|
virtual void OnRunFiltersButtonClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnCornerSmoothingModeChoice( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnPadsInZoneClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
public:
|
virtual void ExportSetupToOtherCopperZones( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
virtual void OnButtonOkClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
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 );
|
virtual void OnButtonCancelClick( wxCommandEvent& event ) { event.Skip(); }
|
||||||
~DIALOG_COPPER_ZONE_BASE();
|
|
||||||
|
|
||||||
};
|
public:
|
||||||
|
|
||||||
#endif //__dialog_copper_zones_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__
|
||||||
|
|
|
@ -258,6 +258,13 @@ bool ZONE_CONTAINER::Save( FILE* aFile ) const
|
||||||
if( ret < 2 )
|
if( ret < 2 )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if( GetPriority() > 0 )
|
||||||
|
{
|
||||||
|
ret = fprintf( aFile, "ZPriority %d\n", GetPriority() );
|
||||||
|
if( ret < 1 )
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Save pad option and clearance
|
// Save pad option and clearance
|
||||||
switch( m_PadOption )
|
switch( m_PadOption )
|
||||||
{
|
{
|
||||||
|
@ -1797,6 +1804,17 @@ int ZONE_CONTAINER::ReadDescr( LINE_READER* aReader )
|
||||||
}
|
}
|
||||||
/* Set hatch mode later, after reading outlines corners data */
|
/* Set hatch mode later, after reading outlines corners data */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if( strnicmp( Line, "ZPriority", 9 ) == 0 )
|
||||||
|
{
|
||||||
|
int tmp = 0;
|
||||||
|
text = Line + 9;
|
||||||
|
ret = sscanf( text, "%d", &tmp );
|
||||||
|
if( ret < 1 )
|
||||||
|
return false;
|
||||||
|
SetPriority( tmp );
|
||||||
|
}
|
||||||
|
|
||||||
else if( strnicmp( Line, "ZSmoothing", 10 ) == 0 )
|
else if( strnicmp( Line, "ZSmoothing", 10 ) == 0 )
|
||||||
{
|
{
|
||||||
int tempSmoothingType;
|
int tempSmoothingType;
|
||||||
|
|
|
@ -62,6 +62,41 @@ public:
|
||||||
*/
|
*/
|
||||||
MODULE_INFO* ParseComp() throw( IO_ERROR, PARSE_ERROR );
|
MODULE_INFO* ParseComp() throw( IO_ERROR, PARSE_ERROR );
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function ParseKicadFootprintFilterList
|
||||||
|
* Read the section "libparts" like:
|
||||||
|
* (libparts
|
||||||
|
* (libpart (lib device) (part C)
|
||||||
|
* (description "Condensateur non polarise")
|
||||||
|
* (footprints
|
||||||
|
* (fp SM*)
|
||||||
|
* (fp C?)
|
||||||
|
* (fp C1-1))
|
||||||
|
* (fields
|
||||||
|
* (field (name Reference) C)
|
||||||
|
* (field (name Value) C))
|
||||||
|
* (pins
|
||||||
|
* (pin (num 1) (name ~) (type passive))
|
||||||
|
* (pin (num 2) (name ~) (type passive))))
|
||||||
|
*
|
||||||
|
* And add the strings giving the footprint filter (subsection footprints)
|
||||||
|
* of the corresponding module info
|
||||||
|
* <p>This section is used by CvPcb, and is not useful in Pcbnew,
|
||||||
|
* therefore it it not always read </p>
|
||||||
|
*/
|
||||||
|
bool ParseKicadFootprintFilterList() throw( IO_ERROR, PARSE_ERROR );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function ParseNet
|
||||||
|
* Parses a section like
|
||||||
|
* (net (code 20) (name /PC-A0)
|
||||||
|
* (node (ref BUS1) (pin 62))
|
||||||
|
* (node (ref U3) (pin 3))
|
||||||
|
* (node (ref U9) (pin M6)))
|
||||||
|
*
|
||||||
|
* and set the corresponfings pads netnames
|
||||||
|
*/
|
||||||
void ParseNet( BOARD * aBrd ) throw( IO_ERROR, PARSE_ERROR );
|
void ParseNet( BOARD * aBrd ) throw( IO_ERROR, PARSE_ERROR );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -252,7 +287,7 @@ void NETLIST_READER_KICAD_PARSER::ParseNet( BOARD * aBrd )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// When there is onlu one item in net, clear pad netname
|
// When there is only one item in net, clear pad netname
|
||||||
if( nodecount < 2 && pad )
|
if( nodecount < 2 && pad )
|
||||||
pad->SetNetname( wxEmptyString );
|
pad->SetNetname( wxEmptyString );
|
||||||
}
|
}
|
||||||
|
@ -333,3 +368,27 @@ MODULE_INFO* NETLIST_READER_KICAD_PARSER::ParseComp()
|
||||||
|
|
||||||
return mod_info;
|
return mod_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Read the section "libparts" like:
|
||||||
|
* (libparts
|
||||||
|
* (libpart (lib device) (part C)
|
||||||
|
* (description "Condensateur non polarise")
|
||||||
|
* (footprints
|
||||||
|
* (fp SM*)
|
||||||
|
* (fp C?)
|
||||||
|
* (fp C1-1))
|
||||||
|
* (fields
|
||||||
|
* (field (name Reference) C)
|
||||||
|
* (field (name Value) C))
|
||||||
|
* (pins
|
||||||
|
* (pin (num 1) (name ~) (type passive))
|
||||||
|
* (pin (num 2) (name ~) (type passive))))
|
||||||
|
*
|
||||||
|
* And add the strings giving the footprint filter (subsection footprints)
|
||||||
|
* of the corresponding module info
|
||||||
|
*/
|
||||||
|
bool NETLIST_READER_KICAD_PARSER::ParseKicadFootprintFilterList() throw( IO_ERROR, PARSE_ERROR )
|
||||||
|
{
|
||||||
|
// TODO
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
@ -27,13 +27,16 @@
|
||||||
* in order to have drawable (and plottable) filled polygons
|
* in order to have drawable (and plottable) filled polygons
|
||||||
* drawable filled polygons are polygons without hole
|
* drawable filled polygons are polygons without hole
|
||||||
* @param aPcb: the current board (can be NULL for non copper zones)
|
* @param aPcb: the current board (can be NULL for non copper zones)
|
||||||
|
* @param aCornerBuffer: A reference to a buffer to put polygon corners, or NULL
|
||||||
|
* if NULL (default), uses m_FilledPolysList and fill current zone.
|
||||||
* @return number of polygons
|
* @return number of polygons
|
||||||
* This function does not add holes for pads and tracks but calls
|
* This function does not add holes for pads and tracks but calls
|
||||||
* AddClearanceAreasPolygonsToPolysList() to do that for copper layers
|
* AddClearanceAreasPolygonsToPolysList() to do that for copper layers
|
||||||
*/
|
*/
|
||||||
int ZONE_CONTAINER::BuildFilledPolysListData( BOARD* aPcb )
|
int ZONE_CONTAINER::BuildFilledPolysListData( BOARD* aPcb, std::vector <CPolyPt>* aCornerBuffer )
|
||||||
{
|
{
|
||||||
m_FilledPolysList.clear();
|
if( aCornerBuffer == NULL )
|
||||||
|
m_FilledPolysList.clear();
|
||||||
|
|
||||||
/* convert outlines + holes to outlines without holes (adding extra segments if necessary)
|
/* convert outlines + holes to outlines without holes (adding extra segments if necessary)
|
||||||
* m_Poly data is expected normalized, i.e. NormalizeAreaOutlines was used after building
|
* m_Poly data is expected normalized, i.e. NormalizeAreaOutlines was used after building
|
||||||
|
@ -74,13 +77,24 @@ int ZONE_CONTAINER::BuildFilledPolysListData( BOARD* aPcb )
|
||||||
corner.x = (int) smoothedPoly->GetKboolEngine()->GetPolygonXPoint();
|
corner.x = (int) smoothedPoly->GetKboolEngine()->GetPolygonXPoint();
|
||||||
corner.y = (int) smoothedPoly->GetKboolEngine()->GetPolygonYPoint();
|
corner.y = (int) smoothedPoly->GetKboolEngine()->GetPolygonYPoint();
|
||||||
corner.end_contour = false;
|
corner.end_contour = false;
|
||||||
m_FilledPolysList.push_back( corner );
|
if( aCornerBuffer )
|
||||||
|
aCornerBuffer->push_back( corner );
|
||||||
|
else
|
||||||
|
m_FilledPolysList.push_back( corner );
|
||||||
count++;
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
corner.end_contour = true;
|
corner.end_contour = true;
|
||||||
m_FilledPolysList.pop_back();
|
if( aCornerBuffer )
|
||||||
m_FilledPolysList.push_back( corner );
|
{
|
||||||
|
aCornerBuffer->pop_back();
|
||||||
|
aCornerBuffer->push_back( corner );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_FilledPolysList.pop_back();
|
||||||
|
m_FilledPolysList.push_back( corner );
|
||||||
|
}
|
||||||
smoothedPoly->GetKboolEngine()->EndPolygonGet();
|
smoothedPoly->GetKboolEngine()->EndPolygonGet();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -89,12 +103,14 @@ int ZONE_CONTAINER::BuildFilledPolysListData( BOARD* aPcb )
|
||||||
/* For copper layers, we now must add holes in the Polygon list.
|
/* For copper layers, we now must add holes in the Polygon list.
|
||||||
* holes are pads and tracks with their clearance area
|
* holes are pads and tracks with their clearance area
|
||||||
*/
|
*/
|
||||||
|
if( ! aCornerBuffer )
|
||||||
|
{
|
||||||
|
if( IsOnCopperLayer() )
|
||||||
|
AddClearanceAreasPolygonsToPolysList( aPcb );
|
||||||
|
|
||||||
if( IsOnCopperLayer() )
|
if ( m_FillMode ) // if fill mode uses segments, create them:
|
||||||
AddClearanceAreasPolygonsToPolysList( aPcb );
|
Fill_Zone_Areas_With_Segments( );
|
||||||
|
}
|
||||||
if ( m_FillMode ) // if fill mode uses segments, create them:
|
|
||||||
Fill_Zone_Areas_With_Segments( );
|
|
||||||
|
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
|
@ -329,7 +329,34 @@ void ZONE_CONTAINER::AddClearanceAreasPolygonsToPolysList( BOARD* aPcb )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove thermal symbols
|
// Add zones outlines having an higher priority
|
||||||
|
for( int ii = 0; ii < GetBoard()->GetAreaCount(); ii++ )
|
||||||
|
{
|
||||||
|
ZONE_CONTAINER* zone = GetBoard()->GetArea( ii );
|
||||||
|
if( zone->GetLayer() != GetLayer() )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if( zone->GetPriority() <= GetPriority() )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// A highter priority zone is found: remove its area
|
||||||
|
item_boundingbox = zone->GetBoundingBox();
|
||||||
|
if( !item_boundingbox.Intersects( zone_boundingbox ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Add the zone outline area.
|
||||||
|
// However if the zone has the same net as the current zone,
|
||||||
|
// do not add clearance.
|
||||||
|
// the zone will be connected to the current zone, but filled areas
|
||||||
|
// will use different parameters (clearnce, thermal shapes )
|
||||||
|
bool addclearance = GetNet() != zone->GetNet();
|
||||||
|
zone->TransformShapeWithClearanceToPolygon(
|
||||||
|
cornerBufferPolysToSubstract,
|
||||||
|
zone_clearance, s_CircleToSegmentsCount,
|
||||||
|
s_Correction, addclearance );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Remove thermal symbols
|
||||||
if( m_PadOption == THERMAL_PAD )
|
if( m_PadOption == THERMAL_PAD )
|
||||||
{
|
{
|
||||||
for( MODULE* module = aPcb->m_Modules; module; module = module->Next() )
|
for( MODULE* module = aPcb->m_Modules; module; module = module->Next() )
|
||||||
|
|
|
@ -92,6 +92,9 @@ bool ZONE_CONTAINER::IsSame( const ZONE_CONTAINER& aZoneToCompare )
|
||||||
if( m_ThermalReliefCopperBridge != aZoneToCompare.m_ThermalReliefCopperBridge )
|
if( m_ThermalReliefCopperBridge != aZoneToCompare.m_ThermalReliefCopperBridge )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if( GetPriority() != aZoneToCompare.GetPriority() )
|
||||||
|
return false;
|
||||||
|
|
||||||
// Compare outlines
|
// Compare outlines
|
||||||
wxASSERT( m_Poly ); // m_Poly == NULL Should never happen
|
wxASSERT( m_Poly ); // m_Poly == NULL Should never happen
|
||||||
wxASSERT( aZoneToCompare.m_Poly );
|
wxASSERT( aZoneToCompare.m_Poly );
|
||||||
|
|
|
@ -454,6 +454,8 @@ int BOARD::CombineAllAreasInNet( PICKED_ITEMS_LIST* aDeletedList, int aNetCode,
|
||||||
|
|
||||||
if( area2->GetNet() != aNetCode )
|
if( area2->GetNet() != aNetCode )
|
||||||
continue;
|
continue;
|
||||||
|
if( curr_area->GetPriority() != area2->GetPriority() )
|
||||||
|
continue;
|
||||||
|
|
||||||
if( curr_area->GetLayer() == area2->GetLayer()
|
if( curr_area->GetLayer() == area2->GetLayer()
|
||||||
&& curr_area->utility2 != -1 && area2->utility2 != -1 )
|
&& curr_area->utility2 != -1 && area2->utility2 != -1 )
|
||||||
|
@ -523,6 +525,9 @@ bool BOARD::TestAreaIntersections( ZONE_CONTAINER* area_to_test )
|
||||||
if( area_to_test->GetLayer() != area2->GetLayer() )
|
if( area_to_test->GetLayer() != area2->GetLayer() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if( area_to_test->GetPriority() != area2->GetPriority() )
|
||||||
|
continue;
|
||||||
|
|
||||||
CPolyLine* poly2 = area2->m_Poly;
|
CPolyLine* poly2 = area2->m_Poly;
|
||||||
|
|
||||||
// test bounding rects
|
// test bounding rects
|
||||||
|
@ -942,6 +947,10 @@ int BOARD::Test_Drc_Areas_Outlines_To_Areas_Outlines( ZONE_CONTAINER* aArea_To_E
|
||||||
if( Area_Ref->GetNet() == Area_To_Test->GetNet() && Area_Ref->GetNet() >= 0 )
|
if( Area_Ref->GetNet() == Area_To_Test->GetNet() && Area_Ref->GetNet() >= 0 )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// test for different priorities
|
||||||
|
if( Area_Ref->GetPriority() != Area_To_Test->GetPriority() )
|
||||||
|
continue;
|
||||||
|
|
||||||
// Examine a candidate zone: compare Area_To_Test to Area_Ref
|
// Examine a candidate zone: compare Area_To_Test to Area_Ref
|
||||||
|
|
||||||
// Get clearance used in zone to zone test. The policy used to
|
// Get clearance used in zone to zone test. The policy used to
|
||||||
|
@ -1139,6 +1148,10 @@ bool DRC::doEdgeZoneDrc( ZONE_CONTAINER* aArea, int aCornerIndex )
|
||||||
if( ( aArea->GetNet() == Area_To_Test->GetNet() ) && (aArea->GetNet() >= 0) )
|
if( ( aArea->GetNet() == Area_To_Test->GetNet() ) && (aArea->GetNet() >= 0) )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// test for same priority
|
||||||
|
if( Area_To_Test->GetPriority() != aArea->GetPriority() )
|
||||||
|
continue;
|
||||||
|
|
||||||
// test for ending line inside Area_To_Test
|
// test for ending line inside Area_To_Test
|
||||||
int x = end.x;
|
int x = end.x;
|
||||||
int y = end.y;
|
int y = end.y;
|
||||||
|
|
Loading…
Reference in New Issue