KiCad PCB EDA Suite
SCH_SHAPE Class Reference

#include <sch_shape.h>

Inheritance diagram for SCH_SHAPE:
SCH_ITEM EDA_SHAPE EDA_ITEM KIGFX::VIEW_ITEM INSPECTABLE SCH_TEXTBOX

Public Member Functions

 SCH_SHAPE (SHAPE_T aShape, int aLineWidth=0, FILL_T aFillType=FILL_T::NO_FILL, KICAD_T aType=SCH_SHAPE_T)
 
 ~SCH_SHAPE ()
 
wxString GetClass () const override
 Return the class name. More...
 
void SwapData (SCH_ITEM *aItem) override
 Swap the internal data structures aItem with the schematic item. More...
 
bool HitTest (const VECTOR2I &aPosition, int aAccuracy=0) const override
 Test if aPosition is inside or on the boundary of this item. More...
 
bool HitTest (const BOX2I &aRect, bool aContained, int aAccuracy=0) const override
 Test if aRect intersects this item. More...
 
int GetPenWidth () const override
 
int GetEffectiveWidth () const override
 
bool HasLineStroke () const override
 Check if this schematic item has line stoke properties. More...
 
STROKE_PARAMS GetStroke () const override
 
void SetStroke (const STROKE_PARAMS &aStroke) override
 
PLOT_DASH_TYPE GetEffectiveLineStyle () const
 
const BOX2I GetBoundingBox () const override
 Return the orthogonal bounding box of this object for display purposes. More...
 
VECTOR2I GetPosition () const override
 
void SetPosition (const VECTOR2I &aPos) override
 
VECTOR2I GetCenter () const
 
void BeginEdit (const VECTOR2I &aStartPoint)
 
bool ContinueEdit (const VECTOR2I &aPosition)
 
void CalcEdit (const VECTOR2I &aPosition)
 
void EndEdit ()
 
void SetEditState (int aState)
 
void Move (const VECTOR2I &aOffset) override
 Move the item by aMoveVector to a new position. More...
 
void Normalize ()
 
void MirrorHorizontally (int aCenter) override
 Mirror item horizontally about aCenter. More...
 
void MirrorVertically (int aCenter) override
 Mirror item vertically about aCenter. More...
 
void Rotate (const VECTOR2I &aCenter) override
 Rotate the item around aCenter 90 degrees in the clockwise direction. More...
 
void AddPoint (const VECTOR2I &aPosition)
 
void Plot (PLOTTER *aPlotter, bool aBackground) const override
 Plot the schematic item to aPlotter. More...
 
void GetMsgPanelInfo (EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
 Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes. More...
 
wxString GetSelectMenuText (UNITS_PROVIDER *aUnitsProvider) const override
 Return the text to display to be used in the selection clarification context menu when multiple items are found at the current cursor position. More...
 
BITMAPS GetMenuImage () const override
 Return a pointer to an image to be used in menus. More...
 
EDA_ITEMClone () const override
 Create a duplicate of this item with linked list members set to NULL. More...
 
void ViewGetLayers (int aLayers[], int &aCount) const override
 Return the layers the item is drawn on (which may be more than its "home" layer) More...
 
bool IsType (const std::vector< KICAD_T > &aScanTypes) const override
 Check whether the item is one of the listed types. More...
 
SCH_ITEMDuplicate (bool doClone=false) const
 Routine to create a new copy of given item. More...
 
virtual bool IsMovableFromAnchorPoint () const
 
VECTOR2IGetStoredPos ()
 
void SetStoredPos (const VECTOR2I &aPos)
 
SCHEMATICSchematic () const
 Searches the item hierarchy to find a SCHEMATIC. More...
 
virtual bool IsLocked () const
 
virtual void SetLocked (bool aLocked)
 Set the 'lock' status to aLocked for of this item. More...
 
virtual bool IsHypertext () const
 Allow items to support hypertext actions when hovered/clicked. More...
 
virtual void DoHypertextAction (EDA_DRAW_FRAME *aFrame) const
 
SCH_LAYER_ID GetLayer () const
 Return the layer this item is on. More...
 
void SetLayer (SCH_LAYER_ID aLayer)
 Set the layer this item is on. More...
 
const wxString & GetDefaultFont () const
 
bool RenderAsBitmap (double aWorldScale) const override
 
virtual void GetEndPoints (std::vector< DANGLING_END_ITEM > &aItemList)
 Add the schematic item end points to aItemList if the item has end points. More...
 
virtual bool UpdateDanglingState (std::vector< DANGLING_END_ITEM > &aItemList, const SCH_SHEET_PATH *aPath=nullptr)
 Test the schematic item to aItemList to check if it's dangling state has changed. More...
 
virtual bool IsDangling () const
 
virtual bool CanConnect (const SCH_ITEM *aItem) const
 
virtual bool IsConnectable () const
 
virtual bool IsPointClickableAnchor (const VECTOR2I &aPos) const
 
virtual std::vector< VECTOR2IGetConnectionPoints () const
 Add all the connection points for this item to aPoints. More...
 
void ClearConnections ()
 Clears all of the connection items from the list. More...
 
bool IsConnected (const VECTOR2I &aPoint) const
 Test the item to see if it is connected to aPoint. More...
 
SCH_CONNECTIONConnection (const SCH_SHEET_PATH *aSheet=nullptr) const
 Retrieve the connection associated with this object in the given sheet. More...
 
SCH_ITEM_SETConnectedItems (const SCH_SHEET_PATH &aPath)
 Retrieve the set of items connected to this item on the given sheet. More...
 
void AddConnectionTo (const SCH_SHEET_PATH &aPath, SCH_ITEM *aItem)
 Add a connection link between this item and another. More...
 
SCH_CONNECTIONInitializeConnection (const SCH_SHEET_PATH &aPath, CONNECTION_GRAPH *aGraph)
 Create a new connection object associated with this object. More...
 
SCH_CONNECTIONGetOrInitConnection (const SCH_SHEET_PATH &aPath, CONNECTION_GRAPH *aGraph)
 
virtual bool ConnectionPropagatesTo (const EDA_ITEM *aItem) const
 Return true if this item should propagate connection info to aItem. More...
 
bool IsConnectivityDirty () const
 
void SetConnectivityDirty (bool aDirty=true)
 
virtual void SetLastResolvedState (const SCH_ITEM *aItem)
 
std::shared_ptr< NETCLASSGetEffectiveNetClass (const SCH_SHEET_PATH *aSheet=nullptr) const
 
FIELDS_AUTOPLACED GetFieldsAutoplaced () const
 Return whether the fields have been automatically placed. More...
 
void SetFieldsAutoplaced ()
 
void ClearFieldsAutoplaced ()
 
void AutoAutoplaceFields (SCH_SCREEN *aScreen)
 Autoplace fields only if correct to do so automatically. More...
 
virtual void AutoplaceFields (SCH_SCREEN *aScreen, bool aManual)
 
virtual void RunOnChildren (const std::function< void(SCH_ITEM *)> &aFunction)
 
virtual void ClearCaches ()
 
virtual bool operator< (const SCH_ITEM &aItem) const
 
bool operator< (const EDA_ITEM &aItem) const
 Test if another item is less than this object. More...
 
KICAD_T Type () const
 Returns the type of object. More...
 
EDA_ITEMGetParent () const
 
virtual void SetParent (EDA_ITEM *aParent)
 
bool IsModified () const
 
bool IsNew () const
 
bool IsMoving () const
 
bool IsDragging () const
 
bool IsWireImage () const
 
bool IsSelected () const
 
bool IsEntered () const
 
bool IsResized () const
 
bool IsBrightened () const
 
bool IsRollover () const
 
void SetWireImage ()
 
void SetSelected ()
 
void SetBrightened ()
 
void ClearSelected ()
 
void ClearBrightened ()
 
void SetModified ()
 
int GetState (EDA_ITEM_FLAGS type) const
 
void SetState (EDA_ITEM_FLAGS type, bool state)
 
EDA_ITEM_FLAGS GetStatus () const
 
void SetStatus (EDA_ITEM_FLAGS aStatus)
 
void SetFlags (EDA_ITEM_FLAGS aMask)
 
void ClearFlags (EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
 
EDA_ITEM_FLAGS GetFlags () const
 
bool HasFlag (EDA_ITEM_FLAGS aFlag) const
 
EDA_ITEM_FLAGS GetEditFlags () const
 
void ClearTempFlags ()
 
void ClearEditFlags ()
 
void SetIsShownAsBitmap (bool aBitmap)
 
bool IsShownAsBitmap () const
 
void SetForceVisible (bool aEnable)
 Set and clear force visible flag used to force the item to be drawn even if it's draw attribute is set to not visible. More...
 
bool IsForceVisible () const
 
virtual const VECTOR2I GetFocusPosition () const
 Similar to GetPosition, but allows items to return their visual center rather than their anchor. More...
 
virtual VECTOR2I GetSortPosition () const
 Return the coordinates that should be used for sorting this element visually compared to other elements. More...
 
virtual INSPECT_RESULT Visit (INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &aScanTypes)
 May be re-implemented for each derived class in order to handle all the types given by its member data. More...
 
wxString GetTypeDesc ()
 Return a translated description of the type for this EDA_ITEM for display in user facing messages. More...
 
virtual bool Matches (const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const
 Compare the item against the search criteria in aSearchData. More...
 
virtual bool Replace (const EDA_SEARCH_DATA &aSearchData, void *aAuxData=nullptr)
 Perform a text replace using the find and replace criteria in aSearchData on items that support text find and replace. More...
 
virtual bool IsReplaceable () const
 Override this method in any derived object that supports test find and replace. More...
 
virtual const BOX2I ViewBBox () const override
 Return the bounding box of the item covering all its layers. More...
 
virtual void ViewDraw (int aLayer, VIEW *aView) const
 Draw the parts of the object belonging to layer aLayer. More...
 
virtual double ViewGetLOD (int aLayer, VIEW *aView) const
 Return the level of detail (LOD) of the item. More...
 
VIEW_ITEM_DATA * viewPrivData () const
 
void ClearViewPrivData ()
 
bool Set (PROPERTY_BASE *aProperty, wxAny &aValue)
 
template<typename T >
bool Set (PROPERTY_BASE *aProperty, T aValue)
 
template<typename T >
bool Set (const wxString &aProperty, T aValue)
 
wxAny Get (PROPERTY_BASE *aProperty) const
 
template<typename T >
Get (PROPERTY_BASE *aProperty) const
 
template<typename T >
std::optional< T > Get (const wxString &aProperty) const
 
void SwapShape (EDA_SHAPE *aImage)
 
wxString ShowShape () const
 
wxString SHAPE_T_asString () const
 
bool IsAnnotationProxy () const
 
void SetIsAnnotationProxy (bool aIsProxy=true)
 
bool IsFilled () const
 
void SetFilled (bool aFlag)
 
void SetFillMode (FILL_T aFill)
 
FILL_T GetFillMode () const
 
COLOR4D GetFillColor () const
 
void SetFillColor (const COLOR4D &aColor)
 
void SetWidth (int aWidth)
 
int GetWidth () const
 
void SetShape (SHAPE_T aShape)
 
SHAPE_T GetShape () const
 
const VECTOR2IGetStart () const
 Return the starting point of the graphic. More...
 
int GetStartY () const
 
int GetStartX () const
 
void SetStart (const VECTOR2I &aStart)
 
void SetStartY (int y)
 
void SetStartX (int x)
 
const VECTOR2IGetEnd () const
 Return the ending point of the graphic. More...
 
int GetEndY () const
 
int GetEndX () const
 
void SetEnd (const VECTOR2I &aEnd)
 
void SetEndY (int y)
 
void SetEndX (int x)
 
virtual VECTOR2I GetTopLeft () const
 
virtual VECTOR2I GetBotRight () const
 
virtual void SetTop (int val)
 
virtual void SetLeft (int val)
 
virtual void SetRight (int val)
 
virtual void SetBottom (int val)
 
void SetBezierC1 (const VECTOR2I &aPt)
 
const VECTOR2IGetBezierC1 () const
 
void SetBezierC2 (const VECTOR2I &aPt)
 
const VECTOR2IGetBezierC2 () const
 
VECTOR2I getCenter () const
 
void SetCenter (const VECTOR2I &aCenter)
 
void SetArcAngleAndEnd (const EDA_ANGLE &aAngle, bool aCheckNegativeAngle=false)
 Set the end point from the angle center and start. More...
 
EDA_ANGLE GetArcAngle () const
 
bool EndsSwapped () const
 Have the start and end points been swapped since they were set? More...
 
VECTOR2I GetArcMid () const
 
std::vector< VECTOR2IGetRectCorners () const
 
void CalcArcAngles (EDA_ANGLE &aStartAngle, EDA_ANGLE &aEndAngle) const
 Calc arc start and end angles such that aStartAngle < aEndAngle. More...
 
int GetRadius () const
 
void SetArcGeometry (const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd)
 Set the three controlling points for an arc. More...
 
void SetCachedArcData (const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd, const VECTOR2I &aCenter)
 Set the data used for mid point caching. More...
 
const std::vector< VECTOR2I > & GetBezierPoints () const
 
void DupPolyPointsList (std::vector< VECTOR2I > &aBuffer) const
 Duplicate the list of corners in a std::vector<VECTOR2I> More...
 
int GetPointCount () const
 
SHAPE_POLY_SETGetPolyShape ()
 
const SHAPE_POLY_SETGetPolyShape () const
 
bool IsPolyShapeValid () const
 
void SetPolyShape (const SHAPE_POLY_SET &aShape)
 
void SetPolyPoints (const std::vector< VECTOR2I > &aPoints)
 
void RebuildBezierToSegmentsPointsList (int aMinSegLen)
 Rebuild the m_bezierPoints vertex list that approximate the Bezier curve by a list of segments. More...
 
virtual std::vector< SHAPE * > MakeEffectiveShapes (bool aEdgeOnly=false) const
 Make a set of SHAPE objects representing the EDA_SHAPE. More...
 
void ShapeGetMsgPanelInfo (EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList)
 
double GetLength () const
 Return the length of the track using the hypotenuse calculation. More...
 
void TransformShapeWithClearanceToPolygon (SHAPE_POLY_SET &aCornerBuffer, int aClearanceValue, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth) const
 Convert the shape to a closed polygon. More...
 
int Compare (const EDA_SHAPE *aOther) const
 

Static Public Member Functions

template<class T >
static INSPECT_RESULT IterateForward (std::deque< T > &aList, INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &scanTypes)
 This changes first parameter to avoid the DList and use the main queue instead. More...
 
template<class T >
static INSPECT_RESULT IterateForward (std::vector< T > &aList, INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &scanTypes)
 Change first parameter to avoid the DList and use std::vector instead. More...
 
static bool Replace (const EDA_SEARCH_DATA &aSearchData, wxString &aText)
 Perform a text replace on aText using the find and replace criteria in aSearchData on items that support text find and replace. More...
 
static bool Sort (const EDA_ITEM *aLeft, const EDA_ITEM *aRight)
 Helper function to be used by the C++ STL sort algorithm for sorting a STL container of EDA_ITEM pointers. More...
 

Public Attributes

const KIID m_Uuid
 

Protected Member Functions

bool Matches (const wxString &aText, const EDA_SEARCH_DATA &aSearchData) const
 Compare aText against search criteria in aSearchData. More...
 
void setPosition (const VECTOR2I &aPos)
 
VECTOR2I getPosition () const
 
void move (const VECTOR2I &aMoveVector)
 
void rotate (const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle)
 
void flip (const VECTOR2I &aCentre, bool aFlipLeftRight)
 
void scale (double aScale)
 
const BOX2I getBoundingBox () const
 
void computeArcBBox (BOX2I &aBBox) const
 
bool hitTest (const VECTOR2I &aPosition, int aAccuracy=0) const
 
bool hitTest (const BOX2I &aRect, bool aContained, int aAccuracy=0) const
 
const std::vector< VECTOR2IbuildBezierToSegmentsPointsList (int aMinSegLen) const
 
void beginEdit (const VECTOR2I &aStartPoint)
 
bool continueEdit (const VECTOR2I &aPosition)
 
void calcEdit (const VECTOR2I &aPosition)
 
void endEdit (bool aClosed=true)
 Finishes editing the shape. More...
 
void setEditState (int aState)
 
std::vector< SHAPE * > makeEffectiveShapes (bool aEdgeOnly, bool aLineChainOnly=false) const
 Make a set of SHAPE objects representing the EDA_SHAPE. More...
 

Protected Attributes

SCH_LAYER_ID m_layer
 
EDA_ITEMS m_connections
 
FIELDS_AUTOPLACED m_fieldsAutoplaced
 
VECTOR2I m_storedPos
 
std::map< SCH_SHEET_PATH, SCH_ITEM_SET, SHEET_PATH_CMPm_connected_items
 Store pointers to other items that are connected to this one, per sheet. More...
 
std::unordered_map< SCH_SHEET_PATH, SCH_CONNECTION * > m_connection_map
 Store connectivity information, per sheet. More...
 
bool m_connectivity_dirty
 
EDA_ITEM_FLAGS m_status
 
EDA_ITEMm_parent
 Linked list: Link (parent struct) More...
 
bool m_forceVisible
 
EDA_ITEM_FLAGS m_flags
 
bool m_endsSwapped
 
SHAPE_T m_shape
 
STROKE_PARAMS m_stroke
 
FILL_T m_fill
 
COLOR4D m_fillColor
 
VECTOR2I m_start
 
VECTOR2I m_end
 
VECTOR2I m_arcCenter
 
ARC_MID m_arcMidData
 
VECTOR2I m_bezierC1
 
VECTOR2I m_bezierC2
 
std::vector< VECTOR2Im_bezierPoints
 
SHAPE_POLY_SET m_poly
 
int m_editState
 
bool m_annotationProxy
 

Private Member Functions

void Print (const RENDER_SETTINGS *aSettings, const VECTOR2I &aOffset) override
 Print a schematic item. More...
 
EDA_ANGLE getParentOrientation () const override
 
VECTOR2I getParentPosition () const override
 
virtual bool doIsConnected (const VECTOR2I &aPosition) const
 Provide the object specific test to see if it is connected to aPosition. More...
 

Private Attributes

KICAD_T m_structType
 Run time identification, keep private so it can never be changed after a ctor sets it. More...
 
VIEW_ITEM_DATA * m_viewPrivData
 

Detailed Description

Definition at line 32 of file sch_shape.h.

Constructor & Destructor Documentation

◆ SCH_SHAPE()

SCH_SHAPE::SCH_SHAPE ( SHAPE_T  aShape,
int  aLineWidth = 0,
FILL_T  aFillType = FILL_T::NO_FILL,
KICAD_T  aType = SCH_SHAPE_T 
)

Definition at line 38 of file sch_shape.cpp.

38 :
39 SCH_ITEM( nullptr, aType ),
40 EDA_SHAPE( aShape, aLineWidth, aFillType )
41{
43}
EDA_SHAPE(SHAPE_T aType, int aLineWidth, FILL_T aFill)
Definition: eda_shape.cpp:40
SCH_ITEM(EDA_ITEM *aParent, KICAD_T aType)
Definition: sch_item.cpp:52
void SetLayer(SCH_LAYER_ID aLayer)
Set the layer this item is on.
Definition: sch_item.h:253
@ LAYER_NOTES
Definition: layer_ids.h:358

References LAYER_NOTES, and SCH_ITEM::SetLayer().

Referenced by Clone().

◆ ~SCH_SHAPE()

SCH_SHAPE::~SCH_SHAPE ( )
inline

Definition at line 40 of file sch_shape.h.

40{ }

Member Function Documentation

◆ AddConnectionTo()

void SCH_ITEM::AddConnectionTo ( const SCH_SHEET_PATH aPath,
SCH_ITEM aItem 
)
inherited

Add a connection link between this item and another.

Definition at line 193 of file sch_item.cpp.

194{
195 SCH_ITEM_SET& set = m_connected_items[ aSheet ];
196
197 // The vector elements are small, so reserve 1k at a time to prevent re-allocations
198 if( set.size() == set.capacity() )
199 set.reserve( set.size() + 4096 );
200
201 set.emplace_back( aItem );
202}
std::map< SCH_SHEET_PATH, SCH_ITEM_SET, SHEET_PATH_CMP > m_connected_items
Store pointers to other items that are connected to this one, per sheet.
Definition: sch_item.h:489
std::vector< SCH_ITEM * > SCH_ITEM_SET
Definition: sch_item.h:136

References SCH_ITEM::m_connected_items.

Referenced by SCH_LABEL_BASE::UpdateDanglingState(), and CONNECTION_GRAPH::updateItemConnectivity().

◆ AddPoint()

void SCH_SHAPE::AddPoint ( const VECTOR2I aPosition)

Definition at line 428 of file sch_shape.cpp.

429{
430 if( GetShape() == SHAPE_T::POLY )
431 {
432 if( m_poly.IsEmpty() )
434
435 m_poly.Outline( 0 ).Append( aPosition, true );
436 }
437 else
438 {
440 }
441}
SHAPE_T GetShape() const
Definition: eda_shape.h:111
wxString SHAPE_T_asString() const
Definition: eda_shape.cpp:75
SHAPE_POLY_SET m_poly
Definition: eda_shape.h:378
void Append(int aX, int aY, bool aAllowDuplication=false)
Append a new point at the end of the line chain.
bool IsEmpty() const
SHAPE_LINE_CHAIN & Outline(int aIndex)
int NewOutline()
Creates a new hole in a given outline.
#define UNIMPLEMENTED_FOR(type)
Definition: macros.h:120

References SHAPE_LINE_CHAIN::Append(), EDA_SHAPE::GetShape(), SHAPE_POLY_SET::IsEmpty(), EDA_SHAPE::m_poly, SHAPE_POLY_SET::NewOutline(), SHAPE_POLY_SET::Outline(), POLY, EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by SCH_ALTIUM_PLUGIN::ParsePolygon(), SCH_ALTIUM_PLUGIN::ParsePolyline(), and SCH_ALTIUM_PLUGIN::ParseSignalHarness().

◆ AutoAutoplaceFields()

void SCH_ITEM::AutoAutoplaceFields ( SCH_SCREEN aScreen)
inlineinherited

Autoplace fields only if correct to do so automatically.

Fields that have been moved by hand are not automatically placed.

Parameters
aScreenis the SCH_SCREEN associated with the current instance of the symbol.

Definition at line 427 of file sch_item.h.

428 {
429 if( GetFieldsAutoplaced() )
431 }
FIELDS_AUTOPLACED GetFieldsAutoplaced() const
Return whether the fields have been automatically placed.
Definition: sch_item.h:415
virtual void AutoplaceFields(SCH_SCREEN *aScreen, bool aManual)
Definition: sch_item.h:433
@ FIELDS_AUTOPLACED_MANUAL
Definition: sch_item.h:58

References SCH_ITEM::AutoplaceFields(), FIELDS_AUTOPLACED_MANUAL, and SCH_ITEM::GetFieldsAutoplaced().

Referenced by DIALOG_CHANGE_SYMBOLS::processSymbol(), SCH_EDIT_TOOL::Properties(), SCH_EDIT_TOOL::Rotate(), SCH_SHEET::SCH_SHEET(), SCH_EDIT_FRAME::SelectUnit(), and DIALOG_LABEL_PROPERTIES::TransferDataFromWindow().

◆ AutoplaceFields()

virtual void SCH_ITEM::AutoplaceFields ( SCH_SCREEN aScreen,
bool  aManual 
)
inlinevirtualinherited

◆ BeginEdit()

void SCH_SHAPE::BeginEdit ( const VECTOR2I aStartPoint)
inline

Definition at line 82 of file sch_shape.h.

82{ beginEdit( aStartPoint ); }
void beginEdit(const VECTOR2I &aStartPoint)
Definition: eda_shape.cpp:1210

References EDA_SHAPE::beginEdit().

Referenced by SCH_DRAWING_TOOLS::DrawShape().

◆ beginEdit()

void EDA_SHAPE::beginEdit ( const VECTOR2I aStartPoint)
protectedinherited

Definition at line 1210 of file eda_shape.cpp.

1211{
1212 switch( GetShape() )
1213 {
1214 case SHAPE_T::SEGMENT:
1215 case SHAPE_T::CIRCLE:
1216 case SHAPE_T::RECT:
1217 SetStart( aPosition );
1218 SetEnd( aPosition );
1219 break;
1220
1221 case SHAPE_T::ARC:
1222 SetArcGeometry( aPosition, aPosition, aPosition );
1223 m_editState = 1;
1224 break;
1225
1226 case SHAPE_T::POLY:
1228 m_poly.Outline( 0 ).SetClosed( false );
1229
1230 // Start and end of the first segment (co-located for now)
1231 m_poly.Outline( 0 ).Append( aPosition );
1232 m_poly.Outline( 0 ).Append( aPosition, true );
1233 break;
1234
1235 default:
1237 }
1238}
int m_editState
Definition: eda_shape.h:380
void SetStart(const VECTOR2I &aStart)
Definition: eda_shape.h:120
void SetEnd(const VECTOR2I &aEnd)
Definition: eda_shape.h:145
void SetArcGeometry(const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd)
Set the three controlling points for an arc.
Definition: eda_shape.cpp:508
void SetClosed(bool aClosed)
Mark the line chain as closed (i.e.

References SHAPE_LINE_CHAIN::Append(), ARC, CIRCLE, EDA_SHAPE::GetShape(), EDA_SHAPE::m_editState, EDA_SHAPE::m_poly, SHAPE_POLY_SET::NewOutline(), SHAPE_POLY_SET::Outline(), POLY, RECT, SEGMENT, EDA_SHAPE::SetArcGeometry(), SHAPE_LINE_CHAIN::SetClosed(), EDA_SHAPE::SetEnd(), EDA_SHAPE::SetStart(), EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by BeginEdit(), and LIB_SHAPE::BeginEdit().

◆ buildBezierToSegmentsPointsList()

const std::vector< VECTOR2I > EDA_SHAPE::buildBezierToSegmentsPointsList ( int  aMinSegLen) const
protectedinherited

Definition at line 384 of file eda_shape.cpp.

385{
386 std::vector<VECTOR2I> bezierPoints;
387
388 // Rebuild the m_BezierPoints vertex list that approximate the Bezier curve
389 std::vector<VECTOR2I> ctrlPoints = { m_start, m_bezierC1, m_bezierC2, m_end };
390 BEZIER_POLY converter( ctrlPoints );
391 converter.GetPoly( bezierPoints, aMinSegLen );
392
393 return bezierPoints;
394}
Bezier curves to polygon converter.
Definition: bezier_curves.h:36
VECTOR2I m_start
Definition: eda_shape.h:368
VECTOR2I m_end
Definition: eda_shape.h:369
VECTOR2I m_bezierC1
Definition: eda_shape.h:374
VECTOR2I m_bezierC2
Definition: eda_shape.h:375

References BEZIER_POLY::GetPoly(), EDA_SHAPE::m_bezierC1, EDA_SHAPE::m_bezierC2, EDA_SHAPE::m_end, and EDA_SHAPE::m_start.

Referenced by EDA_SHAPE::makeEffectiveShapes(), and EDA_SHAPE::RebuildBezierToSegmentsPointsList().

◆ CalcArcAngles()

void EDA_SHAPE::CalcArcAngles ( EDA_ANGLE aStartAngle,
EDA_ANGLE aEndAngle 
) const
inherited

Calc arc start and end angles such that aStartAngle < aEndAngle.

Each may be between -360.0 and 360.0.

Definition at line 455 of file eda_shape.cpp.

456{
457 VECTOR2D startRadial( GetStart() - getCenter() );
458 VECTOR2D endRadial( GetEnd() - getCenter() );
459
460 aStartAngle = EDA_ANGLE( startRadial );
461 aEndAngle = EDA_ANGLE( endRadial );
462
463 if( aEndAngle == aStartAngle )
464 aEndAngle = aStartAngle + ANGLE_360; // ring, not null
465
466 if( aStartAngle > aEndAngle )
467 {
468 if( aEndAngle < ANGLE_0 )
469 aEndAngle.Normalize();
470 else
471 aStartAngle = aStartAngle.Normalize() - ANGLE_360;
472 }
473}
EDA_ANGLE Normalize()
Definition: eda_angle.h:249
VECTOR2I getCenter() const
Definition: eda_shape.cpp:397
const VECTOR2I & GetEnd() const
Return the ending point of the graphic.
Definition: eda_shape.h:141
const VECTOR2I & GetStart() const
Return the starting point of the graphic.
Definition: eda_shape.h:116
static constexpr EDA_ANGLE & ANGLE_360
Definition: eda_angle.h:418
static constexpr EDA_ANGLE & ANGLE_0
Definition: eda_angle.h:412

References ANGLE_0, ANGLE_360, EDA_SHAPE::getCenter(), EDA_SHAPE::GetEnd(), EDA_SHAPE::GetStart(), and EDA_ANGLE::Normalize().

Referenced by EDA_SHAPE::computeArcBBox(), KIGFX::PCB_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), EDA_SHAPE::GetArcAngle(), EDA_SHAPE::hitTest(), LIB_SHAPE::Plot(), LIB_SHAPE::print(), and SCH_LEGACY_PLUGIN_CACHE::saveArc().

◆ CalcEdit()

void SCH_SHAPE::CalcEdit ( const VECTOR2I aPosition)
inline

Definition at line 84 of file sch_shape.h.

84{ calcEdit( aPosition ); }
void calcEdit(const VECTOR2I &aPosition)
Definition: eda_shape.cpp:1268

References EDA_SHAPE::calcEdit().

Referenced by SCH_DRAWING_TOOLS::DrawShape(), and EE_POINT_EDITOR::updateParentItem().

◆ calcEdit()

void EDA_SHAPE::calcEdit ( const VECTOR2I aPosition)
protectedinherited

Definition at line 1268 of file eda_shape.cpp.

1269{
1270#define sq( x ) pow( x, 2 )
1271
1272 switch( GetShape() )
1273 {
1274 case SHAPE_T::SEGMENT:
1275 case SHAPE_T::CIRCLE:
1276 case SHAPE_T::RECT:
1277 SetEnd( aPosition );
1278 break;
1279
1280 case SHAPE_T::ARC:
1281 {
1282 int radius = GetRadius();
1283
1284 // Edit state 0: drawing: place start
1285 // Edit state 1: drawing: place end (center calculated for 90-degree subtended angle)
1286 // Edit state 2: point edit: move start (center calculated for invariant subtended angle)
1287 // Edit state 3: point edit: move end (center calculated for invariant subtended angle)
1288 // Edit state 4: point edit: move center
1289 // Edit state 5: point edit: move arc-mid-point
1290
1291 switch( m_editState )
1292 {
1293 case 0:
1294 SetArcGeometry( aPosition, aPosition, aPosition );
1295 return;
1296
1297 case 1:
1298 m_end = aPosition;
1299 radius = KiROUND( sqrt( sq( GetLineLength( m_start, m_end ) ) / 2.0 ) );
1300 break;
1301
1302 case 2:
1303 case 3:
1304 {
1305 VECTOR2I v = m_start - m_end;
1306 double chordBefore = sq( v.x ) + sq( v.y );
1307
1308 if( m_editState == 2 )
1309 m_start = aPosition;
1310 else
1311 m_end = aPosition;
1312
1313 v = m_start - m_end;
1314 double chordAfter = sq( v.x ) + sq( v.y );
1315 double ratio = chordAfter / chordBefore;
1316
1317 if( ratio != 0 )
1318 {
1319 radius = std::max( int( sqrt( sq( radius ) * ratio ) ) + 1,
1320 int( sqrt( chordAfter ) / 2 ) + 1 );
1321 }
1322 }
1323 break;
1324
1325 case 4:
1326 {
1327 double radialA = GetLineLength( m_start, aPosition );
1328 double radialB = GetLineLength( m_end, aPosition );
1329 radius = int( ( radialA + radialB ) / 2.0 ) + 1;
1330 }
1331 break;
1332
1333 case 5:
1334 SetArcGeometry( GetStart(), aPosition, GetEnd() );
1335 return;
1336 }
1337
1338 // Calculate center based on start, end, and radius
1339 //
1340 // Let 'l' be the length of the chord and 'm' the middle point of the chord
1341 double l = GetLineLength( m_start, m_end );
1342 VECTOR2I m = ( m_start + m_end ) / 2;
1343
1344 // Calculate 'd', the vector from the chord midpoint to the center
1345 VECTOR2I d;
1346 d.x = KiROUND( sqrt( sq( radius ) - sq( l/2 ) ) * ( m_start.y - m_end.y ) / l );
1347 d.y = KiROUND( sqrt( sq( radius ) - sq( l/2 ) ) * ( m_end.x - m_start.x ) / l );
1348
1349 VECTOR2I c1 = m + d;
1350 VECTOR2I c2 = m - d;
1351
1352 // Solution gives us 2 centers; we need to pick one:
1353 switch( m_editState )
1354 {
1355 case 1:
1356 {
1357 // Keep center clockwise from chord while drawing
1358 VECTOR2I chordVector = m_end - m_start;
1359 EDA_ANGLE chordAngle( chordVector );
1360
1361 VECTOR2I c1Test = c1;
1362 RotatePoint( c1Test, m_start, -chordAngle.Normalize() );
1363
1364 m_arcCenter = c1Test.x > 0 ? c2 : c1;
1365 }
1366 break;
1367
1368 case 2:
1369 case 3:
1370 // Pick the one closer to the old center
1372 break;
1373
1374 case 4:
1375 // Pick the one closer to the mouse position
1376 m_arcCenter = GetLineLength( c1, aPosition ) < GetLineLength( c2, aPosition ) ? c1 : c2;
1377
1378 if( GetArcAngle() > ANGLE_180 )
1379 std::swap( m_start, m_end );
1380
1381 break;
1382 }
1383 }
1384 break;
1385
1386 case SHAPE_T::POLY:
1387 m_poly.Outline( 0 ).SetPoint( m_poly.Outline( 0 ).GetPointCount() - 1, aPosition );
1388 break;
1389
1390 default:
1392 }
1393}
EDA_ANGLE GetArcAngle() const
Definition: eda_shape.cpp:538
int GetRadius() const
Definition: eda_shape.cpp:476
VECTOR2I m_arcCenter
Definition: eda_shape.h:371
void SetPoint(int aIndex, const VECTOR2I &aPos)
Move a point to a specific location.
virtual size_t GetPointCount() const override
static constexpr EDA_ANGLE & ANGLE_180
Definition: eda_angle.h:416
#define sq(x)
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
Definition: trigo.cpp:183
double GetLineLength(const VECTOR2I &aPointA, const VECTOR2I &aPointB)
Return the length of a line segment defined by aPointA and aPointB.
Definition: trigo.h:188
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:80

References ANGLE_180, ARC, CIRCLE, EDA_SHAPE::GetArcAngle(), EDA_SHAPE::GetEnd(), GetLineLength(), SHAPE_LINE_CHAIN::GetPointCount(), EDA_SHAPE::GetRadius(), EDA_SHAPE::GetShape(), EDA_SHAPE::GetStart(), KiROUND(), EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_editState, EDA_SHAPE::m_end, EDA_SHAPE::m_poly, EDA_SHAPE::m_start, EDA_ANGLE::Normalize(), SHAPE_POLY_SET::Outline(), POLY, RECT, RotatePoint(), SEGMENT, EDA_SHAPE::SetArcGeometry(), EDA_SHAPE::SetEnd(), SHAPE_LINE_CHAIN::SetPoint(), EDA_SHAPE::SHAPE_T_asString(), sq, UNIMPLEMENTED_FOR, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by CalcEdit(), and LIB_SHAPE::CalcEdit().

◆ CanConnect()

virtual bool SCH_ITEM::CanConnect ( const SCH_ITEM aItem) const
inlinevirtualinherited

Reimplemented in SCH_BUS_WIRE_ENTRY, SCH_BUS_BUS_ENTRY, SCH_JUNCTION, SCH_LABEL_BASE, SCH_LINE, SCH_NO_CONNECT, SCH_SHEET, and SCH_SYMBOL.

Definition at line 335 of file sch_item.h.

335{ return m_layer == aItem->GetLayer(); }
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
Definition: sch_item.h:246
SCH_LAYER_ID m_layer
Definition: sch_item.h:482

References SCH_ITEM::GetLayer(), and SCH_ITEM::m_layer.

Referenced by SCH_MOVE_TOOL::getConnectedDragItems().

◆ ClearBrightened()

void EDA_ITEM::ClearBrightened ( )
inlineinherited

Definition at line 122 of file eda_item.h.

void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:143
#define BRIGHTENED
item is drawn with a bright contour

References BRIGHTENED, and EDA_ITEM::ClearFlags().

Referenced by SCH_EDIT_FRAME::FocusOnItem(), PCB_BASE_FRAME::FocusOnItems(), EE_SELECTION_TOOL::unhighlight(), PL_SELECTION_TOOL::unhighlight(), PCB_SELECTION_TOOL::unhighlightInternal(), and SCH_EDITOR_CONTROL::UpdateNetHighlighting().

◆ ClearCaches()

void SCH_ITEM::ClearCaches ( )
virtualinherited

Reimplemented in SCH_FIELD.

Definition at line 251 of file sch_item.cpp.

252{
253 auto clearTextCaches =
254 []( SCH_ITEM* aItem )
255 {
256 EDA_TEXT* text = dynamic_cast<EDA_TEXT*>( aItem );
257
258 if( text )
259 {
260 text->ClearBoundingBoxCache();
261 text->ClearRenderCache();
262 }
263 };
264
265 clearTextCaches( this );
266
267 RunOnChildren( clearTextCaches );
268}
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
Definition: eda_text.h:72
Base class for any item which can be embedded within the SCHEMATIC container class,...
Definition: sch_item.h:147
virtual void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction)
Definition: sch_item.h:435

References SCH_ITEM::RunOnChildren(), and text.

◆ ClearConnections()

void SCH_ITEM::ClearConnections ( )
inlineinherited

Clears all of the connection items from the list.

The vector release method is used to prevent the item pointers from being deleted. Do not use the vector erase method on the connection list.

Definition at line 363 of file sch_item.h.

363{ m_connections.clear(); }
EDA_ITEMS m_connections
Definition: sch_item.h:483

References SCH_ITEM::m_connections.

◆ ClearEditFlags()

◆ ClearFieldsAutoplaced()

◆ ClearFlags()

void EDA_ITEM::ClearFlags ( EDA_ITEM_FLAGS  aMask = EDA_ITEM_ALL_FLAGS)
inlineinherited

Definition at line 143 of file eda_item.h.

143{ m_flags &= ~aMask; }
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:498

References EDA_ITEM::m_flags.

Referenced by FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), PNS_KICAD_IFACE::AddItem(), SCH_EDIT_FRAME::AddItemToScreenAndUndoList(), SCH_MOVE_TOOL::AlignElements(), FOOTPRINT::BuildCourtyardCaches(), EDA_ITEM::ClearBrightened(), EDA_ITEM::ClearEditFlags(), EDA_ITEM::ClearSelected(), EDA_ITEM::ClearTempFlags(), ConvertOutlineToPolygon(), SCH_EDIT_FRAME::ConvertPart(), SYMBOL_EDITOR_EDIT_TOOL::Copy(), FOOTPRINT_EDITOR_CONTROL::CreateFootprint(), SYMBOL_EDITOR_PIN_TOOL::CreateImagePins(), MICROWAVE_TOOL::createMicrowaveInductor(), DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES(), KIGFX::SCH_PAINTER::draw(), SCH_ITEM::Duplicate(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), PCB_EDIT_FRAME::ExchangeFootprint(), PCB_SELECTION_TOOL::ExitGroup(), SYMBOL_EDIT_FRAME::GetSymbolFromRedoList(), SYMBOL_EDIT_FRAME::GetSymbolFromUndoList(), FOOTPRINT_EDITOR_CONTROL::ImportFootprint(), DRC_TEST_PROVIDER_COURTYARD_CLEARANCE_ON_MOVE::Init(), EE_COLLECTOR::Inspect(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromLibrary(), FOOTPRINT_EDITOR_CONTROL::NewFootprint(), DIALOG_SYMBOL_PROPERTIES::OnUnitChoice(), FOOTPRINT_EDIT_FRAME::OpenProjectFiles(), PCB_BASE_FRAME::PlaceFootprint(), SYMBOL_EDITOR_PIN_TOOL::PlacePin(), BOARD_COMMIT::Push(), PCB_SELECTION_TOOL::RebuildSelection(), PAD_TOOL::RecombinePad(), SCH_EDIT_TOOL::RepeatDrawItem(), SYMBOL_EDIT_FRAME::RollbackSymbolFromUndo(), DRC_TEST_PROVIDER_DISALLOW::Run(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), SCH_SEXPR_PLUGIN_CACHE::savePin(), SCH_EDIT_FRAME::SelectUnit(), EDA_ITEM::SetIsShownAsBitmap(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), SCH_DRAWING_TOOLS::TwoClickPlace(), and EE_SELECTION_TOOL::unhighlight().

◆ ClearSelected()

◆ ClearTempFlags()

void EDA_ITEM::ClearTempFlags ( )
inlineinherited

Definition at line 155 of file eda_item.h.

156 {
158 }
#define IS_LINKED
Used in calculation to mark linked items (temporary use)
#define SELECTED_BY_DRAG
Item was algorithmically selected as a dragged item.
#define DO_NOT_DRAW
Used to disable draw function.
#define SKIP_STRUCT
flag indicating that the structure should be ignored
#define CANDIDATE
flag indicating that the structure is connected

References CANDIDATE, EDA_ITEM::ClearFlags(), DO_NOT_DRAW, IS_LINKED, SELECTED_BY_DRAG, and SKIP_STRUCT.

Referenced by PCB_EDIT_FRAME::OpenProjectFiles(), and SCH_EDIT_FRAME::PutDataInPreviousState().

◆ ClearViewPrivData()

void KIGFX::VIEW_ITEM::ClearViewPrivData ( )
inlineinherited

Definition at line 143 of file view_item.h.

144 {
145 m_viewPrivData = nullptr;
146 }
VIEW_ITEM_DATA * m_viewPrivData
Definition: view_item.h:151

References KIGFX::VIEW_ITEM::m_viewPrivData.

Referenced by KIGFX::VIEW::OnDestroy().

◆ Clone()

EDA_ITEM * SCH_SHAPE::Clone ( ) const
overridevirtual

Create a duplicate of this item with linked list members set to NULL.

The default version will return NULL in release builds and likely crash the program. In debug builds, a warning message indicating the derived class has not implemented cloning. This really should be a pure virtual function. Due to the fact that there are so many objects derived from EDA_ITEM, the decision was made to return NULL until all the objects derived from EDA_ITEM implement cloning. Once that happens, this function should be made pure.

Returns
A clone of the item.

Reimplemented from EDA_ITEM.

Reimplemented in SCH_TEXTBOX.

Definition at line 46 of file sch_shape.cpp.

47{
48 return new SCH_SHAPE( *this );
49}
SCH_SHAPE(SHAPE_T aShape, int aLineWidth=0, FILL_T aFillType=FILL_T::NO_FILL, KICAD_T aType=SCH_SHAPE_T)
Definition: sch_shape.cpp:38

References SCH_SHAPE().

Referenced by SCH_DRAWING_TOOLS::DrawShape().

◆ Compare()

int EDA_SHAPE::Compare ( const EDA_SHAPE aOther) const
inherited

Definition at line 1451 of file eda_shape.cpp.

1452{
1453#define EPSILON 2 // Should be enough for rounding errors on calculated items
1454
1455#define TEST( a, b ) { if( a != b ) return a - b; }
1456#define TEST_E( a, b ) { if( abs( a - b ) > EPSILON ) return a - b; }
1457#define TEST_PT( a, b ) { TEST_E( a.x, b.x ); TEST_E( a.y, b.y ); }
1458
1459 TEST_PT( m_start, aOther->m_start );
1460 TEST_PT( m_end, aOther->m_end );
1461
1462 TEST( (int) m_shape, (int) aOther->m_shape );
1463
1464 if( m_shape == SHAPE_T::ARC )
1465 {
1466 TEST_PT( m_arcCenter, aOther->m_arcCenter );
1467 }
1468 else if( m_shape == SHAPE_T::BEZIER )
1469 {
1470 TEST_PT( m_bezierC1, aOther->m_bezierC1 );
1471 TEST_PT( m_bezierC2, aOther->m_bezierC2 );
1472 }
1473 else if( m_shape == SHAPE_T::POLY )
1474 {
1476 }
1477
1478 for( size_t ii = 0; ii < m_bezierPoints.size(); ++ii )
1479 TEST_PT( m_bezierPoints[ii], aOther->m_bezierPoints[ii] );
1480
1481 for( int ii = 0; ii < m_poly.TotalVertices(); ++ii )
1482 TEST_PT( m_poly.CVertex( ii ), aOther->m_poly.CVertex( ii ) );
1483
1484 TEST_E( m_stroke.GetWidth(), aOther->m_stroke.GetWidth() );
1485 TEST( (int) m_stroke.GetPlotStyle(), (int) aOther->m_stroke.GetPlotStyle() );
1486 TEST( (int) m_fill, (int) aOther->m_fill );
1487
1488 return 0;
1489}
SHAPE_T m_shape
Definition: eda_shape.h:363
std::vector< VECTOR2I > m_bezierPoints
Definition: eda_shape.h:377
STROKE_PARAMS m_stroke
Definition: eda_shape.h:364
FILL_T m_fill
Definition: eda_shape.h:365
int TotalVertices() const
Delete aIdx-th polygon from the set.
const VECTOR2I & CVertex(int aIndex, int aOutline, int aHole) const
Return the aGlobalIndex-th vertex in the poly set.
int GetWidth() const
Definition: stroke_params.h:98
PLOT_DASH_TYPE GetPlotStyle() const
#define TEST_PT(a, b)
#define TEST(a, b)
#define TEST_E(a, b)

References ARC, BEZIER, SHAPE_POLY_SET::CVertex(), STROKE_PARAMS::GetPlotStyle(), STROKE_PARAMS::GetWidth(), EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_bezierC1, EDA_SHAPE::m_bezierC2, EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_end, EDA_SHAPE::m_fill, EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, EDA_SHAPE::m_start, EDA_SHAPE::m_stroke, POLY, TEST, TEST_E, TEST_PT, and SHAPE_POLY_SET::TotalVertices().

Referenced by LIB_SHAPE::compare(), LIB_TEXTBOX::compare(), and BOARD::cmp_drawings::operator()().

◆ computeArcBBox()

void EDA_SHAPE::computeArcBBox ( BOX2I aBBox) const
protectedinherited

Definition at line 1019 of file eda_shape.cpp.

1020{
1021 // Start, end, and each inflection point the arc crosses will enclose the entire arc.
1022 // Only include the center when filled; it's not necessarily inside the BB of an unfilled
1023 // arc with a small included angle.
1024 aBBox.SetOrigin( m_start );
1025 aBBox.Merge( m_end );
1026
1027 if( IsFilled() )
1028 aBBox.Merge( m_arcCenter );
1029
1030 int radius = GetRadius();
1031 EDA_ANGLE t1, t2;
1032
1033 CalcArcAngles( t1, t2 );
1034
1035 t1.Normalize();
1036 t2.Normalize();
1037
1038 if( t2 > t1 )
1039 {
1040 if( t1 < ANGLE_0 && t2 > ANGLE_0 )
1041 aBBox.Merge( VECTOR2I( m_arcCenter.x + radius, m_arcCenter.y ) ); // right
1042
1043 if( t1 < ANGLE_90 && t2 > ANGLE_90 )
1044 aBBox.Merge( VECTOR2I( m_arcCenter.x, m_arcCenter.y + radius ) ); // down
1045
1046 if( t1 < ANGLE_180 && t2 > ANGLE_180 )
1047 aBBox.Merge( VECTOR2I( m_arcCenter.x - radius, m_arcCenter.y ) ); // left
1048
1049 if( t1 < ANGLE_270 && t2 > ANGLE_270 )
1050 aBBox.Merge( VECTOR2I( m_arcCenter.x, m_arcCenter.y - radius ) ); // up
1051 }
1052 else
1053 {
1054 if( t1 < ANGLE_0 || t2 > ANGLE_0 )
1055 aBBox.Merge( VECTOR2I( m_arcCenter.x + radius, m_arcCenter.y ) ); // right
1056
1057 if( t1 < ANGLE_90 || t2 > ANGLE_90 )
1058 aBBox.Merge( VECTOR2I( m_arcCenter.x, m_arcCenter.y + radius ) ); // down
1059
1060 if( t1 < ANGLE_180 || t2 > ANGLE_180 )
1061 aBBox.Merge( VECTOR2I( m_arcCenter.x - radius, m_arcCenter.y ) ); // left
1062
1063 if( t1 < ANGLE_270 || t2 > ANGLE_270 )
1064 aBBox.Merge( VECTOR2I( m_arcCenter.x, m_arcCenter.y - radius ) ); // up
1065 }
1066}
void SetOrigin(const Vec &pos)
Definition: box2.h:202
BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: box2.h:588
bool IsFilled() const
Definition: eda_shape.h:90
void CalcArcAngles(EDA_ANGLE &aStartAngle, EDA_ANGLE &aEndAngle) const
Calc arc start and end angles such that aStartAngle < aEndAngle.
Definition: eda_shape.cpp:455
static constexpr EDA_ANGLE & ANGLE_90
Definition: eda_angle.h:414
static constexpr EDA_ANGLE & ANGLE_270
Definition: eda_angle.h:417
VECTOR2< int > VECTOR2I
Definition: vector2d.h:618

References ANGLE_0, ANGLE_180, ANGLE_270, ANGLE_90, EDA_SHAPE::CalcArcAngles(), EDA_SHAPE::GetRadius(), EDA_SHAPE::IsFilled(), EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_end, EDA_SHAPE::m_start, BOX2< Vec >::Merge(), EDA_ANGLE::Normalize(), BOX2< Vec >::SetOrigin(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by EDA_SHAPE::getBoundingBox().

◆ ConnectedItems()

SCH_ITEM_SET & SCH_ITEM::ConnectedItems ( const SCH_SHEET_PATH aPath)
inherited

Retrieve the set of items connected to this item on the given sheet.

Definition at line 187 of file sch_item.cpp.

188{
189 return m_connected_items[ aSheet ];
190}

References SCH_ITEM::m_connected_items.

Referenced by addConnections(), SCH_EDIT_FRAME::AddItemToScreenAndUndoList(), SCH_LINE::FindWireSegmentNetNameRecursive(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem().

◆ Connection()

SCH_CONNECTION * SCH_ITEM::Connection ( const SCH_SHEET_PATH aSheet = nullptr) const
inherited

Retrieve the connection associated with this object in the given sheet.

Note
The returned value can be nullptr.

Definition at line 146 of file sch_item.cpp.

147{
148 if( !IsConnectable() )
149 return nullptr;
150
151 wxCHECK_MSG( !IsConnectivityDirty(), nullptr,
152 wxT( "Shouldn't be asking for connection if connectivity is dirty!" ) );
153
154 if( !aSheet )
155 aSheet = &Schematic()->CurrentSheet();
156
157 auto it = m_connection_map.find( *aSheet );
158
159 if( it == m_connection_map.end() )
160 return nullptr;
161 else
162 return it->second;
163}
SCH_SHEET_PATH & CurrentSheet() const override
Definition: schematic.h:119
virtual bool IsConnectable() const
Definition: sch_item.h:340
SCHEMATIC * Schematic() const
Searches the item hierarchy to find a SCHEMATIC.
Definition: sch_item.cpp:112
bool IsConnectivityDirty() const
Definition: sch_item.h:404
std::unordered_map< SCH_SHEET_PATH, SCH_CONNECTION * > m_connection_map
Store connectivity information, per sheet.
Definition: sch_item.h:492

References SCHEMATIC::CurrentSheet(), SCH_ITEM::IsConnectable(), SCH_ITEM::IsConnectivityDirty(), SCH_ITEM::m_connection_map, and SCH_ITEM::Schematic().

Referenced by CONNECTION_SUBGRAPH::Absorb(), CONNECTION_SUBGRAPH::AddItem(), CONNECTION_GRAPH::buildConnectionGraph(), KIGFX::SCH_PAINTER::draw(), CONNECTION_GRAPH::ercCheckBusToBusConflicts(), CONNECTION_GRAPH::ercCheckBusToBusEntryConflicts(), CONNECTION_GRAPH::GetBusesNeedingMigration(), SCH_ITEM::GetEffectiveNetClass(), SCH_BUS_ENTRY_BASE::GetMsgPanelInfo(), SCH_LABEL_BASE::GetMsgPanelInfo(), SCH_LINE::GetMsgPanelInfo(), SCH_PIN::GetMsgPanelInfo(), CONNECTION_SUBGRAPH::GetNetName(), SCH_ITEM::GetOrInitConnection(), highlightNet(), SCH_ITEM::InitializeConnection(), SCH_LABEL_BASE::Plot(), SCH_LINE::Plot(), SCH_TEXT::Plot(), SCH_LABEL_BASE::Print(), SCH_EDIT_FRAME::RecalculateConnections(), CONNECTION_SUBGRAPH::ResolveDrivers(), SCH_LABEL_BASE::ResolveTextVar(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::TransferDataToWindow(), BUS_UNFOLD_MENU::update(), SCH_EDITOR_CONTROL::UpdateNetHighlighting(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem().

◆ ConnectionPropagatesTo()

virtual bool SCH_ITEM::ConnectionPropagatesTo ( const EDA_ITEM aItem) const
inlinevirtualinherited

Return true if this item should propagate connection info to aItem.

Reimplemented in SCH_BUS_WIRE_ENTRY, SCH_LINE, and SCH_PIN.

Definition at line 402 of file sch_item.h.

402{ return true; }

◆ ContinueEdit()

bool SCH_SHAPE::ContinueEdit ( const VECTOR2I aPosition)
inline

Definition at line 83 of file sch_shape.h.

83{ return continueEdit( aPosition ); }
bool continueEdit(const VECTOR2I &aPosition)
Definition: eda_shape.cpp:1241

References EDA_SHAPE::continueEdit().

Referenced by SCH_DRAWING_TOOLS::DrawShape().

◆ continueEdit()

bool EDA_SHAPE::continueEdit ( const VECTOR2I aPosition)
protectedinherited

Definition at line 1241 of file eda_shape.cpp.

1242{
1243 switch( GetShape() )
1244 {
1245 case SHAPE_T::ARC:
1246 case SHAPE_T::SEGMENT:
1247 case SHAPE_T::CIRCLE:
1248 case SHAPE_T::RECT:
1249 return false;
1250
1251 case SHAPE_T::POLY:
1252 {
1253 SHAPE_LINE_CHAIN& poly = m_poly.Outline( 0 );
1254
1255 // do not add zero-length segments
1256 if( poly.CPoint( poly.GetPointCount() - 2 ) != poly.CLastPoint() )
1257 poly.Append( aPosition, true );
1258 }
1259 return true;
1260
1261 default:
1263 return false;
1264 }
1265}
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
const VECTOR2I & CLastPoint() const
Return the last point in the line chain.

References SHAPE_LINE_CHAIN::Append(), ARC, CIRCLE, SHAPE_LINE_CHAIN::CLastPoint(), SHAPE_LINE_CHAIN::CPoint(), SHAPE_LINE_CHAIN::GetPointCount(), EDA_SHAPE::GetShape(), EDA_SHAPE::m_poly, SHAPE_POLY_SET::Outline(), POLY, RECT, SEGMENT, EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by ContinueEdit(), and LIB_SHAPE::ContinueEdit().

◆ DoHypertextAction()

virtual void SCH_ITEM::DoHypertextAction ( EDA_DRAW_FRAME aFrame) const
inlinevirtualinherited

Reimplemented in SCH_FIELD, SCH_TEXT, and SCH_TEXTBOX.

Definition at line 241 of file sch_item.h.

241{ }

◆ doIsConnected()

virtual bool SCH_ITEM::doIsConnected ( const VECTOR2I aPosition) const
inlineprivatevirtualinherited

Provide the object specific test to see if it is connected to aPosition.

Note
Override this function if the derived object can be connect to another object such as a wire, bus, or junction. Do not override this function for objects that cannot have connections. The default will always return false. This functions is call through the public function IsConnected() which performs tests common to all schematic items before calling the item specific connection testing.
Parameters
aPositionis a reference to a VECTOR2I object containing the test position.
Returns
True if connection to aPosition exists.

Reimplemented in SCH_BUS_ENTRY_BASE, SCH_JUNCTION, SCH_LABEL, SCH_GLOBALLABEL, SCH_HIERLABEL, SCH_LINE, SCH_NO_CONNECT, SCH_SHEET, and SCH_SYMBOL.

Definition at line 479 of file sch_item.h.

479{ return false; }

Referenced by SCH_ITEM::IsConnected().

◆ Duplicate()

SCH_ITEM * SCH_ITEM::Duplicate ( bool  doClone = false) const
inherited

Routine to create a new copy of given item.

The new object is not put in draw list (not linked).

Parameters
doClone(default = false) indicates unique values (such as timestamp and sheet name) should be duplicated. Use only for undo/redo operations.

Definition at line 93 of file sch_item.cpp.

94{
95 SCH_ITEM* newItem = (SCH_ITEM*) Clone();
96
97 if( !doClone )
98 const_cast<KIID&>( newItem->m_Uuid ) = KIID();
99
100 newItem->ClearFlags( SELECTED | BRIGHTENED );
101
102 newItem->RunOnChildren(
103 []( SCH_ITEM* aChild )
104 {
105 aChild->ClearFlags( SELECTED | BRIGHTENED );
106 } );
107
108 return newItem;
109}
const KIID m_Uuid
Definition: eda_item.h:492
virtual EDA_ITEM * Clone() const
Create a duplicate of this item with linked list members set to NULL.
Definition: eda_item.cpp:82
Definition: kiid.h:47

References BRIGHTENED, EDA_ITEM::ClearFlags(), EDA_ITEM::Clone(), EDA_ITEM::m_Uuid, SCH_ITEM::RunOnChildren(), and SELECTED.

Referenced by SCH_EDIT_FRAME::BreakSegment(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), CADSTAR_SCH_ARCHIVE_LOADER::loadItemOntoKiCadSheet(), SCH_EAGLE_PLUGIN::loadSchematic(), SCH_DRAWING_TOOLS::PlaceSymbol(), SCH_EDIT_TOOL::RepeatDrawItem(), SCH_EDIT_FRAME::SaveCopyInUndoList(), and SCH_LINE_WIRE_BUS_TOOL::startSegments().

◆ DupPolyPointsList()

void EDA_SHAPE::DupPolyPointsList ( std::vector< VECTOR2I > &  aBuffer) const
inherited

Duplicate the list of corners in a std::vector<VECTOR2I>

It must be used only to convert the SHAPE_POLY_SET internal corner buffer to a list of VECTOR2Is, and nothing else, because it duplicates the buffer, that is inefficient to know for instance the corner count

Definition at line 1170 of file eda_shape.cpp.

1171{
1172 if( m_poly.OutlineCount() )
1173 {
1174 int pointCount = m_poly.COutline( 0 ).PointCount();
1175
1176 if( pointCount )
1177 {
1178 aBuffer.reserve( pointCount );
1179
1180 for ( auto iter = m_poly.CIterate(); iter; iter++ )
1181 aBuffer.emplace_back( iter->x, iter->y );
1182 }
1183 }
1184}
int PointCount() const
Return the number of points (vertices) in this line chain.
CONST_ITERATOR CIterate(int aFirst, int aLast, bool aIterateHoles=false) const
int OutlineCount() const
Return the number of vertices in a given outline/hole.
const SHAPE_LINE_CHAIN & COutline(int aIndex) const

References SHAPE_POLY_SET::CIterate(), SHAPE_POLY_SET::COutline(), EDA_SHAPE::m_poly, SHAPE_POLY_SET::OutlineCount(), and SHAPE_LINE_CHAIN::PointCount().

Referenced by PCB_GRID_HELPER::computeAnchors(), BRDITEMS_PLOTTER::PlotFootprintShape(), EDA_SHAPE::TransformShapeWithClearanceToPolygon(), and PCB_POINT_EDITOR::updatePoints().

◆ EndEdit()

void SCH_SHAPE::EndEdit ( )
inline

Definition at line 85 of file sch_shape.h.

85{ endEdit(); }
void endEdit(bool aClosed=true)
Finishes editing the shape.
Definition: eda_shape.cpp:1396

References EDA_SHAPE::endEdit().

Referenced by SCH_DRAWING_TOOLS::DrawShape().

◆ endEdit()

void EDA_SHAPE::endEdit ( bool  aClosed = true)
protectedinherited

Finishes editing the shape.

Parameters
aClosedShould polygon shapes be closed (yes for pcbnew/fpeditor, no for libedit)

Definition at line 1396 of file eda_shape.cpp.

1397{
1398 switch( GetShape() )
1399 {
1400 case SHAPE_T::ARC:
1401 case SHAPE_T::SEGMENT:
1402 case SHAPE_T::CIRCLE:
1403 case SHAPE_T::RECT:
1404 break;
1405
1406 case SHAPE_T::POLY:
1407 {
1408 SHAPE_LINE_CHAIN& poly = m_poly.Outline( 0 );
1409
1410 // do not include last point twice
1411 if( poly.GetPointCount() > 2 )
1412 {
1413 if( poly.CPoint( poly.GetPointCount() - 2 ) == poly.CLastPoint() )
1414 {
1415 poly.SetClosed( aClosed );
1416 poly.Remove( poly.GetPointCount() - 1 );
1417 }
1418 }
1419 }
1420 break;
1421
1422 default:
1424 }
1425}
void Remove(int aStartIndex, int aEndIndex)
Remove the range of points [start_index, end_index] from the line chain.

References ARC, CIRCLE, SHAPE_LINE_CHAIN::CLastPoint(), SHAPE_LINE_CHAIN::CPoint(), SHAPE_LINE_CHAIN::GetPointCount(), EDA_SHAPE::GetShape(), EDA_SHAPE::m_poly, SHAPE_POLY_SET::Outline(), POLY, RECT, SHAPE_LINE_CHAIN::Remove(), SEGMENT, SHAPE_LINE_CHAIN::SetClosed(), EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by EndEdit(), and LIB_SHAPE::EndEdit().

◆ EndsSwapped()

bool EDA_SHAPE::EndsSwapped ( ) const
inlineinherited

Have the start and end points been swapped since they were set?

Returns
true if they have

Definition at line 191 of file eda_shape.h.

191{ return m_endsSwapped; }
bool m_endsSwapped
Definition: eda_shape.h:362

References EDA_SHAPE::m_endsSwapped.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::makeTracksFromShapes().

◆ flip()

void EDA_SHAPE::flip ( const VECTOR2I aCentre,
bool  aFlipLeftRight 
)
protectedinherited

Definition at line 285 of file eda_shape.cpp.

286{
287 switch ( m_shape )
288 {
289 case SHAPE_T::SEGMENT:
290 case SHAPE_T::RECT:
291 if( aFlipLeftRight )
292 {
293 m_start.x = aCentre.x - ( m_start.x - aCentre.x );
294 m_end.x = aCentre.x - ( m_end.x - aCentre.x );
295 }
296 else
297 {
298 m_start.y = aCentre.y - ( m_start.y - aCentre.y );
299 m_end.y = aCentre.y - ( m_end.y - aCentre.y );
300 }
301
302 std::swap( m_start, m_end );
303 break;
304
305 case SHAPE_T::CIRCLE:
306 if( aFlipLeftRight )
307 {
308 m_start.x = aCentre.x - ( m_start.x - aCentre.x );
309 m_end.x = aCentre.x - ( m_end.x - aCentre.x );
310 }
311 else
312 {
313 m_start.y = aCentre.y - ( m_start.y - aCentre.y );
314 m_end.y = aCentre.y - ( m_end.y - aCentre.y );
315 }
316 break;
317
318 case SHAPE_T::ARC:
319 if( aFlipLeftRight )
320 {
321 m_start.x = aCentre.x - ( m_start.x - aCentre.x );
322 m_end.x = aCentre.x - ( m_end.x - aCentre.x );
323 m_arcCenter.x = aCentre.x - ( m_arcCenter.x - aCentre.x );
324 }
325 else
326 {
327 m_start.y = aCentre.y - ( m_start.y - aCentre.y );
328 m_end.y = aCentre.y - ( m_end.y - aCentre.y );
329 m_arcCenter.y = aCentre.y - ( m_arcCenter.y - aCentre.y );
330 }
331
332 std::swap( m_start, m_end );
333 break;
334
335 case SHAPE_T::POLY:
336 m_poly.Mirror( aFlipLeftRight, !aFlipLeftRight, aCentre );
337 break;
338
339 case SHAPE_T::BEZIER:
340 if( aFlipLeftRight )
341 {
342 m_start.x = aCentre.x - ( m_start.x - aCentre.x );
343 m_end.x = aCentre.x - ( m_end.x - aCentre.x );
344 m_bezierC1.x = aCentre.x - ( m_bezierC1.x - aCentre.x );
345 m_bezierC2.x = aCentre.x - ( m_bezierC2.x - aCentre.x );
346 }
347 else
348 {
349 m_start.y = aCentre.y - ( m_start.y - aCentre.y );
350 m_end.y = aCentre.y - ( m_end.y - aCentre.y );
351 m_bezierC1.y = aCentre.y - ( m_bezierC1.y - aCentre.y );
352 m_bezierC2.y = aCentre.y - ( m_bezierC2.y - aCentre.y );
353 }
354
355 // Rebuild the poly points shape
356 {
357 std::vector<VECTOR2I> ctrlPoints = { m_start, m_bezierC1, m_bezierC2, m_end };
358 BEZIER_POLY converter( ctrlPoints );
359 converter.GetPoly( m_bezierPoints, m_stroke.GetWidth() );
360 }
361 break;
362
363 default:
365 break;
366 }
367}
void Mirror(bool aX=true, bool aY=false, const VECTOR2I &aRef={ 0, 0 })
Mirror the line points about y or x (or both)

References ARC, BEZIER, CIRCLE, BEZIER_POLY::GetPoly(), STROKE_PARAMS::GetWidth(), EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_bezierC1, EDA_SHAPE::m_bezierC2, EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_end, EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, EDA_SHAPE::m_start, EDA_SHAPE::m_stroke, SHAPE_POLY_SET::Mirror(), POLY, RECT, SEGMENT, EDA_SHAPE::SHAPE_T_asString(), UNIMPLEMENTED_FOR, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by PCB_SHAPE::Flip(), LIB_SHAPE::MirrorHorizontal(), MirrorHorizontally(), LIB_SHAPE::MirrorVertical(), and MirrorVertically().

◆ Get() [1/3]

template<typename T >
std::optional< T > INSPECTABLE::Get ( const wxString &  aProperty) const
inlineinherited

Definition at line 104 of file inspectable.h.

105 {
107 TYPE_ID thisType = TYPE_HASH( *this );
108 PROPERTY_BASE* prop = propMgr.GetProperty( thisType, aProperty );
109 std::optional<T> ret;
110
111 if( prop )
112 {
113 const void* object = propMgr.TypeCast( this, thisType, prop->OwnerHash() );
114
115 if( object )
116 ret = prop->get<T>( object );
117 }
118
119 return ret;
120 }
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.
T get(const void *aObject) const
Definition: property.h:270
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:63
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
PROPERTY_BASE * GetProperty(TYPE_ID aType, const wxString &aProperty) const
Return a property for a specific type.
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
#define TYPE_HASH(x)
Definition: property.h:60
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42

References PROPERTY_BASE::get(), PROPERTY_MANAGER::GetProperty(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ Get() [2/3]

wxAny INSPECTABLE::Get ( PROPERTY_BASE aProperty) const
inlineinherited

Definition at line 84 of file inspectable.h.

85 {
87 const void* object = propMgr.TypeCast( this, TYPE_HASH( *this ), aProperty->OwnerHash() );
88 return object ? aProperty->getter( object ) : wxAny();
89 }
virtual wxAny getter(const void *aObject) const =0

References PROPERTY_BASE::getter(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

Referenced by BOOST_AUTO_TEST_CASE(), CLASS_D_DESC::CLASS_D_DESC(), EDA_SHAPE_DESC::EDA_SHAPE_DESC(), PCB_EXPR_VAR_REF::GetValue(), and PAD_DESC::PAD_DESC().

◆ Get() [3/3]

template<typename T >
T INSPECTABLE::Get ( PROPERTY_BASE aProperty) const
inlineinherited

Definition at line 92 of file inspectable.h.

93 {
95 const void* object = propMgr.TypeCast( this, TYPE_HASH( *this ), aProperty->OwnerHash() );
96
97 if( !object )
98 throw std::runtime_error( "Could not cast INSPECTABLE to the requested type" );
99
100 return aProperty->get<T>( object );
101 }

References PROPERTY_BASE::get(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ GetArcAngle()

◆ GetArcMid()

◆ GetBezierC1()

◆ GetBezierC2()

◆ GetBezierPoints()

const std::vector< VECTOR2I > & EDA_SHAPE::GetBezierPoints ( ) const
inlineinherited

◆ GetBotRight()

virtual VECTOR2I EDA_SHAPE::GetBotRight ( ) const
inlinevirtualinherited

Reimplemented in FP_TEXTBOX, and PCB_TEXTBOX.

Definition at line 164 of file eda_shape.h.

164{ return GetEnd(); }

References EDA_SHAPE::GetEnd().

Referenced by KIGFX::PCB_PAINTER::draw(), PCB_POINT_EDITOR::makePoints(), and PCB_POINT_EDITOR::updatePoints().

◆ getBoundingBox()

const BOX2I EDA_SHAPE::getBoundingBox ( ) const
protectedinherited

Definition at line 635 of file eda_shape.cpp.

636{
637 BOX2I bbox;
638
639 switch( m_shape )
640 {
641 case SHAPE_T::RECT:
642 for( VECTOR2I& pt : GetRectCorners() )
643 bbox.Merge( pt );
644
645 break;
646
647 case SHAPE_T::SEGMENT:
648 bbox.SetOrigin( GetStart() );
649 bbox.SetEnd( GetEnd() );
650 break;
651
652 case SHAPE_T::CIRCLE:
653 bbox.SetOrigin( GetStart() );
654 bbox.Inflate( GetRadius() );
655 break;
656
657 case SHAPE_T::ARC:
658 computeArcBBox( bbox );
659 break;
660
661 case SHAPE_T::POLY:
662 if( m_poly.IsEmpty() )
663 break;
664
665 for( auto iter = m_poly.CIterate(); iter; iter++ )
666 {
667 VECTOR2I pt( iter->x, iter->y );
668
670 pt += getParentPosition();
671
672 bbox.Merge( pt );
673 }
674
675 break;
676
677 case SHAPE_T::BEZIER:
678 bbox.SetOrigin( GetStart() );
679 bbox.Merge( GetBezierC1() );
680 bbox.Merge( GetBezierC2() );
681 bbox.Merge( GetEnd() );
682 break;
683
684 default:
686 break;
687 }
688
689 bbox.Inflate( std::max( 0, GetWidth() ) / 2 );
690 bbox.Normalize();
691
692 return bbox;
693}
BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
Definition: box2.h:119
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
Definition: box2.h:506
void SetEnd(coord_type x, coord_type y)
Definition: box2.h:255
virtual VECTOR2I getParentPosition() const =0
const VECTOR2I & GetBezierC2() const
Definition: eda_shape.h:175
virtual EDA_ANGLE getParentOrientation() const =0
std::vector< VECTOR2I > GetRectCorners() const
Definition: eda_shape.cpp:983
int GetWidth() const
Definition: eda_shape.h:107
void computeArcBBox(BOX2I &aBBox) const
Definition: eda_shape.cpp:1019
const VECTOR2I & GetBezierC1() const
Definition: eda_shape.h:172

References ARC, BEZIER, CIRCLE, SHAPE_POLY_SET::CIterate(), EDA_SHAPE::computeArcBBox(), EDA_SHAPE::GetBezierC1(), EDA_SHAPE::GetBezierC2(), EDA_SHAPE::GetEnd(), EDA_SHAPE::getParentOrientation(), EDA_SHAPE::getParentPosition(), EDA_SHAPE::GetRadius(), EDA_SHAPE::GetRectCorners(), EDA_SHAPE::GetStart(), EDA_SHAPE::GetWidth(), BOX2< Vec >::Inflate(), SHAPE_POLY_SET::IsEmpty(), EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, BOX2< Vec >::Merge(), BOX2< Vec >::Normalize(), POLY, RECT, RotatePoint(), SEGMENT, BOX2< Vec >::SetEnd(), BOX2< Vec >::SetOrigin(), EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by LIB_SHAPE::GetBoundingBox(), GetBoundingBox(), PCB_SHAPE::GetBoundingBox(), EDA_SHAPE::getCenter(), and EDA_SHAPE::hitTest().

◆ GetBoundingBox()

const BOX2I SCH_SHAPE::GetBoundingBox ( ) const
inlineoverridevirtual

Return the orthogonal bounding box of this object for display purposes.

This box should be an enclosing perimeter for visible components of this object, and the units should be in the pcb or schematic coordinate system. It is OK to overestimate the size by a few counts.

Reimplemented from EDA_ITEM.

Definition at line 75 of file sch_shape.h.

75{ return getBoundingBox(); }
const BOX2I getBoundingBox() const
Definition: eda_shape.cpp:635

References EDA_SHAPE::getBoundingBox().

Referenced by SCH_EDIT_TOOL::ChangeTextType(), SCH_TEXTBOX::HitTest(), and SCH_TEXTBOX::Plot().

◆ GetCenter()

VECTOR2I SCH_SHAPE::GetCenter ( ) const
inline

Definition at line 80 of file sch_shape.h.

80{ return getCenter(); }

References EDA_SHAPE::getCenter().

Referenced by KIGFX::SCH_PAINTER::draw().

◆ getCenter()

◆ GetClass()

wxString SCH_SHAPE::GetClass ( ) const
inlineoverridevirtual

Return the class name.

Reimplemented from SCH_ITEM.

Reimplemented in SCH_TEXTBOX.

Definition at line 42 of file sch_shape.h.

43 {
44 return wxT( "SCH_SHAPE" );
45 }

◆ GetConnectionPoints()

virtual std::vector< VECTOR2I > SCH_ITEM::GetConnectionPoints ( ) const
inlinevirtualinherited

Add all the connection points for this item to aPoints.

Not all schematic items have connection points so the default method does nothing.

Parameters
aPointsis the list of connection points to add to.

Reimplemented in SCH_BUS_ENTRY_BASE, SCH_JUNCTION, SCH_LABEL_BASE, SCH_LINE, SCH_NO_CONNECT, SCH_SHEET, and SCH_SYMBOL.

Definition at line 355 of file sch_item.h.

355{ return {}; }

Referenced by SCH_EDIT_FRAME::AddItemToScreenAndUndoList(), SCH_LINE_WIRE_BUS_TOOL::AddJunctionsIfNeeded(), EE_GRID_HELPER::computeAnchors(), SCH_EDIT_TOOL::DoDelete(), SCH_MOVE_TOOL::Main(), and SCH_LINE_WIRE_BUS_TOOL::TrimOverLappingWires().

◆ GetDefaultFont()

const wxString & SCH_ITEM::GetDefaultFont ( ) const
inherited

Definition at line 286 of file sch_item.cpp.

287{
288 EESCHEMA_SETTINGS* cfg = Pgm().GetSettingsManager().GetAppSettings<EESCHEMA_SETTINGS>();
289
290 return cfg->m_Appearance.default_font;
291}
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
Definition: single_top.cpp:111

References EESCHEMA_SETTINGS::APPEARANCE::default_font, EESCHEMA_SETTINGS::m_Appearance, and Pgm().

Referenced by SCH_FIELD::GetDrawFont(), SCH_TEXT::GetDrawFont(), and SCH_TEXTBOX::GetDrawFont().

◆ GetEditFlags()

EDA_ITEM_FLAGS EDA_ITEM::GetEditFlags ( ) const
inlineinherited

Definition at line 147 of file eda_item.h.

148 {
149 constexpr int mask = ( IS_NEW | IS_PASTED | IS_MOVING | IS_RESIZING | IS_DRAGGING
151
152 return m_flags & mask;
153 }
#define IS_PASTED
Modifier on IS_NEW which indicates it came from clipboard.
#define IS_CHANGED
Item was edited, and modified.
#define IS_NEW
New item, just created.
#define IS_DRAGGING
Item being dragged.
#define IS_WIRE_IMAGE
Item to be drawn as wireframe while editing.
#define STRUCT_DELETED
flag indication structures to be erased
#define IS_MOVING
Item being moved.
#define IS_RESIZING
Item being resized.

References IS_CHANGED, IS_DRAGGING, IS_MOVING, IS_NEW, IS_PASTED, IS_RESIZING, IS_WIRE_IMAGE, EDA_ITEM::m_flags, and STRUCT_DELETED.

Referenced by SCH_EDIT_TOOL::ChangeTextType(), EDA_ITEM::ClearEditFlags(), SCH_EDIT_FRAME::DeleteJunction(), SCH_EDIT_TOOL::editFieldText(), SYMBOL_EDITOR_PIN_TOOL::EditPinProperties(), SCH_EDITOR_CONTROL::EditWithSymbolEditor(), SCH_SYMBOL::GetMsgPanelInfo(), SELECTION_CONDITIONS::Idle(), SELECTION_CONDITIONS::IdleSelection(), SYMBOL_EDITOR_MOVE_TOOL::Main(), PCB_POINT_EDITOR::OnSelectionChange(), SYMBOL_EDITOR_EDIT_TOOL::Properties(), SCH_EDIT_FRAME::SelectUnit(), DIALOG_IMAGE_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_PROPERTIES::TransferDataFromWindow(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_DIMENSION_PROPERTIES::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataFromWindow(), DIALOG_TARGET_PROPERTIES::TransferDataFromWindow(), and DIALOG_TEXTBOX_PROPERTIES::TransferDataFromWindow().

◆ GetEffectiveLineStyle()

PLOT_DASH_TYPE SCH_SHAPE::GetEffectiveLineStyle ( ) const
inline

◆ GetEffectiveNetClass()

std::shared_ptr< NETCLASS > SCH_ITEM::GetEffectiveNetClass ( const SCH_SHEET_PATH aSheet = nullptr) const
inherited

Definition at line 166 of file sch_item.cpp.

167{
168 static std::shared_ptr<NETCLASS> nullNetclass = std::make_shared<NETCLASS>( wxEmptyString );
169
170 SCHEMATIC* schematic = Schematic();
171
172 if( schematic )
173 {
174 std::shared_ptr<NET_SETTINGS>& netSettings = schematic->Prj().GetProjectFile().m_NetSettings;
175 SCH_CONNECTION* connection = Connection( aSheet );
176
177 if( connection )
178 return netSettings->GetEffectiveNetClass( connection->Name() );
179 else
180 return netSettings->m_DefaultNetClass;
181 }
182
183 return nullNetclass;
184}
std::shared_ptr< NET_SETTINGS > m_NetSettings
Net settings for this project (owned here)
Definition: project_file.h:168
virtual PROJECT_FILE & GetProjectFile() const
Definition: project.h:148
Holds all the data relating to one schematic.
Definition: schematic.h:60
PROJECT & Prj() const override
Return a reference to the project this schematic is part of.
Definition: schematic.h:75
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
wxString Name(bool aIgnoreSheet=false) const
SCH_CONNECTION * Connection(const SCH_SHEET_PATH *aSheet=nullptr) const
Retrieve the connection associated with this object in the given sheet.
Definition: sch_item.cpp:146

References SCH_ITEM::Connection(), PROJECT::GetProjectFile(), PROJECT_FILE::m_NetSettings, SCH_CONNECTION::Name(), SCHEMATIC::Prj(), and SCH_ITEM::Schematic().

Referenced by SCH_BUS_ENTRY_BASE::GetBusEntryColor(), SCH_LINE::GetEffectiveLineStyle(), SCH_JUNCTION::getEffectiveShape(), SCH_FIELD::GetFieldColor(), SCH_JUNCTION::GetJunctionColor(), SCH_LABEL_BASE::GetLabelColor(), SCH_LINE::GetLineColor(), SCH_BUS_ENTRY_BASE::GetLineStyle(), SCH_BUS_ENTRY_BASE::GetMsgPanelInfo(), SCH_LABEL_BASE::GetMsgPanelInfo(), SCH_LINE::GetMsgPanelInfo(), SCH_BUS_WIRE_ENTRY::GetPenWidth(), SCH_BUS_BUS_ENTRY::GetPenWidth(), SCH_LINE::GetPenWidth(), SCH_LABEL_BASE::Plot(), SCH_LINE::Plot(), and SCH_LABEL_BASE::ResolveTextVar().

◆ GetEffectiveWidth()

int SCH_SHAPE::GetEffectiveWidth ( ) const
inlineoverridevirtual

Reimplemented from EDA_SHAPE.

Definition at line 61 of file sch_shape.h.

61{ return GetPenWidth(); }
int GetPenWidth() const override
Definition: sch_shape.cpp:226

References GetPenWidth().

◆ GetEnd()

const VECTOR2I & EDA_SHAPE::GetEnd ( ) const
inlineinherited

Return the ending point of the graphic.

Definition at line 141 of file eda_shape.h.

141{ return m_end; }

References EDA_SHAPE::m_end.

Referenced by PCB_POINT_EDITOR::addCorner(), BOARD_ADAPTER::addShape(), GRAPHICS_CLEANER::areEquivalent(), EDA_SHAPE::CalcArcAngles(), EDA_SHAPE::calcEdit(), KI_TEST::CheckFpShape(), PCB_GRID_HELPER::computeAnchors(), ConvertOutlineToPolygon(), CreateBoardSection(), MICROWAVE_TOOL::createMicrowaveInductor(), KIGFX::SCH_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), DRAWING_TOOL::DrawLine(), PCB_POINT_EDITOR::editArcEndpointKeepTangent(), PCB_PLUGIN::format(), formatArc(), formatBezier(), formatRect(), EDA_SHAPE::GetBotRight(), FP_TEXTBOX::GetBotRight(), PCB_TEXTBOX::GetBotRight(), EDA_SHAPE::getBoundingBox(), EDA_SHAPE::GetLength(), LIB_TEXTBOX::GetMsgPanelInfo(), SCH_TEXTBOX::GetMsgPanelInfo(), FP_TEXTBOX::GetMsgPanelInfo(), PCB_TEXTBOX::GetMsgPanelInfo(), EDA_SHAPE::GetRectCorners(), CADSTAR_SCH_ARCHIVE_LOADER::getScaledLibPart(), LIB_TEXTBOX::GetShownText(), SCH_TEXTBOX::GetShownText(), CONVERT_TOOL::getStartEndPoints(), FP_TEXTBOX::GetTopLeft(), PCB_TEXTBOX::GetTopLeft(), hash_fp_item(), EDA_SHAPE::hitTest(), idf_export_outline(), GRAPHICS_CLEANER::isNullShape(), SCH_LEGACY_PLUGIN_CACHE::loadArc(), SCH_EAGLE_PLUGIN::loadSymbolRectangle(), EDIT_POINTS_FACTORY::Make(), EDA_SHAPE::makeEffectiveShapes(), DSN::SPECCTRA_DB::makeIMAGE(), PCB_POINT_EDITOR::makePoints(), CONVERT_TOOL::makePolysFromChainedSegs(), GRAPHICS_CLEANER::mergeRects(), LIB_SHAPE::Normalize(), Normalize(), PCB_SHAPE::NormalizeRect(), PCB_PARSER::parsePAD(), Plot(), BRDITEMS_PLOTTER::PlotFootprintShape(), BRDITEMS_PLOTTER::PlotPcbShape(), Print(), SCH_TEXTBOX::Print(), SCH_LEGACY_PLUGIN_CACHE::saveArc(), SCH_LEGACY_PLUGIN_CACHE::saveRectangle(), SCH_SEXPR_PLUGIN_CACHE::saveTextBox(), SCH_SEXPR_PLUGIN::saveTextBox(), EDA_SHAPE::ShapeGetMsgPanelInfo(), PLOTTER::ThickArc(), GERBER_PLOTTER::ThickArc(), AR_MATRIX::TraceSegmentPcb(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataToWindow(), EDA_SHAPE::TransformShapeWithClearanceToPolygon(), EE_POINT_EDITOR::updatePoints(), and PCB_POINT_EDITOR::updatePoints().

◆ GetEndPoints()

virtual void SCH_ITEM::GetEndPoints ( std::vector< DANGLING_END_ITEM > &  aItemList)
inlinevirtualinherited

Add the schematic item end points to aItemList if the item has end points.

The default version doesn't do anything since many of the schematic object cannot be tested for dangling ends. If you add a new schematic item that can have a dangling end ( no connect ), override this method to provide the correct end points.

Parameters
aItemListis the list of DANGLING_END_ITEMS to add to.

Reimplemented in SCH_BUS_WIRE_ENTRY, SCH_BUS_BUS_ENTRY, SCH_JUNCTION, SCH_LABEL_BASE, SCH_LINE, SCH_NO_CONNECT, SCH_SHEET, SCH_SHEET_PIN, and SCH_SYMBOL.

Definition at line 309 of file sch_item.h.

309{}

Referenced by PANEL_EESCHEMA_COLOR_SETTINGS::createPreviewItems().

◆ GetEndX()

◆ GetEndY()

◆ GetFieldsAutoplaced()

FIELDS_AUTOPLACED SCH_ITEM::GetFieldsAutoplaced ( ) const
inlineinherited

Return whether the fields have been automatically placed.

Definition at line 415 of file sch_item.h.

415{ return m_fieldsAutoplaced; }

References SCH_ITEM::m_fieldsAutoplaced.

Referenced by SCH_ITEM::AutoAutoplaceFields(), SCH_SEXPR_PLUGIN::saveSheet(), SCH_SEXPR_PLUGIN::saveSymbol(), SCH_SEXPR_PLUGIN::saveText(), and EE_POINT_EDITOR::updateParentItem().

◆ GetFillColor()

◆ GetFillMode()

◆ GetFlags()

◆ GetFocusPosition()

virtual const VECTOR2I EDA_ITEM::GetFocusPosition ( ) const
inlinevirtualinherited

Similar to GetPosition, but allows items to return their visual center rather than their anchor.

Reimplemented in BOARD, PCB_SHAPE, and PCB_TRACK.

Definition at line 256 of file eda_item.h.

256{ return GetPosition(); }
virtual VECTOR2I GetPosition() const
Definition: eda_item.h:249

References EDA_ITEM::GetPosition().

Referenced by SCH_EDIT_FRAME::FocusOnItem().

◆ GetLayer()

◆ GetLength()

double EDA_SHAPE::GetLength ( ) const
inherited

Return the length of the track using the hypotenuse calculation.

Returns
the length of the track

Definition at line 110 of file eda_shape.cpp.

111{
112 double length = 0.0;
113
114 switch( m_shape )
115 {
116 case SHAPE_T::BEZIER:
117 for( size_t ii = 1; ii < m_bezierPoints.size(); ++ii )
118 length += GetLineLength( m_bezierPoints[ ii - 1], m_bezierPoints[ii] );
119
120 return length;
121
122 case SHAPE_T::SEGMENT:
123 return GetLineLength( GetStart(), GetEnd() );
124
125 case SHAPE_T::POLY:
126 for( int ii = 0; ii < m_poly.COutline( 0 ).SegmentCount(); ii++ )
127 length += m_poly.COutline( 0 ).CSegment( ii ).Length();
128
129 return length;
130
131 case SHAPE_T::ARC:
132 return GetRadius() * GetArcAngle().AsRadians();
133
134 default:
136 return 0.0;
137 }
138}
double AsRadians() const
Definition: eda_angle.h:153
int Length() const
Return the length (this).
Definition: seg.h:351
const SEG CSegment(int aIndex) const
Return a constant copy of the aIndex segment in the line chain.

References ARC, EDA_ANGLE::AsRadians(), BEZIER, SHAPE_POLY_SET::COutline(), SHAPE_LINE_CHAIN::CSegment(), EDA_SHAPE::GetArcAngle(), EDA_SHAPE::GetEnd(), GetLineLength(), EDA_SHAPE::GetRadius(), EDA_SHAPE::GetStart(), SEG::Length(), EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, POLY, SEGMENT, EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by DRAWING_TOOL::drawShape(), and EDA_SHAPE::ShapeGetMsgPanelInfo().

◆ GetMenuImage()

BITMAPS SCH_SHAPE::GetMenuImage ( ) const
overridevirtual

Return a pointer to an image to be used in menus.

The default version returns the right arrow image. Override this function to provide object specific menu images.

Returns
The menu image associated with the item.

Reimplemented from EDA_ITEM.

Reimplemented in SCH_TEXTBOX.

Definition at line 402 of file sch_shape.cpp.

403{
404 switch( GetShape() )
405 {
407 case SHAPE_T::ARC: return BITMAPS::add_arc;
411
412 default:
415 }
416}
@ question_mark
@ add_rectangle
@ add_graphical_segments

References add_arc, add_circle, add_graphical_segments, add_line, add_rectangle, ARC, CIRCLE, EDA_SHAPE::GetShape(), POLY, question_mark, RECT, SEGMENT, EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

◆ GetMsgPanelInfo()

void SCH_SHAPE::GetMsgPanelInfo ( EDA_DRAW_FRAME aFrame,
std::vector< MSG_PANEL_ITEM > &  aList 
)
overridevirtual

Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.

Parameters
aListis the list to populate.

Reimplemented from EDA_ITEM.

Reimplemented in SCH_TEXTBOX.

Definition at line 362 of file sch_shape.cpp.

363{
364 SCH_ITEM::GetMsgPanelInfo( aFrame, aList );
365
366 ShapeGetMsgPanelInfo( aFrame, aList );
367}
virtual void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList)
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
Definition: eda_item.h:211
void ShapeGetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList)
Definition: eda_shape.cpp:564

References EDA_ITEM::GetMsgPanelInfo(), and EDA_SHAPE::ShapeGetMsgPanelInfo().

◆ GetOrInitConnection()

SCH_CONNECTION * SCH_ITEM::GetOrInitConnection ( const SCH_SHEET_PATH aPath,
CONNECTION_GRAPH aGraph 
)
inherited

Definition at line 228 of file sch_item.cpp.

230{
231 if( !IsConnectable() )
232 return nullptr;
233
234 SetConnectivityDirty( false );
235
236 SCH_CONNECTION* connection = Connection( &aSheet );
237
238 if( connection )
239 return connection;
240 else
241 return InitializeConnection( aSheet, aGraph );
242}
SCH_CONNECTION * InitializeConnection(const SCH_SHEET_PATH &aPath, CONNECTION_GRAPH *aGraph)
Create a new connection object associated with this object.
Definition: sch_item.cpp:205
void SetConnectivityDirty(bool aDirty=true)
Definition: sch_item.h:406

References SCH_ITEM::Connection(), SCH_ITEM::InitializeConnection(), SCH_ITEM::IsConnectable(), and SCH_ITEM::SetConnectivityDirty().

◆ GetParent()

◆ getParentOrientation()

EDA_ANGLE SCH_SHAPE::getParentOrientation ( ) const
inlineoverrideprivatevirtual

Implements EDA_SHAPE.

Definition at line 117 of file sch_shape.h.

117{ return ANGLE_0; }

References ANGLE_0.

◆ getParentPosition()

VECTOR2I SCH_SHAPE::getParentPosition ( ) const
inlineoverrideprivatevirtual

Implements EDA_SHAPE.

Definition at line 118 of file sch_shape.h.

118{ return VECTOR2I(); }

◆ GetPenWidth()

int SCH_SHAPE::GetPenWidth ( ) const
overridevirtual
Returns
the size of the "pen" that be used to draw or plot this item

Reimplemented from SCH_ITEM.

Definition at line 226 of file sch_shape.cpp.

227{
228 if( m_stroke.GetWidth() > 0 )
229 return m_stroke.GetWidth();
230
231 // Historically 0 meant "default width" and negative numbers meant "don't stroke".
232 if( GetWidth() < 0 )
233 return 0;
234
235 SCHEMATIC* schematic = Schematic();
236
237 if( schematic )
238 return schematic->Settings().m_DefaultLineWidth;
239
241}
constexpr EDA_IU_SCALE schIUScale
Definition: base_units.h:111
SCHEMATIC_SETTINGS & Settings() const
Definition: schematic.cpp:172
#define DEFAULT_LINE_WIDTH_MILS
The default wire width in mils. (can be changed in preference menu)
constexpr int MilsToIU(int mils) const
Definition: base_units.h:94

References DEFAULT_LINE_WIDTH_MILS, EDA_SHAPE::GetWidth(), STROKE_PARAMS::GetWidth(), SCHEMATIC_SETTINGS::m_DefaultLineWidth, EDA_SHAPE::m_stroke, EDA_IU_SCALE::MilsToIU(), SCH_ITEM::Schematic(), schIUScale, and SCHEMATIC::Settings().

Referenced by GetEffectiveWidth(), Plot(), SCH_TEXTBOX::Plot(), Print(), and SCH_TEXTBOX::Print().

◆ GetPointCount()

int EDA_SHAPE::GetPointCount ( ) const
inherited
Returns
the number of corners of the polygonal shape

Definition at line 1199 of file eda_shape.cpp.

1200{
1201 // return the number of corners of the polygonal shape
1202 // this shape is expected to be only one polygon without hole
1203 if( GetPolyShape().OutlineCount() )
1204 return GetPolyShape().VertexCount( 0 );
1205
1206 return 0;
1207}
SHAPE_POLY_SET & GetPolyShape()
Definition: eda_shape.h:243
int VertexCount(int aOutline=-1, int aHole=-1) const
Return the number of points in the shape poly set.

References EDA_SHAPE::GetPolyShape(), and SHAPE_POLY_SET::VertexCount().

Referenced by GRAPHICS_CLEANER::isNullShape(), SCH_SEXPR_PARSER::ParseSchematic(), and EE_POINT_EDITOR::updatePoints().

◆ GetPolyShape() [1/2]

◆ GetPolyShape() [2/2]

const SHAPE_POLY_SET & EDA_SHAPE::GetPolyShape ( ) const
inlineinherited

Definition at line 244 of file eda_shape.h.

244{ return m_poly; }

References EDA_SHAPE::m_poly.

◆ getPosition()

VECTOR2I EDA_SHAPE::getPosition ( ) const
protectedinherited

Definition at line 99 of file eda_shape.cpp.

100{
101 if( m_shape == SHAPE_T::ARC )
102 return getCenter();
103 else if( m_shape == SHAPE_T::POLY )
104 return m_poly.CVertex( 0 );
105 else
106 return m_start;
107}

References ARC, SHAPE_POLY_SET::CVertex(), EDA_SHAPE::getCenter(), EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, EDA_SHAPE::m_start, and POLY.

Referenced by LIB_SHAPE::GetPosition(), GetPosition(), PCB_SHAPE::GetPosition(), and EDA_SHAPE::setPosition().

◆ GetPosition()

VECTOR2I SCH_SHAPE::GetPosition ( ) const
inlineoverridevirtual

◆ GetRadius()

int EDA_SHAPE::GetRadius ( ) const
inherited

Definition at line 476 of file eda_shape.cpp.

477{
478 double radius = 0.0;
479
480 switch( m_shape )
481 {
482 case SHAPE_T::ARC:
483 radius = GetLineLength( m_arcCenter, m_start );
484 break;
485
486 case SHAPE_T::CIRCLE:
487 radius = GetLineLength( m_start, m_end );
488 break;
489
490 default:
492 }
493
494 // don't allow degenerate circles/arcs
495 return std::max( 1, KiROUND( radius ) );
496}

References ARC, CIRCLE, GetLineLength(), KiROUND(), EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_end, EDA_SHAPE::m_shape, EDA_SHAPE::m_start, EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by BOARD_ADAPTER::addShape(), EDA_SHAPE::calcEdit(), EDA_SHAPE::computeArcBBox(), ConvertOutlineToPolygon(), KIGFX::PCB_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), formatCircle(), EDA_SHAPE::getBoundingBox(), PCB_SHAPE::GetFocusPosition(), EDA_SHAPE::GetLength(), LIB_SHAPE::GetSelectMenuText(), GetSelectMenuText(), hash_fp_item(), EDA_SHAPE::hitTest(), idf_export_outline(), GRAPHICS_CLEANER::isNullShape(), EDA_SHAPE::makeEffectiveShapes(), DSN::SPECCTRA_DB::makeIMAGE(), ALTIUM_PCB::Parse(), PCB_PARSER::parsePAD(), Plot(), LIB_SHAPE::Plot(), BRDITEMS_PLOTTER::PlotPcbShape(), Print(), LIB_SHAPE::print(), SCH_LEGACY_PLUGIN_CACHE::saveArc(), SCH_LEGACY_PLUGIN_CACHE::saveCircle(), EDA_SHAPE::scale(), EDA_SHAPE::ShapeGetMsgPanelInfo(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataToWindow(), and EDA_SHAPE::TransformShapeWithClearanceToPolygon().

◆ GetRectCorners()

std::vector< VECTOR2I > EDA_SHAPE::GetRectCorners ( ) const
inherited

Definition at line 983 of file eda_shape.cpp.

984{
985 std::vector<VECTOR2I> pts;
986 VECTOR2I topLeft = GetStart();
987 VECTOR2I botRight = GetEnd();
988
989 // Un-rotate rect topLeft and botRight
990 if( !getParentOrientation().IsCardinal() )
991 {
992 topLeft -= getParentPosition();
993 RotatePoint( topLeft, -getParentOrientation() );
994
995 botRight -= getParentPosition();
996 RotatePoint( botRight, -getParentOrientation() );
997 }
998
999 // Set up the un-rotated 4 corners
1000 pts.emplace_back( topLeft );
1001 pts.emplace_back( botRight.x, topLeft.y );
1002 pts.emplace_back( botRight );
1003 pts.emplace_back( topLeft.x, botRight.y );
1004
1005 // Now re-rotate the 4 corners to get a diamond
1006 if( !getParentOrientation().IsCardinal() )
1007 {
1008 for( VECTOR2I& pt : pts )
1009 {
1011 pt += getParentPosition();
1012 }
1013 }
1014
1015 return pts;
1016}

References EDA_SHAPE::GetEnd(), EDA_SHAPE::getParentOrientation(), EDA_SHAPE::getParentPosition(), EDA_SHAPE::GetStart(), RotatePoint(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by BOARD_ADAPTER::addShape(), ConvertOutlineToPolygon(), KIGFX::PCB_PAINTER::draw(), EDA_SHAPE::getBoundingBox(), PCB_SHAPE::GetCorners(), EDA_SHAPE::hitTest(), EDA_SHAPE::makeEffectiveShapes(), Plot(), BRDITEMS_PLOTTER::PlotFootprintShape(), BRDITEMS_PLOTTER::PlotPcbShape(), EDA_SHAPE::TransformShapeWithClearanceToPolygon(), FP_TEXTBOX::TransformShapeWithClearanceToPolygon(), and PCB_TEXTBOX::TransformShapeWithClearanceToPolygon().

◆ GetSelectMenuText()

wxString SCH_SHAPE::GetSelectMenuText ( UNITS_PROVIDER aUnitsProvider) const
overridevirtual

Return the text to display to be used in the selection clarification context menu when multiple items are found at the current cursor position.

The default version of this function raises an assertion in the debug mode and returns a string to indicate that it was not overridden to provide the object specific text.

Returns
The menu text string.

Reimplemented from EDA_ITEM.

Reimplemented in SCH_TEXTBOX.

Definition at line 370 of file sch_shape.cpp.

371{
372 switch( GetShape() )
373 {
374 case SHAPE_T::ARC:
375 return wxString::Format( _( "Arc, radius %s" ),
376 aUnitsProvider->MessageTextFromValue( GetRadius() ) );
377
378 case SHAPE_T::CIRCLE:
379 return wxString::Format( _( "Circle, radius %s" ),
380 aUnitsProvider->MessageTextFromValue( GetRadius() ) );
381
382 case SHAPE_T::RECT:
383 return wxString::Format( _( "Rectangle, width %s height %s" ),
384 aUnitsProvider->MessageTextFromValue( std::abs( m_start.x - m_end.x ) ),
385 aUnitsProvider->MessageTextFromValue( std::abs( m_start.y - m_end.y ) ) );
386
387 case SHAPE_T::POLY:
388 return wxString::Format( _( "Polyline, %d points" ),
389 int( m_poly.Outline( 0 ).GetPointCount() ) );
390
391 case SHAPE_T::BEZIER:
392 return wxString::Format( _( "Bezier Curve, %d points" ),
393 int( m_bezierPoints.size() ) );
394
395 default:
397 return wxEmptyString;
398 }
399}
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
A lower-precision version of StringFromValue().
#define _(s)
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
Definition: eda_angle.h:401
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200

References _, std::abs(), ARC, BEZIER, CIRCLE, Format(), SHAPE_LINE_CHAIN::GetPointCount(), EDA_SHAPE::GetRadius(), EDA_SHAPE::GetShape(), EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_end, EDA_SHAPE::m_poly, EDA_SHAPE::m_start, UNITS_PROVIDER::MessageTextFromValue(), SHAPE_POLY_SET::Outline(), POLY, RECT, EDA_SHAPE::SHAPE_T_asString(), UNIMPLEMENTED_FOR, VECTOR2< T >::x, and VECTOR2< T >::y.

◆ GetShape()

SHAPE_T EDA_SHAPE::GetShape ( ) const
inlineinherited

Definition at line 111 of file eda_shape.h.

111{ return m_shape; }

References EDA_SHAPE::m_shape.

Referenced by PCB_POINT_EDITOR::addCorner(), EE_POINT_EDITOR::addCornerCondition(), LIB_SHAPE::AddPoint(), AddPoint(), BOARD_ADAPTER::addShape(), GRAPHICS_CLEANER::areEquivalent(), EDA_SHAPE::beginEdit(), EDA_SHAPE::calcEdit(), PCB_POINT_EDITOR::canAddCorner(), KI_TEST::CheckFpShape(), PCB_GRID_HELPER::computeAnchors(), EDA_SHAPE::continueEdit(), ConvertOutlineToPolygon(), KIGFX::SCH_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), EDA_SHAPE_DESC::EDA_SHAPE_DESC(), EDA_SHAPE::endEdit(), PAD_TOOL::explodePad(), CADSTAR_SCH_ARCHIVE_LOADER::fixUpLibraryPins(), FP_SHAPE::Flip(), FootprintWriteShape(), PCB_PLUGIN::format(), PCB_SHAPE::GetCorners(), FOOTPRINT::GetCoverageArea(), LIB_SHAPE::GetMenuImage(), GetMenuImage(), CADSTAR_SCH_ARCHIVE_LOADER::getScaledLibPart(), LIB_SHAPE::GetSelectMenuText(), GetSelectMenuText(), CONVERT_TOOL::getStartEndPoints(), EE_SELECTION_TOOL::GuessSelectionCandidates(), hash_fp_item(), idf_export_outline(), GRAPHICS_CLEANER::isNullShape(), EE_POINT_EDITOR::Main(), EDIT_POINTS_FACTORY::Make(), DSN::SPECCTRA_DB::makeIMAGE(), PCB_POINT_EDITOR::makePoints(), CONVERT_TOOL::makePolysFromChainedSegs(), GRAPHICS_CLEANER::mergeRects(), PCB_SHAPE::Mirror(), FP_SHAPE::Mirror(), FP_SHAPE::Move(), LIB_SHAPE::Normalize(), Normalize(), PCB_SHAPE::cmp_drawings::operator()(), FOOTPRINT::cmp_drawings::operator()(), ALTIUM_PCB::Parse(), Plot(), LIB_SHAPE::Plot(), BRDITEMS_PLOTTER::PlotFootprintShape(), BRDITEMS_PLOTTER::PlotPcbShape(), Print(), LIB_SHAPE::print(), PAD_TOOL::RecombinePad(), PCB_POINT_EDITOR::removeCorner(), PCB_POINT_EDITOR::removeCornerCondition(), PCB_TEXTBOX::Rotate(), DRC_TEST_PROVIDER_EDGE_CLEARANCE::Run(), SCH_LEGACY_PLUGIN_CACHE::saveArc(), SCH_LEGACY_PLUGIN_CACHE::saveBezier(), SCH_LEGACY_PLUGIN_CACHE::saveCircle(), SCH_LEGACY_PLUGIN_CACHE::savePolyLine(), SCH_LEGACY_PLUGIN_CACHE::saveRectangle(), SCH_SEXPR_PLUGIN::saveShape(), SCH_LEGACY_PLUGIN_CACHE::SaveSymbol(), SCH_SEXPR_PLUGIN_CACHE::saveSymbolDrawItem(), shapesNeedUpdate(), GERBER_PLOTTER::ThickArc(), AR_MATRIX::TraceSegmentPcb(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataFromWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataToWindow(), PCB_POINT_EDITOR::updateItem(), EE_POINT_EDITOR::updateParentItem(), EE_POINT_EDITOR::updatePoints(), PCB_POINT_EDITOR::updatePoints(), and DIALOG_GRAPHIC_ITEM_PROPERTIES::Validate().

◆ GetSortPosition()

virtual VECTOR2I EDA_ITEM::GetSortPosition ( ) const
inlinevirtualinherited

Return the coordinates that should be used for sorting this element visually compared to other elements.

For instance, for lines the midpoint might be a better sorting point than either end.

Returns
X,Y coordinate of the sort point

Reimplemented in SCH_LINE.

Definition at line 265 of file eda_item.h.

265{ return GetPosition(); }

References EDA_ITEM::GetPosition().

◆ GetStart()

const VECTOR2I & EDA_SHAPE::GetStart ( ) const
inlineinherited

Return the starting point of the graphic.

Definition at line 116 of file eda_shape.h.

116{ return m_start; }

References EDA_SHAPE::m_start.

Referenced by PCB_POINT_EDITOR::addCorner(), BOARD_ADAPTER::addShape(), GRAPHICS_CLEANER::areEquivalent(), EDA_SHAPE::CalcArcAngles(), EDA_SHAPE::calcEdit(), KI_TEST::CheckFpShape(), PCB_GRID_HELPER::computeAnchors(), ALTIUM_PCB::ConvertArcs6ToBoardItemOnLayer(), ConvertOutlineToPolygon(), CreateBoardSection(), MICROWAVE_TOOL::createMicrowaveInductor(), KIGFX::PCB_PAINTER::draw(), PCB_POINT_EDITOR::editArcEndpointKeepCenter(), PCB_POINT_EDITOR::editArcEndpointKeepTangent(), PCB_PLUGIN::format(), formatArc(), formatBezier(), formatCircle(), formatRect(), FP_TEXTBOX::GetBotRight(), PCB_TEXTBOX::GetBotRight(), EDA_SHAPE::getBoundingBox(), PCB_SHAPE::GetFocusPosition(), EDA_SHAPE::GetLength(), LIB_TEXTBOX::GetMsgPanelInfo(), SCH_TEXTBOX::GetMsgPanelInfo(), FP_TEXTBOX::GetMsgPanelInfo(), PCB_TEXTBOX::GetMsgPanelInfo(), EDA_SHAPE::GetRectCorners(), CADSTAR_SCH_ARCHIVE_LOADER::getScaledLibPart(), LIB_TEXTBOX::GetShownText(), SCH_TEXTBOX::GetShownText(), CONVERT_TOOL::getStartEndPoints(), EDA_SHAPE::GetTopLeft(), FP_TEXTBOX::GetTopLeft(), PCB_TEXTBOX::GetTopLeft(), hash_fp_item(), EDA_SHAPE::hitTest(), idf_export_outline(), GRAPHICS_CLEANER::isNullShape(), SCH_LEGACY_PLUGIN_CACHE::loadArc(), EDIT_POINTS_FACTORY::Make(), DSN::SPECCTRA_DB::makeIMAGE(), PCB_POINT_EDITOR::makePoints(), CONVERT_TOOL::makePolysFromChainedSegs(), GRAPHICS_CLEANER::mergeRects(), PCB_SHAPE::NormalizeRect(), PCB_PARSER::parsePAD(), Plot(), BRDITEMS_PLOTTER::PlotFootprintShape(), BRDITEMS_PLOTTER::PlotPcbShape(), BRDITEMS_PLOTTER::PlotPcbTarget(), Print(), SCH_TEXTBOX::Print(), SCH_LEGACY_PLUGIN_CACHE::saveArc(), SCH_SEXPR_PLUGIN_CACHE::saveTextBox(), SCH_SEXPR_PLUGIN::saveTextBox(), EDA_SHAPE::ShapeGetMsgPanelInfo(), PLOTTER::ThickArc(), GERBER_PLOTTER::ThickArc(), AR_MATRIX::TraceSegmentPcb(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataFromWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataToWindow(), EDA_SHAPE::TransformShapeWithClearanceToPolygon(), EE_POINT_EDITOR::updatePoints(), and PCB_POINT_EDITOR::updatePoints().

◆ GetStartX()

◆ GetStartY()

◆ GetState()

int EDA_ITEM::GetState ( EDA_ITEM_FLAGS  type) const
inlineinherited

Definition at line 126 of file eda_item.h.

127 {
128 return m_status & type;
129 }
EDA_ITEM_FLAGS m_status
Definition: eda_item.h:495

References EDA_ITEM::m_status.

◆ GetStatus()

EDA_ITEM_FLAGS EDA_ITEM::GetStatus ( ) const
inlineinherited

Definition at line 139 of file eda_item.h.

139{ return m_status; }

References EDA_ITEM::m_status.

◆ GetStoredPos()

VECTOR2I & SCH_ITEM::GetStoredPos ( )
inlineinherited

Definition at line 209 of file sch_item.h.

209{ return m_storedPos; }
VECTOR2I m_storedPos
Definition: sch_item.h:485

References SCH_ITEM::m_storedPos.

◆ GetStroke()

◆ GetTopLeft()

virtual VECTOR2I EDA_SHAPE::GetTopLeft ( ) const
inlinevirtualinherited

Reimplemented in FP_TEXTBOX, and PCB_TEXTBOX.

Definition at line 163 of file eda_shape.h.

163{ return GetStart(); }

References EDA_SHAPE::GetStart().

Referenced by KIGFX::PCB_PAINTER::draw(), PCB_POINT_EDITOR::makePoints(), and PCB_POINT_EDITOR::updatePoints().

◆ GetTypeDesc()

wxString EDA_ITEM::GetTypeDesc ( )
inherited

Return a translated description of the type for this EDA_ITEM for display in user facing messages.

Definition at line 301 of file eda_item.cpp.

302{
303 //@see EDA_ITEM_DESC for definition of ENUM_MAP<KICAD_T>
304 wxString typeDescr = ENUM_MAP<KICAD_T>::Instance().ToString( Type() );
305
306 return wxGetTranslation( typeDescr );
307}
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:97
static ENUM_MAP< T > & Instance()
Definition: property.h:512

References ENUM_MAP< T >::Instance(), and EDA_ITEM::Type().

Referenced by PROPERTIES_PANEL::update().

◆ GetWidth()

int EDA_SHAPE::GetWidth ( ) const
inlineinherited

Definition at line 107 of file eda_shape.h.

107{ return m_stroke.GetWidth(); }

References STROKE_PARAMS::GetWidth(), and EDA_SHAPE::m_stroke.

Referenced by BOARD_ADAPTER::addShape(), GRAPHICS_CLEANER::areEquivalent(), ConvertOutlineToPolygon(), KIGFX::PCB_PAINTER::draw(), EDA_SHAPE_DESC::EDA_SHAPE_DESC(), FP_SHAPE::Flip(), EDA_SHAPE::getBoundingBox(), FOOTPRINT::GetCoverageArea(), FP_TEXTBOX::GetEffectiveShape(), PCB_TEXTBOX::GetEffectiveShape(), EDA_SHAPE::GetEffectiveWidth(), LIB_SHAPE::GetPenWidth(), GetPenWidth(), CONVERT_TOOL::getStartEndPoints(), hash_fp_item(), EDA_SHAPE::hitTest(), GRAPHICS_CLEANER::isNullShape(), SCH_LEGACY_PLUGIN_CACHE::loadBezier(), FABMASTER::loadOutline(), FABMASTER::loadPolygon(), DSN::SPECCTRA_DB::makeIMAGE(), CONVERT_TOOL::makePolysFromChainedSegs(), PCB_SHAPE::Mirror(), FP_SHAPE::Mirror(), FOOTPRINT::cmp_drawings::operator()(), PCB_PARSER::parsePAD(), BRDITEMS_PLOTTER::PlotFootprintShape(), BRDITEMS_PLOTTER::PlotPcbShape(), SCH_LEGACY_PLUGIN_CACHE::saveArc(), SCH_LEGACY_PLUGIN_CACHE::saveBezier(), SCH_LEGACY_PLUGIN_CACHE::saveCircle(), SCH_LEGACY_PLUGIN_CACHE::savePolyLine(), SCH_LEGACY_PLUGIN_CACHE::saveRectangle(), FP_SHAPE::SetDrawCoord(), PLOTTER::ThickArc(), GERBER_PLOTTER::ThickArc(), AR_MATRIX::TraceSegmentPcb(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), DIALOG_LIB_SHAPE_PROPERTIES::TransferDataToWindow(), DIALOG_LIB_TEXTBOX_PROPERTIES::TransferDataToWindow(), DIALOG_SHAPE_PROPERTIES::TransferDataToWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVE_POLY_PROPS::TransferDataToWindow(), EDA_SHAPE::TransformShapeWithClearanceToPolygon(), FP_TEXTBOX::TransformShapeWithClearanceToPolygon(), PCB_TEXTBOX::TransformShapeWithClearanceToPolygon(), PCB_POINT_EDITOR::updateItem(), and PCB_SHAPE::ViewBBox().

◆ HasFlag()

◆ HasLineStroke()

bool SCH_SHAPE::HasLineStroke ( ) const
inlineoverridevirtual

Check if this schematic item has line stoke properties.

See also
STROKE_PARAMS
Returns
true if this schematic item support line stroke properties. Otherwise, false.

Reimplemented from SCH_ITEM.

Definition at line 63 of file sch_shape.h.

63{ return true; }

◆ hitTest() [1/2]

bool EDA_SHAPE::hitTest ( const BOX2I aRect,
bool  aContained,
int  aAccuracy = 0 
) const
protectedinherited

Definition at line 810 of file eda_shape.cpp.

811{
812 BOX2I arect = aRect;
813 arect.Normalize();
814 arect.Inflate( aAccuracy );
815
816 BOX2I bbox = getBoundingBox();
817
818 switch( m_shape )
819 {
820 case SHAPE_T::CIRCLE:
821 // Test if area intersects or contains the circle:
822 if( aContained )
823 {
824 return arect.Contains( bbox );
825 }
826 else
827 {
828 // If the rectangle does not intersect the bounding box, this is a much quicker test
829 if( !arect.Intersects( bbox ) )
830 return false;
831 else
832 return arect.IntersectsCircleEdge( getCenter(), GetRadius(), GetWidth() );
833 }
834
835 case SHAPE_T::ARC:
836 // Test for full containment of this arc in the rect
837 if( aContained )
838 {
839 return arect.Contains( bbox );
840 }
841 // Test if the rect crosses the arc
842 else
843 {
844 if( !arect.Intersects( bbox ) )
845 return false;
846
847 if( IsFilled() )
848 {
849 return ( arect.Intersects( getCenter(), GetStart() )
850 || arect.Intersects( getCenter(), GetEnd() )
851 || arect.IntersectsCircleEdge( getCenter(), GetRadius(), GetWidth() ) );
852 }
853 else
854 {
855 return arect.IntersectsCircleEdge( getCenter(), GetRadius(), GetWidth() );
856 }
857 }
858
859 case SHAPE_T::RECT:
860 if( aContained )
861 {
862 return arect.Contains( bbox );
863 }
864 else
865 {
866 std::vector<VECTOR2I> pts = GetRectCorners();
867
868 // Account for the width of the lines
869 arect.Inflate( GetWidth() / 2 );
870 return ( arect.Intersects( pts[0], pts[1] )
871 || arect.Intersects( pts[1], pts[2] )
872 || arect.Intersects( pts[2], pts[3] )
873 || arect.Intersects( pts[3], pts[0] ) );
874 }
875
876 case SHAPE_T::SEGMENT:
877 if( aContained )
878 {
879 return arect.Contains( GetStart() ) && aRect.Contains( GetEnd() );
880 }
881 else
882 {
883 // Account for the width of the line
884 arect.Inflate( GetWidth() / 2 );
885 return arect.Intersects( GetStart(), GetEnd() );
886 }
887
888 case SHAPE_T::POLY:
889 if( aContained )
890 {
891 return arect.Contains( bbox );
892 }
893 else
894 {
895 // Fast test: if aRect is outside the polygon bounding box,
896 // rectangles cannot intersect
897 if( !arect.Intersects( bbox ) )
898 return false;
899
900 // Account for the width of the line
901 arect.Inflate( GetWidth() / 2 );
902
903 // Polygons in footprints use coordinates relative to the footprint.
904 // Therefore, instead of using m_poly, we make a copy which is translated
905 // to the actual location in the board.
906 VECTOR2I offset = getParentPosition();
907
908 SHAPE_LINE_CHAIN poly = m_poly.Outline( 0 );
910 poly.Move( offset );
911
912 int count = poly.GetPointCount();
913
914 for( int ii = 0; ii < count; ii++ )
915 {
916 VECTOR2I vertex = poly.GetPoint( ii );
917
918 // Test if the point is within aRect
919 if( arect.Contains( vertex ) )
920 return true;
921
922 if( ii + 1 < count )
923 {
924 VECTOR2I vertexNext = poly.GetPoint( ii + 1 );
925
926 // Test if this edge intersects aRect
927 if( arect.Intersects( vertex, vertexNext ) )
928 return true;
929 }
930 else if( poly.IsClosed() )
931 {
932 VECTOR2I vertexNext = poly.GetPoint( 0 );
933
934 // Test if this edge intersects aRect
935 if( arect.Intersects( vertex, vertexNext ) )
936 return true;
937 }
938 }
939
940 return false;
941 }
942
943 case SHAPE_T::BEZIER:
944 if( aContained )
945 {
946 return arect.Contains( bbox );
947 }
948 else
949 {
950 // Fast test: if aRect is outside the polygon bounding box,
951 // rectangles cannot intersect
952 if( !arect.Intersects( bbox ) )
953 return false;
954
955 // Account for the width of the line
956 arect.Inflate( GetWidth() / 2 );
957 unsigned count = m_bezierPoints.size();
958
959 for( unsigned ii = 1; ii < count; ii++ )
960 {
961 VECTOR2I vertex = m_bezierPoints[ii - 1];
962 VECTOR2I vertexNext = m_bezierPoints[ii];
963
964 // Test if the point is within aRect
965 if( arect.Contains( vertex ) )
966 return true;
967
968 // Test if this edge intersects aRect
969 if( arect.Intersects( vertex, vertexNext ) )
970 return true;
971 }
972
973 return false;
974 }
975
976 default:
978 return false;
979 }
980}
bool Intersects(const BOX2< Vec > &aRect) const
Definition: box2.h:269
bool IntersectsCircleEdge(const Vec &aCenter, const int aRadius, const int aWidth) const
Definition: box2.h:471
bool Contains(const Vec &aPoint) const
Definition: box2.h:141
void Move(const VECTOR2I &aVector) override
bool IsClosed() const override
virtual const VECTOR2I GetPoint(int aIndex) const override
void Rotate(const EDA_ANGLE &aAngle, const VECTOR2I &aCenter={ 0, 0 }) override
Rotate all vertices by a given angle.

References ARC, BEZIER, CIRCLE, BOX2< Vec >::Contains(), EDA_SHAPE::getBoundingBox(), EDA_SHAPE::getCenter(), EDA_SHAPE::GetEnd(), EDA_SHAPE::getParentOrientation(), EDA_SHAPE::getParentPosition(), SHAPE_LINE_CHAIN::GetPoint(), SHAPE_LINE_CHAIN::GetPointCount(), EDA_SHAPE::GetRadius(), EDA_SHAPE::GetRectCorners(), EDA_SHAPE::GetStart(), EDA_SHAPE::GetWidth(), BOX2< Vec >::Inflate(), BOX2< Vec >::Intersects(), BOX2< Vec >::IntersectsCircleEdge(), SHAPE_LINE_CHAIN::IsClosed(), EDA_SHAPE::IsFilled(), EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, SHAPE_LINE_CHAIN::Move(), BOX2< Vec >::Normalize(), SHAPE_POLY_SET::Outline(), POLY, RECT, SHAPE_LINE_CHAIN::Rotate(), SEGMENT, EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

◆ HitTest() [1/2]

bool SCH_SHAPE::HitTest ( const BOX2I aRect,
bool  aContained,
int  aAccuracy = 0 
) const
inlineoverridevirtual

Test if aRect intersects this item.

Parameters
aRectA reference to a BOX2I object containing the rectangle to test.
aContainedSet to true to test for containment instead of an intersection.
aAccuracyIncrease aRect by this amount.
Returns
True if aRect contains or intersects the item bounding box.

Reimplemented from EDA_ITEM.

Reimplemented in SCH_TEXTBOX.

Definition at line 54 of file sch_shape.h.

55 {
56 return hitTest( aRect, aContained, aAccuracy );
57 }
bool hitTest(const VECTOR2I &aPosition, int aAccuracy=0) const
Definition: eda_shape.cpp:696

References EDA_SHAPE::hitTest().

◆ hitTest() [2/2]

bool EDA_SHAPE::hitTest ( const VECTOR2I aPosition,
int  aAccuracy = 0 
) const
protectedinherited

Definition at line 696 of file eda_shape.cpp.

697{
698 int maxdist = aAccuracy;
699
700 if( GetWidth() > 0 )
701 maxdist += GetWidth() / 2;
702
703 switch( m_shape )
704 {
705 case SHAPE_T::CIRCLE:
706 {
707 int radius = GetRadius();
708
709 VECTOR2I::extended_type dist = KiROUND<double, VECTOR2I::extended_type>(
710 EuclideanNorm( aPosition - getCenter() ) );
711
712 if( IsFilled() )
713 return dist <= radius + maxdist; // Filled circle hit-test
714 else
715 return abs( radius - dist ) <= maxdist; // Ring hit-test
716 }
717
718 case SHAPE_T::ARC:
719 {
720 if( EuclideanNorm( aPosition - m_start ) <= maxdist )
721 return true;
722
723 if( EuclideanNorm( aPosition - m_end ) <= maxdist )
724 return true;
725
726 VECTOR2I relPos = aPosition - getCenter();
727 int radius = GetRadius();
728
730 KiROUND<double, VECTOR2I::extended_type>( EuclideanNorm( relPos ) );
731
732 if( IsFilled() )
733 {
734 // Check distance from arc center
735 if( dist > radius + maxdist )
736 return false;
737 }
738 else
739 {
740 // Check distance from arc circumference
741 if( abs( radius - dist ) > maxdist )
742 return false;
743 }
744
745 // Finally, check to see if it's within arc's swept angle.
746 EDA_ANGLE startAngle;
747 EDA_ANGLE endAngle;
748 CalcArcAngles( startAngle, endAngle );
749
750 EDA_ANGLE relPosAngle( relPos );
751
752 startAngle.Normalize();
753 endAngle.Normalize();
754 relPosAngle.Normalize();
755
756 if( endAngle > startAngle )
757 return relPosAngle >= startAngle && relPosAngle <= endAngle;
758 else
759 return relPosAngle >= startAngle || relPosAngle <= endAngle;
760 }
761
762 case SHAPE_T::BEZIER:
763 const_cast<EDA_SHAPE*>( this )->RebuildBezierToSegmentsPointsList( GetWidth() );
764
765 for( unsigned int i= 1; i < m_bezierPoints.size(); i++)
766 {
767 if( TestSegmentHit( aPosition, m_bezierPoints[ i - 1], m_bezierPoints[i], maxdist ) )
768 return true;
769 }
770
771 return false;
772
773 case SHAPE_T::SEGMENT:
774 return TestSegmentHit( aPosition, GetStart(), GetEnd(), maxdist );
775
776 case SHAPE_T::RECT:
777 if( IsAnnotationProxy() || IsFilled() ) // Filled rect hit-test
778 {
779 SHAPE_POLY_SET poly;
780 poly.NewOutline();
781
782 for( const VECTOR2I& pt : GetRectCorners() )
783 poly.Append( pt );
784
785 return poly.Collide( aPosition, maxdist );
786 }
787 else // Open rect hit-test
788 {
789 std::vector<VECTOR2I> pts = GetRectCorners();
790
791 return TestSegmentHit( aPosition, pts[0], pts[1], maxdist )
792 || TestSegmentHit( aPosition, pts[1], pts[2], maxdist )
793 || TestSegmentHit( aPosition, pts[2], pts[3], maxdist )
794 || TestSegmentHit( aPosition, pts[3], pts[0], maxdist );
795 }
796
797 case SHAPE_T::POLY:
798 if( IsFilled() )
799 return m_poly.Collide( aPosition, maxdist );
800 else
801 return m_poly.CollideEdge( aPosition, nullptr, maxdist );
802
803 default:
805 return false;
806 }
807}
void RebuildBezierToSegmentsPointsList(int aMinSegLen)
Rebuild the m_bezierPoints vertex list that approximate the Bezier curve by a list of segments.
Definition: eda_shape.cpp:370
bool IsAnnotationProxy() const
Definition: eda_shape.h:87
Represent a set of closed polygons.
bool CollideEdge(const VECTOR2I &aPoint, VERTEX_INDEX *aClosestVertex=nullptr, int aClearance=0) const
Check whether aPoint collides with any edge of any of the contours of the polygon.
bool Collide(const SHAPE *aShape, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const override
Check if the boundary of shape (this) lies closer to the shape aShape than aClearance,...
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Add a new vertex to the contour indexed by aOutline and aHole (defaults to the outline of the last po...
VECTOR2_TRAITS< int >::extended_type extended_type
Definition: vector2d.h:76
bool TestSegmentHit(const VECTOR2I &aRefPoint, const VECTOR2I &aStart, const VECTOR2I &aEnd, int aDist)
Test if aRefPoint is with aDistance on the line defined by aStart and aEnd.
Definition: trigo.cpp:129
double EuclideanNorm(const VECTOR2I &vector)
Definition: trigo.h:129

References std::abs(), SHAPE_POLY_SET::Append(), ARC, BEZIER, EDA_SHAPE::CalcArcAngles(), CIRCLE, SHAPE_POLY_SET::Collide(), SHAPE_POLY_SET::CollideEdge(), EuclideanNorm(), EDA_SHAPE::getCenter(), EDA_SHAPE::GetEnd(), EDA_SHAPE::GetRadius(), EDA_SHAPE::GetRectCorners(), EDA_SHAPE::GetStart(), EDA_SHAPE::GetWidth(), EDA_SHAPE::IsAnnotationProxy(), EDA_SHAPE::IsFilled(), EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_end, EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, EDA_SHAPE::m_start, SHAPE_POLY_SET::NewOutline(), EDA_ANGLE::Normalize(), POLY, EDA_SHAPE::RebuildBezierToSegmentsPointsList(), RECT, SEGMENT, EDA_SHAPE::SHAPE_T_asString(), TestSegmentHit(), and UNIMPLEMENTED_FOR.

Referenced by LIB_SHAPE::HitTest(), HitTest(), and PCB_SHAPE::HitTest().

◆ HitTest() [2/2]

bool SCH_SHAPE::HitTest ( const VECTOR2I aPosition,
int  aAccuracy = 0 
) const
inlineoverridevirtual

Test if aPosition is inside or on the boundary of this item.

Parameters
aPositionA reference to a VECTOR2I object containing the coordinates to test.
aAccuracyIncrease the item bounding box by this amount.
Returns
True if aPosition is within the item bounding box.

Reimplemented from EDA_ITEM.

Reimplemented in SCH_TEXTBOX.

Definition at line 49 of file sch_shape.h.

50 {
51 return hitTest( aPosition, aAccuracy );
52 }

References EDA_SHAPE::hitTest().

◆ InitializeConnection()

SCH_CONNECTION * SCH_ITEM::InitializeConnection ( const SCH_SHEET_PATH aPath,
CONNECTION_GRAPH aGraph 
)
inherited

Create a new connection object associated with this object.

Parameters
aPathis the sheet path to initialize.

Definition at line 205 of file sch_item.cpp.

207{
208 SetConnectivityDirty( false );
209
210 SCH_CONNECTION* connection = Connection( &aSheet );
211
212 if( connection )
213 {
214 connection->Reset();
215 }
216 else
217 {
218 connection = new SCH_CONNECTION( this );
219 m_connection_map.insert( std::make_pair( aSheet, connection ) );
220 }
221
222 connection->SetGraph( aGraph );
223 connection->SetSheet( aSheet );
224 return connection;
225}
void Reset()
Clears connectivity information.
void SetGraph(CONNECTION_GRAPH *aGraph)
void SetSheet(SCH_SHEET_PATH aSheet)

References SCH_ITEM::Connection(), SCH_ITEM::m_connection_map, SCH_CONNECTION::Reset(), SCH_ITEM::SetConnectivityDirty(), SCH_CONNECTION::SetGraph(), and SCH_CONNECTION::SetSheet().

Referenced by SCH_ITEM::GetOrInitConnection().

◆ IsAnnotationProxy()

◆ IsBrightened()

◆ IsConnectable()

◆ IsConnected()

bool SCH_ITEM::IsConnected ( const VECTOR2I aPoint) const
inherited

Test the item to see if it is connected to aPoint.

Parameters
aPointis a reference to a VECTOR2I object containing the coordinates to test.
Returns
True if connection to aPoint exists.

Definition at line 137 of file sch_item.cpp.

138{
139 if(( m_flags & STRUCT_DELETED ) || ( m_flags & SKIP_STRUCT ) )
140 return false;
141
142 return doIsConnected( aPosition );
143}
virtual bool doIsConnected(const VECTOR2I &aPosition) const
Provide the object specific test to see if it is connected to aPosition.
Definition: sch_item.h:479

References SCH_ITEM::doIsConnected(), EDA_ITEM::m_flags, SKIP_STRUCT, and STRUCT_DELETED.

Referenced by SCH_SCREEN::doIsJunction(), SCH_MOVE_TOOL::getConnectedItems(), SCH_SCREEN::IsTerminalPoint(), and SCH_SCREEN::MarkConnections().

◆ IsConnectivityDirty()

◆ IsDangling()

virtual bool SCH_ITEM::IsDangling ( ) const
inlinevirtualinherited

Reimplemented in SCH_BUS_ENTRY_BASE, SCH_LABEL_BASE, SCH_LINE, and SCH_PIN.

Definition at line 333 of file sch_item.h.

333{ return false; }

Referenced by SCH_EDIT_TOOL::ChangeTextType(), and KIGFX::SCH_PAINTER::draw().

◆ IsDragging()

bool EDA_ITEM::IsDragging ( ) const
inlineinherited

Definition at line 105 of file eda_item.h.

105{ return m_flags & IS_DRAGGING; }

References IS_DRAGGING, and EDA_ITEM::m_flags.

Referenced by DIALOG_SYMBOL_PROPERTIES::DIALOG_SYMBOL_PROPERTIES().

◆ IsEntered()

bool EDA_ITEM::IsEntered ( ) const
inlineinherited

Definition at line 108 of file eda_item.h.

108{ return m_flags & ENTERED; }
#define ENTERED
indicates a group has been entered

References ENTERED, and EDA_ITEM::m_flags.

Referenced by KIGFX::PCB_PAINTER::draw().

◆ IsFilled()

◆ IsForceVisible()

bool EDA_ITEM::IsForceVisible ( ) const
inlineinherited

Definition at line 203 of file eda_item.h.

203{ return m_forceVisible; }
bool m_forceVisible
Definition: eda_item.h:497

References EDA_ITEM::m_forceVisible.

Referenced by KIGFX::SCH_PAINTER::draw(), and SCH_FIELD::Print().

◆ IsHypertext()

virtual bool SCH_ITEM::IsHypertext ( ) const
inlinevirtualinherited

Allow items to support hypertext actions when hovered/clicked.

Reimplemented in SCH_FIELD, SCH_TEXT, and SCH_TEXTBOX.

Definition at line 239 of file sch_item.h.

239{ return false; }

Referenced by SCH_ITEM::RenderAsBitmap().

◆ IsLocked()

virtual bool SCH_ITEM::IsLocked ( ) const
inlinevirtualinherited
Returns
true if the object is locked, else false.

Definition at line 229 of file sch_item.h.

229{ return false; }

◆ IsModified()

bool EDA_ITEM::IsModified ( ) const
inlineinherited

Definition at line 102 of file eda_item.h.

102{ return m_flags & IS_CHANGED; }

References IS_CHANGED, and EDA_ITEM::m_flags.

Referenced by PCB_EDIT_FRAME::OpenProjectFiles().

◆ IsMovableFromAnchorPoint()

virtual bool SCH_ITEM::IsMovableFromAnchorPoint ( ) const
inlinevirtualinherited
Returns
true for items which are moved with the anchor point at mouse cursor and false for items moved with no reference to anchor Usually return true for small items (labels, junctions) and false for items which can be large (hierarchical sheets, symbols)

Reimplemented in SCH_BITMAP, SCH_BUS_ENTRY_BASE, SCH_SHEET, SCH_SHEET_PIN, and SCH_SYMBOL.

Definition at line 207 of file sch_item.h.

207{ return true; }

Referenced by SCH_MOVE_TOOL::Main().

◆ IsMoving()

◆ IsNew()

◆ IsPointClickableAnchor()

virtual bool SCH_ITEM::IsPointClickableAnchor ( const VECTOR2I aPos) const
inlinevirtualinherited
Returns
true if the given point can start drawing (usually means the anchor is unused/free/dangling).

Reimplemented in SCH_BUS_ENTRY_BASE, SCH_JUNCTION, SCH_LABEL, SCH_GLOBALLABEL, SCH_HIERLABEL, SCH_LINE, SCH_PIN, SCH_SHEET_PIN, and SCH_SYMBOL.

Definition at line 346 of file sch_item.h.

346{ return false; }

Referenced by EE_SELECTION_TOOL::autostartEvent().

◆ IsPolyShapeValid()

bool EDA_SHAPE::IsPolyShapeValid ( ) const
inherited
Returns
true if the polygonal shape is valid (has more than 2 points)

Definition at line 1187 of file eda_shape.cpp.

1188{
1189 // return true if the polygonal shape is valid (has more than 2 points)
1190 if( GetPolyShape().OutlineCount() == 0 )
1191 return false;
1192
1193 const SHAPE_LINE_CHAIN& outline = static_cast<const SHAPE_POLY_SET&>( GetPolyShape() ).Outline( 0 );
1194
1195 return outline.PointCount() > 2;
1196}

References EDA_SHAPE::GetPolyShape(), and SHAPE_LINE_CHAIN::PointCount().

Referenced by PCB_PLUGIN::format(), BRDITEMS_PLOTTER::PlotFootprintShape(), BRDITEMS_PLOTTER::PlotPcbShape(), and EDA_SHAPE::TransformShapeWithClearanceToPolygon().

◆ IsReplaceable()

virtual bool EDA_ITEM::IsReplaceable ( ) const
inlinevirtualinherited

Override this method in any derived object that supports test find and replace.

Returns
True if the item has replaceable text that can be modified using the find and replace dialog.

Reimplemented in LIB_TEXTBOX, SCH_FIELD, SCH_LABEL, SCH_SHEET, SCH_SHEET_PIN, SCH_SYMBOL, SCH_TEXT, and SCH_TEXTBOX.

Definition at line 420 of file eda_item.h.

420{ return false; }

Referenced by EDA_ITEM::Matches().

◆ IsResized()

bool EDA_ITEM::IsResized ( ) const
inlineinherited

Definition at line 109 of file eda_item.h.

109{ return m_flags & IS_RESIZING; }

References IS_RESIZING, and EDA_ITEM::m_flags.

◆ IsRollover()

bool EDA_ITEM::IsRollover ( ) const
inlineinherited

Definition at line 112 of file eda_item.h.

113 {
114 return ( m_flags & ( IS_ROLLOVER | IS_MOVING ) ) == IS_ROLLOVER;
115 }
#define IS_ROLLOVER
Rollover active. Used for hyperlink highlighting.

References IS_MOVING, IS_ROLLOVER, and EDA_ITEM::m_flags.

Referenced by KIGFX::SCH_PAINTER::draw().

◆ IsSelected()

bool EDA_ITEM::IsSelected ( ) const
inlineinherited

Definition at line 107 of file eda_item.h.

107{ return m_flags & SELECTED; }

References EDA_ITEM::m_flags, and SELECTED.

Referenced by ALIGN_DISTRIBUTE_TOOL::AlignBottom(), ALIGN_DISTRIBUTE_TOOL::AlignCenterX(), ALIGN_DISTRIBUTE_TOOL::AlignCenterY(), ALIGN_DISTRIBUTE_TOOL::AlignTop(), SCH_EDIT_TOOL::ChangeTextType(), SCH_EDIT_FRAME::ConvertPart(), DIALOG_CHANGE_SYMBOLS::DIALOG_CHANGE_SYMBOLS(), ALIGN_DISTRIBUTE_TOOL::doAlignLeft(), ALIGN_DISTRIBUTE_TOOL::doAlignRight(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersVertically(), ALIGN_DISTRIBUTE_TOOL::doDistributeGapsHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeGapsVertically(), KIGFX::SCH_PAINTER::draw(), KIGFX::PCB_PAINTER::draw(), KIGFX::PCB_PAINTER::Draw(), DS_PROXY_UNDO_ITEM::DS_PROXY_UNDO_ITEM(), KIGFX::GERBVIEW_RENDER_SETTINGS::GetColor(), KIGFX::DS_RENDER_SETTINGS::GetColor(), KIGFX::PCB_RENDER_SETTINGS::GetColor(), SCH_MOVE_TOOL::getConnectedDragItems(), KIGFX::SCH_PAINTER::getLineWidth(), DIALOG_EXCHANGE_FOOTPRINTS::isMatch(), DIALOG_CHANGE_SYMBOLS::isMatch(), SCH_MOVE_TOOL::Main(), SCH_SCREEN::MarkConnections(), SCH_LINE::MergeOverlap(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), SCH_MOVE_TOOL::moveItem(), KIGFX::SCH_PAINTER::nonCached(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), BOARD_COMMIT::Push(), EE_SELECTION_TOOL::RebuildSelection(), PCB_SELECTION_TOOL::RebuildSelection(), RENDER_3D_OPENGL::renderFootprint(), SCH_EDIT_TOOL::Rotate(), EE_TOOL_BASE< T >::saveCopyInUndoList(), GERBVIEW_SELECTION_TOOL::select(), PCB_SELECTION_TOOL::select(), PCB_SELECTION_TOOL::selectionContains(), PCB_SELECTION_TOOL::selectMultiple(), GERBVIEW_SELECTION_TOOL::selectPoint(), KIGFX::SCH_PAINTER::setDeviceColors(), PCB_BASE_EDIT_FRAME::unitsChangeRefresh(), GERBVIEW_SELECTION_TOOL::unselect(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem(), and DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::visitItem().

◆ IsShownAsBitmap()

bool EDA_ITEM::IsShownAsBitmap ( ) const
inlineinherited

Definition at line 175 of file eda_item.h.

175{ return m_flags & IS_SHOWN_AS_BITMAP; }
#define IS_SHOWN_AS_BITMAP

References IS_SHOWN_AS_BITMAP, and EDA_ITEM::m_flags.

◆ IsType()

bool SCH_ITEM::IsType ( const std::vector< KICAD_T > &  aScanTypes) const
inlineoverridevirtualinherited

Check whether the item is one of the listed types.

Parameters
aScanTypesList of item types
Returns
true if the item type is contained in the list aScanTypes

Reimplemented from EDA_ITEM.

Reimplemented in SCH_LABEL_BASE, and SCH_LINE.

Definition at line 162 of file sch_item.h.

163 {
164 if( EDA_ITEM::IsType( aScanTypes ) )
165 return true;
166
167 for( KICAD_T scanType : aScanTypes )
168 {
169 if( scanType == SCH_ITEM_LOCATE_WIRE_T && m_layer == LAYER_WIRE )
170 return true;
171
172 if ( scanType == SCH_ITEM_LOCATE_BUS_T && m_layer == LAYER_BUS )
173 return true;
174
175 if ( scanType == SCH_ITEM_LOCATE_GRAPHIC_LINE_T
176 && Type() == SCH_LINE_T && m_layer == LAYER_NOTES )
177 {
178 return true;
179 }
180 }
181
182 return false;
183 }
virtual bool IsType(const std::vector< KICAD_T > &aScanTypes) const
Check whether the item is one of the listed types.
Definition: eda_item.h:183
@ LAYER_WIRE
Definition: layer_ids.h:344
@ LAYER_BUS
Definition: layer_ids.h:345
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:78
@ SCH_LINE_T
Definition: typeinfo.h:145
@ SCH_ITEM_LOCATE_WIRE_T
Definition: typeinfo.h:169
@ SCH_ITEM_LOCATE_BUS_T
Definition: typeinfo.h:170
@ SCH_ITEM_LOCATE_GRAPHIC_LINE_T
Definition: typeinfo.h:171

References EDA_ITEM::IsType(), LAYER_BUS, LAYER_NOTES, LAYER_WIRE, SCH_ITEM::m_layer, SCH_ITEM_LOCATE_BUS_T, SCH_ITEM_LOCATE_GRAPHIC_LINE_T, SCH_ITEM_LOCATE_WIRE_T, SCH_LINE_T, and EDA_ITEM::Type().

Referenced by SCH_EDIT_TOOL::AutoplaceFields(), SCH_EDIT_FRAME::AutoRotateItem(), SCH_FIELD::IsType(), SCH_LABEL_BASE::IsType(), SCH_LINE::IsType(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem().

◆ IsWireImage()

bool EDA_ITEM::IsWireImage ( ) const
inlineinherited

Definition at line 106 of file eda_item.h.

106{ return m_flags & IS_WIRE_IMAGE; }

References IS_WIRE_IMAGE, and EDA_ITEM::m_flags.

◆ IterateForward() [1/2]

template<class T >
static INSPECT_RESULT EDA_ITEM::IterateForward ( std::deque< T > &  aList,
INSPECTOR  inspector,
void *  testData,
const std::vector< KICAD_T > &  scanTypes 
)
inlinestaticinherited

This changes first parameter to avoid the DList and use the main queue instead.

Definition at line 302 of file eda_item.h.

304 {
305 for( const auto& it : aList )
306 {
307 if( static_cast<EDA_ITEM*>( it )->Visit( inspector,
308 testData,
309 scanTypes ) == INSPECT_RESULT::QUIT )
310 {
312 }
313 }
314
316 }
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:85
virtual INSPECT_RESULT Visit(INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &aScanTypes)
May be re-implemented for each derived class in order to handle all the types given by its member dat...
Definition: eda_item.cpp:91

References CONTINUE, QUIT, and EDA_ITEM::Visit().

Referenced by GERBER_FILE_IMAGE::Visit().

◆ IterateForward() [2/2]

template<class T >
static INSPECT_RESULT EDA_ITEM::IterateForward ( std::vector< T > &  aList,
INSPECTOR  inspector,
void *  testData,
const std::vector< KICAD_T > &  scanTypes 
)
inlinestaticinherited

Change first parameter to avoid the DList and use std::vector instead.

Definition at line 322 of file eda_item.h.

324 {
325 for( const auto& it : aList )
326 {
327 if( static_cast<EDA_ITEM*>( it )->Visit( inspector,
328 testData,
329 scanTypes ) == INSPECT_RESULT::QUIT )
330 {
332 }
333 }
334
336 }

References CONTINUE, QUIT, and EDA_ITEM::Visit().

◆ makeEffectiveShapes()

std::vector< SHAPE * > EDA_SHAPE::makeEffectiveShapes ( bool  aEdgeOnly,
bool  aLineChainOnly = false 
) const
protectedinherited

Make a set of SHAPE objects representing the EDA_SHAPE.

Caller owns the objects.

Parameters
aEdgeOnlyindicates only edges should be generated (even if 0 width), and no fill shapes.
aLineChainOnlyindicates SHAPE_POLY_SET is being abused slightly to represent a lineChain rather than a closed polygon

Definition at line 1079 of file eda_shape.cpp.

1080{
1081 std::vector<SHAPE*> effectiveShapes;
1082 int width = GetEffectiveWidth();
1083
1084 switch( m_shape )
1085 {
1086 case SHAPE_T::ARC:
1087 effectiveShapes.emplace_back( new SHAPE_ARC( m_arcCenter, m_start, GetArcAngle(), width ) );
1088 break;
1089
1090 case SHAPE_T::SEGMENT:
1091 effectiveShapes.emplace_back( new SHAPE_SEGMENT( m_start, m_end, width ) );
1092 break;
1093
1094 case SHAPE_T::RECT:
1095 {
1096 std::vector<VECTOR2I> pts = GetRectCorners();
1097
1098 if( ( IsFilled() || IsAnnotationProxy() ) && !aEdgeOnly )
1099 effectiveShapes.emplace_back( new SHAPE_SIMPLE( pts ) );
1100
1101 if( width > 0 || !IsFilled() || aEdgeOnly )
1102 {
1103 effectiveShapes.emplace_back( new SHAPE_SEGMENT( pts[0], pts[1], width ) );
1104 effectiveShapes.emplace_back( new SHAPE_SEGMENT( pts[1], pts[2], width ) );
1105 effectiveShapes.emplace_back( new SHAPE_SEGMENT( pts[2], pts[3], width ) );
1106 effectiveShapes.emplace_back( new SHAPE_SEGMENT( pts[3], pts[0], width ) );
1107 }
1108 }
1109 break;
1110
1111 case SHAPE_T::CIRCLE:
1112 {
1113 if( IsFilled() && !aEdgeOnly )
1114 effectiveShapes.emplace_back( new SHAPE_CIRCLE( getCenter(), GetRadius() ) );
1115
1116 if( width > 0 || !IsFilled() || aEdgeOnly )
1117 effectiveShapes.emplace_back( new SHAPE_ARC( getCenter(), GetEnd(), ANGLE_360, width ) );
1118
1119 break;
1120 }
1121
1122 case SHAPE_T::BEZIER:
1123 {
1124 std::vector<VECTOR2I> bezierPoints = buildBezierToSegmentsPointsList( width );
1125 VECTOR2I start_pt = bezierPoints[0];
1126
1127 for( unsigned int jj = 1; jj < bezierPoints.size(); jj++ )
1128 {
1129 VECTOR2I end_pt = bezierPoints[jj];
1130 effectiveShapes.emplace_back( new SHAPE_SEGMENT( start_pt, end_pt, width ) );
1131 start_pt = end_pt;
1132 }
1133
1134 break;
1135 }
1136
1137 case SHAPE_T::POLY:
1138 {
1139 if( GetPolyShape().OutlineCount() == 0 ) // malformed/empty polygon
1140 break;
1141
1143
1144 if( aLineChainOnly )
1145 l.SetClosed( false );
1146
1148 l.Move( getParentPosition() );
1149
1150 if( IsFilled() && !aEdgeOnly )
1151 effectiveShapes.emplace_back( new SHAPE_SIMPLE( l ) );
1152
1153 if( width > 0 || !IsFilled() || aEdgeOnly )
1154 {
1155 for( int i = 0; i < l.SegmentCount(); i++ )
1156 effectiveShapes.emplace_back( new SHAPE_SEGMENT( l.Segment( i ), width ) );
1157 }
1158 }
1159 break;
1160
1161 default:
1163 break;
1164 }
1165
1166 return effectiveShapes;
1167}
virtual int GetEffectiveWidth() const
Definition: eda_shape.h:108
const std::vector< VECTOR2I > buildBezierToSegmentsPointsList(int aMinSegLen) const
Definition: eda_shape.cpp:384
int SegmentCount() const
Return the number of segments in this line chain.
SEG Segment(int aIndex)
Return a copy of the aIndex-th segment in the line chain.
Represent a simple polygon consisting of a zero-thickness closed chain of connected line segments.
Definition: shape_simple.h:42

References ANGLE_360, ARC, BEZIER, EDA_SHAPE::buildBezierToSegmentsPointsList(), CIRCLE, SHAPE_POLY_SET::COutline(), EDA_SHAPE::GetArcAngle(), EDA_SHAPE::getCenter(), EDA_SHAPE::GetEffectiveWidth(), EDA_SHAPE::GetEnd(), EDA_SHAPE::getParentOrientation(), EDA_SHAPE::getParentPosition(), EDA_SHAPE::GetPolyShape(), EDA_SHAPE::GetRadius(), EDA_SHAPE::GetRectCorners(), EDA_SHAPE::IsAnnotationProxy(), EDA_SHAPE::IsFilled(), EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_end, EDA_SHAPE::m_shape, EDA_SHAPE::m_start, SHAPE_LINE_CHAIN::Move(), POLY, RECT, SHAPE_LINE_CHAIN::Rotate(), SEGMENT, SHAPE_LINE_CHAIN::Segment(), SHAPE_LINE_CHAIN::SegmentCount(), SHAPE_LINE_CHAIN::SetClosed(), EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by EDA_SHAPE::MakeEffectiveShapes(), and LIB_SHAPE::MakeEffectiveShapes().

◆ MakeEffectiveShapes()

virtual std::vector< SHAPE * > EDA_SHAPE::MakeEffectiveShapes ( bool  aEdgeOnly = false) const
inlinevirtualinherited

Make a set of SHAPE objects representing the EDA_SHAPE.

Caller owns the objects.

Parameters
aEdgeOnlyindicates only edges should be generated (even if 0 width), and no fill shapes.

Reimplemented in LIB_SHAPE.

Definition at line 285 of file eda_shape.h.

286 {
287 return makeEffectiveShapes( aEdgeOnly );
288 }
std::vector< SHAPE * > makeEffectiveShapes(bool aEdgeOnly, bool aLineChainOnly=false) const
Make a set of SHAPE objects representing the EDA_SHAPE.
Definition: eda_shape.cpp:1079

References EDA_SHAPE::makeEffectiveShapes().

Referenced by BOARD_ADAPTER::addShape(), KIGFX::PCB_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), PCB_SHAPE::GetEffectiveShape(), BRDITEMS_PLOTTER::PlotFootprintShape(), BRDITEMS_PLOTTER::PlotPcbShape(), Print(), SCH_TEXTBOX::Print(), and PNS_KICAD_IFACE_BASE::syncGraphicalItem().

◆ Matches() [1/2]

virtual bool EDA_ITEM::Matches ( const EDA_SEARCH_DATA aSearchData,
void *  aAuxData 
) const
inlinevirtualinherited

Compare the item against the search criteria in aSearchData.

The base class returns false since many of the objects derived from EDA_ITEM do not have any text to search.

Parameters
aSearchDataA reference to a wxFindReplaceData object containing the search criteria.
aAuxDataA pointer to optional data required for the search or NULL if not used.
Returns
True if the item's text matches the search criteria in aSearchData.

Reimplemented in SCH_MARKER, LIB_TEXTBOX, SCH_FIELD, SCH_PIN, SCH_SHEET, SCH_SHEET_PIN, SCH_SYMBOL, SCH_TEXT, SCH_TEXTBOX, FP_TEXT, FP_TEXTBOX, NETINFO_ITEM, PCB_MARKER, PCB_TEXT, PCB_TEXTBOX, and ZONE.

Definition at line 382 of file eda_item.h.

383 {
384 return false;
385 }

Referenced by SCH_DRAWING_TOOLS::DrawShape(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), SCH_EDITOR_CONTROL::HasMatch(), SCH_MARKER::Matches(), LIB_TEXTBOX::Matches(), SCH_FIELD::Matches(), SCH_PIN::Matches(), SCH_SHEET_PIN::Matches(), SCH_TEXT::Matches(), SCH_TEXTBOX::Matches(), FP_TEXT::Matches(), FP_TEXTBOX::Matches(), NETINFO_ITEM::Matches(), PCB_MARKER::Matches(), PCB_TEXT::Matches(), PCB_TEXTBOX::Matches(), ZONE::Matches(), SCH_EDITOR_CONTROL::ReplaceAndFindNext(), SCH_DRAWING_TOOLS::TwoClickPlace(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), and SCH_EDITOR_CONTROL::UpdateFind().

◆ Matches() [2/2]

bool EDA_ITEM::Matches ( const wxString &  aText,
const EDA_SEARCH_DATA aSearchData 
) const
protectedinherited

Compare aText against search criteria in aSearchData.

This is a helper function for simplify derived class logic.

Parameters
aTextA reference to a wxString object containing the string to test.
aSearchDataThe criteria to search against.
Returns
True if aText matches the search criteria in aSearchData.

Definition at line 117 of file eda_item.cpp.

118{
119 wxString text = aText;
120 wxString searchText = aSearchData.findString;
121
122 // Don't match if searching for replaceable item and the item doesn't support text replace.
123 if( aSearchData.searchAndReplace && !IsReplaceable() )
124 return false;
125
126 if( !aSearchData.matchCase )
127 {
128 text.MakeUpper();
129 searchText.MakeUpper();
130 }
131
133 {
134 int ii = 0;
135
136 while( ii < (int) text.length() )
137 {
138 int next = text.find( searchText, ii );
139
140 if( next == wxNOT_FOUND )
141 return false;
142
143 ii = next;
144 next += searchText.length();
145
146 bool startOK = ( ii == 0 || !wxIsalnum( text.GetChar( ii - 1 ) ) );
147 bool endOK = ( next == (int) text.length() || !wxIsalnum( text.GetChar( next ) ) );
148
149 if( startOK && endOK )
150 return true;
151 else
152 ii++;
153 }
154
155 return false;
156 }
157 else if( aSearchData.matchMode == EDA_SEARCH_MATCH_MODE::WILDCARD )
158 {
159 return text.Matches( searchText );
160 }
161 else
162 {
163 return text.Find( searchText ) != wxNOT_FOUND;
164 }
165}
virtual bool IsReplaceable() const
Override this method in any derived object that supports test find and replace.
Definition: eda_item.h:420
CITER next(CITER it)
Definition: ptree.cpp:126
EDA_SEARCH_MATCH_MODE matchMode

References EDA_SEARCH_DATA::findString, EDA_ITEM::IsReplaceable(), EDA_SEARCH_DATA::matchCase, EDA_SEARCH_DATA::matchMode, next(), EDA_SEARCH_DATA::searchAndReplace, text, WHOLEWORD, and WILDCARD.

◆ MirrorHorizontally()

void SCH_SHAPE::MirrorHorizontally ( int  aCenter)
overridevirtual

Mirror item horizontally about aCenter.

Implements SCH_ITEM.

Reimplemented in SCH_TEXTBOX.

Definition at line 94 of file sch_shape.cpp.

95{
96 flip( VECTOR2I( aCenter, 0 ), true );
97}
void flip(const VECTOR2I &aCentre, bool aFlipLeftRight)
Definition: eda_shape.cpp:285

References EDA_SHAPE::flip().

◆ MirrorVertically()

void SCH_SHAPE::MirrorVertically ( int  aCenter)
overridevirtual

Mirror item vertically about aCenter.

Implements SCH_ITEM.

Reimplemented in SCH_TEXTBOX.

Definition at line 100 of file sch_shape.cpp.

101{
102 flip( VECTOR2I( 0, aCenter ), false );
103}

References EDA_SHAPE::flip().

◆ move()

void EDA_SHAPE::move ( const VECTOR2I aMoveVector)
protectedinherited

Definition at line 141 of file eda_shape.cpp.

142{
143 switch ( m_shape )
144 {
145 case SHAPE_T::ARC:
146 case SHAPE_T::SEGMENT:
147 case SHAPE_T::RECT:
148 case SHAPE_T::CIRCLE:
149 m_start += aMoveVector;
150 m_end += aMoveVector;
151 m_arcCenter += aMoveVector;
152 break;
153
154 case SHAPE_T::POLY:
155 m_poly.Move( VECTOR2I( aMoveVector ) );
156 break;
157
158 case SHAPE_T::BEZIER:
159 m_start += aMoveVector;
160 m_end += aMoveVector;
161 m_bezierC1 += aMoveVector;
162 m_bezierC2 += aMoveVector;
163
164 for( VECTOR2I& pt : m_bezierPoints )
165 pt += aMoveVector;
166
167 break;
168
169 default:
171 break;
172 }
173}
void Move(const VECTOR2I &aVector) override

References ARC, BEZIER, CIRCLE, EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_bezierC1, EDA_SHAPE::m_bezierC2, EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_end, EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, EDA_SHAPE::m_start, SHAPE_POLY_SET::Move(), POLY, RECT, SEGMENT, EDA_SHAPE::SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by SCH_TEXTBOX::Move(), PCB_SHAPE::Move(), Move(), LIB_SHAPE::Offset(), and EDA_SHAPE::setPosition().

◆ Move()

void SCH_SHAPE::Move ( const VECTOR2I aMoveVector)
overridevirtual

Move the item by aMoveVector to a new position.

Implements SCH_ITEM.

Reimplemented in SCH_TEXTBOX.

Definition at line 67 of file sch_shape.cpp.

68{
69 move( aOffset );
70}
void move(const VECTOR2I &aMoveVector)
Definition: eda_shape.cpp:141

References EDA_SHAPE::move().

◆ Normalize()

void SCH_SHAPE::Normalize ( )

Definition at line 73 of file sch_shape.cpp.

74{
75 if( GetShape() == SHAPE_T::RECT )
76 {
77 VECTOR2I size = GetEnd() - GetPosition();
78
79 if( size.y < 0 )
80 {
81 SetStartY( GetStartY() + size.y );
82 SetEndY( GetStartY() - size.y );
83 }
84
85 if( size.x < 0 )
86 {
87 SetStartX( GetStartX() + size.x );
88 SetEndX( GetStartX() - size.x );
89 }
90 }
91}
void SetStartX(int x)
Definition: eda_shape.h:132
int GetStartY() const
Definition: eda_shape.h:117
void SetEndY(int y)
Definition: eda_shape.h:151
void SetStartY(int y)
Definition: eda_shape.h:126
void SetEndX(int x)
Definition: eda_shape.h:157
int GetStartX() const
Definition: eda_shape.h:118
VECTOR2I GetPosition() const override
Definition: sch_shape.h:77

References EDA_SHAPE::GetEnd(), GetPosition(), EDA_SHAPE::GetShape(), EDA_SHAPE::GetStartX(), EDA_SHAPE::GetStartY(), RECT, EDA_SHAPE::SetEndX(), EDA_SHAPE::SetEndY(), EDA_SHAPE::SetStartX(), EDA_SHAPE::SetStartY(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by EDIT_POINTS_FACTORY::Make().

◆ operator<() [1/2]

bool EDA_ITEM::operator< ( const EDA_ITEM aItem) const
inherited

Test if another item is less than this object.

Parameters
aItem- Item to compare against.
Returns
- True if aItem is less than the item.

Definition at line 231 of file eda_item.cpp.

232{
233 wxFAIL_MSG( wxString::Format( wxT( "Less than operator not defined for item type %s." ),
234 GetClass() ) );
235
236 return false;
237}
virtual wxString GetClass() const =0
Return the class name.

References Format(), and EDA_ITEM::GetClass().

◆ operator<() [2/2]

bool SCH_ITEM::operator< ( const SCH_ITEM aItem) const
virtualinherited

Reimplemented in SCH_BUS_ENTRY_BASE, SCH_FIELD, SCH_JUNCTION, SCH_LINE, SCH_SHEET, SCH_SYMBOL, SCH_TEXT, and SCH_TEXTBOX.

Definition at line 271 of file sch_item.cpp.

272{
273 if( Type() != aItem.Type() )
274 return Type() < aItem.Type();
275
276 if( GetPosition().x != aItem.GetPosition().x )
277 return GetPosition().x < aItem.GetPosition().x;
278
279 if( GetPosition().y != aItem.GetPosition().y )
280 return GetPosition().y < aItem.GetPosition().y;
281
282 return m_Uuid < aItem.m_Uuid;
283}

References EDA_ITEM::GetPosition(), EDA_ITEM::m_Uuid, EDA_ITEM::Type(), VECTOR2< T >::x, and VECTOR2< T >::y.

◆ Plot()

void SCH_SHAPE::Plot ( PLOTTER aPlotter,
bool  aBackground 
) const
overridevirtual

Plot the schematic item to aPlotter.

Parameters
aPlotteris the PLOTTER object to plot to.
aBackgrounda poor-man's Z-order. The routine will get called twice, first with aBackground true and then with aBackground false.

Reimplemented from SCH_ITEM.

Reimplemented in SCH_TEXTBOX.

Definition at line 112 of file sch_shape.cpp.

113{
114 int pen_size = std::max( GetPenWidth(), aPlotter->RenderSettings()->GetMinPenWidth() );
115
116 static std::vector<VECTOR2I> cornerList;
117
118 if( GetShape() == SHAPE_T::POLY )
119 {
120 cornerList.clear();
121
122 for( const VECTOR2I& pt : m_poly.Outline( 0 ).CPoints() )
123 cornerList.push_back( pt );
124 }
125
126 if( aBackground )
127 {
128 if( !aPlotter->GetColorMode() )
129 return;
130
131 if( m_fill == FILL_T::FILLED_WITH_COLOR && GetFillColor() != COLOR4D::UNSPECIFIED )
132 {
133 if( GetFillColor() != COLOR4D::UNSPECIFIED )
134 aPlotter->SetColor( GetFillColor() );
135 else
136 aPlotter->SetColor( aPlotter->RenderSettings()->GetLayerColor( LAYER_NOTES ) );
137
138 switch( GetShape() )
139 {
140 case SHAPE_T::ARC:
141 {
142 // In some plotters (not all) the arc is approximated by segments, and
143 // a error max is needed. We try to approximate by 360/5 segments by 360 deg
144 int arc2segment_error = CircleToEndSegmentDeltaRadius( GetRadius(), 360/5 );
145 aPlotter->Arc( getCenter(), GetStart(), GetEnd(), m_fill, 0, arc2segment_error );
146 }
147
148 break;
149
150 case SHAPE_T::CIRCLE:
151 aPlotter->Circle( getCenter(), GetRadius() * 2, m_fill, 0 );
152 break;
153
154 case SHAPE_T::RECT:
155 aPlotter->Rect( GetStart(), GetEnd(), m_fill, 0 );
156 break;
157
158 case SHAPE_T::POLY:
159 aPlotter->PlotPoly( cornerList, m_fill, 0 );
160 break;
161
162 case SHAPE_T::BEZIER:
163 aPlotter->PlotPoly( m_bezierPoints, m_fill, 0 );
164 break;
165
166 default:
168 }
169 }
170 }
171 else /* if( aForeground ) */
172 {
173 if( aPlotter->GetColorMode() && GetStroke().GetColor() != COLOR4D::UNSPECIFIED )
174 aPlotter->SetColor( GetStroke().GetColor() );
175 else
176 aPlotter->SetColor( aPlotter->RenderSettings()->GetLayerColor( LAYER_NOTES ) );
177
178 aPlotter->SetCurrentLineWidth( pen_size );
179 aPlotter->SetDash( pen_size, GetEffectiveLineStyle() );
180
181 switch( GetShape() )
182 {
183 case SHAPE_T::ARC:
184 {
185 // In some plotters (not all) the arc is approximated by segments, and
186 // a error max is needed. We try to approximate by 360/5 segments by 360 deg
187 int arc2segment_error = CircleToEndSegmentDeltaRadius( GetRadius(), 360/5 );
188 aPlotter->Arc( getCenter(), GetStart(), GetEnd(), FILL_T::NO_FILL, pen_size, arc2segment_error );
189 }
190
191 break;
192
193 case SHAPE_T::CIRCLE:
194 aPlotter->Circle( getCenter(), GetRadius() * 2, FILL_T::NO_FILL, pen_size );
195 break;
196
197 case SHAPE_T::RECT:
198 {
199 std::vector<VECTOR2I> pts = GetRectCorners();
200
201 aPlotter->MoveTo( pts[0] );
202 aPlotter->LineTo( pts[1] );
203 aPlotter->LineTo( pts[2] );
204 aPlotter->LineTo( pts[3] );
205 aPlotter->FinishTo( pts[0] );
206 }
207 break;
208
209 case SHAPE_T::POLY:
210 aPlotter->PlotPoly( cornerList, FILL_T::NO_FILL, pen_size );
211 break;
212
213 case SHAPE_T::BEZIER:
214 aPlotter->PlotPoly( m_bezierPoints, FILL_T::NO_FILL, pen_size );
215 break;
216
217 default:
219 }
220
221 aPlotter->SetDash( pen_size, PLOT_DASH_TYPE::SOLID );
222 }
223}
COLOR4D GetFillColor() const
Definition: eda_shape.h:103
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
virtual void SetDash(int aLineWidth, PLOT_DASH_TYPE aLineStyle)=0
virtual void Circle(const VECTOR2I &pos, int diametre, FILL_T fill, int width=USE_DEFAULT_LINE_WIDTH)=0
void MoveTo(const VECTOR2I &pos)
Definition: plotter.h:247
virtual void Arc(const VECTOR2I &aCenter, const VECTOR2I &aStart, const VECTOR2I &aEnd, FILL_T aFill, int aWidth, int aMaxError)
Generic fallback: arc rendered as a polyline.
Definition: plotter.cpp:149
void FinishTo(const VECTOR2I &pos)
Definition: plotter.h:257
RENDER_SETTINGS * RenderSettings()
Definition: plotter.h:141
bool GetColorMode() const
Definition: plotter.h:138
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.
void LineTo(const VECTOR2I &pos)
Definition: plotter.h:252
virtual void PlotPoly(const std::vector< VECTOR2I > &aCornerList, FILL_T aFill, int aWidth=USE_DEFAULT_LINE_WIDTH, void *aData=nullptr)=0
Draw a polygon ( filled or not ).
virtual void Rect(const VECTOR2I &p1, const VECTOR2I &p2, FILL_T fill, int width=USE_DEFAULT_LINE_WIDTH)=0
virtual void SetColor(const COLOR4D &color)=0
PLOT_DASH_TYPE GetEffectiveLineStyle() const
Definition: sch_shape.h:67
STROKE_PARAMS GetStroke() const override
Definition: sch_shape.h:64
const std::vector< VECTOR2I > & CPoints() const
@ FILLED_WITH_COLOR
int CircleToEndSegmentDeltaRadius(int aInnerCircleRadius, int aSegCount)

References ARC, PLOTTER::Arc(), BEZIER, CIRCLE, PLOTTER::Circle(), CircleToEndSegmentDeltaRadius(), SHAPE_LINE_CHAIN::CPoints(), FILLED_WITH_COLOR, PLOTTER::FinishTo(), EDA_SHAPE::getCenter(), PLOTTER::GetColorMode(), GetEffectiveLineStyle(), EDA_SHAPE::GetEnd(), EDA_SHAPE::GetFillColor(), KIGFX::RENDER_SETTINGS::GetLayerColor(), KIGFX::RENDER_SETTINGS::GetMinPenWidth(), GetPenWidth(), EDA_SHAPE::GetRadius(), EDA_SHAPE::GetRectCorners(), EDA_SHAPE::GetShape(), EDA_SHAPE::GetStart(), GetStroke(), LAYER_NOTES, PLOTTER::LineTo(), EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_fill, EDA_SHAPE::m_poly, PLOTTER::MoveTo(), NO_FILL, SHAPE_POLY_SET::Outline(), PLOTTER::PlotPoly(), POLY, RECT, PLOTTER::Rect(), PLOTTER::RenderSettings(), PLOTTER::SetColor(), PLOTTER::SetCurrentLineWidth(), PLOTTER::SetDash(), EDA_SHAPE::SHAPE_T_asString(), SOLID, and UNIMPLEMENTED_FOR.

Referenced by SCH_TEXTBOX::Plot().

◆ Print()

void SCH_SHAPE::Print ( const RENDER_SETTINGS aSettings,
const VECTOR2I aOffset 
)
overrideprivatevirtual

Print a schematic item.

Each schematic item should have its own method

Parameters
aOffsetis the drawing offset (usually {0,0} but can be different when moving an object).

Implements SCH_ITEM.

Reimplemented in SCH_TEXTBOX.

Definition at line 244 of file sch_shape.cpp.

245{
246 int penWidth = GetPenWidth();
247 wxDC* DC = aSettings->GetPrintDC();
249
250 penWidth = std::max( penWidth, aSettings->GetMinPenWidth() );
251
252 unsigned ptCount = 0;
253 VECTOR2I* buffer = nullptr;
254
255 if( GetShape() == SHAPE_T::POLY )
256 {
257 SHAPE_LINE_CHAIN poly = m_poly.Outline( 0 );
258
259 ptCount = poly.GetPointCount();
260 buffer = new VECTOR2I[ptCount];
261
262 for( unsigned ii = 0; ii < ptCount; ++ii )
263 buffer[ii] = poly.CPoint( ii );
264 }
265 else if( GetShape() == SHAPE_T::BEZIER )
266 {
267 ptCount = m_bezierPoints.size();
268 buffer = new VECTOR2I[ptCount];
269
270 for( size_t ii = 0; ii < ptCount; ++ii )
271 buffer[ii] = m_bezierPoints[ii];
272 }
273
275 {
276 if( GetFillColor() == COLOR4D::UNSPECIFIED )
277 color = aSettings->GetLayerColor( LAYER_NOTES );
278 else
280
281 switch( GetShape() )
282 {
283 case SHAPE_T::ARC:
284 GRFilledArc( DC, GetEnd(), GetStart(), getCenter(), 0, color, color );
285 break;
286
287 case SHAPE_T::CIRCLE:
289 break;
290
291 case SHAPE_T::RECT:
292 GRFilledRect( DC, GetStart(), GetEnd(), 0, color, color );
293 break;
294
295 case SHAPE_T::POLY:
296 GRPoly( DC, ptCount, buffer, true, 0, color, color );
297 break;
298
299 case SHAPE_T::BEZIER:
300 GRPoly( DC, ptCount, buffer, true, 0, color, color );
301 break;
302
303 default:
305 }
306 }
307
308 if( GetStroke().GetColor() == COLOR4D::UNSPECIFIED )
309 color = aSettings->GetLayerColor( LAYER_NOTES );
310 else
312
314 {
315 switch( GetShape() )
316 {
317 case SHAPE_T::ARC:
318 GRArc( DC, GetEnd(), GetStart(), getCenter(), penWidth, color );
319 break;
320
321 case SHAPE_T::CIRCLE:
322 GRCircle( DC, GetStart(), GetRadius(), penWidth, color );
323 break;
324
325 case SHAPE_T::RECT:
326 GRRect( DC, GetStart(), GetEnd(), penWidth, color );
327 break;
328
329 case SHAPE_T::POLY:
330 GRPoly( DC, ptCount, buffer, false, penWidth, color, color );
331 break;
332
333 case SHAPE_T::BEZIER:
334 GRPoly( DC, ptCount, buffer, false, penWidth, color, color );
335 break;
336
337 default:
339 }
340 }
341 else
342 {
343 std::vector<SHAPE*> shapes = MakeEffectiveShapes( true );
344
345 for( SHAPE* shape : shapes )
346 {
347 STROKE_PARAMS::Stroke( shape, GetEffectiveLineStyle(), penWidth, aSettings,
348 [&]( const VECTOR2I& a, const VECTOR2I& b )
349 {
350 GRLine( DC, a.x, a.y, b.x, b.y, penWidth, color );
351 } );
352 }
353
354 for( SHAPE* shape : shapes )
355 delete shape;
356 }
357
358 delete[] buffer;
359}
int color
Definition: DXF_plotter.cpp:57
virtual std::vector< SHAPE * > MakeEffectiveShapes(bool aEdgeOnly=false) const
Make a set of SHAPE objects representing the EDA_SHAPE.
Definition: eda_shape.h:285
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
wxDC * GetPrintDC() const
An abstract shape on 2D plane.
Definition: shape.h:123
static void Stroke(const SHAPE *aShape, PLOT_DASH_TYPE aLineStyle, int aWidth, const KIGFX::RENDER_SETTINGS *aRenderSettings, std::function< void(const VECTOR2I &a, const VECTOR2I &b)> aStroker)
KIGFX::COLOR4D GetColor() const
void GRRect(wxDC *DC, const VECTOR2I &aStart, const VECTOR2I &aEnd, int aWidth, const COLOR4D &aColor)
Definition: gr_basic.cpp:387
void GRCircle(wxDC *aDC, const VECTOR2I &aPos, int aRadius, int aWidth, const COLOR4D &aColor)
Definition: gr_basic.cpp:348
void GRFilledArc(wxDC *DC, const VECTOR2I &aStart, const VECTOR2I &aEnd, const VECTOR2I &aCenter, int width, const COLOR4D &Color, const COLOR4D &BgColor)
Definition: gr_basic.cpp:378
void GRLine(wxDC *DC, int x1, int y1, int x2, int y2, int width, const COLOR4D &Color, wxPenStyle aStyle)
Definition: gr_basic.cpp:162
void GRFilledRect(wxDC *DC, const VECTOR2I &aStart, const VECTOR2I &aEnd, int aWidth, const COLOR4D &aColor, const COLOR4D &aBgColor)
Definition: gr_basic.cpp:394
void GRArc(wxDC *aDC, const VECTOR2I &aStart, const VECTOR2I &aEnd, const VECTOR2I &aCenter, int aWidth, const COLOR4D &aColor)
Definition: gr_basic.cpp:369
void GRPoly(wxDC *DC, int n, const VECTOR2I *Points, bool Fill, int width, const COLOR4D &Color, const COLOR4D &BgColor)
Draw a new polyline and fill it if Fill, in drawing space.
Definition: gr_basic.cpp:332
void GRFilledCircle(wxDC *aDC, const VECTOR2I &aPos, int aRadius, int aWidth, const COLOR4D &aStrokeColor, const COLOR4D &aFillColor)
Draw a circle onto the drawing context aDC centered at the user coordinates (x,y).
Definition: gr_basic.cpp:360

References ARC, BEZIER, CIRCLE, color, SHAPE_LINE_CHAIN::CPoint(), FILLED_WITH_COLOR, EDA_SHAPE::getCenter(), STROKE_PARAMS::GetColor(), GetEffectiveLineStyle(), EDA_SHAPE::GetEnd(), EDA_SHAPE::GetFillColor(), EDA_SHAPE::GetFillMode(), KIGFX::RENDER_SETTINGS::GetLayerColor(), KIGFX::RENDER_SETTINGS::GetMinPenWidth(), GetPenWidth(), SHAPE_LINE_CHAIN::GetPointCount(), KIGFX::RENDER_SETTINGS::GetPrintDC(), EDA_SHAPE::GetRadius(), EDA_SHAPE::GetShape(), EDA_SHAPE::GetStart(), GetStroke(), GRArc(), GRCircle(), GRFilledArc(), GRFilledCircle(), GRFilledRect(), GRLine(), GRPoly(), GRRect(), LAYER_NOTES, EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_poly, EDA_SHAPE::MakeEffectiveShapes(), SHAPE_POLY_SET::Outline(), POLY, RECT, EDA_SHAPE::SHAPE_T_asString(), SOLID, STROKE_PARAMS::Stroke(), UNIMPLEMENTED_FOR, VECTOR2< T >::x, and VECTOR2< T >::y.

◆ RebuildBezierToSegmentsPointsList()

void EDA_SHAPE::RebuildBezierToSegmentsPointsList ( int  aMinSegLen)
inherited

Rebuild the m_bezierPoints vertex list that approximate the Bezier curve by a list of segments.

Has meaning only for BEZIER shape.

Parameters
aMinSegLenis the min length of segments approximating the bezier. The shape's last segment can be shorter. This parameter avoids having too many very short segment in list. Good values are between m_width/2 and m_width.

Definition at line 370 of file eda_shape.cpp.

371{
372 // Has meaning only for SHAPE_T::BEZIER
373 if( m_shape != SHAPE_T::BEZIER )
374 {
375 m_bezierPoints.clear();
376 return;
377 }
378
379 // Rebuild the m_BezierPoints vertex list that approximate the Bezier curve
381}

References BEZIER, EDA_SHAPE::buildBezierToSegmentsPointsList(), EDA_SHAPE::m_bezierPoints, and EDA_SHAPE::m_shape.

Referenced by ConvertOutlineToPolygon(), FP_SHAPE::Flip(), EDA_SHAPE::hitTest(), GRAPHICS_CLEANER::isNullShape(), SCH_LEGACY_PLUGIN_CACHE::loadBezier(), PCB_SHAPE::Mirror(), FP_SHAPE::Mirror(), FP_SHAPE::SetDrawCoord(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), and PCB_POINT_EDITOR::updateItem().

◆ RenderAsBitmap()

bool SCH_ITEM::RenderAsBitmap ( double  aWorldScale) const
overridevirtualinherited

Reimplemented from EDA_ITEM.

Definition at line 294 of file sch_item.cpp.

295{
296 if( IsHypertext() )
297 return false;
298
299 if( const EDA_TEXT* text = dynamic_cast<const EDA_TEXT*>( this ) )
300 return text->GetTextHeight() * aWorldScale < BITMAP_FONT_SIZE_THRESHOLD;
301
302 return false;
303}
virtual bool IsHypertext() const
Allow items to support hypertext actions when hovered/clicked.
Definition: sch_item.h:239
#define BITMAP_FONT_SIZE_THRESHOLD
Definition: sch_item.cpp:46

References BITMAP_FONT_SIZE_THRESHOLD, SCH_ITEM::IsHypertext(), and text.

Referenced by KIGFX::SCH_PAINTER::draw().

◆ Replace() [1/2]

virtual bool EDA_ITEM::Replace ( const EDA_SEARCH_DATA aSearchData,
void *  aAuxData = nullptr 
)
inlinevirtualinherited

Perform a text replace using the find and replace criteria in aSearchData on items that support text find and replace.

This function must be overridden for items that support text replace.

Parameters
aSearchDataA reference to a wxFindReplaceData object containing the search and replace criteria.
aAuxDataA pointer to optional data required for the search or NULL if not used.
Returns
True if the item text was modified, otherwise false.

Reimplemented in LIB_TEXTBOX, SCH_PIN, SCH_TEXT, SCH_TEXTBOX, SCH_FIELD, and SCH_SHEET_PIN.

Definition at line 409 of file eda_item.h.

410 {
411 return false;
412 }

◆ Replace() [2/2]

bool EDA_ITEM::Replace ( const EDA_SEARCH_DATA aSearchData,
wxString &  aText 
)
staticinherited

Perform a text replace on aText using the find and replace criteria in aSearchData on items that support text find and replace.

Parameters
aSearchDataA reference to a wxFindReplaceData object containing the search and replace criteria.
aTextA reference to a wxString object containing the text to be replaced.
Returns
True if aText was modified, otherwise false.

Definition at line 168 of file eda_item.cpp.

169{
170 wxString text = aText;
171 wxString searchText = aSearchData.findString;
172 wxString result;
173 bool replaced = false;
174
175 if( !aSearchData.matchCase )
176 {
177 text = text.Upper();
178 searchText = searchText.Upper();
179 }
180
181 int ii = 0;
182
183 while( ii < (int) text.length() )
184 {
185 int next = text.find( searchText, ii );
186
187 if( next == wxNOT_FOUND )
188 {
189 result += aText.Mid( ii, wxString::npos );
190 break;
191 }
192
193 if( next > ii )
194 result += aText.Mid( ii, next - ii );
195
196 ii = next;
197 next += searchText.length();
198
199 bool startOK;
200 bool endOK;
201
203 {
204 startOK = ( ii == 0 || !wxIsalnum( text.GetChar( ii - 1 ) ) );
205 endOK = ( next == (int) text.length() || !wxIsalnum( text.GetChar( next ) ) );
206 }
207 else
208 {
209 startOK = true;
210 endOK = true;
211 }
212
213 if( startOK && endOK )
214 {
215 result += aSearchData.replaceString;
216 replaced = true;
217 ii = next;
218 }
219 else
220 {
221 result += aText.GetChar( ii );
222 ii++;
223 }
224 }
225
226 aText = result;
227 return replaced;
228}
wxString replaceString

References EDA_SEARCH_DATA::findString, EDA_SEARCH_DATA::matchCase, EDA_SEARCH_DATA::matchMode, next(), EDA_SEARCH_DATA::replaceString, text, and WHOLEWORD.

Referenced by EDA_TEXT::Replace(), SCH_FIELD::Replace(), SCH_EDITOR_CONTROL::ReplaceAll(), and SCH_EDITOR_CONTROL::ReplaceAndFindNext().

◆ Rotate()

void SCH_SHAPE::Rotate ( const VECTOR2I aCenter)
overridevirtual

Rotate the item around aCenter 90 degrees in the clockwise direction.

Implements SCH_ITEM.

Reimplemented in SCH_TEXTBOX.

Definition at line 106 of file sch_shape.cpp.

107{
108 rotate( aCenter, -ANGLE_90 );
109}
void rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle)
Definition: eda_shape.cpp:228

References ANGLE_90, and EDA_SHAPE::rotate().

Referenced by SCH_TEXTBOX::Rotate().

◆ rotate()

void EDA_SHAPE::rotate ( const VECTOR2I aRotCentre,
const EDA_ANGLE aAngle 
)
protectedinherited

Definition at line 228 of file eda_shape.cpp.

229{
230 switch( m_shape )
231 {
232 case SHAPE_T::SEGMENT:
233 case SHAPE_T::CIRCLE:
234 RotatePoint( m_start, aRotCentre, aAngle );
235 RotatePoint( m_end, aRotCentre, aAngle );
236 break;
237
238 case SHAPE_T::ARC:
239 RotatePoint( m_start, aRotCentre, aAngle );
240 RotatePoint( m_end, aRotCentre, aAngle );
241 RotatePoint( m_arcCenter, aRotCentre, aAngle );
242 break;
243
244 case SHAPE_T::RECT:
245 if( aAngle.IsCardinal() )
246 {
247 RotatePoint( m_start, aRotCentre, aAngle );
248 RotatePoint( m_end, aRotCentre, aAngle );
249 break;
250 }
251
252 // Convert non-cardinally-rotated rect to a diamond
260
262
263 case SHAPE_T::POLY:
264 m_poly.Rotate( aAngle, aRotCentre );
265 break;
266
267 case SHAPE_T::BEZIER:
268 RotatePoint( m_start, aRotCentre, aAngle );
269 RotatePoint( m_end, aRotCentre, aAngle );
270 RotatePoint( m_bezierC1, aRotCentre, aAngle );
271 RotatePoint( m_bezierC2, aRotCentre, aAngle );
272
273 for( VECTOR2I& pt : m_bezierPoints )
274 RotatePoint( pt, aRotCentre, aAngle);
275
276 break;
277
278 default:
280 break;
281 }
282}
bool IsCardinal() const
Definition: eda_angle.cpp:49
void Rotate(const EDA_ANGLE &aAngle, const VECTOR2I &aCenter={ 0, 0 }) override
Rotate all vertices by a given angle.
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition: macros.h:83

References SHAPE_POLY_SET::Append(), ARC, BEZIER, CIRCLE, EDA_ANGLE::IsCardinal(), KI_FALLTHROUGH, EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_bezierC1, EDA_SHAPE::m_bezierC2, EDA_SHAPE::m_bezierPoints, EDA_SHAPE::m_end, EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, EDA_SHAPE::m_start, SHAPE_POLY_SET::NewOutline(), POLY, RECT, SHAPE_POLY_SET::RemoveAllContours(), SHAPE_POLY_SET::Rotate(), RotatePoint(), SEGMENT, EDA_SHAPE::SHAPE_T_asString(), UNIMPLEMENTED_FOR, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by Rotate(), LIB_SHAPE::Rotate(), and PCB_SHAPE::Rotate().

◆ RunOnChildren()

virtual void SCH_ITEM::RunOnChildren ( const std::function< void(SCH_ITEM *)> &  aFunction)
inlinevirtualinherited

◆ scale()

void EDA_SHAPE::scale ( double  aScale)
protectedinherited

Definition at line 176 of file eda_shape.cpp.

177{
178 auto scalePt = [&]( VECTOR2I& pt )
179 {
180 pt.x = KiROUND( pt.x * aScale );
181 pt.y = KiROUND( pt.y * aScale );
182 };
183
184 switch( m_shape )
185 {
186 case SHAPE_T::ARC:
187 case SHAPE_T::SEGMENT:
188 case SHAPE_T::RECT:
189 scalePt( m_start );
190 scalePt( m_end );
191 scalePt( m_arcCenter );
192 break;
193
194 case SHAPE_T::CIRCLE: // ring or circle
195 scalePt( m_start );
196 m_end.x = m_start.x + KiROUND( GetRadius() * aScale );
197 m_end.y = m_start.y;
198 break;
199
200 case SHAPE_T::POLY: // polygon
201 {
202 std::vector<VECTOR2I> pts;
203
204 for( const VECTOR2I& pt : m_poly.Outline( 0 ).CPoints() )
205 {
206 pts.emplace_back( pt );
207 scalePt( pts.back() );
208 }
209
210 SetPolyPoints( pts );
211 }
212 break;
213
214 case SHAPE_T::BEZIER:
215 scalePt( m_start );
216 scalePt( m_end );
217 scalePt( m_bezierC1 );
218 scalePt( m_bezierC2 );
219 break;
220
221 default:
223 break;
224 }
225}
void SetPolyPoints(const std::vector< VECTOR2I > &aPoints)
Definition: eda_shape.cpp:1069

References ARC, BEZIER, CIRCLE, SHAPE_LINE_CHAIN::CPoints(), EDA_SHAPE::GetRadius(), KiROUND(), EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_bezierC1, EDA_SHAPE::m_bezierC2, EDA_SHAPE::m_end, EDA_SHAPE::m_poly, EDA_SHAPE::m_shape, EDA_SHAPE::m_start, SHAPE_POLY_SET::Outline(), POLY, RECT, SEGMENT, EDA_SHAPE::SetPolyPoints(), EDA_SHAPE::SHAPE_T_asString(), UNIMPLEMENTED_FOR, VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by PCB_SHAPE::Scale().

◆ Schematic()

SCHEMATIC * SCH_ITEM::Schematic ( ) const
inherited

Searches the item hierarchy to find a SCHEMATIC.

Every SCH_ITEM that lives on a SCH_SCREEN should be parented to either that screen or another SCH_ITEM on the same screen (for example, pins to their symbols).

Every SCH_SCREEN should be parented to the SCHEMATIC.

Note
This hierarchy is not the same as the sheet hierarchy!
Returns
the parent schematic this item lives on, or nullptr.

Definition at line 112 of file sch_item.cpp.

113{
114 EDA_ITEM* parent = GetParent();
115
116 while( parent )
117 {
118 if( parent->Type() == SCHEMATIC_T )
119 return static_cast<SCHEMATIC*>( parent );
120 else
121 parent = parent->GetParent();
122 }
123
124 return nullptr;
125}
EDA_ITEM * GetParent() const
Definition: eda_item.h:99
@ SCHEMATIC_T
Definition: typeinfo.h:187

References EDA_ITEM::GetParent(), SCHEMATIC_T, and EDA_ITEM::Type().

Referenced by SCH_EDIT_TOOL::ChangeTextType(), SCH_ITEM::Connection(), SCH_DRAWING_TOOLS::createSheetPin(), DIALOG_SCH_FIELD_PROPERTIES::DIALOG_SCH_FIELD_PROPERTIES(), SCH_SHEET::findSelf(), SCH_MARKER::GetColorLayer(), SCH_ITEM::GetEffectiveNetClass(), SCH_JUNCTION::getEffectiveShape(), SCH_LABEL_BASE::GetIntersheetRefs(), SCH_LABEL_BASE::GetLabelBoxExpansion(), SCH_DIRECTIVE_LABEL::GetPenWidth(), SCH_LINE::GetPenWidth(), SCH_NO_CONNECT::GetPenWidth(), GetPenWidth(), SCH_SHEET::GetPenWidth(), SCH_SHEET_PIN::GetPenWidth(), SCH_SYMBOL::GetPins(), SCH_MARKER::GetSeverity(), SCH_FIELD::GetShownText(), SCH_LABEL_BASE::GetShownText(), SCH_TEXT::GetShownText(), SCH_TEXTBOX::GetShownText(), SCH_TEXT::GetTextOffset(), SCH_PIN::HitTest(), SCH_SHEET::IsRootSheet(), SCH_LABEL_BASE::IsType(), DIALOG_SYMBOL_PROPERTIES::OnAddField(), DIALOG_SCH_FIELD_PROPERTIES::onScintillaCharAdded(), DIALOG_TEXT_PROPERTIES::onScintillaCharAdded(), SCH_LABEL_BASE::ResolveTextVar(), SCH_GLOBALLABEL::ResolveTextVar(), SCH_SHEET::ResolveTextVar(), SCH_SYMBOL::ResolveTextVar(), SCH_SYMBOL::SetFootprint(), SCH_SYMBOL::SetRef(), SCH_SYMBOL::SetValue(), DIALOG_LABEL_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_PROPERTIES::TransferDataToWindow(), DIALOG_SCH_FIELD_PROPERTIES::UpdateField(), and SCH_MARKER::ViewGetLayers().

◆ Set() [1/3]

template<typename T >
bool INSPECTABLE::Set ( const wxString &  aProperty,
aValue 
)
inlineinherited

Definition at line 66 of file inspectable.h.

67 {
69 TYPE_ID thisType = TYPE_HASH( *this );
70 PROPERTY_BASE* prop = propMgr.GetProperty( thisType, aProperty );
71 void* object = nullptr;
72
73 if( prop )
74 {
75 object = propMgr.TypeCast( this, thisType, prop->OwnerHash() );
76
77 if( object )
78 prop->set<T>( object, aValue );
79 }
80
81 return object != nullptr;
82 }
void set(void *aObject, T aValue)
Definition: property.h:263

References PROPERTY_MANAGER::GetProperty(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), PROPERTY_BASE::set(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ Set() [2/3]

template<typename T >
bool INSPECTABLE::Set ( PROPERTY_BASE aProperty,
aValue 
)
inlineinherited

Definition at line 54 of file inspectable.h.

55 {
57 void* object = propMgr.TypeCast( this, TYPE_HASH( *this ), aProperty->OwnerHash() );
58
59 if( object )
60 aProperty->set<T>( object, aValue );
61
62 return object != nullptr;
63 }

References PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), PROPERTY_BASE::set(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ Set() [3/3]

bool INSPECTABLE::Set ( PROPERTY_BASE aProperty,
wxAny &  aValue 
)
inlineinherited

Definition at line 42 of file inspectable.h.

43 {
45 void* object = propMgr.TypeCast( this, TYPE_HASH( *this ), aProperty->OwnerHash() );
46
47 if( object )
48 aProperty->setter( object, aValue );
49
50 return object != nullptr;
51 }
virtual void setter(void *aObject, wxAny &aValue)=0

References PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), PROPERTY_BASE::setter(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

Referenced by PCB_PROPERTIES_PANEL::valueChanged().

◆ SetArcAngleAndEnd()

void EDA_SHAPE::SetArcAngleAndEnd ( const EDA_ANGLE aAngle,
bool  aCheckNegativeAngle = false 
)
inherited

◆ SetArcGeometry()

void EDA_SHAPE::SetArcGeometry ( const VECTOR2I aStart,
const VECTOR2I aMid,
const VECTOR2I aEnd 
)
inherited

Set the three controlling points for an arc.

NB: these are NOT what's currently stored, so we have to do some calculations behind the scenes. However, they are what SHOULD be stored.

Definition at line 508 of file eda_shape.cpp.

509{
510 m_arcMidData = {};
511 m_start = aStart;
512 m_end = aEnd;
513 m_arcCenter = CalcArcCenter( aStart, aMid, aEnd );
514 VECTOR2I new_mid = GetArcMid();
515
516 m_endsSwapped = false;
517
518 // Watch the ordering here. GetArcMid above needs to be called prior to initializing the
519 // m_arcMidData structure in order to ensure we get the calculated variant, not the cached
520 SetCachedArcData( aStart, aMid, aEnd, m_arcCenter );
521
522 /*
523 * If the input winding doesn't match our internal winding, the calculated midpoint will end
524 * up on the other side of the arc. In this case, we need to flip the start/end points and
525 * flag this change for the system.
526 */
527 VECTOR2D dist( new_mid - aMid );
528 VECTOR2D dist2( new_mid - m_arcCenter );
529
530 if( dist.SquaredEuclideanNorm() > dist2.SquaredEuclideanNorm() )
531 {
532 std::swap( m_start, m_end );
533 m_endsSwapped = true;
534 }
535}
void SetCachedArcData(const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd, const VECTOR2I &aCenter)
Set the data used for mid point caching.
Definition: eda_shape.cpp:499
VECTOR2I GetArcMid() const
Definition: eda_shape.cpp:441
const VECTOR2I CalcArcCenter(const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd)
Determine the center of an arc or circle given three points on its circumference.
Definition: trigo.cpp:472

References CalcArcCenter(), EDA_SHAPE::GetArcMid(), EDA_SHAPE::m_arcCenter, EDA_SHAPE::m_arcMidData, EDA_SHAPE::m_end, EDA_SHAPE::m_endsSwapped, EDA_SHAPE::m_start, EDA_SHAPE::SetCachedArcData(), and VECTOR2< T >::SquaredEuclideanNorm().

Referenced by EDA_SHAPE::beginEdit(), EDA_SHAPE::calcEdit(), PCB_POINT_EDITOR::editArcMidKeepEndpoints(), ALTIUM_PCB::HelperCreateBoardOutline(), FABMASTER::loadFootprints(), FABMASTER::loadGraphics(), FABMASTER::loadOutline(), and SCH_EAGLE_PLUGIN::loadSymbolWire().

◆ SetBezierC1()

◆ SetBezierC2()

◆ SetBottom()

virtual void EDA_SHAPE::SetBottom ( int  val)
inlinevirtualinherited

Reimplemented in FP_TEXTBOX, and PCB_TEXTBOX.

Definition at line 169 of file eda_shape.h.

169{ SetEndY( val ); }

References EDA_SHAPE::SetEndY().

Referenced by PCB_POINT_EDITOR::updateItem().

◆ SetBrightened()

◆ SetCachedArcData()

void EDA_SHAPE::SetCachedArcData ( const VECTOR2I aStart,
const VECTOR2I aMid,
const VECTOR2I aEnd,
const VECTOR2I aCenter 
)
inherited

Set the data used for mid point caching.

If the controlling points remain constant, then we keep the midpoint the same as it was when read in. This minimizes VCS churn

Parameters
aStartCached start point
aMidCached mid point
aEndCached end point
aCenterCalculated center point using the preceeding three

Definition at line 499 of file eda_shape.cpp.

500{
501 m_arcMidData.start = aStart;
502 m_arcMidData.end = aEnd;
503 m_arcMidData.center = aCenter;
504 m_arcMidData.mid = aMid;
505}

References ARC_MID::center, ARC_MID::end, EDA_SHAPE::m_arcMidData, ARC_MID::mid, and ARC_MID::start.

Referenced by EDA_SHAPE::SetArcGeometry().

◆ SetCenter()

◆ SetConnectivityDirty()

◆ SetEditState()

void SCH_SHAPE::SetEditState ( int  aState)
inline

Definition at line 86 of file sch_shape.h.

86{ setEditState( aState ); }
void setEditState(int aState)
Definition: eda_shape.h:348

References EDA_SHAPE::setEditState().

Referenced by EE_POINT_EDITOR::updateParentItem().

◆ setEditState()

void EDA_SHAPE::setEditState ( int  aState)
inlineprotectedinherited

Definition at line 348 of file eda_shape.h.

348{ m_editState = aState; }

References EDA_SHAPE::m_editState.

Referenced by LIB_SHAPE::SetEditState(), and SetEditState().

◆ SetEnd()

void EDA_SHAPE::SetEnd ( const VECTOR2I aEnd)
inlineinherited

Definition at line 145 of file eda_shape.h.

146 {
147 m_end = aEnd;
148 m_endsSwapped = false;
149 }

References EDA_SHAPE::m_end, and EDA_SHAPE::m_endsSwapped.

Referenced by PCB_POINT_EDITOR::addCorner(), PAD::AddPrimitiveAnnotationBox(), PAD::AddPrimitiveCircle(), PAD::AddPrimitiveCurve(), PAD::AddPrimitiveRect(), PAD::AddPrimitiveSegment(), SCH_ALTIUM_PLUGIN::AddTextBox(), PCAD2KICAD::PCB_LINE::AddToBoard(), EDA_SHAPE::beginEdit(), EDA_SHAPE::calcEdit(), SCH_EDIT_TOOL::ChangeTextType(), ALTIUM_PCB::ConvertArcs6ToPcbShape(), ALTIUM_PCB::ConvertFills6ToBoardItemOnLayer(), ALTIUM_PCB::ConvertFills6ToFootprintItem(), ALTIUM_PCB::ConvertFills6ToFootprintItemOnLayer(), ALTIUM_PCB::ConvertTracks6ToBoardItem(), ALTIUM_PCB::ConvertTracks6ToBoardItemOnLayer(), ALTIUM_PCB::ConvertTracks6ToFootprintItem(), ALTIUM_PCB::ConvertTracks6ToFootprintItemOnLayer(), MICROWAVE_TOOL::createMicrowaveInductor(), PCB_POINT_EDITOR::editArcEndpointKeepCenter(), PCB_POINT_EDITOR::editArcEndpointKeepTangent(), PCB_POINT_EDITOR::editArcMidKeepCenter(), PAD_TOOL::explodePad(), CADSTAR_SCH_ARCHIVE_LOADER::getScaledLibPart(), CADSTAR_PCB_ARCHIVE_LOADER::getShapeFromVertex(), ALTIUM_PCB::HelperCreateBoardOutline(), HelperGeneratePowerPortGraphics(), ALTIUM_PCB::HelperParseDimensions6Leader(), ALTIUM_PCB::HelperParsePad6NonCopper(), initTextTable(), SCH_LEGACY_PLUGIN_CACHE::loadArc(), SCH_LEGACY_PLUGIN_CACHE::loadBezier(), SCH_LEGACY_PLUGIN_CACHE::loadCircle(), FABMASTER::loadFootprints(), FABMASTER::loadGraphics(), CADSTAR_SCH_ARCHIVE_LOADER::loadLibrarySymbolShapeVertices(), FABMASTER::loadOutline(), EAGLE_PLUGIN::loadPlain(), SCH_LEGACY_PLUGIN_CACHE::loadRect(), SCH_EAGLE_PLUGIN::loadSymbolCircle(), SCH_EAGLE_PLUGIN::loadSymbolRectangle(), GRAPHICS_CLEANER::mergeRects(), PCB_SHAPE::NormalizeRect(), SCH_ALTIUM_PLUGIN::ParseArc(), SCH_ALTIUM_PLUGIN::ParseBezier(), SCH_ALTIUM_PLUGIN::ParseEllipse(), SCH_ALTIUM_PLUGIN::ParseRectangle(), SCH_ALTIUM_PLUGIN::ParseRoundRectangle(), DRAWING_TOOL::PlaceCharacteristics(), DRAWING_TOOL::PlaceStackup(), BRDITEMS_PLOTTER::PlotDimension(), BRDITEMS_PLOTTER::PlotPcbTarget(), PAD_TOOL::RecombinePad(), PCB_TEXTBOX::Rotate(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataFromWindow(), PCB_TARGET::TransformShapeWithClearanceToPolygon(), updateArcFromConstructionMgr(), PCB_POINT_EDITOR::updateItem(), EE_POINT_EDITOR::updateParentItem(), and updateSegmentFromGeometryMgr().

◆ SetEndX()

◆ SetEndY()

◆ SetFieldsAutoplaced()

void SCH_ITEM::SetFieldsAutoplaced ( )
inlineinherited

Definition at line 417 of file sch_item.h.

@ FIELDS_AUTOPLACED_AUTO
Definition: sch_item.h:57

References FIELDS_AUTOPLACED_AUTO, and SCH_ITEM::m_fieldsAutoplaced.

Referenced by SCH_SEXPR_PARSER::parseSchText().

◆ SetFillColor()

◆ SetFilled()