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(
EDA_ITEM* item : aSel.Items() )
167 if( schItem->IsLocked() )
178 for(
EDA_ITEM* item : aSel.Items() )
182 if( !schItem->IsLocked() )
193 for(
int i = 0; aAllowedActions[i]; ++i )
195 if( aEvent->
IsAction( aAllowedActions[i] ) )
204#define HITTEST_THRESHOLD_PIXELS 5
291 if( symbolEditorFrame )
306 auto expandableSelection =
314 auto schEditSheetPageNumberCondition =
324 auto schEditCondition =
330 auto belowRootSheetCondition =
354 auto groupEnterCondition =
357 auto inGroupCondition =
363 auto multipleUnitsSelection = [](
const SELECTION& aSel )
372 m_frame->eeconfig()->m_Input.allow_unconstrained_pin_swaps;
376 auto& menu =
m_menu->GetMenu();
391 menu.AddSeparator( 100 );
395 menu.AddSeparator( 100 );
402 menu.AddSeparator( 200 );
420 menu.AddSeparator( 400 );
424 menu.AddSeparator( 1000 );
460 if( symbolEditFrame )
487 auto pinOrientation =
497 return pin->GetOrientation();
502 return dummy.GetOrientation();
526 bool selCancelled =
false;
527 bool displayWireCursor =
false;
528 bool displayBusCursor =
false;
529 bool displayLineCursor =
false;
530 KIID rolloverItemId = lastRolloverItemId;
534 evt->Modifier(
MD_ALT ) );
540 if( !
m_frame->ToolStackIsEmpty() )
574 schframe->ClearFocus();
581 size_t preFilterCount = collector.
GetCount();
583 narrowSelection( collector, evt->Position(),
false,
false, &rejected );
590 bool allCellsFromSameTable =
true;
602 allCellsFromSameTable =
false;
622 VECTOR2D bottomRight( std::max( start.
x,
end.x ), std::max( start.
y,
end.y ) );
645 else if( collector[0]->HasHoveredHypertext() )
647 collector[ 0 ]->DoHypertextAction(
m_frame, evt->Position() );
650 else if( collector[0]->IsBrightened() )
656 schframe->SelectNetNavigatorItem( &itemData );
663 if( collector.
GetCount() == 0 && preFilterCount > 0 )
666 frame->HighlightSelectionFilter( rejected );
681 SelectPoint( evt->Position(), { SCH_LOCATE_ANY_T },
nullptr, &selCancelled );
690 .Contains( evt->Position() ) )
694 if(
CollectHits( collector, evt->Position(), { SCH_LOCATE_ANY_T } ) )
698 SelectPoint( evt->Position(), { SCH_LOCATE_ANY_T },
nullptr, &selCancelled );
706 else if( evt->IsDblClick(
BUT_LEFT ) )
712 schframe->ClearFocus();
750 schframe->ClearFocus();
760 else if(
CollectHits( collector, evt->DragOrigin(), { SCH_TABLECELL_T } )
761 && ( collector[0]->GetParent()->GetParentGroup() ==
nullptr
762 || collector[0]->GetParent()->GetParentGroup() ==
m_enteredGroup ) )
825 else if( evt->IsMouseDown(
BUT_AUX1 ) )
829 else if( evt->IsMouseDown(
BUT_AUX2 ) )
845 const int delta = evt->Parameter<
int>();
888 wxString alt = *evt->Parameter<wxString*>();
912 newItems.push_back( nc );
915 if( !commit.
Empty() )
917 commit.
Push( wxS(
"No Connect Pins" ) );
936 switch( pinOrientation( item ) )
957 newItems.push_back( wire );
960 if( !commit.
Empty() )
978 commit.
Push( wxS(
"Wire Pins" ) );
998 labelText =
pin->GetShownName();
1000 if( labelText.IsEmpty() )
1002 labelText.Printf(
"%s_%s",
1003 pin->GetParentSymbol()->GetRef( &sheetPath ),
1009 labelText = sheetPin->
GetShownText( &sheetPath,
false );
1016 switch( *evt->GetCommandId() )
1019 label =
new SCH_LABEL( item->GetPosition(), labelText );
1022 label =
new SCH_HIERLABEL( item->GetPosition(), labelText );
1031 switch( pinOrientation( item ) )
1052 pinType =
pin->GetType();
1088 newItems.push_back( label );
1091 if( !commit.
Empty() )
1093 commit.
Push( wxS(
"Label Pins" ) );
1105 wxString* net =
new wxString( *evt->Parameter<wxString*>() );
1109 else if( evt->IsCancelInteractive() )
1119 schframe->ClearFocus();
1125 else if( evt->FirstResponder() ==
this && evt->GetCommandId() == (
int) WXK_ESCAPE )
1135 if(
editor &&
m_frame->eeconfig()->m_Input.esc_clears_net_highlight )
1136 editor->ClearHighlight( *evt );
1143 schframe->ClearFocus();
1145 else if( evt->IsMotion() && !
m_isSymbolEditor && evt->FirstResponder() ==
this )
1164 displayBusCursor =
true;
1166 displayWireCursor =
true;
1168 displayLineCursor =
true;
1170 else if( collector[0]->HasHypertext() && !collector[0]->IsSelected() )
1172 rolloverItemId = collector[0]->m_Uuid;
1179 evt->SetPassEvent();
1182 if( lastRolloverItemId !=
niluuid && lastRolloverItemId != rolloverItemId )
1191 m_frame->GetCanvas()->GetView()->Update( item );
1196 if( rolloverItemId !=
niluuid )
1198 rolloverItem =
static_cast<SCH_ITEM*
>(
m_frame->ResolveItem( rolloverItemId ) );
1205 m_frame->GetCanvas()->GetView()->Update( rolloverItem );
1208 lastRolloverItemId = rolloverItemId;
1210 if(
m_frame->ToolStackIsEmpty() )
1212 if( displayWireCursor )
1216 else if( displayBusCursor )
1220 else if( displayLineCursor )
1230 && evt->HasPosition()
1255 wxT(
"EnterGroup called when selection is not a single group" ) );
1309 if(
m_frame->eeconfig()->m_Drawing.auto_start_wires
1342 if( possibleConnection.
IsBus() )
1350 if( !
pin || !
pin->IsPointClickableAnchor( pos ) )
1353 if( !
pin->IsVisible()
1354 && !(
m_frame->eeconfig()->m_Appearance.show_hidden_pins
1355 ||
m_frame->GetRenderSettings()->m_ShowHiddenPins ) )
1361 newEvt->SetMousePosition( pos );
1362 newEvt->SetHasPosition(
true );
1363 newEvt->SetForceImmediate(
true );
1376 wxMouseState keyboardState = wxGetMouseState();
1379 keyboardState.AltDown() );
1394 wxMouseState keyboardState = wxGetMouseState();
1397 keyboardState.AltDown() );
1418 const std::vector<KICAD_T>& aScanTypes )
1421 int gridThreshold =
KiROUND(
getView()->GetGAL()->GetGridSize().EuclideanNorm() / 2.0 );
1422 aCollector.
m_Threshold = std::max( pixelThreshold, gridThreshold );
1442 int originalCount = aCollector.
GetCount();
1444 for(
int ii = 0; ii < originalCount; ++ii )
1446 if( aCollector[ii]->Type() ==
SCH_PIN_T )
1450 if( !aCollector.
HasItem(
pin->GetParentSymbol() ) )
1451 aCollector.
Append(
pin->GetParentSymbol() );
1462 bool aCheckLocked,
bool aSelectedOnly,
1467 for(
int i = collector.
GetCount() - 1; i >= 0; --i )
1469 if( symbolEditorFrame )
1476 if( !
static_cast<SCH_FIELD*
>( item )->IsVisible()
1485 if( !
static_cast<SCH_PIN*
>( item )->IsVisible()
1500 if( aCheckLocked && collector[i]->IsLocked() )
1514 if( aSelectedOnly && !collector[i]->IsSelected() )
1530 EDA_ITEM** aItem,
bool* aSelectionCancelledFlag,
bool aAdd,
1531 bool aSubtract,
bool aExclusiveOr )
1549 if( aSelectionCancelledFlag )
1550 *aSelectionCancelledFlag =
true;
1556 if( !aAdd && !aSubtract && !aExclusiveOr )
1564 bool foundEnteredGroup =
false;
1569 foundEnteredGroup =
true;
1574 if( !foundEnteredGroup )
1581 bool anySubtracted =
false;
1585 for(
int i = 0; i < aCollector.
GetCount(); ++i )
1588 bool isLine = aCollector[i]->Type() ==
SCH_LINE_T;
1604 || ( aExclusiveOr && aCollector[i]->IsSelected()
1605 && ( !isLine || ( isLine && aCollector[i]->HasFlag( flags ) ) ) ) )
1607 aCollector[i]->ClearFlags( flags );
1617 anySubtracted =
true;
1622 aCollector[i]->SetFlags( flags );
1629 if( addedCount == 1 )
1633 if( aItem && aCollector.
GetCount() == 1 )
1634 *aItem = aCollector[0];
1638 else if( addedCount > 1 )
1643 else if( anySubtracted )
1649 m_frame->GetCanvas()->ForceRefresh();
1655 const std::vector<KICAD_T>& aScanTypes,
1656 EDA_ITEM** aItem,
bool* aSelectionCancelledFlag,
1657 bool aCheckLocked,
bool aAdd,
bool aSubtract,
1662 if( !
CollectHits( collector, aWhere, aScanTypes ) )
1665 size_t preFilterCount = collector.
GetCount();
1667 rejected.
SetAll(
false );
1668 narrowSelection( collector, aWhere, aCheckLocked, aSubtract, &rejected );
1670 if( collector.
GetCount() == 0 && preFilterCount > 0 )
1673 frame->HighlightSelectionFilter( rejected );
1675 if( !aAdd && !aSubtract && !aExclusiveOr &&
m_selection.GetSize() > 0 )
1684 return selectPoint( collector, aWhere, aItem, aSelectionCancelledFlag, aAdd, aSubtract,
1695 std::vector<EDA_ITEM*> sheetPins;
1701 view->
Query( selectionBox,
1709 collection.
Append( item );
1723 sheetPins.emplace_back(
pin );
1744 m_frame->GetCanvas()->ForceRefresh();
1754 std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> selectedItems;
1760 view->
Query( selectionBox, selectedItems );
1787 m_frame->GetCanvas()->ForceRefresh();
1795 std::set<EDA_ITEM*> exactHits;
1797 for(
int i = collector.
GetCount() - 1; i >= 0; --i )
1810 if( item->
HitTest( aPos, pixelThreshold ) )
1811 exactHits.insert( item );
1820 if(
m_frame->GetRenderSettings()->m_ShowPinsElectricalType )
1823 if( item->
HitTest( aPos, 0 ) )
1824 exactHits.insert( item );
1830 if( exactHits.size() > 0 && exactHits.size() < (
unsigned) collector.
GetCount() )
1832 for(
int i = collector.
GetCount() - 1; i >= 0; --i )
1836 if( !exactHits.contains( item ) )
1842 SEG poss( aPos, aPos );
1844 int closestDist = INT_MAX / 4;
1848 BOX2I bbox = item->GetBoundingBox();
1849 int dist = INT_MAX / 4;
1854 bool dominating =
false;
1856 if( exactHits.contains( item ) )
1894 text->GetEffectiveTextShape(
false )->Collide( poss, INT_MAX / 4, &dist );
1900 shapes->Collide( poss, INT_MAX / 4, &dist );
1914 rect.
Collide( poss, closestDist, &dist );
1932 if( dist == closestDist )
1934 if( item->GetParent() == closest )
1937 else if( dist < closestDist )
1953 for(
int i = collector.
GetCount() - 1; i >= 0; --i )
1957 if( item == closest )
1960 if( !item->
HitTest( tightBox,
true ) )
1968 bool aPromoteCellSelections,
1969 bool aPromoteGroups )
1971 bool anyUnselected =
false;
1972 bool anySelected =
false;
1985 bool isMoving =
false;
1987 for(
int i = (
int)
m_selection.GetSize() - 1; i >= 0; --i )
1990 isMoving |=
static_cast<SCH_ITEM*
>( item )->IsMoving();
1992 if( !item->
IsType( aScanTypes ) )
1995 anyUnselected =
true;
2003 if( aPromoteGroups )
2005 for(
int i = (
int)
m_selection.GetSize() - 1; i >= 0; --i )
2009 std::set<EDA_ITEM*> selectedChildren;
2015 if( aChild->
IsType( aScanTypes ) )
2016 selectedChildren.insert( aChild );
2020 anyUnselected =
true;
2023 for(
EDA_ITEM* child : selectedChildren )
2025 if( !child->IsSelected() )
2037 if( aPromoteCellSelections )
2039 std::set<EDA_ITEM*> parents;
2041 for(
int i = (
int)
m_selection.GetSize() - 1; i >= 0; --i )
2049 anyUnselected =
true;
2055 if( !parent->IsSelected() )
2078 std::set<EDA_ITEM*> rejected;
2083 rejected.insert( item );
2087 aCollector.
Remove( item );
2098 if( schItem->IsLocked() && !
m_filter.lockedItems )
2107 switch( aItem->
Type() )
2125 aRejected->
pins =
true;
2135 aRejected->
wires =
true;
2143 switch(
static_cast<SCH_LINE*
>( aItem )->GetLayer() )
2150 aRejected->
wires =
true;
2186 aRejected->
text =
true;
2198 aRejected->
labels =
true;
2208 aRejected->
images =
true;
2288 bool cancelled =
false;
2304 isGreedy = !isGreedy;
2309 if( evt->IsCancelInteractive() || evt->IsActivate() )
2322 area.
SetEnd( evt->Position() );
2339 evt->SetPassEvent(
false );
2361 bool cancelled =
false;
2377 bool isClockwise = shapeArea > 0 ? true :
false;
2379 if(
getView()->IsMirroredX() && shapeArea != 0 )
2380 isClockwise = !isClockwise;
2393 if( evt->IsCancelInteractive() || evt->IsActivate() )
2402 points.
Append( evt->Position() );
2404 else if( evt->IsDblClick(
BUT_LEFT )
2443 area.
SetMode( selectionMode );
2470 std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> candidates;
2472 view->
Query( selectionRect, candidates );
2474 std::set<SCH_ITEM*> uniqueCandidates;
2476 for(
const auto& [viewItem, layer] : candidates )
2478 if( viewItem->IsSCH_ITEM() )
2479 uniqueCandidates.insert(
static_cast<SCH_ITEM*
>( viewItem ) );
2488 if( boxMode ? selectionRect.
Intersects(
pin->GetBoundingBox() )
2490 uniqueCandidates.insert(
pin );
2497 if( boxMode ? selectionRect.
Intersects(
pin->GetBoundingBox() )
2499 uniqueCandidates.insert(
pin );
2504 if( field.IsVisible()
2505 && ( boxMode ? selectionRect.
Intersects( field.GetBoundingBox() )
2508 uniqueCandidates.insert( &field );
2516 std::set<EDA_ITEM*> group_items;
2525 std::unordered_set<EDA_ITEM*>& newset =
group->GetItems();
2528 [&](
const BOX2I& aBox )
2530 return boxMode ? selectionRect.
Contains( aBox )
2534 if( containedMode && boxContained(
group->GetBoundingBox() ) && newset.size() )
2536 for(
EDA_ITEM* group_item : newset )
2538 if( !group_item->IsSCH_ITEM() )
2542 collector.
Append( group_item );
2546 for(
EDA_ITEM* group_item : newset )
2547 group_items.emplace( group_item );
2553 return boxMode ? aItem->HitTest( selectionRect, containedMode )
2554 : aItem->HitTest( aArea.
GetPoly(), containedMode );
2557 for(
SCH_ITEM* item : uniqueCandidates )
2560 && ( !containedMode || !group_items.count( item ) ) )
2563 pinsCollector.
Append( item );
2565 collector.
Append( item );
2574 collector = pinsCollector;
2579 std::sort( collector.
begin(), collector.
end(),
2582 VECTOR2I aPos = a->GetPosition();
2583 VECTOR2I bPos = b->GetPosition();
2585 if( aPos.y == bPos.y )
2586 return aPos.x < bPos.x;
2588 return aPos.y < bPos.y;
2591 bool anyAdded =
false;
2592 bool anySubtracted =
false;
2597 if( aSubtractive || ( aExclusiveOr && aItem->
IsSelected() ) )
2607 anySubtracted =
true;
2610 if( flags && !anySubtracted )
2621 std::vector<EDA_ITEM*> flaggedItems;
2623 auto shapeContains =
2626 return boxMode ? selectionRect.
Contains( aPoint )
2635 flaggedItems.push_back( item );
2637 if(
m_frame->GetRenderSettings()->m_ShowPinsElectricalType )
2646 hits = line->
HitTest( selectionRect,
false );
2650 if( ( !containedMode && hits )
2655 else if( containedMode )
2665 selectItem( item, flags );
2668 selectItem( item, flags );
2673 for(
EDA_ITEM* item : pinsCollector )
2675 if(
m_frame->GetRenderSettings()->m_ShowPinsElectricalType )
2692 selectItem( item, 0 );
2698 for(
EDA_ITEM* item : flaggedItems )
2705 else if( anySubtracted )
2711 bool aMultiselect )
const
2713 std::unordered_set<EDA_ITEM*> toAdd;
2717 for(
int j = 0; j < aCollector.
GetCount(); j++ )
2719 if( aCollector[j]->GetParent() )
2722 if( aCollector[j]->GetParentSymbol() )
2728 for(
int j = 0; j < aCollector.
GetCount(); j++ )
2732 for(
int j = 0; j < aCollector.
GetCount(); )
2744 aCollector.
Remove( item );
2752 if(
top->AsEdaItem() != item )
2754 toAdd.insert(
top->AsEdaItem() );
2757 aCollector.
Remove( item );
2766 aCollector.
Remove( item );
2775 if( !aCollector.
HasItem( item ) )
2776 aCollector.
Append( item );
2786 std::vector<EDA_ITEM*> toRemove;
2792 bool lockedDescendant =
false;
2794 schItem->RunOnChildren(
2798 lockedDescendant =
true;
2802 if( schItem->IsLocked() || lockedDescendant )
2803 toRemove.push_back( item );
2825 if( cell->IsSelected() )
2837 auto wasSelected = [](
EDA_ITEM* aItem )
2844 bool doSelect =
false;
2846 if( cell->HitTest( selectionRect,
false ) )
2851 doSelect = !wasSelected( cell );
2855 else if( wasSelected( cell ) )
2860 if( doSelect && !cell->IsSelected() )
2862 else if( !doSelect && cell->IsSelected() )
2869 bool cancelled =
false;
2876 if( evt->IsCancelInteractive() || evt->IsActivate() )
2884 SelectCellsBetween( evt->DragOrigin(), evt->Position() - evt->DragOrigin(), aTable );
2886 else if( evt->IsMouseUp(
BUT_LEFT ) )
2890 bool anyAdded =
false;
2891 bool anySubtracted =
false;
2898 anySubtracted =
true;
2914 evt->SetPassEvent();
2938 int gridThreshold =
KiROUND(
getView()->GetGAL()->GetGridSize().EuclideanNorm() );
2939 int thresholdMax = std::max( pixelThreshold, gridThreshold );
2941 for(
int threshold : { 0, thresholdMax/4, thresholdMax/2, thresholdMax } )
2950 return collector.
GetCount() ? collector[ 0 ] :
nullptr;
2979 std::vector<SCH_ITEM*> startItems;
2980 std::set<SCH_ITEM*> added;
2982 for(
auto item : aItems )
2984 if( !item->IsSCH_ITEM() )
2994 startItems.push_back(
pin );
2999 startItems.push_back( schItem );
3003 if( startItems.empty() )
3008 std::unordered_set<SCH_SYMBOL*> startSymbols;
3015 startSymbols.insert( parent );
3021 std::set<VECTOR2I> pinPositions;
3028 pinPositions.insert(
pin->GetPosition() );
3032 auto isStopPoint = [&](
const VECTOR2I& aPoint ) ->
bool
3037 if( pinPositions.count( aPoint ) )
3048 switch( it->Type() )
3056 if( it->IsConnected( aPoint ) )
3071 auto shouldPullInSymbol = [&]()
3076 std::deque<SCH_ITEM*> queue;
3077 std::unordered_set<SCH_ITEM*> visited;
3079 auto enqueue = [&](
SCH_ITEM* aItem )
3084 if( visited.insert( aItem ).second )
3085 queue.push_back( aItem );
3091 while( !queue.empty() )
3100 if( shouldPullInSymbol() && symbol &&
Selectable( symbol )
3103 added.insert( symbol );
3108 std::vector<VECTOR2I> openPoints;
3114 if( !isStopPoint( pt ) )
3115 openPoints.push_back( pt );
3121 for(
SCH_ITEM* neighbor : neighbors )
3133 added.insert( symbol );
3142 bool sharesOpenPoint =
false;
3144 for(
const VECTOR2I& pt : openPoints )
3146 if( neighbor->IsConnected( pt ) )
3148 sharesOpenPoint =
true;
3153 if( !sharesOpenPoint )
3157 enqueue( neighbor );
3163 added.insert( item );
3172 std::set<SCH_ITEM*> added;
3174 for(
auto item : aItems )
3176 if( !item->IsSCH_ITEM() )
3181 std::set<SCH_ITEM*> conns =
m_frame->GetScreen()->MarkConnections( schItem, schItem->
IsConnectable() );
3189 added.insert( connItem );
3212 if( !selItem->IsSCH_ITEM() )
3218 graphicalSelection.
Add( item );
3220 graphicalSelection.
Add( item );
3222 connectableSelection.
Add( item );
3227 std::unordered_set<const SCH_ITEM*> originalConnectableSet;
3230 originalConnectableSet.insert(
static_cast<const SCH_ITEM*
>( selItem ) );
3234 std::set<SCH_ITEM*> graphAdded;
3235 std::set<SCH_ITEM*> graphicalAdded;
3237 if( !connectableSelection.
Empty() )
3245 bool grew = std::any_of( graphAdded.begin(), graphAdded.end(),
3248 return !originalConnectableSet.count( c );
3256 if( !graphicalSelection.
Empty() )
3261 if( graphAdded.empty() && !connectableSelection.
Empty() )
3266 combinedSelection.
Add( selItem );
3268 graphicalSelection = combinedSelection;
3273 auto smartAddToSel = [&](
EDA_ITEM* aItem )
3282 for(
auto item : graphAdded )
3283 smartAddToSel( item );
3285 for(
auto item : graphicalAdded )
3286 smartAddToSel( item );
3288 for(
auto item : originalSelection )
3289 smartAddToSel( item );
3308 std::set<std::pair<SCH_TABLE*, int>> columns;
3316 columns.insert( std::make_pair(
table, cell->GetColumn() ) );
3320 for(
auto& [
table, col ] : columns )
3322 for(
int row = 0; row <
table->GetRowCount(); ++row )
3343 std::set<std::pair<SCH_TABLE*, int>> rows;
3351 rows.insert( std::make_pair(
table, cell->GetRow() ) );
3355 for(
auto& [
table, row ] : rows )
3357 for(
int col = 0; col <
table->GetColCount(); ++col )
3378 std::set<SCH_TABLE*> tables;
3384 tables.insert(
static_cast<SCH_TABLE*
>( cell->GetParent() ) );
3391 if( !
table->IsSelected() )
3434 double compRatio = bbSize.
y / currTextHeight;
3435 double compRatioBent = 1.0;
3441 std::vector<std::pair<double, double>> lut{ { 1.25, 16 },
3450 std::vector<std::pair<double, double>>::iterator it;
3453 compRatioBent = lut.back().second;
3457 if( compRatio >= lut.front().first )
3459 for( it = lut.begin(); it < lut.end() - 1; ++it )
3461 if( it->first <= compRatio &&
next( it )->first >= compRatio )
3463 double diffx = compRatio - it->first;
3464 double diffn =
next( it )->first - it->first;
3466 compRatioBent = it->second + (
next( it )->second - it->second ) * diffx / diffn;
3473 compRatioBent = lut.front().second;
3482 screenSize.
x = std::max( 10.0, screenSize.
x );
3483 screenSize.
y = std::max( 10.0, screenSize.
y );
3484 double ratio = std::max( -1.0, fabs( bbSize.
y / screenSize.
y ) );
3487 double kicadRatio = std::max( fabs( bbSize.
x / screenSize.
x ),
3488 fabs( bbSize.
y / screenSize.
y ) );
3493 if( bbSize.
x > screenSize.
x * ratio * compRatioBent )
3497 compRatioBent = 1.0;
3498 wxLogTrace(
"CROSS_PROBE_SCALE",
3499 "Part TOO WIDE for screen. Using normal KiCad zoom ratio: %1.5f", ratio );
3504 ratio *= compRatioBent;
3506 bool alwaysZoom =
false;
3509 if( ( ratio < 0.5 || ratio > 1.0 ) || alwaysZoom )
3515 SCH_ITEM* focusItem,
const std::vector<SCH_ITEM*>& items )
3522 double targetZoom = 0.0;
3524 bool targetZoomValid =
false;
3525 bool changedSheet =
false;
3527 if( targetSheetPath )
3533 targetZoom = screen->m_LastZoomLevel;
3534 targetCenter = screen->m_ScrollCenter;
3535 targetZoomValid = screen->IsZoomInitialized();
3541 changedSheet =
true;
3545 if( changedSheet && targetZoomValid && !
m_frame->eeconfig()->m_CrossProbing.zoom_to_fit )
3559 if(
m_frame->GetScreen()->CheckIfOnDrawList( item )
3560 || ( parent &&
m_frame->GetScreen()->CheckIfOnDrawList( parent ) ) )
3570 if(
m_frame->eeconfig()->m_CrossProbing.center_on_items )
3572 if(
m_frame->eeconfig()->m_CrossProbing.zoom_to_fit )
3591 bool enteredGroupFound =
false;
3599 if( item.IsSelected() )
3607 enteredGroupFound =
true;
3621 if( item->IsSelected() )
3627 item->RunOnChildren(
3641 enteredGroupFound =
true;
3653 if( !enteredGroupFound )
3665 bool checkVisibilityOnly )
const
3676 switch( aItem->
Type() )
3684 if(
pin->GetUnit() &&
pin->GetUnit() != symEditFrame->
GetUnit() )
3691 if( !
pin->IsVisible() && !
m_frame->GetShowAllPins() )
3702 if(
pin->IsPointClickableAnchor(
grid.BestSnapAnchor( *aPos, pinGrid ) ) )
3713 if( !
m_frame->eeconfig()->m_Appearance.show_directive_labels )
3818 aGroup->
Add( aItem );
3828 sch_item->RunOnChildren(
3879 sch_item->RunOnChildren(
3893 aGroup->
Remove( aChild );
3907 const unsigned GRIP_MARGIN = 20;
3913 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
void SetIsRollover(bool aIsRollover, const VECTOR2I &aMousePos)
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)
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)
EE_TYPE Overlapping(const BOX2I &aRect) const
EE_TYPE OfType(KICAD_T aType) const
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 SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
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 HasLockedItems
static SELECTION_CONDITION AllPinsOrSheetPins
static SELECTION_CONDITION SingleSymbolOrPower
static SELECTION_CONDITION HasUnlockedItems
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
const SCH_ITEM * SelectNextPrevNetNavigatorItem(bool aNext)
const wxString & GetHighlightedConnection() const
wxGenericTreeCtrl * GetNetNavigator()
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
virtual bool HasHoveredHypertext() const
Indicates that a hypertext link is currently active.
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 IsLocked() const override
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.
bool IsExplicitJunction(const VECTOR2I &aPosition) const
Indicate that a junction dot is necessary at the given location.
EE_RTREE & Items()
Get the full RTree, usually for iterating.
bool IsJunction(const VECTOR2I &aPosition) const
Test if a junction is required for the items at aPosition on the screen.
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()
std::vector< const SCH_PIN * > GetPins(const SCH_SHEET_PATH *aSheet) const
Retrieve a list of the SCH_PINs for the given sheet path.
void GetFields(std::vector< SCH_FIELD * > &aVector, bool aVisibleOnly) const override
Populate a std::vector with SCH_FIELDs, sorted in ordinal order.
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
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 PointInside(const VECTOR2I &aPt, int aAccuracy=0, bool aUseBBoxCache=false) const override
Check if point aP lies inside a closed shape.
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
#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::vector< EDA_ITEM * > EDA_ITEMS
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.
KIBIS top(path, &reporter)
std::vector< std::vector< std::string > > table
@ 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