54 virtual bool Run()
override;
56 virtual const wxString
GetName()
const override
58 return wxT(
"text_dimensions" );
63 return wxT(
"Tests text height and thickness" );
70 const int progressDelta = 250;
77 reportAux( wxT(
"Text dimension violations ignored. Tests not run." ) );
84 reportAux( wxT(
"No text height or text thickness constraints found. Tests not run." ) );
91 auto checkTextHeight =
103 int actualHeight =
text->GetTextSize().y;
108 wxString msg =
formatMsg(
_(
"(%s min height %s; actual %s)" ),
113 drcItem->SetErrorMessage( drcItem->GetErrorText() + wxS(
" " ) + msg );
114 drcItem->SetItems( item );
123 wxString msg =
formatMsg(
_(
"(%s max height %s; actual %s)" ),
128 drcItem->SetErrorMessage( drcItem->GetErrorText() + wxS(
" " ) + msg );
129 drcItem->SetItems( item );
138 auto checkTextThickness =
157 auto* glyphs =
text->GetRenderCache( font,
text->GetShownText() );
158 bool collapsedStroke =
false;
159 bool collapsedArea =
false;
161 for(
const std::unique_ptr<KIFONT::GLYPH>& glyph : *glyphs )
167 if( outlineCount == 0 )
170 for( ii = 0; ii < outlineCount; ++ii )
171 holeCount += outlineGlyph->HoleCount( ii );
178 int resultingHoleCount = 0;
180 for( ii = 0; ii < resultingOutlineCount; ++ii )
181 resultingHoleCount += poly.
HoleCount( ii );
183 if( ( resultingOutlineCount != outlineCount )
184 || ( resultingHoleCount != holeCount ) )
186 collapsedStroke =
true;
190 double glyphArea = outlineGlyph->Area();
197 double resultingGlyphArea = poly.
Area();
199 if( (
std::abs( resultingGlyphArea - glyphArea ) / glyphArea ) > 0.1 )
201 collapsedArea =
true;
206 if( collapsedStroke || collapsedArea )
211 msg =
_(
"(TrueType font characters with insufficient stroke weight)" );
213 drcItem->SetErrorMessage( drcItem->GetErrorText() + wxS(
" " ) + msg );
214 drcItem->SetItems( item );
222 int actualThickness =
text->GetEffectiveTextPenWidth();
227 wxString msg =
formatMsg(
_(
"(%s min thickness %s; actual %s)" ),
232 drcItem->SetErrorMessage( drcItem->GetErrorText() + wxS(
" " ) + msg );
233 drcItem->SetItems( item );
242 wxString msg =
formatMsg(
_(
"(%s max thickness %s; actual %s)" ),
247 drcItem->SetErrorMessage( drcItem->GetErrorText() + wxS(
" " ) + msg );
248 drcItem->SetItems( item );
277 switch( item->
Type() )
279 case PCB_TEXT_T: text = static_cast<PCB_TEXT*>( item ); break;
280 case PCB_TEXTBOX_T: text = static_cast<PCB_TEXTBOX*>( item ); break;
281 case PCB_FP_TEXT_T: text = static_cast<FP_TEXT*>( item ); break;
282 case PCB_FP_TEXTBOX_T: text = static_cast<FP_TEXTBOX*>( item ); break;
283 default: UNIMPLEMENTED_FOR( item->GetClass() ); break;
292 checkTextThickness( item,
text );
297 checkTextHeight( item,
text );
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
SEVERITY GetSeverity() const
MINOPTMAX< int > & Value()
DRC_RULE * GetParentRule() const
bool HasRulesForConstraintType(DRC_CONSTRAINT_T constraintID)
bool IsErrorLimitExceeded(int error_code)
DRC_CONSTRAINT EvalRules(DRC_CONSTRAINT_T aConstraintType, const BOARD_ITEM *a, const BOARD_ITEM *b, PCB_LAYER_ID aLayer, REPORTER *aReporter=nullptr)
static std::shared_ptr< DRC_ITEM > Create(int aErrorCode)
Constructs a DRC_ITEM for the given error code.
DRC_TEST_PROVIDER_TEXT_DIMS()
virtual ~DRC_TEST_PROVIDER_TEXT_DIMS()
virtual bool Run() override
Run this provider against the given PCB with configured options (if any).
virtual const wxString GetName() const override
virtual const wxString GetDescription() const override
Represent a DRC "provider" which runs some DRC functions over a BOARD and spits out #DRC_ITEMs and po...
virtual bool reportPhase(const wxString &aStageName)
int forEachGeometryItem(const std::vector< KICAD_T > &aTypes, LSET aLayers, const std::function< bool(BOARD_ITEM *)> &aFunc)
virtual bool reportProgress(int aCount, int aSize, int aDelta)
virtual void reportViolation(std::shared_ptr< DRC_ITEM > &item, const VECTOR2I &aMarkerPos, int aMarkerLayer)
virtual void reportAux(wxString fmt,...)
wxString formatMsg(const wxString &aFormatString, const wxString &aSource, int aConstraint, int aActual)
virtual void reportRuleStatistics()
virtual VECTOR2I GetPosition() const
KICAD_T Type() const
Returns the type of object.
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
FONT is an abstract base class for both outline and stroke fonts.
static FONT * GetFont(const wxString &aFontName=wxEmptyString, bool aBold=false, bool aItalic=false)
virtual bool IsOutline() const
static LSET AllLayersMask()
Represent a set of closed polygons.
double Area()
Count the number of arc shapes present.
void Deflate(int aAmount, int aCircleSegmentsCount, CORNER_STRATEGY aCornerStrategy=CHAMFER_ALL_CORNERS)
void Inflate(int aAmount, int aCircleSegCount, CORNER_STRATEGY aCornerStrategy=ROUND_ALL_CORNERS)
Perform outline inflation/deflation.
int HoleCount(int aOutline) const
Return the reference to aIndex-th outline in the set.
void Simplify(POLYGON_MODE aFastMode)
int OutlineCount() const
Return the number of vertices in a given outline/hole.
SHAPE_POLY_SET CloneDropTriangulation() const
Creates a new empty polygon in the set and returns its index.
@ TEXT_THICKNESS_CONSTRAINT
This file contains miscellaneous commonly used macros and functions.
static DRC_REGISTER_TEST_PROVIDER< DRC_TEST_PROVIDER_ANNULAR_WIDTH > dummy
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
@ PCB_FP_TEXTBOX_T
class FP_TEXTBOX, wrapped text in a footprint
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
@ PCB_FP_TEXT_T
class FP_TEXT, text in a footprint