67 if( aSel.GetSize() == 1 )
81 return aSel.GetSize() == 1 && aSel.Front()->Type() ==
SCH_SYMBOL_T;
87 if( aSel.GetSize() == 1 )
101 if( aSel.GetSize() == 1 )
118 return !
static_cast<SCH_MARKER*
>( aSel.Front() )->IsExcluded();
124 return aSel.GetSize() > 1 && aSel.OnlyContains( {
SCH_SYMBOL_T } );
128#define HITTEST_THRESHOLD_PIXELS 5
135 m_isSymbolEditor( false ),
136 m_isSymbolViewer( false ),
172 m_frame = getEditFrame<SCH_BASE_FRAME>();
177 if( symbolEditorFrame )
195 auto schEditSheetPageNumberCondition =
204 auto schEditCondition =
210 auto belowRootSheetCondition =
234 auto symbolDisplayNameIsEditable =
242 return symbEditorFrame
258 menu.AddSeparator( 100 );
262 menu.AddSeparator( 100 );
265 menu.AddSeparator( 100 );
268 menu.AddSeparator( 200 );
281 menu.AddSeparator( 400 );
287 menu.AddSeparator( 1000 );
299 m_frame = getEditFrame<SCH_BASE_FRAME>();
315 if( symbolEditFrame )
343 bool selCancelled =
false;
344 bool displayWireCursor =
false;
345 bool displayBusCursor =
false;
346 bool displayLineCursor =
false;
347 KIID rolloverItem = lastRolloverItem;
351 evt->Modifier(
MD_ALT ) );
391 schframe->FocusOnItem(
nullptr );
410 autostart->SetParameter( params );
415 else if( collector[0]->IsHypertext() )
417 collector[ 0 ]->DoHypertextAction(
m_frame );
437 SelectPoint( evt->Position(), { SCH_LOCATE_ANY_T },
nullptr, &selCancelled );
450 if(
CollectHits( collector, evt->Position(), { SCH_LOCATE_ANY_T } ) )
454 SelectPoint( evt->Position(), { SCH_LOCATE_ANY_T },
nullptr, &selCancelled );
462 else if( evt->IsDblClick(
BUT_LEFT ) )
468 schframe->FocusOnItem(
nullptr );
504 schframe->FocusOnItem(
nullptr );
506 if(
hasModifier() || drag_action == MOUSE_DRAG_ACTION::SELECT )
510 else if(
m_selection.
Empty() && drag_action != MOUSE_DRAG_ACTION::DRAG_ANY )
552 else if( evt->IsMouseDown(
BUT_AUX1 ) )
556 else if( evt->IsMouseDown(
BUT_AUX2 ) )
577 wxString* net =
new wxString( *evt->Parameter<wxString*>() );
581 else if( evt->IsCancelInteractive() )
591 schframe->FocusOnItem(
nullptr );
597 else if( evt->FirstResponder() ==
this && evt->GetCommandId() == (
int) WXK_ESCAPE )
602 editor->ClearHighlight( *evt );
608 schframe->FocusOnItem(
nullptr );
612 else if( evt->IsMotion() && !
m_isSymbolEditor && evt->FirstResponder() ==
this )
631 displayBusCursor =
true;
633 displayWireCursor =
true;
635 displayLineCursor =
true;
637 else if( collector[0]->IsHypertext() && !collector[0]->IsSelected() )
639 rolloverItem = collector[0]->m_Uuid;
649 if( rolloverItem != lastRolloverItem )
668 lastRolloverItem = rolloverItem;
679 if( displayWireCursor )
683 else if( displayBusCursor )
687 else if( displayLineCursor )
691 else if( rolloverItem !=
niluuid )
696 && drag_action == MOUSE_DRAG_ACTION::DRAG_SELECTED
697 && evt->HasPosition()
756 if( possibleConnection.
IsBus() )
761 newEvt->SetHasPosition(
true );
762 newEvt->SetForceImmediate(
true );
775 wxMouseState keyboardState = wxGetMouseState();
778 keyboardState.AltDown() );
793 wxMouseState keyboardState = wxGetMouseState();
796 keyboardState.AltDown() );
817 const std::vector<KICAD_T>& aScanTypes )
821 aCollector.
m_Threshold = std::max( pixelThreshold, gridThreshold );
839 int originalCount = aCollector.
GetCount();
841 for(
int ii = 0; ii < originalCount; ++ii )
843 if( aCollector[ii]->Type() ==
SCH_PIN_T )
847 if( !aCollector.
HasItem(
pin->GetParentSymbol() ) )
848 aCollector.
Append(
pin->GetParentSymbol() );
859 bool aCheckLocked,
bool aSelectedOnly )
861 for(
int i = collector.
GetCount() - 1; i >= 0; --i )
869 if( aCheckLocked && collector[i]->IsLocked() )
875 if( aSelectedOnly && !collector[i]->IsSelected() )
889 EDA_ITEM** aItem,
bool* aSelectionCancelledFlag,
bool aAdd,
890 bool aSubtract,
bool aExclusiveOr )
908 if( aSelectionCancelledFlag )
909 *aSelectionCancelledFlag =
true;
915 if( !aAdd && !aSubtract && !aExclusiveOr )
919 bool anySubtracted =
false;
923 for(
int i = 0; i < aCollector.
GetCount(); ++i )
926 bool isLine = aCollector[i]->Type() ==
SCH_LINE_T;
942 || ( aExclusiveOr && aCollector[i]->IsSelected()
943 && ( !isLine || ( isLine && aCollector[i]->HasFlag( flags ) ) ) ) )
945 aCollector[i]->ClearFlags( flags );
954 anySubtracted =
true;
959 aCollector[i]->SetFlags( flags );
966 if( addedCount == 1 )
970 if( aItem && aCollector.
GetCount() == 1 )
971 *aItem = aCollector[0];
975 else if( addedCount > 1 )
980 else if( anySubtracted )
991 const std::vector<KICAD_T>& aScanTypes,
992 EDA_ITEM** aItem,
bool* aSelectionCancelledFlag,
993 bool aCheckLocked,
bool aAdd,
bool aSubtract,
998 if( !
CollectHits( collector, aWhere, aScanTypes ) )
1003 return selectPoint( collector, aWhere, aItem, aSelectionCancelledFlag, aAdd, aSubtract,
1014 std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> selectedItems;
1015 std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> sheetPins;
1021 view->
Query( selectionBox, selectedItems );
1030 int layer = pair.second;
1037 selectedItems.insert( selectedItems.end(), sheetPins.begin(), sheetPins.end() );
1039 for(
const std::pair<KIGFX::VIEW_ITEM*, int>& item_pair : selectedItems )
1064 std::set<EDA_ITEM*> exactHits;
1066 for(
int i = collector.
GetCount() - 1; i >= 0; --i )
1075 if( line || ( shape && shape->
GetShape() == SHAPE_T::POLY )
1076 || ( shape && shape->
GetShape() == SHAPE_T::ARC ) )
1080 if( item->
HitTest( aPos, pixelThreshold ) )
1081 exactHits.insert( item );
1086 exactHits.insert( item );
1090 if( item->
HitTest( aPos, 0 ) )
1091 exactHits.insert( item );
1095 if( exactHits.size() > 0 && exactHits.size() < (
unsigned) collector.
GetCount() )
1097 for(
int i = collector.
GetCount() - 1; i >= 0; --i )
1101 if( !exactHits.count( item ) )
1111 int closestDist = INT_MAX / 2;
1115 BOX2I bbox = item->GetBoundingBox();
1116 int dist = INT_MAX / 2;
1118 if( exactHits.count( item ) )
1138 if( field->GetParent() && field->GetParent()->Type() ==
SCH_SYMBOL_T )
1140 symbol =
static_cast<SCH_SYMBOL*
>( field->GetParent() );
1146 poss =
SEG( pos, pos );
1150 text->GetEffectiveTextShape(
false )->Collide( poss, closestDist, &dist );
1158 catch(
const boost::bad_pointer& exc )
1162 wxLogError( wxT(
"Boost bad pointer exception '%s' occurred." ), exc.what() );
1170 rect.
Collide( poss, closestDist, &dist );
1183 if( dist == closestDist )
1185 if( item->GetParent() == closest )
1188 else if( dist < closestDist )
1203 for(
int i = collector.
GetCount() - 1; i >= 0; --i )
1207 if( item == closest )
1210 if( !item->
HitTest( tightBox,
true ) )
1230 bool isMoving =
false;
1231 bool anyUnselected =
false;
1236 isMoving |=
static_cast<SCH_ITEM*
>( item )->IsMoving();
1238 if( !item->
IsType( aScanTypes ) )
1241 anyUnselected =
true;
1287 bool cancelled =
false;
1303 bool isGreedy = width < 0;
1306 isGreedy = !isGreedy;
1309 : KICURSOR::SELECT_WINDOW );
1311 if( evt->IsCancelInteractive() || evt->IsActivate() )
1324 area.
SetEnd( evt->Position() );
1342 std::vector<KIGFX::VIEW::LAYER_ITEM_PAIR> nearbyViewItems;
1346 std::unordered_set<EDA_ITEM*> nearbyItems;
1347 std::vector<EDA_ITEM*> nearbyChildren;
1348 std::vector<EDA_ITEM*> flaggedItems;
1354 if( nearbyItems.insert( item ).second )
1360 sch_item->RunOnChildren(
1364 if(
SCH_PIN*
pin = dyn_cast<SCH_PIN*>( aChild ) )
1366 int unit =
pin->GetLibPin()->GetUnit();
1368 if( unit && unit !=
pin->GetParentSymbol()->GetUnit() )
1372 nearbyChildren.push_back( aChild );
1382 bool anyAdded =
false;
1383 bool anySubtracted =
false;
1398 anySubtracted =
true;
1403 if( flags && !anySubtracted )
1416 for(
EDA_ITEM* item : nearbyItems )
1418 bool selected =
false;
1430 if( ( isGreedy && line->
HitTest( selectionRect,
false ) )
1437 else if( !isGreedy )
1456 selected = item->HitTest( selectionRect, !isGreedy );
1463 flaggedItems.push_back( item );
1464 selectItem( item, flags );
1470 for(
EDA_ITEM* item : nearbyChildren )
1476 && !item->GetParent()->HasFlag(
CANDIDATE )
1477 && item->HitTest( selectionRect, !isGreedy ) )
1479 selectItem( item, 0 );
1485 for(
EDA_ITEM* item : flaggedItems )
1505 evt->SetPassEvent();
1531 int thresholdMax = std::max( pixelThreshold, gridThreshold );
1533 for(
int threshold : { 0, thresholdMax/4, thresholdMax/2, thresholdMax } )
1542 return collector.
GetCount() ? collector[ 0 ] :
nullptr;
1564 unsigned done =
false;
1571 if( item->IsType( { SCH_ITEM_LOCATE_WIRE_T, SCH_ITEM_LOCATE_BUS_T } )
1572 && !item->IsSelected() )
1627 double compRatio = bbSize.
y / currTextHeight;
1628 double compRatioBent = 1.0;
1636 std::vector<std::pair<double, double>> lut{ { 1.25, 16 },
1645 std::vector<std::pair<double, double>>::iterator it;
1648 compRatioBent = lut.back().second;
1653 if( compRatio >= lut.front().first )
1655 for( it = lut.begin(); it < lut.end() - 1; it++ )
1657 if( it->first <= compRatio &&
next( it )->first >= compRatio )
1659 double diffx = compRatio - it->first;
1660 double diffn =
next( it )->first - it->first;
1662 compRatioBent = it->second + (
next( it )->second - it->second ) * diffx / diffn;
1669 compRatioBent = lut.front().second;
1679 screenSize.
x = std::max( 10.0, screenSize.
x );
1680 screenSize.
y = std::max( 10.0, screenSize.
y );
1681 double ratio = std::max( -1.0, fabs( bbSize.
y / screenSize.
y ) );
1685 std::max( fabs( bbSize.
x / screenSize.
x ), fabs( bbSize.
y / screenSize.
y ) );
1690 if( bbSize.
x > screenSize.
x * ratio * compRatioBent )
1694 compRatioBent = 1.0;
1695 wxLogTrace(
"CROSS_PROBE_SCALE",
1696 "Part TOO WIDE for screen. Using normal KiCad zoom ratio: %1.5f", ratio );
1701 ratio *= compRatioBent;
1703 bool alwaysZoom =
false;
1706 if( ( ratio < 0.5 || ratio > 1.0 ) || alwaysZoom )
1712 SCH_ITEM* focusItem, std::vector<SCH_ITEM*> items )
1764 if( item.IsSelected() )
1773 if( item->IsSelected() )
1779 item->RunOnChildren(
1797 bool checkVisibilityOnly )
const
1808 switch( aItem->
Type() )
1914 aGroup->
Add( aItem );
1920 sch_item->RunOnChildren(
1971 sch_item->RunOnChildren(
1995 const unsigned GRIP_MARGIN = 20;
2001 BOX2I itemBox = item->ViewBBox();
VECTOR2D mapCoords(const VECTOR2D &aSource)
constexpr EDA_IU_SCALE schIUScale
static TOOL_ACTION cursorLeft
static TOOL_ACTION zoomOutCenter
static TOOL_ACTION zoomIn
static TOOL_ACTION cursorLeftFast
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 cursorUpFast
static TOOL_ACTION panLeft
static TOOL_ACTION updateMenu
static TOOL_ACTION zoomFitScreen
static TOOL_ACTION zoomFitObjects
static TOOL_ACTION zoomInCenter
static TOOL_ACTION panRight
static TOOL_ACTION cursorUp
Cursor control with keyboard.
static TOOL_ACTION cursorRight
static TOOL_ACTION selectAll
CROSS_PROBING_SETTINGS m_CrossProbing
BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
const Vec & GetPosition() const
const Vec GetCenter() const
coord_type GetHeight() const
coord_type GetWidth() const
bool Contains(const Vec &aPoint) const
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
const Vec & GetSize() const
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.
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 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)
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)
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
virtual const wxString & GetText() const
Return the string associated with the text object.
static TOOL_ACTION selectionActivate
Activation of the selection tool.
static TOOL_ACTION properties
static TOOL_ACTION addItemsToSel
Selects a list of items (specified as the event parameter)
static TOOL_ACTION clearHighlight
static TOOL_ACTION selectConnection
If current selection is a wire or bus, expand to entire connection.
static TOOL_ACTION pinTable
static TOOL_ACTION navigateForward
static TOOL_ACTION assignNetclass
static TOOL_ACTION clearSelection
Clears the current selection.
static TOOL_ACTION navigateBack
static TOOL_ACTION selectionMenu
Runs a selection menu to select from a list of items.
static TOOL_ACTION placeClassLabel
static TOOL_ACTION drawWire
static TOOL_ACTION removeItemsFromSel
static TOOL_ACTION drawBus
static TOOL_ACTION finishWire
static TOOL_ACTION selectNode
Select the junction, wire or bus segment under the cursor.
static TOOL_ACTION breakWire
static TOOL_ACTION drawLines
static TOOL_ACTION importSheetPin
static TOOL_ACTION selectOnPCB
static TOOL_ACTION leaveSheet
static TOOL_ACTION placeGlobalLabel
static TOOL_ACTION removeItemFromSel
static TOOL_ACTION placeHierLabel
static TOOL_ACTION addItemToSel
Selects an item (specified as the event parameter).
static TOOL_ACTION symbolProperties
static TOOL_ACTION editPageNumber
static TOOL_ACTION enterSheet
static TOOL_ACTION setUnitDisplayName
static TOOL_ACTION unfoldBus
static TOOL_ACTION placeLabel
static TOOL_ACTION placeJunction
static TOOL_ACTION finishBus
bool m_ShowPinElectricalTypes
static const std::vector< KICAD_T > MovableItems
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.
static SELECTION_CONDITION SingleSymbol
static SELECTION_CONDITION SingleSymbolOrPower
static SELECTION_CONDITION SingleMultiUnitSymbol
static SELECTION_CONDITION SingleNonExcludedMarker
static SELECTION_CONDITION SingleDeMorganSymbol
static SELECTION_CONDITION MultipleSymbolsOrPower
VECTOR2I BestSnapAnchor(const VECTOR2I &aOrigin, int aLayer, SCH_ITEM *aDraggedItem)
Tool that displays edit points allowing to modify items by dragging the points.
bool HasPoint()
Indicate the cursor is over an edit point.
BOX2I GetBoundingBox() const override
EDA_ITEM * GetTopLeftItem(bool onlyModules=false) const override
static const TOOL_EVENT DisambiguatePoint
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.
bool m_ShowPinsElectricalType
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.
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.
virtual 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...
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Converts a screen space point/vector to a point/vector in world space coordinates.
void Hide(VIEW_ITEM *aItem, bool aHide=true)
Temporarily hide the item in the view (e.g.
bool IsMirroredX() const
Return true if view is flipped across the X axis.
std::pair< VIEW_ITEM *, int > LAYER_ITEM_PAIR
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.
The base class for drawable items used by schematic library symbols.
Define a library symbol object.
LIB_ITEMS_CONTAINER & GetDrawItems()
Return a reference to the draw item list.
SCH_SHEET_PATH & CurrentSheet() const override
CONNECTION_GRAPH * ConnectionGraph() const override
void SetCurrentSheet(const SCH_SHEET_PATH &aPath) override
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
KIGFX::SCH_RENDER_SETTINGS * GetRenderSettings()
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 ...
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_SHEET_PATH & GetCurrentSheet() const
SCHEMATIC & Schematic() const
void DisplayCurrentSheet()
Draw the current sheet on the display.
const wxString & GetHighlightedConnection() const
void FocusOnItem(SCH_ITEM *aItem)
Instances are attached to a symbol or sheet and provide a place for the symbol's value,...
Base class for any item which can be embedded within the SCHEMATIC container class,...
SCHEMATIC * Schematic() const
Searches the item hierarchy to find a SCHEMATIC.
virtual bool IsPointClickableAnchor(const VECTOR2I &aPos) const
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
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 ClearDrawingState()
Clear the state flags of all the items in the screen.
EE_RTREE & Items()
Gets 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.
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 symbol placed in a schematic, and is the entry point for a sub schematic.
std::vector< SCH_SHEET_PIN * > & GetPins()
VECTOR2I GetPosition() const override
TRANSFORM & GetTransform()
BOX2I GetBodyAndPinsBoundingBox() const
Return a bounding box for the symbol body and pins but not the fields.
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
BOX2I GetBodyBoundingBox() const
Return a bounding box for the symbol body but not the pins or fields.
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
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,...
The symbol library editor main window.
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.
Symbol library viewer main window.
#define DEFAULT_TEXT_SIZE
Ratio of the font height to the baseline of the text above the wire.
#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_ROLLOVER
Rollover active. Used for hyperlink highlighting.
#define IS_MOVING
Item being moved.
#define SHOW_ELEC_TYPE
Show pin electrical type. Shared with IS_ROLLOVER.
#define STARTPOINT
When a line is selected, these flags indicate which.
@ ID_POPUP_SCH_UNFOLD_BUS_END
@ ID_POPUP_SCH_SELECT_UNIT_CMP
@ ID_POPUP_SCH_UNFOLD_BUS
@ ID_POPUP_SCH_SELECT_UNIT_SYM_MAX
@ REPAINT
Item needs to be redrawn.
std::function< bool(const SELECTION &)> SELECTION_CONDITION
< Functor type that checks a specific condition for selected items.
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 select_pin_selects_symbol
double DistanceLinePoint(const VECTOR2I &linePointA, const VECTOR2I &linePointB, const VECTOR2I &referencePoint)
Compute the distance between a line and a reference point Reference: http://mathworld....
bool HitTestPoints(const VECTOR2I &pointA, const VECTOR2I &pointB, double threshold)
Test, if two points are near each other.
double EuclideanNorm(const VECTOR2I &vector)
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
@ SCH_ITEM_LOCATE_GRAPHIC_LINE_T
@ SCH_SYMBOL_LOCATE_POWER_T
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".