mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-04-07 22:35:32 +00:00
Implement pad & via aprons for hatched zones.
Fixes https://gitlab.com/kicad/code/kicad/issues/2519
This commit is contained in:
parent
bf60482b5c
commit
00e77d1ba4
common
pcbnew
altium2kicadpcb_plugin
class_board.cppclass_board.hclass_zone.cppclass_zone.hdialogs
dialog_copper_zones.cppdialog_copper_zones_base.cppdialog_copper_zones_base.fbpdialog_copper_zones_base.hdialog_keepout_area_properties.cppdialog_keepout_area_properties_base.cppdialog_keepout_area_properties_base.fbpdialog_keepout_area_properties_base.hdialog_non_copper_zones_properties.cppdialog_non_copper_zones_properties_base.cppdialog_non_copper_zones_properties_base.fbpdialog_non_copper_zones_properties_base.h
eagle_plugin.cppkicad_plugin.cppkicad_plugin.hlegacy_plugin.cpppcad2kicadpcb_plugin
pcb_parser.cpptools
zone_filler.cppzone_settings.cppzone_settings.hzones_test_and_combine_areas.cpp@ -124,6 +124,8 @@ hatch_gap
|
||||
hatch_orientation
|
||||
hatch_smoothing_level
|
||||
hatch_smoothing_value
|
||||
hatch_border_algorithm
|
||||
hatch_min_hole_area
|
||||
hide
|
||||
hole_to_hole_min
|
||||
island
|
||||
|
@ -1337,25 +1337,24 @@ void ALTIUM_PCB::ParsePolygons6Data(
|
||||
elem.hatchstyle != ALTIUM_POLYGON_HATCHSTYLE::UNKNOWN )
|
||||
{
|
||||
zone->SetFillMode( ZONE_FILL_MODE::HATCH_PATTERN );
|
||||
zone->SetHatchFillTypeThickness( elem.trackwidth );
|
||||
zone->SetHatchThickness( elem.trackwidth );
|
||||
|
||||
if( elem.hatchstyle == ALTIUM_POLYGON_HATCHSTYLE::NONE )
|
||||
{
|
||||
// use a small hack to get us only an outline (hopefully)
|
||||
const EDA_RECT& bbox = zone->GetBoundingBox();
|
||||
zone->SetHatchFillTypeGap( std::max( bbox.GetHeight(), bbox.GetWidth() ) );
|
||||
zone->SetHatchGap( std::max( bbox.GetHeight(), bbox.GetWidth() ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
zone->SetHatchFillTypeGap( elem.gridsize - elem.trackwidth );
|
||||
zone->SetHatchGap( elem.gridsize - elem.trackwidth );
|
||||
}
|
||||
|
||||
zone->SetHatchFillTypeOrientation(
|
||||
elem.hatchstyle == ALTIUM_POLYGON_HATCHSTYLE::DEGREE_45 ? 45 : 0 );
|
||||
zone->SetHatchOrientation( elem.hatchstyle == ALTIUM_POLYGON_HATCHSTYLE::DEGREE_45 ? 45 : 0 );
|
||||
}
|
||||
|
||||
zone->SetHatch(
|
||||
ZONE_HATCH_STYLE::DIAGONAL_EDGE, ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
|
||||
ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
}
|
||||
|
||||
if( reader.GetRemainingBytes() != 0 )
|
||||
@ -1457,8 +1456,8 @@ void ALTIUM_PCB::ParseShapeBasedRegions6Data(
|
||||
zone->AppendCorner( vertice.position, -1 );
|
||||
}
|
||||
|
||||
zone->SetHatch(
|
||||
ZONE_HATCH_STYLE::DIAGONAL_EDGE, ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
|
||||
ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
}
|
||||
else if( elem.kind == ALTIUM_REGION_KIND::COPPER )
|
||||
{
|
||||
@ -1621,11 +1620,10 @@ void ALTIUM_PCB::ParseArcs6Data(
|
||||
zone->SetDoNotAllowCopperPour( true );
|
||||
|
||||
ds.TransformShapeWithClearanceToPolygon( *zone->Outline(), 0, ARC_HIGH_DEF, false );
|
||||
zone->Outline()->Simplify(
|
||||
SHAPE_POLY_SET::PM_STRICTLY_SIMPLE ); // the outline is not a single polygon!
|
||||
zone->Outline()->Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE ); // the outline is not a single polygon!
|
||||
|
||||
zone->SetHatch(
|
||||
ZONE_HATCH_STYLE::DIAGONAL_EDGE, ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
|
||||
ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -2177,8 +2175,8 @@ void ALTIUM_PCB::ParseTracks6Data(
|
||||
|
||||
ds.TransformShapeWithClearanceToPolygon( *zone->Outline(), 0, ARC_HIGH_DEF, false );
|
||||
|
||||
zone->SetHatch(
|
||||
ZONE_HATCH_STYLE::DIAGONAL_EDGE, ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
|
||||
ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -2446,8 +2444,8 @@ void ALTIUM_PCB::ParseFills6Data(
|
||||
zone->Rotate( center, elem.rotation * 10 );
|
||||
}
|
||||
|
||||
zone->SetHatch(
|
||||
ZONE_HATCH_STYLE::DIAGONAL_EDGE, ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
|
||||
ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1670,7 +1670,7 @@ std::list<ZONE_CONTAINER*> BOARD::GetZoneList( bool aIncludeZonesInFootprints )
|
||||
|
||||
|
||||
ZONE_CONTAINER* BOARD::AddArea( PICKED_ITEMS_LIST* aNewZonesList, int aNetcode, PCB_LAYER_ID aLayer,
|
||||
wxPoint aStartPointPosition, ZONE_HATCH_STYLE aHatch )
|
||||
wxPoint aStartPointPosition, ZONE_BORDER_DISPLAY_STYLE aHatch )
|
||||
{
|
||||
ZONE_CONTAINER* new_area = InsertArea( aNetcode,
|
||||
m_ZoneDescriptorList.size( ) - 1,
|
||||
@ -1706,7 +1706,7 @@ void BOARD::RemoveArea( PICKED_ITEMS_LIST* aDeletedList, ZONE_CONTAINER* area_to
|
||||
|
||||
|
||||
ZONE_CONTAINER* BOARD::InsertArea( int aNetcode, int aAreaIdx, PCB_LAYER_ID aLayer, int aCornerX,
|
||||
int aCornerY, ZONE_HATCH_STYLE aHatch )
|
||||
int aCornerY, ZONE_BORDER_DISPLAY_STYLE aHatch )
|
||||
{
|
||||
ZONE_CONTAINER* new_area = new ZONE_CONTAINER( this );
|
||||
|
||||
@ -1718,7 +1718,7 @@ ZONE_CONTAINER* BOARD::InsertArea( int aNetcode, int aAreaIdx, PCB_LAYER_ID aLay
|
||||
else
|
||||
m_ZoneDescriptorList.push_back( new_area );
|
||||
|
||||
new_area->SetHatchStyle( (ZONE_HATCH_STYLE) aHatch );
|
||||
new_area->SetHatchStyle( (ZONE_BORDER_DISPLAY_STYLE) aHatch );
|
||||
|
||||
// Add the first corner to the new zone
|
||||
new_area->AppendCorner( wxPoint( aCornerX, aCornerY ), -1 );
|
||||
@ -1737,7 +1737,7 @@ bool BOARD::NormalizeAreaPolygon( PICKED_ITEMS_LIST * aNewZonesList, ZONE_CONTAI
|
||||
|
||||
if( aCurrArea->Outline()->IsSelfIntersecting() )
|
||||
{
|
||||
aCurrArea->UnHatch();
|
||||
aCurrArea->UnHatchBorder();
|
||||
|
||||
// Normalize copied area and store resulting number of polygons
|
||||
int n_poly = aCurrArea->Outline()->NormalizeAreaOutlines();
|
||||
@ -1759,7 +1759,7 @@ bool BOARD::NormalizeAreaPolygon( PICKED_ITEMS_LIST * aNewZonesList, ZONE_CONTAI
|
||||
// and replace it with a poly from NormalizeAreaOutlines
|
||||
delete NewArea->Outline();
|
||||
NewArea->SetOutline( new_p );
|
||||
NewArea->Hatch();
|
||||
NewArea->HatchBorder();
|
||||
NewArea->SetLocalFlags( 1 );
|
||||
}
|
||||
|
||||
@ -1769,7 +1769,7 @@ bool BOARD::NormalizeAreaPolygon( PICKED_ITEMS_LIST * aNewZonesList, ZONE_CONTAI
|
||||
}
|
||||
}
|
||||
|
||||
aCurrArea->Hatch();
|
||||
aCurrArea->HatchBorder();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -950,7 +950,7 @@ public:
|
||||
* @return a reference to the new area
|
||||
*/
|
||||
ZONE_CONTAINER* AddArea( PICKED_ITEMS_LIST* aNewZonesList, int aNetcode, PCB_LAYER_ID aLayer,
|
||||
wxPoint aStartPointPosition, ZONE_HATCH_STYLE aHatch );
|
||||
wxPoint aStartPointPosition, ZONE_BORDER_DISPLAY_STYLE aHatch );
|
||||
|
||||
/**
|
||||
* Add a copper area to net, inserting after m_ZoneDescriptorList[aAreaIdx]
|
||||
@ -963,7 +963,7 @@ public:
|
||||
* @return pointer to the new area
|
||||
*/
|
||||
ZONE_CONTAINER* InsertArea( int aNetcode, int aAreaIdx, PCB_LAYER_ID aLayer, int aCornerX,
|
||||
int aCornerY, ZONE_HATCH_STYLE aHatch );
|
||||
int aCornerY, ZONE_BORDER_DISPLAY_STYLE aHatch );
|
||||
|
||||
/**
|
||||
* Function NormalizeAreaPolygon
|
||||
|
@ -43,15 +43,17 @@ ZONE_CONTAINER::ZONE_CONTAINER( BOARD_ITEM_CONTAINER* aParent, bool aInModule )
|
||||
m_CornerSelection = nullptr; // no corner is selected
|
||||
m_IsFilled = false; // fill status : true when the zone is filled
|
||||
m_FillMode = ZONE_FILL_MODE::POLYGONS;
|
||||
m_hatchStyle = ZONE_HATCH_STYLE::DIAGONAL_EDGE;
|
||||
m_hatchPitch = GetDefaultHatchPitch();
|
||||
m_borderStyle = ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE;
|
||||
m_borderHatchPitch = GetDefaultHatchPitch();
|
||||
m_hv45 = false;
|
||||
m_HatchFillTypeThickness = 0;
|
||||
m_HatchFillTypeGap = 0;
|
||||
m_HatchFillTypeOrientation = 0.0;
|
||||
m_HatchFillTypeSmoothingLevel = 0; // Grid pattern smoothing type. 0 = no smoothing
|
||||
m_HatchFillTypeSmoothingValue = 0.1; // Grid pattern chamfer value relative to the gap value
|
||||
// used only if m_HatchFillTypeSmoothingLevel > 0
|
||||
m_hatchThickness = 0;
|
||||
m_hatchGap = 0;
|
||||
m_hatchOrientation = 0.0;
|
||||
m_hatchSmoothingLevel = 0; // Grid pattern smoothing type. 0 = no smoothing
|
||||
m_hatchSmoothingValue = 0.1; // Grid pattern chamfer value relative to the gap value
|
||||
// used only if m_hatchSmoothingLevel > 0
|
||||
m_hatchHoleMinArea = 0.3; // Min size before holes are dropped (ratio of hole size)
|
||||
m_hatchBorderAlgorithm = 1; // 0 = use zone min thickness; 1 = use hatch width
|
||||
m_priority = 0;
|
||||
m_cornerSmoothingType = ZONE_SETTINGS::SMOOTHING_NONE;
|
||||
SetIsKeepout( aInModule ? true : false ); // Zones living in modules have the keepout option.
|
||||
@ -138,11 +140,13 @@ void ZONE_CONTAINER::InitDataFromSrcInCopyCtor( const ZONE_CONTAINER& aZone )
|
||||
m_ThermalReliefCopperBridge = aZone.m_ThermalReliefCopperBridge;
|
||||
|
||||
m_FillMode = aZone.m_FillMode; // Filling mode (segments/polygons)
|
||||
m_HatchFillTypeThickness = aZone.m_HatchFillTypeThickness;
|
||||
m_HatchFillTypeGap = aZone.m_HatchFillTypeGap;
|
||||
m_HatchFillTypeOrientation = aZone.m_HatchFillTypeOrientation;
|
||||
m_HatchFillTypeSmoothingLevel = aZone.m_HatchFillTypeSmoothingLevel;
|
||||
m_HatchFillTypeSmoothingValue = aZone.m_HatchFillTypeSmoothingValue;
|
||||
m_hatchThickness = aZone.m_hatchThickness;
|
||||
m_hatchGap = aZone.m_hatchGap;
|
||||
m_hatchOrientation = aZone.m_hatchOrientation;
|
||||
m_hatchSmoothingLevel = aZone.m_hatchSmoothingLevel;
|
||||
m_hatchSmoothingValue = aZone.m_hatchSmoothingValue;
|
||||
m_hatchBorderAlgorithm = aZone.m_hatchBorderAlgorithm;
|
||||
m_hatchHoleMinArea = aZone.m_hatchHoleMinArea;
|
||||
|
||||
// For corner moving, corner index to drag, or nullptr if no selection
|
||||
delete m_CornerSelection;
|
||||
@ -157,9 +161,9 @@ void ZONE_CONTAINER::InitDataFromSrcInCopyCtor( const ZONE_CONTAINER& aZone )
|
||||
m_insulatedIslands[layer] = aZone.m_insulatedIslands.at( layer );
|
||||
}
|
||||
|
||||
m_hatchStyle = aZone.m_hatchStyle;
|
||||
m_hatchPitch = aZone.m_hatchPitch;
|
||||
m_HatchLines = aZone.m_HatchLines;
|
||||
m_borderStyle = aZone.m_borderStyle;
|
||||
m_borderHatchPitch = aZone.m_borderHatchPitch;
|
||||
m_borderHatchLines = aZone.m_borderHatchLines;
|
||||
|
||||
SetLocalFlags( aZone.GetLocalFlags() );
|
||||
|
||||
@ -682,8 +686,8 @@ void ZONE_CONTAINER::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PA
|
||||
|
||||
// Useful for statistics, especially when zones are complex the number of hatches
|
||||
// and filled polygons can explain the display and DRC calculation time:
|
||||
msg.Printf( wxT( "%d" ), (int) m_HatchLines.size() );
|
||||
aList.emplace_back( MSG_PANEL_ITEM( _( "Hatch Lines" ), msg, BLUE ) );
|
||||
msg.Printf( wxT( "%d" ), (int) m_borderHatchLines.size() );
|
||||
aList.emplace_back( MSG_PANEL_ITEM( _( "HatchBorder Lines" ), msg, BLUE ) );
|
||||
|
||||
PCB_LAYER_ID layer = m_Layer;
|
||||
|
||||
@ -710,7 +714,7 @@ void ZONE_CONTAINER::Move( const wxPoint& offset )
|
||||
/* move outlines */
|
||||
m_Poly->Move( offset );
|
||||
|
||||
Hatch();
|
||||
HatchBorder();
|
||||
|
||||
for( std::pair<const PCB_LAYER_ID, SHAPE_POLY_SET>& pair : m_FilledPolysList )
|
||||
pair.second.Move( offset );
|
||||
@ -734,7 +738,7 @@ void ZONE_CONTAINER::MoveEdge( const wxPoint& offset, int aEdge )
|
||||
{
|
||||
m_Poly->SetVertex( aEdge, m_Poly->CVertex( aEdge ) + VECTOR2I( offset ) );
|
||||
m_Poly->SetVertex( next_corner, m_Poly->CVertex( next_corner ) + VECTOR2I( offset ) );
|
||||
Hatch();
|
||||
HatchBorder();
|
||||
|
||||
SetNeedRefill( true );
|
||||
}
|
||||
@ -748,7 +752,7 @@ void ZONE_CONTAINER::Rotate( const wxPoint& centre, double angle )
|
||||
angle = -DECIDEG2RAD( angle );
|
||||
|
||||
m_Poly->Rotate( angle, VECTOR2I( centre ) );
|
||||
Hatch();
|
||||
HatchBorder();
|
||||
|
||||
/* rotate filled areas: */
|
||||
for( std::pair<const PCB_LAYER_ID, SHAPE_POLY_SET>& pair : m_FilledPolysList )
|
||||
@ -786,7 +790,7 @@ void ZONE_CONTAINER::Mirror( const wxPoint& aMirrorRef, bool aMirrorLeftRight )
|
||||
// ZONE_CONTAINERs mirror about the x-axis (why?!?)
|
||||
m_Poly->Mirror( aMirrorLeftRight, !aMirrorLeftRight, VECTOR2I( aMirrorRef ) );
|
||||
|
||||
Hatch();
|
||||
HatchBorder();
|
||||
|
||||
for( std::pair<const PCB_LAYER_ID, SHAPE_POLY_SET>& pair : m_FilledPolysList )
|
||||
pair.second.Mirror( aMirrorLeftRight, !aMirrorLeftRight, VECTOR2I( aMirrorRef ) );
|
||||
@ -916,48 +920,53 @@ wxString ZONE_CONTAINER::GetSelectMenuText( EDA_UNITS aUnits ) const
|
||||
}
|
||||
|
||||
|
||||
int ZONE_CONTAINER::GetHatchPitch() const
|
||||
int ZONE_CONTAINER::GetBorderHatchPitch() const
|
||||
{
|
||||
return m_hatchPitch;
|
||||
return m_borderHatchPitch;
|
||||
}
|
||||
|
||||
|
||||
void ZONE_CONTAINER::SetHatch( ZONE_HATCH_STYLE aHatchStyle, int aHatchPitch, bool aRebuildHatch )
|
||||
void ZONE_CONTAINER::SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE aHatchStyle, int aHatchPitch,
|
||||
bool aRebuildHatch )
|
||||
{
|
||||
SetHatchPitch( aHatchPitch );
|
||||
m_hatchStyle = aHatchStyle;
|
||||
m_borderStyle = aHatchStyle;
|
||||
|
||||
if( aRebuildHatch )
|
||||
Hatch();
|
||||
HatchBorder();
|
||||
}
|
||||
|
||||
|
||||
void ZONE_CONTAINER::SetHatchPitch( int aPitch )
|
||||
{
|
||||
m_hatchPitch = aPitch;
|
||||
m_borderHatchPitch = aPitch;
|
||||
}
|
||||
|
||||
|
||||
void ZONE_CONTAINER::UnHatch()
|
||||
void ZONE_CONTAINER::UnHatchBorder()
|
||||
{
|
||||
m_HatchLines.clear();
|
||||
m_borderHatchLines.clear();
|
||||
}
|
||||
|
||||
|
||||
// Creates hatch lines inside the outline of the complex polygon
|
||||
// sort function used in ::Hatch to sort points by descending wxPoint.x values
|
||||
// sort function used in ::HatchBorder to sort points by descending wxPoint.x values
|
||||
bool sortEndsByDescendingX( const VECTOR2I& ref, const VECTOR2I& tst )
|
||||
{
|
||||
return tst.x < ref.x;
|
||||
}
|
||||
|
||||
|
||||
void ZONE_CONTAINER::Hatch()
|
||||
void ZONE_CONTAINER::HatchBorder()
|
||||
{
|
||||
UnHatch();
|
||||
UnHatchBorder();
|
||||
|
||||
if( m_hatchStyle == ZONE_HATCH_STYLE::NO_HATCH || m_hatchPitch == 0 || m_Poly->IsEmpty() )
|
||||
if( m_borderStyle == ZONE_BORDER_DISPLAY_STYLE::NO_HATCH
|
||||
|| m_borderHatchPitch == 0
|
||||
|| m_Poly->IsEmpty() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// define range for hatch lines
|
||||
int min_x = m_Poly->CVertex( 0 ).x;
|
||||
@ -983,13 +992,13 @@ void ZONE_CONTAINER::Hatch()
|
||||
// Calculate spacing between 2 hatch lines
|
||||
int spacing;
|
||||
|
||||
if( m_hatchStyle == ZONE_HATCH_STYLE::DIAGONAL_EDGE )
|
||||
spacing = m_hatchPitch;
|
||||
if( m_borderStyle == ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE )
|
||||
spacing = m_borderHatchPitch;
|
||||
else
|
||||
spacing = m_hatchPitch * 2;
|
||||
spacing = m_borderHatchPitch * 2;
|
||||
|
||||
// set the "length" of hatch lines (the length on horizontal axis)
|
||||
int hatch_line_len = m_hatchPitch;
|
||||
int hatch_line_len = m_borderHatchPitch;
|
||||
|
||||
// To have a better look, give a slope depending on the layer
|
||||
LAYER_NUM layer = GetLayer();
|
||||
@ -1086,10 +1095,10 @@ void ZONE_CONTAINER::Hatch()
|
||||
// Push only one line for diagonal hatch,
|
||||
// or for small lines < twice the line length
|
||||
// else push 2 small lines
|
||||
if( m_hatchStyle == ZONE_HATCH_STYLE::DIAGONAL_FULL
|
||||
|| std::abs( dx ) < 2 * hatch_line_len )
|
||||
if( m_borderStyle == ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_FULL
|
||||
|| std::abs( dx ) < 2 * hatch_line_len )
|
||||
{
|
||||
m_HatchLines.emplace_back( SEG( pointbuffer[ip], pointbuffer[ip + 1] ) );
|
||||
m_borderHatchLines.emplace_back( SEG( pointbuffer[ip], pointbuffer[ ip + 1] ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1106,9 +1115,9 @@ void ZONE_CONTAINER::Hatch()
|
||||
int y1 = KiROUND( pointbuffer[ip].y + dx * slope );
|
||||
int y2 = KiROUND( pointbuffer[ip + 1].y - dx * slope );
|
||||
|
||||
m_HatchLines.emplace_back( SEG( pointbuffer[ip].x, pointbuffer[ip].y, x1, y1 ) );
|
||||
m_borderHatchLines.emplace_back( SEG( pointbuffer[ip].x, pointbuffer[ip].y, x1, y1 ) );
|
||||
|
||||
m_HatchLines.emplace_back( SEG( pointbuffer[ip+1].x, pointbuffer[ip+1].y, x2, y2 ) );
|
||||
m_borderHatchLines.emplace_back( SEG( pointbuffer[ip+1].x, pointbuffer[ip+1].y, x2, y2 ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -212,20 +212,26 @@ public:
|
||||
m_ZoneMinThickness = aMinThickness;
|
||||
}
|
||||
|
||||
int GetHatchFillTypeThickness() const { return m_HatchFillTypeThickness; }
|
||||
void SetHatchFillTypeThickness( int aThickness ) { m_HatchFillTypeThickness = aThickness; }
|
||||
int GetHatchThickness() const { return m_hatchThickness; }
|
||||
void SetHatchThickness( int aThickness ) { m_hatchThickness = aThickness; }
|
||||
|
||||
int GetHatchFillTypeGap() const { return m_HatchFillTypeGap; }
|
||||
void SetHatchFillTypeGap( int aStep ) { m_HatchFillTypeGap = aStep; }
|
||||
int GetHatchGap() const { return m_hatchGap; }
|
||||
void SetHatchGap( int aStep ) { m_hatchGap = aStep; }
|
||||
|
||||
double GetHatchFillTypeOrientation() const { return m_HatchFillTypeOrientation; }
|
||||
void SetHatchFillTypeOrientation( double aStep ) { m_HatchFillTypeOrientation = aStep; }
|
||||
double GetHatchOrientation() const { return m_hatchOrientation; }
|
||||
void SetHatchOrientation( double aStep ) { m_hatchOrientation = aStep; }
|
||||
|
||||
int GetHatchFillTypeSmoothingLevel() const { return m_HatchFillTypeSmoothingLevel; }
|
||||
void SetHatchFillTypeSmoothingLevel( int aLevel ) { m_HatchFillTypeSmoothingLevel = aLevel; }
|
||||
int GetHatchSmoothingLevel() const { return m_hatchSmoothingLevel; }
|
||||
void SetHatchSmoothingLevel( int aLevel ) { m_hatchSmoothingLevel = aLevel; }
|
||||
|
||||
double GetHatchFillTypeSmoothingValue() const { return m_HatchFillTypeSmoothingValue; }
|
||||
void SetHatchFillTypeSmoothingValue( double aValue ) { m_HatchFillTypeSmoothingValue = aValue; }
|
||||
double GetHatchSmoothingValue() const { return m_hatchSmoothingValue; }
|
||||
void SetHatchSmoothingValue( double aValue ) { m_hatchSmoothingValue = aValue; }
|
||||
|
||||
double GetHatchHoleMinArea() const { return m_hatchHoleMinArea; }
|
||||
void SetHatchHoleMinArea( double aPct ) { m_hatchHoleMinArea = aPct; }
|
||||
|
||||
int GetHatchBorderAlgorithm() const { return m_hatchBorderAlgorithm; }
|
||||
void SetHatchBorderAlgorithm( int aAlgo ) { m_hatchBorderAlgorithm = aAlgo; }
|
||||
|
||||
int GetSelectedCorner() const
|
||||
{
|
||||
@ -568,15 +574,8 @@ public:
|
||||
*/
|
||||
bool AppendCorner( wxPoint aPosition, int aHoleIdx, bool aAllowDuplication = false );
|
||||
|
||||
ZONE_HATCH_STYLE GetHatchStyle() const
|
||||
{
|
||||
return m_hatchStyle;
|
||||
}
|
||||
|
||||
void SetHatchStyle( ZONE_HATCH_STYLE aStyle )
|
||||
{
|
||||
m_hatchStyle = aStyle;
|
||||
}
|
||||
ZONE_BORDER_DISPLAY_STYLE GetHatchStyle() const { return m_borderStyle; }
|
||||
void SetHatchStyle( ZONE_BORDER_DISPLAY_STYLE aStyle ) { m_borderStyle = aStyle; }
|
||||
|
||||
/**
|
||||
* Function IsSame
|
||||
@ -741,14 +740,14 @@ public:
|
||||
void SetMinIslandArea( long long int aArea ) { m_minIslandArea = aArea; }
|
||||
|
||||
/**
|
||||
* Hatch related methods
|
||||
* HatchBorder related methods
|
||||
*/
|
||||
|
||||
/**
|
||||
* Function GetHatchPitch
|
||||
* Function GetBorderHatchPitch
|
||||
* @return int - the zone hatch pitch in iu.
|
||||
*/
|
||||
int GetHatchPitch() const;
|
||||
int GetBorderHatchPitch() const;
|
||||
|
||||
/**
|
||||
* Function GetDefaultHatchPitchMils
|
||||
@ -757,7 +756,7 @@ public:
|
||||
static int GetDefaultHatchPitch();
|
||||
|
||||
/**
|
||||
* Function SetHatch
|
||||
* Function SetBorderDisplayStyle
|
||||
* sets all hatch parameters for the zone.
|
||||
* @param aHatchStyle is the style of the hatch, specified as one of HATCH_STYLE possible
|
||||
* values.
|
||||
@ -765,7 +764,7 @@ public:
|
||||
* @param aRebuildHatch is a flag to indicate whether to re-hatch after having set the
|
||||
* previous parameters.
|
||||
*/
|
||||
void SetHatch( ZONE_HATCH_STYLE aHatchStyle, int aHatchPitch, bool aRebuildHatch );
|
||||
void SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE aHatchStyle, int aHatchPitch, bool aRebuildHatch );
|
||||
|
||||
/**
|
||||
* Function SetHatchPitch
|
||||
@ -775,19 +774,19 @@ public:
|
||||
void SetHatchPitch( int aPitch );
|
||||
|
||||
/**
|
||||
* Function UnHatch
|
||||
* Function UnHatchBorder
|
||||
* clears the zone's hatch.
|
||||
*/
|
||||
void UnHatch();
|
||||
void UnHatchBorder();
|
||||
|
||||
/**
|
||||
* Function Hatch
|
||||
* Function HatchBorder
|
||||
* computes the hatch lines depending on the hatch parameters and stores it in the zone's
|
||||
* attribute m_HatchLines.
|
||||
* attribute m_borderHatchLines.
|
||||
*/
|
||||
void Hatch();
|
||||
void HatchBorder();
|
||||
|
||||
const std::vector<SEG>& GetHatchLines() const { return m_HatchLines; }
|
||||
const std::vector<SEG>& GetHatchLines() const { return m_borderHatchLines; }
|
||||
|
||||
bool GetHV45() const { return m_hv45; }
|
||||
void SetHV45( bool aConstrain ) { m_hv45 = aConstrain; }
|
||||
@ -886,24 +885,18 @@ protected:
|
||||
* ZONE_FILL_MODE::POLYGONS => use solid polygons
|
||||
* ZONE_FILL_MODE::HATCH_PATTERN => use a grid pattern as shape
|
||||
*/
|
||||
ZONE_FILL_MODE m_FillMode;
|
||||
|
||||
/// Grid style shape: thickness of lines (if 0 -> solid shape)
|
||||
int m_HatchFillTypeThickness;
|
||||
|
||||
/// Grid style shape: dist between center of lines (grid size) (0 -> solid shape)
|
||||
int m_HatchFillTypeGap;
|
||||
|
||||
/// Grid style shape: orientation in degrees of the grid lines
|
||||
double m_HatchFillTypeOrientation;
|
||||
|
||||
/// Grid pattern smoothing type, similar to corner smoothing type
|
||||
///< 0 = no smoothing, 1 = fillet, >= 2 = arc
|
||||
int m_HatchFillTypeSmoothingLevel;
|
||||
|
||||
/// Grid pattern smoothing value for smoothing shape size calculations
|
||||
/// this is the ratio between the gap and the chamfer size
|
||||
double m_HatchFillTypeSmoothingValue;
|
||||
ZONE_FILL_MODE m_FillMode;
|
||||
int m_hatchThickness; // thickness of lines (if 0 -> solid shape)
|
||||
int m_hatchGap; // gap between lines (0 -> solid shape
|
||||
double m_hatchOrientation; // orientation in degrees of grid lines
|
||||
int m_hatchSmoothingLevel; // 0 = no smoothing
|
||||
// 1 = fillet
|
||||
// 2 = arc low def
|
||||
// 3 = arc high def
|
||||
double m_hatchSmoothingValue; // hole chamfer/fillet size (ratio of hole size)
|
||||
double m_hatchHoleMinArea; // min size before holes are dropped (ratio)
|
||||
int m_hatchBorderAlgorithm; // 0 = use min zone thickness
|
||||
// 1 = use hatch thickness
|
||||
|
||||
/// The index of the corner being moved or nullptr if no corner is selected.
|
||||
SHAPE_POLY_SET::VERTEX_INDEX* m_CornerSelection;
|
||||
@ -930,9 +923,9 @@ protected:
|
||||
/// A hash value used in zone filling calculations to see if the filled areas are up to date
|
||||
std::map<PCB_LAYER_ID, MD5_HASH> m_filledPolysHash;
|
||||
|
||||
ZONE_HATCH_STYLE m_hatchStyle; // hatch style, see enum above
|
||||
int m_hatchPitch; // for DIAGONAL_EDGE, distance between 2 hatch lines
|
||||
std::vector<SEG> m_HatchLines; // hatch lines
|
||||
ZONE_BORDER_DISPLAY_STYLE m_borderStyle; // border display style, see enum above
|
||||
int m_borderHatchPitch; // for DIAGONAL_EDGE, distance between 2 lines
|
||||
std::vector<SEG> m_borderHatchLines; // hatch lines
|
||||
|
||||
/// For each layer, a set of insulated islands that were not removed
|
||||
std::map<PCB_LAYER_ID, std::set<int>> m_insulatedIslands;
|
||||
|
@ -155,17 +155,11 @@ bool DIALOG_COPPER_ZONE::TransferDataToWindow()
|
||||
m_cornerRadius.SetValue( m_settings.GetCornerRadius() );
|
||||
m_PriorityLevelCtrl->SetValue( m_settings.m_ZonePriority );
|
||||
|
||||
switch( m_settings.m_Zone_HatchingStyle )
|
||||
switch( m_settings.m_ZoneBorderDisplayStyle )
|
||||
{
|
||||
case ZONE_HATCH_STYLE::NO_HATCH:
|
||||
m_OutlineAppearanceCtrl->SetSelection( 0 );
|
||||
break;
|
||||
case ZONE_HATCH_STYLE::DIAGONAL_EDGE:
|
||||
m_OutlineAppearanceCtrl->SetSelection( 1 );
|
||||
break;
|
||||
case ZONE_HATCH_STYLE::DIAGONAL_FULL:
|
||||
m_OutlineAppearanceCtrl->SetSelection( 2 );
|
||||
break;
|
||||
case ZONE_BORDER_DISPLAY_STYLE::NO_HATCH: m_OutlineDisplayCtrl->SetSelection( 0 ); break;
|
||||
case ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE: m_OutlineDisplayCtrl->SetSelection( 1 ); break;
|
||||
case ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_FULL: m_OutlineDisplayCtrl->SetSelection( 2 ); break;
|
||||
}
|
||||
|
||||
m_clearance.SetValue( m_settings.m_ZoneClearance );
|
||||
@ -174,18 +168,10 @@ bool DIALOG_COPPER_ZONE::TransferDataToWindow()
|
||||
switch( m_settings.GetPadConnection() )
|
||||
{
|
||||
default:
|
||||
case ZONE_CONNECTION::THERMAL:
|
||||
m_PadInZoneOpt->SetSelection( 1 );
|
||||
break;
|
||||
case ZONE_CONNECTION::THT_THERMAL:
|
||||
m_PadInZoneOpt->SetSelection( 2 );
|
||||
break;
|
||||
case ZONE_CONNECTION::NONE:
|
||||
m_PadInZoneOpt->SetSelection( 3 );
|
||||
break;
|
||||
case ZONE_CONNECTION::FULL:
|
||||
m_PadInZoneOpt->SetSelection( 0 );
|
||||
break;
|
||||
case ZONE_CONNECTION::THERMAL: m_PadInZoneOpt->SetSelection( 1 ); break;
|
||||
case ZONE_CONNECTION::THT_THERMAL: m_PadInZoneOpt->SetSelection( 2 ); break;
|
||||
case ZONE_CONNECTION::NONE: m_PadInZoneOpt->SetSelection( 3 ); break;
|
||||
case ZONE_CONNECTION::FULL: m_PadInZoneOpt->SetSelection( 0 ); break;
|
||||
}
|
||||
|
||||
// Do not enable/disable antipad clearance and spoke width. They might be needed if
|
||||
@ -235,7 +221,7 @@ bool DIALOG_COPPER_ZONE::TransferDataToWindow()
|
||||
}
|
||||
|
||||
m_gridStyleRotation.SetUnits( EDA_UNITS::DEGREES );
|
||||
m_gridStyleRotation.SetValue( m_settings.m_HatchFillTypeOrientation*10 ); // IU is decidegree
|
||||
m_gridStyleRotation.SetValue( m_settings.m_HatchOrientation * 10 ); // IU is decidegree
|
||||
|
||||
// Gives a reasonable value to grid style parameters, if currently there are no defined
|
||||
// parameters for grid pattern thickness and gap (if the value is 0)
|
||||
@ -243,22 +229,22 @@ bool DIALOG_COPPER_ZONE::TransferDataToWindow()
|
||||
// or 1mm
|
||||
// the grid pattern gap default value is (arbitrary) m_ZoneMinThickness * 6
|
||||
// or 1.5 mm
|
||||
int bestvalue = m_settings.m_HatchFillTypeThickness;
|
||||
int bestvalue = m_settings.m_HatchThickness;
|
||||
|
||||
if( bestvalue <= 0 ) // No defined value for m_HatchFillTypeThickness
|
||||
if( bestvalue <= 0 ) // No defined value for m_HatchThickness
|
||||
bestvalue = std::max( m_settings.m_ZoneMinThickness * 4, Millimeter2iu( 1.0 ) );
|
||||
|
||||
m_gridStyleThickness.SetValue( std::max( bestvalue, m_settings.m_ZoneMinThickness ) );
|
||||
|
||||
bestvalue = m_settings.m_HatchFillTypeGap;
|
||||
bestvalue = m_settings.m_HatchGap;
|
||||
|
||||
if( bestvalue <= 0 ) // No defined value for m_HatchFillTypeGap
|
||||
if( bestvalue <= 0 ) // No defined value for m_HatchGap
|
||||
bestvalue = std::max( m_settings.m_ZoneMinThickness * 6, Millimeter2iu( 1.5 ) );
|
||||
|
||||
m_gridStyleGap.SetValue( std::max( bestvalue, m_settings.m_ZoneMinThickness ) );
|
||||
|
||||
m_spinCtrlSmoothLevel->SetValue( m_settings.m_HatchFillTypeSmoothingLevel );
|
||||
m_spinCtrlSmoothValue->SetValue( m_settings.m_HatchFillTypeSmoothingValue );
|
||||
m_spinCtrlSmoothLevel->SetValue( m_settings.m_HatchSmoothingLevel );
|
||||
m_spinCtrlSmoothValue->SetValue( m_settings.m_HatchSmoothingValue );
|
||||
|
||||
m_tcZoneName->SetValue( m_settings.m_Name );
|
||||
|
||||
@ -322,11 +308,11 @@ bool DIALOG_COPPER_ZONE::TransferDataFromWindow()
|
||||
if( !AcceptOptions() )
|
||||
return false;
|
||||
|
||||
m_settings.m_HatchFillTypeOrientation = m_gridStyleRotation.GetValue()/10.0; // value is returned in deci-degree
|
||||
m_settings.m_HatchFillTypeThickness = m_gridStyleThickness.GetValue();
|
||||
m_settings.m_HatchFillTypeGap = m_gridStyleGap.GetValue();
|
||||
m_settings.m_HatchFillTypeSmoothingLevel = m_spinCtrlSmoothLevel->GetValue();
|
||||
m_settings.m_HatchFillTypeSmoothingValue = m_spinCtrlSmoothValue->GetValue();
|
||||
m_settings.m_HatchOrientation = m_gridStyleRotation.GetValue() / 10.0; // value is returned in deci-degree
|
||||
m_settings.m_HatchThickness = m_gridStyleThickness.GetValue();
|
||||
m_settings.m_HatchGap = m_gridStyleGap.GetValue();
|
||||
m_settings.m_HatchSmoothingLevel = m_spinCtrlSmoothLevel->GetValue();
|
||||
m_settings.m_HatchSmoothingValue = m_spinCtrlSmoothValue->GetValue();
|
||||
|
||||
*m_ptr = m_settings;
|
||||
return true;
|
||||
@ -382,22 +368,16 @@ bool DIALOG_COPPER_ZONE::AcceptOptions( bool aUseExportableSetupOnly )
|
||||
break;
|
||||
}
|
||||
|
||||
switch( m_OutlineAppearanceCtrl->GetSelection() )
|
||||
switch( m_OutlineDisplayCtrl->GetSelection() )
|
||||
{
|
||||
case 0:
|
||||
m_settings.m_Zone_HatchingStyle = ZONE_HATCH_STYLE::NO_HATCH;
|
||||
break;
|
||||
case 1:
|
||||
m_settings.m_Zone_HatchingStyle = ZONE_HATCH_STYLE::DIAGONAL_EDGE;
|
||||
break;
|
||||
case 2:
|
||||
m_settings.m_Zone_HatchingStyle = ZONE_HATCH_STYLE::DIAGONAL_FULL;
|
||||
break;
|
||||
case 0: m_settings.m_ZoneBorderDisplayStyle = ZONE_BORDER_DISPLAY_STYLE::NO_HATCH; break;
|
||||
case 1: m_settings.m_ZoneBorderDisplayStyle = ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE; break;
|
||||
case 2: m_settings.m_ZoneBorderDisplayStyle = ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_FULL; break;
|
||||
}
|
||||
|
||||
auto cfg = m_Parent->GetPcbNewSettings();
|
||||
|
||||
cfg->m_Zones.hatching_style = static_cast<int>( m_settings.m_Zone_HatchingStyle );
|
||||
cfg->m_Zones.hatching_style = static_cast<int>( m_settings.m_ZoneBorderDisplayStyle );
|
||||
cfg->m_Zones.net_filter = m_DoNotShowNetNameFilter->GetValue().ToStdString();
|
||||
|
||||
m_netNameShowFilter = m_ShowNetNameFilter->GetValue();
|
||||
|
@ -96,6 +96,27 @@ DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID i
|
||||
wxBoxSizer* bSizerMiddle;
|
||||
bSizerMiddle = new wxBoxSizer( wxHORIZONTAL );
|
||||
|
||||
wxBoxSizer* bSizer7;
|
||||
bSizer7 = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
wxStaticBoxSizer* sbGeneral;
|
||||
sbGeneral = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("General") ), wxHORIZONTAL );
|
||||
|
||||
m_zoneNameLabel = new wxStaticText( sbGeneral->GetStaticBox(), wxID_ANY, _("Zone name:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_zoneNameLabel->Wrap( -1 );
|
||||
m_zoneNameLabel->SetToolTip( _("A unique name for this zone to identify it for DRC") );
|
||||
|
||||
sbGeneral->Add( m_zoneNameLabel, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_tcZoneName = new wxTextCtrl( sbGeneral->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
sbGeneral->Add( m_tcZoneName, 1, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
sbGeneral->Add( 5, 0, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
bSizer7->Add( sbGeneral, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
wxStaticBoxSizer* m_ExportableSetupSizer;
|
||||
m_ExportableSetupSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Shape") ), wxHORIZONTAL );
|
||||
|
||||
@ -118,13 +139,13 @@ DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID i
|
||||
|
||||
m_staticTextStyle = new wxStaticText( m_ExportableSetupSizer->GetStaticBox(), wxID_ANY, _("Outline display:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextStyle->Wrap( -1 );
|
||||
gbSizer1->Add( m_staticTextStyle, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
gbSizer1->Add( m_staticTextStyle, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched"), _("Fully hatched") };
|
||||
int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
|
||||
m_OutlineAppearanceCtrl = new wxChoice( m_ExportableSetupSizer->GetStaticBox(), ID_M_OUTLINEAPPEARANCECTRL, wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 0 );
|
||||
m_OutlineAppearanceCtrl->SetSelection( 0 );
|
||||
gbSizer1->Add( m_OutlineAppearanceCtrl, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
wxString m_OutlineDisplayCtrlChoices[] = { _("Line"), _("Hatched"), _("Fully hatched") };
|
||||
int m_OutlineDisplayCtrlNChoices = sizeof( m_OutlineDisplayCtrlChoices ) / sizeof( wxString );
|
||||
m_OutlineDisplayCtrl = new wxChoice( m_ExportableSetupSizer->GetStaticBox(), ID_M_OUTLINEAPPEARANCECTRL, wxDefaultPosition, wxDefaultSize, m_OutlineDisplayCtrlNChoices, m_OutlineDisplayCtrlChoices, 0 );
|
||||
m_OutlineDisplayCtrl->SetSelection( 0 );
|
||||
gbSizer1->Add( m_OutlineDisplayCtrl, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_staticline1 = new wxStaticLine( m_ExportableSetupSizer->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||
gbSizer1->Add( m_staticline1, wxGBPosition( 3, 0 ), wxGBSpan( 1, 3 ), wxEXPAND|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
@ -151,12 +172,16 @@ DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID i
|
||||
gbSizer1->Add( m_cornerRadiusUnits, wxGBPosition( 5, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
|
||||
gbSizer1->AddGrowableCol( 0 );
|
||||
gbSizer1->AddGrowableCol( 1 );
|
||||
|
||||
m_ExportableSetupSizer->Add( gbSizer1, 0, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||
m_ExportableSetupSizer->Add( gbSizer1, 1, wxEXPAND|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
bSizerMiddle->Add( m_ExportableSetupSizer, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 10 );
|
||||
bSizer7->Add( m_ExportableSetupSizer, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
bSizerMiddle->Add( bSizer7, 1, wxEXPAND, 5 );
|
||||
|
||||
wxStaticBoxSizer* sbSizer5;
|
||||
sbSizer5 = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Electrical Properties") ), wxVERTICAL );
|
||||
@ -190,52 +215,52 @@ DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID i
|
||||
m_minWidthUnits->Wrap( -1 );
|
||||
gbSizerSettings->Add( m_minWidthUnits, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticline2 = new wxStaticLine( sbSizer5->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||
gbSizerSettings->Add( m_staticline2, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxEXPAND|wxTOP|wxBOTTOM, 5 );
|
||||
|
||||
m_staticline3 = new wxStaticLine( sbSizer5->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||
gbSizerSettings->Add( m_staticline3, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxTOP|wxBOTTOM, 5 );
|
||||
|
||||
m_staticline4 = new wxStaticLine( sbSizer5->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||
gbSizerSettings->Add( m_staticline4, wxGBPosition( 2, 2 ), wxGBSpan( 1, 1 ), wxEXPAND|wxTOP|wxBOTTOM, 5 );
|
||||
|
||||
m_connectionLabel = new wxStaticText( sbSizer5->GetStaticBox(), wxID_ANY, _("Pad connections:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_connectionLabel->Wrap( -1 );
|
||||
m_connectionLabel->SetToolTip( _("Default pad connection type to zone.\nThis setting can be overridden by local pad settings") );
|
||||
|
||||
gbSizerSettings->Add( m_connectionLabel, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
gbSizerSettings->Add( m_connectionLabel, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
|
||||
wxString m_PadInZoneOptChoices[] = { _("Solid"), _("Thermal reliefs"), _("Reliefs for PTH"), _("None") };
|
||||
int m_PadInZoneOptNChoices = sizeof( m_PadInZoneOptChoices ) / sizeof( wxString );
|
||||
m_PadInZoneOpt = new wxChoice( sbSizer5->GetStaticBox(), ID_M_PADINZONEOPT, wxDefaultPosition, wxDefaultSize, m_PadInZoneOptNChoices, m_PadInZoneOptChoices, 0 );
|
||||
m_PadInZoneOpt->SetSelection( 0 );
|
||||
gbSizerSettings->Add( m_PadInZoneOpt, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALL, 5 );
|
||||
gbSizerSettings->Add( m_PadInZoneOpt, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALL, 5 );
|
||||
|
||||
m_antipadLabel = new wxStaticText( sbSizer5->GetStaticBox(), wxID_ANY, _("Thermal clearance:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_antipadLabel->Wrap( -1 );
|
||||
gbSizerSettings->Add( m_antipadLabel, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
gbSizerSettings->Add( m_antipadLabel, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_antipadCtrl = new wxTextCtrl( sbSizer5->GetStaticBox(), wxID_ANTIPAD_SIZE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_antipadCtrl->SetToolTip( _("Clearance between pads in the same net and filled areas.") );
|
||||
|
||||
gbSizerSettings->Add( m_antipadCtrl, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
gbSizerSettings->Add( m_antipadCtrl, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_antipadUnits = new wxStaticText( sbSizer5->GetStaticBox(), wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_antipadUnits->Wrap( -1 );
|
||||
gbSizerSettings->Add( m_antipadUnits, wxGBPosition( 3, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT, 5 );
|
||||
gbSizerSettings->Add( m_antipadUnits, wxGBPosition( 4, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT, 5 );
|
||||
|
||||
m_spokeWidthLabel = new wxStaticText( sbSizer5->GetStaticBox(), wxID_ANY, _("Thermal spoke width:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_spokeWidthLabel->Wrap( -1 );
|
||||
gbSizerSettings->Add( m_spokeWidthLabel, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
gbSizerSettings->Add( m_spokeWidthLabel, wxGBPosition( 5, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
|
||||
m_spokeWidthCtrl = new wxTextCtrl( sbSizer5->GetStaticBox(), wxID_COPPER_BRIDGE_VALUE, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_spokeWidthCtrl->SetToolTip( _("Width of copper in thermal reliefs.") );
|
||||
|
||||
gbSizerSettings->Add( m_spokeWidthCtrl, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALL, 5 );
|
||||
gbSizerSettings->Add( m_spokeWidthCtrl, wxGBPosition( 5, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALL, 5 );
|
||||
|
||||
m_spokeWidthUnits = new wxStaticText( sbSizer5->GetStaticBox(), wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_spokeWidthUnits->Wrap( -1 );
|
||||
gbSizerSettings->Add( m_spokeWidthUnits, wxGBPosition( 4, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticText39 = new wxStaticText( sbSizer5->GetStaticBox(), wxID_ANY, _("Zone name:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText39->Wrap( -1 );
|
||||
m_staticText39->SetToolTip( _("A unique name for this zone to identify it for DRC") );
|
||||
|
||||
gbSizerSettings->Add( m_staticText39, wxGBPosition( 5, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
|
||||
m_tcZoneName = new wxTextCtrl( sbSizer5->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
gbSizerSettings->Add( m_tcZoneName, wxGBPosition( 5, 1 ), wxGBSpan( 1, 1 ), wxALL|wxEXPAND, 5 );
|
||||
gbSizerSettings->Add( m_spokeWidthUnits, wxGBPosition( 5, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
|
||||
gbSizerSettings->AddGrowableCol( 1 );
|
||||
@ -255,65 +280,65 @@ DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID i
|
||||
|
||||
m_staticTextGridFillType = new wxStaticText( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, _("Fill type:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGridFillType->Wrap( -1 );
|
||||
gbSizer3->Add( m_staticTextGridFillType, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
gbSizer3->Add( m_staticTextGridFillType, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
wxString m_GridStyleCtrlChoices[] = { _("Solid shape"), _("Hatch pattern") };
|
||||
int m_GridStyleCtrlNChoices = sizeof( m_GridStyleCtrlChoices ) / sizeof( wxString );
|
||||
m_GridStyleCtrl = new wxChoice( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_GridStyleCtrlNChoices, m_GridStyleCtrlChoices, 0 );
|
||||
m_GridStyleCtrl->SetSelection( 0 );
|
||||
gbSizer3->Add( m_GridStyleCtrl, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||
gbSizer3->Add( m_GridStyleCtrl, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||
|
||||
m_staticTextGrindOrient = new wxStaticText( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, _("Orientation:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGrindOrient->Wrap( -1 );
|
||||
gbSizer3->Add( m_staticTextGrindOrient, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
|
||||
m_tcGridStyleOrientation = new wxTextCtrl( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
gbSizer3->Add( m_tcGridStyleOrientation, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALL|wxEXPAND, 5 );
|
||||
gbSizer3->Add( m_tcGridStyleOrientation, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
|
||||
m_staticTextRotUnits = new wxStaticText( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, _("deg"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextRotUnits->Wrap( -1 );
|
||||
gbSizer3->Add( m_staticTextRotUnits, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
gbSizer3->Add( m_staticTextRotUnits, wxGBPosition( 1, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticTextStyleThickness = new wxStaticText( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, _("Hatch width:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextStyleThickness->Wrap( -1 );
|
||||
gbSizer3->Add( m_staticTextStyleThickness, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
gbSizer3->Add( m_staticTextStyleThickness, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_tcGridStyleThickness = new wxTextCtrl( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
gbSizer3->Add( m_tcGridStyleThickness, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALL|wxEXPAND, 5 );
|
||||
gbSizer3->Add( m_tcGridStyleThickness, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_GridStyleThicknessUnits = new wxStaticText( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_GridStyleThicknessUnits->Wrap( -1 );
|
||||
gbSizer3->Add( m_GridStyleThicknessUnits, wxGBPosition( 2, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
gbSizer3->Add( m_GridStyleThicknessUnits, wxGBPosition( 2, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticTextGridGap = new wxStaticText( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, _("Hatch gap:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGridGap->Wrap( -1 );
|
||||
gbSizer3->Add( m_staticTextGridGap, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
gbSizer3->Add( m_staticTextGridGap, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_tcGridStyleGap = new wxTextCtrl( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
gbSizer3->Add( m_tcGridStyleGap, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxALL|wxEXPAND, 5 );
|
||||
gbSizer3->Add( m_tcGridStyleGap, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_GridStyleGapUnits = new wxStaticText( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_GridStyleGapUnits->Wrap( -1 );
|
||||
gbSizer3->Add( m_GridStyleGapUnits, wxGBPosition( 3, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
gbSizer3->Add( m_GridStyleGapUnits, wxGBPosition( 3, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticTextGridSmoothingLevel = new wxStaticText( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, _("Smoothing effort:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGridSmoothingLevel->Wrap( -1 );
|
||||
m_staticTextGridSmoothingLevel->SetToolTip( _("Value of smoothing effort\n0 = no smoothing\n1 = chamfer\n2 = round corners\n3 = round corners (finer shape)") );
|
||||
|
||||
gbSizer3->Add( m_staticTextGridSmoothingLevel, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
gbSizer3->Add( m_staticTextGridSmoothingLevel, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_spinCtrlSmoothLevel = new wxSpinCtrl( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 3, 0 );
|
||||
gbSizer3->Add( m_spinCtrlSmoothLevel, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||
gbSizer3->Add( m_spinCtrlSmoothLevel, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
|
||||
m_staticTextGridSmootingVal = new wxStaticText( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, _("Smooth value (0..1):"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGridSmootingVal = new wxStaticText( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, _("Smoothing amount:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGridSmootingVal->Wrap( -1 );
|
||||
m_staticTextGridSmootingVal->SetToolTip( _("Ratio between smoothed corners size and the gap between lines\n0 = no smoothing\n1.0 = max radius/chamfer size (half gap value)") );
|
||||
|
||||
gbSizer3->Add( m_staticTextGridSmootingVal, wxGBPosition( 5, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
gbSizer3->Add( m_staticTextGridSmootingVal, wxGBPosition( 5, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_spinCtrlSmoothValue = new wxSpinCtrlDouble( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 1, 0.100000, 0.1 );
|
||||
m_spinCtrlSmoothValue->SetDigits( 0 );
|
||||
gbSizer3->Add( m_spinCtrlSmoothValue, wxGBPosition( 5, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||
gbSizer3->Add( m_spinCtrlSmoothValue, wxGBPosition( 5, 1 ), wxGBSpan( 1, 1 ), wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
|
||||
m_staticText40 = new wxStaticText( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, _("Remove islands:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticText40->Wrap( -1 );
|
||||
@ -325,25 +350,25 @@ DIALOG_COPPER_ZONE_BASE::DIALOG_COPPER_ZONE_BASE( wxWindow* parent, wxWindowID i
|
||||
int m_cbRemoveIslandsNChoices = sizeof( m_cbRemoveIslandsChoices ) / sizeof( wxString );
|
||||
m_cbRemoveIslands = new wxChoice( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_cbRemoveIslandsNChoices, m_cbRemoveIslandsChoices, 0 );
|
||||
m_cbRemoveIslands->SetSelection( 0 );
|
||||
gbSizer3->Add( m_cbRemoveIslands, wxGBPosition( 6, 1 ), wxGBSpan( 1, 1 ), wxALL, 5 );
|
||||
gbSizer3->Add( m_cbRemoveIslands, wxGBPosition( 6, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
|
||||
m_islandThresholdLabel = new wxStaticText( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, _("Minimum island size:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_islandThresholdLabel->Wrap( -1 );
|
||||
m_islandThresholdLabel->Enable( false );
|
||||
m_islandThresholdLabel->SetToolTip( _("Isolated islands smaller than this will be removed") );
|
||||
|
||||
gbSizer3->Add( m_islandThresholdLabel, wxGBPosition( 7, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
gbSizer3->Add( m_islandThresholdLabel, wxGBPosition( 7, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_tcIslandThreshold = new wxTextCtrl( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_tcIslandThreshold->Enable( false );
|
||||
|
||||
gbSizer3->Add( m_tcIslandThreshold, wxGBPosition( 7, 1 ), wxGBSpan( 1, 1 ), wxALL|wxEXPAND, 5 );
|
||||
gbSizer3->Add( m_tcIslandThreshold, wxGBPosition( 7, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_islandThresholdUnits = new wxStaticText( sbSizerZoneStyle->GetStaticBox(), wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_islandThresholdUnits->Wrap( -1 );
|
||||
m_islandThresholdUnits->Enable( false );
|
||||
|
||||
gbSizer3->Add( m_islandThresholdUnits, wxGBPosition( 7, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
gbSizer3->Add( m_islandThresholdUnits, wxGBPosition( 7, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
|
||||
gbSizer3->AddGrowableCol( 1 );
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -73,11 +73,13 @@ class DIALOG_COPPER_ZONE_BASE : public DIALOG_SHIM
|
||||
wxBoxSizer* m_bNoNetWarning;
|
||||
wxStaticBitmap* m_bitmapNoNetWarning;
|
||||
wxStaticText* m_staticText18;
|
||||
wxStaticText* m_zoneNameLabel;
|
||||
wxTextCtrl* m_tcZoneName;
|
||||
wxCheckBox* m_constrainOutline;
|
||||
wxStaticText* m_staticTextPriorityLevel;
|
||||
wxSpinCtrl* m_PriorityLevelCtrl;
|
||||
wxStaticText* m_staticTextStyle;
|
||||
wxChoice* m_OutlineAppearanceCtrl;
|
||||
wxChoice* m_OutlineDisplayCtrl;
|
||||
wxStaticLine* m_staticline1;
|
||||
wxStaticText* m_staticTextSmoothing;
|
||||
wxChoice* m_cornerSmoothingChoice;
|
||||
@ -90,6 +92,9 @@ class DIALOG_COPPER_ZONE_BASE : public DIALOG_SHIM
|
||||
wxStaticText* m_minWidthLabel;
|
||||
wxTextCtrl* m_minWidthCtrl;
|
||||
wxStaticText* m_minWidthUnits;
|
||||
wxStaticLine* m_staticline2;
|
||||
wxStaticLine* m_staticline3;
|
||||
wxStaticLine* m_staticline4;
|
||||
wxStaticText* m_connectionLabel;
|
||||
wxChoice* m_PadInZoneOpt;
|
||||
wxStaticText* m_antipadLabel;
|
||||
@ -98,8 +103,6 @@ class DIALOG_COPPER_ZONE_BASE : public DIALOG_SHIM
|
||||
wxStaticText* m_spokeWidthLabel;
|
||||
wxTextCtrl* m_spokeWidthCtrl;
|
||||
wxStaticText* m_spokeWidthUnits;
|
||||
wxStaticText* m_staticText39;
|
||||
wxTextCtrl* m_tcZoneName;
|
||||
wxStaticText* m_staticTextGridFillType;
|
||||
wxChoice* m_GridStyleCtrl;
|
||||
wxStaticText* m_staticTextGrindOrient;
|
||||
|
@ -99,20 +99,14 @@ bool DIALOG_KEEPOUT_AREA_PROPERTIES::TransferDataToWindow()
|
||||
|
||||
m_tcName->SetValue( m_zonesettings.m_Name );
|
||||
|
||||
switch( m_zonesettings.m_Zone_HatchingStyle )
|
||||
switch( m_zonesettings.m_ZoneBorderDisplayStyle )
|
||||
{
|
||||
case ZONE_HATCH_STYLE::NO_HATCH:
|
||||
m_OutlineAppearanceCtrl->SetSelection( 0 );
|
||||
break;
|
||||
case ZONE_HATCH_STYLE::DIAGONAL_EDGE:
|
||||
m_OutlineAppearanceCtrl->SetSelection( 1 );
|
||||
break;
|
||||
case ZONE_HATCH_STYLE::DIAGONAL_FULL:
|
||||
m_OutlineAppearanceCtrl->SetSelection( 2 );
|
||||
break;
|
||||
case ZONE_BORDER_DISPLAY_STYLE::NO_HATCH: m_OutlineDisplayCtrl->SetSelection( 0 ); break;
|
||||
case ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE: m_OutlineDisplayCtrl->SetSelection( 1 ); break;
|
||||
case ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_FULL: m_OutlineDisplayCtrl->SetSelection( 2 ); break;
|
||||
}
|
||||
|
||||
SetInitialFocus( m_OutlineAppearanceCtrl );
|
||||
SetInitialFocus( m_OutlineDisplayCtrl );
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -170,21 +164,15 @@ bool DIALOG_KEEPOUT_AREA_PROPERTIES::TransferDataFromWindow()
|
||||
return false;
|
||||
}
|
||||
|
||||
switch( m_OutlineAppearanceCtrl->GetSelection() )
|
||||
switch( m_OutlineDisplayCtrl->GetSelection() )
|
||||
{
|
||||
case 0:
|
||||
m_zonesettings.m_Zone_HatchingStyle = ZONE_HATCH_STYLE::NO_HATCH;
|
||||
break;
|
||||
case 1:
|
||||
m_zonesettings.m_Zone_HatchingStyle = ZONE_HATCH_STYLE::DIAGONAL_EDGE;
|
||||
break;
|
||||
case 2:
|
||||
m_zonesettings.m_Zone_HatchingStyle = ZONE_HATCH_STYLE::DIAGONAL_FULL;
|
||||
break;
|
||||
case 0: m_zonesettings.m_ZoneBorderDisplayStyle = ZONE_BORDER_DISPLAY_STYLE::NO_HATCH; break;
|
||||
case 1: m_zonesettings.m_ZoneBorderDisplayStyle = ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE; break;
|
||||
case 2: m_zonesettings.m_ZoneBorderDisplayStyle = ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_FULL; break;
|
||||
}
|
||||
|
||||
auto cfg = m_parent->GetPcbNewSettings();
|
||||
cfg->m_Zones.hatching_style = static_cast<int>( m_zonesettings.m_Zone_HatchingStyle );
|
||||
cfg->m_Zones.hatching_style = static_cast<int>( m_zonesettings.m_ZoneBorderDisplayStyle );
|
||||
|
||||
m_zonesettings.m_Zone_45_Only = m_cbConstrainCtrl->GetValue();
|
||||
m_zonesettings.m_ZonePriority = 0; // for a keepout, this param is not used.
|
||||
|
@ -69,11 +69,11 @@ DIALOG_KEEPOUT_AREA_PROPERTIES_BASE::DIALOG_KEEPOUT_AREA_PROPERTIES_BASE( wxWind
|
||||
m_staticTextStyle->Wrap( -1 );
|
||||
bSizerLowerRight->Add( m_staticTextStyle, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched"), _("Fully hatched") };
|
||||
int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
|
||||
m_OutlineAppearanceCtrl = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 0 );
|
||||
m_OutlineAppearanceCtrl->SetSelection( 0 );
|
||||
bSizerLowerRight->Add( m_OutlineAppearanceCtrl, 0, wxALL, 5 );
|
||||
wxString m_OutlineDisplayCtrlChoices[] = { _("Line"), _("Hatched"), _("Fully hatched") };
|
||||
int m_OutlineDisplayCtrlNChoices = sizeof( m_OutlineDisplayCtrlChoices ) / sizeof( wxString );
|
||||
m_OutlineDisplayCtrl = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_OutlineDisplayCtrlNChoices, m_OutlineDisplayCtrlChoices, 0 );
|
||||
m_OutlineDisplayCtrl->SetSelection( 0 );
|
||||
bSizerLowerRight->Add( m_OutlineDisplayCtrl, 0, wxALL, 5 );
|
||||
|
||||
|
||||
bSizerRight->Add( bSizerLowerRight, 0, wxEXPAND, 5 );
|
||||
|
@ -702,7 +702,7 @@
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_OutlineAppearanceCtrl</property>
|
||||
<property name="name">m_OutlineDisplayCtrl</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
|
@ -46,7 +46,7 @@ class DIALOG_KEEPOUT_AREA_PROPERTIES_BASE : public DIALOG_SHIM
|
||||
wxCheckBox* m_cbFootprintsCtrl;
|
||||
wxCheckBox* m_cbConstrainCtrl;
|
||||
wxStaticText* m_staticTextStyle;
|
||||
wxChoice* m_OutlineAppearanceCtrl;
|
||||
wxChoice* m_OutlineDisplayCtrl;
|
||||
wxStaticText* m_staticText3;
|
||||
wxTextCtrl* m_tcName;
|
||||
wxStaticLine* m_staticline1;
|
||||
|
@ -120,31 +120,23 @@ bool DIALOG_NON_COPPER_ZONES_EDITOR::TransferDataToWindow()
|
||||
m_minWidth.SetValue( m_settings.m_ZoneMinThickness );
|
||||
m_ConstrainOpt->SetValue( m_settings.m_Zone_45_Only );
|
||||
|
||||
switch( m_settings.m_Zone_HatchingStyle )
|
||||
switch( m_settings.m_ZoneBorderDisplayStyle )
|
||||
{
|
||||
case ZONE_HATCH_STYLE::NO_HATCH:
|
||||
m_OutlineAppearanceCtrl->SetSelection( 0 );
|
||||
break;
|
||||
case ZONE_HATCH_STYLE::DIAGONAL_EDGE:
|
||||
m_OutlineAppearanceCtrl->SetSelection( 1 );
|
||||
break;
|
||||
case ZONE_HATCH_STYLE::DIAGONAL_FULL:
|
||||
m_OutlineAppearanceCtrl->SetSelection( 2 );
|
||||
break;
|
||||
case ZONE_BORDER_DISPLAY_STYLE::NO_HATCH: m_OutlineDisplayCtrl->SetSelection( 0 ); break;
|
||||
case ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE: m_OutlineDisplayCtrl->SetSelection( 1 ); break;
|
||||
case ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_FULL: m_OutlineDisplayCtrl->SetSelection( 2 ); break;
|
||||
}
|
||||
|
||||
SetInitialFocus( m_OutlineAppearanceCtrl );
|
||||
SetInitialFocus( m_OutlineDisplayCtrl );
|
||||
|
||||
switch( m_settings.m_FillMode )
|
||||
{
|
||||
case ZONE_FILL_MODE::HATCH_PATTERN:
|
||||
m_GridStyleCtrl->SetSelection( 1 ); break;
|
||||
default:
|
||||
m_GridStyleCtrl->SetSelection( 0 ); break;
|
||||
case ZONE_FILL_MODE::HATCH_PATTERN: m_GridStyleCtrl->SetSelection( 1 ); break;
|
||||
default: m_GridStyleCtrl->SetSelection( 0 ); break;
|
||||
}
|
||||
|
||||
m_gridStyleRotation.SetUnits( EDA_UNITS::DEGREES );
|
||||
m_gridStyleRotation.SetValue( m_settings.m_HatchFillTypeOrientation*10 ); // IU is decidegree
|
||||
m_gridStyleRotation.SetValue( m_settings.m_HatchOrientation * 10 ); // IU is decidegree
|
||||
|
||||
// Gives a reasonable value to grid style parameters, if currently there are no defined
|
||||
// parameters for grid pattern thickness and gap (if the value is 0)
|
||||
@ -152,22 +144,22 @@ bool DIALOG_NON_COPPER_ZONES_EDITOR::TransferDataToWindow()
|
||||
// or 1mm
|
||||
// the grid pattern gap default value is (arbitrary) m_ZoneMinThickness * 6
|
||||
// or 1.5 mm
|
||||
int bestvalue = m_settings.m_HatchFillTypeThickness;
|
||||
int bestvalue = m_settings.m_HatchThickness;
|
||||
|
||||
if( bestvalue <= 0 ) // No defined value for m_HatchFillTypeThickness
|
||||
if( bestvalue <= 0 ) // No defined value for m_hatchThickness
|
||||
bestvalue = std::max( m_settings.m_ZoneMinThickness * 4, Millimeter2iu( 1.0 ) );
|
||||
|
||||
m_gridStyleThickness.SetValue( std::max( bestvalue, m_settings.m_ZoneMinThickness ) );
|
||||
|
||||
bestvalue = m_settings.m_HatchFillTypeGap;
|
||||
bestvalue = m_settings.m_HatchGap;
|
||||
|
||||
if( bestvalue <= 0 ) // No defined value for m_HatchFillTypeGap
|
||||
if( bestvalue <= 0 ) // No defined value for m_hatchGap
|
||||
bestvalue = std::max( m_settings.m_ZoneMinThickness * 6, Millimeter2iu( 1.5 ) );
|
||||
|
||||
m_gridStyleGap.SetValue( std::max( bestvalue, m_settings.m_ZoneMinThickness ) );
|
||||
|
||||
m_spinCtrlSmoothLevel->SetValue( m_settings.m_HatchFillTypeSmoothingLevel );
|
||||
m_spinCtrlSmoothValue->SetValue( m_settings.m_HatchFillTypeSmoothingValue );
|
||||
m_spinCtrlSmoothLevel->SetValue( m_settings.m_HatchSmoothingLevel );
|
||||
m_spinCtrlSmoothValue->SetValue( m_settings.m_HatchSmoothingValue );
|
||||
|
||||
// Enable/Disable some widgets
|
||||
wxCommandEvent event;
|
||||
@ -214,17 +206,11 @@ bool DIALOG_NON_COPPER_ZONES_EDITOR::TransferDataFromWindow()
|
||||
|
||||
m_settings.m_ZoneMinThickness = m_minWidth.GetValue();
|
||||
|
||||
switch( m_OutlineAppearanceCtrl->GetSelection() )
|
||||
switch( m_OutlineDisplayCtrl->GetSelection() )
|
||||
{
|
||||
case 0:
|
||||
m_settings.m_Zone_HatchingStyle = ZONE_HATCH_STYLE::NO_HATCH;
|
||||
break;
|
||||
case 1:
|
||||
m_settings.m_Zone_HatchingStyle = ZONE_HATCH_STYLE::DIAGONAL_EDGE;
|
||||
break;
|
||||
case 2:
|
||||
m_settings.m_Zone_HatchingStyle = ZONE_HATCH_STYLE::DIAGONAL_FULL;
|
||||
break;
|
||||
case 0: m_settings.m_ZoneBorderDisplayStyle = ZONE_BORDER_DISPLAY_STYLE::NO_HATCH; break;
|
||||
case 1: m_settings.m_ZoneBorderDisplayStyle = ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE; break;
|
||||
case 2: m_settings.m_ZoneBorderDisplayStyle = ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_FULL; break;
|
||||
}
|
||||
|
||||
if( m_GridStyleCtrl->GetSelection() > 0 )
|
||||
@ -245,14 +231,14 @@ bool DIALOG_NON_COPPER_ZONES_EDITOR::TransferDataFromWindow()
|
||||
}
|
||||
|
||||
|
||||
m_settings.m_HatchFillTypeOrientation = m_gridStyleRotation.GetValue()/10.0; // value is returned in deci-degree
|
||||
m_settings.m_HatchFillTypeThickness = m_gridStyleThickness.GetValue();
|
||||
m_settings.m_HatchFillTypeGap = m_gridStyleGap.GetValue();
|
||||
m_settings.m_HatchFillTypeSmoothingLevel = m_spinCtrlSmoothLevel->GetValue();
|
||||
m_settings.m_HatchFillTypeSmoothingValue = m_spinCtrlSmoothValue->GetValue();
|
||||
m_settings.m_HatchOrientation = m_gridStyleRotation.GetValue() / 10.0; // value is returned in deci-degree
|
||||
m_settings.m_HatchThickness = m_gridStyleThickness.GetValue();
|
||||
m_settings.m_HatchGap = m_gridStyleGap.GetValue();
|
||||
m_settings.m_HatchSmoothingLevel = m_spinCtrlSmoothLevel->GetValue();
|
||||
m_settings.m_HatchSmoothingValue = m_spinCtrlSmoothValue->GetValue();
|
||||
|
||||
auto cfg = m_parent->GetPcbNewSettings();
|
||||
cfg->m_Zones.hatching_style = static_cast<int>( m_settings.m_Zone_HatchingStyle );
|
||||
cfg->m_Zones.hatching_style = static_cast<int>( m_settings.m_ZoneBorderDisplayStyle );
|
||||
|
||||
m_settings.m_Zone_45_Only = m_ConstrainOpt->GetValue();
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Dec 1 2018)
|
||||
// C++ code generated with wxFormBuilder (version Oct 26 2018)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
@ -32,51 +32,77 @@ DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE::DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE(
|
||||
bSizerLeft->Add( m_layers, 1, wxALL|wxEXPAND, 5 );
|
||||
|
||||
|
||||
bSizerLeft->Add( 0, 5, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_UpperSizer->Add( bSizerLeft, 1, wxEXPAND, 5 );
|
||||
|
||||
wxBoxSizer* bSizerMiddle;
|
||||
bSizerMiddle = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
wxStaticBoxSizer* sbShape;
|
||||
sbShape = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Shape") ), wxVERTICAL );
|
||||
|
||||
wxGridBagSizer* gbSizer1;
|
||||
gbSizer1 = new wxGridBagSizer( 0, 0 );
|
||||
gbSizer1->SetFlexibleDirection( wxBOTH );
|
||||
gbSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
m_ConstrainOpt = new wxCheckBox( this, wxID_ANY, _("Constrain outline to H, V and 45 degrees"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_ConstrainOpt = new wxCheckBox( sbShape->GetStaticBox(), wxID_ANY, _("Constrain outline to H, V and 45 degrees"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
gbSizer1->Add( m_ConstrainOpt, wxGBPosition( 0, 0 ), wxGBSpan( 1, 3 ), wxALL, 5 );
|
||||
|
||||
m_staticTextStyle = new wxStaticText( this, wxID_ANY, _("Outline style:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextStyle = new wxStaticText( sbShape->GetStaticBox(), wxID_ANY, _("Outline style:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextStyle->Wrap( -1 );
|
||||
gbSizer1->Add( m_staticTextStyle, wxGBPosition( 1, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
|
||||
wxString m_OutlineAppearanceCtrlChoices[] = { _("Line"), _("Hatched"), _("Fully hatched") };
|
||||
int m_OutlineAppearanceCtrlNChoices = sizeof( m_OutlineAppearanceCtrlChoices ) / sizeof( wxString );
|
||||
m_OutlineAppearanceCtrl = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_OutlineAppearanceCtrlNChoices, m_OutlineAppearanceCtrlChoices, 0 );
|
||||
m_OutlineAppearanceCtrl->SetSelection( 0 );
|
||||
gbSizer1->Add( m_OutlineAppearanceCtrl, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALL|wxEXPAND, 5 );
|
||||
wxString m_OutlineDisplayCtrlChoices[] = { _("Line"), _("Hatched"), _("Fully hatched") };
|
||||
int m_OutlineDisplayCtrlNChoices = sizeof( m_OutlineDisplayCtrlChoices ) / sizeof( wxString );
|
||||
m_OutlineDisplayCtrl = new wxChoice( sbShape->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_OutlineDisplayCtrlNChoices, m_OutlineDisplayCtrlChoices, 0 );
|
||||
m_OutlineDisplayCtrl->SetSelection( 0 );
|
||||
gbSizer1->Add( m_OutlineDisplayCtrl, wxGBPosition( 1, 1 ), wxGBSpan( 1, 1 ), wxALL|wxEXPAND, 5 );
|
||||
|
||||
m_MinWidthLabel = new wxStaticText( this, wxID_ANY, _("Minimum width:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_MinWidthLabel = new wxStaticText( sbShape->GetStaticBox(), wxID_ANY, _("Minimum width:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_MinWidthLabel->Wrap( -1 );
|
||||
gbSizer1->Add( m_MinWidthLabel, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxALL, 5 );
|
||||
gbSizer1->Add( m_MinWidthLabel, wxGBPosition( 2, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_MinWidthCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
gbSizer1->Add( m_MinWidthCtrl, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxALL|wxEXPAND, 5 );
|
||||
m_MinWidthCtrl = new wxTextCtrl( sbShape->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
gbSizer1->Add( m_MinWidthCtrl, wxGBPosition( 2, 1 ), wxGBSpan( 1, 1 ), wxEXPAND|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_MinWidthUnits = new wxStaticText( this, wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_MinWidthUnits = new wxStaticText( sbShape->GetStaticBox(), wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_MinWidthUnits->Wrap( -1 );
|
||||
gbSizer1->Add( m_MinWidthUnits, wxGBPosition( 2, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
gbSizer1->Add( m_MinWidthUnits, wxGBPosition( 2, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticTextSmoothing = new wxStaticText( sbShape->GetStaticBox(), wxID_ANY, _("Outline smooth:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextSmoothing->Wrap( -1 );
|
||||
gbSizer1->Add( m_staticTextSmoothing, wxGBPosition( 3, 0 ), wxGBSpan( 1, 1 ), wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
wxString m_cornerSmoothingChoiceChoices[] = { _("None"), _("Chamfer"), _("Fillet") };
|
||||
int m_cornerSmoothingChoiceNChoices = sizeof( m_cornerSmoothingChoiceChoices ) / sizeof( wxString );
|
||||
m_cornerSmoothingChoice = new wxChoice( sbShape->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_cornerSmoothingChoiceNChoices, m_cornerSmoothingChoiceChoices, 0 );
|
||||
m_cornerSmoothingChoice->SetSelection( 0 );
|
||||
gbSizer1->Add( m_cornerSmoothingChoice, wxGBPosition( 3, 1 ), wxGBSpan( 1, 1 ), wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
|
||||
m_cornerRadiusLabel = new wxStaticText( sbShape->GetStaticBox(), wxID_ANY, _("Chamfer distance:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_cornerRadiusLabel->Wrap( -1 );
|
||||
gbSizer1->Add( m_cornerRadiusLabel, wxGBPosition( 4, 0 ), wxGBSpan( 1, 1 ), wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_cornerRadiusCtrl = new wxTextCtrl( sbShape->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
gbSizer1->Add( m_cornerRadiusCtrl, wxGBPosition( 4, 1 ), wxGBSpan( 1, 1 ), wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 );
|
||||
|
||||
m_cornerRadiusUnits = new wxStaticText( sbShape->GetStaticBox(), wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_cornerRadiusUnits->Wrap( -1 );
|
||||
gbSizer1->Add( m_cornerRadiusUnits, wxGBPosition( 4, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
|
||||
bSizerMiddle->Add( gbSizer1, 0, wxEXPAND, 5 );
|
||||
gbSizer1->AddGrowableCol( 1 );
|
||||
|
||||
m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||
bSizerMiddle->Add( m_staticline2, 0, wxEXPAND | wxALL, 5 );
|
||||
sbShape->Add( gbSizer1, 0, wxEXPAND, 5 );
|
||||
|
||||
m_staticTextGridStyle = new wxStaticText( this, wxID_ANY, _("Grid Style:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGridStyle->Wrap( -1 );
|
||||
m_staticTextGridStyle->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
bSizerMiddle->Add( m_staticTextGridStyle, 0, wxALIGN_CENTER_HORIZONTAL|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
bSizerMiddle->Add( sbShape, 1, wxEXPAND, 5 );
|
||||
|
||||
wxStaticBoxSizer* sbFill;
|
||||
sbFill = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, _("Fill") ), wxVERTICAL );
|
||||
|
||||
wxFlexGridSizer* fgSizer1;
|
||||
fgSizer1 = new wxFlexGridSizer( 0, 3, 0, 0 );
|
||||
@ -84,124 +110,82 @@ DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE::DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE(
|
||||
fgSizer1->SetFlexibleDirection( wxBOTH );
|
||||
fgSizer1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
m_staticTextGridFillType = new wxStaticText( this, wxID_ANY, _("Fill type:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGridFillType = new wxStaticText( sbFill->GetStaticBox(), wxID_ANY, _("Fill type:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGridFillType->Wrap( -1 );
|
||||
fgSizer1->Add( m_staticTextGridFillType, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
wxString m_GridStyleCtrlChoices[] = { _("Solid shape"), _("Hatch pattern") };
|
||||
wxString m_GridStyleCtrlChoices[] = { _("Solid shape"), _("HatchBorder pattern") };
|
||||
int m_GridStyleCtrlNChoices = sizeof( m_GridStyleCtrlChoices ) / sizeof( wxString );
|
||||
m_GridStyleCtrl = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_GridStyleCtrlNChoices, m_GridStyleCtrlChoices, 0 );
|
||||
m_GridStyleCtrl = new wxChoice( sbFill->GetStaticBox(), wxID_ANY, wxDefaultPosition, wxDefaultSize, m_GridStyleCtrlNChoices, m_GridStyleCtrlChoices, 0 );
|
||||
m_GridStyleCtrl->SetSelection( 0 );
|
||||
fgSizer1->Add( m_GridStyleCtrl, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||
|
||||
|
||||
fgSizer1->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||
|
||||
m_staticTextGrindOrient = new wxStaticText( this, wxID_ANY, _("Orientation:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGrindOrient = new wxStaticText( sbFill->GetStaticBox(), wxID_ANY, _("Orientation:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGrindOrient->Wrap( -1 );
|
||||
fgSizer1->Add( m_staticTextGrindOrient, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_tcGridStyleOrientation = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_tcGridStyleOrientation = new wxTextCtrl( sbFill->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer1->Add( m_tcGridStyleOrientation, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||
|
||||
m_staticTextRotUnits = new wxStaticText( this, wxID_ANY, _("degree"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextRotUnits = new wxStaticText( sbFill->GetStaticBox(), wxID_ANY, _("degree"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextRotUnits->Wrap( -1 );
|
||||
fgSizer1->Add( m_staticTextRotUnits, 0, wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticTextStyleThickness = new wxStaticText( this, wxID_ANY, _("Hatch width:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextStyleThickness = new wxStaticText( sbFill->GetStaticBox(), wxID_ANY, _("Hatch width:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextStyleThickness->Wrap( -1 );
|
||||
fgSizer1->Add( m_staticTextStyleThickness, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_tcGridStyleThickness = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_tcGridStyleThickness = new wxTextCtrl( sbFill->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer1->Add( m_tcGridStyleThickness, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||
|
||||
m_GridStyleThicknessUnits = new wxStaticText( this, wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_GridStyleThicknessUnits = new wxStaticText( sbFill->GetStaticBox(), wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_GridStyleThicknessUnits->Wrap( -1 );
|
||||
fgSizer1->Add( m_GridStyleThicknessUnits, 0, wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticTextGridGap = new wxStaticText( this, wxID_ANY, _("Hatch gap:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGridGap = new wxStaticText( sbFill->GetStaticBox(), wxID_ANY, _("Hatch gap:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGridGap->Wrap( -1 );
|
||||
fgSizer1->Add( m_staticTextGridGap, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_tcGridStyleGap = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_tcGridStyleGap = new wxTextCtrl( sbFill->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizer1->Add( m_tcGridStyleGap, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||
|
||||
m_GridStyleGapUnits = new wxStaticText( this, wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_GridStyleGapUnits = new wxStaticText( sbFill->GetStaticBox(), wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_GridStyleGapUnits->Wrap( -1 );
|
||||
fgSizer1->Add( m_GridStyleGapUnits, 0, wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
|
||||
m_staticTextGridSmoothingLevel = new wxStaticText( this, wxID_ANY, _("Smoothing effort:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGridSmoothingLevel = new wxStaticText( sbFill->GetStaticBox(), wxID_ANY, _("Smoothing effort:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGridSmoothingLevel->Wrap( -1 );
|
||||
m_staticTextGridSmoothingLevel->SetToolTip( _("Value of smoothing effort\n0 = no smoothing\n1 = chamfer\n2 = round corners\n3 = round corners (finer shape)") );
|
||||
|
||||
fgSizer1->Add( m_staticTextGridSmoothingLevel, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_spinCtrlSmoothLevel = new wxSpinCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 3, 0 );
|
||||
m_spinCtrlSmoothLevel = new wxSpinCtrl( sbFill->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 3, 0 );
|
||||
fgSizer1->Add( m_spinCtrlSmoothLevel, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||
|
||||
|
||||
fgSizer1->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||
|
||||
m_staticTextGridSmootingVal = new wxStaticText( this, wxID_ANY, _("Smooth value (0..1):"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGridSmootingVal = new wxStaticText( sbFill->GetStaticBox(), wxID_ANY, _("Smooth amount:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextGridSmootingVal->Wrap( -1 );
|
||||
m_staticTextGridSmootingVal->SetToolTip( _("Ratio between smoothed corners size and the gap between lines\n0 = no smoothing\n1.0 = max radius/chamfer size (half gap value)") );
|
||||
|
||||
fgSizer1->Add( m_staticTextGridSmootingVal, 0, wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_spinCtrlSmoothValue = new wxSpinCtrlDouble( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 1, 0.1, 0.1 );
|
||||
m_spinCtrlSmoothValue = new wxSpinCtrlDouble( sbFill->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 0, 1, 0.1, 0.1 );
|
||||
m_spinCtrlSmoothValue->SetDigits( 2 );
|
||||
fgSizer1->Add( m_spinCtrlSmoothValue, 0, wxBOTTOM|wxRIGHT|wxLEFT|wxEXPAND, 5 );
|
||||
|
||||
|
||||
bSizerMiddle->Add( fgSizer1, 0, wxEXPAND, 5 );
|
||||
|
||||
m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
|
||||
bSizerMiddle->Add( m_staticline3, 0, wxEXPAND | wxALL, 5 );
|
||||
|
||||
m_staticTextOutlineSmooth = new wxStaticText( this, wxID_ANY, _("Zone Outline Smooth:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextOutlineSmooth->Wrap( -1 );
|
||||
m_staticTextOutlineSmooth->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD, false, wxEmptyString ) );
|
||||
|
||||
bSizerMiddle->Add( m_staticTextOutlineSmooth, 0, wxALL|wxALIGN_CENTER_HORIZONTAL, 5 );
|
||||
|
||||
wxFlexGridSizer* fgSizerOutlineSettings;
|
||||
fgSizerOutlineSettings = new wxFlexGridSizer( 0, 3, 0, 0 );
|
||||
fgSizerOutlineSettings->AddGrowableCol( 1 );
|
||||
fgSizerOutlineSettings->SetFlexibleDirection( wxBOTH );
|
||||
fgSizerOutlineSettings->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
m_staticTextSmoothing = new wxStaticText( this, wxID_ANY, _("Outline smooth:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_staticTextSmoothing->Wrap( -1 );
|
||||
fgSizerOutlineSettings->Add( m_staticTextSmoothing, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
wxString m_cornerSmoothingChoiceChoices[] = { _("None"), _("Chamfer"), _("Fillet") };
|
||||
int m_cornerSmoothingChoiceNChoices = sizeof( m_cornerSmoothingChoiceChoices ) / sizeof( wxString );
|
||||
m_cornerSmoothingChoice = new wxChoice( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_cornerSmoothingChoiceNChoices, m_cornerSmoothingChoiceChoices, 0 );
|
||||
m_cornerSmoothingChoice->SetSelection( 0 );
|
||||
fgSizerOutlineSettings->Add( m_cornerSmoothingChoice, 0, wxALL|wxEXPAND, 5 );
|
||||
sbFill->Add( fgSizer1, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
fgSizerOutlineSettings->Add( 0, 0, 0, 0, 5 );
|
||||
|
||||
m_cornerRadiusLabel = new wxStaticText( this, wxID_ANY, _("Chamfer distance:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_cornerRadiusLabel->Wrap( -1 );
|
||||
fgSizerOutlineSettings->Add( m_cornerRadiusLabel, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
m_cornerRadiusCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
fgSizerOutlineSettings->Add( m_cornerRadiusCtrl, 0, wxALL|wxEXPAND, 5 );
|
||||
|
||||
m_cornerRadiusUnits = new wxStaticText( this, wxID_ANY, _("units"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_cornerRadiusUnits->Wrap( -1 );
|
||||
fgSizerOutlineSettings->Add( m_cornerRadiusUnits, 0, wxTOP|wxBOTTOM|wxRIGHT, 5 );
|
||||
bSizerMiddle->Add( sbFill, 1, wxEXPAND|wxTOP|wxBOTTOM, 10 );
|
||||
|
||||
|
||||
fgSizerOutlineSettings->Add( 0, 0, 0, 0, 5 );
|
||||
|
||||
|
||||
bSizerMiddle->Add( fgSizerOutlineSettings, 0, wxEXPAND, 5 );
|
||||
|
||||
|
||||
m_UpperSizer->Add( bSizerMiddle, 0, wxEXPAND|wxALL, 10 );
|
||||
m_UpperSizer->Add( bSizerMiddle, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 10 );
|
||||
|
||||
|
||||
m_MainSizer->Add( m_UpperSizer, 1, wxEXPAND|wxALL, 5 );
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,5 @@
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// C++ code generated with wxFormBuilder (version Dec 1 2018)
|
||||
// C++ code generated with wxFormBuilder (version Oct 26 2018)
|
||||
// http://www.wxformbuilder.org/
|
||||
//
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
@ -23,8 +23,9 @@
|
||||
#include <wx/choice.h>
|
||||
#include <wx/textctrl.h>
|
||||
#include <wx/gbsizer.h>
|
||||
#include <wx/statline.h>
|
||||
#include <wx/statbox.h>
|
||||
#include <wx/spinctrl.h>
|
||||
#include <wx/statline.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/dialog.h>
|
||||
|
||||
@ -42,12 +43,15 @@ class DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE : public DIALOG_SHIM
|
||||
wxDataViewListCtrl* m_layers;
|
||||
wxCheckBox* m_ConstrainOpt;
|
||||
wxStaticText* m_staticTextStyle;
|
||||
wxChoice* m_OutlineAppearanceCtrl;
|
||||
wxChoice* m_OutlineDisplayCtrl;
|
||||
wxStaticText* m_MinWidthLabel;
|
||||
wxTextCtrl* m_MinWidthCtrl;
|
||||
wxStaticText* m_MinWidthUnits;
|
||||
wxStaticLine* m_staticline2;
|
||||
wxStaticText* m_staticTextGridStyle;
|
||||
wxStaticText* m_staticTextSmoothing;
|
||||
wxChoice* m_cornerSmoothingChoice;
|
||||
wxStaticText* m_cornerRadiusLabel;
|
||||
wxTextCtrl* m_cornerRadiusCtrl;
|
||||
wxStaticText* m_cornerRadiusUnits;
|
||||
wxStaticText* m_staticTextGridFillType;
|
||||
wxChoice* m_GridStyleCtrl;
|
||||
wxStaticText* m_staticTextGrindOrient;
|
||||
@ -63,13 +67,6 @@ class DIALOG_NONCOPPER_ZONES_PROPERTIES_BASE : public DIALOG_SHIM
|
||||
wxSpinCtrl* m_spinCtrlSmoothLevel;
|
||||
wxStaticText* m_staticTextGridSmootingVal;
|
||||
wxSpinCtrlDouble* m_spinCtrlSmoothValue;
|
||||
wxStaticLine* m_staticline3;
|
||||
wxStaticText* m_staticTextOutlineSmooth;
|
||||
wxStaticText* m_staticTextSmoothing;
|
||||
wxChoice* m_cornerSmoothingChoice;
|
||||
wxStaticText* m_cornerRadiusLabel;
|
||||
wxTextCtrl* m_cornerRadiusCtrl;
|
||||
wxStaticText* m_cornerRadiusUnits;
|
||||
wxStaticLine* m_staticline1;
|
||||
wxStdDialogButtonSizer* m_sdbSizerButtons;
|
||||
wxButton* m_sdbSizerButtonsOK;
|
||||
|
@ -769,8 +769,8 @@ void EAGLE_PLUGIN::loadPlain( wxXmlNode* aGraphics )
|
||||
}
|
||||
}
|
||||
|
||||
zone->SetHatch( ZONE_HATCH_STYLE::DIAGONAL_EDGE,
|
||||
ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
|
||||
ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -815,7 +815,7 @@ void EAGLE_PLUGIN::loadPlain( wxXmlNode* aGraphics )
|
||||
zone->SetLayer( layer );
|
||||
zone->SetNetCode( NETINFO_LIST::UNCONNECTED );
|
||||
|
||||
ZONE_HATCH_STYLE outline_hatch = ZONE_HATCH_STYLE::DIAGONAL_EDGE;
|
||||
ZONE_BORDER_DISPLAY_STYLE outline_hatch = ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE;
|
||||
|
||||
const int outlineIdx = -1; // this is the id of the copper zone main outline
|
||||
zone->AppendCorner( wxPoint( kicad_x( r.x1 ), kicad_y( r.y1 ) ), outlineIdx );
|
||||
@ -824,11 +824,11 @@ void EAGLE_PLUGIN::loadPlain( wxXmlNode* aGraphics )
|
||||
zone->AppendCorner( wxPoint( kicad_x( r.x1 ), kicad_y( r.y2 ) ), outlineIdx );
|
||||
|
||||
if( r.rot )
|
||||
{
|
||||
zone->Rotate( zone->GetPosition(), r.rot->degrees * 10 );
|
||||
}
|
||||
|
||||
// this is not my fault:
|
||||
zone->SetHatch( outline_hatch, ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
zone->SetBorderDisplayStyle( outline_hatch, ZONE_CONTAINER::GetDefaultHatchPitch(),
|
||||
true );
|
||||
}
|
||||
|
||||
m_xpath->pop();
|
||||
@ -1338,16 +1338,16 @@ ZONE_CONTAINER* EAGLE_PLUGIN::loadPolygon( wxXmlNode* aPolyNode )
|
||||
zone->SetDoNotAllowPads( false );
|
||||
zone->SetDoNotAllowFootprints( false );
|
||||
zone->SetDoNotAllowCopperPour( true );
|
||||
zone->SetHatchStyle( ZONE_HATCH_STYLE::NO_HATCH );
|
||||
zone->SetHatchStyle( ZONE_BORDER_DISPLAY_STYLE::NO_HATCH );
|
||||
}
|
||||
else if( p.pour == EPOLYGON::HATCH )
|
||||
{
|
||||
int spacing = p.spacing ? p.spacing->ToPcbUnits() : 50 * IU_PER_MILS;
|
||||
|
||||
zone->SetFillMode( ZONE_FILL_MODE::HATCH_PATTERN );
|
||||
zone->SetHatchFillTypeThickness( p.width.ToPcbUnits() );
|
||||
zone->SetHatchFillTypeGap( spacing - p.width.ToPcbUnits() );
|
||||
zone->SetHatchFillTypeOrientation( 0 );
|
||||
zone->SetHatchThickness( p.width.ToPcbUnits() );
|
||||
zone->SetHatchGap( spacing - p.width.ToPcbUnits() );
|
||||
zone->SetHatchOrientation( 0 );
|
||||
}
|
||||
|
||||
// We divide the thickness by half because we are tracing _inside_ the zone outline
|
||||
@ -1885,8 +1885,8 @@ void EAGLE_PLUGIN::packageRectangle( MODULE* aModule, wxXmlNode* aTree ) const
|
||||
zone->Rotate( center, r.rot->degrees * 10 );
|
||||
}
|
||||
|
||||
zone->SetHatch(
|
||||
ZONE_HATCH_STYLE::DIAGONAL_EDGE, ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
|
||||
ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1996,8 +1996,8 @@ void EAGLE_PLUGIN::packagePolygon( MODULE* aModule, wxXmlNode* aTree ) const
|
||||
outline.SetClosed( true );
|
||||
zone->Outline()->AddOutline( outline );
|
||||
|
||||
zone->SetHatch( ZONE_HATCH_STYLE::DIAGONAL_EDGE, ZONE_CONTAINER::GetDefaultHatchPitch(),
|
||||
true );
|
||||
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
|
||||
ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -2056,8 +2056,8 @@ void EAGLE_PLUGIN::packageCircle( MODULE* aModule, wxXmlNode* aTree ) const
|
||||
}
|
||||
}
|
||||
|
||||
zone->SetHatch( ZONE_HATCH_STYLE::DIAGONAL_EDGE, ZONE_CONTAINER::GetDefaultHatchPitch(),
|
||||
true );
|
||||
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
|
||||
ZONE_CONTAINER::GetDefaultHatchPitch(), true );
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1639,19 +1639,13 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
|
||||
switch( aZone->GetHatchStyle() )
|
||||
{
|
||||
default:
|
||||
case ZONE_HATCH_STYLE::NO_HATCH:
|
||||
hatch = "none";
|
||||
break;
|
||||
case ZONE_HATCH_STYLE::DIAGONAL_EDGE:
|
||||
hatch = "edge";
|
||||
break;
|
||||
case ZONE_HATCH_STYLE::DIAGONAL_FULL:
|
||||
hatch = "full";
|
||||
break;
|
||||
case ZONE_BORDER_DISPLAY_STYLE::NO_HATCH: hatch = "none"; break;
|
||||
case ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE: hatch = "edge"; break;
|
||||
case ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_FULL: hatch = "full"; break;
|
||||
}
|
||||
|
||||
m_out->Print( 0, " (hatch %s %s)\n", hatch.c_str(),
|
||||
FormatInternalUnits( aZone->GetHatchPitch() ).c_str() );
|
||||
FormatInternalUnits( aZone->GetBorderHatchPitch() ).c_str() );
|
||||
|
||||
if( aZone->GetPriority() > 0 )
|
||||
m_out->Print( aNestLevel+1, "(priority %d)\n", aZone->GetPriority() );
|
||||
@ -1750,17 +1744,22 @@ void PCB_IO::format( ZONE_CONTAINER* aZone, int aNestLevel ) const
|
||||
{
|
||||
m_out->Print( 0, "\n" );
|
||||
m_out->Print( aNestLevel+2, "(hatch_thickness %s) (hatch_gap %s) (hatch_orientation %s)",
|
||||
FormatInternalUnits( aZone->GetHatchFillTypeThickness() ).c_str(),
|
||||
FormatInternalUnits( aZone->GetHatchFillTypeGap() ).c_str(),
|
||||
Double2Str( aZone->GetHatchFillTypeOrientation() ).c_str() );
|
||||
FormatInternalUnits( aZone->GetHatchThickness() ).c_str(),
|
||||
FormatInternalUnits( aZone->GetHatchGap() ).c_str(),
|
||||
Double2Str( aZone->GetHatchOrientation() ).c_str() );
|
||||
|
||||
if( aZone->GetHatchFillTypeSmoothingLevel() > 0 )
|
||||
if( aZone->GetHatchSmoothingLevel() > 0 )
|
||||
{
|
||||
m_out->Print( 0, "\n" );
|
||||
m_out->Print( aNestLevel+2, "(hatch_smoothing_level %d) (hatch_smoothing_value %s)",
|
||||
aZone->GetHatchFillTypeSmoothingLevel(),
|
||||
Double2Str( aZone->GetHatchFillTypeSmoothingValue() ).c_str() );
|
||||
aZone->GetHatchSmoothingLevel(),
|
||||
Double2Str( aZone->GetHatchSmoothingValue() ).c_str() );
|
||||
}
|
||||
|
||||
m_out->Print( 0, "\n" );
|
||||
m_out->Print( aNestLevel+2, "(hatch_border_algorithm %s) (hatch_min_hole_area %s)",
|
||||
aZone->GetHatchBorderAlgorithm() ? "hatch_thickness" : "min_thickness",
|
||||
Double2Str( aZone->GetHatchHoleMinArea() ).c_str() );
|
||||
}
|
||||
|
||||
m_out->Print( 0, ")\n" );
|
||||
|
@ -72,7 +72,8 @@ class TEXTE_PCB;
|
||||
//#define SEXPR_BOARD_FILE_VERSION 20200614 // Add support for fp_rects and gr_rects
|
||||
//#define SEXPR_BOARD_FILE_VERSION 20200625 // Multilayer zones, zone names, island controls
|
||||
//#define SEXPR_BOARD_FILE_VERSION 20200628 // remove visibility settings
|
||||
#define SEXPR_BOARD_FILE_VERSION 20200724 // Add KIID to module components
|
||||
//#define SEXPR_BOARD_FILE_VERSION 20200724 // Add KIID to module components
|
||||
#define SEXPR_BOARD_FILE_VERSION 20200807 // Add zone hatch advanced settings
|
||||
|
||||
#define CTL_STD_LAYER_NAMES (1 << 0) ///< Use English Standard layer names
|
||||
#define CTL_OMIT_NETS (1 << 1) ///< Omit pads net names (useless in library)
|
||||
|
@ -2438,7 +2438,7 @@ void LEGACY_PLUGIN::loadZONE_CONTAINER()
|
||||
{
|
||||
unique_ptr<ZONE_CONTAINER> zc( new ZONE_CONTAINER( m_board ) );
|
||||
|
||||
ZONE_HATCH_STYLE outline_hatch = ZONE_HATCH_STYLE::NO_HATCH;
|
||||
ZONE_BORDER_DISPLAY_STYLE outline_hatch = ZONE_BORDER_DISPLAY_STYLE::NO_HATCH;
|
||||
bool endContour = false;
|
||||
int holeIndex = -1; // -1 is the main outline; holeIndex >= 0 = hole index
|
||||
char buf[1024];
|
||||
@ -2508,9 +2508,9 @@ void LEGACY_PLUGIN::loadZONE_CONTAINER()
|
||||
|
||||
switch( *hopt ) // upper case required
|
||||
{
|
||||
case 'N': outline_hatch = ZONE_HATCH_STYLE::NO_HATCH; break;
|
||||
case 'E': outline_hatch = ZONE_HATCH_STYLE::DIAGONAL_EDGE; break;
|
||||
case 'F': outline_hatch = ZONE_HATCH_STYLE::DIAGONAL_FULL; break;
|
||||
case 'N': outline_hatch = ZONE_BORDER_DISPLAY_STYLE::NO_HATCH; break;
|
||||
case 'E': outline_hatch = ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE; break;
|
||||
case 'F': outline_hatch = ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_FULL; break;
|
||||
default:
|
||||
m_error.Printf( _( "Bad ZAux for CZONE_CONTAINER \"%s\"" ),
|
||||
zc->GetNetname().GetData() );
|
||||
@ -2712,10 +2712,10 @@ void LEGACY_PLUGIN::loadZONE_CONTAINER()
|
||||
zc->SetNetCode( NETINFO_LIST::UNCONNECTED );
|
||||
}
|
||||
|
||||
// Hatch here, after outlines corners are read
|
||||
// HatchBorder here, after outlines corners are read
|
||||
// Set hatch here, after outlines corners are read
|
||||
zc->SetHatch( outline_hatch, ZONE_CONTAINER::GetDefaultHatchPitch(),
|
||||
true );
|
||||
zc->SetBorderDisplayStyle( outline_hatch, ZONE_CONTAINER::GetDefaultHatchPitch(),
|
||||
true );
|
||||
|
||||
m_board->Add( zc.release() );
|
||||
}
|
||||
|
@ -202,7 +202,8 @@ void PCB_POLYGON::AddToBoard()
|
||||
|
||||
zone->SetPriority( m_priority );
|
||||
|
||||
zone->SetHatch( ZONE_HATCH_STYLE::DIAGONAL_EDGE, zone->GetDefaultHatchPitch(), true );
|
||||
zone->SetBorderDisplayStyle( ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE,
|
||||
zone->GetDefaultHatchPitch(), true );
|
||||
|
||||
if ( m_objType == wxT( 'K' ) )
|
||||
{
|
||||
|
@ -3779,7 +3779,7 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER( BOARD_ITEM_CONTAINER* aParent )
|
||||
wxT( "Cannot parse " ) + GetTokenString( CurTok() ) +
|
||||
wxT( " as ZONE_CONTAINER." ) );
|
||||
|
||||
ZONE_HATCH_STYLE hatchStyle = ZONE_HATCH_STYLE::NO_HATCH;
|
||||
ZONE_BORDER_DISPLAY_STYLE hatchStyle = ZONE_BORDER_DISPLAY_STYLE::NO_HATCH;
|
||||
|
||||
int hatchPitch = ZONE_CONTAINER::GetDefaultHatchPitch();
|
||||
wxPoint pt;
|
||||
@ -3857,14 +3857,9 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER( BOARD_ITEM_CONTAINER* aParent )
|
||||
switch( token )
|
||||
{
|
||||
default:
|
||||
case T_none:
|
||||
hatchStyle = ZONE_HATCH_STYLE::NO_HATCH;
|
||||
break;
|
||||
case T_edge:
|
||||
hatchStyle = ZONE_HATCH_STYLE::DIAGONAL_EDGE;
|
||||
break;
|
||||
case T_full:
|
||||
hatchStyle = ZONE_HATCH_STYLE::DIAGONAL_FULL;
|
||||
case T_none: hatchStyle = ZONE_BORDER_DISPLAY_STYLE::NO_HATCH; break;
|
||||
case T_edge: hatchStyle = ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_EDGE; break;
|
||||
case T_full: hatchStyle = ZONE_BORDER_DISPLAY_STYLE::DIAGONAL_FULL; break;
|
||||
}
|
||||
|
||||
hatchPitch = parseBoardUnits( "hatch pitch" );
|
||||
@ -3966,27 +3961,42 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER( BOARD_ITEM_CONTAINER* aParent )
|
||||
break;
|
||||
|
||||
case T_hatch_thickness:
|
||||
zone->SetHatchFillTypeThickness( parseBoardUnits( T_hatch_thickness ) );
|
||||
zone->SetHatchThickness( parseBoardUnits( T_hatch_thickness ) );
|
||||
NeedRIGHT();
|
||||
break;
|
||||
|
||||
case T_hatch_gap:
|
||||
zone->SetHatchFillTypeGap( parseBoardUnits( T_hatch_gap ) );
|
||||
zone->SetHatchGap( parseBoardUnits( T_hatch_gap ) );
|
||||
NeedRIGHT();
|
||||
break;
|
||||
|
||||
case T_hatch_orientation:
|
||||
zone->SetHatchFillTypeOrientation( parseDouble( T_hatch_orientation ) );
|
||||
zone->SetHatchOrientation( parseDouble( T_hatch_orientation ) );
|
||||
NeedRIGHT();
|
||||
break;
|
||||
|
||||
case T_hatch_smoothing_level:
|
||||
zone->SetHatchFillTypeSmoothingLevel( parseDouble( T_hatch_smoothing_level ) );
|
||||
zone->SetHatchSmoothingLevel( parseDouble( T_hatch_smoothing_level ) );
|
||||
NeedRIGHT();
|
||||
break;
|
||||
|
||||
case T_hatch_smoothing_value:
|
||||
zone->SetHatchFillTypeSmoothingValue( parseDouble( T_hatch_smoothing_value ) );
|
||||
zone->SetHatchSmoothingValue( parseDouble( T_hatch_smoothing_value ) );
|
||||
NeedRIGHT();
|
||||
break;
|
||||
|
||||
case T_hatch_border_algorithm:
|
||||
token = NextTok();
|
||||
|
||||
if( token != T_hatch_thickness && token != T_min_thickness )
|
||||
Expecting( "hatch_thickness or min_thickness" );
|
||||
|
||||
zone->SetHatchBorderAlgorithm( token == T_hatch_thickness ? 1 : 0 );
|
||||
NeedRIGHT();
|
||||
break;
|
||||
|
||||
case T_hatch_min_hole_area:
|
||||
zone->SetHatchHoleMinArea( parseDouble( T_hatch_min_hole_area ) );
|
||||
NeedRIGHT();
|
||||
break;
|
||||
|
||||
@ -4056,7 +4066,8 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER( BOARD_ITEM_CONTAINER* aParent )
|
||||
default:
|
||||
Expecting( "mode, arc_segments, thermal_gap, thermal_bridge_width, "
|
||||
"hatch_thickness, hatch_gap, hatch_orientation, "
|
||||
"hatch_smoothing_level, hatch_smoothing_value, smoothing, radius"
|
||||
"hatch_smoothing_level, hatch_smoothing_value, "
|
||||
"hatch_border_algorithm, hatch_min_hole_area, smoothing, radius, "
|
||||
"island_removal_mode, or island_area_min" );
|
||||
}
|
||||
}
|
||||
@ -4266,7 +4277,7 @@ ZONE_CONTAINER* PCB_PARSER::parseZONE_CONTAINER( BOARD_ITEM_CONTAINER* aParent )
|
||||
}
|
||||
|
||||
// Set hatch here, after outlines corners are read
|
||||
zone->SetHatch( hatchStyle, hatchPitch, true );
|
||||
zone->SetBorderDisplayStyle( hatchStyle, hatchPitch, true );
|
||||
}
|
||||
|
||||
if( addedFilledPolygons )
|
||||
|
@ -1104,7 +1104,7 @@ int EDIT_TOOL::Remove( const TOOL_EVENT& aEvent )
|
||||
filler.Fill( toFill );
|
||||
|
||||
// Update the display
|
||||
zone->Hatch();
|
||||
zone->HatchBorder();
|
||||
canvas()->Refresh();
|
||||
|
||||
// Restore the selection on the original zone
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user