67 case SCH_LINE_T:
return std::make_unique<SCH_LINE>();
68 case SCH_SHAPE_T:
return std::make_unique<SCH_SHAPE>();
69 case SCH_BITMAP_T:
return std::make_unique<SCH_BITMAP>();
71 case SCH_TEXT_T:
return std::make_unique<SCH_TEXT>();
72 case SCH_TABLE_T:
return std::make_unique<SCH_TABLE>();
74 case SCH_LABEL_T:
return std::make_unique<SCH_LABEL>();
79 case SCH_FIELD_T:
return std::make_unique<SCH_FIELD>( parentSchItem );
80 case SCH_GROUP_T:
return std::make_unique<SCH_GROUP>();
81 case SCH_SYMBOL_T:
return std::make_unique<SCH_SYMBOL>();
82 case LIB_SYMBOL_T:
return std::make_unique<LIB_SYMBOL>( wxEmptyString );
86 return std::make_unique<SCH_SHEET>(
static_cast<SCH_SCREEN*
>( aContainer ) );
94 return std::make_unique<SCH_SHEET_PIN>(
static_cast<SCH_SHEET*
>( aContainer ) );
100 return std::make_unique<SCH_PIN>(
static_cast<LIB_SYMBOL*
>( aContainer ) );
120 kiapi::schematic::types::PinMapEntry* e = aOutput->add_edits();
121 e->set_pin_number(
edit.m_PinNumber.ToUTF8() );
122 e->set_pad_number(
edit.m_PadNumber.ToUTF8() );
131 override.m_ActiveMapName = wxString::FromUTF8( aInput.active_map_name() );
133 for(
const kiapi::schematic::types::PinMapEntry& e : aInput.edits() )
135 override.m_Edits.push_back( { wxString::FromUTF8( e.pin_number() ), wxString::FromUTF8( e.pad_number() ) } );
150 wxLogTrace(
traceApi,
"error: instance data for symbol %s on %s is missing",
155 google::protobuf::Any
any;
158 if( !
any.UnpackTo( aOutput ) )
162 aOutput->mutable_reference_field()->mutable_text()->set_text( instance.
m_Reference.ToUTF8() );
163 aOutput->mutable_unit()->set_unit( instance.
m_Unit );
165 kiapi::schematic::types::SchematicSymbol* def = aOutput->mutable_definition();
167 std::vector<const SCH_PIN*> pins = aInput->
GetPins( &aPath );
169 std::ranges::sort( pins,
177 kiapi::schematic::types::SchematicSymbolChild* item = def->add_items();
178 item->mutable_unit()->set_unit(
pin->GetUnit() );
179 item->mutable_body_style()->set_style(
pin->GetBodyStyle() );
180 item->set_is_private(
pin->IsPrivate() );
181 pin->Serialize( *item->mutable_item() );
187 std::set<wxString> placedNumbers;
190 placedNumbers.insert(
pin->GetNumber() );
192 for(
const SCH_PIN* libPin : lib->GetPins() )
200 if( placedNumbers.count( libPin->GetNumber() ) )
203 kiapi::schematic::types::SchematicSymbolChild* item = def->add_items();
204 item->mutable_unit()->set_unit( libPin->GetUnit() );
205 item->mutable_body_style()->set_style( libPin->GetBodyStyle() );
206 item->set_is_private( libPin->IsPrivate() );
207 libPin->Serialize( *item->mutable_item() );
213 if( !
override.IsDefault() )
216 kiapi::schematic::types::SchematicSymbolAttributes* attributes = aOutput->mutable_attributes();
222 attributes->set_do_not_populate( aInput->
GetDNP() );
228 kiapi::schematic::types::SchematicSymbolVariants* variants = aOutput->mutable_variants();
232 kiapi::schematic::types::SchematicSymbolVariant* variant = variants->add_variants();
233 variant->set_name(
name.ToUTF8() );
236 variant->set_description(
schematic->GetVariantDescription(
name ).ToUTF8() );
238 attributes = variant->mutable_attributes();
239 attributes->set_exclude_from_simulation( variantInfo.m_ExcludedFromSim );
240 attributes->set_exclude_from_bill_of_materials( variantInfo.m_ExcludedFromBOM );
241 attributes->set_exclude_from_board( variantInfo.m_ExcludedFromBoard );
242 attributes->set_exclude_from_position_files( variantInfo.m_ExcludedFromPosFiles );
243 attributes->set_do_not_populate( variantInfo.m_DNP );
245 for(
const auto& [key, value] : variantInfo.m_Fields )
246 ( *variant->mutable_fields() )[std::string( key.ToUTF8() )] = value.ToUTF8();
248 if( variantInfo.m_SymbolOverride )
249 PackLibId( variant->mutable_symbol_override(), *variantInfo.m_SymbolOverride );
251 if( !variantInfo.m_PinMapOverride.IsDefault() )
252 PackPinMapOverride( variant->mutable_pin_map_override(), variantInfo.m_PinMapOverride );
267 if( aInput.has_attributes() )
269 const SchematicSymbolAttributes& attrs = aInput.attributes();
275 aOutput->
SetDNP( attrs.do_not_populate() );
286template <
typename VariantProto>
288 const VariantProto& aInput )
296 if( aInput.has_description() )
303 const kiapi::schematic::types::SchematicSymbolVariants& aInput,
308 std::set<wxString> requested;
310 for(
const SchematicSymbolVariant& variantProto : aInput.variants() )
312 wxString
name = wxString::FromUTF8( variantProto.name() );
318 requested.insert(
name );
321 if( variantProto.has_attributes() )
323 const SchematicSymbolAttributes& attrs = variantProto.attributes();
329 aSymbol->
SetDNP( attrs.do_not_populate(), &aPath,
name );
337 for(
const auto& [fieldName, unused] : stored.
m_Variants[
name].m_Fields )
339 if( variantProto.fields().find( std::string( fieldName.ToUTF8() ) )
340 == variantProto.fields().end() )
347 if( variantProto.has_symbol_override() )
352 if( variantProto.has_pin_map_override() )
357 for(
const auto& [key, value] : variantProto.fields() )
359 aSymbol->
SetFieldText( wxString::FromUTF8( key ), wxString::FromUTF8( value ), &aPath,
372 if( !requested.contains(
name ) )
380 const kiapi::schematic::types::SchematicSymbolInstance& aInput,
383 wxString reference = wxString::FromUTF8( aInput.reference_field().text().text() );
384 int unit = aInput.has_unit() ? aInput.unit().unit() : 1;
389 if( !reference.IsEmpty() )
390 aSymbol->
SetRef( &aPath, reference );
408 if( aInput.has_variants() )
416 google::protobuf::Any
any;
419 if( !
any.UnpackTo( aOutput ) )
426 kiapi::schematic::types::SheetVariants* variants = aOutput->mutable_variants();
430 aOutput->set_page_number( instance->m_PageNumber.ToUTF8() );
432 for(
const auto& [
name, variantInfo] : instance->m_Variants )
434 kiapi::schematic::types::SheetVariant* variant = variants->add_variants();
435 variant->set_name(
name.ToUTF8() );
438 variant->set_description(
schematic->GetVariantDescription(
name ).ToUTF8() );
440 variant->set_exclude_from_sim( variantInfo.m_ExcludedFromSim );
441 variant->set_exclude_from_bom( variantInfo.m_ExcludedFromBOM );
442 variant->set_dnp( variantInfo.m_DNP );
444 for(
const auto& [key, value] : variantInfo.m_Fields )
445 ( *variant->mutable_fields() )[std::string( key.ToUTF8() )] = value.ToUTF8();
457 const kiapi::schematic::types::SheetVariants& aInput,
462 std::set<wxString> requested;
464 for(
const SheetVariant& variantProto : aInput.variants() )
466 wxString
name = wxString::FromUTF8( variantProto.name() );
472 requested.insert(
name );
476 if( variantProto.has_exclude_from_sim() )
479 if( variantProto.has_exclude_from_bom() )
482 if( variantProto.has_dnp() )
483 aSheet->
SetDNP( variantProto.dnp(), &aParentPath,
name );
489 std::map<wxString, wxString> storedFields = stored->m_Variants.at(
name ).m_Fields;
491 for(
const auto& [fieldName, unused] : storedFields )
493 if( variantProto.fields().find( std::string( fieldName.ToUTF8() ) )
494 == variantProto.fields().end() )
501 for(
const auto& [key, value] : variantProto.fields() )
503 aSheet->
SetFieldText( wxString::FromUTF8( key ), wxString::FromUTF8( value ),
504 &aParentPath,
name );
511 std::vector<wxString> obsolete;
513 for(
const auto& [
name, unused] : stored->m_Variants )
515 if( !requested.contains(
name ) )
516 obsolete.push_back(
name );
519 for(
const wxString&
name : obsolete )
528 wxString pageNumber = wxString::FromUTF8( aInput.page_number() );
531 path.push_back( aSheet );
535 path.SetPageNumber( pageNumber.IsEmpty() ?
path.GetPageNumber() : pageNumber );
538 if( aInput.has_variants() )
543tl::expected<bool, ApiResponseStatus>
UnpackSheet(
SCH_SHEET* aOutput,
const kiapi::schematic::types::SheetSymbol& aInput )
545 google::protobuf::Any
any;
546 any.PackFrom( aInput );
551 e.set_status( ApiStatusCode::AS_BAD_REQUEST );
552 e.set_error_message(
"could not unpack SCH_SHEET from SheetSymbol in request" );
553 return tl::unexpected( e );
KICOMMON_API types::KiCadObjectType ToProtoEnum(KICAD_T aValue)
KICOMMON_API KICAD_T FromProtoEnum(types::KiCadObjectType aValue)
static void registerVariant(SCHEMATIC *aSchematic, const wxString &aName, const VariantProto &aInput)
Make the schematic aware of a variant a request named. Accepts either variant message.
static void applySheetVariants(SCH_SHEET *aSheet, const kiapi::schematic::types::SheetVariants &aInput, const SCH_SHEET_PATH &aParentPath, SCHEMATIC *aSchematic)
Make the set of variant records on one placement of a sheet match aInput, by name.
std::unique_ptr< EDA_ITEM > CreateItemForType(KICAD_T aType, EDA_ITEM *aContainer)
void ApplySymbolInstance(SCH_SYMBOL *aSymbol, const kiapi::schematic::types::SchematicSymbolInstance &aInput, const SCH_SHEET_PATH &aPath, SCHEMATIC *aSchematic)
Apply placement-specific data to an aSymbol at aPath: reference, unit, and the per-placement attribut...
tl::expected< bool, ApiResponseStatus > UnpackSheet(SCH_SHEET *aOutput, const kiapi::schematic::types::SheetSymbol &aInput)
Unpack the every placement data from the input.
bool PackSheet(kiapi::schematic::types::SheetSymbol *aOutput, const SCH_SHEET *aInput, const SCH_SHEET_PATH &aPath)
bool PackSymbol(kiapi::schematic::types::SchematicSymbolInstance *aOutput, const SCH_SYMBOL *aInput, const SCH_SHEET_PATH &aPath)
void ApplySheetInstance(SCH_SHEET *aSheet, const kiapi::schematic::types::SheetSymbol &aInput, const SCH_SHEET_PATH &aParentPath, SCHEMATIC *aSchematic)
Apply the placement data in a sheet message to aSheet: page number and the variants the message carri...
PIN_MAP_INSTANCE_OVERRIDE UnpackPinMapOverride(const kiapi::schematic::types::PinMapInstanceOverride &aInput)
void PackPinMapOverride(kiapi::schematic::types::PinMapInstanceOverride *aOutput, const PIN_MAP_INSTANCE_OVERRIDE &aOverride)
Pack/unpack a pin-to-pad map instance override to/from its protobuf form (issue #2282).
static void applySymbolVariants(SCH_SYMBOL *aSymbol, const kiapi::schematic::types::SchematicSymbolVariants &aInput, const SCH_SHEET_PATH &aPath, SCHEMATIC *aSchematic)
Make the set of variant records on one placement of a symbol match aInput, by name.
bool UnpackSymbol(SCH_SYMBOL *aOutput, const kiapi::schematic::types::SchematicSymbolInstance &aInput)
Unpack the geometry, the library definition, fields, and the default-variant attributes that are shar...
A base class for most all the KiCad significant classes used in schematics and boards.
KICAD_T Type() const
Returns the type of object.
wxString AsString() const
Define a library symbol object.
Holds all the data relating to one schematic.
void AddVariant(const wxString &aVariantName)
void SetVariantDescription(const wxString &aVariantName, const wxString &aDescription)
Set the description for a variant.
Base class for any item which can be embedded within the SCHEMATIC container class,...
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
virtual void SetUnit(int aUnit)
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
KIID_PATH Path() const
Get the sheet path as an KIID_PATH.
wxString PathHumanReadable(bool aUseShortRootName=true, bool aStripTrailingSeparator=false, bool aEscapeSheetNames=false) const
Return the sheet path in a human readable form made from the sheet names.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
void ClearVariantField(const KIID_PATH &aPath, const wxString &aVariantName, const wxString &aFieldName)
void SetExcludedFromSim(bool aExcludeFromSim, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear the exclude from simulation flag.
const SCH_SHEET_INSTANCE * GetInstance(const KIID_PATH &aParentPath) const
Return this sheet's placement record under aParentPath, or nullptr if it has none.
void SetDNP(bool aDNP, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
void SetExcludedFromBOM(bool aExcludeFromBOM, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear the exclude from schematic bill of materials flag.
void DeleteVariant(const KIID_PATH &aPath, const wxString &aVariantName)
void SetFieldText(const wxString &aFieldName, const wxString &aFieldText, const SCH_SHEET_PATH *aPath=nullptr, const wxString &aVariantName=wxEmptyString)
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
bool GetExcludedFromSim(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
virtual void SetDNP(bool aEnable, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
bool ClearVariantSymbolOverride(const SCH_SHEET_PATH &aPath, const wxString &aVariantName)
Remove the alternate-symbol override for a given variant and sheet instance.
void SetFieldText(const wxString &aFieldName, const wxString &aFieldText, const SCH_SHEET_PATH *aPath=nullptr, const wxString &aVariantName=wxEmptyString)
void SetVariantSymbolOverride(const SCH_SHEET_PATH &aPath, const wxString &aVariantName, const LIB_ID &aLibId)
Set the alternate-symbol override for a given variant and sheet instance.
void SetExcludedFromSim(bool aEnable, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear the exclude from simulation flag.
PIN_MAP_INSTANCE_OVERRIDE GetPinMapOverride(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const
std::vector< const SCH_PIN * > GetPins(const SCH_SHEET_PATH *aSheet) const
Retrieve a list of the SCH_PINs for the given sheet path.
bool GetExcludedFromBOM(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
void SetPinMapOverride(const PIN_MAP_INSTANCE_OVERRIDE &aOverride, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString)
Set the per-instance pin-to-pad map override (issue #2282).
void ClearVariantField(const KIID_PATH &aPath, const wxString &aVariantName, const wxString &aFieldName)
void SetRef(const SCH_SHEET_PATH *aSheet, const wxString &aReference)
Set the reference for the given sheet path for this symbol.
void AddHierarchicalReference(const KIID_PATH &aPath, const wxString &aRef, int aUnit)
Add a full hierarchical reference to this symbol.
void SetExcludedFromPosFiles(bool aEnable, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
bool GetExcludedFromPosFiles(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
bool GetInstance(SCH_SYMBOL_INSTANCE &aInstance, const KIID_PATH &aSheetPath, bool aTestFromEnd=false) const
bool GetExcludedFromBoard(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
void SetUnitSelection(const SCH_SHEET_PATH *aSheet, int aUnitSelection)
Set the selected unit of this symbol on one sheet.
void SetExcludedFromBOM(bool aEnable, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
Set or clear the exclude from schematic bill of materials flag.
std::unique_ptr< LIB_SYMBOL > & GetLibSymbolRef()
void DeleteVariant(const KIID_PATH &aPath, const wxString &aVariantName)
virtual bool GetDNP(const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) const override
Set or clear the 'Do Not Populate' flag.
void SetExcludedFromBoard(bool aEnable, const SCH_SHEET_PATH *aInstance=nullptr, const wxString &aVariantName=wxEmptyString) override
A type-safe container of any type.
const wxChar *const traceApi
Flag to enable debug output related to the IPC API and its plugin system.
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)
Class to handle a set of SCH_ITEMs.
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
One symbol-pin to footprint-pad mapping inside a PIN_MAP.
Per-instance override of the active pin map and a sparse delta on top.
std::vector< PIN_MAP_ENTRY > m_Edits
PIN_MAP_OVERRIDE_MODE m_Mode
A simple container for sheet instance information.
std::map< wxString, SCH_SHEET_VARIANT > m_Variants
A list of sheet variants.
A simple container for schematic symbol instance information.
std::map< wxString, SCH_SYMBOL_VARIANT > m_Variants
A list of symbol variants.
wxLogTrace helper definitions.
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.