29#include <unordered_set>
69#include <dialogs/dialog_text_properties.h>
72#include <dialogs/dialog_table_properties.h>
77#include <wx/filedlg.h>
84wxString uniqueGroupName(
SCH_SCREEN* aScreen,
const wxString& aBaseName )
89 std::unordered_set<wxString> existing;
92 existing.insert(
static_cast<SCH_GROUP*
>( item )->GetName() );
94 if( !existing.count( aBaseName ) )
97 for(
int n = 1; n < std::numeric_limits<int>::max(); ++n )
99 wxString candidate = aBaseName + wxString::Format( wxT(
"%d" ), n );
101 if( !existing.count( candidate ) )
142 auto belowRootSheetCondition =
145 return m_frame->GetCurrentSheet().Last() != &
m_frame->Schematic().Root();
148 auto inDrawingRuleArea =
171 bool placeOneOnly = symbol !=
nullptr;
174 std::vector<PICKED_SYMBOL>* historyList =
nullptr;
175 bool ignorePrimePosition =
false;
179 bool keepSymbol =
false;
180 bool placeAllUnits =
false;
208 filter.FilterPowerSymbols(
true );
212 wxFAIL_MSG(
"PlaceSymbol(): unexpected request" );
226 m_view->AddToPreview( aSymbol,
false );
247 existingRefs.
Clear();
275 for(
size_t i = 0; i < refs.
GetCount(); i++ )
276 existingRefs.
AddItem( refs[i] );
280 m_frame->GetCurrentSheet().UpdateAllScreenReferences();
308 ignorePrimePosition =
true;
316 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
322 bool isSyntheticClick = symbol && evt->IsActivate() && evt->HasPosition() && evt->Matches( aEvent );
324 if( evt->IsCancelInteractive() || ( symbol && evt->IsAction( &
ACTIONS::undo ) ) )
326 m_frame->GetInfoBar()->Dismiss();
344 else if( evt->IsActivate() && !isSyntheticClick )
346 if( symbol && evt->IsMoveTool() )
349 evt->SetPassEvent(
false );
355 m_frame->ShowInfoBarMsg(
_(
"Press <ESC> to cancel symbol creation." ) );
356 evt->SetPassEvent(
false );
360 if( evt->IsMoveTool() )
382 std::set<UTF8> unique_libid;
383 std::vector<PICKED_SYMBOL> alreadyPlaced;
403 alreadyPlaced.push_back( pickedSymbol );
409 bool footprintPreviews =
m_frame->eeconfig()->m_Appearance.footprint_preview;
424 if( evt->IsPrime() && !ignorePrimePosition )
451 if( keywords.Contains( wxT(
"global power" ) ) )
453 keywords.Replace( wxT(
"global power" ), wxT(
"local power" ) );
459 if( desc.Contains( wxT(
"global label" ) ) )
461 desc.Replace( wxT(
"global label" ), wxT(
"local label" ) );
474 symbol =
new SCH_SYMBOL( *libSymbol, &
m_frame->GetCurrentSheet(), sel, cursorPos,
481 existingRefs.
AddItem( placedSymbolReference );
484 if(
m_frame->eeconfig()->m_AutoplaceFields.enable )
496 m_frame->AddToScreen( symbol, screen );
498 if(
m_frame->eeconfig()->m_AutoplaceFields.enable )
501 m_frame->SaveCopyForRepeatItem( symbol );
504 commit.
Added( symbol, screen );
510 commit.
Push(
_(
"Place Symbol" ) );
520 if( keepSymbol || placeAllUnits )
532 const wxString currentRefStr = currentReference.
GetRef();
533 const bool isUnannotated = !currentRefStr.IsEmpty()
534 && currentRefStr.Last() ==
'?';
535 const LIB_ID symLibId = symbol->GetLibId();
538 [&](
int aUnit ) ->
bool
544 return schematic.Contains( candidate );
551 while( currentReference.
GetUnit() <= symbol->GetUnitCount()
552 && unitOccupied( currentReference.
GetUnit() ) )
557 if( currentReference.
GetUnit() > symbol->GetUnitCount() )
564 if( keepSymbol || currentReference.
GetUnit() > 1 )
570 addSymbol( nextSymbol );
573 if( currentReference.
GetUnit() == 1 )
578 existingRefs.
AddItem( placedSymbolReference );
603 m_frame->SelectUnit( symbol, unit );
612 if( symbol && symbol->GetBodyStyle() != bodyStyle )
614 m_frame->SelectBodyStyle( symbol, bodyStyle );
636 symbol->SetPosition( cursorPos );
638 m_view->AddToPreview( symbol,
false );
639 m_frame->SetMsgPanel( symbol );
692 int requestedUnit = params.
m_Unit;
697 static const std::vector<KICAD_T> symbolTypes = {
SCH_SYMBOL_T };
700 if( selection.
Size() != 1 )
702 m_frame->ShowInfoBarMsg(
_(
"Select a single symbol to place the next unit." ) );
713 if( !symbol->IsMultiUnit() )
715 m_frame->ShowInfoBarMsg(
_(
"This symbol has only one unit." ) );
721 if( missingUnits.empty() )
723 m_frame->ShowInfoBarMsg(
_(
"All units of this symbol are already placed." ) );
729 if( requestedUnit > 0 )
731 if( missingUnits.count( requestedUnit ) == 0 )
733 m_frame->ShowInfoBarMsg(
_(
"Requested unit already placed." ) );
737 nextMissing = requestedUnit;
742 nextMissing = *std::min_element( missingUnits.begin(), missingUnits.end() );
745 std::unique_ptr<SCH_SYMBOL> newSymbol = std::make_unique<SCH_SYMBOL>( *symbol );
751 newSymbol->SetUnitSelection( nextMissing );
752 newSymbol->SetUnit( nextMissing );
753 newSymbol->SetRefProp( symbol->GetRef( &sheetPath,
false ) );
775 struct RESET_FORCED_CURSOR_GUARD
782 RESET_FORCED_CURSOR_GUARD forcedCursorGuard{ controls };
784 if( !cfg || !common_settings )
792 std::unique_ptr<DESIGN_BLOCK> designBlock;
793 wxString sheetFileName = wxEmptyString;
795 if( placingDesignBlock )
807 msg.Printf(
_(
"Could not find design block %s." ),
809 m_frame->ShowInfoBarError( msg,
true );
813 sheetFileName = designBlock->GetSchematicFile();
815 if( sheetFileName.IsEmpty() || !wxFileExists( sheetFileName ) )
817 m_frame->ShowInfoBarError(
_(
"Design block has no schematic to place." ),
true );
824 wxString* importSourceFile = aEvent.
Parameter<wxString*>();
826 if( importSourceFile !=
nullptr )
827 sheetFileName = *importSourceFile;
837 auto placeSheetContents =
853 if( !
m_frame->LoadSheetFromFile( sheetPath.
Last(), &sheetPath, sheetFileName,
true,
854 placingDesignBlock ) )
859 m_frame->SetSheetNumberAndCount();
875 baseName = designBlock->GetLibId().GetLibItemName().wx_str();
876 group->SetDesignBlockLibId( designBlock->GetLibId() );
880 baseName = wxFileName( sheetFileName ).GetName();
883 group->SetName( uniqueGroupName( screen, baseName ) );
898 if( item->Type() ==
SCH_SYMBOL_T && !keepAnnotations && !autoAnnotate )
899 static_cast<SCH_SYMBOL*
>( item )->ClearAnnotation( &sheetPath,
false );
904 if( !item->GetParentGroup() )
907 group->AddItem( item );
909 newItems.emplace_back( item );
912 commit.
Added( item, screen );
943 if( !keepAnnotations || placingDesignBlock )
957 if( placingDesignBlock )
994 commit.
Push( placingDesignBlock ?
_(
"Add Design Block" )
995 :
_(
"Import Schematic Sheet Content" ) );
1003 m_frame->UpdateHierarchyNavigator();
1010 if( sheetFileName.IsEmpty() )
1015 if (!placingDesignBlock)
1017 if( sheetFileName.IsEmpty() )
1019 path = wxPathOnly(
m_frame->Prj().GetProjectFullName() );
1020 file = wxEmptyString;
1024 path = wxPathOnly( sheetFileName );
1025 file = wxFileName( sheetFileName ).GetFullName();
1030 wxFileDialog dlg(
m_frame,
_(
"Choose Schematic" ),
path, file,
1034 dlg.SetCustomizeHook( dlgHook );
1038 if( dlg.ShowModal() == wxID_CANCEL )
1041 sheetFileName = dlg.GetPath();
1043 m_frame->GetDesignBlockPane()->UpdateCheckboxes();
1046 if( sheetFileName.IsEmpty() )
1082 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
1088 bool isSyntheticClick = designBlock && evt->IsActivate() && evt->HasPosition() && evt->Matches( aEvent );
1090 if( evt->IsCancelInteractive() || ( designBlock && evt->IsAction( &
ACTIONS::undo ) ) )
1092 m_frame->GetInfoBar()->Dismiss();
1095 else if( evt->IsActivate() && !isSyntheticClick )
1097 m_frame->GetInfoBar()->Dismiss();
1104 if( placingDesignBlock )
1132 evt->SetPassEvent();
1146 bool immediateMode =
image !=
nullptr;
1147 bool ignorePrimePosition =
false;
1185 m_view->RecacheAllItems();
1210 ignorePrimePosition =
true;
1218 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
1224 bool isSyntheticClick =
image && evt->IsActivate() && evt->HasPosition() && evt->Matches( aEvent );
1228 m_frame->GetInfoBar()->Dismiss();
1246 else if( evt->IsActivate() && !isSyntheticClick )
1248 if(
image && evt->IsMoveTool() )
1251 evt->SetPassEvent(
false );
1257 m_frame->ShowInfoBarMsg(
_(
"Press <ESC> to cancel image creation." ) );
1258 evt->SetPassEvent(
false );
1262 if( evt->IsMoveTool() )
1286 bool cancelled =
false;
1291 cancelled = dlg.ShowModal() != wxID_OK;
1300 if( evt->IsPrime() && !ignorePrimePosition )
1302 cursorPos =
grid.Align( evt->Position() );
1311 wxString fullFilename = dlg.GetPath();
1314 if( wxFileExists( fullFilename ) )
1317 if( !
image || !
image->GetReferenceImage().ReadImageFile( fullFilename ) )
1319 wxMessageBox( wxString::Format(
_(
"Could not load image from '%s'." ), fullFilename ) );
1331 m_view->RecacheAllItems();
1342 commit.
Push(
_(
"Place Image" ) );
1378 evt->SetPassEvent();
1383 image->SetPosition( cursorPos );
1386 m_view->RecacheAllItems();
1399 evt->SetPassEvent();
1434 if( dlgResult != wxID_OK )
1440 wxMessageBox(
_(
"No graphic items found in file." ) );
1447 std::vector<SCH_ITEM*> newItems;
1448 std::vector<SCH_ITEM*> selectedItems;
1452 for( std::unique_ptr<EDA_ITEM>& ptr : list )
1455 wxCHECK2_MSG( item,
continue, wxString::Format(
"Bad item type: ", ptr->Type() ) );
1457 newItems.push_back( item );
1458 selectedItems.push_back( item );
1459 preview.
Add( item );
1470 commit.
Push(
_(
"Import Graphic" ) );
1479 EDA_ITEMS selItems( selectedItems.begin(), selectedItems.end() );
1505 for(
SCH_ITEM* item : selectedItems )
1506 item->Move(
delta );
1508 currentOffset +=
delta;
1510 m_view->Update( &preview );
1518 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
1523 if( evt->IsCancelInteractive() || evt->IsActivate() )
1532 else if( evt->IsMotion() )
1534 delta = cursorPos - currentOffset;
1536 for(
SCH_ITEM* item : selectedItems )
1537 item->Move(
delta );
1539 currentOffset +=
delta;
1541 m_view->Update( &preview );
1554 commit.
Push(
_(
"Import Graphic" ) );
1559 evt->SetPassEvent();
1564 m_view->Remove( &preview );
1582 bool loggedInfoBarError =
false;
1583 wxString description;
1585 bool allowRepeat =
false;
1611 description =
_(
"Add No Connect Flag" );
1618 description =
_(
"Add Junction" );
1624 description =
_(
"Add Wire to Bus Entry" );
1629 wxASSERT_MSG(
false,
"Unknown item type in SCH_DRAWING_TOOLS::SingleClickPlace" );
1667 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
1669 cursorPos = evt->IsPrime() ? evt->Position() : controls->
GetMousePosition();
1670 cursorPos =
grid.BestSnapAnchor( cursorPos,
grid.GetItemGrid( previewItem ),
nullptr );
1673 if( evt->IsCancelInteractive() )
1678 else if( evt->IsActivate() )
1680 if( evt->IsMoveTool() )
1701 commit.
Removed( existingItem, screen );
1702 m_frame->RemoveFromScreen( existingItem, screen );
1703 commit.
Push(
_(
"Remove No Connect Flag" ) );
1712 m_frame->ShowInfoBarError(
_(
"Junction location contains no joinable wires and/or pins." ) );
1713 loggedInfoBarError =
true;
1716 else if( loggedInfoBarError )
1718 m_frame->GetInfoBar()->Dismiss();
1727 lwbTool->
AddJunction( &commit, screen, cursorPos );
1729 m_frame->Schematic().CleanUp( &commit );
1731 commit.
Push( description );
1739 m_frame->AddToScreen( newItem, screen );
1742 m_frame->SaveCopyForRepeatItem( newItem );
1745 commit.
Added( newItem, screen );
1747 m_frame->Schematic().CleanUp( &commit );
1749 commit.
Push( description );
1768 m_frame->SetMsgPanel( previewItem );
1805 std::deque<SCH_ITEM*> strokeItems;
1806 strokeItems.push_back( previewItem );
1821 std::deque<SCH_JUNCTION*> junctions;
1822 junctions.push_back(
static_cast<SCH_JUNCTION*
>( previewItem ) );
1845 evt->SetPassEvent();
1850 evt->SetPassEvent();
1883 wxASSERT( aWire->
IsWire() );
1889 SCH_ITEM* wireDriver = wireConnection->Driver();
1891 if( wireDriver && wireDriver->
IsType( { SCH_LABEL_T, SCH_GLOBAL_LABEL_T } ) )
1892 return wireConnection->LocalName();
1895 return wxEmptyString;
1900 std::list<std::unique_ptr<SCH_LABEL_BASE>>& aLabelList )
1923 labelItem->
GetFields().back().SetItalic(
true );
1924 labelItem->
GetFields().back().SetVisible(
true );
1938 labelItem = globalLabel;
1946 wxFAIL_MSG(
"SCH_DRAWING_TOOLS::createNewLabel() unknown label type" );
1966 if( !netName.IsEmpty() )
1969 labelItem->
SetText( netName );
2004 if( aLabelList.empty() )
2005 aLabelList.push_back( std::unique_ptr<SCH_LABEL_BASE>( labelItem ) );
2019 textItem =
new SCH_TEXT( aPosition );
2054 pin->SetText( std::to_string( aSheet->
GetPins().size() + 1 ) );
2056 pin->SetPosition( aPosition );
2057 pin->ClearSelected();
2081 bool ignorePrimePosition =
false;
2084 wxString description;
2086 std::list<std::unique_ptr<SCH_LABEL_BASE>> itemsToPlace;
2117 else if( isGlobalLabel )
2119 else if( isNetLabel || isClassLabel )
2121 else if( isHierLabel )
2127 auto updatePreview =
2131 m_view->AddToPreview( item,
false );
2134 m_view->AddToPreview( aChild,
false );
2148 while( !itemsToPlace.empty() )
2150 itemsToPlace.front().release();
2151 itemsToPlace.pop_front();
2155 auto prepItemForPlacement =
2187 && ( isText || isGlobalLabel || isHierLabel || isClassLabel || isNetLabel ) )
2190 ignorePrimePosition =
true;
2200 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
2203 cursorPos =
grid.BestSnapAnchor( cursorPos, snapGrid, item );
2207 bool isSyntheticClick = item && evt->IsActivate() && evt->HasPosition() && evt->
Matches( aEvent );
2209 if( evt->IsCancelInteractive() || evt->IsAction( &
ACTIONS::undo ) )
2211 m_frame->GetInfoBar()->Dismiss();
2223 else if( evt->IsActivate() && !isSyntheticClick )
2225 if( item && evt->IsMoveTool() )
2228 evt->SetPassEvent(
false );
2234 m_frame->ShowInfoBarMsg(
_(
"Press <ESC> to cancel item creation." ) );
2235 evt->SetPassEvent(
false );
2239 if( evt->IsPointEditor() )
2243 else if( evt->IsMoveTool() )
2267 description =
_(
"Add Text" );
2269 else if( isHierLabel )
2284 schematic->Settings().m_DefaultTextSize ) );
2286 itemsToPlace.push_back( std::unique_ptr<SCH_LABEL_BASE>( label ) );
2293 description =
_(
"Add Hierarchical Label" );
2295 else if( isNetLabel )
2298 description =
_(
"Add Label" );
2300 else if( isGlobalLabel )
2303 description =
_(
"Add Label" );
2305 else if( isClassLabel )
2308 description =
_(
"Add Label" );
2310 else if( isSheetPin )
2315 if( !sheet &&
m_selectionTool->SelectPoint( cursorPos, { SCH_SHEET_T }, &i ) )
2323 + wxPoint( 20, 20 ) );
2344 m_statusPopup->SetText(
_(
"No new hierarchical labels found." ) );
2357 description =
_(
"Add Sheet Pin" );
2363 if( evt->IsPrime() && !ignorePrimePosition )
2365 cursorPos =
grid.Align( evt->Position() );
2372 cursorPos =
grid.BestSnapAnchor( cursorPos, snapGrid, item );
2375 if( !itemsToPlace.empty() )
2377 item = itemsToPlace.front().release();
2378 itemsToPlace.pop_front();
2382 prepItemForPlacement( item, cursorPos );
2384 if(
m_frame->GetMoveWarpsCursor() )
2396 if( isSheetPin && sheet )
2404 m_frame->SaveCopyForRepeatItem( item );
2411 commit.
Push( description );
2433 if( isSheetPin && sheet )
2440 m_statusPopup->SetText(
_(
"No new hierarchical labels found." ) );
2450 else if( !itemsToPlace.empty() )
2452 item = itemsToPlace.front().release();
2453 itemsToPlace.pop_front();
2454 prepItemForPlacement( item, cursorPos );
2466 else if( item && evt->IsSelectionEvent() )
2471 if( selection.
GetSize() == 1 )
2483 if( evt->HasParameter() )
2500 evt->SetPassEvent();
2535 evt->SetPassEvent();
2539 evt->SetPassEvent();
2569 wxString description;
2619 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
2625 bool isSyntheticClick = item && evt->IsActivate() && evt->HasPosition() && evt->
Matches( aEvent );
2627 if( evt->IsCancelInteractive() || ( item && evt->IsAction( &
ACTIONS::undo ) ) )
2639 else if( evt->IsActivate() && !isSyntheticClick )
2641 if( item && evt->IsMoveTool() )
2644 evt->SetPassEvent(
false );
2651 if( evt->IsPointEditor() )
2655 else if( evt->IsMoveTool() )
2666 else if( !item && ( evt->IsClick(
BUT_LEFT )
2690 description =
_(
"Add Text Box" );
2713 bool finished =
false;
2765 commit.
Push( wxString::Format(
_(
"Draw %s" ), item->
GetClass() ) );
2786 evt->SetPassEvent();
2802 const double cosRot = rot.
Cos();
2803 const double sinRot = rot.
Sin();
2805 const double dx = cursorPos.
x -
center.x;
2806 const double dy = cursorPos.
y -
center.y;
2807 const double lx = dx * cosRot + dy * sinRot;
2808 const double ly = -dx * sinRot + dy * cosRot;
2811 const double px = a * t.
Cos();
2812 const double py = b * t.
Sin();
2822 m_view->AddToPreview( dot );
2827 else if( evt->IsDblClick(
BUT_LEFT ) && !item )
2845 evt->SetPassEvent();
2874 bool started =
false;
2893 polyGeomMgr.
Reset();
2918 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
2926 if( evt->IsCancelInteractive() )
2937 evt->SetPassEvent(
false );
2941 else if( evt->IsActivate() )
2946 if( evt->IsPointEditor() )
2950 else if( evt->IsMoveTool() )
2974 const bool endPolygon = evt->IsDblClick(
BUT_LEFT )
2982 polyGeomMgr.
Reset();
2989 else if( polyGeomMgr.
AddPoint( cursorPos ) )
3006 cursorPos = last.value();
3016 else if( started && ( evt->IsMotion() || evt->IsDrag(
BUT_LEFT ) ) )
3032 evt->SetPassEvent();
3037 evt->SetPassEvent();
3102 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
3108 bool isSyntheticClick =
table && evt->IsActivate() && evt->HasPosition() && evt->Matches( aEvent );
3122 else if( evt->IsActivate() && !isSyntheticClick )
3124 if(
table && evt->IsMoveTool() )
3127 evt->SetPassEvent(
false );
3134 if( evt->IsPointEditor() )
3138 else if( evt->IsMoveTool() )
3155 table->SetColCount( 1 );
3158 int defaultTextSize = schematic->Settings().m_DefaultTextSize;
3161 table->AddCell( tableCell );
3163 table->SetParent( schematic );
3165 table->SetPosition( cursorPos );
3175 table->ClearEditFlags();
3186 commit.
Push(
_(
"Draw Table" ) );
3202 int fontSize = schematic->Settings().m_DefaultTextSize;
3204 VECTOR2I requestedSize( cursorPos - origin );
3206 int colCount = std::max( 1, requestedSize.
x / ( fontSize * 15 ) );
3207 int rowCount = std::max( 1, requestedSize.
y / ( fontSize * 2 ) );
3209 VECTOR2I cellSize( std::max( gridSize.
x * 5, requestedSize.
x / colCount ),
3210 std::max( gridSize.
y * 2, requestedSize.
y / rowCount ) );
3212 cellSize.
x =
KiROUND( (
double) cellSize.
x / gridSize.
x ) * gridSize.
x;
3213 cellSize.
y =
KiROUND( (
double) cellSize.
y / gridSize.
y ) * gridSize.
y;
3215 table->ClearCells();
3216 table->SetColCount( colCount );
3218 for(
int col = 0; col < colCount; ++col )
3219 table->SetColWidth( col, cellSize.
x );
3221 for(
int row = 0; row < rowCount; ++row )
3223 table->SetRowHeight( row, cellSize.
y );
3225 for(
int col = 0; col < colCount; ++col )
3228 int defaultTextSize = schematic->Settings().m_DefaultTextSize;
3233 table->AddCell( cell );
3265 evt->SetPassEvent();
3274 evt->SetPassEvent();
3294 std::unique_ptr<DESIGN_BLOCK> designBlock;
3300 if( isDrawSheetCopy )
3302 wxString* ptr = aEvent.
Parameter<wxString*>();
3309 else if( isDrawSheetFromDesignBlock )
3312 wxCHECK( designBlock, 0 );
3313 filename = designBlock->GetSchematicFile();
3316 if( ( isDrawSheetCopy || isDrawSheetFromDesignBlock ) && !wxFileExists( filename ) )
3318 wxMessageBox( wxString::Format(
_(
"File '%s' does not exist." ), filename ) );
3332 bool startedWithDrag =
false;
3361 if( aEvent.
HasPosition() && !( isDrawSheetCopy || isDrawSheetFromDesignBlock ) )
3369 grid.SetUseGrid(
getView()->GetGAL()->GetGridSnapping() && !evt->DisableGridSnapping() );
3375 bool isSyntheticClick = sheet && evt->IsActivate() && evt->HasPosition()
3378 if( evt->IsCancelInteractive() || ( sheet && evt->IsAction( &
ACTIONS::undo ) ) )
3380 m_frame->GetInfoBar()->Dismiss();
3392 else if( evt->IsActivate() && !isSyntheticClick )
3394 if( sheet && evt->IsMoveTool() )
3397 evt->SetPassEvent(
false );
3403 m_frame->ShowInfoBarMsg(
_(
"Press <ESC> to cancel sheet creation." ) );
3404 evt->SetPassEvent(
false );
3408 if( evt->IsPointEditor() )
3412 else if( evt->IsMoveTool() )
3423 else if( !sheet && ( evt->IsClick(
BUT_LEFT ) || evt->IsDblClick(
BUT_LEFT )
3429 if( selection.
Size() == 1
3454 startedWithDrag = evt->IsDrag(
BUT_LEFT );
3461 if( isDrawSheetCopy )
3463 wxFileName fn( filename );
3468 else if( isDrawSheetFromDesignBlock )
3470 wxFileName fn( filename );
3475 std::vector<SCH_FIELD>& sheetFields = sheet->
GetFields();
3478 for(
const auto& [fieldName, fieldValue] : designBlock->GetFields() )
3480 sheetFields.emplace_back( sheet,
FIELD_T::USER, fieldName );
3481 sheetFields.back().SetText( fieldValue );
3482 sheetFields.back().SetVisible(
false );
3506 else if( sheet && ( evt->IsClick(
BUT_LEFT ) || evt->IsDblClick(
BUT_LEFT )
3510 || ( startedWithDrag && evt->IsMouseUp(
BUT_LEFT ) ) ) )
3516 nullptr,
nullptr,
nullptr, &filename ) )
3528 m_frame->AddToScreen( sheet );
3533 m_frame->Schematic().RefreshHierarchy();
3536 && !( ( isDrawSheetCopy || isDrawSheetFromDesignBlock )
3538 bool annotatePowerSymbols = isDrawSheetFromDesignBlock;
3540 if( annotateNonPowerSymbols || annotatePowerSymbols )
3547 if( annotateNonPowerSymbols )
3558 if( annotatePowerSymbols )
3577 sheetGroup->
SetName( uniqueGroupName( screen, designBlock->GetLibId().GetLibItemName() ) );
3579 c.
Add( sheetGroup, screen );
3584 c.
Push( isDrawSheetCopy ?
"Import Sheet Copy" :
"Draw Sheet" );
3591 if( ( isDrawSheetCopy || isDrawSheetFromDesignBlock )
3618 evt->SetPassEvent();
3627 m_frame->SetMsgPanel( sheet );
3643 evt->SetPassEvent();
3675 if( !sheetPaths.size() )
3679 m_frame, std::move( sheetPaths ),
3680 std::make_shared<SHEET_SYNCHRONIZATION_AGENT>(
3690 commit.
Push(
_(
"Modify sheet pin" ) );
3696 commit.
Push(
_(
"Modify schematic item" ) );
3707 selectionTool->AddItemToSel( aItem,
true );
3712 std::set<EDA_ITEM*> aTemplates )
3785 if( labels.empty() )
3789 m_statusPopup->SetText(
_(
"No new hierarchical labels found." ) );
3803 SCH_ITEM* lastPlacedLabel =
nullptr;
3805 auto calculatePositionForLabel =
3816 int currentWidth = currentLabel->GetBoundingBox().GetWidth();
3817 int currentHeight = currentLabel->GetBoundingBox().GetHeight();
3821 return { lastX + lastWidth, lastY };
3832 if( !lastPlacedLabel )
3834 std::vector<SCH_SHEET_PIN*> existingPins = sheet->
GetPins();
3836 if( !existingPins.empty() )
3838 std::sort( existingPins.begin(), existingPins.end(),
3841 return ( a->GetPosition().x < b->GetPosition().x )
3842 || ( a->GetPosition().x == b->GetPosition().x
3843 && a->GetPosition().y < b->GetPosition().y );
3846 lastPlacedLabel = existingPins.back();
3850 cursorPos = calculatePositionForLabel( lastPlacedLabel, label );
3867 commit.
Push(
_(
"Add Sheet Pin" ) );
3869 lastPlacedLabel = item;
3879 static const std::function<void( std::list<SCH_SHEET_PATH>&,
SCH_SCREEN*, std::set<SCH_SCREEN*>&,
3881 []( std::list<SCH_SHEET_PATH>& aPaths,
SCH_SCREEN* aScene, std::set<SCH_SCREEN*>& aVisited,
3884 if( ! aScene || aVisited.find(aScene) != aVisited.end() )
3887 std::vector<SCH_ITEM*> sheetChildren;
3888 aScene->GetSheets( &sheetChildren );
3889 aVisited.insert( aScene );
3891 for(
SCH_ITEM* child : sheetChildren )
3896 aPaths.push_back( cp );
3897 getSheetChildren( aPaths, sheet->
GetScreen(), aVisited, cp );
3901 std::list<SCH_SHEET_PATH> sheetPaths;
3902 std::set<SCH_SCREEN*> visited;
3905 std::vector<SCH_SHEET*> topLevelSheets =
m_frame->Schematic().GetTopLevelSheets();
3907 for(
SCH_SHEET* topSheet : topLevelSheets )
3909 if( topSheet && topSheet->GetScreen() )
3913 getSheetChildren( sheetPaths, topSheet->GetScreen(), visited, current );
3917 if( sheetPaths.size() == 0 )
3919 m_frame->ShowInfoBarMsg(
_(
"No sub schematic found in the current project" ) );
3934 std::vector<SCH_HIERLABEL*> labels;
3939 labels.push_back( label );
3942 std::sort( labels.begin(), labels.end(),
3945 return StrNumCmp( label1->GetText(), label2->GetText(), true ) < 0;
3950 if( !aSheet->
HasPin( label->GetText() ) )
3963 std::vector<SCH_HIERLABEL*> labels;
3970 labels.push_back( label );
constexpr EDA_IU_SCALE schIUScale
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
static TOOL_ACTION cancelInteractive
static TOOL_ACTION cursorDblClick
static TOOL_ACTION duplicate
static TOOL_ACTION activatePointEditor
static TOOL_ACTION doDelete
static TOOL_ACTION cursorClick
static TOOL_ACTION increment
static TOOL_ACTION selectionClear
Clear the current selection.
static TOOL_ACTION refreshPreview
static TOOL_ACTION finishInteractive
static TOOL_ACTION selectItems
Select a list of items (specified as the event parameter)
PANEL_DESIGN_BLOCK_CHOOSER m_DesignBlockChooserPanel
constexpr const Vec & GetPosition() const
constexpr size_type GetWidth() const
constexpr size_type GetHeight() const
constexpr bool Contains(const Vec &aPoint) const
constexpr const SizeVec & GetSize() const
COMMIT & Added(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Notify observers that aItem has been added.
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr, RECURSE_MODE aRecurse=RECURSE_MODE::NO_RECURSE)
Modify a given item in the model.
COMMIT & Add(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Add a new item to the model.
COMMIT & Removed(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
LIB_ID GetSelectedLibId(int *aUnit=nullptr) const
DESIGN_BLOCK * GetDesignBlock(const LIB_ID &aLibId, bool aUseCacheLib, bool aShowErrorMsg)
Load design block from design block library table.
void SetFilenameOverride(const wxString &aFilenameOverride)
Set the filename override to be applied in TransferDataToWindow.
std::list< std::unique_ptr< EDA_ITEM > > & GetImportedItems()
bool IsPlacementInteractive()
void SetLabelList(std::list< std::unique_ptr< SCH_LABEL_BASE > > *aLabelList)
FIELDS_GRID_TABLE * GetFieldsGridTable()
void SetDesignBlockLibId(const LIB_ID &aLibId)
void AddItem(EDA_ITEM *aItem)
Add item to group.
void SetName(const wxString &aName)
A base class for most all the KiCad significant classes used in schematics and boards.
virtual VECTOR2I GetPosition() const
virtual void ClearEditFlags()
virtual void SetPosition(const VECTOR2I &aPos)
virtual const BOX2I GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
EDA_ITEM_FLAGS GetEditFlags() const
void SetFlags(EDA_ITEM_FLAGS aMask)
KICAD_T Type() const
Returns the type of object.
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
virtual bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const
Compare the item against the search criteria in aSearchData.
virtual wxString GetFriendlyName() const
virtual EDA_ITEM * Clone() const
Create a duplicate of this item with linked list members set to NULL.
virtual void SetParent(EDA_ITEM *aParent)
int GetEllipseMinorRadius() const
const VECTOR2I & GetEllipseCenter() const
FILL_T GetFillMode() const
int GetEllipseMajorRadius() const
EDA_ANGLE GetEllipseRotation() const
void SetFillColor(const COLOR4D &aColor)
void SetStart(const VECTOR2I &aStart)
COLOR4D GetFillColor() const
void SetEnd(const VECTOR2I &aEnd)
void SetFillMode(FILL_T aFill)
const EDA_ANGLE & GetTextAngle() const
void SetTextSize(VECTOR2I aNewSize, bool aEnforceMinTextSize=true)
virtual const wxString & GetText() const
Return the string associated with the text object.
void SetVertJustify(GR_TEXT_V_ALIGN_T aType)
GR_TEXT_H_ALIGN_T GetHorizJustify() const
virtual void SetVisible(bool aVisible)
void SetBold(bool aBold)
Set the text to be bold - this will also update the font if needed.
GR_TEXT_V_ALIGN_T GetVertJustify() const
virtual void SetText(const wxString &aText)
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
void SetItalic(bool aItalic)
Set the text to be italic - this will also update the font if needed.
void SetHorizJustify(GR_TEXT_H_ALIGN_T aType)
PANEL_ANNOTATE m_AnnotatePanel
EE_TYPE OfType(KICAD_T aType) const
A color representation with 4 components: red, green, blue, alpha.
An interface for classes handling user events controlling the view behavior such as zooming,...
virtual void CaptureCursor(bool aEnabled)
Force the cursor to stay within the drawing panel area.
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Place the cursor immediately at a given point.
virtual void ShowCursor(bool aEnabled)
Enable or disables display of cursor.
virtual void WarpMouseCursor(const VECTOR2D &aPosition, bool aWorldCoordinates=false, bool aWarpView=false)=0
If enabled (.
virtual void SetCrossHairCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true)=0
Move the graphic crosshair cursor to the requested position expressed in world coordinates.
VECTOR2D GetCursorPosition() const
Return the current cursor position in world coordinates.
virtual VECTOR2D GetMousePosition(bool aWorldCoordinates=true) const =0
Return the current mouse pointer position.
virtual void SetCursorPosition(const VECTOR2D &aPosition, bool aWarpView=true, bool aTriggeredByArrows=false, long aArrowCommand=0)=0
Move cursor to the requested position expressed in world coordinates.
virtual void SetAutoPan(bool aEnabled)
Turn on/off auto panning (this feature is used when there is a tool active (eg.
virtual void PinCursorInsideNonAutoscrollArea(bool aWarpMouseCursor)=0
LEGACY_SYMBOL_LIB * GetCacheLibrary()
Object used to load, save, search, and otherwise manipulate symbol library files.
A logical library item identifier and consists of various portions much like a URI.
bool IsValid() const
Check if this LID_ID is valid.
wxString GetUniStringLibId() const
Define a library symbol object.
wxString GetDescription() const override
const LIB_ID & GetLibId() const override
wxString GetKeyWords() const override
bool IsPower() const override
void SetDescription(const wxString &aDescription)
Gets the Description field text value */.
void SetKeyWords(const wxString &aKeyWords)
bool IsLocalPower() const override
bool IsGlobalPower() const override
A singleton reporter that reports to nowhere.
virtual COMMON_SETTINGS * GetCommonSettings() const
Class that handles the drawing of a polygon, including management of last corner deletion and drawing...
bool AddPoint(const VECTOR2I &aPt)
Lock in a polygon point.
void SetCursorPosition(const VECTOR2I &aPos)
Set the current cursor position.
bool NewPointClosesOutline(const VECTOR2I &aPt) const
std::optional< VECTOR2I > DeleteLastCorner()
Remove the last-added point from the polygon.
void SetFinished()
Mark the polygon finished and update the client.
void SetLeaderMode(LEADER_MODE aMode)
Set the leader mode to use when calculating the leader/returner lines.
void Reset()
Clear the manager state and start again.
static SYMBOL_LIBRARY_ADAPTER * SymbolLibAdapter(PROJECT *aProject)
Accessor for project symbol library manager adapter.
static LEGACY_SYMBOL_LIBS * LegacySchLibs(PROJECT *aProject)
Returns the list of symbol libraries from a legacy (pre-5.x) design This is only used from the remapp...
An adjunct helper to the DRAWING_TOOL interactive tool, which handles incoming geometry changes from ...
These are loaded from Eeschema settings but then overwritten by the project settings.
std::shared_ptr< REFDES_TRACKER > m_refDesTracker
A list of previously used schematic reference designators.
bool m_IntersheetRefsShow
Holds all the data relating to one schematic.
SCHEMATIC_SETTINGS & Settings() const
static TOOL_ACTION rotateCCW
static TOOL_ACTION placeClassLabel
static TOOL_ACTION placeSheetPin
static TOOL_ACTION placeNextSymbolUnit
static TOOL_ACTION editValue
static TOOL_ACTION setExcludeFromBOM
static TOOL_ACTION mirrorV
static TOOL_ACTION drawSheetFromFile
static TOOL_ACTION placeGlobalLabel
static TOOL_ACTION drawEllipseArc
static TOOL_ACTION drawTextBox
static TOOL_ACTION autoplaceFields
static TOOL_ACTION changeSymbol
static TOOL_ACTION syncAllSheetsPins
static TOOL_ACTION closeOutline
static TOOL_ACTION drawArc
static TOOL_ACTION drawSheet
static TOOL_ACTION properties
static TOOL_ACTION editReference
static TOOL_ACTION leaveSheet
static TOOL_ACTION ddImportGraphics
static TOOL_ACTION autoplaceAllSheetPins
static TOOL_ACTION drawRectangle
static TOOL_ACTION placeHierLabel
static TOOL_ACTION drawEllipse
static TOOL_ACTION placeLabel
static TOOL_ACTION drawCircle
static TOOL_ACTION importGraphics
static TOOL_ACTION toText
static TOOL_ACTION placeBusWireEntry
static TOOL_ACTION toHLabel
static TOOL_ACTION drawBezier
static TOOL_ACTION rotateCW
static TOOL_ACTION importSheet
static TOOL_ACTION setExcludeFromSim
static TOOL_ACTION toLabel
static TOOL_ACTION placeJunction
static TOOL_ACTION setDNP
static TOOL_ACTION drawRuleArea
static TOOL_ACTION placeSymbol
static TOOL_ACTION placeImage
static TOOL_ACTION deleteLastPoint
static TOOL_ACTION editWithLibEdit
static TOOL_ACTION toDLabel
static TOOL_ACTION cycleBodyStyle
static TOOL_ACTION drawSheetFromDesignBlock
static TOOL_ACTION mirrorH
static TOOL_ACTION placeDesignBlock
static TOOL_ACTION drawTable
static TOOL_ACTION placeSchematicText
static TOOL_ACTION toTextBox
static TOOL_ACTION changeSheet
static TOOL_ACTION enterSheet
static TOOL_ACTION editFootprint
static TOOL_ACTION repeatDrawItem
static TOOL_ACTION placeNoConnect
static TOOL_ACTION toGLabel
static TOOL_ACTION setExcludeFromBoard
static TOOL_ACTION syncSheetPins
static TOOL_ACTION placePower
Object to handle a bitmap image that can be inserted in a schematic.
Base class for a bus or wire entry.
VECTOR2I GetPosition() const override
void MirrorHorizontally(int aCenter) override
Mirror item horizontally about aCenter.
void MirrorVertically(int aCenter) override
Mirror item vertically about aCenter.
void Rotate(const VECTOR2I &aCenter, bool aRotateCCW) override
Rotate the item around aCenter 90 degrees in the clockwise direction.
Class for a wire to bus entry.
virtual void Push(const wxString &aMessage=wxT("A commit"), int aCommitFlags=0) override
Execute the changes.
virtual void Revert() override
Revert the commit by restoring the modified items state.
Each graphical item can have a SCH_CONNECTION describing its logical connection (to a bus or net).
Schematic editor (Eeschema) main window.
void SetText(const wxString &aText) override
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this label.
A set of SCH_ITEMs (i.e., without duplicates).
void SetSpinStyle(SPIN_STYLE aSpinStyle) override
Base class for any item which can be embedded within the SCHEMATIC container class,...
virtual bool IsConnectable() const
virtual void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo)
virtual void RunOnChildren(const std::function< void(SCH_ITEM *)> &aFunction, RECURSE_MODE aMode)
SCHEMATIC * Schematic() const
Search the item hierarchy to find a SCHEMATIC.
virtual void CalcEdit(const VECTOR2I &aPosition)
Calculate the attributes of an item at aPosition when it is being edited.
virtual void SetUnit(int aUnit)
SCH_CONNECTION * Connection(const SCH_SHEET_PATH *aSheet=nullptr) const
Retrieve the connection associated with this object in the given sheet.
bool IsType(const std::vector< KICAD_T > &aScanTypes) const override
Check whether the item is one of the listed types.
bool AutoRotateOnPlacement() const
autoRotateOnPlacement
SPIN_STYLE GetSpinStyle() const
void SetShape(LABEL_FLAG_SHAPE aShape)
LABEL_FLAG_SHAPE GetShape() const
void SetAutoRotateOnPlacement(bool autoRotate=true)
std::vector< SCH_FIELD > & GetFields()
virtual void SetSpinStyle(SPIN_STYLE aSpinStyle)
Segment description base class to describe items which have 2 end points (track, wire,...
bool IsWire() const
Return true if the line is a wire.
VECTOR2I GetEndPoint() const
VECTOR2I GetStartPoint() const
Container to create a flattened list of symbols because in a complex hierarchy, a symbol can be used ...
void SortByReferenceOnly()
Sort the list of references by reference.
void ReannotateByOptions(ANNOTATE_ORDER_T aSortOption, ANNOTATE_ALGO_T aAlgoOption, int aStartNumber, const SCH_REFERENCE_LIST &aAdditionalRefs, bool aStartAtCurrent, SCH_SHEET_LIST *aHierarchy)
Forces reannotation of the provided references.
void SetRefDesTracker(std::shared_ptr< REFDES_TRACKER > aTracker)
void AddItem(const SCH_REFERENCE &aItem)
void UpdateAnnotation()
Update the symbol references for the schematic project (or the current sheet).
A helper to define a symbol's reference designator in a schematic.
bool AlwaysAnnotate() const
Verify the reference should always be automatically annotated.
EE_RTREE & Items()
Get the full RTree, usually for iterating.
SCH_ITEM * GetItem(const VECTOR2I &aPosition, int aAccuracy=0, KICAD_T aType=SCH_LOCATE_ANY_T) const
Check aPosition within a distance of aAccuracy for items of type aFilter.
bool IsExplicitJunctionAllowed(const VECTOR2I &aPosition) const
Indicate that a junction dot may be placed at the given location.
void SetPosition(const VECTOR2I &aPos) override
void BeginEdit(const VECTOR2I &aStartPoint) override
Begin drawing a symbol library draw item at aPosition.
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
void EndEdit(bool aClosed=false) override
End an object editing action.
void SetStroke(const STROKE_PARAMS &aStroke) override
bool ContinueEdit(const VECTOR2I &aPosition) override
Continue an edit in progress at aPosition.
void CalcEdit(const VECTOR2I &aPosition) override
Calculate the attributes of an item at aPosition when it is being edited.
wxString GetClass() const override
Return the class name.
STROKE_PARAMS GetStroke() const override
VECTOR2I GetPosition() const override
A container for handling SCH_SHEET_PATH objects in a flattened hierarchy.
void SortByPageNumbers(bool aUpdateVirtualPageNums=true)
Sort the list of sheets by page number.
SCH_SHEET_LIST FindAllSheetsForScreen(const SCH_SCREEN *aScreen) const
Return a SCH_SHEET_LIST with a copy of all the SCH_SHEET_PATH using a particular screen.
wxString GetNextPageNumber() const
void GetSymbols(SCH_REFERENCE_LIST &aReferences, SYMBOL_FILTER aSymbolFilter, bool aForceIncludeOrphanSymbols=false) const
Add a SCH_REFERENCE object to aReferences for each symbol in the list of sheets.
Handle access to a stack of flattened SCH_SHEET objects by way of a path for creating a flattened sch...
SCH_SCREEN * LastScreen()
void SetPageNumber(const wxString &aPageNumber)
Set the sheet instance user definable page number.
SCH_SHEET * Last() const
Return a pointer to the last SCH_SHEET of the list.
void push_back(SCH_SHEET *aSheet)
Forwarded method from std::vector.
Define a sheet pin (label) used in sheets to create hierarchical schematics.
Sheet symbol placed in a schematic, and is the entry point for a sub schematic.
void SetBorderColor(KIGFX::COLOR4D aColor)
void AddPin(SCH_SHEET_PIN *aSheetPin)
Add aSheetPin to the sheet.
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
std::vector< SCH_FIELD > & GetFields()
Return a reference to the vector holding the sheet's fields.
SCH_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this sheet.
void SetBackgroundColor(KIGFX::COLOR4D aColor)
SCH_SCREEN * GetScreen() const
VECTOR2I GetPosition() const override
bool HasPin(const wxString &aName) const
Check if the sheet already has a sheet pin named aName.
void SetScreen(SCH_SCREEN *aScreen)
Set the SCH_SCREEN associated with this sheet to aScreen.
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
void SetBorderWidth(int aWidth)
void AutoplaceFields(SCH_SCREEN *aScreen, AUTOPLACE_ALGO aAlgo) override
void Resize(const VECTOR2I &aSize)
Resize this sheet to aSize and adjust all of the labels accordingly.
std::vector< SCH_SHEET_PIN * > & GetPins()
const LIB_ID & GetLibId() const override
void SetUnitSelection(const SCH_SHEET_PATH *aSheet, int aUnitSelection)
Set the selected unit of this symbol on one sheet.
RAII class that sets an value at construction and resets it to the original value at destruction.
const VECTOR2I NearestPoint(const VECTOR2I &aP) const
Compute a point on the segment (this) that is closest to point aP.
virtual void Add(EDA_ITEM *aItem)
VECTOR2I GetReferencePoint() const
virtual unsigned int GetSize() const override
Return the number of stored items.
virtual void Clear() override
Remove all the stored items from the group.
int Size() const
Returns the number of selected parts.
SHEET_SYNCHRONIZATION_PLACEMENT
std::function< void()> MODIFICATION
An interface to the global shared library manager that is schematic-specific and linked to one projec...
Helper object to filter a list of libraries.
This file is part of the common library.
static constexpr EDA_ANGLE ANGLE_0
#define IGNORE_PARENT_GROUP
#define IS_NEW
New item, just created.
#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 IS_MOVING
Item being moved.
#define STARTPOINT
When a line is selected, these flags indicate which.
@ FILLED_SHAPE
Fill with object color.
@ ID_POPUP_SCH_SELECT_UNIT
@ ID_POPUP_SCH_SELECT_BODY_STYLE
@ ID_POPUP_SCH_SELECT_BODY_STYLE_END
@ ID_POPUP_SCH_SELECT_UNIT_END
@ DIRECT
Unconstrained point-to-point.
static const std::string KiCadSchematicFileExtension
static wxString ImageFileWildcard()
static wxString KiCadSchematicFileWildcard()
PGM_BASE & Pgm()
The global program "get" accessor.
LIB_SYMBOL * SchGetLibSymbol(const LIB_ID &aLibId, SYMBOL_LIBRARY_ADAPTER *aLibMgr, LEGACY_SYMBOL_LIB *aCacheLib, wxWindow *aParent, bool aShowErrorMsg)
Load symbol from symbol library table.
Class to handle a set of SCH_ITEMs.
std::vector< EDA_ITEM * > EDA_ITEMS
ANNOTATE_ORDER_T
Schematic annotation order options.
@ ANNOTATE_SELECTION
Annotate the selection.
ANNOTATE_ALGO_T
Schematic annotation type options.
Definition of the SCH_SHEET_PATH and SCH_SHEET_LIST classes for Eeschema.
@ SYMBOL_FILTER_NON_POWER
LINE_STYLE
Dashed line types.
COLOR4D default_sheet_border_color
COLOR4D default_sheet_background_color
int default_line_thickness
POWER_SYMBOLS new_power_symbols
SCH_SYMBOL * m_Symbol
< Provide a symbol to place
SCH_SYMBOL * m_Symbol
< Symbol used as reference for unit placement
@ USER
The field ID hasn't been set yet; field is invalid.
@ INTERSHEET_REFS
Global label cross-reference page numbers.
std::vector< std::vector< std::string > > table
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
VECTOR2< int32_t > VECTOR2I
Definition of file extensions used in Kicad.