43#include <api/schematic/schematic_types.pb.h> 
  107    kiapi::schematic::types::Line line;
 
  109    line.mutable_id()->set_value( 
m_Uuid.AsStdString() );
 
  115    aContainer.PackFrom( line );
 
 
  121    kiapi::schematic::types::Line line;
 
  123    if( !aContainer.UnpackTo( &line ) )
 
 
  154    default:         
return _( 
"Graphic Line" );
 
 
  186void SCH_LINE::Show( 
int nestLevel, std::ostream& os )
 const 
  188    NestedSpace( nestLevel, os ) << 
'<' << 
GetClass().Lower().mb_str()
 
  189                                 << 
" layer=\"" << 
m_layer << 
'"' 
  191                                 << 
'"' << 
" endIsDangling=\"" 
  193                                 << 
" <start" << 
m_start << 
"/>" 
  194                                 << 
" <end" << 
m_end << 
"/>" << 
"</" 
  195                                 << 
GetClass().Lower().mb_str() << 
">\n";
 
  264    if( currentLength <= 0.0 )
 
  271        double   scale = aLength / currentLength;
 
 
  423        vec = 
m_end - aPoint;
 
 
  435    if( aPoint == 
m_end )
 
  438        vec = 
m_end - aPoint;
 
 
  446    wxCHECK_MSG( aLine != 
nullptr && aLine->
Type() == 
SCH_LINE_T, 
false,
 
  447                 wxT( 
"Cannot test line segment for overlap." ) );
 
  453    return !( (
long long) firstSeg.
x * secondSeg.
y - (
long long) firstSeg.
y * secondSeg.
x );
 
 
  463                    return lhs.
y < rhs.y;
 
  465                return lhs.
x < rhs.x;
 
  468    wxCHECK_MSG( aLine != 
nullptr && aLine->
Type() == 
SCH_LINE_T, 
nullptr,
 
  469                 wxT( 
"Cannot test line segment for overlap." ) );
 
  481    if( leftmost_start != std::min( { leftmost_start, leftmost_end }, less ) )
 
  482        std::swap( leftmost_start, leftmost_end );
 
  483    if( rightmost_start != std::min( { rightmost_start, rightmost_end }, less ) )
 
  484        std::swap( rightmost_start, rightmost_end );
 
  490    if( less( rightmost_start, leftmost_start ) )
 
  492        std::swap( leftmost_start, rightmost_start );
 
  493        std::swap( leftmost_end, rightmost_end );
 
  496    VECTOR2I other_start = rightmost_start;
 
  499    if( less( rightmost_end, leftmost_end ) )
 
  501        rightmost_start = leftmost_start;
 
  502        rightmost_end = leftmost_end;
 
  506    if( less( leftmost_end, other_start ) )
 
  512    if( ( leftmost_start == other_start ) && ( leftmost_end == other_end ) )  
 
  525    bool colinear = 
false;
 
  528    if( ( leftmost_start.
y == leftmost_end.
y ) &&
 
  529        ( other_start.
y == other_end.
y ) )       
 
  531        colinear = ( leftmost_start.
y == other_start.
y );
 
  533    else if( ( leftmost_start.
x == leftmost_end.
x ) &&
 
  534             ( other_start.
x == other_end.
x ) )  
 
  536        colinear = ( leftmost_start.
x == other_start.
x );
 
  544        long long dx = leftmost_end.
x - leftmost_start.
x;
 
  545        long long dy = leftmost_end.
y - leftmost_start.
y;
 
  546        colinear = ( ( ( other_start.
y - leftmost_start.
y ) * dx ==
 
  547                       ( other_start.
x - leftmost_start.
x ) * dy ) &&
 
  548                     ( ( other_end.
y - leftmost_start.
y ) * dx ==
 
  549                       ( other_end.
x - leftmost_start.
x ) * dy ) );
 
  558    bool touching = leftmost_end == rightmost_start;
 
  560    if( touching && aCheckJunctions && aScreen->
IsJunction( leftmost_end ) )
 
  564    leftmost_end = rightmost_end;
 
 
  613                                    std::vector<DANGLING_END_ITEM>& aItemListByPos,
 
  625         it < aItemListByPos.end() && it->GetPosition() == 
m_start; it++ )
 
  641         it < aItemListByPos.end() && it->GetPosition() == 
m_end; it++ )
 
 
  676    switch( aItem->
Type() )
 
 
  708    wxCHECK( line, 
false );
 
 
  725    switch( aItem->
Type() )
 
 
  742        aPoints.push_back( 
m_end );
 
 
  754        case LAYER_WIRE:  txtfmt = 
_( 
"Vertical Wire, length %s" );         
break;
 
  755        case LAYER_BUS:   txtfmt = 
_( 
"Vertical Bus, length %s" );          
break;
 
  756        default:          txtfmt = 
_( 
"Vertical Graphic Line, length %s" ); 
break;
 
  763        case LAYER_WIRE:  txtfmt = 
_( 
"Horizontal Wire, length %s" );         
break;
 
  764        case LAYER_BUS:   txtfmt = 
_( 
"Horizontal Bus, length %s" );          
break;
 
  765        default:          txtfmt = 
_( 
"Horizontal Graphic Line, length %s" ); 
break;
 
  772        case LAYER_WIRE:  txtfmt = 
_( 
"Wire, length %s" );         
break;
 
  773        case LAYER_BUS:   txtfmt = 
_( 
"Bus, length %s" );          
break;
 
  774        default:          txtfmt = 
_( 
"Graphic Line, length %s" ); 
break;
 
  778    return wxString::Format( txtfmt,
 
 
  826        aAccuracy = abs( aAccuracy );
 
 
  881                     int aUnit, 
int aBodyStyle, 
const VECTOR2I& aOffset, 
bool aDimmed )
 
  904    std::vector<wxString> properties;
 
  914                properties.emplace_back( wxString::Format( wxT( 
"!%s = %s" ),
 
  916                                                           connection->Name() ) );
 
  918                properties.emplace_back( wxString::Format( wxT( 
"!%s = %s" ),
 
  919                                                           _( 
"Resolved netclass" ),
 
  927                for( 
const std::shared_ptr<SCH_CONNECTION>& member : connection->Members() )
 
  928                    properties.emplace_back( wxT( 
"!" ) + member->Name() );
 
  932        if( !properties.empty() )
 
 
  953    default:         msg = 
_( 
"Graphical" ); 
break;
 
  956    aList.emplace_back( 
_( 
"Line Type" ), msg );
 
  961        aList.emplace_back( 
_( 
"Line Style" ), 
_( 
"from netclass" ) );
 
  963        m_stroke.GetMsgPanelInfo( aFrame, aList, 
true, 
false );
 
  976            aList.emplace_back( 
_( 
"Resolved Netclass" ),
 
 
 1043    double similarity = 1.0;
 
 
 1071    if( isMeVertical && !isCandidateVertical )
 
 1074    if( isCandidateVertical && !isMeVertical )
 
 1082    if( fabs( slopeMe ) == fabs( slopeCandidate ) )     
 
 1083        return slopeMe < slopeCandidate;                
 
 1085    return fabs( slopeMe ) < fabs( slopeCandidate ); 
 
 
 1090                                                       double aArcRadius )
 const 
 1096    std::vector<VECTOR3I> wire_shape;       
 
 1106    std::vector<SCH_LINE*> existingWires;   
 
 1107    std::vector<VECTOR2I> intersections;
 
 1114            existingWires.push_back( line );
 
 1120    for( 
SCH_LINE* existingLine : existingWires )
 
 1122        VECTOR2I extLineStartPoint = existingLine->GetStartPoint();
 
 1123        VECTOR2I extLineEndPoint = existingLine->GetEndPoint();
 
 1125        if( extLineStartPoint == currentLineStartPoint && extLineEndPoint == currentLineEndPoint )
 
 1131        SEG currentSegment = 
SEG( currentLineStartPoint, currentLineEndPoint );
 
 1132        SEG existingSegment = 
SEG( extLineStartPoint, extLineEndPoint );
 
 1142            if( intersections.size() == 0 || intersections.back() != *
intersect )
 
 1147    if( intersections.empty() )
 
 1149        wire_shape.emplace_back( currentLineStartPoint.
x, currentLineStartPoint.
y, 0 );
 
 1150        wire_shape.emplace_back( currentLineEndPoint.
x, currentLineEndPoint.
y, 0 );
 
 1157                    return std::sqrt( std::pow( a.
x - b.x, 2 ) + std::pow( a.
y - b.y, 2 ) );
 
 1160        std::sort( intersections.begin(), intersections.end(),
 
 1163                       return getDistance( GetStartPoint(), a ) < getDistance( GetStartPoint(), b );
 
 1167        double   arcRadius = aArcRadius;
 
 1169        for( 
const VECTOR2I& hopMid : intersections )
 
 1176            double lineAngleDeg = lineAngle * ( 180.0f / 
M_PI );
 
 1179            if( lineAngleDeg < 0 )
 
 1180                lineAngleDeg += 360;
 
 1182            double startAngle = lineAngleDeg;
 
 1183            double endAngle = startAngle + 180.0f;
 
 1186            if( endAngle >= 360.0 )
 
 1190            double startAngleRad = startAngle * ( 
M_PI / 180.0f );
 
 1191            double endAngleRad = endAngle * ( 
M_PI / 180.0f );
 
 1194                hopMid.x + 
static_cast<int>( arcRadius
 
 1195                                            * cos( ( startAngleRad + endAngleRad ) / 2.0f ) ),
 
 1196                hopMid.y - 
static_cast<int>( arcRadius
 
 1197                                            * sin( ( startAngleRad + endAngleRad ) / 2.0f ) )
 
 1201                                                    arcRadius * std::sin( lineAngle ) );
 
 1203                                                   arcRadius * std::sin( lineAngle ) );
 
 1206            wire_shape.emplace_back( currentStart.
x, currentStart.
y, 0 );
 
 1207            wire_shape.emplace_back( beforeHop.
x, beforeHop.
y, 0 );
 
 1210            SHAPE_ARC arc( beforeHop, arcMidPoint, afterHop, 0 );
 
 1211            wire_shape.emplace_back( beforeHop.
x, beforeHop.
y, 1 );
 
 1212            wire_shape.emplace_back( arcMidPoint.x, arcMidPoint.y, 1 );
 
 1213            wire_shape.emplace_back( afterHop.
x, afterHop.
y, 1 );
 
 1215            currentStart = afterHop;
 
 1219        wire_shape.emplace_back( currentStart. x,currentStart.
y, 0 );
 
 
 1233        if( lineStyleEnum.
Choices().GetCount() == 0 )
 
 1244        if( wireLineStyleEnum.
Choices().GetCount() == 0 )
 
 1258        auto isGraphicLine =
 
 1262                        return line->IsGraphicLine();
 
 1271                        return line->IsWire() || line->IsBus();
 
 
 
types::KiCadObjectType ToProtoEnum(KICAD_T aValue)
 
KICAD_T FromProtoEnum(types::KiCadObjectType aValue)
 
constexpr EDA_IU_SCALE schIUScale
 
BITMAPS
A list of all bitmap identifiers.
 
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
 
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
 
constexpr bool Contains(const Vec &aPoint) const
 
constexpr bool Intersects(const BOX2< Vec > &aRect) const
 
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
 
static std::vector< DANGLING_END_ITEM >::iterator get_lower_pos(std::vector< DANGLING_END_ITEM > &aItemListByPos, const VECTOR2I &aPos)
 
Helper class used to store the state of schematic items that can be connected to other schematic item...
 
DANGLING_END_T GetType() const
 
EDA_ITEM * GetItem() const
 
The base class for create windows for drawing purpose.
 
KICAD_T Type() const
Returns the type of object.
 
EDA_GROUP * m_group
The group this item belongs to, if any. No ownership implied.
 
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
 
EE_TYPE Overlapping(const BOX2I &aRect) const
 
ENUM_MAP & Map(T aValue, const wxString &aName)
 
static ENUM_MAP< T > & Instance()
 
Class that other classes need to inherit from, in order to be inspectable.
 
A color representation with 4 components: red, green, blue, alpha.
 
const COLOR4D & GetLayerColor(int aLayer) const
Return the color used to draw a layer.
 
static double lodScaleForThreshold(const KIGFX::VIEW *aView, int aWhatIu, int aThresholdIu)
Get the scale at which aWhatIu would be drawn at the same size as aThresholdIu on screen.
 
static constexpr double LOD_HIDE
Return this constant from ViewGetLOD() to hide the item unconditionally.
 
static constexpr double LOD_SHOW
Return this constant from ViewGetLOD() to show the item unconditionally.
 
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
 
COLOR4D GetSchematicColor(bool aIsForSave=false) const
 
Base plotter engine class.
 
void MoveTo(const VECTOR2I &pos)
 
virtual void SetDash(int aLineWidth, LINE_STYLE aLineStyle)=0
 
void FinishTo(const VECTOR2I &pos)
 
virtual void SetCurrentLineWidth(int width, void *aData=nullptr)=0
Set the line width for the next drawing.
 
virtual void HyperlinkMenu(const BOX2I &aBox, const std::vector< wxString > &aDestURLs)
Create a clickable hyperlink menu with a rectangular click area.
 
virtual void SetColor(const COLOR4D &color)=0
 
PROPERTY_BASE & SetAvailableFunc(std::function< bool(INSPECTABLE *)> aFunc)
Set a callback function to determine whether an object provides this property.
 
Provide class metadata.Helper macro to map type hashes to names.
 
void InheritsAfter(TYPE_ID aDerived, TYPE_ID aBase)
Declare an inheritance relationship between types.
 
static PROPERTY_MANAGER & Instance()
 
PROPERTY_BASE & AddProperty(PROPERTY_BASE *aProperty, const wxString &aGroup=wxEmptyString)
Register a property.
 
Holds all the data relating to one schematic.
 
SCHEMATIC_SETTINGS & Settings() const
 
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
 
void AppendInfoToMsgPanel(std::vector< MSG_PANEL_ITEM > &aList) const
Adds information about the connection object to aList.
 
Schematic editor (Eeschema) main window.
 
Base class for any item which can be embedded within the SCHEMATIC container class,...
 
SCH_ITEM * Duplicate(bool addToParentGroup, SCH_COMMIT *aCommit=nullptr, bool doClone=false) const
Routine to create a new copy of given item.
 
SCH_RENDER_SETTINGS * getRenderSettings(PLOTTER *aPlotter) const
 
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
 
std::shared_ptr< NETCLASS > GetEffectiveNetClass(const SCH_SHEET_PATH *aSheet=nullptr) const
 
void SetLayer(SCH_LAYER_ID aLayer)
 
SCH_LAYER_ID GetLayer() const
Return the layer this item is on.
 
void SetConnectivityDirty(bool aDirty=true)
 
bool IsConnectivityDirty() const
 
SCH_ITEM(EDA_ITEM *aParent, KICAD_T aType, int aUnit=0, int aBodyStyle=0)
 
SCH_CONNECTION * Connection(const SCH_SHEET_PATH *aSheet=nullptr) const
Retrieve the connection associated with this object in the given sheet.
 
int GetEffectivePenWidth(const SCH_RENDER_SETTINGS *aSettings) const
 
Segment description base class to describe items which have 2 end points (track, wire,...
 
int GetPenWidth() const override
 
bool doIsConnected(const VECTOR2I &aPosition) const override
Provide the object specific test to see if it is connected to aPosition.
 
void GetEndPoints(std::vector< DANGLING_END_ITEM > &aItemList) override
Add the schematic item end points to aItemList if the item has end points.
 
void SetStartPoint(const VECTOR2I &aPosition)
 
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
 
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
 
bool UpdateDanglingState(std::vector< DANGLING_END_ITEM > &aItemListByType, std::vector< DANGLING_END_ITEM > &aItemListByPos, const SCH_SHEET_PATH *aPath=nullptr) override
Test the schematic item to aItemList to check if it's dangling state has changed.
 
bool m_startIsDangling
True if start point is not connected.
 
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
 
void SetPosition(const VECTOR2I &aPosition) override
 
std::vector< VECTOR3I > BuildWireWithHopShape(const SCH_SCREEN *aScreen, double aArcRadius) const
For wires only: build the list of points to draw the shape using segments and 180 deg arcs Points are...
 
SCH_LINE * NonGroupAware_BreakAt(const VECTOR2I &aPoint)
This version should only be used when importing files.
 
std::vector< VECTOR2I > GetConnectionPoints() const override
Add all the connection points for this item to aPoints.
 
int GetReverseAngleFrom(const VECTOR2I &aPoint) const
 
SCH_LINE(const VECTOR2I &pos=VECTOR2I(0, 0), int layer=LAYER_NOTES)
 
bool IsWire() const
Return true if the line is a wire.
 
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
 
void SetWireStyle(const WIRE_STYLE aStyle)
 
void SetLineColor(const COLOR4D &aColor)
 
bool CanConnect(const SCH_ITEM *aItem) const override
 
bool IsParallel(const SCH_LINE *aLine) const
 
void SetLineWidth(const int aSize)
 
bool ShouldHopOver(const SCH_LINE *aLine) const
For wires only:
 
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
 
virtual STROKE_PARAMS GetStroke() const override
 
int GetAngleFrom(const VECTOR2I &aPoint) const
 
void GetSelectedPoints(std::vector< VECTOR2I > &aPoints) const
 
COLOR4D m_lastResolvedColor
 
LINE_STYLE GetEffectiveLineStyle() const
 
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.
 
void Plot(PLOTTER *aPlotter, bool aBackground, const SCH_PLOT_OPTS &aPlotOpts, int aUnit, int aBodyStyle, const VECTOR2I &aOffset, bool aDimmed) override
Plot the item to aPlotter.
 
wxString m_operatingPoint
 
void SetLength(double aLength)
 
wxString GetClass() const override
Return the class name.
 
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
 
VECTOR2I GetEndPoint() const
 
VECTOR2I GetStartPoint() const
 
bool ConnectionPropagatesTo(const EDA_ITEM *aItem) const override
Return true if this item should propagate connection info to aItem.
 
LINE_STYLE m_lastResolvedLineStyle
 
SCH_LINE * MergeOverlap(SCH_SCREEN *aScreen, SCH_LINE *aLine, bool aCheckJunctions)
Check line against aLine to see if it overlaps and merge if it does.
 
VECTOR2I m_start
Line start point.
 
bool IsBus() const
Return true if the line is a bus.
 
bool HasConnectivityChanges(const SCH_ITEM *aItem, const SCH_SHEET_PATH *aInstance=nullptr) const override
Check if aItem has connectivity changes against this object.
 
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
 
void SetLineStyle(const LINE_STYLE aStyle)
 
VECTOR2I m_end
Line end point.
 
void Move(const VECTOR2I &aMoveVector) override
Move the item by aMoveVector to a new position.
 
LINE_STYLE GetLineStyle() const
 
void MoveEnd(const VECTOR2I &aMoveVector)
 
STROKE_PARAMS m_stroke
Line stroke properties.
 
SCH_LINE * BreakAt(SCH_COMMIT *aCommit, const VECTOR2I &aPoint)
Break this segment into two at the specified point.
 
bool m_endIsDangling
True if end point is not connected.
 
bool IsConnectable() const override
 
wxString GetFriendlyName() const override
 
double ViewGetLOD(int aLayer, const KIGFX::VIEW *aView) const override
Return the level of detail (LOD) of the item.
 
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
 
bool operator==(const SCH_ITEM &aOther) const override
 
bool operator<(const SCH_ITEM &aItem) const override
 
WIRE_STYLE GetWireStyle() const
 
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
 
bool IsEndPoint(const VECTOR2I &aPoint) const override
Test if aPt is an end point of this schematic object.
 
bool IsGraphicLine() const
Return if the line is a graphic (non electrical line)
 
COLOR4D GetLineColor() const
Return COLOR4D::UNSPECIFIED if a custom color hasn't been set for this line.
 
std::vector< int > ViewGetLayers() const override
Return the layers the item is drawn on (which may be more than its "home" layer)
 
void MoveStart(const VECTOR2I &aMoveVector)
 
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
 
void SetEndPoint(const VECTOR2I &aPosition)
 
double Similarity(const SCH_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
 
void swapData(SCH_ITEM *aItem) override
Swap the internal data structures aItem with the schematic item.
 
EE_RTREE & Items()
Get the full RTree, usually for iterating.
 
bool IsJunction(const VECTOR2I &aPosition) const
Test if a junction is required for the items at aPosition on the screen.
 
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
 
OPT_VECTOR2I Intersect(const SEG &aSeg, bool aIgnoreEndpoints=false, bool aLines=false) const
Compute intersection point of segment (this) with segment aSeg.
 
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
 
LINE_STYLE GetLineStyle() const
 
KIGFX::COLOR4D GetColor() const
 
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
 
#define DEFAULT_BUS_WIDTH_MILS
The default noconnect size in mils.
 
#define DEFAULT_WIRE_WIDTH_MILS
The default bus width in mils. (can be changed in preference menu)
 
#define DEFAULT_LINE_WIDTH_MILS
The default wire width in mils. (can be changed in preference menu)
 
static constexpr EDA_ANGLE ANGLE_90
 
static constexpr EDA_ANGLE ANGLE_270
 
#define STRUCT_DELETED
flag indication structures to be erased
 
#define ENDPOINT
ends. (Used to support dragging.)
 
#define SKIP_STRUCT
flag indicating that the structure should be ignored
 
#define STARTPOINT
When a line is selected, these flags indicate which.
 
a few functions useful in geometry calculations.
 
SCH_LAYER_ID
Eeschema drawing layers.
 
@ LAYER_NET_COLOR_HIGHLIGHT
 
@ LAYER_SELECTION_SHADOWS
 
constexpr void MIRROR(T &aPoint, const T &aMirrorRef)
Updates aPoint with the mirror of aPoint relative to the aMirrorRef.
 
bool ShapeHitTest(const SHAPE_LINE_CHAIN &aHitter, const SHAPE &aHittee, bool aHitteeContained)
Perform a shape-to-shape hit test.
 
KICOMMON_API VECTOR2I UnpackVector2(const types::Vector2 &aInput)
 
KICOMMON_API void PackVector2(types::Vector2 &aOutput, const VECTOR2I &aInput)
 
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
 
static bool intersect(const SEGMENT_WITH_NORMALS &aSeg, const SFVEC2F &aStart, const SFVEC2F &aEnd)
 
#define IMPLEMENT_ENUM_TO_WXANY(type)
 
@ PT_COORD
Coordinate expressed in distance units (mm/inch)
 
@ PT_SIZE
Size expressed in distance units (mm/inch)
 
static struct SCH_LINE_DESC _SCH_LINE_DESC
 
std::optional< VECTOR2I > OPT_VECTOR2I
 
wxString UnescapeString(const wxString &aSource)
 
LINE_STYLE
Dashed line types.
 
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.
 
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
Calculate the new point of coord coord pX, pY, for a rotation center 0, 0.
 
VECTOR2< int32_t > VECTOR2I