51 virtual bool Run()
override;
53 virtual const wxString
GetName()
const override {
return wxT(
"text_dimensions" ); };
59 const int progressDelta = 250;
66 REPORT_AUX( wxT(
"Text dimension violations ignored. Tests not run." ) );
73 REPORT_AUX( wxT(
"No text height or text thickness constraints found. Tests not run." ) );
80 auto checkTextHeight =
92 int actualHeight =
text->GetTextSize().y;
97 wxString msg =
formatMsg(
_(
"(%s min height %s; actual %s)" ),
102 drcItem->SetErrorMessage( drcItem->GetErrorText() + wxS(
" " ) + msg );
103 drcItem->SetItems( item );
112 wxString msg =
formatMsg(
_(
"(%s max height %s; actual %s)" ),
117 drcItem->SetErrorMessage( drcItem->GetErrorText() + wxS(
" " ) + msg );
118 drcItem->SetItems( item );
127 auto checkTextThickness =
146 auto* glyphs =
text->GetRenderCache( font,
text->GetShownText(
true ) );
147 bool collapsedStroke =
false;
148 bool collapsedArea =
false;
150 for(
const std::unique_ptr<KIFONT::GLYPH>& glyph : *glyphs )
154 if( !glyph->IsOutline() )
161 if( outlineCount == 0 )
164 for( ii = 0; ii < outlineCount; ++ii )
165 holeCount += outlineGlyph->HoleCount( ii );
169 CORNER_STRATEGY::CHAMFER_ALL_CORNERS,
ARC_LOW_DEF );
173 int resultingHoleCount = 0;
175 for( ii = 0; ii < resultingOutlineCount; ++ii )
176 resultingHoleCount += poly.
HoleCount( ii );
178 if( ( resultingOutlineCount != outlineCount )
179 || ( resultingHoleCount != holeCount ) )
181 collapsedStroke =
true;
185 double glyphArea = outlineGlyph->Area();
191 CORNER_STRATEGY::CHAMFER_ALL_CORNERS,
ARC_LOW_DEF, true );
193 double resultingGlyphArea = poly.
Area();
195 if( (
std::abs( resultingGlyphArea - glyphArea ) / glyphArea ) > 0.1 )
197 collapsedArea =
true;
202 if( collapsedStroke || collapsedArea )
207 msg =
_(
"(TrueType font characters with insufficient stroke weight)" );
209 drcItem->SetErrorMessage( drcItem->GetErrorText() + wxS(
" " ) + msg );
210 drcItem->SetItems( item );
218 int actualThickness =
text->GetEffectiveTextPenWidth();
223 wxString msg =
formatMsg(
_(
"(%s min thickness %s; actual %s)" ),
228 drcItem->SetErrorMessage( drcItem->GetErrorText() + wxS(
" " ) + msg );
229 drcItem->SetItems( item );
238 wxString msg =
formatMsg(
_(
"(%s max thickness %s; actual %s)" ),
243 drcItem->SetErrorMessage( drcItem->GetErrorText() + wxS(
" " ) + msg );
244 drcItem->SetItems( item );
254 static const std::vector<KICAD_T> itemTypes = {
277 if( !
text->IsVisible() )
283 checkTextThickness( item,
text );
288 checkTextHeight( item,
text );
constexpr int ARC_LOW_DEF
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 bool Run() override
Run this provider against the given PCB with configured options (if any).
virtual ~DRC_TEST_PROVIDER_TEXT_DIMS()=default
virtual const wxString GetName() const override
Represent a DRC "provider" which runs some DRC functions over a BOARD and spits out DRC_ITEM and posi...
virtual bool reportPhase(const wxString &aStageName)
virtual void reportViolation(std::shared_ptr< DRC_ITEM > &item, const VECTOR2I &aMarkerPos, int aMarkerLayer, DRC_CUSTOM_MARKER_HANDLER *aCustomHandler=nullptr)
int forEachGeometryItem(const std::vector< KICAD_T > &aTypes, const LSET &aLayers, const std::function< bool(BOARD_ITEM *)> &aFunc)
wxString formatMsg(const wxString &aFormatString, const wxString &aSource, double aConstraint, double aActual, EDA_DATA_TYPE aDataType=EDA_DATA_TYPE::DISTANCE)
virtual bool reportProgress(size_t aCount, size_t aSize, size_t aDelta=1)
virtual VECTOR2I GetPosition() const
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, const std::vector< wxString > *aEmbeddedFiles=nullptr, bool aForDrawingSheet=false)
virtual bool IsOutline() const
static const LSET & AllLayersMask()
Represent a set of closed polygons.
double Area()
Return the area of this poly set.
void Inflate(int aAmount, CORNER_STRATEGY aCornerStrategy, int aMaxError, bool aSimplify=false)
Perform outline inflation/deflation.
int HoleCount(int aOutline) const
Returns the number of holes in a given outline.
void Simplify()
Simplify the polyset (merges overlapping polys, eliminates degeneracy/self-intersections)
void Deflate(int aAmount, CORNER_STRATEGY aCornerStrategy, int aMaxError)
int OutlineCount() const
Return the number of outlines in the set.
SHAPE_POLY_SET CloneDropTriangulation() const
@ 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_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
@ PCB_FIELD_T
class PCB_FIELD, text associated with a footprint property
@ PCB_TABLECELL_T
class PCB_TABLECELL, PCB_TEXTBOX for use in tables
@ PCB_DIMENSION_T
class PCB_DIMENSION_BASE: abstract dimension meta-type