64 if( aSel.GetSize() == 1 )
78 return aSel.GetSize() == 1 && aSel.Front()->Type() ==
SCH_SYMBOL_T;
84 if( aSel.GetSize() == 1 )
98 if( aSel.GetSize() == 1 )
112 if( aSel.GetSize() == 1 )
116 if(
pin &&
pin->GetLibPin() )
117 return !
pin->GetLibPin()->GetAlternates().empty();
129 return !
static_cast<SCH_MARKER*
>( aSel.Front() )->IsExcluded();
135 return aSel.GetSize() > 1 && aSel.OnlyContains( {
SCH_SYMBOL_T } );
141 return aSel.GetSize() >= 1 && aSel.OnlyContains( {
SCH_PIN_T } );
151#define HITTEST_THRESHOLD_PIXELS 5
158 m_isSymbolEditor( false ),
159 m_isSymbolViewer( false ),
209 m_frame = getEditFrame<SCH_BASE_FRAME>();
214 if( symbolEditorFrame )
234 auto schEditSheetPageNumberCondition =
244 auto schEditCondition =
250 auto belowRootSheetCondition =
274 auto symbolDisplayNameIsEditable =
282 return symbEditorFrame
289 auto& menu =
m_menu->GetMenu();
299 menu.AddSeparator( 100 );
303 menu.AddSeparator( 100 );
310 menu.AddSeparator( 200 );
324 menu.AddSeparator( 400 );
329 menu.AddSeparator( 1000 );
343 m_frame = getEditFrame<SCH_BASE_FRAME>();
362 if( symbolEditFrame )
387 auto pinOrientation =
397 return pin->GetOrientation();
402 return dummy.GetOrientation();
413 case SHEET_SIDE::LEFT:
return PIN_ORIENTATION::PIN_RIGHT;
414 case SHEET_SIDE::RIGHT:
return PIN_ORIENTATION::PIN_LEFT;
415 case SHEET_SIDE::TOP:
return PIN_ORIENTATION::PIN_DOWN;
416 case SHEET_SIDE::BOTTOM:
return PIN_ORIENTATION::PIN_UP;
420 return PIN_ORIENTATION::PIN_LEFT;
426 bool selCancelled =
false;
427 bool displayWireCursor =
false;
428 bool displayBusCursor =
false;
429 bool displayLineCursor =
false;
430 KIID rolloverItem = lastRolloverItem;
434 evt->Modifier(
MD_ALT ) );
474 schframe->FocusOnItem(
nullptr );
498 else if( collector[0]->IsHypertext() )
500 collector[ 0 ]->DoHypertextAction(
m_frame );
503 else if( collector[0]->IsBrightened() )
510 schframe->SelectNetNavigatorItem( &itemData );
530 SelectPoint( evt->Position(), { SCH_LOCATE_ANY_T },
nullptr, &selCancelled );
543 if(
CollectHits( collector, evt->Position(), { SCH_LOCATE_ANY_T } ) )
547 SelectPoint( evt->Position(), { SCH_LOCATE_ANY_T },
nullptr, &selCancelled );
555 else if( evt->IsDblClick(
BUT_LEFT ) )
561 schframe->FocusOnItem(
nullptr );
597 schframe->FocusOnItem(
nullptr );
605 else if(
CollectHits( collector, evt->DragOrigin(), { SCH_TABLECELL_T } ) )
609 else if(
hasModifier() || drag_action == MOUSE_DRAG_ACTION::SELECT )
613 else if(
m_selection.
Empty() && drag_action != MOUSE_DRAG_ACTION::DRAG_ANY )
656 else if( evt->IsMouseDown(
BUT_AUX1 ) )
660 else if( evt->IsMouseDown(
BUT_AUX2 ) )
676 const int delta = evt->Parameter<
int>();
712 wxString alt = *evt->Parameter<wxString*>();
736 newItems.push_back( nc );
739 if( !commit.
Empty() )
741 commit.
Push( wxS(
"No Connect Pins" ) );
747 VECTOR2I wireGrid =
grid.GetGridSize( GRID_HELPER_GRIDS::GRID_WIRES );
760 switch( pinOrientation( item ) )
763 case PIN_ORIENTATION::PIN_RIGHT:
766 case PIN_ORIENTATION::PIN_LEFT:
769 case PIN_ORIENTATION::PIN_UP:
772 case PIN_ORIENTATION::PIN_DOWN:
781 newItems.push_back( wire );
784 if( !commit.
Empty() )
802 commit.
Push( wxS(
"Wire Pins" ) );
822 labelText =
pin->GetShownName();
824 if( labelText.IsEmpty() )
826 labelText.Printf(
"%s_%s",
827 pin->GetParentSymbol()->GetRef( &sheetPath ),
833 labelText = sheetPin->
GetShownText( &sheetPath,
false );
840 switch( *evt->GetCommandId() )
843 label =
new SCH_LABEL( item->GetPosition(), labelText );
855 switch( pinOrientation( item ) )
858 case PIN_ORIENTATION::PIN_RIGHT:
861 case PIN_ORIENTATION::PIN_LEFT:
864 case PIN_ORIENTATION::PIN_UP:
867 case PIN_ORIENTATION::PIN_DOWN:
876 pinType =
pin->GetType();
882 case LABEL_INPUT: pinType = ELECTRICAL_PINTYPE::PT_INPUT;
break;
883 case LABEL_OUTPUT: pinType = ELECTRICAL_PINTYPE::PT_OUTPUT;
break;
884 case LABEL_BIDI: pinType = ELECTRICAL_PINTYPE::PT_BIDI;
break;
885 case LABEL_TRISTATE: pinType = ELECTRICAL_PINTYPE::PT_TRISTATE;
break;
886 case LABEL_PASSIVE: pinType = ELECTRICAL_PINTYPE::PT_PASSIVE;
break;
892 case ELECTRICAL_PINTYPE::PT_BIDI:
893 label->
SetShape( LABEL_FLAG_SHAPE::L_BIDI );
895 case ELECTRICAL_PINTYPE::PT_INPUT:
896 label->
SetShape( LABEL_FLAG_SHAPE::L_INPUT );
898 case ELECTRICAL_PINTYPE::PT_OUTPUT:
899 label->
SetShape( LABEL_FLAG_SHAPE::L_OUTPUT );
901 case ELECTRICAL_PINTYPE::PT_TRISTATE:
902 label->
SetShape( LABEL_FLAG_SHAPE::L_TRISTATE );
904 case ELECTRICAL_PINTYPE::PT_UNSPECIFIED:
905 label->
SetShape( LABEL_FLAG_SHAPE::L_UNSPECIFIED );
908 label->
SetShape( LABEL_FLAG_SHAPE::L_INPUT );
912 newItems.push_back( label );
915 if( !commit.
Empty() )
917 commit.
Push( wxS(
"Label Pins" ) );
929 wxString* net =
new wxString( *evt->Parameter<wxString*>() );
933 else if( evt->IsCancelInteractive() )
943 schframe->FocusOnItem(
nullptr );
949 else if( evt->FirstResponder() ==
this && evt->GetCommandId() == (
int) WXK_ESCAPE )
954 editor->ClearHighlight( *evt );
960 schframe->FocusOnItem(
nullptr );
962 else if( evt->IsMotion() && !
m_isSymbolEditor && evt->FirstResponder() == this )
981 displayBusCursor =
true;
983 displayWireCursor =
true;
985 displayLineCursor =
true;
987 else if( collector[0]->IsHypertext() && !collector[0]->IsSelected() )
989 rolloverItem = collector[0]->m_Uuid;
999 if( lastRolloverItem !=
niluuid && lastRolloverItem != rolloverItem )
1029 lastRolloverItem = rolloverItem;
1033 if( displayWireCursor )
1037 else if( displayBusCursor )
1041 else if( displayLineCursor )
1045 else if( rolloverItem !=
niluuid )
1050 && drag_action == MOUSE_DRAG_ACTION::DRAG_SELECTED
1051 && evt->HasPosition()
1110 if( possibleConnection.
IsBus() )
1118 if( !
pin || !
pin->IsPointClickableAnchor( pos ) )
1121 if( !
pin->IsVisible()
1129 newEvt->SetMousePosition( pos );
1130 newEvt->SetHasPosition(
true );
1131 newEvt->SetForceImmediate(
true );
1144 wxMouseState keyboardState = wxGetMouseState();
1147 keyboardState.AltDown() );
1162 wxMouseState keyboardState = wxGetMouseState();
1165 keyboardState.AltDown() );
1186 const std::vector<KICAD_T>& aScanTypes )
1189 int gridThreshold =
KiROUND(
getView()->GetGAL()->GetGridSize().EuclideanNorm() / 2 );
1190 aCollector.
m_Threshold = std::max( pixelThreshold, gridThreshold );
1210 int originalCount = aCollector.
GetCount();
1212 for(
int ii = 0; ii < originalCount; ++ii )
1214 if( aCollector[ii]->Type() ==
SCH_PIN_T )
1218 if( !aCollector.
HasItem(
pin->GetParentSymbol() ) )
1219 aCollector.
Append(
pin->GetParentSymbol() );
1230 bool aCheckLocked,
bool aSelectedOnly )
1234 for(
int i = collector.
GetCount() - 1; i >= 0; --i )
1236 if( symbolEditorFrame )
1267 if( aCheckLocked && collector[i]->IsLocked() )
1279 if( aSelectedOnly && !collector[i]->IsSelected() )
1293 EDA_ITEM** aItem,
bool* aSelectionCancelledFlag,
bool aAdd,
1294 bool aSubtract,
bool aExclusiveOr )
1312 if( aSelectionCancelledFlag )
1313 *aSelectionCancelledFlag =
true;
1319 if( !aAdd && !aSubtract && !aExclusiveOr )
1323 bool anySubtracted =
false;
1327 for(
int i = 0; i < aCollector.
GetCount(); ++i )
1330 bool isLine = aCollector[i]->Type() ==
SCH_LINE_T;
1346 || ( aExclusiveOr && aCollector[i]->IsSelected()
1347 && ( !isLine || ( isLine && aCollector[i]->HasFlag( flags ) ) ) ) )
1349 aCollector[i]->ClearFlags( flags );
1359 anySubtracted =
true;
1364 aCollector[i]->SetFlags( flags );
1371 if( addedCount == 1 )
1375 if( aItem && aCollector.
GetCount() == 1 )
1376 *aItem = aCollector[0];
1380 else if( addedCount > 1 )
1385 else if( anySubtracted )
1397 const std::vector<KICAD_T>& aScanTypes,
1398 EDA_ITEM** aItem,
bool* aSelectionCancelledFlag,
1399 bool aCheckLocked,
bool aAdd,
bool aSubtract,
1404 if( !
CollectHits( collector, aWhere, aScanTypes ) )
1409 return selectPoint( collector, aWhere, aItem, aSelectionCancelledFlag, aAdd, aSubtract,
1420 std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> selectedItems;
1421 std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> sheetPins;
1427 view->
Query( selectionBox, selectedItems );
1436 int layer = pair.second;
1443 selectedItems.insert( selectedItems.end(), sheetPins.begin(), sheetPins.end() );
1445 for(
const std::pair<KIGFX::VIEW_ITEM*, int>& item_pair : selectedItems )
1472 std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> selectedItems;
1478 view->
Query( selectionBox, selectedItems );
1513 std::set<EDA_ITEM*> exactHits;
1515 for(
int i = collector.
GetCount() - 1; i >= 0; --i )
1523 if( line || ( shape && shape->
GetShape() == SHAPE_T::POLY )
1524 || ( shape && shape->
GetShape() == SHAPE_T::ARC ) )
1528 if( item->
HitTest( aPos, pixelThreshold ) )
1529 exactHits.insert( item );
1541 if( item->
HitTest( aPos, 0 ) )
1542 exactHits.insert( item );
1548 if( exactHits.size() > 0 && exactHits.size() < (
unsigned) collector.
GetCount() )
1550 for(
int i = collector.
GetCount() - 1; i >= 0; --i )
1554 if( !exactHits.contains( item ) )
1560 SEG poss( aPos, aPos );
1562 int closestDist = INT_MAX / 4;
1566 BOX2I bbox = item->GetBoundingBox();
1567 int dist = INT_MAX / 4;
1572 bool dominating =
false;
1574 if( exactHits.contains( item ) )
1609 ->Collide( poss, INT_MAX / 4, &dist );
1613 text->GetEffectiveTextShape(
false )->Collide( poss, INT_MAX / 4, &dist );
1619 for(
SHAPE* s : shapes )
1621 int shapeDist = dist;
1622 s->Collide( poss, INT_MAX / 4, &shapeDist );
1624 if( shapeDist < dist )
1642 rect.
Collide( poss, closestDist, &dist );
1660 if( dist == closestDist )
1662 if( item->GetParent() == closest )
1665 else if( dist < closestDist )
1681 for(
int i = collector.
GetCount() - 1; i >= 0; --i )
1685 if( item == closest )
1688 if( !item->
HitTest( tightBox,
true ) )
1696 bool aPromoteCellSelections )
1698 bool anyUnselected =
false;
1699 bool anySelected =
false;
1712 bool isMoving =
false;
1717 isMoving |=
static_cast<SCH_ITEM*
>( item )->IsMoving();
1719 if( !item->
IsType( aScanTypes ) )
1722 anyUnselected =
true;
1730 if( aPromoteCellSelections )
1732 std::set<EDA_ITEM*> parents;
1742 anyUnselected =
true;
1748 if( !parent->IsSelected() )
1780 switch( aItem->
Type() )
1798 switch(
static_cast<SCH_LINE*
>( aItem )->GetLayer() )
1887 bool cancelled =
false;
1903 bool isGreedy = width < 0;
1906 isGreedy = !isGreedy;
1909 : KICURSOR::SELECT_WINDOW );
1911 if( evt->IsCancelInteractive() || evt->IsActivate() )
1924 area.
SetEnd( evt->Position() );
1942 std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> nearbyViewItems;
1946 std::unordered_set<EDA_ITEM*> nearbyItems;
1947 std::vector<EDA_ITEM*> nearbyChildren;
1948 std::vector<EDA_ITEM*> flaggedItems;
1954 if( nearbyItems.insert( item ).second )
1960 sch_item->RunOnChildren(
1966 int unit =
pin->GetLibPin()->GetUnit();
1968 if( unit && unit !=
pin->GetParentSymbol()->GetUnit() )
1972 nearbyChildren.push_back( aChild );
1982 bool anyAdded =
false;
1983 bool anySubtracted =
false;
1998 anySubtracted =
true;
2003 if( flags && !anySubtracted )
2014 for(
EDA_ITEM* item : nearbyItems )
2016 bool selected =
false;
2028 if( ( isGreedy && line->
HitTest( selectionRect,
false ) )
2035 else if( !isGreedy )
2054 selected = item->HitTest( selectionRect, !isGreedy );
2061 flaggedItems.push_back( item );
2062 selectItem( item, flags );
2068 for(
EDA_ITEM* item : nearbyChildren )
2075 && !item->GetParent()->HasFlag(
CANDIDATE )
2076 && item->HitTest( selectionRect, !isGreedy ) )
2078 selectItem( item, 0 );
2084 for(
EDA_ITEM* item : flaggedItems )
2104 evt->SetPassEvent();
2125 bool cancelled =
false;
2130 if( cell->IsSelected() )
2139 return ( aItem->GetFlags() &
CANDIDATE ) > 0;
2144 if( evt->IsCancelInteractive() || evt->IsActivate() )
2153 BOX2I selectionRect( evt->DragOrigin(), evt->Position() - evt->DragOrigin() );
2158 bool doSelect =
false;
2160 if( cell->HitTest( selectionRect,
false ) )
2165 doSelect = !wasSelected( cell );
2169 else if( wasSelected( cell ) )
2174 if( doSelect && !cell->IsSelected() )
2176 else if( !doSelect && cell->IsSelected() )
2180 else if( evt->IsMouseUp(
BUT_LEFT ) )
2184 bool anyAdded =
false;
2185 bool anySubtracted =
false;
2189 if( cell->IsSelected() && !wasSelected( cell ) )
2191 else if( wasSelected( cell ) && !cell->IsSelected() )
2192 anySubtracted =
true;
2211 evt->SetPassEvent();
2235 int gridThreshold =
KiROUND(
getView()->GetGAL()->GetGridSize().EuclideanNorm() );
2236 int thresholdMax = std::max( pixelThreshold, gridThreshold );
2238 for(
int threshold : { 0, thresholdMax/4, thresholdMax/2, thresholdMax } )
2247 return collector.
GetCount() ? collector[ 0 ] :
nullptr;
2268 unsigned done =
false;
2282 if( item->IsType( { SCH_ITEM_LOCATE_WIRE_T, SCH_ITEM_LOCATE_BUS_T,
2283 SCH_ITEM_LOCATE_GRAPHIC_LINE_T } )
2284 && !item->IsSelected() )
2310 std::set<std::pair<SCH_TABLE*, int>> columns;
2318 columns.insert( std::make_pair(
table, cell->GetColumn() ) );
2322 for(
auto& [
table, col ] : columns )
2324 for(
int row = 0; row <
table->GetRowCount(); ++row )
2345 std::set<std::pair<SCH_TABLE*, int>> rows;
2353 rows.insert( std::make_pair(
table, cell->GetRow() ) );
2357 for(
auto& [
table, row ] : rows )
2359 for(
int col = 0; col <
table->GetColCount(); ++col )
2380 std::set<SCH_TABLE*> tables;
2386 tables.insert(
static_cast<SCH_TABLE*
>( cell->GetParent() ) );
2393 if( !
table->IsSelected() )
2436 double compRatio = bbSize.
y / currTextHeight;
2437 double compRatioBent = 1.0;
2443 std::vector<std::pair<double, double>> lut{ { 1.25, 16 },
2452 std::vector<std::pair<double, double>>::iterator it;
2455 compRatioBent = lut.back().second;
2459 if( compRatio >= lut.front().first )
2461 for( it = lut.begin(); it < lut.end() - 1; ++it )
2463 if( it->first <= compRatio &&
next( it )->first >= compRatio )
2465 double diffx = compRatio - it->first;
2466 double diffn =
next( it )->first - it->first;
2468 compRatioBent = it->second + (
next( it )->second - it->second ) * diffx / diffn;
2475 compRatioBent = lut.front().second;
2484 screenSize.
x = std::max( 10.0, screenSize.
x );
2485 screenSize.
y = std::max( 10.0, screenSize.
y );
2486 double ratio = std::max( -1.0, fabs( bbSize.
y / screenSize.
y ) );
2489 double kicadRatio = std::max( fabs( bbSize.
x / screenSize.
x ),
2490 fabs( bbSize.
y / screenSize.
y ) );
2495 if( bbSize.
x > screenSize.
x * ratio * compRatioBent )
2499 compRatioBent = 1.0;
2500 wxLogTrace(
"CROSS_PROBE_SCALE",
2501 "Part TOO WIDE for screen. Using normal KiCad zoom ratio: %1.5f", ratio );
2506 ratio *= compRatioBent;
2508 bool alwaysZoom =
false;
2511 if( ( ratio < 0.5 || ratio > 1.0 ) || alwaysZoom )
2517 SCH_ITEM* focusItem,
const std::vector<SCH_ITEM*>& items )
2576 if( item.IsSelected() )
2585 if( item->IsSelected() )
2591 item->RunOnChildren(
2609 bool checkVisibilityOnly )
const
2620 switch( aItem->
Type() )
2628 if(
pin->GetUnit() &&
pin->GetUnit() != symEditFrame->
GetUnit() )
2646 if(
pin->IsPointClickableAnchor(
grid.BestSnapAnchor( *aPos, pinGrid ) ) )
2754 aGroup->
Add( aItem );
2760 sch_item->RunOnChildren(
2809 sch_item->RunOnChildren(
2823 aGroup->
Remove( aChild );
2836 const unsigned GRIP_MARGIN = 20;
2842 BOX2I itemBox = item->ViewBBox();
constexpr EDA_IU_SCALE schIUScale
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
static TOOL_ACTION unselectAll
static TOOL_ACTION cursorLeft
static TOOL_ACTION zoomOutCenter
static TOOL_ACTION zoomIn
static TOOL_ACTION cursorLeftFast
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 cursorDownFast
static TOOL_ACTION selectRows
static TOOL_ACTION cursorUpFast
static TOOL_ACTION panLeft
static TOOL_ACTION updateMenu
static TOOL_ACTION zoomFitScreen
static TOOL_ACTION increment
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 finishInteractive
static TOOL_ACTION cursorRight
static TOOL_ACTION selectAll
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
CROSS_PROBING_SETTINGS m_CrossProbing
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
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.
bool IsHorizontal() const
bool IsType(FRAME_T aType) const
void AddStandardSubMenus(TOOL_MENU &aMenu)
Construct a "basic" menu for a tool, containing only items that apply to all tools (e....
void FocusOnLocation(const VECTOR2I &aPos)
Useful to focus on a particular location, in find functions.
virtual EDA_ITEM * GetItem(const KIID &aId) const
Fetch an item by KIID.
void ForceRefresh()
Force a redraw.
void SetCurrentCursor(KICURSOR aCursor)
Set the current cursor shape for this panel.
A base class for most all the KiCad significant classes used in schematics and boards.
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
bool IsBrightened() const
void XorFlags(EDA_ITEM_FLAGS aMask)
virtual std::vector< SHAPE * > MakeEffectiveShapes(bool aEdgeOnly=false) const
Make a set of SHAPE objects representing the EDA_SHAPE.
virtual bool IsFilledForHitTesting() 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 PointSelectedEvent
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 SetSubtractive(bool aSubtractive)
void SetAdditive(bool aAdditive)
void SetOrigin(const VECTOR2I &aOrigin)
const BOX2I ViewBBox() const override
Set the origin of the rectangle (the fixed corner)
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 SetAutoPan(bool aEnabled)
Turn on/off auto panning (this feature is used when there is a tool active (eg.
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 IsMulti() const override
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
Tree view item data for the net navigator.
void SetCurrentSheet(const SCH_SHEET_PATH &aPath)
CONNECTION_GRAPH * ConnectionGraph() const
SCH_SHEET_PATH & CurrentSheet() const
static TOOL_ACTION placeClassLabel
static TOOL_ACTION placeSheetPin
static TOOL_ACTION clearHighlight
static TOOL_ACTION clearSelection
Clears the current selection.
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 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 navigateForward
static TOOL_ACTION removeItemFromSel
static TOOL_ACTION setUnitDisplayName
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 removeItemsFromSel
static TOOL_ACTION symbolProperties
static TOOL_ACTION assignNetclass
static TOOL_ACTION enterSheet
static TOOL_ACTION selectionMenu
Runs a selection menu to select from a list of items.
static TOOL_ACTION addItemToSel
Selects an item (specified as the event parameter).
static TOOL_ACTION addItemsToSel
Selects a list of items (specified as the event parameter)
static TOOL_ACTION editPageNumber
static TOOL_ACTION selectOnPCB
static TOOL_ACTION syncSheetPins
static TOOL_ACTION selectionActivate
Activation of the selection tool.
SCH_RENDER_SETTINGS * GetRenderSettings()
void AddToScreen(EDA_ITEM *aItem, SCH_SCREEN *aScreen=nullptr)
Add an item to the screen (and view) aScreen is the screen the item is located on,...
SCH_SCREEN * GetScreen() const override
Return a pointer to a BASE_SCREEN or one of its derivatives.
SCH_DRAW_PANEL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
EESCHEMA_SETTINGS * eeconfig() const
virtual bool GetShowAllPins() const
Allow some frames to show/hide hidden pins.
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 aConvert=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 SingleDeMorganSymbol
static SELECTION_CONDITION SingleSymbolOrPower
static SELECTION_CONDITION SingleNonExcludedMarker
static SELECTION_CONDITION SingleMultiUnitSymbol
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.
KIGFX::SCH_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
Handle actions specific to the schematic editor.
Schematic editor (Eeschema) main window.
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()
void FlipBodyStyle(SCH_SYMBOL *aSymbol)
const SCH_ITEM * SelectNextPrevNetNavigatorItem(bool aNext)
void DisplayCurrentSheet()
Draw the current sheet on the display.
const wxString & GetHighlightedConnection() const
void FocusOnItem(SCH_ITEM *aItem)
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
Base class for any item which can be embedded within the SCHEMATIC container class,...
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
virtual bool IsPointClickableAnchor(const VECTOR2I &aPos) const
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 m_ShowPinsElectricalType
void ClearDrawingState()
Clear the state flags of all the items in the screen.
EE_RTREE & Items()
Get the full RTree, usually for iterating.
std::set< SCH_ITEM * > MarkConnections(SCH_LINE *aSegment, bool aSecondPass)
Return all wires and junctions connected to aSegment which are not connected any symbol pin.
bool CheckIfOnDrawList(const SCH_ITEM *aItem) const
EDA_ITEM * GetTopLeftItem(bool onlyModules=false) const override
BOX2I GetBoundingBox() const override
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()
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 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)
virtual KIGFX::VIEW_ITEM * GetItem(unsigned int aIdx) const override
const std::deque< EDA_ITEM * > GetItems() const
void SetIsHover(bool aIsHover)
virtual void Remove(EDA_ITEM *aItem)
virtual unsigned int GetSize() const override
Return the number of stored items.
virtual void Clear() override
Remove all the stored items from the group.
int Size() const
Returns the number of selected parts.
void ClearReferencePoint()
void SetReferencePoint(const VECTOR2I &aP)
bool Empty() const
Checks if there is anything selected.
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,...
An abstract shape on 2D plane.
The symbol library editor main window.
bool GetShowInvisibleFields()
bool IsSymbolAlias() const
Return true if aLibId is an alias for the editor screen symbol.
bool IsSymbolEditable() const
Test if a symbol is loaded and can be edited.
LIB_SYMBOL * GetCurSymbol() const
Return the current symbol being edited or NULL if none selected.
bool GetShowInvisiblePins()
Symbol library viewer main window.
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 ENDPOINT
ends. (Used to support dragging.)
std::uint32_t EDA_ITEM_FLAGS
#define CANDIDATE
flag indicating that the structure is connected
#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_ALT_PIN_FUNCTION
@ ID_POPUP_SCH_UNFOLD_BUS_END
@ ID_POPUP_SCH_SELECT_UNIT
@ ID_POPUP_SCH_SELECT_BASE
@ ID_POPUP_SCH_SELECT_ALT
@ ID_POPUP_SCH_PIN_TRICKS_NET_LABEL
@ 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_PIN_TRICKS_GLOBAL_LABEL
@ ID_POPUP_SCH_PIN_TRICKS_END
@ REPAINT
Item needs to be redrawn.
ELECTRICAL_PINTYPE
The symbol library pin object electrical types used in ERC tests.
std::function< bool(const SELECTION &)> SELECTION_CONDITION
Functor type that checks a specific condition for selected items.
std::vector< FAB_LAYER_COLOR > dummy
bool zoom_to_fit
Zoom to fit items (ignored if center_on_items is off).
bool center_on_items
Automatically pan to cross-probed items.
constexpr int MilsToIU(int mils) const
bool show_directive_labels
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 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