39#include <unordered_set> 
   74    if( aSel.GetSize() == 1 )
 
   88    return aSel.GetSize() == 1 && aSel.Front()->Type() == 
SCH_SYMBOL_T;
 
   94    if( aSel.GetSize() == 1 )
 
  108    if( aSel.GetSize() == 1 )
 
  122    if( aSel.GetSize() == 1 )
 
  126        if( 
pin && 
pin->GetLibPin() )
 
  127            return !
pin->GetLibPin()->GetAlternates().empty();
 
  145    return aSel.GetSize() > 1 && aSel.OnlyContains( { 
SCH_SYMBOL_T } );
 
  151    return aSel.GetSize() >= 1 && aSel.OnlyContains( { 
SCH_PIN_T } );
 
  163    for( 
int i = 0; aAllowedActions[i]; ++i )
 
  165        if( aEvent->
IsAction( aAllowedActions[i] ) )
 
 
  174#define HITTEST_THRESHOLD_PIXELS 5 
  261    if( symbolEditorFrame )
 
  276    auto expandableSelection =
 
  284    auto schEditSheetPageNumberCondition =
 
  294    auto schEditCondition =
 
  300    auto belowRootSheetCondition =
 
  324    auto groupEnterCondition =
 
  327    auto inGroupCondition =
 
  333    auto multipleUnitsSelection = []( 
const SELECTION& aSel )
 
  342                   m_frame->eeconfig()->m_Input.allow_unconstrained_pin_swaps;
 
  346    auto& menu = 
m_menu->GetMenu();
 
  361    menu.AddSeparator( 100 );
 
  365    menu.AddSeparator( 100 );
 
  372    menu.AddSeparator( 200 );
 
  390    menu.AddSeparator( 400 );
 
  394    menu.AddSeparator( 1000 );
 
 
  430        if( symbolEditFrame )
 
 
  457    auto pinOrientation =
 
  467                    return pin->GetOrientation();
 
  472                    return dummy.GetOrientation();
 
  496        bool selCancelled = 
false;
 
  497        bool displayWireCursor = 
false;
 
  498        bool displayBusCursor = 
false;
 
  499        bool displayLineCursor = 
false;
 
  500        KIID rolloverItem = lastRolloverItem;
 
  504                           evt->Modifier( 
MD_ALT ) );
 
  510            if( !
m_frame->ToolStackIsEmpty() )
 
  544                schframe->ClearFocus();
 
  551            size_t preFilterCount = collector.
GetCount();
 
  553            narrowSelection( collector, evt->Position(), 
false, 
false, &rejected );
 
  560                bool allCellsFromSameTable = 
true;
 
  572                        allCellsFromSameTable = 
false;
 
  593                        VECTOR2D bottomRight( std::max( start.
x, 
end.x ), std::max( start.
y, 
end.y ) );
 
  616                else if( collector[0]->IsHypertext() )
 
  618                    collector[ 0 ]->DoHypertextAction( 
m_frame );
 
  621                else if( collector[0]->IsBrightened() )
 
  628                        schframe->SelectNetNavigatorItem( &itemData );
 
  635                if( collector.
GetCount() == 0 && preFilterCount > 0 )
 
  638                        frame->HighlightSelectionFilter( rejected );
 
  654                SelectPoint( evt->Position(), { SCH_LOCATE_ANY_T }, 
nullptr, &selCancelled );
 
  663                        .Contains( evt->Position() ) )
 
  667                if( 
CollectHits( collector, evt->Position(), { SCH_LOCATE_ANY_T } ) )
 
  671                    SelectPoint( evt->Position(), { SCH_LOCATE_ANY_T }, 
nullptr, &selCancelled );
 
  679        else if( evt->IsDblClick( 
BUT_LEFT ) )
 
  685                schframe->ClearFocus();
 
  723                schframe->ClearFocus();
 
  732            else if( 
CollectHits( collector, evt->DragOrigin(), { SCH_TABLECELL_T } )
 
  733                     && ( collector[0]->GetParent()->GetParentGroup() == 
nullptr 
  734                          || collector[0]->GetParent()->GetParentGroup() == 
m_enteredGroup ) )
 
  797        else if( evt->IsMouseDown( 
BUT_AUX1 ) )
 
  801        else if( evt->IsMouseDown( 
BUT_AUX2 ) )
 
  817                const int          delta = evt->Parameter<
int>();
 
  860                wxString alt = *evt->Parameter<wxString*>();
 
  884                        newItems.push_back( nc );
 
  887                    if( !commit.
Empty() )
 
  889                        commit.
Push( wxS( 
"No Connect Pins" ) );
 
  908                        switch( pinOrientation( item ) )
 
  929                        newItems.push_back( wire );
 
  932                    if( !commit.
Empty() )
 
  950                            commit.
Push( wxS( 
"Wire Pins" ) );
 
  970                            labelText = 
pin->GetShownName();
 
  972                            if( labelText.IsEmpty() )
 
  974                                labelText.Printf( 
"%s_%s",
 
  975                                                  pin->GetParentSymbol()->GetRef( &sheetPath ),
 
  981                            labelText = sheetPin->
GetShownText( &sheetPath, 
false );
 
  988                        switch( *evt->GetCommandId() )
 
  991                            label = 
new SCH_LABEL( item->GetPosition(), labelText );
 
 1003                        switch( pinOrientation( item ) )
 
 1024                            pinType = 
pin->GetType();
 
 1060                        newItems.push_back( label );
 
 1063                    if( !commit.
Empty() )
 
 1065                        commit.
Push( wxS( 
"Label Pins" ) );
 
 1077                wxString* net = 
new wxString( *evt->Parameter<wxString*>() );
 
 1081        else if( evt->IsCancelInteractive() )
 
 1091                schframe->ClearFocus();
 
 1097            else if( evt->FirstResponder() == 
this && evt->GetCommandId() == (
int) WXK_ESCAPE )
 
 1107                    if( 
editor && 
m_frame->eeconfig()->m_Input.esc_clears_net_highlight )
 
 1108                        editor->ClearHighlight( *evt );
 
 1115                schframe->ClearFocus();
 
 1117        else if( evt->IsMotion() && !
m_isSymbolEditor && evt->FirstResponder() == 
this )
 
 1136                            displayBusCursor = 
true;
 
 1138                            displayWireCursor = 
true;
 
 1140                            displayLineCursor = 
true;
 
 1142                    else if( collector[0]->IsHypertext() && !collector[0]->IsSelected() )
 
 1144                        rolloverItem = collector[0]->m_Uuid;
 
 1151            evt->SetPassEvent();
 
 1154        if( lastRolloverItem != 
niluuid && lastRolloverItem != rolloverItem )
 
 1165                    m_frame->GetCanvas()->GetView()->Update( item );
 
 1180                    m_frame->GetCanvas()->GetView()->Update( item );
 
 1184        lastRolloverItem = rolloverItem;
 
 1186        if( 
m_frame->ToolStackIsEmpty() )
 
 1188            if( displayWireCursor )
 
 1192            else if( displayBusCursor )
 
 1196            else if( displayLineCursor )
 
 1200            else if( rolloverItem != 
niluuid )
 
 1206                        && evt->HasPosition()
 
 
 1231                 wxT( 
"EnterGroup called when selection is not a single group" ) );
 
 
 1285    if( 
m_frame->eeconfig()->m_Drawing.auto_start_wires
 
 1318            if( possibleConnection.
IsBus() )
 
 1326            if( !
pin || !
pin->IsPointClickableAnchor( pos ) )
 
 1329            if( !
pin->IsVisible()
 
 1330                && !( 
m_frame->eeconfig()->m_Appearance.show_hidden_pins
 
 1331                      || 
m_frame->GetRenderSettings()->m_ShowHiddenPins ) )
 
 1337        newEvt->SetMousePosition( pos );
 
 1338        newEvt->SetHasPosition( 
true );
 
 1339        newEvt->SetForceImmediate( 
true );
 
 
 1352    wxMouseState keyboardState = wxGetMouseState();
 
 1355                       keyboardState.AltDown() );
 
 
 1370        wxMouseState keyboardState = wxGetMouseState();
 
 1373                           keyboardState.AltDown() );
 
 
 1394                                      const std::vector<KICAD_T>& aScanTypes )
 
 1397    int gridThreshold = 
KiROUND( 
getView()->GetGAL()->GetGridSize().EuclideanNorm() / 2.0 );
 
 1398    aCollector.
m_Threshold = std::max( pixelThreshold, gridThreshold );
 
 1418            int originalCount = aCollector.
GetCount();
 
 1420            for( 
int ii = 0; ii < originalCount; ++ii )
 
 1422                if( aCollector[ii]->Type() == 
SCH_PIN_T )
 
 1426                    if( !aCollector.
HasItem( 
pin->GetParentSymbol() ) )
 
 1427                        aCollector.
Append( 
pin->GetParentSymbol() );
 
 
 1438                                          bool aCheckLocked, 
bool aSelectedOnly,
 
 1443    for( 
int i = collector.
GetCount() - 1; i >= 0; --i )
 
 1445        if( symbolEditorFrame )
 
 1452                if( !
static_cast<SCH_FIELD*
>( item )->IsVisible()
 
 1461                if( !
static_cast<SCH_PIN*
>( item )->IsVisible()
 
 1476        if( aCheckLocked && collector[i]->IsLocked() )
 
 1490        if( aSelectedOnly && !collector[i]->IsSelected() )
 
 
 1506                                      EDA_ITEM** aItem, 
bool* aSelectionCancelledFlag, 
bool aAdd,
 
 1507                                      bool aSubtract, 
bool aExclusiveOr )
 
 1525            if( aSelectionCancelledFlag )
 
 1526                *aSelectionCancelledFlag = 
true;
 
 1532    if( !aAdd && !aSubtract && !aExclusiveOr )
 
 1540        bool foundEnteredGroup = 
false;
 
 1545                foundEnteredGroup = 
true;
 
 1550        if( !foundEnteredGroup )
 
 1557    bool anySubtracted = 
false;
 
 1561        for( 
int i = 0; i < aCollector.
GetCount(); ++i )
 
 1564            bool           isLine = aCollector[i]->Type() == 
SCH_LINE_T;
 
 1580                || ( aExclusiveOr && aCollector[i]->IsSelected()
 
 1581                     && ( !isLine || ( isLine && aCollector[i]->HasFlag( flags ) ) ) ) )
 
 1583                aCollector[i]->ClearFlags( flags );
 
 1593                    anySubtracted = 
true;
 
 1598                aCollector[i]->SetFlags( flags );
 
 1605    if( addedCount == 1 )
 
 1609        if( aItem && aCollector.
GetCount() == 1 )
 
 1610            *aItem = aCollector[0];
 
 1614    else if( addedCount > 1 )
 
 1619    else if( anySubtracted )
 
 1625    m_frame->GetCanvas()->ForceRefresh();
 
 
 1631                                      const std::vector<KICAD_T>& aScanTypes,
 
 1632                                      EDA_ITEM** aItem, 
bool* aSelectionCancelledFlag,
 
 1633                                      bool aCheckLocked, 
bool aAdd, 
bool aSubtract,
 
 1638    if( !
CollectHits( collector, aWhere, aScanTypes ) )
 
 1641    size_t preFilterCount = collector.
GetCount();
 
 1643    rejected.
SetAll( 
false );
 
 1644    narrowSelection( collector, aWhere, aCheckLocked, aSubtract, &rejected );
 
 1646    if( collector.
GetCount() == 0 && preFilterCount > 0 )
 
 1649            frame->HighlightSelectionFilter( rejected );
 
 1654    return selectPoint( collector, aWhere, aItem, aSelectionCancelledFlag, aAdd, aSubtract,
 
 
 1665    std::vector<EDA_ITEM*> sheetPins;
 
 1671    view->
Query( selectionBox,
 
 1679                collection.
Append( item );
 
 1693                sheetPins.emplace_back( 
pin );
 
 1714    m_frame->GetCanvas()->ForceRefresh();
 
 
 1724    std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> selectedItems;
 
 1730    view->
Query( selectionBox, selectedItems );         
 
 1757    m_frame->GetCanvas()->ForceRefresh();
 
 
 1765    std::set<EDA_ITEM*> exactHits;
 
 1767    for( 
int i = collector.
GetCount() - 1; i >= 0; --i )
 
 1780            if( item->
HitTest( aPos, pixelThreshold ) )
 
 1781                exactHits.insert( item );
 
 1790            if( 
m_frame->GetRenderSettings()->m_ShowPinsElectricalType )
 
 1793            if( item->
HitTest( aPos, 0 ) )
 
 1794                exactHits.insert( item );
 
 1800    if( exactHits.size() > 0 && exactHits.size() < (
unsigned) collector.
GetCount() )
 
 1802        for( 
int i = collector.
GetCount() - 1; i >= 0; --i )
 
 1806            if( !exactHits.contains( item ) )
 
 1812    SEG       poss( aPos, aPos );
 
 1814    int       closestDist = INT_MAX / 4;
 
 1818        BOX2I bbox = item->GetBoundingBox();
 
 1819        int   dist = INT_MAX / 4;
 
 1824        bool dominating = 
false;
 
 1826        if( exactHits.contains( item ) )
 
 1864                text->GetEffectiveTextShape( 
false )->Collide( poss, INT_MAX / 4, &dist );
 
 1870                shapes->Collide( poss, INT_MAX / 4, &dist );
 
 1884                    rect.
Collide( poss, closestDist, &dist );
 
 1902            if( dist == closestDist )
 
 1904                if( item->GetParent() == closest )
 
 1907            else if( dist < closestDist )
 
 1923        for( 
int i = collector.
GetCount() - 1; i >= 0; --i )
 
 1927            if( item == closest )
 
 1930            if( !item->
HitTest( tightBox, 
true ) )
 
 
 1938                                                     bool aPromoteCellSelections,
 
 1939                                                     bool aPromoteGroups )
 
 1941    bool anyUnselected = 
false;
 
 1942    bool anySelected = 
false;
 
 1955        bool isMoving = 
false;
 
 1957        for( 
int i = (
int) 
m_selection.GetSize() - 1; i >= 0; --i )
 
 1960            isMoving |= 
static_cast<SCH_ITEM*
>( item )->IsMoving();
 
 1962            if( !item->
IsType( aScanTypes ) )
 
 1965                anyUnselected = 
true;
 
 1973    if( aPromoteGroups )
 
 1975        for( 
int i = (
int) 
m_selection.GetSize() - 1; i >= 0; --i )
 
 1979            std::set<EDA_ITEM*> selectedChildren;
 
 1985                            if( aChild->
IsType( aScanTypes ) )
 
 1986                            selectedChildren.insert( aChild );
 
 1990                anyUnselected = 
true;
 
 1993            for( 
EDA_ITEM* child : selectedChildren )
 
 1995                if( !child->IsSelected() )
 
 2007    if( aPromoteCellSelections )
 
 2009        std::set<EDA_ITEM*> parents;
 
 2011        for( 
int i = (
int) 
m_selection.GetSize() - 1; i >= 0; --i )
 
 2019                anyUnselected = 
true;
 
 2025            if( !parent->IsSelected() )
 
 
 2048    std::set<EDA_ITEM*> rejected;
 
 2053            rejected.insert( item );
 
 2057        aCollector.
Remove( item );
 
 
 2070        if( schItem->IsLocked() && !
m_filter.lockedItems )
 
 2075    switch( aItem->
Type() )
 
 2093                aRejected->
pins = 
true;
 
 2103                aRejected->
wires = 
true;
 
 2111        switch( 
static_cast<SCH_LINE*
>( aItem )->GetLayer() )
 
 2118                    aRejected->
wires = 
true;
 
 2154                aRejected->
text = 
true;
 
 2166                aRejected->
labels = 
true;
 
 2176                aRejected->
images = 
true;
 
 
 2256    bool cancelled = 
false;     
 
 2272            isGreedy = !isGreedy;
 
 2277        if( evt->IsCancelInteractive() || evt->IsActivate() )
 
 2290            area.
SetEnd( evt->Position() );
 
 2307            evt->SetPassEvent( 
false );
 
 
 2329    bool cancelled = 
false;
 
 2345        bool   isClockwise = shapeArea > 0 ? true : 
false;
 
 2347        if( 
getView()->IsMirroredX() && shapeArea != 0 )
 
 2348            isClockwise = !isClockwise;
 
 2361        if( evt->IsCancelInteractive() || evt->IsActivate() )
 
 2370            points.
Append( evt->Position() );
 
 2372        else if(   evt->IsDblClick( 
BUT_LEFT )
 
 2411        area.
SetMode( selectionMode );
 
 
 2438    std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> candidates;
 
 2440    view->
Query( selectionRect, candidates );
 
 2442    std::set<SCH_ITEM*> uniqueCandidates;
 
 2444    for( 
const auto& [viewItem, layer] : candidates )
 
 2446        if( viewItem->IsSCH_ITEM() )
 
 2447            uniqueCandidates.insert( 
static_cast<SCH_ITEM*
>( viewItem ) );
 
 2456                if( boxMode ? selectionRect.
Intersects( 
pin->GetBoundingBox() )
 
 2458                    uniqueCandidates.insert( 
pin );
 
 2465                if( boxMode ? selectionRect.
Intersects( 
pin->GetBoundingBox() )
 
 2467                    uniqueCandidates.insert( 
pin );
 
 2472                if( field.IsVisible()
 
 2473                        && ( boxMode ? selectionRect.
Intersects( field.GetBoundingBox() )
 
 2476                    uniqueCandidates.insert( &field );
 
 2484    std::set<EDA_ITEM*> group_items;
 
 2493        std::unordered_set<EDA_ITEM*>& newset = 
group->GetItems();
 
 2496                [&]( 
const BOX2I& aBox )
 
 2498                    return boxMode ? selectionRect.
Contains( aBox )
 
 2502        if( containedMode && boxContained( 
group->GetBoundingBox() ) && newset.size() )
 
 2504            for( 
EDA_ITEM* group_item : newset )
 
 2506                if( !group_item->IsSCH_ITEM() )
 
 2510                    collector.
Append( *newset.begin() );
 
 2514        for( 
EDA_ITEM* group_item : newset )
 
 2515            group_items.emplace( group_item );
 
 2521                return boxMode ? aItem->HitTest( selectionRect, containedMode )
 
 2522                               : aItem->HitTest( aArea.
GetPoly(), containedMode );
 
 2525    for( 
SCH_ITEM* item : uniqueCandidates )
 
 2528            && ( !containedMode || !group_items.count( item ) ) )
 
 2531                pinsCollector.
Append( item );
 
 2533                collector.
Append( item );
 
 2542        collector = pinsCollector;
 
 2547    std::sort( collector.
begin(), collector.
end(),
 
 2550                   VECTOR2I aPos = a->GetPosition();
 
 2551                   VECTOR2I bPos = b->GetPosition();
 
 2553                   if( aPos.y == bPos.y )
 
 2554                       return aPos.x < bPos.x;
 
 2556                   return aPos.y < bPos.y;
 
 2559    bool anyAdded = 
false;
 
 2560    bool anySubtracted = 
false;
 
 2565                if( aSubtractive || ( aExclusiveOr && aItem->
IsSelected() ) )
 
 2575                        anySubtracted = 
true;
 
 2578                    if( flags && !anySubtracted )
 
 2589    std::vector<EDA_ITEM*> flaggedItems;
 
 2591    auto shapeContains =
 
 2594                return boxMode ? selectionRect.
Contains( aPoint )
 
 2603        flaggedItems.push_back( item );
 
 2605        if( 
m_frame->GetRenderSettings()->m_ShowPinsElectricalType )
 
 2614                hits = line->
HitTest( selectionRect, 
false );
 
 2618            if( ( !containedMode && hits )
 
 2623            else if( containedMode )
 
 2633                selectItem( item, flags );
 
 2636            selectItem( item, flags );
 
 2641    for( 
EDA_ITEM* item : pinsCollector )
 
 2643        if( 
m_frame->GetRenderSettings()->m_ShowPinsElectricalType )
 
 2649            selectItem( item, 0 );
 
 2655    for( 
EDA_ITEM* item : flaggedItems )
 
 2662    else if( anySubtracted )
 
 
 2668                                                      bool aMultiselect )
 const 
 2670    std::unordered_set<EDA_ITEM*> toAdd;
 
 2674    for( 
int j = 0; j < aCollector.
GetCount(); j++ )
 
 2676        if( aCollector[j]->GetParent() )
 
 2679        if( aCollector[j]->GetParentSymbol() )
 
 2685        for( 
int j = 0; j < aCollector.
GetCount(); j++ )
 
 2689    for( 
int j = 0; j < aCollector.
GetCount(); )
 
 2701            aCollector.
Remove( item );
 
 2709            if( top->AsEdaItem() != item )
 
 2711                toAdd.insert( top->AsEdaItem() );
 
 2714                aCollector.
Remove( item );
 
 2723            aCollector.
Remove( item );
 
 2732        if( !aCollector.
HasItem( item ) )
 
 2733            aCollector.
Append( item );
 
 
 2751        if( cell->IsSelected() )
 
 
 2763    auto wasSelected = []( 
EDA_ITEM* aItem )
 
 2770        bool doSelect = 
false;
 
 2772        if( cell->HitTest( selectionRect, 
false ) )
 
 2777                doSelect = !wasSelected( cell );
 
 2781        else if( wasSelected( cell ) )
 
 2786        if( doSelect && !cell->IsSelected() )
 
 2788        else if( !doSelect && cell->IsSelected() )
 
 
 2795    bool cancelled = 
false;
 
 2802        if( evt->IsCancelInteractive() || evt->IsActivate() )
 
 2810            SelectCellsBetween( evt->DragOrigin(), evt->Position() - evt->DragOrigin(), aTable );
 
 2812        else if( evt->IsMouseUp( 
BUT_LEFT ) )
 
 2816            bool anyAdded = 
false;
 
 2817            bool anySubtracted = 
false;
 
 2824                    anySubtracted = 
true;
 
 2840                    evt->SetPassEvent();
 
 
 2864    int gridThreshold = 
KiROUND( 
getView()->GetGAL()->GetGridSize().EuclideanNorm() );
 
 2865    int thresholdMax = std::max( pixelThreshold, gridThreshold );
 
 2867    for( 
int threshold : { 0, thresholdMax/4, thresholdMax/2, thresholdMax } )
 
 2876    return collector.
GetCount() ? collector[ 0 ] : 
nullptr;
 
 
 2902    std::vector<SCH_ITEM*> startItems;
 
 2903    std::set<SCH_ITEM*>    added;
 
 2906    for( 
auto item : aItems )
 
 2908        if( !item->IsSCH_ITEM() )
 
 2919                    startItems.push_back( 
pin );
 
 2924            startItems.push_back( schItem );
 
 2928    if( startItems.empty() )
 
 2931    std::deque<SCH_ITEM*>         queue;
 
 2932    std::unordered_set<SCH_ITEM*> visited;
 
 2934    auto enqueue = [&]( 
SCH_ITEM* aItem )
 
 2939        if( visited.insert( aItem ).second )
 
 2940            queue.push_back( aItem );
 
 2946    while( !queue.empty() )
 
 2956                added.insert( symbol );
 
 2961        for( 
SCH_ITEM* neighbor : neighbors )
 
 2971                    added.insert( symbol );
 
 2976            enqueue( neighbor );
 
 2982        added.insert( item );
 
 
 2991    std::set<SCH_ITEM*> added;
 
 2993    for( 
auto item : aItems )
 
 2995        if( !item->IsSCH_ITEM() )
 
 3000        std::set<SCH_ITEM*> conns = 
m_frame->GetScreen()->MarkConnections( schItem, schItem->
IsConnectable() );
 
 3008            added.insert( connItem );
 
 
 3031        if( !selItem->IsSCH_ITEM() )
 
 3037            graphicalSelection.
Add( item );
 
 3039            graphicalSelection.
Add( item );
 
 3041            connectableSelection.
Add( item );
 
 3046    std::set<SCH_ITEM*> graphAdded;
 
 3047    std::set<SCH_ITEM*> graphicalAdded;
 
 3049    if( !connectableSelection.
Empty() )
 
 3052    if( !graphicalSelection.
Empty() )
 
 3057    if( graphAdded.empty() && !connectableSelection.
Empty() )
 
 3062            combinedSelection.
Add( selItem );
 
 3064        graphicalSelection = combinedSelection;
 
 3069    auto smartAddToSel = [&]( 
EDA_ITEM* aItem )
 
 3078    for( 
auto item : graphAdded )
 
 3079        smartAddToSel( item );
 
 3081    for( 
auto item : graphicalAdded )
 
 3082        smartAddToSel( item );
 
 3084    for( 
auto item : originalSelection )
 
 3085        smartAddToSel( item );
 
 
 3104    std::set<std::pair<SCH_TABLE*, int>> columns;
 
 3112            columns.insert( std::make_pair( 
table, cell->GetColumn() ) );
 
 3116    for( 
auto& [ 
table, col ] : columns )
 
 3118        for( 
int row = 0; row < 
table->GetRowCount(); ++row )
 
 
 3139    std::set<std::pair<SCH_TABLE*, int>> rows;
 
 3147            rows.insert( std::make_pair( 
table, cell->GetRow() ) );
 
 3151    for( 
auto& [ 
table, row ] : rows )
 
 3153        for( 
int col = 0; col < 
table->GetColCount(); ++col )
 
 
 3174    std::set<SCH_TABLE*> tables;
 
 3180            tables.insert( 
static_cast<SCH_TABLE*
>( cell->GetParent() ) );
 
 3187        if( !
table->IsSelected() )
 
 
 3230    double compRatio = bbSize.
y / currTextHeight; 
 
 3231    double compRatioBent = 1.0;
 
 3237    std::vector<std::pair<double, double>> lut{ { 1.25,  16 },
 
 3246    std::vector<std::pair<double, double>>::iterator it;
 
 3249    compRatioBent = lut.back().second;
 
 3253    if( compRatio >= lut.front().first )
 
 3255        for( it = lut.begin(); it < lut.end() - 1; ++it )
 
 3257            if( it->first <= compRatio && 
next( it )->first >= compRatio )
 
 3259                double diffx = compRatio - it->first;
 
 3260                double diffn = 
next( it )->first - it->first;
 
 3262                compRatioBent = it->second + ( 
next( it )->second - it->second ) * diffx / diffn;
 
 3269        compRatioBent = lut.front().second; 
 
 3278    screenSize.
x = std::max( 10.0, screenSize.
x );
 
 3279    screenSize.
y = std::max( 10.0, screenSize.
y );
 
 3280    double ratio = std::max( -1.0, fabs( bbSize.
y / screenSize.
y ) );
 
 3283    double kicadRatio = std::max( fabs( bbSize.
x / screenSize.
x ),
 
 3284                                  fabs( bbSize.
y / screenSize.
y ) );
 
 3289    if( bbSize.
x > screenSize.
x * ratio * compRatioBent )
 
 3293        compRatioBent = 1.0; 
 
 3294        wxLogTrace( 
"CROSS_PROBE_SCALE",
 
 3295                    "Part TOO WIDE for screen.  Using normal KiCad zoom ratio: %1.5f", ratio );
 
 3300    ratio *= compRatioBent;
 
 3302    bool alwaysZoom = 
false; 
 
 3305    if( ( ratio < 0.5 || ratio > 1.0 ) || alwaysZoom )
 
 
 3311                                        SCH_ITEM* focusItem, 
const std::vector<SCH_ITEM*>& items )
 
 3332        if( 
m_frame->GetScreen()->CheckIfOnDrawList( item )
 
 3333            || ( parent && 
m_frame->GetScreen()->CheckIfOnDrawList( parent ) ) )
 
 3343        if( 
m_frame->eeconfig()->m_CrossProbing.center_on_items )
 
 3345            if( 
m_frame->eeconfig()->m_CrossProbing.zoom_to_fit )
 
 
 3364    bool enteredGroupFound = 
false;
 
 3372            if( item.IsSelected() )
 
 3380                    enteredGroupFound = 
true;
 
 3394            if( item->IsSelected() )
 
 3400                item->RunOnChildren(
 
 3414                    enteredGroupFound = 
true;
 
 3426    if( !enteredGroupFound )
 
 
 3438                                     bool checkVisibilityOnly )
 const 
 3449    switch( aItem->
Type() )
 
 3457            if( 
pin->GetUnit() && 
pin->GetUnit() != symEditFrame->
GetUnit() )
 
 3464        if( !
pin->IsVisible() && !
m_frame->GetShowAllPins() )
 
 3475                if( 
pin->IsPointClickableAnchor( 
grid.BestSnapAnchor( *aPos, pinGrid ) ) )
 
 3486        if( !
m_frame->eeconfig()->m_Appearance.show_directive_labels )
 
 
 3591        aGroup->
Add( aItem );
 
 3601            sch_item->RunOnChildren(
 
 
 3652        sch_item->RunOnChildren(
 
 3666                        aGroup->
Remove( aChild );
 
 
 3680    const unsigned GRIP_MARGIN = 20;
 
 3686        BOX2I itemBox = item->ViewBBox();
 
 
constexpr EDA_IU_SCALE schIUScale
 
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
 
static TOOL_ACTION unselectAll
 
static TOOL_ACTION selectItem
Select an item (specified as the event parameter).
 
static TOOL_ACTION cursorLeft
 
static TOOL_ACTION zoomOutCenter
 
static TOOL_ACTION unselectItem
 
static TOOL_ACTION zoomIn
 
static TOOL_ACTION cursorLeftFast
 
static TOOL_ACTION selectSetLasso
 
static TOOL_ACTION selectSetRect
Set lasso selection mode.
 
static TOOL_ACTION groupEnter
 
static TOOL_ACTION selectColumns
 
static TOOL_ACTION cursorDown
 
static TOOL_ACTION zoomOut
 
static TOOL_ACTION cursorRightFast
 
static TOOL_ACTION zoomCenter
 
static TOOL_ACTION panDown
 
static TOOL_ACTION cursorDblClick
 
static TOOL_ACTION selectionActivate
Activation of the selection tool.
 
static TOOL_ACTION cursorDownFast
 
static TOOL_ACTION selectionMenu
Run a selection menu to select from a list of items.
 
static TOOL_ACTION selectRows
 
static TOOL_ACTION cursorUpFast
 
static TOOL_ACTION panLeft
 
static TOOL_ACTION updateMenu
 
static TOOL_ACTION doDelete
 
static TOOL_ACTION selectionTool
 
static TOOL_ACTION cursorClick
 
static TOOL_ACTION zoomFitScreen
 
static TOOL_ACTION increment
 
static TOOL_ACTION selectionClear
Clear the current selection.
 
static TOOL_ACTION zoomFitObjects
 
static TOOL_ACTION zoomInCenter
 
static TOOL_ACTION panRight
 
static TOOL_ACTION selectTable
 
static TOOL_ACTION cursorUp
Cursor control with keyboard.
 
static TOOL_ACTION groupLeave
 
static TOOL_ACTION finishInteractive
 
static TOOL_ACTION cursorRight
 
static TOOL_ACTION selectAll
 
static TOOL_ACTION unselectItems
 
static TOOL_ACTION selectItems
Select a list of items (specified as the event parameter)
 
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
 
constexpr const Vec & GetPosition() const
 
constexpr void SetMaximum()
 
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
 
constexpr BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
 
constexpr size_type GetWidth() const
 
constexpr Vec Centre() const
 
constexpr const Vec GetCenter() const
 
constexpr size_type GetHeight() const
 
constexpr bool Contains(const Vec &aPoint) const
 
constexpr const SizeVec & GetSize() const
 
constexpr bool Intersects(const BOX2< Vec > &aRect) const
 
An abstract class that will find and hold all the objects according to an inspection done by the Insp...
 
void Transfer(int aIndex)
Move the item at aIndex (first position is 0) to the backup list.
 
int GetCount() const
Return the number of objects in the list.
 
bool HasItem(const EDA_ITEM *aItem) const
Tests if aItem has already been collected.
 
void Remove(int aIndex)
Remove the item at aIndex (first position is 0).
 
void Append(EDA_ITEM *item)
Add an item to the end of the list.
 
COMMIT & Added(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Notify observers that aItem has been added.
 
COMMIT & Add(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Add a new item to the model.
 
Calculate the connectivity of a schematic and generates netlists.
 
bool IsHorizontal() const
 
void FocusOnLocation(const VECTOR2I &aPos, bool aAllowScroll=true)
Useful to focus on a particular location, in find functions.
 
A set of EDA_ITEMs (i.e., without duplicates).
 
A base class for most all the KiCad significant classes used in schematics and boards.
 
virtual VECTOR2I GetPosition() const
 
virtual const BOX2I GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
 
void SetFlags(EDA_ITEM_FLAGS aMask)
 
KICAD_T Type() const
Returns the type of object.
 
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
 
void SetIsRollover(bool aIsRollover)
 
virtual bool IsType(const std::vector< KICAD_T > &aScanTypes) const
Check whether the item is one of the listed types.
 
virtual bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const
Test if aPosition is inside or on the boundary of this item.
 
EDA_ITEM * GetParent() const
 
bool HasFlag(EDA_ITEM_FLAGS aFlag) const
 
void XorFlags(EDA_ITEM_FLAGS aMask)
 
EDA_ITEM_FLAGS GetFlags() const
 
virtual bool IsFilledForHitTesting() const
 
virtual std::vector< SHAPE * > MakeEffectiveShapesForHitTesting() const
 
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
 
const EDA_ANGLE & GetTextAngle() const
 
virtual bool IsVisible() const
 
std::shared_ptr< SHAPE_COMPOUND > GetEffectiveTextShape(bool aTriangulate=true, const BOX2I &aBBox=BOX2I(), const EDA_ANGLE &aAngle=ANGLE_0) const
build a list of segments (SHAPE_SEGMENT) to describe a text shape.
 
GRID_HELPER_GRIDS GetItemGrid(const EDA_ITEM *aItem) const override
Get the coarsest grid that applies to an item.
 
VECTOR2I BestSnapAnchor(const VECTOR2I &aOrigin, GRID_HELPER_GRIDS aGrid, SCH_ITEM *aSkip)
 
static const TOOL_EVENT DisambiguatePoint
Used for hotkey feedback.
 
static const TOOL_EVENT ClearedEvent
 
static const TOOL_EVENT SelectedEvent
 
static const TOOL_EVENT SelectedItemsModified
Selected items were moved, this can be very high frequency on the canvas, use with care.
 
static const TOOL_EVENT PointSelectedEvent
 
static const TOOL_EVENT SelectedItemsMoved
Used to inform tools that the selection should temporarily be non-editable.
 
static const TOOL_EVENT UnselectedEvent
 
virtual RENDER_SETTINGS * GetSettings()=0
Return a pointer to current settings that are going to be used when drawing items.
 
Represent a selection area (currently a rectangle) in a VIEW, drawn corner-to-corner between two poin...
 
VECTOR2I GetOrigin() const
 
void SetMode(SELECTION_MODE aMode)
 
void SetSubtractive(bool aSubtractive)
 
SELECTION_MODE GetMode() const
 
void SetAdditive(bool aAdditive)
 
void SetPoly(SHAPE_LINE_CHAIN &aPoly)
 
void SetOrigin(const VECTOR2I &aOrigin)
 
const BOX2I ViewBBox() const override
Set the origin of the rectangle (the fixed corner)
 
SHAPE_LINE_CHAIN & GetPoly()
 
void SetExclusiveOr(bool aExclusiveOr)
 
void SetEnd(const VECTOR2I &aEnd)
Set the current end of the rectangle (the corner that moves with the cursor.
 
void SetHighlight(bool aEnabled, int aNetcode=-1, bool aMulti=false)
Turns on/off highlighting.
 
An interface for classes handling user events controlling the view behavior such as zooming,...
 
virtual void CaptureCursor(bool aEnabled)
Force the cursor to stay within the drawing panel area.
 
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Place the cursor immediately at a given point.
 
virtual void WarpMouseCursor(const VECTOR2D &aPosition, bool aWorldCoordinates=false, bool aWarpView=false)=0
If enabled (.
 
virtual void SetCrossHairCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true)=0
Move the graphic crosshair cursor to the requested position expressed in world coordinates.
 
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
 
virtual void SetCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true, bool aTriggeredByArrows=false, long aArrowCommand=0)=0
Move cursor to the requested position expressed in world coordinates.
 
virtual void SetAutoPan(bool aEnabled)
Turn on/off auto panning (this feature is used when there is a tool active (eg.
 
An abstract base class for deriving all objects that can be added to a VIEW.
 
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
 
BOX2D GetViewport() const
Return the current viewport visible area rectangle.
 
virtual void SetScale(double aScale, VECTOR2D aAnchor={ 0, 0 })
Set the scaling factor, zooming around a given anchor point.
 
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
 
virtual void Remove(VIEW_ITEM *aItem)
Remove a VIEW_ITEM from the view.
 
int Query(const BOX2I &aRect, std::vector< LAYER_ITEM_PAIR > &aResult) const
Find all visible items that touch or are within the rectangle aRect.
 
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
 
bool IsMirroredX() const
Return true if view is flipped across the X axis.
 
std::pair< VIEW_ITEM *, int > LAYER_ITEM_PAIR
 
void Hide(VIEW_ITEM *aItem, bool aHide=true, bool aHideOverlay=false)
Temporarily hide the item in the view (e.g.
 
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
 
void SetVisible(VIEW_ITEM *aItem, bool aIsVisible=true)
Set the item visibility.
 
Define a library symbol object.
 
bool IsPower() const override
 
bool IsMultiBodyStyle() const override
 
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
 
int GetUnitCount() const override
 
Tree view item data for the net navigator.
 
CONNECTION_GRAPH * ConnectionGraph() const
 
SCH_SHEET_PATH & CurrentSheet() const
 
static TOOL_ACTION placeClassLabel
 
static TOOL_ACTION placeSheetPin
 
static TOOL_ACTION placeNextSymbolUnit
 
static TOOL_ACTION swapPins
 
static TOOL_ACTION saveToLinkedDesignBlock
 
static TOOL_ACTION clearHighlight
 
static TOOL_ACTION placeGlobalLabel
 
static TOOL_ACTION pinTable
 
static TOOL_ACTION navigateBack
 
static TOOL_ACTION properties
 
static TOOL_ACTION leaveSheet
 
static TOOL_ACTION breakWire
 
static TOOL_ACTION findNetInInspector
 
static TOOL_ACTION autoplaceAllSheetPins
 
static TOOL_ACTION drawLines
 
static TOOL_ACTION placeHierLabel
 
static TOOL_ACTION selectConnection
If current selection is a wire or bus, expand to entire connection.
 
static TOOL_ACTION placeLabel
 
static TOOL_ACTION nextNetItem
 
static TOOL_ACTION drawWire
 
static TOOL_ACTION placeJunction
 
static TOOL_ACTION previousNetItem
 
static TOOL_ACTION swapUnitLabels
 
static TOOL_ACTION navigateForward
 
static TOOL_ACTION placeLinkedDesignBlock
 
static TOOL_ACTION selectNode
Select the junction, wire or bus segment under the cursor.
 
static TOOL_ACTION unfoldBus
 
static TOOL_ACTION drawBus
 
static TOOL_ACTION symbolProperties
 
static TOOL_ACTION changeSheet
 
static TOOL_ACTION assignNetclass
 
static TOOL_ACTION swapPinLabels
 
static TOOL_ACTION enterSheet
 
static TOOL_ACTION editPageNumber
 
static TOOL_ACTION selectOnPCB
 
static TOOL_ACTION syncSheetPins
 
A shim class between EDA_DRAW_FRAME and several derived classes: SYMBOL_EDIT_FRAME,...
 
Class for a wire to bus entry.
 
SCH_ITEM * m_connected_bus_item
Pointer to the bus item (usually a bus wire) connected to this bus-wire entry, if it is connected to ...
 
void Collect(SCH_SCREEN *aScreen, const std::vector< KICAD_T > &aScanTypes, const VECTOR2I &aPos, int aUnit=0, int aBodyStyle=0)
Scan a EDA_ITEM using this class's Inspector method which does the collection.
 
bool m_ShowPinElectricalTypes
 
static const std::vector< KICAD_T > MovableItems
 
virtual void Push(const wxString &aMessage=wxT("A commit"), int aCommitFlags=0) override
Execute the changes.
 
virtual void Revert() override
Revert the commit by restoring the modified items state.
 
static SELECTION_CONDITION SingleMultiFunctionPin
 
static SELECTION_CONDITION SingleSymbol
 
static SELECTION_CONDITION MultipleSymbolsOrPower
 
static SELECTION_CONDITION AllPinsOrSheetPins
 
static SELECTION_CONDITION SingleSymbolOrPower
 
static SELECTION_CONDITION SingleNonExcludedMarker
 
static SELECTION_CONDITION SingleMultiUnitSymbol
 
static SELECTION_CONDITION SingleMultiBodyStyleSymbol
 
static SELECTION_CONDITION AllPins
 
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
 
void ConfigureFromLabel(const wxString &aLabel)
Configures the connection given a label.
 
Handle actions specific to the schematic editor.
 
Schematic editor (Eeschema) main window.
 
void FocusOnItem(EDA_ITEM *aItem, bool aAllowScroll=true) override
Focus on a particular canvas item.
 
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
 
SCH_SHEET_PATH & GetCurrentSheet() const
 
SCHEMATIC & Schematic() const
 
wxTreeCtrl * GetNetNavigator()
 
const SCH_ITEM * SelectNextPrevNetNavigatorItem(bool aNext)
 
const wxString & GetHighlightedConnection() const
 
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
 
A set of SCH_ITEMs (i.e., without duplicates).
 
static bool WithinScope(SCH_ITEM *aItem, SCH_GROUP *aScope, bool isSymbolEditor)
 
static EDA_GROUP * TopLevelGroup(SCH_ITEM *aItem, EDA_GROUP *aScope, bool isSymbolEditor)
 
Base class for any item which can be embedded within the SCHEMATIC container class,...
 
virtual bool IsConnectable() const
 
const SCH_ITEM_VEC & ConnectedItems(const SCH_SHEET_PATH &aPath)
Retrieve the set of items connected to this item on the given sheet.
 
const SYMBOL * GetParentSymbol() const
 
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
 
virtual bool IsPointClickableAnchor(const VECTOR2I &aPos) const
 
bool IsType(const std::vector< KICAD_T > &aScanTypes) const override
Check whether the item is one of the listed types.
 
wxString GetShownText(const SCH_SHEET_PATH *aPath, bool aAllowExtraText, int aDepth=0) const override
 
void SetShape(LABEL_FLAG_SHAPE aShape)
 
LABEL_SHAPE GetLabelShape() const
 
virtual void SetSpinStyle(SPIN_STYLE aSpinStyle)
 
Segment description base class to describe items which have 2 end points (track, wire,...
 
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
 
bool IsStartDangling() const
 
VECTOR2I GetEndPoint() const
 
VECTOR2I GetStartPoint() const
 
SEG GetSeg() const
Get the geometric aspect of the wire as a SEG.
 
bool IsEndDangling() const
 
bool IsBus() const
Return true if the line is a bus.
 
bool IsGraphicLine() const
Return if the line is a graphic (non electrical line)
 
void SetEndPoint(const VECTOR2I &aPosition)
 
Tool that displays edit points allowing to modify items by dragging the points.
 
bool HasPoint()
Indicate the cursor is over an edit point.
 
VECTOR2I GetCenter() const
 
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.
 
Define a sheet pin (label) used in sheets to create hierarchical schematics.
 
SHEET_SIDE GetSide() const
 
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
 
std::vector< SCH_SHEET_PIN * > & GetPins()
 
void GetFields(std::vector< SCH_FIELD * > &aVector, bool aVisibleOnly) const override
Populate a std::vector with SCH_FIELDs, sorted in ordinal order.
 
std::vector< SCH_PIN * > GetPins(const SCH_SHEET_PATH *aSheet) const
Retrieve a list of the SCH_PINs for the given sheet path.
 
SCH_PIN * GetPin(const wxString &number) const
Find a symbol pin by number.
 
int GetOrientation() const override
Get the display symbol orientation.
 
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
 
BOX2I GetBodyBoundingBox() const override
Return a bounding box for the symbol body but not the pins or fields.
 
std::vector< SCH_TABLECELL * > GetCells() const
 
int Distance(const SEG &aSeg) const
Compute minimum Euclidean distance to segment aSeg.
 
static SELECTION_CONDITION HasTypes(std::vector< KICAD_T > aTypes)
Create a functor that tests if among the selected items there is at least one of a given types.
 
static SELECTION_CONDITION HasType(KICAD_T aType)
Create a functor that tests if among the selected items there is at least one of a given type.
 
static bool Empty(const SELECTION &aSelection)
Test if there are no items selected.
 
static SELECTION_CONDITION MoreThan(int aNumber)
Create a functor that tests if the number of selected items is greater than the value given as parame...
 
static bool Idle(const SELECTION &aSelection)
Test if there no items selected or being edited.
 
static SELECTION_CONDITION LessThan(int aNumber)
Create a functor that tests if the number of selected items is smaller than the value given as parame...
 
static SELECTION_CONDITION Count(int aNumber)
Create a functor that tests if the number of selected items is equal to the value given as parameter.
 
static SELECTION_CONDITION OnlyTypes(std::vector< KICAD_T > aTypes)
Create a functor that tests if the selected items are only of given types.
 
virtual void Add(EDA_ITEM *aItem)
 
const std::deque< EDA_ITEM * > GetItems() const
 
VECTOR2I GetReferencePoint() const
 
virtual void Remove(EDA_ITEM *aItem)
 
bool Empty() const
Checks if there is anything selected.
 
bool HasReferencePoint() const
 
bool PointInside(const VECTOR2I &aPt, int aAccuracy=0, bool aUseBBoxCache=false) const override
Check if point aP lies inside a closed shape.
 
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
 
void GenerateBBoxCache() const
 
void SetClosed(bool aClosed)
Mark the line chain as closed (i.e.
 
int PointCount() const
Return the number of points (vertices) in this line chain.
 
double Area(bool aAbsolute=true) const
Return the area of this chain.
 
virtual size_t GetPointCount() const override
 
void Append(int aX, int aY, bool aAllowDuplication=false)
Append a new point at the end of the line chain.
 
const VECTOR2I & CLastPoint() const
Return the last point in the line chain.
 
void Remove(int aStartIndex, int aEndIndex)
Remove the range of points [start_index, end_index] from the line chain.
 
bool Collide(const SHAPE *aShape, int aClearance, VECTOR2I *aMTV) const override
Check if the boundary of shape (this) lies closer to the shape aShape than aClearance,...
 
The symbol library editor main window.
 
bool GetShowInvisibleFields()
 
bool IsSymbolAlias() const
Return true if aLibId is an alias for the editor screen symbol.
 
bool GetShowInvisiblePins()
 
Symbol library viewer main window.
 
A base class for LIB_SYMBOL and SCH_SYMBOL.
 
const TRANSFORM & GetTransform() const
 
double Distance(const VECTOR2< extended_type > &aVector) const
Compute the distance between two vectors.
 
#define DEFAULT_TEXT_SIZE
Ratio of the font height to the baseline of the text above the wire.
 
static constexpr EDA_ANGLE ANGLE_VERTICAL
 
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
 
std::vector< EDA_ITEM * > EDA_ITEMS
Define list of drawing items for screens.
 
#define BRIGHTENED
item is drawn with a bright contour
 
#define IS_NEW
New item, just created.
 
#define SELECTED
Item was manually selected by the user.
 
#define SELECTION_CANDIDATE
indicates an item is a candidate for selection
 
#define ENTERED
indicates a group has been entered
 
#define ENDPOINT
ends. (Used to support dragging.)
 
std::uint32_t EDA_ITEM_FLAGS
 
#define IS_MOVING
Item being moved.
 
#define SHOW_ELEC_TYPE
Show pin electrical type.
 
#define STARTPOINT
When a line is selected, these flags indicate which.
 
@ ID_POPUP_SCH_PIN_TRICKS_START
 
@ ID_POPUP_SCH_PIN_TRICKS_HIER_LABEL
 
@ ID_POPUP_SCH_PIN_TRICKS_WIRE
 
@ ID_POPUP_SCH_PLACE_UNIT_END
 
@ ID_POPUP_SCH_ALT_PIN_FUNCTION
 
@ ID_POPUP_SCH_UNFOLD_BUS_END
 
@ ID_POPUP_SCH_SELECT_UNIT
 
@ ID_POPUP_SCH_SELECT_BODY_STYLE
 
@ ID_POPUP_SCH_PIN_TRICKS_NET_LABEL
 
@ ID_POPUP_SCH_SELECT_BODY_STYLE_END
 
@ ID_POPUP_SCH_PIN_TRICKS_NO_CONNECT
 
@ ID_POPUP_SCH_UNFOLD_BUS
 
@ ID_POPUP_SCH_SELECT_UNIT_END
 
@ ID_POPUP_SCH_ALT_PIN_FUNCTION_END
 
@ ID_POPUP_SCH_PLACE_UNIT
 
@ ID_POPUP_SCH_PIN_TRICKS_GLOBAL_LABEL
 
@ ID_POPUP_SCH_PIN_TRICKS_END
 
a few functions useful in geometry calculations.
 
bool BoxHitTest(const VECTOR2I &aHitPoint, const BOX2I &aHittee, int aAccuracy)
Perform a point-to-box hit test.
 
@ REPAINT
Item needs to be redrawn.
 
ELECTRICAL_PINTYPE
The symbol library pin object electrical types used in ERC tests.
 
@ PT_INPUT
usual pin input: must be connected
 
@ PT_TRISTATE
tri state bus pin
 
@ PT_BIDI
input or output (like port for a microprocessor)
 
@ PT_UNSPECIFIED
unknown electrical properties: creates always a warning when connected
 
@ PT_PASSIVE
pin for passive symbols: must be connected, and can be connected to any pin.
 
@ PIN_UP
The pin extends upwards from the connection point: Probably on the bottom side of the symbol.
 
@ PIN_RIGHT
The pin extends rightwards from the connection point.
 
@ PIN_LEFT
The pin extends leftwards from the connection point: Probably on the right side of the symbol.
 
@ PIN_DOWN
The pin extends downwards from the connection: Probably on the top side of the symbol.
 
#define HITTEST_THRESHOLD_PIXELS
 
Class to handle a set of SCH_ITEMs.
 
std::vector< SCH_ITEM * > SCH_ITEM_VEC
 
std::function< bool(const SELECTION &)> SELECTION_CONDITION
Functor type that checks a specific condition for selected items.
 
std::vector< FAB_LAYER_COLOR > dummy
 
bool text
Text and fields.
 
bool symbols
Allow selecting symbols and sheet symbols.
 
bool labels
Net and bus labels.
 
bool pins
Symbol and sheet pins.
 
bool graphics
Graphic lines, shapes, polygons.
 
bool lockedItems
Allow selecting locked items.
 
bool images
Bitmap/vector images.
 
bool otherItems
Anything not fitting one of the above categories.
 
bool ruleAreas
Rule areas.
 
bool wires
Net and bus wires and junctions.
 
@ NOT_USED
the 3d code uses this value
 
@ SCH_ITEM_LOCATE_GRAPHIC_LINE_T
 
@ SCH_SYMBOL_LOCATE_POWER_T
 
VECTOR2< int32_t > VECTOR2I
 
VECTOR2< double > VECTOR2D