KiCad PCB EDA Suite
Loading...
Searching...
No Matches
sch_text.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2016 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright (C) 2015 Wayne Stambaugh <[email protected]>
6 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program; if not, you may find one here:
20 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21 * or you may search the http://www.gnu.org website for the version 2 license,
22 * or you may write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 */
25
26#include <advanced_config.h>
27#include <base_units.h>
28#include <pgm_base.h>
29#include <sch_edit_frame.h>
30#include <sch_plotter.h>
31#include <widgets/msgpanel.h>
32#include <bitmaps.h>
33#include <string_utils.h>
35#include <sch_text.h>
36#include <schematic.h>
38#include <sch_painter.h>
39#include <default_values.h>
40#include <wx/debug.h>
41#include <wx/log.h>
45#include <core/mirror.h>
46#include <core/kicad_algo.h>
48#include <trigo.h>
49
50
51SCH_TEXT::SCH_TEXT( const VECTOR2I& aPos, const wxString& aText, SCH_LAYER_ID aLayer,
52 KICAD_T aType ) :
53 SCH_ITEM( nullptr, aType ),
54 EDA_TEXT( schIUScale, aText )
55{
56 m_layer = aLayer;
57
58 SetTextPos( aPos );
59 SetMultilineAllowed( true );
60
61 m_excludedFromSim = false;
62}
63
64
66 SCH_ITEM( aText ),
67 EDA_TEXT( aText )
68{
70}
71
72
74{
75 // Fudge factor to match KiCad 6
76 return VECTOR2I( 0, -2500 );
77}
78
79
81{
83 return;
84
85 VECTOR2I delta( 0, 0 );
86 BOX2I bbox = GetTextBox( nullptr );
87
88 if( GetTextAngle().IsHorizontal() )
89 {
91 delta.x = bbox.GetWidth() / 2;
93 delta.x = - bbox.GetWidth() / 2;
94
96 delta.y = - bbox.GetHeight() / 2;
98 delta.y = bbox.GetHeight() / 2;
99 }
100 else
101 {
103 delta.y = bbox.GetWidth() / 2;
105 delta.y = - bbox.GetWidth() / 2;
106
108 delta.x = + bbox.GetHeight() / 2;
110 delta.x = - bbox.GetHeight() / 2;
111 }
112
113 if( inverse )
115 else
117}
118
119
121{
122 if( m_layer == LAYER_DEVICE )
123 {
124 NormalizeJustification( false );
125 int x = GetTextPos().x;
126
127 x -= aCenter;
128 x *= -1;
129 x += aCenter;
130
131 if( GetTextAngle().IsHorizontal() )
132 {
137 }
138 else
139 {
144 }
145
146 SetTextX( x );
148 }
149 else
150 {
152 FlipHJustify();
153
154 SetTextX( MIRRORVAL( GetTextPos().x, aCenter ) );
155 }
156}
157
158
159void SCH_TEXT::MirrorVertically( int aCenter )
160{
161 if( m_layer == LAYER_DEVICE )
162 {
163 NormalizeJustification( false );
164 int y = GetTextPos().y;
165
166 y -= aCenter;
167 y *= -1;
168 y += aCenter;
169
170 if( GetTextAngle().IsHorizontal() )
171 {
176 }
177 else
178 {
183 }
184
185 SetTextY( y );
187 }
188 else
189 {
191 FlipHJustify();
192
193 SetTextY( MIRRORVAL( GetTextPos().y, aCenter ) );
194 }
195}
196
197
198void SCH_TEXT::Rotate( const VECTOR2I& aCenter, bool aRotateCCW )
199{
200 VECTOR2I pt = GetTextPos();
201 RotatePoint( pt, aCenter, aRotateCCW ? ANGLE_90 : ANGLE_270 );
202 VECTOR2I offset = pt - GetTextPos();
203
204 Rotate90( false );
205
206 SetTextPos( GetTextPos() + offset );
207}
208
209
210void SCH_TEXT::Rotate90( bool aClockwise )
211{
212 if( ( GetTextAngle() == ANGLE_HORIZONTAL && aClockwise )
213 || ( GetTextAngle() == ANGLE_VERTICAL && !aClockwise ) )
214 {
215 FlipHJustify();
216 }
217
219}
220
221
222void SCH_TEXT::MirrorSpinStyle( bool aLeftRight )
223{
224 if( ( GetTextAngle() == ANGLE_HORIZONTAL && aLeftRight )
225 || ( GetTextAngle() == ANGLE_VERTICAL && !aLeftRight ) )
226 {
227 FlipHJustify();
228 }
229}
230
231
233{
234 SCH_TEXT* item = static_cast<SCH_TEXT*>( aItem );
235
236 SwapText( *item );
237 SwapAttributes( *item );
238}
239
240
241bool SCH_TEXT::operator<( const SCH_ITEM& aItem ) const
242{
243 if( Type() != aItem.Type() )
244 return Type() < aItem.Type();
245
246 auto other = static_cast<const SCH_TEXT*>( &aItem );
247
248 if( GetLayer() != other->GetLayer() )
249 return GetLayer() < other->GetLayer();
250
251 if( GetPosition().x != other->GetPosition().x )
252 return GetPosition().x < other->GetPosition().x;
253
254 if( GetPosition().y != other->GetPosition().y )
255 return GetPosition().y < other->GetPosition().y;
256
257 if( GetExcludedFromSim() != other->GetExcludedFromSim() )
258 return GetExcludedFromSim() - other->GetExcludedFromSim();
259
260 return GetText() < other->GetText();
261}
262
263
264int SCH_TEXT::GetTextOffset( const RENDER_SETTINGS* aSettings ) const
265{
266 double ratio;
267
268 if( aSettings )
269 ratio = static_cast<const SCH_RENDER_SETTINGS*>( aSettings )->m_TextOffsetRatio;
270 else if( Schematic() )
272 else
273 ratio = DEFAULT_TEXT_OFFSET_RATIO; // For previews (such as in Preferences), etc.
274
275 return KiROUND( ratio * GetTextSize().y );
276}
277
278
280{
282}
283
284
286{
288
289 if( !font )
290 font = KIFONT::FONT::GetFont( GetDefaultFont( aSettings ), IsBold(), IsItalic() );
291
292 return font;
293}
294
295
297{
298 BOX2I bbox = GetTextBox( nullptr );
299
300 if( !GetTextAngle().IsZero() ) // Rotate bbox.
301 {
302 VECTOR2I pos = bbox.GetOrigin();
303 VECTOR2I end = bbox.GetEnd();
304
307
308 bbox.SetOrigin( pos );
309 bbox.SetEnd( end );
310 }
311
312 bbox.Normalize();
313 return bbox;
314}
315
316
317wxString SCH_TEXT::GetShownText( const SCH_SHEET_PATH* aPath, bool aAllowExtraText,
318 int aDepth ) const
319{
320 SCH_SHEET* sheet = nullptr;
321
322 if( aPath )
323 sheet = aPath->Last();
324 else if( SCHEMATIC* schematic = Schematic() )
325 sheet = schematic->CurrentSheet().Last();
326
327 std::function<bool( wxString* )> textResolver =
328 [&]( wxString* token ) -> bool
329 {
330 if( SCH_SYMBOL* sch_symbol = dynamic_cast<SCH_SYMBOL*>( m_parent ) )
331 {
332 if( sch_symbol->ResolveTextVar( aPath, token, aDepth + 1 ) )
333 return true;
334 }
335 else if( LIB_SYMBOL* lib_symbol = dynamic_cast<LIB_SYMBOL*>( m_parent ) )
336 {
337 if( lib_symbol->ResolveTextVar( token, aDepth + 1 ) )
338 return true;
339 }
340
341 if( sheet )
342 {
343 if( sheet->ResolveTextVar( aPath, token, aDepth + 1 ) )
344 return true;
345 }
346
347 return false;
348 };
349
350 wxString text = EDA_TEXT::GetShownText( aAllowExtraText, aDepth );
351
352 if( HasTextVars() )
353 {
354 if( aDepth < ADVANCED_CFG::GetCfg().m_ResolveTextRecursionDepth )
355 text = ExpandTextVars( text, &textResolver );
356 }
357
358 if( text.Contains( wxT( "@{" ) ) )
360
361 return text;
362}
363
364
366{
367 wxCHECK_MSG( IsHypertext(), /* void */,
368 wxT( "Calling a hypertext menu on a SCH_TEXT with no hyperlink?" ) );
369
371 navTool->HypertextCommand( m_hyperlink );
372}
373
374
375wxString SCH_TEXT::GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const
376{
377 return wxString::Format( _( "Graphic Text '%s'" ),
378 aFull ? GetShownText( false ) : KIUI::EllipsizeMenuText( GetText() ) );
379}
380
381
383{
384 return BITMAPS::text;
385}
386
387
388bool SCH_TEXT::HitTest( const VECTOR2I& aPosition, int aAccuracy ) const
389{
390 BOX2I bBox = GetBoundingBox();
391 bBox.Inflate( aAccuracy );
392 return bBox.Contains( aPosition );
393}
394
395
396bool SCH_TEXT::HitTest( const BOX2I& aRect, bool aContained, int aAccuracy ) const
397{
399 return false;
400
401 BOX2I rect = aRect;
402 BOX2I bBox = GetBoundingBox();
403
404 rect.Inflate( aAccuracy );
405
406 if( aContained )
407 return aRect.Contains( bBox );
408
409 return aRect.Intersects( bBox );
410}
411
412
413bool SCH_TEXT::HitTest( const SHAPE_LINE_CHAIN& aPoly, bool aContained ) const
414{
416 return false;
417
418 return KIGEOM::BoxHitTest( aPoly, GetBoundingBox(), aContained );
419}
420
421
422void SCH_TEXT::BeginEdit( const VECTOR2I& aPosition )
423{
424 SetTextPos( aPosition );
425}
426
427
428void SCH_TEXT::CalcEdit( const VECTOR2I& aPosition )
429{
430 SetTextPos( aPosition );
431}
432
433
434std::vector<int> SCH_TEXT::ViewGetLayers() const
435{
436 if( IsPrivate() )
438
440}
441
442
443void SCH_TEXT::Plot( PLOTTER* aPlotter, bool aBackground, const SCH_PLOT_OPTS& aPlotOpts,
444 int aUnit, int aBodyStyle, const VECTOR2I& aOffset, bool aDimmed )
445{
446 if( aBackground || IsPrivate() )
447 return;
448
449 SCH_RENDER_SETTINGS* renderSettings = getRenderSettings( aPlotter );
451 COLOR4D bg = renderSettings->GetBackgroundColor();
452
453 if( !aPlotter->GetColorMode() || color == COLOR4D::UNSPECIFIED )
454 {
455 SCH_CONNECTION* connection = Connection();
456
457 if( connection && connection->IsBus() )
458 color = renderSettings->GetLayerColor( LAYER_BUS );
459 else
460 color = renderSettings->GetLayerColor( m_layer );
461 }
462
463 if( !IsVisible() )
464 bg = renderSettings->GetLayerColor( LAYER_HIDDEN );
465 else if( bg == COLOR4D::UNSPECIFIED || !aPlotter->GetColorMode() )
466 bg = COLOR4D::WHITE;
467
468 if( aDimmed )
469 {
470 color.Desaturate( );
471 color = color.Mix( bg, 0.5f );
472 }
473
474 int penWidth = GetEffectiveTextPenWidth( renderSettings->GetDefaultPenWidth() );
475 penWidth = std::max( penWidth, renderSettings->GetMinPenWidth() );
476 aPlotter->SetCurrentLineWidth( penWidth );
477
478 KIFONT::FONT* font = GetDrawFont( renderSettings );
480 attrs.m_StrokeWidth = penWidth;
481
482 if( m_layer == LAYER_DEVICE )
483 {
484 BOX2I bBox = GetBoundingBox();
485
486 /*
487 * Calculate the text justification, according to the symbol orientation/mirror. This is
488 * a bit complicated due to cumulative calculations:
489 * - numerous cases (mirrored or not, rotation)
490 * - the plotter's Text() function will also recalculate H and V justifications according
491 * to the text orientation
492 * - when a symbol is mirrored the text is not, and justifications become a nightmare
493 *
494 * So the easier way is to use no justifications (centered text) and use GetBoundingBox to
495 * know the text coordinate considered as centered.
496 */
497 VECTOR2I txtpos = bBox.Centre();
500
501 // The text orientation may need to be flipped if the transformation matrix causes xy
502 // axes to be flipped.
503 if( ( renderSettings->m_Transform.x1 != 0 ) ^ ( GetTextAngle() != ANGLE_HORIZONTAL ) )
505 else
506 attrs.m_Angle = ANGLE_VERTICAL;
507
508 aPlotter->PlotText( renderSettings->TransformCoordinate( txtpos ) + aOffset, color,
509 GetText(), attrs, font, GetFontMetrics() );
510 }
511 else
512 {
514 VECTOR2I text_offset = GetSchematicTextOffset( aPlotter->RenderSettings() );
515
516 // Adjust text drawn in an outline font to more closely mimic the positioning of
517 // SCH_FIELD text.
518 if( font->IsOutline() )
519 {
520 BOX2I firstLineBBox = GetTextBox( renderSettings, 0 );
521 int sizeDiff = firstLineBBox.GetHeight() - GetTextSize().y;
522 int adjust = KiROUND( sizeDiff * 0.4 );
523 VECTOR2I adjust_offset( 0, - adjust );
524
525 RotatePoint( adjust_offset, GetDrawRotation() );
526 text_offset += adjust_offset;
527 }
528
529 std::vector<VECTOR2I> positions;
530 wxArrayString strings_list;
531 wxStringSplit( GetShownText( sheet, true ), strings_list, '\n' );
532 positions.reserve( strings_list.Count() );
533
534 GetLinePositions( renderSettings, positions, (int) strings_list.Count() );
535
536 attrs.m_Multiline = false;
537
538 for( unsigned ii = 0; ii < strings_list.Count(); ii++ )
539 {
540 VECTOR2I textpos = positions[ii] + text_offset;
541 wxString& txt = strings_list.Item( ii );
542 aPlotter->PlotText( textpos, color, txt, attrs, font, GetFontMetrics() );
543 }
544
545 if( HasHyperlink() )
546 aPlotter->HyperlinkBox( GetBoundingBox(), GetHyperlink() );
547 }
548}
549
550
551void SCH_TEXT::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList )
552{
553 wxString msg;
554
555 // Don't use GetShownText() here; we want to show the user the variable references
556 aList.emplace_back( _( "Text" ), KIUI::EllipsizeStatusText( aFrame, GetText() ) );
557
558 SCH_ITEM::GetMsgPanelInfo( aFrame, aList );
559
561 aList.emplace_back( _( "Exclude from" ), _( "Simulation" ) );
562
563 aList.emplace_back( _( "Font" ), GetFont() ? GetFont()->GetName() : _( "Default" ) );
564
565 wxString textStyle[] = { _( "Normal" ), _( "Italic" ), _( "Bold" ), _( "Bold Italic" ) };
566 int style = IsBold() && IsItalic() ? 3 : IsBold() ? 2 : IsItalic() ? 1 : 0;
567 aList.emplace_back( _( "Style" ), textStyle[style] );
568
569 aList.emplace_back( _( "Text Size" ), aFrame->MessageTextFromValue( GetTextWidth() ) );
570
571 switch( GetHorizJustify() )
572 {
573 case GR_TEXT_H_ALIGN_LEFT: msg = _( "Align left" ); break;
574 case GR_TEXT_H_ALIGN_CENTER: msg = _( "Align center" ); break;
575 case GR_TEXT_H_ALIGN_RIGHT: msg = _( "Align right" ); break;
577 }
578
579 if( m_layer == LAYER_DEVICE )
580 {
581 aList.emplace_back( _( "H Justification" ), msg );
582
583 switch ( GetVertJustify() )
584 {
585 case GR_TEXT_V_ALIGN_TOP: msg = _( "Top" ); break;
586 case GR_TEXT_V_ALIGN_CENTER: msg = _( "Center" ); break;
587 case GR_TEXT_V_ALIGN_BOTTOM: msg = _( "Bottom" ); break;
589 }
590
591 aList.emplace_back( _( "V Justification" ), msg );
592 }
593 else
594 {
595 aList.emplace_back( _( "Justification" ), msg );
596 }
597}
598
599
600bool SCH_TEXT::operator==( const SCH_ITEM& aOther ) const
601{
602 if( Type() != aOther.Type() )
603 return false;
604
605 const SCH_TEXT* other = static_cast<const SCH_TEXT*>( &aOther );
606
607 if( GetLayer() != other->GetLayer() )
608 return false;
609
610 if( GetExcludedFromSim() != other->GetExcludedFromSim() )
611 return false;
612
613 return EDA_TEXT::operator==( *other );
614}
615
616
617double SCH_TEXT::Similarity( const SCH_ITEM& aOther ) const
618{
619 if( m_Uuid == aOther.m_Uuid )
620 return 1.0;
621
622 if( Type() != aOther.Type() )
623 return 0.0;
624
625 const SCH_TEXT* other = static_cast<const SCH_TEXT*>( &aOther );
626
627 double retval = SimilarityBase( aOther );
628
629 if( GetLayer() != other->GetLayer() )
630 retval *= 0.9;
631
632 if( GetExcludedFromSim() != other->GetExcludedFromSim() )
633 retval *= 0.9;
634
635 retval *= EDA_TEXT::Similarity( *other );
636
637 return retval;
638}
639
640
641int SCH_TEXT::compare( const SCH_ITEM& aOther, int aCompareFlags ) const
642{
643 wxASSERT( aOther.Type() == SCH_TEXT_T );
644
645 int retv = SCH_ITEM::compare( aOther, aCompareFlags );
646
647 if( retv )
648 return retv;
649
650 const SCH_TEXT& tmp = static_cast<const SCH_TEXT&>( aOther );
651
652 int result = GetText().CmpNoCase( tmp.GetText() );
653
654 if( result != 0 )
655 return result;
656
657 if( GetTextPos().x != tmp.GetTextPos().x )
658 return GetTextPos().x - tmp.GetTextPos().x;
659
660 if( GetTextPos().y != tmp.GetTextPos().y )
661 return GetTextPos().y - tmp.GetTextPos().y;
662
663 if( GetTextWidth() != tmp.GetTextWidth() )
664 return GetTextWidth() - tmp.GetTextWidth();
665
666 if( GetTextHeight() != tmp.GetTextHeight() )
667 return GetTextHeight() - tmp.GetTextHeight();
668
669 return 0;
670}
671
672
673#if defined(DEBUG)
674
675void SCH_TEXT::Show( int nestLevel, std::ostream& os ) const
676{
677 // XML output:
678 wxString s = GetClass();
679
680 NestedSpace( nestLevel, os ) << '<' << s.Lower().mb_str()
681 << " layer=\"" << m_layer << '"'
682 << '>'
683 << TO_UTF8( GetText() )
684 << "</" << s.Lower().mb_str() << ">\n";
685}
686
687#endif
688
689
690static struct SCH_TEXT_DESC
691{
693 {
700
701 propMgr.Mask( TYPE_HASH( SCH_TEXT ), TYPE_HASH( EDA_TEXT ), _HKI( "Mirrored" ) );
702 propMgr.Mask( TYPE_HASH( SCH_TEXT ), TYPE_HASH( EDA_TEXT ), _HKI( "Width" ) );
703 propMgr.Mask( TYPE_HASH( SCH_TEXT ), TYPE_HASH( EDA_TEXT ), _HKI( "Height" ) );
704 propMgr.Mask( TYPE_HASH( SCH_TEXT ), TYPE_HASH( EDA_TEXT ), _HKI( "Thickness" ) );
705
706 propMgr.AddProperty( new PROPERTY<SCH_TEXT, int>( _HKI( "Text Size" ),
708 _HKI( "Text Properties" ) );
709
710 // Orientation is exposed differently in schematic; mask the base for now
711 propMgr.Mask( TYPE_HASH( SCH_TEXT ), TYPE_HASH( EDA_TEXT ), _HKI( "Orientation" ) );
712 }
int color
constexpr EDA_IU_SCALE schIUScale
Definition base_units.h:114
BITMAPS
A list of all bitmap identifiers.
BOX2< VECTOR2I > BOX2I
Definition box2.h:922
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
Definition box2.h:990
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
Definition box2.h:558
constexpr const Vec GetEnd() const
Definition box2.h:212
constexpr void SetOrigin(const Vec &pos)
Definition box2.h:237
constexpr BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
Definition box2.h:146
constexpr size_type GetWidth() const
Definition box2.h:214
constexpr Vec Centre() const
Definition box2.h:97
constexpr size_type GetHeight() const
Definition box2.h:215
constexpr bool Contains(const Vec &aPoint) const
Definition box2.h:168
constexpr const Vec & GetOrigin() const
Definition box2.h:210
constexpr void SetEnd(coord_type x, coord_type y)
Definition box2.h:297
constexpr bool Intersects(const BOX2< Vec > &aRect) const
Definition box2.h:311
static const COLOR4D WHITE
Definition color4d.h:401
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Definition color4d.h:398
The base class for create windows for drawing purpose.
const KIID m_Uuid
Definition eda_item.h:516
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:110
EDA_ITEM_FLAGS m_flags
Definition eda_item.h:527
EDA_ITEM * m_parent
Owner.
Definition eda_item.h:528
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
Definition eda_text.h:79
int GetTextHeight() const
Definition eda_text.h:266
const VECTOR2I & GetTextPos() const
Definition eda_text.h:272
COLOR4D GetTextColor() const
Definition eda_text.h:269
bool IsItalic() const
Definition eda_text.h:168
const EDA_ANGLE & GetTextAngle() const
Definition eda_text.h:146
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition eda_text.h:97
virtual bool IsVisible() const
Definition eda_text.h:186
void SetTextPos(const VECTOR2I &aPoint)
Definition eda_text.cpp:579
void SetTextX(int aX)
Definition eda_text.cpp:585
KIFONT::FONT * GetFont() const
Definition eda_text.h:246
void SetTextY(int aY)
Definition eda_text.cpp:591
virtual EDA_ANGLE GetDrawRotation() const
Definition eda_text.h:376
wxString m_hyperlink
A hyperlink URL.
Definition eda_text.h:450
int GetTextWidth() const
Definition eda_text.h:263
BOX2I GetTextBox(const RENDER_SETTINGS *aSettings, int aLine=-1) const
Useful in multiline texts to calculate the full text or a line area (for zones filling,...
Definition eda_text.cpp:744
virtual bool HasHyperlink() const
Definition eda_text.h:399
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
Definition eda_text.cpp:418
wxString GetHyperlink() const
Definition eda_text.h:400
GR_TEXT_H_ALIGN_T GetHorizJustify() const
Definition eda_text.h:199
bool HasTextVars() const
Indicates the ShownText has text var references which need to be processed.
Definition eda_text.h:116
EDA_TEXT(const EDA_IU_SCALE &aIuScale, const wxString &aText=wxEmptyString)
Definition eda_text.cpp:96
double Similarity(const EDA_TEXT &aOther) const
wxString EvaluateText(const wxString &aText) const
Definition eda_text.cpp:642
void FlipHJustify()
Definition eda_text.h:207
const TEXT_ATTRIBUTES & GetAttributes() const
Definition eda_text.h:230
int GetEffectiveTextPenWidth(int aDefaultPenWidth=0) const
The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultPenWidth.
Definition eda_text.cpp:466
void SwapAttributes(EDA_TEXT &aTradingPartner)
Swap the text attributes of the two involved instances.
Definition eda_text.cpp:453
void GetLinePositions(const RENDER_SETTINGS *aSettings, std::vector< VECTOR2I > &aPositions, int aLineCount) const
Populate aPositions with the position of each line of a multiline text, according to the vertical jus...
Definition eda_text.cpp:912
bool IsBold() const
Definition eda_text.h:183
GR_TEXT_V_ALIGN_T GetVertJustify() const
Definition eda_text.h:202
virtual wxString GetShownText(bool aAllowExtraText, int aDepth=0) const
Return the string actually shown after processing of the base text.
Definition eda_text.h:108
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
Definition eda_text.cpp:300
void SwapText(EDA_TEXT &aTradingPartner)
Definition eda_text.cpp:446
bool operator==(const EDA_TEXT &aRhs) const
Definition eda_text.h:395
void SetMultilineAllowed(bool aAllow)
Definition eda_text.cpp:402
VECTOR2I GetTextSize() const
Definition eda_text.h:260
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
Definition eda_text.cpp:410
FONT is an abstract base class for both outline and stroke fonts.
Definition font.h:131
static FONT * GetFont(const wxString &aFontName=wxEmptyString, bool aBold=false, bool aItalic=false, const std::vector< wxString > *aEmbeddedFiles=nullptr, bool aForDrawingSheet=false)
Definition font.cpp:147
virtual bool IsOutline() const
Definition font.h:139
A color representation with 4 components: red, green, blue, alpha.
Definition color4d.h:104
Container for all the knowledge about how graphical objects are drawn on any output surface/device.
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
Base plotter engine class.
Definition plotter.h:121
RENDER_SETTINGS * RenderSettings()
Definition plotter.h:152
virtual void HyperlinkBox(const BOX2I &aBox, const wxString &aDestinationURL)
Create a clickable hyperlink with a rectangular click area.
Definition plotter.h:461
bool GetColorMode() const
Definition plotter.h:149
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.
virtual void PlotText(const VECTOR2I &aPos, const COLOR4D &aColor, const wxString &aText, const TEXT_ATTRIBUTES &aAttributes, KIFONT::FONT *aFont=nullptr, const KIFONT::METRICS &aFontMetrics=KIFONT::METRICS::Default(), void *aData=nullptr)
Definition plotter.cpp:695
Provide class metadata.Helper macro to map type hashes to names.
void InheritsAfter(TYPE_ID aDerived, TYPE_ID aBase)
Declare an inheritance relationship between types.
void Mask(TYPE_ID aDerived, TYPE_ID aBase, const wxString &aName)
Sets a base class property as masked in a derived class.
static PROPERTY_MANAGER & Instance()
PROPERTY_BASE & AddProperty(PROPERTY_BASE *aProperty, const wxString &aGroup=wxEmptyString)
Register a property.
void AddTypeCast(TYPE_CAST_BASE *aCast)
Register a type converter.
Holds all the data relating to one schematic.
Definition schematic.h:88
SCHEMATIC_SETTINGS & Settings() const
SCH_SHEET_PATH & CurrentSheet() const
Definition schematic.h:171
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
bool IsBus() const
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition sch_item.h:167
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
Definition sch_item.cpp:637
SCH_RENDER_SETTINGS * getRenderSettings(PLOTTER *aPlotter) const
Definition sch_item.h:688
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
Definition sch_item.cpp:217
friend class LIB_SYMBOL
Definition sch_item.h:759
bool IsPrivate() const
Definition sch_item.h:250
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
Definition sch_item.h:309
virtual int compare(const SCH_ITEM &aOther, int aCompareFlags=0) const
Provide the draw object specific comparison called by the == and < operators.
Definition sch_item.cpp:541
const wxString & GetDefaultFont(const RENDER_SETTINGS *aSettings) const
Definition sch_item.cpp:580
SCH_ITEM(EDA_ITEM *aParent, KICAD_T aType, int aUnit=0, int aBodyStyle=0)
Definition sch_item.cpp:51
SCH_CONNECTION * Connection(const SCH_SHEET_PATH *aSheet=nullptr) const
Retrieve the connection associated with this object in the given sheet.
Definition sch_item.cpp:323
const KIFONT::METRICS & GetFontMetrics() const
Definition sch_item.cpp:593
SCH_LAYER_ID m_layer
Definition sch_item.h:739
double SimilarityBase(const SCH_ITEM &aItem) const
Calculate the boilerplate similarity for all LIB_ITEMs without preventing the use above of a pure vir...
Definition sch_item.h:346
Handle actions specific to the schematic editor.
void HypertextCommand(const wxString &aHref)
VECTOR2I TransformCoordinate(const VECTOR2I &aPoint) const
const KIGFX::COLOR4D & GetBackgroundColor() const override
Return current background color settings.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
Definition sch_sheet.h:47
bool ResolveTextVar(const SCH_SHEET_PATH *aPath, wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the sheet.
Schematic symbol object.
Definition sch_symbol.h:75
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
Definition sch_text.cpp:375
void DoHypertextAction(EDA_DRAW_FRAME *aFrame) const override
Definition sch_text.cpp:365
int compare(const SCH_ITEM &aOther, int aCompareFlags=0) const override
Provide the draw object specific comparison called by the == and < operators.
Definition sch_text.cpp:641
bool IsHypertext() const override
Allow items to support hypertext actions when hovered/clicked.
Definition sch_text.h:80
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
Definition sch_text.cpp:382
int GetSchTextSize() const
Definition sch_text.h:77
void swapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
Definition sch_text.cpp:232
KIFONT::FONT * GetDrawFont(const RENDER_SETTINGS *aSettings) const override
Definition sch_text.cpp:285
bool m_excludedFromSim
Definition sch_text.h:189
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
Definition sch_text.cpp:159
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
Definition sch_text.cpp:198
void CalcEdit(const VECTOR2I &aPosition) override
Calculate the attributes of an item at aPosition when it is being edited.
Definition sch_text.cpp:428
wxString GetClass() const override
Return the class name.
Definition sch_text.h:52
void NormalizeJustification(bool inverse)
Definition sch_text.cpp:80
bool operator<(const SCH_ITEM &aItem) const override
Definition sch_text.cpp:241
VECTOR2I GetPosition() const override
Definition sch_text.h:141
virtual void Rotate90(bool aClockwise)
Definition sch_text.cpp:210
std::vector< int > ViewGetLayers() const override
Return the layers the item is drawn on (which may be more than its "home" layer)
Definition sch_text.cpp:434
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
Definition sch_text.cpp:120
double Similarity(const SCH_ITEM &aItem) const override
Return a measure of how likely the other object is to represent the same object.
Definition sch_text.cpp:617
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
Definition sch_text.cpp:296
int GetPenWidth() const override
Definition sch_text.cpp:279
void SetSchTextSize(int aSize)
Definition sch_text.h:78
virtual wxString GetShownText(const SCH_SHEET_PATH *aPath, bool aAllowExtraText, int aDepth=0) const
Definition sch_text.cpp:317
void Plot(PLOTTER *aPlotter, bool aBackground, const SCH_PLOT_OPTS &aPlotOpts, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aDimmed) override
Plot the item to aPlotter.
Definition sch_text.cpp:443
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
Definition sch_text.cpp:388
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
Definition sch_text.cpp:551
void BeginEdit(const VECTOR2I &aStartPoint) override
Begin drawing a symbol library draw item at aPosition.
Definition sch_text.cpp:422
virtual VECTOR2I GetSchematicTextOffset(const RENDER_SETTINGS *aSettings) const
This offset depends on the orientation, the type of text, and the area required to draw the associate...
Definition sch_text.cpp:73
bool GetExcludedFromSim() const override
Definition sch_text.h:88
virtual void MirrorSpinStyle(bool aLeftRight)
Definition sch_text.cpp:222
bool operator==(const SCH_ITEM &aItem) const override
Definition sch_text.cpp:600
int GetTextOffset(const RENDER_SETTINGS *aSettings=nullptr) const
Definition sch_text.cpp:264
SCH_TEXT(const VECTOR2I &aPos={ 0, 0 }, const wxString &aText=wxEmptyString, SCH_LAYER_ID aLayer=LAYER_NOTES, KICAD_T aType=SCH_TEXT_T)
Definition sch_text.cpp:51
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
GR_TEXT_H_ALIGN_T m_Halign
GR_TEXT_V_ALIGN_T m_Valign
TOOL_MANAGER * GetToolManager() const
Return the MVC controller.
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
wxString ExpandTextVars(const wxString &aSource, const PROJECT *aProject, int aFlags)
Definition common.cpp:59
#define DEFAULT_TEXT_OFFSET_RATIO
Ratio of the font height to space around global labels.
#define _(s)
static constexpr EDA_ANGLE ANGLE_90
Definition eda_angle.h:413
static constexpr EDA_ANGLE ANGLE_VERTICAL
Definition eda_angle.h:408
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
Definition eda_angle.h:407
static constexpr EDA_ANGLE ANGLE_270
Definition eda_angle.h:416
#define STRUCT_DELETED
flag indication structures to be erased
#define SKIP_STRUCT
flag indicating that the structure should be ignored
a few functions useful in geometry calculations.
SCH_LAYER_ID
Eeschema drawing layers.
Definition layer_ids.h:448
@ LAYER_DEVICE
Definition layer_ids.h:465
@ LAYER_HIDDEN
Definition layer_ids.h:491
@ LAYER_PRIVATE_NOTES
Definition layer_ids.h:467
@ LAYER_BUS
Definition layer_ids.h:452
@ LAYER_SELECTION_SHADOWS
Definition layer_ids.h:493
constexpr T MIRRORVAL(T aPoint, T aMirrorRef)
Returns the mirror of aPoint relative to the aMirrorRef.
Definition mirror.h:36
Message panel definition file.
bool BoxHitTest(const VECTOR2I &aHitPoint, const BOX2I &aHittee, int aAccuracy)
Perform a point-to-box hit test.
KICOMMON_API wxString EllipsizeMenuText(const wxString &aString)
Ellipsize text (at the end) to be no more than 36 characters.
KICOMMON_API wxString EllipsizeStatusText(wxWindow *aWindow, const wxString &aString)
Ellipsize text (at the end) to be no more than 1/3 of the window width.
#define _HKI(x)
Definition page_info.cpp:44
see class PGM_BASE
#define TYPE_HASH(x)
Definition property.h:73
@ PT_SIZE
Size expressed in distance units (mm/inch)
Definition property.h:62
#define REGISTER_TYPE(x)
static struct SCH_TEXT_DESC _SCH_TEXT_DESC
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.
#define TO_UTF8(wxstring)
Convert a wxString to a UTF8 encoded C string for all wxWidgets build modes.
VECTOR2I end
wxString result
Test unit parsing edge cases and error handling.
int delta
@ GR_TEXT_H_ALIGN_CENTER
@ GR_TEXT_H_ALIGN_RIGHT
@ GR_TEXT_H_ALIGN_LEFT
@ GR_TEXT_H_ALIGN_INDETERMINATE
@ GR_TEXT_V_ALIGN_BOTTOM
@ GR_TEXT_V_ALIGN_INDETERMINATE
@ GR_TEXT_V_ALIGN_CENTER
@ GR_TEXT_V_ALIGN_TOP
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
Calculate the new point of coord coord pX, pY, for a rotation center 0, 0.
Definition trigo.cpp:229
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition typeinfo.h:78
@ SCH_TEXT_T
Definition typeinfo.h:153
#define INDETERMINATE_STATE
Used for holding indeterminate values, such as with multiple selections holding different values or c...
Definition ui_common.h:46
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:695