KiCad PCB EDA Suite
Loading...
Searching...
No Matches
api_utils.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2023 Jon Evans <[email protected]>
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software: you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation, either version 3 of the License, or (at your
10 * option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 */
20
21#include <magic_enum.hpp>
22#include <api/api_utils.h>
23#include <api/api_enums.h>
24#include <api/schematic/schematic_types.pb.h>
25#include <line_ending.h>
27#include <eda_item.h>
28#include <kiid.h>
29#include <project.h>
30#include <stroke_params.h>
31#include <wx/log.h>
32
33const wxChar* const traceApi = wxT( "KICAD_API" );
34
35
36namespace kiapi::common
37{
38
39KICOMMON_API ApiResponseStatus MakeResponseStatus( ApiStatusCode aCode, const std::string& aMessage )
40{
41 ApiResponseStatus s;
42 s.set_status( aCode );
43
44 if( !aMessage.empty() )
45 s.set_error_message( aMessage );
46
47 return s;
48}
49
50KICOMMON_API std::optional<KICAD_T> TypeNameFromAny( const google::protobuf::Any& aMessage )
51{
52 if( aMessage.type_url() == "type.googleapis.com/kiapi.schematic.types.BusEntry" )
53 {
54 kiapi::schematic::types::BusEntry entry;
55
56 if( !aMessage.UnpackTo( &entry ) )
57 return std::nullopt;
58
59 switch( entry.type() )
60 {
61 case kiapi::schematic::types::BET_WIRE_TO_BUS:
63
64 case kiapi::schematic::types::BET_BUS_TO_BUS:
66
67 default:
68 return std::nullopt;
69 }
70 }
71
72 static const std::map<std::string, KICAD_T> s_types = {
73 { "type.googleapis.com/kiapi.board.types.Track", PCB_TRACE_T },
74 { "type.googleapis.com/kiapi.board.types.Arc", PCB_ARC_T },
75 { "type.googleapis.com/kiapi.board.types.Via", PCB_VIA_T },
76 { "type.googleapis.com/kiapi.board.types.BoardText", PCB_TEXT_T },
77 { "type.googleapis.com/kiapi.board.types.BoardTextBox", PCB_TEXTBOX_T },
78 { "type.googleapis.com/kiapi.board.types.Table", PCB_TABLE_T },
79 { "type.googleapis.com/kiapi.board.types.DrillChart", PCB_DRILL_CHART_T },
80 { "type.googleapis.com/kiapi.board.types.DrillMap", PCB_DRILL_MAP_T },
81 { "type.googleapis.com/kiapi.board.types.TableCell", PCB_TABLECELL_T },
82 { "type.googleapis.com/kiapi.board.types.BoardGraphicShape", PCB_SHAPE_T },
83 { "type.googleapis.com/kiapi.board.types.Barcode", PCB_BARCODE_T },
84 { "type.googleapis.com/kiapi.board.types.Pad", PCB_PAD_T },
85 { "type.googleapis.com/kiapi.board.types.Zone", PCB_ZONE_T },
86 { "type.googleapis.com/kiapi.board.types.Dimension", PCB_DIMENSION_T },
87 { "type.googleapis.com/kiapi.board.types.ReferenceImage", PCB_REFERENCE_IMAGE_T },
88 { "type.googleapis.com/kiapi.board.types.ReferencePoint", PCB_POINT_T },
89 { "type.googleapis.com/kiapi.board.types.GridItem", PCB_GRID_ITEM_T },
90 { "type.googleapis.com/kiapi.board.types.Group", PCB_GROUP_T },
91 { "type.googleapis.com/kiapi.board.types.Constraint", PCB_CONSTRAINT_T },
92 { "type.googleapis.com/kiapi.board.types.Field", PCB_FIELD_T },
93 { "type.googleapis.com/kiapi.board.types.FootprintInstance", PCB_FOOTPRINT_T },
94 { "type.googleapis.com/kiapi.schematic.types.Junction", SCH_JUNCTION_T },
95 { "type.googleapis.com/kiapi.schematic.types.NoConnectMarker", SCH_NO_CONNECT_T },
96 { "type.googleapis.com/kiapi.schematic.types.BusEntry", SCH_BUS_WIRE_ENTRY_T },
97 { "type.googleapis.com/kiapi.schematic.types.SchematicLine", SCH_LINE_T },
98 { "type.googleapis.com/kiapi.schematic.types.SchematicGraphicShape", SCH_SHAPE_T },
99 { "type.googleapis.com/kiapi.schematic.types.SchematicImage", SCH_BITMAP_T },
100 { "type.googleapis.com/kiapi.schematic.types.SchematicTextBox", SCH_TEXTBOX_T },
101 { "type.googleapis.com/kiapi.schematic.types.SchematicText", SCH_TEXT_T },
102 { "type.googleapis.com/kiapi.schematic.types.SchematicField", SCH_FIELD_T },
103 { "type.googleapis.com/kiapi.schematic.types.SchematicTableCell", SCH_TABLECELL_T },
104 { "type.googleapis.com/kiapi.schematic.types.SchematicTable", SCH_TABLE_T },
105 { "type.googleapis.com/kiapi.schematic.types.LocalLabel", SCH_LABEL_T },
106 { "type.googleapis.com/kiapi.schematic.types.GlobalLabel", SCH_GLOBAL_LABEL_T },
107 { "type.googleapis.com/kiapi.schematic.types.HierarchicalLabel", SCH_HIER_LABEL_T },
108 { "type.googleapis.com/kiapi.schematic.types.DirectiveLabel", SCH_DIRECTIVE_LABEL_T },
109 { "type.googleapis.com/kiapi.schematic.types.Group", SCH_GROUP_T },
110 { "type.googleapis.com/kiapi.schematic.types.SheetSymbol", SCH_SHEET_T },
111 { "type.googleapis.com/kiapi.schematic.types.SchematicSymbolInstance", SCH_SYMBOL_T },
112 { "type.googleapis.com/kiapi.schematic.types.SchematicPin", SCH_PIN_T },
113 { "type.googleapis.com/kiapi.schematic.types.SchematicRuleArea", SCH_RULE_AREA_T },
114 };
115
116 auto it = s_types.find( aMessage.type_url() );
117
118 if( it != s_types.end() )
119 return it->second;
120
121 wxLogTrace( traceApi, wxString::Format( wxS( "Any message type %s is not known" ),
122 aMessage.type_url() ) );
123
124 return std::nullopt;
125}
126
127
128KICOMMON_API LIB_ID UnpackLibId( const types::LibraryIdentifier& aId )
129{
130 return LIB_ID( aId.library_nickname(), aId.entry_name() );
131}
132
133
134KICOMMON_API void PackLibId( types::LibraryIdentifier* aOutput, const LIB_ID& aId )
135{
136 aOutput->set_library_nickname( aId.GetLibNickname() );
137 aOutput->set_entry_name( aId.GetLibItemName() );
138}
139
140
141KICOMMON_API void PackVector2( types::Vector2& aOutput, const VECTOR2I& aInput, const EDA_IU_SCALE& aScale )
142{
143 aOutput.set_x_nm( aScale.IUToNm( aInput.x ) );
144 aOutput.set_y_nm( aScale.IUToNm( aInput.y ) );
145}
146
147
148KICOMMON_API VECTOR2I UnpackVector2( const types::Vector2& aInput, const EDA_IU_SCALE& aScale )
149{
150 return VECTOR2I( aScale.NmToIU( aInput.x_nm() ), aScale.NmToIU( aInput.y_nm() ) );
151}
152
153
154KICOMMON_API void PackVector3D( types::Vector3D& aOutput, const VECTOR3D& aInput )
155{
156 aOutput.set_x_nm( aInput.x );
157 aOutput.set_y_nm( aInput.y );
158 aOutput.set_z_nm( aInput.z );
159}
160
161
162KICOMMON_API VECTOR3D UnpackVector3D( const types::Vector3D& aInput )
163{
164 return VECTOR3D( aInput.x_nm(), aInput.y_nm(), aInput.z_nm() );
165}
166
167
168KICOMMON_API void PackBox2( types::Box2& aOutput, const BOX2I& aInput, const EDA_IU_SCALE& aScale )
169{
170 PackVector2( *aOutput.mutable_position(), aInput.GetOrigin(), aScale );
171 PackVector2( *aOutput.mutable_size(), aInput.GetSize(), aScale );
172}
173
174
175KICOMMON_API BOX2I UnpackBox2( const types::Box2& aInput, const EDA_IU_SCALE& aScale )
176{
177 return BOX2I( UnpackVector2( aInput.position(), aScale ), UnpackVector2( aInput.size(), aScale ) );
178}
179
180
181KICOMMON_API void PackDistance( types::Distance& aOutput, int aInput, const EDA_IU_SCALE& aScale )
182{
183 aOutput.set_value_nm( aScale.IUToNm( aInput ) );
184}
185
186
187KICOMMON_API int UnpackDistance( const types::Distance& aInput, const EDA_IU_SCALE& aScale )
188{
189 return aScale.NmToIU( aInput.value_nm() );
190}
191
192
193KICOMMON_API void PackPolyLine( types::PolyLine& aOutput, const SHAPE_LINE_CHAIN& aSlc, const EDA_IU_SCALE& aScale )
194{
195 for( int vertex = 0; vertex < aSlc.PointCount(); ++vertex )
196 {
197 if( aSlc.IsArcStart( vertex ) )
198 {
199 types::PolyLineNode* node = aOutput.mutable_nodes()->Add();
200 const SHAPE_ARC& arc = aSlc.Arc( aSlc.ArcIndex( vertex ) );
201 PackVector2( *node->mutable_arc()->mutable_start(), arc.GetP0(), aScale );
202 PackVector2( *node->mutable_arc()->mutable_mid(), arc.GetArcMid(), aScale );
203 PackVector2( *node->mutable_arc()->mutable_end(), arc.GetP1(), aScale );
204 }
205 else if( !aSlc.IsPtOnArc( vertex ) )
206 {
207 types::PolyLineNode* node = aOutput.mutable_nodes()->Add();
208 PackVector2( *node->mutable_point(), aSlc.CPoint( vertex ), aScale );
209 }
210 }
211
212 aOutput.set_closed( aSlc.IsClosed() );
213}
214
215
216KICOMMON_API SHAPE_LINE_CHAIN UnpackPolyLine( const types::PolyLine& aInput, const EDA_IU_SCALE& aScale )
217{
219
220 for( const types::PolyLineNode& node : aInput.nodes() )
221 {
222 if( node.has_point() )
223 {
224 slc.Append( UnpackVector2( node.point(), aScale ) );
225 }
226 else if( node.has_arc() )
227 {
228 slc.Append( SHAPE_ARC( UnpackVector2( node.arc().start(), aScale ),
229 UnpackVector2( node.arc().mid(), aScale ),
230 UnpackVector2( node.arc().end(), aScale ),
231 0 ) );
232 }
233 }
234
235 slc.SetClosed( aInput.closed() );
236
237 return slc;
238}
239
240
241KICOMMON_API void PackPolySet( types::PolySet& aOutput, const SHAPE_POLY_SET& aInput, const EDA_IU_SCALE& aScale )
242{
243 for( int idx = 0; idx < aInput.OutlineCount(); ++idx )
244 {
245 const SHAPE_POLY_SET::POLYGON& poly = aInput.Polygon( idx );
246
247 if( poly.empty() )
248 continue;
249
250 types::PolygonWithHoles* polyMsg = aOutput.mutable_polygons()->Add();
251 PackPolyLine( *polyMsg->mutable_outline(), poly.front(), aScale );
252
253 if( poly.size() > 1 )
254 {
255 for( size_t hole = 1; hole < poly.size(); ++hole )
256 {
257 types::PolyLine* pl = polyMsg->mutable_holes()->Add();
258 PackPolyLine( *pl, poly[hole], aScale );
259 }
260 }
261 }
262}
263
264
265KICOMMON_API SHAPE_POLY_SET UnpackPolySet( const types::PolySet& aInput, const EDA_IU_SCALE& aScale )
266{
267 SHAPE_POLY_SET sps;
268
269 for( const types::PolygonWithHoles& polygonWithHoles : aInput.polygons() )
270 {
272
273 polygon.emplace_back( UnpackPolyLine( polygonWithHoles.outline(), aScale ) );
274
275 for( const types::PolyLine& holeMsg : polygonWithHoles.holes() )
276 polygon.emplace_back( UnpackPolyLine( holeMsg, aScale ) );
277
278 sps.AddPolygon( polygon );
279 }
280
281 return sps;
282}
283
284
285KICOMMON_API void PackColor( types::Color& aOutput, const KIGFX::COLOR4D& aInput )
286{
287 aOutput.set_r( aInput.r );
288 aOutput.set_g( aInput.g );
289 aOutput.set_b( aInput.b );
290 aOutput.set_a( aInput.a );
291}
292
293
294KICOMMON_API KIGFX::COLOR4D UnpackColor( const types::Color& aInput )
295{
296 double r = std::clamp( aInput.r(), 0.0, 1.0 );
297 double g = std::clamp( aInput.g(), 0.0, 1.0 );
298 double b = std::clamp( aInput.b(), 0.0, 1.0 );
299 double a = std::clamp( aInput.a(), 0.0, 1.0 );
300
301 return KIGFX::COLOR4D( r, g, b, a );
302}
303
304KICOMMON_API void PackSheetPath( types::SheetPath& aOutput, const KIID_PATH& aInput )
305{
306 aOutput.clear_path();
307
308 for( const KIID& entry : aInput )
309 aOutput.add_path()->set_value( entry.AsStdString() );
310}
311
312KICOMMON_API KIID_PATH UnpackSheetPath( const types::SheetPath& aInput )
313{
314 KIID_PATH output;
315
316 for( const types::KIID& sheet : aInput.path() )
317 output.push_back( KIID( sheet.value() ) );
318
319 return output;
320}
321
322
323KICOMMON_API void PackStroke( types::StrokeAttributes& aOutput, const STROKE_PARAMS& aInput,
324 const EDA_IU_SCALE& aScale )
325{
326 PackDistance( *aOutput.mutable_width(), aInput.GetWidth(), aScale );
327 aOutput.set_style( ToProtoEnum<LINE_STYLE, types::StrokeLineStyle>( aInput.GetLineStyle() ) );
328
329 if( aInput.GetColor() != KIGFX::COLOR4D::UNSPECIFIED )
330 PackColor( *aOutput.mutable_color(), aInput.GetColor() );
331}
332
333
334KICOMMON_API void UnpackStroke( STROKE_PARAMS& aOutput, const types::StrokeAttributes& aInput,
335 const EDA_IU_SCALE& aScale )
336{
337 aOutput.SetWidth( UnpackDistance( aInput.width(), aScale ) );
339
340 if( aInput.has_color() )
341 aOutput.SetColor( UnpackColor( aInput.color() ) );
342 else
344}
345
346
347KICOMMON_API void PackLineEnding( types::LineEnding& aOutput, const LINE_ENDING& aInput, const EDA_IU_SCALE& aScale )
348{
350
351 if( aInput.GetLength() > 0 )
352 PackDistance( *aOutput.mutable_length(), aInput.GetLength(), aScale );
353
354 if( aInput.GetWidth() > 0 )
355 PackDistance( *aOutput.mutable_width(), aInput.GetWidth(), aScale );
356
357 if( aInput.GetStrokeWidth() > 0 )
358 PackStroke( *aOutput.mutable_stroke(), aInput.GetStroke(), aScale );
359}
360
361
362KICOMMON_API LINE_ENDING UnpackLineEnding( const types::LineEnding& aInput, const EDA_IU_SCALE& aScale )
363{
364 LINE_ENDING ending;
365
367
368 if( aInput.has_length() )
369 ending.SetLength( UnpackDistance( aInput.length(), aScale ) );
370
371 if( aInput.has_width() )
372 ending.SetWidth( UnpackDistance( aInput.width(), aScale ) );
373
374 if( aInput.has_stroke() )
375 {
376 STROKE_PARAMS stroke;
377 UnpackStroke( stroke, aInput.stroke(), aScale );
378 ending.SetStroke( stroke );
379 }
380
381 return ending;
382}
383
384
385KICOMMON_API void PackProject( types::ProjectSpecifier& aOutput, const PROJECT& aInput )
386{
387 aOutput.set_name( aInput.GetProjectName().ToUTF8() );
388 aOutput.set_path( aInput.GetProjectPath().ToUTF8() );
389}
390
391#if defined( __MINGW32__ )
392const std::string KiwayClientName = "org.kicad.internal.kiway";
393const std::string StandaloneCrossProbeClientName = "org.kicad.internal.crossprobe";
394#else
395const KICOMMON_API std::string KiwayClientName = "org.kicad.internal.kiway";
396const KICOMMON_API std::string StandaloneCrossProbeClientName = "org.kicad.internal.crossprobe";
397#endif
398
399
400KICOMMON_API bool PackKiwayApiMessage( const google::protobuf::Message& aMessage, std::string& aBytes )
401{
402 ApiRequest request;
403 request.mutable_header()->set_client_name( KiwayClientName );
404
405 if( !request.mutable_message()->PackFrom( aMessage ) )
406 return false;
407
408 aBytes = request.SerializeAsString();
409 return true;
410}
411
412
413KICOMMON_API void PackCustomProperties( google::protobuf::RepeatedPtrField<types::CustomProperty>* aOutput,
414 const EDA_ITEM& aItem )
415{
416 for( const auto& [key, value] : aItem.GetCustomProperties() )
417 {
418 types::CustomProperty* entry = aOutput->Add();
419 entry->set_key( key.ToUTF8() );
420 entry->set_value( value.ToUTF8() );
421 }
422}
423
424
425KICOMMON_API void UnpackCustomProperties( const google::protobuf::RepeatedPtrField<types::CustomProperty>& aInput,
426 EDA_ITEM& aItem )
427{
428 std::map<wxString, wxString> props;
429
430 for( const types::CustomProperty& prop : aInput )
431 props[wxString::FromUTF8( prop.key() )] = wxString::FromUTF8( prop.value() );
432
433 aItem.SetCustomProperties( props );
434}
435
436} // namespace kiapi::common
KICOMMON_API types::KiCadObjectType ToProtoEnum(KICAD_T aValue)
KICOMMON_API KICAD_T FromProtoEnum(types::KiCadObjectType aValue)
Definition api_enums.cpp:55
BOX2< VECTOR2I > BOX2I
Definition box2.h:927
constexpr const Vec & GetOrigin() const
Definition box2.h:207
constexpr const SizeVec & GetSize() const
Definition box2.h:203
A base class for most all the KiCad significant classes used in schematics and boards.
Definition eda_item.h:98
void SetCustomProperties(const std::map< wxString, wxString > &aProps)
Definition eda_item.h:247
const std::map< wxString, wxString > & GetCustomProperties() const
Custom user-defined string key/value properties attached to this item.
Definition eda_item.h:242
A color representation with 4 components: red, green, blue, alpha.
Definition color4d.h:101
double r
Red component.
Definition color4d.h:390
double g
Green component.
Definition color4d.h:391
double a
Alpha component.
Definition color4d.h:393
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Definition color4d.h:399
double b
Blue component.
Definition color4d.h:392
Definition kiid.h:46
A logical library item identifier and consists of various portions much like a URI.
Definition lib_id.h:45
const UTF8 & GetLibItemName() const
Definition lib_id.h:98
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
Definition lib_id.h:83
Decorative shape (arrowhead, circle, square) at the start or end of a graphic line,...
Definition line_ending.h:62
int GetLength() const
Along-line size. 0 = auto.
Definition line_ending.h:84
const STROKE_PARAMS & GetStroke() const
int GetWidth() const
Perpendicular size. 0 = auto.
Definition line_ending.h:87
void SetStroke(const STROKE_PARAMS &aStroke)
void SetLength(int aLength)
Definition line_ending.h:85
void SetStyle(LINE_ENDING_STYLE aStyle)
Definition line_ending.h:82
void SetWidth(int aWidth)
Definition line_ending.h:88
LINE_ENDING_STYLE GetStyle() const
Definition line_ending.h:81
int GetStrokeWidth() const
Outline stroke width.
Container for project specific data.
Definition project.h:63
virtual const wxString GetProjectPath() const
Return the full path of the project.
Definition project.cpp:183
virtual const wxString GetProjectName() const
Return the short name of the project.
Definition project.cpp:195
const VECTOR2I & GetArcMid() const
Definition shape_arc.h:116
const VECTOR2I & GetP1() const
Definition shape_arc.h:115
const VECTOR2I & GetP0() const
Definition shape_arc.h:114
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.
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.
bool IsArcStart(size_t aIndex) const
Represent a set of closed polygons.
POLYGON & Polygon(int aIndex)
Return the aIndex-th subpolygon in the set.
int AddPolygon(const POLYGON &apolygon)
Adds a polygon to the set.
std::vector< SHAPE_LINE_CHAIN > POLYGON
represents a single polygon outline with holes.
int OutlineCount() const
Return the number of outlines in the set.
Simple container to manage line stroke parameters.
int GetWidth() const
void SetLineStyle(LINE_STYLE aLineStyle)
void SetWidth(int aWidth)
void SetColor(const KIGFX::COLOR4D &aColor)
LINE_STYLE GetLineStyle() const
KIGFX::COLOR4D GetColor() const
const wxChar *const traceApi
Flag to enable debug output related to the IPC API and its plugin system.
Definition api_utils.cpp:33
#define KICOMMON_API
Definition kicommon.h:27
KICOMMON_API void PackLineEnding(types::LineEnding &aOutput, const LINE_ENDING &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API void PackProject(types::ProjectSpecifier &aOutput, const PROJECT &aInput)
KICOMMON_API void PackColor(types::Color &aOutput, const KIGFX::COLOR4D &aInput)
KICOMMON_API void UnpackStroke(STROKE_PARAMS &aOutput, const types::StrokeAttributes &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API int UnpackDistance(const types::Distance &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API KIID_PATH UnpackSheetPath(const types::SheetPath &aInput)
KICOMMON_API std::optional< KICAD_T > TypeNameFromAny(const google::protobuf::Any &aMessage)
Definition api_utils.cpp:50
KICOMMON_API void PackPolySet(types::PolySet &aOutput, const SHAPE_POLY_SET &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API VECTOR3D UnpackVector3D(const types::Vector3D &aInput)
KICOMMON_API LINE_ENDING UnpackLineEnding(const types::LineEnding &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API KIGFX::COLOR4D UnpackColor(const types::Color &aInput)
KICOMMON_API void PackCustomProperties(google::protobuf::RepeatedPtrField< types::CustomProperty > *aOutput, const EDA_ITEM &aItem)
KICOMMON_API ApiResponseStatus MakeResponseStatus(ApiStatusCode aCode, const std::string &aMessage)
Definition api_utils.cpp:39
KICOMMON_API VECTOR2I UnpackVector2(const types::Vector2 &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API void PackBox2(types::Box2 &aOutput, const BOX2I &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API void PackDistance(types::Distance &aOutput, int aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API BOX2I UnpackBox2(const types::Box2 &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API void PackVector2(types::Vector2 &aOutput, const VECTOR2I &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API SHAPE_LINE_CHAIN UnpackPolyLine(const types::PolyLine &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API void PackStroke(types::StrokeAttributes &aOutput, const STROKE_PARAMS &aInput, const EDA_IU_SCALE &aScale)
KICOMMON_API void PackSheetPath(types::SheetPath &aOutput, const KIID_PATH &aInput)
KICOMMON_API void PackLibId(types::LibraryIdentifier *aOutput, const LIB_ID &aId)
KICOMMON_API LIB_ID UnpackLibId(const types::LibraryIdentifier &aId)
KICOMMON_API bool PackKiwayApiMessage(const google::protobuf::Message &aMessage, std::string &aBytes)
KICOMMON_API void UnpackCustomProperties(const google::protobuf::RepeatedPtrField< types::CustomProperty > &aInput, EDA_ITEM &aItem)
const KICOMMON_API std::string KiwayClientName
KICOMMON_API void PackPolyLine(types::PolyLine &aOutput, const SHAPE_LINE_CHAIN &aSlc, const EDA_IU_SCALE &aScale)
KICOMMON_API SHAPE_POLY_SET UnpackPolySet(const types::PolySet &aInput, const EDA_IU_SCALE &aScale)
const KICOMMON_API std::string StandaloneCrossProbeClientName
KICOMMON_API void PackVector3D(types::Vector3D &aOutput, const VECTOR3D &aInput)
constexpr int NmToIU(int64_t nm) const
Definition base_units.h:113
constexpr int64_t IUToNm(int iu) const
Definition base_units.h:108
@ SCH_GROUP_T
Definition typeinfo.h:169
@ SCH_TABLE_T
Definition typeinfo.h:161
@ PCB_CONSTRAINT_T
a geometric constraint between board items
Definition typeinfo.h:237
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
Definition typeinfo.h:80
@ SCH_LINE_T
Definition typeinfo.h:159
@ SCH_NO_CONNECT_T
Definition typeinfo.h:156
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
Definition typeinfo.h:89
@ SCH_SYMBOL_T
Definition typeinfo.h:168
@ PCB_DRILL_MAP_T
class PCB_DRILL_MAP, drill symbols drawn at the holes
Definition typeinfo.h:240
@ PCB_GROUP_T
class PCB_GROUP, a set of BOARD_ITEMs
Definition typeinfo.h:103
@ SCH_TABLECELL_T
Definition typeinfo.h:162
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
Definition typeinfo.h:85
@ PCB_ZONE_T
class ZONE, a copper pour area
Definition typeinfo.h:100
@ SCH_FIELD_T
Definition typeinfo.h:146
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
Definition typeinfo.h:84
@ SCH_DIRECTIVE_LABEL_T
Definition typeinfo.h:167
@ SCH_LABEL_T
Definition typeinfo.h:163
@ SCH_SHEET_T
Definition typeinfo.h:171
@ PCB_REFERENCE_IMAGE_T
class PCB_REFERENCE_IMAGE, bitmap on a layer
Definition typeinfo.h:81
@ SCH_SHAPE_T
Definition typeinfo.h:145
@ SCH_RULE_AREA_T
Definition typeinfo.h:166
@ PCB_FIELD_T
class PCB_FIELD, text associated with a footprint property
Definition typeinfo.h:82
@ SCH_HIER_LABEL_T
Definition typeinfo.h:165
@ SCH_BUS_BUS_ENTRY_T
Definition typeinfo.h:158
@ PCB_BARCODE_T
class PCB_BARCODE, a barcode (graphic item)
Definition typeinfo.h:93
@ PCB_TABLECELL_T
class PCB_TABLECELL, PCB_TEXTBOX for use in tables
Definition typeinfo.h:87
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
Definition typeinfo.h:78
@ PCB_GRID_ITEM_T
a subgrid placed on a board
Definition typeinfo.h:238
@ SCH_TEXT_T
Definition typeinfo.h:147
@ PCB_PAD_T
class PAD, a pad in a footprint
Definition typeinfo.h:79
@ SCH_BUS_WIRE_ENTRY_T
Definition typeinfo.h:157
@ SCH_BITMAP_T
Definition typeinfo.h:160
@ PCB_ARC_T
class PCB_ARC, an arc track segment on a copper layer
Definition typeinfo.h:90
@ PCB_DIMENSION_T
class PCB_DIMENSION_BASE: abstract dimension meta-type
Definition typeinfo.h:92
@ PCB_TABLE_T
class PCB_TABLE, table of PCB_TABLECELLs
Definition typeinfo.h:86
@ SCH_TEXTBOX_T
Definition typeinfo.h:148
@ PCB_POINT_T
class PCB_POINT, a 0-dimensional point
Definition typeinfo.h:105
@ PCB_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)
Definition typeinfo.h:88
@ PCB_DRILL_CHART_T
class PCB_DRILL_CHART, a live drill chart derived from PCB_TABLE
Definition typeinfo.h:239
@ SCH_GLOBAL_LABEL_T
Definition typeinfo.h:164
@ SCH_JUNCTION_T
Definition typeinfo.h:155
@ SCH_PIN_T
Definition typeinfo.h:149
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:683
VECTOR3< double > VECTOR3D
Definition vector3.h:230