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.TuningPattern", PCB_GENERATOR_T },
92 { "type.googleapis.com/kiapi.board.types.ViaStitchArea", PCB_GENERATOR_T },
93 { "type.googleapis.com/kiapi.board.types.ViaStack", PCB_GENERATOR_T },
94 { "type.googleapis.com/kiapi.board.types.Constraint", PCB_CONSTRAINT_T },
95 { "type.googleapis.com/kiapi.board.types.Body3D", PCB_3D_BODY_T },
96 { "type.googleapis.com/kiapi.board.types.Field", PCB_FIELD_T },
97 { "type.googleapis.com/kiapi.board.types.FootprintInstance", PCB_FOOTPRINT_T },
98 { "type.googleapis.com/kiapi.schematic.types.Junction", SCH_JUNCTION_T },
99 { "type.googleapis.com/kiapi.schematic.types.NoConnectMarker", SCH_NO_CONNECT_T },
100 { "type.googleapis.com/kiapi.schematic.types.BusEntry", SCH_BUS_WIRE_ENTRY_T },
101 { "type.googleapis.com/kiapi.schematic.types.SchematicLine", SCH_LINE_T },
102 { "type.googleapis.com/kiapi.schematic.types.SchematicGraphicShape", SCH_SHAPE_T },
103 { "type.googleapis.com/kiapi.schematic.types.SchematicImage", SCH_BITMAP_T },
104 { "type.googleapis.com/kiapi.schematic.types.SchematicTextBox", SCH_TEXTBOX_T },
105 { "type.googleapis.com/kiapi.schematic.types.SchematicText", SCH_TEXT_T },
106 { "type.googleapis.com/kiapi.schematic.types.SchematicField", SCH_FIELD_T },
107 { "type.googleapis.com/kiapi.schematic.types.SchematicTableCell", SCH_TABLECELL_T },
108 { "type.googleapis.com/kiapi.schematic.types.SchematicTable", SCH_TABLE_T },
109 { "type.googleapis.com/kiapi.schematic.types.LocalLabel", SCH_LABEL_T },
110 { "type.googleapis.com/kiapi.schematic.types.GlobalLabel", SCH_GLOBAL_LABEL_T },
111 { "type.googleapis.com/kiapi.schematic.types.HierarchicalLabel", SCH_HIER_LABEL_T },
112 { "type.googleapis.com/kiapi.schematic.types.DirectiveLabel", SCH_DIRECTIVE_LABEL_T },
113 { "type.googleapis.com/kiapi.schematic.types.Group", SCH_GROUP_T },
114 { "type.googleapis.com/kiapi.schematic.types.SheetSymbol", SCH_SHEET_T },
115 { "type.googleapis.com/kiapi.schematic.types.SchematicSymbolInstance", SCH_SYMBOL_T },
116 { "type.googleapis.com/kiapi.schematic.types.SchematicPin", SCH_PIN_T },
117 { "type.googleapis.com/kiapi.schematic.types.SchematicSymbol", LIB_SYMBOL_T },
118 { "type.googleapis.com/kiapi.schematic.types.SchematicRuleArea", SCH_RULE_AREA_T },
119 };
120
121 auto it = s_types.find( aMessage.type_url() );
122
123 if( it != s_types.end() )
124 return it->second;
125
126 wxLogTrace( traceApi, wxString::Format( wxS( "Any message type %s is not known" ),
127 aMessage.type_url() ) );
128
129 return std::nullopt;
130}
131
132
133KICOMMON_API std::optional<wxString> GeneratorTypeFromAny( const google::protobuf::Any& aMessage )
134{
135 static const std::map<std::string, wxString> s_generatorTypes = {
136 { "type.googleapis.com/kiapi.board.types.TuningPattern", wxS( "tuning_pattern" ) },
137 { "type.googleapis.com/kiapi.board.types.ViaStitchArea", wxS( "via_stitch" ) },
138 { "type.googleapis.com/kiapi.board.types.ViaStack", wxS( "via_stack" ) },
139 };
140
141 auto it = s_generatorTypes.find( aMessage.type_url() );
142
143 if( it != s_generatorTypes.end() )
144 return it->second;
145
146 return std::nullopt;
147}
148
149
150KICOMMON_API LIB_ID UnpackLibId( const types::LibraryIdentifier& aId )
151{
152 return LIB_ID( aId.library_nickname(), aId.entry_name() );
153}
154
155
156KICOMMON_API void PackLibId( types::LibraryIdentifier* aOutput, const LIB_ID& aId )
157{
158 aOutput->set_library_nickname( aId.GetLibNickname() );
159 aOutput->set_entry_name( aId.GetLibItemName() );
160}
161
162
163KICOMMON_API void PackVector2( types::Vector2& aOutput, const VECTOR2I& aInput, const EDA_IU_SCALE& aScale )
164{
165 aOutput.set_x_nm( aScale.IUToNm( aInput.x ) );
166 aOutput.set_y_nm( aScale.IUToNm( aInput.y ) );
167}
168
169
170KICOMMON_API VECTOR2I UnpackVector2( const types::Vector2& aInput, const EDA_IU_SCALE& aScale )
171{
172 return VECTOR2I( KiROUND( aScale.NmToIUD( aInput.x_nm() ) ),
173 KiROUND( aScale.NmToIUD( aInput.y_nm() ) ) );
174}
175
176
177KICOMMON_API void PackVector3D( types::Vector3D& aOutput, const VECTOR3D& aInput )
178{
179 aOutput.set_x_nm( aInput.x );
180 aOutput.set_y_nm( aInput.y );
181 aOutput.set_z_nm( aInput.z );
182}
183
184
185KICOMMON_API VECTOR3D UnpackVector3D( const types::Vector3D& aInput )
186{
187 return VECTOR3D( aInput.x_nm(), aInput.y_nm(), aInput.z_nm() );
188}
189
190
191KICOMMON_API void PackBox2( types::Box2& aOutput, const BOX2I& aInput, const EDA_IU_SCALE& aScale )
192{
193 PackVector2( *aOutput.mutable_position(), aInput.GetOrigin(), aScale );
194 PackVector2( *aOutput.mutable_size(), aInput.GetSize(), aScale );
195}
196
197
198KICOMMON_API BOX2I UnpackBox2( const types::Box2& aInput, const EDA_IU_SCALE& aScale )
199{
200 return BOX2I( UnpackVector2( aInput.position(), aScale ), UnpackVector2( aInput.size(), aScale ) );
201}
202
203
204KICOMMON_API void PackDistance( types::Distance& aOutput, int aInput, const EDA_IU_SCALE& aScale )
205{
206 aOutput.set_value_nm( aScale.IUToNm( aInput ) );
207}
208
209
210KICOMMON_API int UnpackDistance( const types::Distance& aInput, const EDA_IU_SCALE& aScale )
211{
212 return KiROUND( aScale.NmToIUD( aInput.value_nm() ) );
213}
214
215
216KICOMMON_API void PackPolyLine( types::PolyLine& aOutput, const SHAPE_LINE_CHAIN& aSlc, const EDA_IU_SCALE& aScale )
217{
218 for( int vertex = 0; vertex < aSlc.PointCount(); ++vertex )
219 {
220 if( aSlc.IsArcStart( vertex ) )
221 {
222 types::PolyLineNode* node = aOutput.mutable_nodes()->Add();
223 const SHAPE_ARC& arc = aSlc.Arc( aSlc.ArcIndex( vertex ) );
224 PackVector2( *node->mutable_arc()->mutable_start(), arc.GetP0(), aScale );
225 PackVector2( *node->mutable_arc()->mutable_mid(), arc.GetArcMid(), aScale );
226 PackVector2( *node->mutable_arc()->mutable_end(), arc.GetP1(), aScale );
227 }
228 else if( !aSlc.IsPtOnArc( vertex ) )
229 {
230 types::PolyLineNode* node = aOutput.mutable_nodes()->Add();
231 PackVector2( *node->mutable_point(), aSlc.CPoint( vertex ), aScale );
232 }
233 }
234
235 aOutput.set_closed( aSlc.IsClosed() );
236}
237
238
239KICOMMON_API SHAPE_LINE_CHAIN UnpackPolyLine( const types::PolyLine& aInput, const EDA_IU_SCALE& aScale )
240{
242
243 for( const types::PolyLineNode& node : aInput.nodes() )
244 {
245 if( node.has_point() )
246 {
247 slc.Append( UnpackVector2( node.point(), aScale ) );
248 }
249 else if( node.has_arc() )
250 {
251 slc.Append( SHAPE_ARC( UnpackVector2( node.arc().start(), aScale ),
252 UnpackVector2( node.arc().mid(), aScale ),
253 UnpackVector2( node.arc().end(), aScale ),
254 0 ) );
255 }
256 }
257
258 slc.SetClosed( aInput.closed() );
259
260 return slc;
261}
262
263
264KICOMMON_API void PackPolySet( types::PolySet& aOutput, const SHAPE_POLY_SET& aInput, const EDA_IU_SCALE& aScale )
265{
266 for( int idx = 0; idx < aInput.OutlineCount(); ++idx )
267 {
268 const SHAPE_POLY_SET::POLYGON& poly = aInput.Polygon( idx );
269
270 if( poly.empty() )
271 continue;
272
273 types::PolygonWithHoles* polyMsg = aOutput.mutable_polygons()->Add();
274 PackPolyLine( *polyMsg->mutable_outline(), poly.front(), aScale );
275
276 if( poly.size() > 1 )
277 {
278 for( size_t hole = 1; hole < poly.size(); ++hole )
279 {
280 types::PolyLine* pl = polyMsg->mutable_holes()->Add();
281 PackPolyLine( *pl, poly[hole], aScale );
282 }
283 }
284 }
285}
286
287
288KICOMMON_API SHAPE_POLY_SET UnpackPolySet( const types::PolySet& aInput, const EDA_IU_SCALE& aScale )
289{
290 SHAPE_POLY_SET sps;
291
292 for( const types::PolygonWithHoles& polygonWithHoles : aInput.polygons() )
293 {
295
296 polygon.emplace_back( UnpackPolyLine( polygonWithHoles.outline(), aScale ) );
297
298 for( const types::PolyLine& holeMsg : polygonWithHoles.holes() )
299 polygon.emplace_back( UnpackPolyLine( holeMsg, aScale ) );
300
301 sps.AddPolygon( polygon );
302 }
303
304 return sps;
305}
306
307
308KICOMMON_API void PackColor( types::Color& aOutput, const KIGFX::COLOR4D& aInput )
309{
310 aOutput.set_r( aInput.r );
311 aOutput.set_g( aInput.g );
312 aOutput.set_b( aInput.b );
313 aOutput.set_a( aInput.a );
314}
315
316
317KICOMMON_API KIGFX::COLOR4D UnpackColor( const types::Color& aInput )
318{
319 double r = std::clamp( aInput.r(), 0.0, 1.0 );
320 double g = std::clamp( aInput.g(), 0.0, 1.0 );
321 double b = std::clamp( aInput.b(), 0.0, 1.0 );
322 double a = std::clamp( aInput.a(), 0.0, 1.0 );
323
324 return KIGFX::COLOR4D( r, g, b, a );
325}
326
327KICOMMON_API void PackSheetPath( types::SheetPath& aOutput, const KIID_PATH& aInput )
328{
329 aOutput.clear_path();
330
331 for( const KIID& entry : aInput )
332 aOutput.add_path()->set_value( entry.AsStdString() );
333}
334
335KICOMMON_API KIID_PATH UnpackSheetPath( const types::SheetPath& aInput )
336{
337 KIID_PATH output;
338
339 for( const types::KIID& sheet : aInput.path() )
340 output.push_back( KIID( sheet.value() ) );
341
342 return output;
343}
344
345
346KICOMMON_API void PackStroke( types::StrokeAttributes& aOutput, const STROKE_PARAMS& aInput,
347 const EDA_IU_SCALE& aScale )
348{
349 PackDistance( *aOutput.mutable_width(), aInput.GetWidth(), aScale );
350 aOutput.set_style( ToProtoEnum<LINE_STYLE, types::StrokeLineStyle>( aInput.GetLineStyle() ) );
351
352 if( aInput.GetColor() != KIGFX::COLOR4D::UNSPECIFIED )
353 PackColor( *aOutput.mutable_color(), aInput.GetColor() );
354}
355
356
357KICOMMON_API void UnpackStroke( STROKE_PARAMS& aOutput, const types::StrokeAttributes& aInput,
358 const EDA_IU_SCALE& aScale )
359{
360 aOutput.SetWidth( UnpackDistance( aInput.width(), aScale ) );
362
363 if( aInput.has_color() )
364 aOutput.SetColor( UnpackColor( aInput.color() ) );
365 else
367}
368
369
370KICOMMON_API void PackLineEnding( types::LineEnding& aOutput, const LINE_ENDING& aInput, const EDA_IU_SCALE& aScale )
371{
373
374 if( aInput.GetLength() > 0 )
375 PackDistance( *aOutput.mutable_length(), aInput.GetLength(), aScale );
376
377 if( aInput.GetWidth() > 0 )
378 PackDistance( *aOutput.mutable_width(), aInput.GetWidth(), aScale );
379
380 if( aInput.GetStrokeWidth() > 0 )
381 PackStroke( *aOutput.mutable_stroke(), aInput.GetStroke(), aScale );
382}
383
384
385KICOMMON_API LINE_ENDING UnpackLineEnding( const types::LineEnding& aInput, const EDA_IU_SCALE& aScale )
386{
387 LINE_ENDING ending;
388
390
391 if( aInput.has_length() )
392 ending.SetLength( UnpackDistance( aInput.length(), aScale ) );
393
394 if( aInput.has_width() )
395 ending.SetWidth( UnpackDistance( aInput.width(), aScale ) );
396
397 if( aInput.has_stroke() )
398 {
399 STROKE_PARAMS stroke;
400 UnpackStroke( stroke, aInput.stroke(), aScale );
401 ending.SetStroke( stroke );
402 }
403
404 return ending;
405}
406
407
408KICOMMON_API void PackProject( types::ProjectSpecifier& aOutput, const PROJECT& aInput )
409{
410 aOutput.set_name( aInput.GetProjectName().ToUTF8() );
411 aOutput.set_path( aInput.GetProjectPath().ToUTF8() );
412}
413
414#if defined( __MINGW32__ )
415const std::string KiwayClientName = "org.kicad.internal.kiway";
416const std::string StandaloneCrossProbeClientName = "org.kicad.internal.crossprobe";
417#else
418const KICOMMON_API std::string KiwayClientName = "org.kicad.internal.kiway";
419const KICOMMON_API std::string StandaloneCrossProbeClientName = "org.kicad.internal.crossprobe";
420#endif
421
422
423KICOMMON_API bool PackKiwayApiMessage( const google::protobuf::Message& aMessage, std::string& aBytes )
424{
425 ApiRequest request;
426 request.mutable_header()->set_client_name( KiwayClientName );
427 request.mutable_message()->PackFrom( aMessage );
428
429 aBytes = request.SerializeAsString();
430 return true;
431}
432
433
434KICOMMON_API void PackCustomProperties( google::protobuf::RepeatedPtrField<types::CustomProperty>* aOutput,
435 const EDA_ITEM& aItem )
436{
437 for( const auto& [key, value] : aItem.GetCustomProperties() )
438 {
439 types::CustomProperty* entry = aOutput->Add();
440 entry->set_key( key.ToUTF8() );
441 entry->set_value( value.ToUTF8() );
442 }
443}
444
445
446KICOMMON_API void UnpackCustomProperties( const google::protobuf::RepeatedPtrField<types::CustomProperty>& aInput,
447 EDA_ITEM& aItem )
448{
449 std::map<wxString, wxString> props;
450
451 for( const types::CustomProperty& prop : aInput )
452 props[wxString::FromUTF8( prop.key() )] = wxString::FromUTF8( prop.value() );
453
454 aItem.SetCustomProperties( props );
455}
456
457} // 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:914
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
Definition box2.h:982
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:391
double g
Green component.
Definition color4d.h:392
double a
Alpha component.
Definition color4d.h:394
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Definition color4d.h:400
double b
Blue component.
Definition color4d.h:393
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:276
virtual const wxString GetProjectName() const
Return the short name of the project.
Definition project.cpp:288
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 std::optional< wxString > GeneratorTypeFromAny(const google::protobuf::Any &aMessage)
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 double NmToIUD(int64_t nm) const
Definition base_units.h:121
constexpr int64_t IUToNm(int iu) const
Definition base_units.h:110
@ 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
@ LIB_SYMBOL_T
Definition typeinfo.h:144
@ SCH_NO_CONNECT_T
Definition typeinfo.h:156
@ PCB_GENERATOR_T
class PCB_GENERATOR, generator on a layer
Definition typeinfo.h:83
@ 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_3D_BODY_T
class PCB_3D_BODY, a 3D body (extruded or model) on a footprint
Definition typeinfo.h:241
@ 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:708
VECTOR3< double > VECTOR3D
Definition vector3.h:230