21#include <magic_enum.hpp>
29 static const std::map<std::string, KICAD_T> s_types = {
30 {
"type.googleapis.com/kiapi.board.types.Track",
PCB_TRACE_T },
31 {
"type.googleapis.com/kiapi.board.types.Arc",
PCB_ARC_T },
32 {
"type.googleapis.com/kiapi.board.types.Via",
PCB_VIA_T },
33 {
"type.googleapis.com/kiapi.board.types.Text",
PCB_TEXT_T },
34 {
"type.googleapis.com/kiapi.board.types.TextBox",
PCB_TEXTBOX_T },
35 {
"type.googleapis.com/kiapi.board.types.GraphicShape",
PCB_SHAPE_T },
36 {
"type.googleapis.com/kiapi.board.types.Pad",
PCB_PAD_T },
37 {
"type.googleapis.com/kiapi.board.types.Zone",
PCB_ZONE_T },
40 {
"type.googleapis.com/kiapi.board.types.Group",
PCB_GROUP_T },
41 {
"type.googleapis.com/kiapi.board.types.Field",
PCB_FIELD_T },
42 {
"type.googleapis.com/kiapi.board.types.FootprintInstance",
PCB_FOOTPRINT_T },
45 auto it = s_types.find( aMessage.type_url() );
47 if( it != s_types.end() )
56 return LIB_ID( aId.library_nickname(), aId.entry_name() );
62 types::LibraryIdentifier msg;
71 aOutput.set_x_nm( aInput.
x );
72 aOutput.set_y_nm( aInput.
y );
77 return VECTOR2I( aInput.x_nm(), aInput.y_nm() );
88 kiapi::common::types::PolyLineNode* node = aOutput.mutable_nodes()->Add();
93 node->mutable_arc()->mutable_start()->set_x_nm( arc.
GetP0().
x );
94 node->mutable_arc()->mutable_start()->set_y_nm( arc.
GetP0().
y );
95 node->mutable_arc()->mutable_mid()->set_x_nm( arc.
GetArcMid().
x );
96 node->mutable_arc()->mutable_mid()->set_y_nm( arc.
GetArcMid().
y );
97 node->mutable_arc()->mutable_end()->set_x_nm( arc.
GetP1().
x );
98 node->mutable_arc()->mutable_end()->set_y_nm( arc.
GetP1().
y );
102 node->mutable_point()->set_x_nm( aSlc.
CPoint( vertex ).
x );
103 node->mutable_point()->set_y_nm( aSlc.
CPoint( vertex ).
y );
107 aOutput.set_closed( aSlc.
IsClosed() );
115 for(
const kiapi::common::types::PolyLineNode& node : aInput.nodes() )
117 if( node.has_point() )
119 slc.
Append(
VECTOR2I( node.point().x_nm(), node.point().y_nm() ) );
121 else if( node.has_arc() )
124 VECTOR2I( node.arc().mid().x_nm(), node.arc().mid().y_nm() ),
125 VECTOR2I( node.arc().end().x_nm(), node.arc().end().y_nm() ),
A logical library item identifier and consists of various portions much like a URI.
const UTF8 & GetLibItemName() const
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
const VECTOR2I & GetArcMid() const
const VECTOR2I & GetP1() const
const VECTOR2I & GetP0() const
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
bool IsPtOnArc(size_t aPtIndex) const
const SHAPE_ARC & Arc(size_t aArc) const
bool IsClosed() const override
void SetClosed(bool aClosed)
Mark the line chain as closed (i.e.
int PointCount() const
Return the number of points (vertices) in this line chain.
ssize_t ArcIndex(size_t aSegment) const
Return the arc index for the given segment index.
int NextShape(int aPointIndex) const
Return the vertex index of the next shape in the chain, or -1 if aPointIndex is the last shape.
void Append(int aX, int aY, bool aAllowDuplication=false)
Append a new point at the end of the line chain.
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
void PackVector2(kiapi::common::types::Vector2 &aOutput, const VECTOR2I aInput)
std::optional< KICAD_T > TypeNameFromAny(const google::protobuf::Any &aMessage)
types::LibraryIdentifier LibIdToProto(const LIB_ID &aId)
VECTOR2I UnpackVector2(const types::Vector2 &aInput)
void PackPolyLine(kiapi::common::types::PolyLine &aOutput, const SHAPE_LINE_CHAIN &aSlc)
SHAPE_LINE_CHAIN UnpackPolyLine(const kiapi::common::types::PolyLine &aInput)
LIB_ID LibIdFromProto(const types::LibraryIdentifier &aId)
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
@ PCB_GROUP_T
class PCB_GROUP, a set of BOARD_ITEMs
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
@ PCB_ZONE_T
class ZONE, a copper pour area
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
@ PCB_REFERENCE_IMAGE_T
class PCB_REFERENCE_IMAGE, bitmap on a layer
@ PCB_FIELD_T
class PCB_FIELD, text associated with a footprint property
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
@ PCB_PAD_T
class PAD, a pad in a footprint
@ PCB_ARC_T
class PCB_ARC, an arc track segment on a copper layer
@ PCB_DIMENSION_T
class PCB_DIMENSION_BASE: abstract dimension meta-type
@ PCB_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)
VECTOR2< int32_t > VECTOR2I