Add DRC tests for text height and text thickness.
Fixes https://gitlab.com/kicad/code/kicad/issues/8683
This commit is contained in:
parent
0a609dd48d
commit
2001d08186
|
@ -4,10 +4,15 @@ buried_via
|
||||||
clearance
|
clearance
|
||||||
condition
|
condition
|
||||||
constraint
|
constraint
|
||||||
|
courtyard_clearance
|
||||||
|
diff_pair_gap
|
||||||
|
diff_pair_uncoupled
|
||||||
disallow
|
disallow
|
||||||
|
edge_clearance
|
||||||
footprint
|
footprint
|
||||||
graphic
|
graphic
|
||||||
hole
|
hole
|
||||||
|
hole_clearance
|
||||||
hole_size
|
hole_size
|
||||||
hole_to_hole
|
hole_to_hole
|
||||||
inner
|
inner
|
||||||
|
@ -22,18 +27,15 @@ outer
|
||||||
pad
|
pad
|
||||||
pth
|
pth
|
||||||
rule
|
rule
|
||||||
|
silk_clearance
|
||||||
|
skew
|
||||||
text
|
text
|
||||||
|
text_height
|
||||||
|
text_thickness
|
||||||
track
|
track
|
||||||
track_width
|
track_width
|
||||||
version
|
version
|
||||||
via
|
via
|
||||||
zone
|
|
||||||
edge_clearance
|
|
||||||
hole_clearance
|
|
||||||
courtyard_clearance
|
|
||||||
silk_clearance
|
|
||||||
skew
|
|
||||||
diff_pair_gap
|
|
||||||
diff_pair_uncoupled
|
|
||||||
via_count
|
via_count
|
||||||
via_diameter
|
via_diameter
|
||||||
|
zone
|
||||||
|
|
|
@ -559,27 +559,6 @@ public:
|
||||||
*/
|
*/
|
||||||
int GetCurrentDiffPairViaGap() const;
|
int GetCurrentDiffPairViaGap() const;
|
||||||
|
|
||||||
/**
|
|
||||||
* @param aValue The minimum distance between the edges of two holes or 0 to disable
|
|
||||||
* hole-to-hole separation checking.
|
|
||||||
*/
|
|
||||||
void SetMinHoleSeparation( int aDistance );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param aValue The minimum distance between copper items and board edges.
|
|
||||||
*/
|
|
||||||
void SetCopperEdgeClearance( int aDistance );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set the minimum distance between silk items to \a aValue.
|
|
||||||
*
|
|
||||||
* @note Compound graphics within a single footprint or on the board are not checked,
|
|
||||||
* but distances between text and between graphics from different footprints are.
|
|
||||||
*
|
|
||||||
* @param aValue The minimum distance between silk items.
|
|
||||||
*/
|
|
||||||
void SetSilkClearance( int aDistance );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return a bit-mask of all the layers that are enabled.
|
* Return a bit-mask of all the layers that are enabled.
|
||||||
*
|
*
|
||||||
|
@ -700,6 +679,8 @@ public:
|
||||||
int m_HoleClearance; // Hole to copper clearance
|
int m_HoleClearance; // Hole to copper clearance
|
||||||
int m_HoleToHoleMin; // Min width of web between two drilled holes
|
int m_HoleToHoleMin; // Min width of web between two drilled holes
|
||||||
int m_SilkClearance;
|
int m_SilkClearance;
|
||||||
|
int m_MinSilkTextHeight; // Min text height for silkscreen layers
|
||||||
|
int m_MinSilkTextThickness; // Min text thickness for silkscreen layers
|
||||||
|
|
||||||
std::shared_ptr<DRC_ENGINE> m_DRCEngine;
|
std::shared_ptr<DRC_ENGINE> m_DRCEngine;
|
||||||
std::map<int, SEVERITY> m_DRCSeverities; // Map from DRCErrorCode to SEVERITY
|
std::map<int, SEVERITY> m_DRCSeverities; // Map from DRCErrorCode to SEVERITY
|
||||||
|
|
|
@ -241,6 +241,7 @@ set( PCBNEW_DRC_SRCS
|
||||||
drc/drc_test_provider_library_parity.cpp
|
drc/drc_test_provider_library_parity.cpp
|
||||||
drc/drc_test_provider_schematic_parity.cpp
|
drc/drc_test_provider_schematic_parity.cpp
|
||||||
drc/drc_test_provider_misc.cpp
|
drc/drc_test_provider_misc.cpp
|
||||||
|
drc/drc_test_provider_text_dims.cpp
|
||||||
drc/drc_test_provider_track_width.cpp
|
drc/drc_test_provider_track_width.cpp
|
||||||
drc/drc_test_provider_via_diameter.cpp
|
drc/drc_test_provider_via_diameter.cpp
|
||||||
drc/drc_test_provider_silk_to_mask.cpp
|
drc/drc_test_provider_silk_to_mask.cpp
|
||||||
|
|
|
@ -151,6 +151,8 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS( JSON_SETTINGS* aParent, const std:
|
||||||
m_HoleClearance = Millimeter2iu( DEFAULT_HOLECLEARANCE );
|
m_HoleClearance = Millimeter2iu( DEFAULT_HOLECLEARANCE );
|
||||||
m_HoleToHoleMin = Millimeter2iu( DEFAULT_HOLETOHOLEMIN );
|
m_HoleToHoleMin = Millimeter2iu( DEFAULT_HOLETOHOLEMIN );
|
||||||
m_SilkClearance = Millimeter2iu( DEFAULT_SILKCLEARANCE );
|
m_SilkClearance = Millimeter2iu( DEFAULT_SILKCLEARANCE );
|
||||||
|
m_MinSilkTextHeight = Millimeter2iu( DEFAULT_SILK_TEXT_SIZE * 0.8 );
|
||||||
|
m_MinSilkTextThickness= Millimeter2iu( DEFAULT_SILK_TEXT_WIDTH * 0.8 );
|
||||||
|
|
||||||
for( int errorCode = DRCE_FIRST; errorCode <= DRCE_LAST; ++errorCode )
|
for( int errorCode = DRCE_FIRST; errorCode <= DRCE_LAST; ++errorCode )
|
||||||
m_DRCSeverities[ errorCode ] = RPT_SEVERITY_ERROR;
|
m_DRCSeverities[ errorCode ] = RPT_SEVERITY_ERROR;
|
||||||
|
@ -171,6 +173,8 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS( JSON_SETTINGS* aParent, const std:
|
||||||
|
|
||||||
m_DRCSeverities[ DRCE_OVERLAPPING_SILK ] = RPT_SEVERITY_WARNING;
|
m_DRCSeverities[ DRCE_OVERLAPPING_SILK ] = RPT_SEVERITY_WARNING;
|
||||||
m_DRCSeverities[ DRCE_SILK_MASK_CLEARANCE ] = RPT_SEVERITY_WARNING;
|
m_DRCSeverities[ DRCE_SILK_MASK_CLEARANCE ] = RPT_SEVERITY_WARNING;
|
||||||
|
m_DRCSeverities[ DRCE_TEXT_HEIGHT ] = RPT_SEVERITY_WARNING;
|
||||||
|
m_DRCSeverities[ DRCE_TEXT_THICKNESS ] = RPT_SEVERITY_WARNING;
|
||||||
|
|
||||||
m_MaxError = ARC_HIGH_DEF;
|
m_MaxError = ARC_HIGH_DEF;
|
||||||
m_ZoneFillVersion = 6; // Use new algo by default to fill zones
|
m_ZoneFillVersion = 6; // Use new algo by default to fill zones
|
||||||
|
@ -252,6 +256,14 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS( JSON_SETTINGS* aParent, const std:
|
||||||
Millimeter2iu( DEFAULT_SILKCLEARANCE ), Millimeter2iu( 0.00 ), Millimeter2iu( 100.0 ),
|
Millimeter2iu( DEFAULT_SILKCLEARANCE ), Millimeter2iu( 0.00 ), Millimeter2iu( 100.0 ),
|
||||||
MM_PER_IU ) );
|
MM_PER_IU ) );
|
||||||
|
|
||||||
|
m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_text_height", &m_MinSilkTextHeight,
|
||||||
|
Millimeter2iu( DEFAULT_SILK_TEXT_SIZE * 0.8 ), Millimeter2iu( 0.00 ),
|
||||||
|
Millimeter2iu( 100.0 ), MM_PER_IU ) );
|
||||||
|
|
||||||
|
m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_text_thickness", &m_MinSilkTextThickness,
|
||||||
|
Millimeter2iu( DEFAULT_SILK_TEXT_WIDTH * 0.8 ), Millimeter2iu( 0.00 ),
|
||||||
|
Millimeter2iu( 25.0 ), MM_PER_IU ) );
|
||||||
|
|
||||||
// Note: a clearance of -0.01 is a flag indicating we should use the legacy (pre-6.0) method
|
// Note: a clearance of -0.01 is a flag indicating we should use the legacy (pre-6.0) method
|
||||||
// based on the edge cut thicknesses.
|
// based on the edge cut thicknesses.
|
||||||
m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_copper_edge_clearance",
|
m_params.emplace_back( new PARAM_SCALED<int>( "rules.min_copper_edge_clearance",
|
||||||
|
@ -691,6 +703,8 @@ void BOARD_DESIGN_SETTINGS::initFromOther( const BOARD_DESIGN_SETTINGS& aOther )
|
||||||
m_HoleClearance = aOther.m_HoleClearance;
|
m_HoleClearance = aOther.m_HoleClearance;
|
||||||
m_HoleToHoleMin = aOther.m_HoleToHoleMin;
|
m_HoleToHoleMin = aOther.m_HoleToHoleMin;
|
||||||
m_SilkClearance = aOther.m_SilkClearance;
|
m_SilkClearance = aOther.m_SilkClearance;
|
||||||
|
m_MinSilkTextHeight = aOther.m_MinSilkTextHeight;
|
||||||
|
m_MinSilkTextThickness = aOther.m_MinSilkTextThickness;
|
||||||
m_DRCSeverities = aOther.m_DRCSeverities;
|
m_DRCSeverities = aOther.m_DRCSeverities;
|
||||||
m_DrcExclusions = aOther.m_DrcExclusions;
|
m_DrcExclusions = aOther.m_DrcExclusions;
|
||||||
m_ZoneFillVersion = aOther.m_ZoneFillVersion;
|
m_ZoneFillVersion = aOther.m_ZoneFillVersion;
|
||||||
|
@ -1054,24 +1068,6 @@ int BOARD_DESIGN_SETTINGS::GetCurrentDiffPairViaGap() const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void BOARD_DESIGN_SETTINGS::SetMinHoleSeparation( int aDistance )
|
|
||||||
{
|
|
||||||
m_HoleToHoleMin = aDistance;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void BOARD_DESIGN_SETTINGS::SetCopperEdgeClearance( int aDistance )
|
|
||||||
{
|
|
||||||
m_CopperEdgeClearance = aDistance;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void BOARD_DESIGN_SETTINGS::SetSilkClearance( int aDistance )
|
|
||||||
{
|
|
||||||
m_SilkClearance = aDistance;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void BOARD_DESIGN_SETTINGS::SetCopperLayerCount( int aNewLayerCount )
|
void BOARD_DESIGN_SETTINGS::SetCopperLayerCount( int aNewLayerCount )
|
||||||
{
|
{
|
||||||
m_copperLayerCount = aNewLayerCount;
|
m_copperLayerCount = aNewLayerCount;
|
||||||
|
|
|
@ -46,6 +46,8 @@ PANEL_SETUP_CONSTRAINTS::PANEL_SETUP_CONSTRAINTS( PAGED_DIALOG* aParent, PCB_EDI
|
||||||
m_holeClearance( aFrame, m_HoleClearanceLabel, m_HoleClearanceCtrl, m_HoleClearanceUnits ),
|
m_holeClearance( aFrame, m_HoleClearanceLabel, m_HoleClearanceCtrl, m_HoleClearanceUnits ),
|
||||||
m_edgeClearance( aFrame, m_EdgeClearanceLabel, m_EdgeClearanceCtrl, m_EdgeClearanceUnits ),
|
m_edgeClearance( aFrame, m_EdgeClearanceLabel, m_EdgeClearanceCtrl, m_EdgeClearanceUnits ),
|
||||||
m_silkClearance( aFrame, m_silkClearanceLabel, m_silkClearanceCtrl, m_silkClearanceUnits ),
|
m_silkClearance( aFrame, m_silkClearanceLabel, m_silkClearanceCtrl, m_silkClearanceUnits ),
|
||||||
|
m_minTextHeight( aFrame, m_textHeightLabel, m_textHeightCtrl, m_textHeightUnits ),
|
||||||
|
m_minTextThickness( aFrame, m_textThicknessLabel, m_textThicknessCtrl, m_textThicknessUnits ),
|
||||||
m_maxError( aFrame, m_maxErrorTitle, m_maxErrorCtrl, m_maxErrorUnits )
|
m_maxError( aFrame, m_maxErrorTitle, m_maxErrorCtrl, m_maxErrorUnits )
|
||||||
{
|
{
|
||||||
m_Frame = aFrame;
|
m_Frame = aFrame;
|
||||||
|
@ -86,6 +88,8 @@ bool PANEL_SETUP_CONSTRAINTS::TransferDataToWindow()
|
||||||
m_uviaMinDrill.SetValue( m_BrdSettings->m_MicroViasMinDrill );
|
m_uviaMinDrill.SetValue( m_BrdSettings->m_MicroViasMinDrill );
|
||||||
|
|
||||||
m_silkClearance.SetValue( m_BrdSettings->m_SilkClearance );
|
m_silkClearance.SetValue( m_BrdSettings->m_SilkClearance );
|
||||||
|
m_minTextHeight.SetValue( m_BrdSettings->m_MinSilkTextHeight );
|
||||||
|
m_minTextThickness.SetValue( m_BrdSettings->m_MinSilkTextThickness );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -135,15 +139,17 @@ bool PANEL_SETUP_CONSTRAINTS::TransferDataFromWindow()
|
||||||
m_BrdSettings->m_ViasMinAnnularWidth = m_viaMinAnnulus.GetValue();
|
m_BrdSettings->m_ViasMinAnnularWidth = m_viaMinAnnulus.GetValue();
|
||||||
m_BrdSettings->m_ViasMinSize = m_viaMinSize.GetValue();
|
m_BrdSettings->m_ViasMinSize = m_viaMinSize.GetValue();
|
||||||
m_BrdSettings->m_HoleClearance = m_holeClearance.GetValue();
|
m_BrdSettings->m_HoleClearance = m_holeClearance.GetValue();
|
||||||
m_BrdSettings->SetCopperEdgeClearance( m_edgeClearance.GetValue() );
|
m_BrdSettings->m_CopperEdgeClearance = m_edgeClearance.GetValue();
|
||||||
|
|
||||||
m_BrdSettings->m_MinThroughDrill = m_throughHoleMin.GetValue();
|
m_BrdSettings->m_MinThroughDrill = m_throughHoleMin.GetValue();
|
||||||
m_BrdSettings->SetMinHoleSeparation( m_holeToHoleMin.GetValue() );
|
m_BrdSettings->m_HoleToHoleMin = m_holeToHoleMin.GetValue();
|
||||||
|
|
||||||
m_BrdSettings->m_MicroViasMinSize = m_uviaMinSize.GetValue();
|
m_BrdSettings->m_MicroViasMinSize = m_uviaMinSize.GetValue();
|
||||||
m_BrdSettings->m_MicroViasMinDrill = m_uviaMinDrill.GetValue();
|
m_BrdSettings->m_MicroViasMinDrill = m_uviaMinDrill.GetValue();
|
||||||
|
|
||||||
m_BrdSettings->m_SilkClearance = m_silkClearance.GetValue();
|
m_BrdSettings->m_SilkClearance = m_silkClearance.GetValue();
|
||||||
|
m_BrdSettings->m_MinSilkTextHeight = m_minTextHeight.GetValue();
|
||||||
|
m_BrdSettings->m_MinSilkTextThickness = m_minTextThickness.GetValue();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,6 +62,8 @@ public:
|
||||||
UNIT_BINDER m_holeClearance;
|
UNIT_BINDER m_holeClearance;
|
||||||
UNIT_BINDER m_edgeClearance;
|
UNIT_BINDER m_edgeClearance;
|
||||||
UNIT_BINDER m_silkClearance;
|
UNIT_BINDER m_silkClearance;
|
||||||
|
UNIT_BINDER m_minTextHeight;
|
||||||
|
UNIT_BINDER m_minTextThickness;
|
||||||
UNIT_BINDER m_maxError;
|
UNIT_BINDER m_maxError;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -438,6 +438,34 @@ PANEL_SETUP_CONSTRAINTS_BASE::PANEL_SETUP_CONSTRAINTS_BASE( wxWindow* parent, wx
|
||||||
fgFeatureConstraints->Add( m_silkClearanceUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
fgFeatureConstraints->Add( m_silkClearanceUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgFeatureConstraints->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_textHeightLabel = new wxStaticText( m_scrolledWindow, wxID_ANY, _("Minimum text height:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_textHeightLabel->Wrap( -1 );
|
||||||
|
fgFeatureConstraints->Add( m_textHeightLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_textHeightCtrl = new wxTextCtrl( m_scrolledWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgFeatureConstraints->Add( m_textHeightCtrl, 0, wxEXPAND|wxTOP|wxBOTTOM|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_textHeightUnits = new wxStaticText( m_scrolledWindow, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_textHeightUnits->Wrap( -1 );
|
||||||
|
fgFeatureConstraints->Add( m_textHeightUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
fgFeatureConstraints->Add( 0, 0, 1, wxEXPAND, 5 );
|
||||||
|
|
||||||
|
m_textThicknessLabel = new wxStaticText( m_scrolledWindow, wxID_ANY, _("Minimum text thickness:"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_textThicknessLabel->Wrap( -1 );
|
||||||
|
fgFeatureConstraints->Add( m_textThicknessLabel, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
|
||||||
|
|
||||||
|
m_textThicknessCtrl = new wxTextCtrl( m_scrolledWindow, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
fgFeatureConstraints->Add( m_textThicknessCtrl, 0, wxTOP|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL, 5 );
|
||||||
|
|
||||||
|
m_textThicknessUnits = new wxStaticText( m_scrolledWindow, wxID_ANY, _("mm"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||||
|
m_textThicknessUnits->Wrap( -1 );
|
||||||
|
fgFeatureConstraints->Add( m_textThicknessUnits, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 );
|
||||||
|
|
||||||
|
|
||||||
sbFeatureConstraints->Add( fgFeatureConstraints, 1, wxEXPAND|wxLEFT, 5 );
|
sbFeatureConstraints->Add( fgFeatureConstraints, 1, wxEXPAND|wxLEFT, 5 );
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1541,11 +1541,11 @@
|
||||||
<property name="name">sbFeatureConstraints</property>
|
<property name="name">sbFeatureConstraints</property>
|
||||||
<property name="orient">wxVERTICAL</property>
|
<property name="orient">wxVERTICAL</property>
|
||||||
<property name="permission">none</property>
|
<property name="permission">none</property>
|
||||||
<object class="sizeritem" expanded="0">
|
<object class="sizeritem" expanded="1">
|
||||||
<property name="border">5</property>
|
<property name="border">5</property>
|
||||||
<property name="flag">wxEXPAND|wxLEFT</property>
|
<property name="flag">wxEXPAND|wxLEFT</property>
|
||||||
<property name="proportion">1</property>
|
<property name="proportion">1</property>
|
||||||
<object class="wxFlexGridSizer" expanded="0">
|
<object class="wxFlexGridSizer" expanded="1">
|
||||||
<property name="cols">4</property>
|
<property name="cols">4</property>
|
||||||
<property name="flexible_direction">wxBOTH</property>
|
<property name="flexible_direction">wxBOTH</property>
|
||||||
<property name="growablecols"></property>
|
<property name="growablecols"></property>
|
||||||
|
@ -5253,6 +5253,398 @@
|
||||||
<property name="wrap">-1</property>
|
<property name="wrap">-1</property>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxEXPAND</property>
|
||||||
|
<property name="proportion">1</property>
|
||||||
|
<object class="spacer" expanded="1">
|
||||||
|
<property name="height">0</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="width">0</property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxStaticText" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">Minimum text height:</property>
|
||||||
|
<property name="markup">0</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">m_textHeightLabel</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<property name="wrap">-1</property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxEXPAND|wxTOP|wxBOTTOM|wxALIGN_CENTER_VERTICAL</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxTextCtrl" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="maxlength"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">m_textHeightCtrl</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="validator_data_type"></property>
|
||||||
|
<property name="validator_style">wxFILTER_NONE</property>
|
||||||
|
<property name="validator_type">wxDefaultValidator</property>
|
||||||
|
<property name="validator_variable"></property>
|
||||||
|
<property name="value"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxStaticText" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">mm</property>
|
||||||
|
<property name="markup">0</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">m_textHeightUnits</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<property name="wrap">-1</property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxEXPAND</property>
|
||||||
|
<property name="proportion">1</property>
|
||||||
|
<object class="spacer" expanded="1">
|
||||||
|
<property name="height">0</property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="width">0</property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxStaticText" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">Minimum text thickness:</property>
|
||||||
|
<property name="markup">0</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">m_textThicknessLabel</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<property name="wrap">-1</property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxTOP|wxBOTTOM|wxEXPAND|wxALIGN_CENTER_VERTICAL</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxTextCtrl" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="maxlength"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">m_textThicknessCtrl</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="validator_data_type"></property>
|
||||||
|
<property name="validator_style">wxFILTER_NONE</property>
|
||||||
|
<property name="validator_type">wxDefaultValidator</property>
|
||||||
|
<property name="validator_variable"></property>
|
||||||
|
<property name="value"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
|
<object class="sizeritem" expanded="1">
|
||||||
|
<property name="border">5</property>
|
||||||
|
<property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property>
|
||||||
|
<property name="proportion">0</property>
|
||||||
|
<object class="wxStaticText" expanded="1">
|
||||||
|
<property name="BottomDockable">1</property>
|
||||||
|
<property name="LeftDockable">1</property>
|
||||||
|
<property name="RightDockable">1</property>
|
||||||
|
<property name="TopDockable">1</property>
|
||||||
|
<property name="aui_layer"></property>
|
||||||
|
<property name="aui_name"></property>
|
||||||
|
<property name="aui_position"></property>
|
||||||
|
<property name="aui_row"></property>
|
||||||
|
<property name="best_size"></property>
|
||||||
|
<property name="bg"></property>
|
||||||
|
<property name="caption"></property>
|
||||||
|
<property name="caption_visible">1</property>
|
||||||
|
<property name="center_pane">0</property>
|
||||||
|
<property name="close_button">1</property>
|
||||||
|
<property name="context_help"></property>
|
||||||
|
<property name="context_menu">1</property>
|
||||||
|
<property name="default_pane">0</property>
|
||||||
|
<property name="dock">Dock</property>
|
||||||
|
<property name="dock_fixed">0</property>
|
||||||
|
<property name="docking">Left</property>
|
||||||
|
<property name="enabled">1</property>
|
||||||
|
<property name="fg"></property>
|
||||||
|
<property name="floatable">1</property>
|
||||||
|
<property name="font"></property>
|
||||||
|
<property name="gripper">0</property>
|
||||||
|
<property name="hidden">0</property>
|
||||||
|
<property name="id">wxID_ANY</property>
|
||||||
|
<property name="label">mm</property>
|
||||||
|
<property name="markup">0</property>
|
||||||
|
<property name="max_size"></property>
|
||||||
|
<property name="maximize_button">0</property>
|
||||||
|
<property name="maximum_size"></property>
|
||||||
|
<property name="min_size"></property>
|
||||||
|
<property name="minimize_button">0</property>
|
||||||
|
<property name="minimum_size"></property>
|
||||||
|
<property name="moveable">1</property>
|
||||||
|
<property name="name">m_textThicknessUnits</property>
|
||||||
|
<property name="pane_border">1</property>
|
||||||
|
<property name="pane_position"></property>
|
||||||
|
<property name="pane_size"></property>
|
||||||
|
<property name="permission">protected</property>
|
||||||
|
<property name="pin_button">1</property>
|
||||||
|
<property name="pos"></property>
|
||||||
|
<property name="resize">Resizable</property>
|
||||||
|
<property name="show">1</property>
|
||||||
|
<property name="size"></property>
|
||||||
|
<property name="style"></property>
|
||||||
|
<property name="subclass">; ; forward_declare</property>
|
||||||
|
<property name="toolbar_pane">0</property>
|
||||||
|
<property name="tooltip"></property>
|
||||||
|
<property name="window_extra_style"></property>
|
||||||
|
<property name="window_name"></property>
|
||||||
|
<property name="window_style"></property>
|
||||||
|
<property name="wrap">-1</property>
|
||||||
|
</object>
|
||||||
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
</object>
|
</object>
|
||||||
|
|
|
@ -120,6 +120,12 @@ class PANEL_SETUP_CONSTRAINTS_BASE : public wxPanel
|
||||||
wxStaticText* m_silkClearanceLabel;
|
wxStaticText* m_silkClearanceLabel;
|
||||||
wxTextCtrl* m_silkClearanceCtrl;
|
wxTextCtrl* m_silkClearanceCtrl;
|
||||||
wxStaticText* m_silkClearanceUnits;
|
wxStaticText* m_silkClearanceUnits;
|
||||||
|
wxStaticText* m_textHeightLabel;
|
||||||
|
wxTextCtrl* m_textHeightCtrl;
|
||||||
|
wxStaticText* m_textHeightUnits;
|
||||||
|
wxStaticText* m_textThicknessLabel;
|
||||||
|
wxTextCtrl* m_textThicknessCtrl;
|
||||||
|
wxStaticText* m_textThicknessUnits;
|
||||||
|
|
||||||
// Virtual event handlers, overide them in your derived class
|
// Virtual event handlers, overide them in your derived class
|
||||||
virtual void onChangeOutlineOpt( wxCommandEvent& event ) { event.Skip(); }
|
virtual void onChangeOutlineOpt( wxCommandEvent& event ) { event.Skip(); }
|
||||||
|
|
|
@ -303,6 +303,8 @@ void PANEL_SETUP_RULES::onScintillaCharAdded( wxStyledTextEvent &aEvent )
|
||||||
"hole_to_hole|"
|
"hole_to_hole|"
|
||||||
"silk_clearance|"
|
"silk_clearance|"
|
||||||
"skew|"
|
"skew|"
|
||||||
|
"text_height|"
|
||||||
|
"text_thickness|"
|
||||||
"track_width|"
|
"track_width|"
|
||||||
"via_count|"
|
"via_count|"
|
||||||
"via_diameter";
|
"via_diameter";
|
||||||
|
|
|
@ -32,6 +32,8 @@
|
||||||
* hole\_size
|
* hole\_size
|
||||||
* silk\_clearance
|
* silk\_clearance
|
||||||
* skew
|
* skew
|
||||||
|
* text\_height
|
||||||
|
* text\_thickness
|
||||||
* track\_width
|
* track\_width
|
||||||
* via\_count
|
* via\_count
|
||||||
* via\_diameter
|
* via\_diameter
|
||||||
|
|
|
@ -174,10 +174,19 @@ void DRC_ENGINE::loadImplicitRules()
|
||||||
|
|
||||||
rule = createImplicitRule( _( "board setup constraints silk" ) );
|
rule = createImplicitRule( _( "board setup constraints silk" ) );
|
||||||
rule->m_LayerCondition = LSET( 2, F_SilkS, B_SilkS );
|
rule->m_LayerCondition = LSET( 2, F_SilkS, B_SilkS );
|
||||||
|
|
||||||
DRC_CONSTRAINT silkClearanceConstraint( SILK_CLEARANCE_CONSTRAINT );
|
DRC_CONSTRAINT silkClearanceConstraint( SILK_CLEARANCE_CONSTRAINT );
|
||||||
silkClearanceConstraint.Value().SetMin( bds.m_SilkClearance );
|
silkClearanceConstraint.Value().SetMin( bds.m_SilkClearance );
|
||||||
rule->AddConstraint( silkClearanceConstraint );
|
rule->AddConstraint( silkClearanceConstraint );
|
||||||
|
|
||||||
|
DRC_CONSTRAINT silkTextHeightConstraint( TEXT_HEIGHT_CONSTRAINT );
|
||||||
|
silkTextHeightConstraint.Value().SetMin( bds.m_MinSilkTextHeight );
|
||||||
|
rule->AddConstraint( silkTextHeightConstraint );
|
||||||
|
|
||||||
|
DRC_CONSTRAINT silkTextThicknessConstraint( TEXT_THICKNESS_CONSTRAINT );
|
||||||
|
silkTextThicknessConstraint.Value().SetMin( bds.m_MinSilkTextThickness );
|
||||||
|
rule->AddConstraint( silkTextThicknessConstraint );
|
||||||
|
|
||||||
rule = createImplicitRule( _( "board setup constraints hole" ) );
|
rule = createImplicitRule( _( "board setup constraints hole" ) );
|
||||||
DRC_CONSTRAINT holeClearanceConstraint( HOLE_CLEARANCE_CONSTRAINT );
|
DRC_CONSTRAINT holeClearanceConstraint( HOLE_CLEARANCE_CONSTRAINT );
|
||||||
holeClearanceConstraint.Value().SetMin( bds.m_HoleClearance );
|
holeClearanceConstraint.Value().SetMin( bds.m_HoleClearance );
|
||||||
|
@ -496,6 +505,8 @@ static wxString formatConstraint( const DRC_CONSTRAINT& constraint )
|
||||||
{ HOLE_SIZE_CONSTRAINT, "hole_size", formatMinMax },
|
{ HOLE_SIZE_CONSTRAINT, "hole_size", formatMinMax },
|
||||||
{ COURTYARD_CLEARANCE_CONSTRAINT, "courtyard_clearance", formatMinMax },
|
{ COURTYARD_CLEARANCE_CONSTRAINT, "courtyard_clearance", formatMinMax },
|
||||||
{ SILK_CLEARANCE_CONSTRAINT, "silk_clearance", formatMinMax },
|
{ SILK_CLEARANCE_CONSTRAINT, "silk_clearance", formatMinMax },
|
||||||
|
{ TEXT_HEIGHT_CONSTRAINT, "text_height", formatMinMax },
|
||||||
|
{ TEXT_THICKNESS_CONSTRAINT, "text_thickness", formatMinMax },
|
||||||
{ TRACK_WIDTH_CONSTRAINT, "track_width", formatMinMax },
|
{ TRACK_WIDTH_CONSTRAINT, "track_width", formatMinMax },
|
||||||
{ ANNULAR_WIDTH_CONSTRAINT, "annular_width", formatMinMax },
|
{ ANNULAR_WIDTH_CONSTRAINT, "annular_width", formatMinMax },
|
||||||
{ DISALLOW_CONSTRAINT, "disallow", nullptr },
|
{ DISALLOW_CONSTRAINT, "disallow", nullptr },
|
||||||
|
|
|
@ -186,6 +186,14 @@ DRC_ITEM DRC_ITEM::silkOverlaps( DRCE_OVERLAPPING_SILK,
|
||||||
_( "Silkscreen overlap" ),
|
_( "Silkscreen overlap" ),
|
||||||
wxT( "silk_overlap" ) );
|
wxT( "silk_overlap" ) );
|
||||||
|
|
||||||
|
DRC_ITEM DRC_ITEM::textHeightOutOfRange( DRCE_TEXT_HEIGHT,
|
||||||
|
_( "Text height out of range" ),
|
||||||
|
wxT( "text_height" ) );
|
||||||
|
|
||||||
|
DRC_ITEM DRC_ITEM::textThicknessOutOfRange( DRCE_TEXT_THICKNESS,
|
||||||
|
_( "Text thickness out of range" ),
|
||||||
|
wxT( "text_thickness" ) );
|
||||||
|
|
||||||
DRC_ITEM DRC_ITEM::lengthOutOfRange( DRCE_LENGTH_OUT_OF_RANGE,
|
DRC_ITEM DRC_ITEM::lengthOutOfRange( DRCE_LENGTH_OUT_OF_RANGE,
|
||||||
_( "Trace length out of range" ),
|
_( "Trace length out of range" ),
|
||||||
wxT( "length_out_of_range" ) );
|
wxT( "length_out_of_range" ) );
|
||||||
|
@ -306,6 +314,8 @@ std::shared_ptr<DRC_ITEM> DRC_ITEM::Create( int aErrorCode )
|
||||||
case DRCE_UNRESOLVED_VARIABLE: return std::make_shared<DRC_ITEM>( unresolvedVariable );
|
case DRCE_UNRESOLVED_VARIABLE: return std::make_shared<DRC_ITEM>( unresolvedVariable );
|
||||||
case DRCE_OVERLAPPING_SILK: return std::make_shared<DRC_ITEM>( silkOverlaps );
|
case DRCE_OVERLAPPING_SILK: return std::make_shared<DRC_ITEM>( silkOverlaps );
|
||||||
case DRCE_SILK_MASK_CLEARANCE: return std::make_shared<DRC_ITEM>( silkMaskClearance );
|
case DRCE_SILK_MASK_CLEARANCE: return std::make_shared<DRC_ITEM>( silkMaskClearance );
|
||||||
|
case DRCE_TEXT_HEIGHT: return std::make_shared<DRC_ITEM>( textHeightOutOfRange );
|
||||||
|
case DRCE_TEXT_THICKNESS: return std::make_shared<DRC_ITEM>( textThicknessOutOfRange );
|
||||||
case DRCE_LENGTH_OUT_OF_RANGE: return std::make_shared<DRC_ITEM>( lengthOutOfRange );
|
case DRCE_LENGTH_OUT_OF_RANGE: return std::make_shared<DRC_ITEM>( lengthOutOfRange );
|
||||||
case DRCE_SKEW_OUT_OF_RANGE: return std::make_shared<DRC_ITEM>( skewOutOfRange );
|
case DRCE_SKEW_OUT_OF_RANGE: return std::make_shared<DRC_ITEM>( skewOutOfRange );
|
||||||
case DRCE_TOO_MANY_VIAS: return std::make_shared<DRC_ITEM>( tooManyVias );
|
case DRCE_TOO_MANY_VIAS: return std::make_shared<DRC_ITEM>( tooManyVias );
|
||||||
|
|
|
@ -74,6 +74,8 @@ enum PCB_DRC_CODE {
|
||||||
DRCE_UNRESOLVED_VARIABLE,
|
DRCE_UNRESOLVED_VARIABLE,
|
||||||
DRCE_SILK_MASK_CLEARANCE, // silkscreen clipped by mask (potentially leaving it
|
DRCE_SILK_MASK_CLEARANCE, // silkscreen clipped by mask (potentially leaving it
|
||||||
// over pads, exposed copper, etc.)
|
// over pads, exposed copper, etc.)
|
||||||
|
DRCE_TEXT_HEIGHT,
|
||||||
|
DRCE_TEXT_THICKNESS,
|
||||||
DRCE_OVERLAPPING_SILK, // silk to silk clearance error
|
DRCE_OVERLAPPING_SILK, // silk to silk clearance error
|
||||||
DRCE_LENGTH_OUT_OF_RANGE,
|
DRCE_LENGTH_OUT_OF_RANGE,
|
||||||
DRCE_SKEW_OUT_OF_RANGE,
|
DRCE_SKEW_OUT_OF_RANGE,
|
||||||
|
@ -169,6 +171,8 @@ private:
|
||||||
static DRC_ITEM unresolvedVariable;
|
static DRC_ITEM unresolvedVariable;
|
||||||
static DRC_ITEM silkMaskClearance;
|
static DRC_ITEM silkMaskClearance;
|
||||||
static DRC_ITEM silkOverlaps;
|
static DRC_ITEM silkOverlaps;
|
||||||
|
static DRC_ITEM textHeightOutOfRange;
|
||||||
|
static DRC_ITEM textThicknessOutOfRange;
|
||||||
static DRC_ITEM lengthOutOfRange;
|
static DRC_ITEM lengthOutOfRange;
|
||||||
static DRC_ITEM skewOutOfRange;
|
static DRC_ITEM skewOutOfRange;
|
||||||
static DRC_ITEM tooManyVias;
|
static DRC_ITEM tooManyVias;
|
||||||
|
|
|
@ -48,6 +48,8 @@ enum DRC_CONSTRAINT_T
|
||||||
HOLE_SIZE_CONSTRAINT,
|
HOLE_SIZE_CONSTRAINT,
|
||||||
COURTYARD_CLEARANCE_CONSTRAINT,
|
COURTYARD_CLEARANCE_CONSTRAINT,
|
||||||
SILK_CLEARANCE_CONSTRAINT,
|
SILK_CLEARANCE_CONSTRAINT,
|
||||||
|
TEXT_HEIGHT_CONSTRAINT,
|
||||||
|
TEXT_THICKNESS_CONSTRAINT,
|
||||||
TRACK_WIDTH_CONSTRAINT,
|
TRACK_WIDTH_CONSTRAINT,
|
||||||
ANNULAR_WIDTH_CONSTRAINT,
|
ANNULAR_WIDTH_CONSTRAINT,
|
||||||
DISALLOW_CONSTRAINT,
|
DISALLOW_CONSTRAINT,
|
||||||
|
|
|
@ -272,6 +272,8 @@ void DRC_RULES_PARSER::parseConstraint( DRC_RULE* aRule )
|
||||||
case T_hole_to_hole: c.m_Type = HOLE_TO_HOLE_CONSTRAINT; break;
|
case T_hole_to_hole: c.m_Type = HOLE_TO_HOLE_CONSTRAINT; break;
|
||||||
case T_courtyard_clearance: c.m_Type = COURTYARD_CLEARANCE_CONSTRAINT; break;
|
case T_courtyard_clearance: c.m_Type = COURTYARD_CLEARANCE_CONSTRAINT; break;
|
||||||
case T_silk_clearance: c.m_Type = SILK_CLEARANCE_CONSTRAINT; break;
|
case T_silk_clearance: c.m_Type = SILK_CLEARANCE_CONSTRAINT; break;
|
||||||
|
case T_text_height: c.m_Type = TEXT_HEIGHT_CONSTRAINT; break;
|
||||||
|
case T_text_thickness: c.m_Type = TEXT_THICKNESS_CONSTRAINT; break;
|
||||||
case T_track_width: c.m_Type = TRACK_WIDTH_CONSTRAINT; break;
|
case T_track_width: c.m_Type = TRACK_WIDTH_CONSTRAINT; break;
|
||||||
case T_annular_width: c.m_Type = ANNULAR_WIDTH_CONSTRAINT; break;
|
case T_annular_width: c.m_Type = ANNULAR_WIDTH_CONSTRAINT; break;
|
||||||
case T_via_diameter: c.m_Type = VIA_DIAMETER_CONSTRAINT; break;
|
case T_via_diameter: c.m_Type = VIA_DIAMETER_CONSTRAINT; break;
|
||||||
|
|
|
@ -0,0 +1,233 @@
|
||||||
|
/*
|
||||||
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2021 KiCad Developers.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, you may find one here:
|
||||||
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
||||||
|
* or you may search the http://www.gnu.org website for the version 2 license,
|
||||||
|
* or you may write to the Free Software Foundation, Inc.,
|
||||||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <pcb_text.h>
|
||||||
|
#include <fp_text.h>
|
||||||
|
#include <drc/drc_engine.h>
|
||||||
|
#include <drc/drc_item.h>
|
||||||
|
#include <drc/drc_rule.h>
|
||||||
|
#include <drc/drc_test_provider.h>
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
Text dimensions tests.
|
||||||
|
Errors generated:
|
||||||
|
- DRCE_TEXT_HEIGHT
|
||||||
|
- DRCE_TEXT_THICKNESS
|
||||||
|
*/
|
||||||
|
|
||||||
|
class DRC_TEST_PROVIDER_TEXT_DIMS : public DRC_TEST_PROVIDER
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DRC_TEST_PROVIDER_TEXT_DIMS()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~DRC_TEST_PROVIDER_TEXT_DIMS()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual bool Run() override;
|
||||||
|
|
||||||
|
virtual const wxString GetName() const override
|
||||||
|
{
|
||||||
|
return "text_dimensions";
|
||||||
|
};
|
||||||
|
|
||||||
|
virtual const wxString GetDescription() const override
|
||||||
|
{
|
||||||
|
return "Tests text height and thickness";
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual std::set<DRC_CONSTRAINT_T> GetConstraintTypes() const override;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
bool DRC_TEST_PROVIDER_TEXT_DIMS::Run()
|
||||||
|
{
|
||||||
|
const int delta = 100; // This is the number of tests between 2 calls to the progress bar
|
||||||
|
int count = 0;
|
||||||
|
int ii = 0;
|
||||||
|
|
||||||
|
if( m_drcEngine->IsErrorLimitExceeded( DRCE_TEXT_HEIGHT )
|
||||||
|
&& m_drcEngine->IsErrorLimitExceeded( DRCE_TEXT_THICKNESS ) )
|
||||||
|
{
|
||||||
|
reportAux( "Text dimension violations ignored. Tests not run." );
|
||||||
|
return true; // continue with other tests
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !m_drcEngine->HasRulesForConstraintType( TEXT_HEIGHT_CONSTRAINT )
|
||||||
|
&& !m_drcEngine->HasRulesForConstraintType( TEXT_THICKNESS_CONSTRAINT ) )
|
||||||
|
{
|
||||||
|
reportAux( "No text height or text thickness constraints found. Tests not run." );
|
||||||
|
return true; // continue with other tests
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !reportPhase( _( "Checking text dimensions..." ) ) )
|
||||||
|
return false; // DRC cancelled
|
||||||
|
|
||||||
|
auto countItems =
|
||||||
|
[&]( BOARD_ITEM* item ) -> bool
|
||||||
|
{
|
||||||
|
++count;
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
auto checkTextDims =
|
||||||
|
[&]( BOARD_ITEM* item ) -> bool
|
||||||
|
{
|
||||||
|
if( m_drcEngine->IsErrorLimitExceeded( DRCE_TEXT_HEIGHT )
|
||||||
|
&& m_drcEngine->IsErrorLimitExceeded( DRCE_TEXT_THICKNESS ) )
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !reportProgress( ii++, count, delta ) )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
PCB_TEXT* textItem = static_cast<PCB_TEXT*>( item );
|
||||||
|
DRC_CONSTRAINT constraint;
|
||||||
|
|
||||||
|
if( !textItem->IsVisible() )
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if( !m_drcEngine->IsErrorLimitExceeded( DRCE_TEXT_HEIGHT ) )
|
||||||
|
{
|
||||||
|
constraint = m_drcEngine->EvalRules( TEXT_HEIGHT_CONSTRAINT, item, nullptr,
|
||||||
|
item->GetLayer() );
|
||||||
|
bool fail_min = false;
|
||||||
|
bool fail_max = false;
|
||||||
|
int constraintHeight;
|
||||||
|
int actual = textItem->GetTextHeight();
|
||||||
|
|
||||||
|
if( constraint.Value().HasMin() && actual < constraint.Value().Min() )
|
||||||
|
{
|
||||||
|
fail_min = true;
|
||||||
|
constraintHeight = constraint.Value().Min();
|
||||||
|
}
|
||||||
|
|
||||||
|
if( constraint.Value().HasMax() && actual > constraint.Value().Max() )
|
||||||
|
{
|
||||||
|
fail_max = true;
|
||||||
|
constraintHeight = constraint.Value().Max();
|
||||||
|
}
|
||||||
|
|
||||||
|
if( fail_min || fail_max )
|
||||||
|
{
|
||||||
|
std::shared_ptr<DRC_ITEM> drcItem = DRC_ITEM::Create( DRCE_TEXT_HEIGHT );
|
||||||
|
|
||||||
|
if( fail_min )
|
||||||
|
{
|
||||||
|
m_msg.Printf( _( "(%s min height %s; actual %s)" ),
|
||||||
|
constraint.GetName(),
|
||||||
|
MessageTextFromValue( userUnits(), constraintHeight ),
|
||||||
|
MessageTextFromValue( userUnits(), actual ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_msg.Printf( _( "(%s max height %s; actual %s)" ),
|
||||||
|
constraint.GetName(),
|
||||||
|
MessageTextFromValue( userUnits(), constraintHeight ),
|
||||||
|
MessageTextFromValue( userUnits(), actual ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
drcItem->SetErrorMessage( drcItem->GetErrorText() + wxS( " " ) + m_msg );
|
||||||
|
drcItem->SetItems( item );
|
||||||
|
drcItem->SetViolatingRule( constraint.GetParentRule() );
|
||||||
|
|
||||||
|
reportViolation( drcItem, item->GetPosition() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !m_drcEngine->IsErrorLimitExceeded( DRCE_TEXT_THICKNESS ) )
|
||||||
|
{
|
||||||
|
constraint = m_drcEngine->EvalRules( TEXT_THICKNESS_CONSTRAINT, item, nullptr,
|
||||||
|
item->GetLayer() );
|
||||||
|
bool fail_min = false;
|
||||||
|
bool fail_max = false;
|
||||||
|
int constraintThickness;
|
||||||
|
int actual = textItem->GetTextThickness();
|
||||||
|
|
||||||
|
if( constraint.Value().HasMin() && actual < constraint.Value().Min() )
|
||||||
|
{
|
||||||
|
fail_min = true;
|
||||||
|
constraintThickness = constraint.Value().Min();
|
||||||
|
}
|
||||||
|
|
||||||
|
if( constraint.Value().HasMax() && actual > constraint.Value().Max() )
|
||||||
|
{
|
||||||
|
fail_max = true;
|
||||||
|
constraintThickness = constraint.Value().Max();
|
||||||
|
}
|
||||||
|
|
||||||
|
if( fail_min || fail_max )
|
||||||
|
{
|
||||||
|
std::shared_ptr<DRC_ITEM> drcItem = DRC_ITEM::Create( DRCE_TEXT_THICKNESS );
|
||||||
|
|
||||||
|
if( fail_min )
|
||||||
|
{
|
||||||
|
m_msg.Printf( _( "(%s min thickness %s; actual %s)" ),
|
||||||
|
constraint.GetName(),
|
||||||
|
MessageTextFromValue( userUnits(), constraintThickness ),
|
||||||
|
MessageTextFromValue( userUnits(), actual ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_msg.Printf( _( "(%s max thickness %s; actual %s)" ),
|
||||||
|
constraint.GetName(),
|
||||||
|
MessageTextFromValue( userUnits(), constraintThickness ),
|
||||||
|
MessageTextFromValue( userUnits(), actual ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
drcItem->SetErrorMessage( drcItem->GetErrorText() + wxS( " " ) + m_msg );
|
||||||
|
drcItem->SetItems( item );
|
||||||
|
drcItem->SetViolatingRule( constraint.GetParentRule() );
|
||||||
|
|
||||||
|
reportViolation( drcItem, item->GetPosition() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const std::vector<KICAD_T> itemTypes = { PCB_TEXT_T, PCB_FP_TEXT_T };
|
||||||
|
|
||||||
|
forEachGeometryItem( itemTypes, LSET::AllLayersMask(), countItems );
|
||||||
|
forEachGeometryItem( itemTypes, LSET::AllLayersMask(), checkTextDims );
|
||||||
|
|
||||||
|
reportRuleStatistics();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
std::set<DRC_CONSTRAINT_T> DRC_TEST_PROVIDER_TEXT_DIMS::GetConstraintTypes() const
|
||||||
|
{
|
||||||
|
return { TEXT_HEIGHT_CONSTRAINT, TEXT_THICKNESS_CONSTRAINT };
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
namespace detail
|
||||||
|
{
|
||||||
|
static DRC_REGISTER_TEST_PROVIDER<DRC_TEST_PROVIDER_TEXT_DIMS> dummy;
|
||||||
|
}
|
|
@ -765,7 +765,7 @@ bool PCB_EDIT_FRAME::OpenProjectFiles( const std::vector<wxString>& aFileSet, in
|
||||||
if( !loadedBoard->m_LegacyCopperEdgeClearanceLoaded )
|
if( !loadedBoard->m_LegacyCopperEdgeClearanceLoaded )
|
||||||
{
|
{
|
||||||
int edgeClearance = inferLegacyEdgeClearance( loadedBoard );
|
int edgeClearance = inferLegacyEdgeClearance( loadedBoard );
|
||||||
loadedBoard->GetDesignSettings().SetCopperEdgeClearance( edgeClearance );
|
loadedBoard->GetDesignSettings().m_CopperEdgeClearance = edgeClearance;
|
||||||
}
|
}
|
||||||
|
|
||||||
// On save; design settings will be removed from the board
|
// On save; design settings will be removed from the board
|
||||||
|
|
Loading…
Reference in New Issue