mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 02:03:12 +02:00
Compare commits
18 Commits
f312aabfa4
...
3fafe36586
Author | SHA1 | Date | |
---|---|---|---|
|
3fafe36586 | ||
|
fcf40deae2 | ||
|
ef602be91f | ||
|
bd5cb76fcd | ||
|
de26550b5a | ||
|
7deff606be | ||
|
6e2b20ed0e | ||
|
2f1a91279f | ||
|
6e316d9faa | ||
|
3c5fb9d90d | ||
|
11cc86e586 | ||
|
5e2fd084b9 | ||
|
972eea8bab | ||
|
81ed6708c0 | ||
|
5d9549a9d1 | ||
|
a797797b17 | ||
|
6fd93b23bd | ||
|
8a0349ee90 |
@ -9,6 +9,7 @@ win64_build:
|
||||
image: registry.gitlab.com/kicad/kicad-ci/windows-build-image/ltsc2022-msvc:latest
|
||||
variables:
|
||||
VCPKG_BINARY_SOURCES: 'nuget,gitlab,readwrite'
|
||||
VCPKG_DISABLE_COMPILER_TRACKING: '1'
|
||||
# Switch the compressor to fastzip and reduce the compression level
|
||||
FF_USE_FASTZIP: "true"
|
||||
CACHE_COMPRESSION_LEVEL: "fast"
|
||||
|
@ -277,7 +277,7 @@ void RENDER_3D_RAYTRACE_BASE::renderTracing( uint8_t* ptrPBO, REPORTER* aStatusR
|
||||
BS::multi_future<void> futures;
|
||||
|
||||
for( size_t i = 0; i < tp.get_thread_count(); ++i )
|
||||
futures.push_back( tp.submit( processBlocks ) );
|
||||
futures.push_back( tp.submit_task( processBlocks ) );
|
||||
|
||||
futures.wait();
|
||||
|
||||
|
@ -190,7 +190,7 @@ void DESIGN_BLOCK_LIST_IMPL::loadDesignBlocks()
|
||||
};
|
||||
|
||||
for( size_t ii = 0; ii < num_elements; ++ii )
|
||||
returns[ii] = tp.submit( db_thread );
|
||||
returns[ii] = tp.submit_task( db_thread );
|
||||
|
||||
for( const std::future<size_t>& ret : returns )
|
||||
{
|
||||
|
@ -1059,32 +1059,35 @@ std::vector<wxWindow*> EDA_DRAW_FRAME::findDialogs()
|
||||
}
|
||||
|
||||
|
||||
void EDA_DRAW_FRAME::FocusOnLocation( const VECTOR2I& aPos )
|
||||
void EDA_DRAW_FRAME::FocusOnLocation( const VECTOR2I& aPos, bool aAllowScroll )
|
||||
{
|
||||
bool centerView = false;
|
||||
BOX2D r = GetCanvas()->GetView()->GetViewport();
|
||||
|
||||
// Center if we're off the current view, or within 10% of its edge
|
||||
r.Inflate( - r.GetWidth() / 10.0 );
|
||||
|
||||
if( !r.Contains( aPos ) )
|
||||
centerView = true;
|
||||
|
||||
bool centerView = false;
|
||||
std::vector<BOX2D> dialogScreenRects;
|
||||
|
||||
for( wxWindow* dialog : findDialogs() )
|
||||
if( aAllowScroll )
|
||||
{
|
||||
dialogScreenRects.emplace_back( ToVECTOR2D( GetCanvas()->ScreenToClient( dialog->GetScreenPosition() ) ),
|
||||
ToVECTOR2D( dialog->GetSize() ) );
|
||||
}
|
||||
BOX2D r = GetCanvas()->GetView()->GetViewport();
|
||||
|
||||
// Center if we're behind an obscuring dialog, or within 10% of its edge
|
||||
for( BOX2D rect : dialogScreenRects )
|
||||
{
|
||||
rect.Inflate( rect.GetWidth() / 10 );
|
||||
// Center if we're off the current view, or within 10% of its edge
|
||||
r.Inflate( - r.GetWidth() / 10.0 );
|
||||
|
||||
if( rect.Contains( GetCanvas()->GetView()->ToScreen( aPos ) ) )
|
||||
if( !r.Contains( aPos ) )
|
||||
centerView = true;
|
||||
|
||||
for( wxWindow* dialog : findDialogs() )
|
||||
{
|
||||
dialogScreenRects.emplace_back( ToVECTOR2D( GetCanvas()->ScreenToClient( dialog->GetScreenPosition() ) ),
|
||||
ToVECTOR2D( dialog->GetSize() ) );
|
||||
}
|
||||
|
||||
// Center if we're behind an obscuring dialog, or within 10% of its edge
|
||||
for( BOX2D rect : dialogScreenRects )
|
||||
{
|
||||
rect.Inflate( rect.GetWidth() / 10 );
|
||||
|
||||
if( rect.Contains( GetCanvas()->GetView()->ToScreen( aPos ) ) )
|
||||
centerView = true;
|
||||
}
|
||||
}
|
||||
|
||||
if( centerView )
|
||||
|
@ -158,6 +158,43 @@ TOOL_DISPATCHER::~TOOL_DISPATCHER()
|
||||
delete st;
|
||||
}
|
||||
|
||||
int TOOL_DISPATCHER::decodeModifiers( const wxKeyboardState* aState )
|
||||
{
|
||||
int mods = 0;
|
||||
int wxmods = aState->GetModifiers();
|
||||
|
||||
// Returns the state of key modifiers (Alt, Ctrl and so on). Be carefull:
|
||||
// the flag wxMOD_ALTGR is defined in wxWidgets as wxMOD_CONTROL|wxMOD_ALT
|
||||
// So AltGr key cannot used as modifier key because it is the same as Alt key + Ctrl key.
|
||||
#if CAN_USE_ALTGR_KEY
|
||||
if( wxmods & wxMOD_ALTGR )
|
||||
mods |= MD_ALTGR;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
if( wxmods & wxMOD_CONTROL )
|
||||
mods |= MD_CTRL;
|
||||
|
||||
if( wxmods & wxMOD_ALT )
|
||||
mods |= MD_ALT;
|
||||
}
|
||||
|
||||
if( wxmods & wxMOD_SHIFT )
|
||||
mods |= MD_SHIFT;
|
||||
|
||||
#ifdef wxMOD_META
|
||||
if( wxmods & wxMOD_META )
|
||||
mods |= MD_META;
|
||||
#endif
|
||||
|
||||
#ifdef wxMOD_WIN
|
||||
if( wxmods & wxMOD_WIN )
|
||||
mods |= MD_SUPER;
|
||||
#endif
|
||||
|
||||
return mods;
|
||||
}
|
||||
|
||||
|
||||
void TOOL_DISPATCHER::ResetState()
|
||||
{
|
||||
|
@ -642,9 +642,13 @@ void LIB_TREE::onQueryCharHook( wxKeyEvent& aKeyStroke )
|
||||
|
||||
int mods = aKeyStroke.GetModifiers();
|
||||
|
||||
if( mods & wxMOD_ALTGR )
|
||||
hotkey += MD_ALTGR;
|
||||
// the flag wxMOD_ALTGR is defined in wxWidgets as wxMOD_CONTROL|wxMOD_ALT
|
||||
// So AltGr key cannot used as modifier key because it is the same as Alt key + Ctrl key.
|
||||
#if CAN_USE_ALTGR_KEY
|
||||
if( wxmods & wxMOD_ALTGR )
|
||||
mods |= MD_ALTGR;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
if( mods & wxMOD_CONTROL )
|
||||
hotkey += MD_CTRL;
|
||||
|
@ -670,7 +670,7 @@ long WIDGET_HOTKEY_LIST::MapKeypressToKeycode( const wxKeyEvent& aEvent )
|
||||
{
|
||||
long key = aEvent.GetKeyCode();
|
||||
bool is_tab = aEvent.IsKeyInCategory( WXK_CATEGORY_TAB );
|
||||
|
||||
printf("key %lX mod %X\n", key, aEvent.GetModifiers());
|
||||
if( key == WXK_ESCAPE )
|
||||
{
|
||||
return 0;
|
||||
@ -698,9 +698,13 @@ long WIDGET_HOTKEY_LIST::MapKeypressToKeycode( const wxKeyEvent& aEvent )
|
||||
if( ( mods & wxMOD_SHIFT ) && ( keyIsLetter || key > 256 || key == 9 || key == 32 ) )
|
||||
key |= MD_SHIFT;
|
||||
|
||||
if( mods & wxMOD_ALTGR )
|
||||
key |= MD_ALTGR;
|
||||
// the flag wxMOD_ALTGR is defined in wxWidgets as wxMOD_CONTROL|wxMOD_ALT
|
||||
// So AltGr key cannot used as modifier key because it is the same as Alt key + Ctrl key.
|
||||
#if CAN_USE_ALTGR_KEY
|
||||
if( wxmods & wxMOD_ALTGR )
|
||||
mods |= MD_ALTGR;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
if( mods & wxMOD_CONTROL )
|
||||
key |= MD_CTRL;
|
||||
|
@ -7,6 +7,14 @@
|
||||
"track_widths": [],
|
||||
"via_dimensions": []
|
||||
},
|
||||
"ipc2581": {
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_pairs": [],
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
@ -194,17 +202,21 @@
|
||||
"bus_entry_needed": "error",
|
||||
"bus_to_bus_conflict": "error",
|
||||
"bus_to_net_conflict": "error",
|
||||
"conflicting_netclasses": "error",
|
||||
"different_unit_footprint": "error",
|
||||
"different_unit_net": "error",
|
||||
"duplicate_reference": "error",
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"footprint_filter": "ignore",
|
||||
"footprint_link_issues": "warning",
|
||||
"four_way_junction": "ignore",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"label_dangling": "error",
|
||||
"label_multiple_wires": "warning",
|
||||
"lib_symbol_issues": "warning",
|
||||
"lib_symbol_mismatch": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
@ -217,9 +229,14 @@
|
||||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "warning",
|
||||
"power_pin_not_driven": "error",
|
||||
"same_local_global_label": "warning",
|
||||
"similar_label_and_power": "warning",
|
||||
"similar_labels": "warning",
|
||||
"simulation_model_issue": "error",
|
||||
"similar_power": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"single_global_label": "ignore",
|
||||
"unannotated": "error",
|
||||
"unconnected_wire_endpoint": "warning",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
"wire_dangling": "error"
|
||||
@ -231,7 +248,7 @@
|
||||
},
|
||||
"meta": {
|
||||
"filename": "pspice.kicad_pro",
|
||||
"version": 1
|
||||
"version": 3
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
@ -246,15 +263,16 @@
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 2147483647,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.25,
|
||||
"via_diameter": 0.8,
|
||||
"via_drill": 0.4,
|
||||
"track_width": 0.2,
|
||||
"via_diameter": 0.6,
|
||||
"via_drill": 0.3,
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
"version": 4
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
@ -265,22 +283,94 @@
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_export_filename": "${PROJECTNAME}.csv",
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
"field_delimiter": ",",
|
||||
"keep_line_breaks": false,
|
||||
"keep_tabs": false,
|
||||
"name": "CSV",
|
||||
"ref_delimiter": ",",
|
||||
"ref_range_delimiter": "",
|
||||
"string_delimiter": "\""
|
||||
},
|
||||
"bom_presets": [],
|
||||
"bom_settings": {
|
||||
"exclude_dnp": false,
|
||||
"fields_ordered": [
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Reference",
|
||||
"name": "Reference",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Qty",
|
||||
"name": "${QUANTITY}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Value",
|
||||
"name": "Value",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "DNP",
|
||||
"name": "${DNP}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Exclude from BOM",
|
||||
"name": "${EXCLUDE_FROM_BOM}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Exclude from Board",
|
||||
"name": "${EXCLUDE_FROM_BOARD}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Footprint",
|
||||
"name": "Footprint",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Datasheet",
|
||||
"name": "Datasheet",
|
||||
"show": true
|
||||
}
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"include_excluded_from_bom": true,
|
||||
"name": "Default Editing",
|
||||
"sort_asc": true,
|
||||
"sort_field": "Reference"
|
||||
},
|
||||
"connection_grid_size": 50.0,
|
||||
"drawing": {
|
||||
"dashed_lines_dash_length_ratio": 12.0,
|
||||
"dashed_lines_gap_length_ratio": 3.0,
|
||||
"default_bus_thickness": 12.0,
|
||||
"default_junction_size": 40.0,
|
||||
"default_line_thickness": 6.0,
|
||||
"default_text_size": 50.0,
|
||||
"default_wire_thickness": 6.0,
|
||||
"field_names": [],
|
||||
"intersheets_ref_own_page": false,
|
||||
"intersheets_ref_prefix": "",
|
||||
@ -288,9 +378,14 @@
|
||||
"intersheets_ref_show": false,
|
||||
"intersheets_ref_suffix": "",
|
||||
"junction_size_choice": 3,
|
||||
"label_size_ratio": 0.3,
|
||||
"pin_symbol_size": 25.0,
|
||||
"text_offset_ratio": 0.3
|
||||
"label_size_ratio": 0.25,
|
||||
"operating_point_overlay_i_precision": 3,
|
||||
"operating_point_overlay_i_range": "~A",
|
||||
"operating_point_overlay_v_precision": 3,
|
||||
"operating_point_overlay_v_range": "~V",
|
||||
"overbar_offset_ratio": 1.23,
|
||||
"pin_symbol_size": 0.0,
|
||||
"text_offset_ratio": 0.08
|
||||
},
|
||||
"legacy_lib_dir": "",
|
||||
"legacy_lib_list": [],
|
||||
@ -300,20 +395,20 @@
|
||||
"net_format_name": "",
|
||||
"ngspice": {
|
||||
"fix_include_paths": true,
|
||||
"fix_passive_vals": false,
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"model_mode": 0,
|
||||
"model_mode": 4,
|
||||
"workbook_filename": ""
|
||||
},
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"spice_adjust_passive_values": false,
|
||||
"space_save_all_events": true,
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
"spice_model_current_sheet_as_root": true,
|
||||
"spice_save_all_currents": false,
|
||||
"spice_save_all_dissipations": false,
|
||||
"spice_save_all_voltages": false,
|
||||
"subpart_first_id": 65,
|
||||
"subpart_id_separator": 0
|
||||
@ -321,7 +416,7 @@
|
||||
"sheets": [
|
||||
[
|
||||
"a4349b77-fc13-4b06-b73d-e811f055a7b6",
|
||||
""
|
||||
"Root"
|
||||
]
|
||||
],
|
||||
"text_variables": {}
|
4710
demos/simulation/amplifier-ac/amplifier-ac.kicad_sch
Normal file
4710
demos/simulation/amplifier-ac/amplifier-ac.kicad_sch
Normal file
File diff suppressed because it is too large
Load Diff
3
demos/simulation/amplifier-ac/sym-lib-table
Normal file
3
demos/simulation/amplifier-ac/sym-lib-table
Normal file
@ -0,0 +1,3 @@
|
||||
(sym_lib_table
|
||||
(version 7)
|
||||
)
|
@ -243,7 +243,7 @@
|
||||
},
|
||||
"meta": {
|
||||
"filename": "generic_opamp_bip.kicad_pro",
|
||||
"version": 2
|
||||
"version": 3
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
|
@ -1,5 +1,5 @@
|
||||
(kicad_sch
|
||||
(version 20241209)
|
||||
(version 20250114)
|
||||
(generator "eeschema")
|
||||
(generator_version "9.0")
|
||||
(uuid "7e4dfe8a-5df9-4426-b328-4b07a6aa7235")
|
||||
@ -273,104 +273,6 @@
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
(symbol "Simulation_SPICE:0"
|
||||
(power)
|
||||
(pin_names
|
||||
(offset 0)
|
||||
)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property "Reference" "#GND"
|
||||
(at 0 -2.54 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Value" "0"
|
||||
(at 0 -1.778 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" ""
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "~"
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "0V reference potential for simulation"
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "ki_keywords" "simulation"
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(symbol "0_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -1.27 0) (xy 0 -1.27) (xy 1.27 0) (xy -1.27 0)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "0_1_1"
|
||||
(pin power_in line
|
||||
(at 0 0 0)
|
||||
(length 0)
|
||||
(hide yes)
|
||||
(name "0"
|
||||
(effects
|
||||
(font
|
||||
(size 1.016 1.016)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "1"
|
||||
(effects
|
||||
(font
|
||||
(size 1.016 1.016)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
(symbol "Simulation_SPICE:NPN"
|
||||
(pin_numbers
|
||||
(hide yes)
|
||||
@ -1432,6 +1334,107 @@
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
(symbol "power:GND"
|
||||
(power)
|
||||
(pin_numbers
|
||||
(hide yes)
|
||||
)
|
||||
(pin_names
|
||||
(offset 0)
|
||||
(hide yes)
|
||||
)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property "Reference" "#PWR"
|
||||
(at 0 -6.35 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Value" "GND"
|
||||
(at 0 -3.81 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" ""
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "Power symbol creates a global label with name \"GND\" , ground"
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "ki_keywords" "global power"
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(symbol "GND_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "GND_1_1"
|
||||
(pin power_in line
|
||||
(at 0 0 270)
|
||||
(length 0)
|
||||
(name "~"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "1"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
)
|
||||
(text "Generic OpAmp"
|
||||
(exclude_from_sim no)
|
||||
@ -1515,6 +1518,16 @@
|
||||
)
|
||||
(uuid "0cd3ba01-55f3-41bb-a5fb-061a1151a182")
|
||||
)
|
||||
(wire
|
||||
(pts
|
||||
(xy 156.21 88.9) (xy 156.21 87.63)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(uuid "0d6104cb-337d-4943-b0dd-8944f99e1c5f")
|
||||
)
|
||||
(wire
|
||||
(pts
|
||||
(xy 182.88 90.17) (xy 187.96 90.17)
|
||||
@ -1585,6 +1598,16 @@
|
||||
)
|
||||
(uuid "348fe1d6-4e84-4bf0-af93-a6740aa76a98")
|
||||
)
|
||||
(wire
|
||||
(pts
|
||||
(xy 156.21 87.63) (xy 161.29 87.63)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(uuid "458b2f0a-94dd-4122-b1fd-4ae149f93c57")
|
||||
)
|
||||
(wire
|
||||
(pts
|
||||
(xy 166.37 97.79) (xy 166.37 99.06)
|
||||
@ -1745,16 +1768,6 @@
|
||||
)
|
||||
(uuid "bfc55c24-d199-47d2-a80d-4486893c76b5")
|
||||
)
|
||||
(wire
|
||||
(pts
|
||||
(xy 156.21 87.63) (xy 161.29 87.63)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(uuid "c0c37149-28dc-42d5-b701-ffb0e1d5a23e")
|
||||
)
|
||||
(wire
|
||||
(pts
|
||||
(xy 135.89 92.71) (xy 135.89 102.87)
|
||||
@ -1805,16 +1818,6 @@
|
||||
)
|
||||
(uuid "d7d6207e-cd83-455e-a057-1ae6276c01be")
|
||||
)
|
||||
(wire
|
||||
(pts
|
||||
(xy 156.21 86.36) (xy 156.21 87.63)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(uuid "ddaae287-f8aa-4b36-ab0a-b5ec0fe1ee8e")
|
||||
)
|
||||
(wire
|
||||
(pts
|
||||
(xy 176.53 90.17) (xy 182.88 90.17)
|
||||
@ -2339,7 +2342,7 @@
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Simulation_SPICE:0")
|
||||
(lib_id "power:GND")
|
||||
(at 270.51 110.49 0)
|
||||
(unit 1)
|
||||
(exclude_from_sim no)
|
||||
@ -2348,8 +2351,8 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "22fcf0d5-0463-42fe-8be0-1a1a2ae18260")
|
||||
(property "Reference" "#GND06"
|
||||
(at 270.51 113.03 0)
|
||||
(property "Reference" "#PWR6"
|
||||
(at 270.51 116.84 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -2358,11 +2361,12 @@
|
||||
)
|
||||
)
|
||||
(property "Value" "0"
|
||||
(at 270.51 107.95 0)
|
||||
(at 270.51 115.57 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Footprint" ""
|
||||
@ -2374,7 +2378,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "~"
|
||||
(property "Datasheet" ""
|
||||
(at 270.51 110.49 0)
|
||||
(effects
|
||||
(font
|
||||
@ -2383,7 +2387,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "0V reference potential for simulation"
|
||||
(property "Description" "Power symbol creates a global label with name \"GND\" , ground"
|
||||
(at 270.51 110.49 0)
|
||||
(effects
|
||||
(font
|
||||
@ -2398,14 +2402,14 @@
|
||||
(instances
|
||||
(project "generic_opamp_bip"
|
||||
(path "/7e4dfe8a-5df9-4426-b328-4b07a6aa7235"
|
||||
(reference "#GND06")
|
||||
(reference "#PWR6")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Simulation_SPICE:0")
|
||||
(lib_id "power:GND")
|
||||
(at 198.12 95.25 0)
|
||||
(unit 1)
|
||||
(exclude_from_sim no)
|
||||
@ -2414,8 +2418,8 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "2861aaee-2325-4636-9236-df60ef0751d2")
|
||||
(property "Reference" "#GND03"
|
||||
(at 198.12 97.79 0)
|
||||
(property "Reference" "#PWR3"
|
||||
(at 198.12 101.6 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -2424,7 +2428,7 @@
|
||||
)
|
||||
)
|
||||
(property "Value" "0"
|
||||
(at 198.12 92.71 0)
|
||||
(at 198.12 100.33 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -2440,7 +2444,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "~"
|
||||
(property "Datasheet" ""
|
||||
(at 198.12 95.25 0)
|
||||
(effects
|
||||
(font
|
||||
@ -2449,7 +2453,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "0V reference potential for simulation"
|
||||
(property "Description" "Power symbol creates a global label with name \"GND\" , ground"
|
||||
(at 198.12 95.25 0)
|
||||
(effects
|
||||
(font
|
||||
@ -2464,7 +2468,7 @@
|
||||
(instances
|
||||
(project "generic_opamp_bip"
|
||||
(path "/7e4dfe8a-5df9-4426-b328-4b07a6aa7235"
|
||||
(reference "#GND03")
|
||||
(reference "#PWR3")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3276,7 +3280,7 @@
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Simulation_SPICE:0")
|
||||
(lib_id "power:GND")
|
||||
(at 252.73 110.49 0)
|
||||
(unit 1)
|
||||
(exclude_from_sim no)
|
||||
@ -3285,8 +3289,8 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "a044f42a-0fd7-4a07-90a5-05ca17992166")
|
||||
(property "Reference" "#GND05"
|
||||
(at 252.73 113.03 0)
|
||||
(property "Reference" "#PWR5"
|
||||
(at 252.73 116.84 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -3295,11 +3299,12 @@
|
||||
)
|
||||
)
|
||||
(property "Value" "0"
|
||||
(at 252.73 107.95 0)
|
||||
(at 252.73 115.57 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Footprint" ""
|
||||
@ -3311,7 +3316,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "~"
|
||||
(property "Datasheet" ""
|
||||
(at 252.73 110.49 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3320,7 +3325,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "0V reference potential for simulation"
|
||||
(property "Description" "Power symbol creates a global label with name \"GND\" , ground"
|
||||
(at 252.73 110.49 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3335,14 +3340,14 @@
|
||||
(instances
|
||||
(project "generic_opamp_bip"
|
||||
(path "/7e4dfe8a-5df9-4426-b328-4b07a6aa7235"
|
||||
(reference "#GND05")
|
||||
(reference "#PWR5")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Simulation_SPICE:0")
|
||||
(lib_id "power:GND")
|
||||
(at 233.68 110.49 0)
|
||||
(unit 1)
|
||||
(exclude_from_sim no)
|
||||
@ -3351,8 +3356,8 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "a601c847-3958-442b-a945-25af8ed36e0f")
|
||||
(property "Reference" "#GND04"
|
||||
(at 233.68 113.03 0)
|
||||
(property "Reference" "#PWR4"
|
||||
(at 233.68 116.84 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -3361,11 +3366,12 @@
|
||||
)
|
||||
)
|
||||
(property "Value" "0"
|
||||
(at 233.68 107.95 0)
|
||||
(at 233.68 115.57 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Footprint" ""
|
||||
@ -3377,7 +3383,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "~"
|
||||
(property "Datasheet" ""
|
||||
(at 233.68 110.49 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3386,7 +3392,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "0V reference potential for simulation"
|
||||
(property "Description" "Power symbol creates a global label with name \"GND\" , ground"
|
||||
(at 233.68 110.49 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3401,7 +3407,7 @@
|
||||
(instances
|
||||
(project "generic_opamp_bip"
|
||||
(path "/7e4dfe8a-5df9-4426-b328-4b07a6aa7235"
|
||||
(reference "#GND04")
|
||||
(reference "#PWR4")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3475,7 +3481,7 @@
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Simulation_SPICE:0")
|
||||
(lib_id "power:GND")
|
||||
(at 135.89 114.3 0)
|
||||
(unit 1)
|
||||
(exclude_from_sim no)
|
||||
@ -3484,8 +3490,8 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "b3399f4d-6927-42f5-927a-02ea2fca80bb")
|
||||
(property "Reference" "#GND01"
|
||||
(at 135.89 116.84 0)
|
||||
(property "Reference" "#PWR1"
|
||||
(at 135.89 120.65 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -3494,11 +3500,12 @@
|
||||
)
|
||||
)
|
||||
(property "Value" "0"
|
||||
(at 135.89 111.76 0)
|
||||
(at 135.89 119.38 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Footprint" ""
|
||||
@ -3510,7 +3517,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "~"
|
||||
(property "Datasheet" ""
|
||||
(at 135.89 114.3 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3519,7 +3526,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "0V reference potential for simulation"
|
||||
(property "Description" "Power symbol creates a global label with name \"GND\" , ground"
|
||||
(at 135.89 114.3 0)
|
||||
(effects
|
||||
(font
|
||||
@ -3534,7 +3541,7 @@
|
||||
(instances
|
||||
(project "generic_opamp_bip"
|
||||
(path "/7e4dfe8a-5df9-4426-b328-4b07a6aa7235"
|
||||
(reference "#GND01")
|
||||
(reference "#PWR1")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -3675,17 +3682,17 @@
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Simulation_SPICE:0")
|
||||
(at 156.21 86.36 0)
|
||||
(mirror x)
|
||||
(lib_id "power:GND")
|
||||
(at 156.21 88.9 0)
|
||||
(mirror y)
|
||||
(unit 1)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(dnp no)
|
||||
(uuid "fce61e56-3d8d-4627-ab66-168c1043305d")
|
||||
(property "Reference" "#GND02"
|
||||
(at 156.21 83.82 0)
|
||||
(property "Reference" "#PWR2"
|
||||
(at 156.21 95.25 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -3694,15 +3701,25 @@
|
||||
)
|
||||
)
|
||||
(property "Value" "0"
|
||||
(at 156.21 92.71 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Footprint" ""
|
||||
(at 156.21 88.9 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Footprint" ""
|
||||
(at 156.21 86.36 0)
|
||||
(property "Datasheet" ""
|
||||
(at 156.21 88.9 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -3710,17 +3727,8 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "~"
|
||||
(at 156.21 86.36 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "0V reference potential for simulation"
|
||||
(at 156.21 86.36 0)
|
||||
(property "Description" "Power symbol creates a global label with name \"GND\" , ground"
|
||||
(at 156.21 88.9 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -3734,7 +3742,7 @@
|
||||
(instances
|
||||
(project "generic_opamp_bip"
|
||||
(path "/7e4dfe8a-5df9-4426-b328-4b07a6aa7235"
|
||||
(reference "#GND02")
|
||||
(reference "#PWR2")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
|
@ -23,6 +23,14 @@
|
||||
"track_widths": [],
|
||||
"via_dimensions": []
|
||||
},
|
||||
"ipc2581": {
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_pairs": [],
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
@ -215,11 +223,17 @@
|
||||
"different_unit_net": "error",
|
||||
"duplicate_reference": "error",
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"footprint_filter": "ignore",
|
||||
"footprint_link_issues": "warning",
|
||||
"four_way_junction": "ignore",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"label_dangling": "error",
|
||||
"label_multiple_wires": "warning",
|
||||
"lib_symbol_issues": "warning",
|
||||
"lib_symbol_mismatch": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
@ -232,9 +246,14 @@
|
||||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "warning",
|
||||
"power_pin_not_driven": "error",
|
||||
"same_local_global_label": "warning",
|
||||
"similar_label_and_power": "warning",
|
||||
"similar_labels": "warning",
|
||||
"similar_power": "warning",
|
||||
"simulation_model_issue": "error",
|
||||
"single_global_label": "ignore",
|
||||
"unannotated": "error",
|
||||
"unconnected_wire_endpoint": "warning",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
"wire_dangling": "error"
|
||||
@ -246,7 +265,7 @@
|
||||
},
|
||||
"meta": {
|
||||
"filename": "laser_driver.kicad_pro",
|
||||
"version": 1
|
||||
"version": 3
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
@ -261,6 +280,7 @@
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 2147483647,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.25,
|
||||
"via_diameter": 0.8,
|
||||
@ -269,7 +289,7 @@
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
"version": 4
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
@ -280,14 +300,89 @@
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_export_filename": "${PROJECTNAME}.csv",
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
"field_delimiter": ",",
|
||||
"keep_line_breaks": false,
|
||||
"keep_tabs": false,
|
||||
"name": "CSV",
|
||||
"ref_delimiter": ",",
|
||||
"ref_range_delimiter": "",
|
||||
"string_delimiter": "\""
|
||||
},
|
||||
"bom_presets": [],
|
||||
"bom_settings": {
|
||||
"exclude_dnp": false,
|
||||
"fields_ordered": [
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Reference",
|
||||
"name": "Reference",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Qty",
|
||||
"name": "${QUANTITY}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Value",
|
||||
"name": "Value",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "DNP",
|
||||
"name": "${DNP}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Exclude from BOM",
|
||||
"name": "${EXCLUDE_FROM_BOM}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Exclude from Board",
|
||||
"name": "${EXCLUDE_FROM_BOARD}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Footprint",
|
||||
"name": "Footprint",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Datasheet",
|
||||
"name": "Datasheet",
|
||||
"show": true
|
||||
}
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"include_excluded_from_bom": true,
|
||||
"name": "Default Editing",
|
||||
"sort_asc": true,
|
||||
"sort_field": "Reference"
|
||||
},
|
||||
"connection_grid_size": 50.0,
|
||||
"drawing": {
|
||||
"dashed_lines_dash_length_ratio": 12.0,
|
||||
"dashed_lines_gap_length_ratio": 3.0,
|
||||
@ -304,6 +399,11 @@
|
||||
"intersheets_ref_suffix": "",
|
||||
"junction_size_choice": 3,
|
||||
"label_size_ratio": 0.3,
|
||||
"operating_point_overlay_i_precision": 3,
|
||||
"operating_point_overlay_i_range": "~A",
|
||||
"operating_point_overlay_v_precision": 3,
|
||||
"operating_point_overlay_v_range": "~V",
|
||||
"overbar_offset_ratio": 1.23,
|
||||
"pin_symbol_size": 25.0,
|
||||
"text_offset_ratio": 0.3
|
||||
},
|
||||
@ -319,14 +419,18 @@
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"model_mode": 0,
|
||||
"model_mode": 4,
|
||||
"workbook_filename": ""
|
||||
},
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"space_save_all_events": true,
|
||||
"spice_adjust_passive_values": false,
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
"spice_model_current_sheet_as_root": true,
|
||||
"spice_save_all_currents": false,
|
||||
"spice_save_all_dissipations": false,
|
||||
"spice_save_all_voltages": false,
|
||||
"subpart_first_id": 65,
|
||||
"subpart_id_separator": 0
|
||||
@ -334,7 +438,7 @@
|
||||
"sheets": [
|
||||
[
|
||||
"345f09c0-9aae-452d-8e25-bb6665c6b8ac",
|
||||
""
|
||||
"Root"
|
||||
]
|
||||
],
|
||||
"text_variables": {}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,3 +1,4 @@
|
||||
(sym_lib_table
|
||||
(version 7)
|
||||
(lib (name "laser_driver_schlib")(type "KiCad")(uri "${KIPRJMOD}/laser_driver_schlib.kicad_sym")(options "")(descr ""))
|
||||
)
|
||||
|
@ -30,6 +30,7 @@
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_pairs": [],
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
@ -225,10 +226,15 @@
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"footprint_filter": "ignore",
|
||||
"footprint_link_issues": "warning",
|
||||
"four_way_junction": "ignore",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"label_dangling": "error",
|
||||
"label_multiple_wires": "warning",
|
||||
"lib_symbol_issues": "warning",
|
||||
"lib_symbol_mismatch": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
@ -241,9 +247,14 @@
|
||||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "warning",
|
||||
"power_pin_not_driven": "error",
|
||||
"same_local_global_label": "warning",
|
||||
"similar_label_and_power": "warning",
|
||||
"similar_labels": "warning",
|
||||
"similar_power": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"single_global_label": "ignore",
|
||||
"unannotated": "error",
|
||||
"unconnected_wire_endpoint": "warning",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
"wire_dangling": "error"
|
||||
@ -255,7 +266,7 @@
|
||||
},
|
||||
"meta": {
|
||||
"filename": "power_supply.kicad_pro",
|
||||
"version": 1
|
||||
"version": 3
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
@ -270,6 +281,7 @@
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 2147483647,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.25,
|
||||
"via_diameter": 0.8,
|
||||
@ -278,7 +290,7 @@
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
"version": 4
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
@ -300,6 +312,7 @@
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_export_filename": "${PROJECTNAME}.csv",
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
"field_delimiter": ",",
|
||||
@ -353,6 +366,7 @@
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"include_excluded_from_bom": false,
|
||||
"name": "Grouped By Value",
|
||||
"sort_asc": true,
|
||||
"sort_field": "Reference"
|
||||
@ -391,11 +405,12 @@
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"model_mode": 0,
|
||||
"model_mode": 2,
|
||||
"workbook_filename": "power_supply.wbk"
|
||||
},
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"space_save_all_events": true,
|
||||
"spice_adjust_passive_values": false,
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "C:\\Spice64\\bin\\ngspice \"%I\"",
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -31,6 +31,7 @@
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_pairs": [],
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
@ -225,10 +226,15 @@
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"footprint_filter": "ignore",
|
||||
"footprint_link_issues": "warning",
|
||||
"four_way_junction": "ignore",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"label_dangling": "error",
|
||||
"label_multiple_wires": "warning",
|
||||
"lib_symbol_issues": "warning",
|
||||
"lib_symbol_mismatch": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
@ -241,9 +247,14 @@
|
||||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "warning",
|
||||
"power_pin_not_driven": "error",
|
||||
"same_local_global_label": "warning",
|
||||
"similar_label_and_power": "warning",
|
||||
"similar_labels": "warning",
|
||||
"similar_power": "warning",
|
||||
"simulation_model_issue": "error",
|
||||
"single_global_label": "ignore",
|
||||
"unannotated": "error",
|
||||
"unconnected_wire_endpoint": "warning",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
"wire_dangling": "error"
|
||||
@ -255,7 +266,7 @@
|
||||
},
|
||||
"meta": {
|
||||
"filename": "buck_conv.kicad_pro",
|
||||
"version": 1
|
||||
"version": 3
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
@ -270,6 +281,7 @@
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 2147483647,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.25,
|
||||
"via_diameter": 0.8,
|
||||
@ -278,7 +290,7 @@
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
"version": 4
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
@ -300,6 +312,7 @@
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_export_filename": "${PROJECTNAME}.csv",
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
"field_delimiter": ",",
|
||||
@ -353,6 +366,7 @@
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"include_excluded_from_bom": false,
|
||||
"name": "Grouped By Value",
|
||||
"sort_asc": true,
|
||||
"sort_field": "Reference"
|
||||
@ -395,6 +409,7 @@
|
||||
},
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"space_save_all_events": true,
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
"spice_model_current_sheet_as_root": true,
|
||||
|
@ -1,12 +1,14 @@
|
||||
(kicad_sch
|
||||
(version 20231120)
|
||||
(version 20250114)
|
||||
(generator "eeschema")
|
||||
(generator_version "8.0")
|
||||
(generator_version "9.0")
|
||||
(uuid "06b3cdeb-0ab8-40f0-ad85-5d97ad7ae2be")
|
||||
(paper "A4")
|
||||
(lib_symbols
|
||||
(symbol "Device:C"
|
||||
(pin_numbers hide)
|
||||
(pin_numbers
|
||||
(hide yes)
|
||||
)
|
||||
(pin_names
|
||||
(offset 0.254)
|
||||
)
|
||||
@ -79,7 +81,7 @@
|
||||
(symbol "C_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -2.032 -0.762) (xy 2.032 -0.762)
|
||||
(xy -2.032 0.762) (xy 2.032 0.762)
|
||||
)
|
||||
(stroke
|
||||
(width 0.508)
|
||||
@ -91,7 +93,7 @@
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -2.032 0.762) (xy 2.032 0.762)
|
||||
(xy -2.032 -0.762) (xy 2.032 -0.762)
|
||||
)
|
||||
(stroke
|
||||
(width 0.508)
|
||||
@ -140,11 +142,16 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
(symbol "Device:L"
|
||||
(pin_numbers hide)
|
||||
(pin_numbers
|
||||
(hide yes)
|
||||
)
|
||||
(pin_names
|
||||
(offset 1.016) hide)
|
||||
(offset 1.016)
|
||||
(hide yes)
|
||||
)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
@ -211,32 +218,8 @@
|
||||
)
|
||||
(symbol "L_0_1"
|
||||
(arc
|
||||
(start 0 -2.54)
|
||||
(mid 0.6323 -1.905)
|
||||
(end 0 -1.27)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(arc
|
||||
(start 0 -1.27)
|
||||
(mid 0.6323 -0.635)
|
||||
(end 0 0)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(arc
|
||||
(start 0 0)
|
||||
(mid 0.6323 0.635)
|
||||
(start 0 2.54)
|
||||
(mid 0.6323 1.905)
|
||||
(end 0 1.27)
|
||||
(stroke
|
||||
(width 0)
|
||||
@ -248,8 +231,32 @@
|
||||
)
|
||||
(arc
|
||||
(start 0 1.27)
|
||||
(mid 0.6323 1.905)
|
||||
(end 0 2.54)
|
||||
(mid 0.6323 0.635)
|
||||
(end 0 0)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(arc
|
||||
(start 0 0)
|
||||
(mid 0.6323 -0.635)
|
||||
(end 0 -1.27)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(arc
|
||||
(start 0 -1.27)
|
||||
(mid 0.6323 -1.905)
|
||||
(end 0 -2.54)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
@ -297,9 +304,12 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
(symbol "Device:R"
|
||||
(pin_numbers hide)
|
||||
(pin_numbers
|
||||
(hide yes)
|
||||
)
|
||||
(pin_names
|
||||
(offset 0)
|
||||
)
|
||||
@ -418,107 +428,16 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "Simulation_SPICE:0"
|
||||
(power)
|
||||
(pin_names
|
||||
(offset 0)
|
||||
)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property "Reference" "#GND"
|
||||
(at 0 -2.54 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Value" "0"
|
||||
(at 0 -1.778 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" ""
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "~"
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "0V reference potential for simulation"
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "ki_keywords" "simulation"
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(symbol "0_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -1.27 0) (xy 0 -1.27) (xy 1.27 0) (xy -1.27 0)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "0_1_1"
|
||||
(pin power_in line
|
||||
(at 0 0 0)
|
||||
(length 0) hide
|
||||
(name "0"
|
||||
(effects
|
||||
(font
|
||||
(size 1.016 1.016)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "1"
|
||||
(effects
|
||||
(font
|
||||
(size 1.016 1.016)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
(symbol "Simulation_SPICE:D"
|
||||
(pin_numbers hide)
|
||||
(pin_numbers
|
||||
(hide yes)
|
||||
)
|
||||
(pin_names
|
||||
(offset 1.016) hide)
|
||||
(offset 1.016)
|
||||
(hide yes)
|
||||
)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
@ -614,10 +533,10 @@
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 0) (xy -1.27 0)
|
||||
(xy 1.27 1.27) (xy 1.27 -1.27) (xy -1.27 0) (xy 1.27 1.27)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
@ -626,10 +545,10 @@
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.27 1.27) (xy 1.27 -1.27) (xy -1.27 0) (xy 1.27 1.27)
|
||||
(xy 1.27 0) (xy -1.27 0)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
@ -675,9 +594,12 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
(symbol "Simulation_SPICE:VDC"
|
||||
(pin_numbers hide)
|
||||
(pin_numbers
|
||||
(hide yes)
|
||||
)
|
||||
(pin_names
|
||||
(offset 0.0254)
|
||||
)
|
||||
@ -875,9 +797,12 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
(symbol "Simulation_SPICE:VPULSE"
|
||||
(pin_numbers hide)
|
||||
(pin_numbers
|
||||
(hide yes)
|
||||
)
|
||||
(pin_names
|
||||
(offset 0.0254)
|
||||
)
|
||||
@ -1049,9 +974,12 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
(symbol "Transistor_FET:IRF540N"
|
||||
(pin_names hide)
|
||||
(pin_names
|
||||
(hide yes)
|
||||
)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
@ -1122,18 +1050,6 @@
|
||||
)
|
||||
)
|
||||
(symbol "IRF540N_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0.254 0) (xy -2.54 0)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0.254 1.905) (xy 0.254 -1.905)
|
||||
@ -1148,7 +1064,19 @@
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0.762 -1.27) (xy 0.762 -2.286)
|
||||
(xy 0.254 0) (xy -2.54 0)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0.762 2.286) (xy 0.762 1.27)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
@ -1172,7 +1100,7 @@
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0.762 2.286) (xy 0.762 1.27)
|
||||
(xy 0.762 -1.27) (xy 0.762 -2.286)
|
||||
)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
@ -1182,30 +1110,6 @@
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 2.54 2.54) (xy 2.54 1.778)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 2.54 -2.54) (xy 2.54 0) (xy 0.762 0)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0.762 -1.778) (xy 3.302 -1.778) (xy 3.302 1.778) (xy 0.762 1.778)
|
||||
@ -1230,6 +1134,63 @@
|
||||
(type outline)
|
||||
)
|
||||
)
|
||||
(circle
|
||||
(center 1.651 0)
|
||||
(radius 2.794)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 2.54 2.54) (xy 2.54 1.778)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(circle
|
||||
(center 2.54 1.778)
|
||||
(radius 0.254)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type outline)
|
||||
)
|
||||
)
|
||||
(circle
|
||||
(center 2.54 -1.778)
|
||||
(radius 0.254)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type outline)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 2.54 -2.54) (xy 2.54 0) (xy 0.762 0)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 2.794 0.508) (xy 2.921 0.381) (xy 3.683 0.381) (xy 3.81 0.254)
|
||||
@ -1254,39 +1215,6 @@
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(circle
|
||||
(center 1.651 0)
|
||||
(radius 2.794)
|
||||
(stroke
|
||||
(width 0.254)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
(circle
|
||||
(center 2.54 -1.778)
|
||||
(radius 0.254)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type outline)
|
||||
)
|
||||
)
|
||||
(circle
|
||||
(center 2.54 1.778)
|
||||
(radius 0.254)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type outline)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "IRF540N_1_1"
|
||||
(pin input line
|
||||
@ -1344,7 +1272,119 @@
|
||||
)
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
(symbol "power:GND"
|
||||
(power)
|
||||
(pin_numbers
|
||||
(hide yes)
|
||||
)
|
||||
(pin_names
|
||||
(offset 0)
|
||||
(hide yes)
|
||||
)
|
||||
(exclude_from_sim no)
|
||||
(in_bom yes)
|
||||
(on_board yes)
|
||||
(property "Reference" "#PWR"
|
||||
(at 0 -6.35 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Value" "GND"
|
||||
(at 0 -3.81 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(property "Footprint" ""
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" ""
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" "Power symbol creates a global label with name \"GND\" , ground"
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "ki_keywords" "global power"
|
||||
(at 0 0 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(symbol "GND_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 0) (xy 0 -1.27) (xy 1.27 -1.27) (xy 0 -2.54) (xy -1.27 -1.27) (xy 0 -1.27)
|
||||
)
|
||||
(stroke
|
||||
(width 0)
|
||||
(type default)
|
||||
)
|
||||
(fill
|
||||
(type none)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "GND_1_1"
|
||||
(pin power_in line
|
||||
(at 0 0 270)
|
||||
(length 0)
|
||||
(name "~"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
(number "1"
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
||||
)
|
||||
(text "Simple Buck Converter"
|
||||
(exclude_from_sim no)
|
||||
(at 116.84 45.085 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
(uuid "957c002b-04b9-4c17-a6a5-29d39a5d31f7")
|
||||
)
|
||||
(junction
|
||||
(at 119.38 55.88)
|
||||
@ -1518,19 +1558,8 @@
|
||||
)
|
||||
(uuid "fb2633a5-dfac-4ca4-949e-3118fc6201e5")
|
||||
)
|
||||
(text "Simple Buck Converter"
|
||||
(exclude_from_sim no)
|
||||
(at 116.84 45.085 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
)
|
||||
)
|
||||
(uuid "957c002b-04b9-4c17-a6a5-29d39a5d31f7")
|
||||
)
|
||||
(label "VIN"
|
||||
(at 67.31 55.88 0)
|
||||
(fields_autoplaced yes)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -1541,7 +1570,6 @@
|
||||
)
|
||||
(label "gg"
|
||||
(at 91.44 64.77 0)
|
||||
(fields_autoplaced yes)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -1552,7 +1580,6 @@
|
||||
)
|
||||
(label "PWM_OUT"
|
||||
(at 104.14 55.88 0)
|
||||
(fields_autoplaced yes)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -1563,7 +1590,6 @@
|
||||
)
|
||||
(label "PWM_IN"
|
||||
(at 91.44 76.2 0)
|
||||
(fields_autoplaced yes)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -1574,7 +1600,6 @@
|
||||
)
|
||||
(label "VOUT"
|
||||
(at 148.59 55.88 0)
|
||||
(fields_autoplaced yes)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -1809,7 +1834,7 @@
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Simulation_SPICE:0")
|
||||
(lib_id "power:GND")
|
||||
(at 119.38 73.66 0)
|
||||
(unit 1)
|
||||
(exclude_from_sim no)
|
||||
@ -1818,8 +1843,8 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "128e36fa-5058-415a-99c2-286d9c8cfc6e")
|
||||
(property "Reference" "#GND0105"
|
||||
(at 119.38 76.2 0)
|
||||
(property "Reference" "#PWR105"
|
||||
(at 119.38 80.01 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -1827,8 +1852,8 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Value" "0"
|
||||
(at 119.38 72.39 0)
|
||||
(property "Value" "GND"
|
||||
(at 119.38 78.74 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -1844,7 +1869,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "~"
|
||||
(property "Datasheet" ""
|
||||
(at 119.38 73.66 0)
|
||||
(effects
|
||||
(font
|
||||
@ -1853,7 +1878,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(property "Description" "Power symbol creates a global label with name \"GND\" , ground"
|
||||
(at 119.38 73.66 0)
|
||||
(effects
|
||||
(font
|
||||
@ -1868,14 +1893,14 @@
|
||||
(instances
|
||||
(project "buck_conv"
|
||||
(path "/06b3cdeb-0ab8-40f0-ad85-5d97ad7ae2be"
|
||||
(reference "#GND0105")
|
||||
(reference "#PWR105")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Simulation_SPICE:0")
|
||||
(lib_id "power:GND")
|
||||
(at 91.44 88.9 0)
|
||||
(unit 1)
|
||||
(exclude_from_sim no)
|
||||
@ -1884,8 +1909,8 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "169e82f8-9522-4514-bb1c-627606ac169a")
|
||||
(property "Reference" "#GND0101"
|
||||
(at 91.44 91.44 0)
|
||||
(property "Reference" "#PWR101"
|
||||
(at 91.44 95.25 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -1893,8 +1918,8 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Value" "0"
|
||||
(at 91.44 87.63 0)
|
||||
(property "Value" "GND"
|
||||
(at 91.44 93.98 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -1910,7 +1935,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "~"
|
||||
(property "Datasheet" ""
|
||||
(at 91.44 88.9 0)
|
||||
(effects
|
||||
(font
|
||||
@ -1919,7 +1944,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(property "Description" "Power symbol creates a global label with name \"GND\" , ground"
|
||||
(at 91.44 88.9 0)
|
||||
(effects
|
||||
(font
|
||||
@ -1934,14 +1959,14 @@
|
||||
(instances
|
||||
(project "buck_conv"
|
||||
(path "/06b3cdeb-0ab8-40f0-ad85-5d97ad7ae2be"
|
||||
(reference "#GND0101")
|
||||
(reference "#PWR101")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Simulation_SPICE:0")
|
||||
(lib_id "power:GND")
|
||||
(at 64.77 81.28 0)
|
||||
(unit 1)
|
||||
(exclude_from_sim no)
|
||||
@ -1950,8 +1975,8 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "17391005-46ee-4a48-9324-7535f1efcdfb")
|
||||
(property "Reference" "#GND0104"
|
||||
(at 64.77 83.82 0)
|
||||
(property "Reference" "#PWR104"
|
||||
(at 64.77 87.63 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -1959,8 +1984,8 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Value" "0"
|
||||
(at 64.77 80.01 0)
|
||||
(property "Value" "GND"
|
||||
(at 64.77 86.36 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -1976,7 +2001,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "~"
|
||||
(property "Datasheet" ""
|
||||
(at 64.77 81.28 0)
|
||||
(effects
|
||||
(font
|
||||
@ -1985,7 +2010,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(property "Description" "Power symbol creates a global label with name \"GND\" , ground"
|
||||
(at 64.77 81.28 0)
|
||||
(effects
|
||||
(font
|
||||
@ -2000,7 +2025,7 @@
|
||||
(instances
|
||||
(project "buck_conv"
|
||||
(path "/06b3cdeb-0ab8-40f0-ad85-5d97ad7ae2be"
|
||||
(reference "#GND0104")
|
||||
(reference "#PWR104")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -2105,7 +2130,7 @@
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Simulation_SPICE:0")
|
||||
(lib_id "power:GND")
|
||||
(at 148.59 73.66 0)
|
||||
(unit 1)
|
||||
(exclude_from_sim no)
|
||||
@ -2114,8 +2139,8 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "2a516606-7298-4159-86c1-136e036626d9")
|
||||
(property "Reference" "#GND0102"
|
||||
(at 148.59 76.2 0)
|
||||
(property "Reference" "#PWR102"
|
||||
(at 148.59 80.01 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -2123,8 +2148,8 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Value" "0"
|
||||
(at 148.59 72.39 0)
|
||||
(property "Value" "GND"
|
||||
(at 148.59 78.74 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -2140,7 +2165,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "~"
|
||||
(property "Datasheet" ""
|
||||
(at 148.59 73.66 0)
|
||||
(effects
|
||||
(font
|
||||
@ -2149,7 +2174,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(property "Description" "Power symbol creates a global label with name \"GND\" , ground"
|
||||
(at 148.59 73.66 0)
|
||||
(effects
|
||||
(font
|
||||
@ -2164,7 +2189,7 @@
|
||||
(instances
|
||||
(project "buck_conv"
|
||||
(path "/06b3cdeb-0ab8-40f0-ad85-5d97ad7ae2be"
|
||||
(reference "#GND0102")
|
||||
(reference "#PWR102")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -2468,7 +2493,7 @@
|
||||
)
|
||||
)
|
||||
(symbol
|
||||
(lib_id "Simulation_SPICE:0")
|
||||
(lib_id "power:GND")
|
||||
(at 167.64 73.66 0)
|
||||
(unit 1)
|
||||
(exclude_from_sim no)
|
||||
@ -2477,8 +2502,8 @@
|
||||
(dnp no)
|
||||
(fields_autoplaced yes)
|
||||
(uuid "7eba3dec-2ace-4a86-b96f-7aa202789590")
|
||||
(property "Reference" "#GND0103"
|
||||
(at 167.64 76.2 0)
|
||||
(property "Reference" "#PWR103"
|
||||
(at 167.64 80.01 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -2486,8 +2511,8 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Value" "0"
|
||||
(at 167.64 72.39 0)
|
||||
(property "Value" "GND"
|
||||
(at 167.64 78.74 0)
|
||||
(effects
|
||||
(font
|
||||
(size 1.27 1.27)
|
||||
@ -2503,7 +2528,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Datasheet" "~"
|
||||
(property "Datasheet" ""
|
||||
(at 167.64 73.66 0)
|
||||
(effects
|
||||
(font
|
||||
@ -2512,7 +2537,7 @@
|
||||
(hide yes)
|
||||
)
|
||||
)
|
||||
(property "Description" ""
|
||||
(property "Description" "Power symbol creates a global label with name \"GND\" , ground"
|
||||
(at 167.64 73.66 0)
|
||||
(effects
|
||||
(font
|
||||
@ -2527,7 +2552,7 @@
|
||||
(instances
|
||||
(project "buck_conv"
|
||||
(path "/06b3cdeb-0ab8-40f0-ad85-5d97ad7ae2be"
|
||||
(reference "#GND0103")
|
||||
(reference "#PWR103")
|
||||
(unit 1)
|
||||
)
|
||||
)
|
||||
@ -2751,4 +2776,5 @@
|
||||
(page "1")
|
||||
)
|
||||
)
|
||||
(embedded_fonts no)
|
||||
)
|
@ -8,6 +8,7 @@
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_pairs": [],
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
@ -203,10 +204,15 @@
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"footprint_filter": "ignore",
|
||||
"footprint_link_issues": "warning",
|
||||
"four_way_junction": "ignore",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"label_dangling": "error",
|
||||
"label_multiple_wires": "warning",
|
||||
"lib_symbol_issues": "warning",
|
||||
"lib_symbol_mismatch": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
@ -219,9 +225,14 @@
|
||||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "warning",
|
||||
"power_pin_not_driven": "error",
|
||||
"same_local_global_label": "warning",
|
||||
"similar_label_and_power": "warning",
|
||||
"similar_labels": "warning",
|
||||
"similar_power": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"single_global_label": "ignore",
|
||||
"unannotated": "error",
|
||||
"unconnected_wire_endpoint": "warning",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
"wire_dangling": "error"
|
||||
@ -233,7 +244,7 @@
|
||||
},
|
||||
"meta": {
|
||||
"filename": "hv_converter.kicad_pro",
|
||||
"version": 1
|
||||
"version": 3
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
@ -248,6 +259,7 @@
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 2147483647,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.25,
|
||||
"via_diameter": 0.8,
|
||||
@ -256,7 +268,7 @@
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
"version": 4
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
@ -278,6 +290,7 @@
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_export_filename": "${PROJECTNAME}.csv",
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
"field_delimiter": ",",
|
||||
@ -331,6 +344,7 @@
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"include_excluded_from_bom": false,
|
||||
"name": "Grouped By Value",
|
||||
"sort_asc": true,
|
||||
"sort_field": "Reference"
|
||||
@ -374,6 +388,7 @@
|
||||
},
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"space_save_all_events": true,
|
||||
"spice_adjust_passive_values": false,
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "c:\\Spice64\\bin\\ngspice.exe \"%I\"",
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,577 +0,0 @@
|
||||
(kicad_symbol_lib (version 20220331) (generator kicad_symbol_editor)
|
||||
(symbol "+12V" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "#PWR" (id 0) (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Value" "+12V" (id 1) (at 0 3.556 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "Power Flag Symbol" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "power-flag symbol" (id 5) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "+12V_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -0.762 1.27)
|
||||
(xy 0 2.54)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 0)
|
||||
(xy 0 2.54)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 2.54)
|
||||
(xy 0.762 1.27)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
(symbol "+12V_1_1"
|
||||
(pin power_in line (at 0 0 90) (length 0) hide
|
||||
(name "+12V" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "0" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "#GND" (id 0) (at 0 -2.54 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Value" "0" (id 1) (at 0 -1.778 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(symbol "0_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -1.27 0)
|
||||
(xy 0 -1.27)
|
||||
(xy 1.27 0)
|
||||
(xy -1.27 0)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
(symbol "0_1_1"
|
||||
(pin power_in line (at 0 0 0) (length 0) hide
|
||||
(name "0" (effects (font (size 1.016 1.016))))
|
||||
(number "1" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "CAP" (pin_names (offset 0.254)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "C" (id 0) (at 2.54 3.81 90)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "CAP" (id 1) (at 2.54 -3.81 90)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(symbol "CAP_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -3.81 -1.27)
|
||||
(xy 3.81 -1.27)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -3.81 1.27)
|
||||
(xy 3.81 1.27)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
(symbol "CAP_1_1"
|
||||
(pin passive line (at 0 6.35 270) (length 5.08)
|
||||
(name "~" (effects (font (size 1.016 1.016))))
|
||||
(number "1" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin passive line (at 0 -6.35 90) (length 5.08)
|
||||
(name "~" (effects (font (size 1.016 1.016))))
|
||||
(number "2" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "C" (extends "CAP")
|
||||
(property "Reference" "C" (id 0) (at 2.54 3.81 90)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "C" (id 1) (at 2.54 -3.81 90)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
)
|
||||
(symbol "DIODE" (pin_names (offset 1.016) hide) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "D" (id 0) (at 0 3.81 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "DIODE" (id 1) (at 0 -4.445 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(symbol "DIODE_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -1.905 2.54)
|
||||
(xy -1.905 -2.54)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 1.905 2.54)
|
||||
(xy 1.905 -2.54)
|
||||
(xy -1.905 0)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type outline))
|
||||
)
|
||||
)
|
||||
(symbol "DIODE_1_1"
|
||||
(pin input line (at -5.08 0 0) (length 3.81)
|
||||
(name "K" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at 5.08 0 180) (length 3.81)
|
||||
(name "A" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "GND" (power) (pin_names (offset 0)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "#PWR" (id 0) (at 0 -5.08 0)
|
||||
(effects (font (size 0.762 0.762)) hide)
|
||||
)
|
||||
(property "Value" "GND" (id 1) (at 0 -3.81 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "Power Flag Symbol" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "GROUND power-flag symbol" (id 5) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "GND_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 0)
|
||||
(xy 0 -1.27)
|
||||
(xy 1.27 -1.27)
|
||||
(xy 0 -2.54)
|
||||
(xy -1.27 -1.27)
|
||||
(xy 0 -1.27)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
(symbol "GND_1_1"
|
||||
(pin power_in line (at 0 0 270) (length 0) hide
|
||||
(name "GND" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "INDUCTOR" (pin_numbers hide) (pin_names (offset 0)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "L" (id 0) (at 0 2.54 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "INDUCTOR" (id 1) (at 0 -1.27 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(symbol "INDUCTOR_0_1"
|
||||
(arc (start -2.54 0) (mid -3.81 1.2645) (end -5.08 0)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(arc (start 0 0) (mid -1.27 1.2645) (end -2.54 0)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(arc (start 2.54 0) (mid 1.27 1.2645) (end 0 0)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(arc (start 5.08 0) (mid 3.81 1.2645) (end 2.54 0)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
(symbol "INDUCTOR_1_1"
|
||||
(pin input line (at -6.35 0 0) (length 1.27)
|
||||
(name "1" (effects (font (size 0.762 0.762))))
|
||||
(number "1" (effects (font (size 0.762 0.762))))
|
||||
)
|
||||
(pin input line (at 6.35 0 180) (length 1.27)
|
||||
(name "2" (effects (font (size 0.762 0.762))))
|
||||
(number "2" (effects (font (size 0.762 0.762))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "ISOURCE" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "I" (id 0) (at 0 -4.572 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "ISOURCE" (id 1) (at 0.254 4.318 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(symbol "ISOURCE_0_1"
|
||||
(circle (center 0 -3.81) (radius 6.35)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -8.89 -5.08)
|
||||
(xy -8.89 5.08)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type outline))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -10.16 5.08)
|
||||
(xy -8.89 7.62)
|
||||
(xy -7.62 5.08)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type outline))
|
||||
)
|
||||
(circle (center 0 3.81) (radius 6.35)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(text "I" (at -8.128 -0.254 0)
|
||||
(effects (font (size 2.54 2.54)))
|
||||
)
|
||||
)
|
||||
(symbol "ISOURCE_1_1"
|
||||
(pin input line (at 0 17.78 270) (length 7.62)
|
||||
(name "E1" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at 0 -17.78 90) (length 7.62)
|
||||
(name "E2" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "PWR_FLAG" (power) (pin_numbers hide) (pin_names (offset 0) hide) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "#FLG" (id 0) (at 0 1.905 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Value" "PWR_FLAG" (id 1) (at 0 3.81 0)
|
||||
(effects (font (size 1.016 1.016)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_keywords" "Power Flag Symbol" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "general power-flag symbol" (id 5) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "PWR_FLAG_0_0"
|
||||
(pin power_out line (at 0 0 90) (length 0)
|
||||
(name "pwr" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
(symbol "PWR_FLAG_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 0)
|
||||
(xy 0 1.27)
|
||||
(xy -1.016 1.905)
|
||||
(xy 0 2.54)
|
||||
(xy 1.016 1.905)
|
||||
(xy 0 1.27)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "QNPN" (pin_names (offset 0)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "Q" (id 0) (at -2.54 7.62 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "QNPN" (id 1) (at -2.54 5.08 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(symbol "QNPN_0_0"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 0)
|
||||
(xy 3.81 -3.81)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 3.81 -3.81)
|
||||
(xy 3.81 -1.27)
|
||||
(xy 1.27 -3.81)
|
||||
(xy 3.81 -3.81)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type outline))
|
||||
)
|
||||
)
|
||||
(symbol "QNPN_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 -3.81)
|
||||
(xy 0 3.81)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 0)
|
||||
(xy 3.81 3.81)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
(symbol "QNPN_1_1"
|
||||
(pin passive line (at 3.81 8.89 270) (length 5.08)
|
||||
(name "C" (effects (font (size 1.016 1.016))))
|
||||
(number "1" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -7.62 0 0) (length 7.62)
|
||||
(name "B" (effects (font (size 1.016 1.016))))
|
||||
(number "2" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin passive line (at 3.81 -8.89 90) (length 5.08)
|
||||
(name "E" (effects (font (size 1.016 1.016))))
|
||||
(number "3" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "QPNP" (pin_names (offset 0)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "Q" (id 0) (at -2.54 7.62 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "QPNP" (id 1) (at -2.54 5.08 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(symbol "QPNP_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 -3.81)
|
||||
(xy 0 3.81)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 0)
|
||||
(xy 3.81 -3.81)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 0 0)
|
||||
(xy 3.81 3.81)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy 3.048 -4.572)
|
||||
(xy 4.572 -3.048)
|
||||
(xy 2.159 -2.159)
|
||||
(xy 3.048 -4.572)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type outline))
|
||||
)
|
||||
)
|
||||
(symbol "QPNP_1_1"
|
||||
(pin open_collector line (at 3.81 8.89 270) (length 5.08)
|
||||
(name "C" (effects (font (size 1.016 1.016))))
|
||||
(number "1" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin input line (at -7.62 0 0) (length 7.62)
|
||||
(name "B" (effects (font (size 1.016 1.016))))
|
||||
(number "2" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
(pin open_emitter line (at 3.81 -8.89 90) (length 5.08)
|
||||
(name "E" (effects (font (size 1.016 1.016))))
|
||||
(number "3" (effects (font (size 1.016 1.016))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "R" (pin_names (offset 0) hide) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "R" (id 0) (at 2.032 0 90)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "R" (id 1) (at 0 0 90)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "ki_keywords" "R DEV" (id 4) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(property "ki_description" "Resistance" (id 5) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)) hide)
|
||||
)
|
||||
(symbol "R_0_1"
|
||||
(rectangle (start -1.016 3.81) (end 1.016 -3.81)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
)
|
||||
(symbol "R_1_1"
|
||||
(pin passive line (at 0 6.35 270) (length 2.54)
|
||||
(name "1" (effects (font (size 0.508 0.508))))
|
||||
(number "1" (effects (font (size 0.508 0.508))))
|
||||
)
|
||||
(pin passive line (at 0 -6.35 90) (length 2.54)
|
||||
(name "2" (effects (font (size 0.508 0.508))))
|
||||
(number "2" (effects (font (size 0.508 0.508))))
|
||||
)
|
||||
)
|
||||
)
|
||||
(symbol "VSOURCE" (pin_names (offset 1.016)) (in_bom yes) (on_board yes)
|
||||
(property "Reference" "V" (id 0) (at 0 -2.54 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Value" "VSOURCE" (id 1) (at 0 2.54 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Footprint" "" (id 2) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(property "Datasheet" "" (id 3) (at 0 0 0)
|
||||
(effects (font (size 1.27 1.27)))
|
||||
)
|
||||
(symbol "VSOURCE_0_1"
|
||||
(polyline
|
||||
(pts
|
||||
(xy -6.35 -6.35)
|
||||
(xy -6.35 3.81)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type outline))
|
||||
)
|
||||
(polyline
|
||||
(pts
|
||||
(xy -7.62 3.81)
|
||||
(xy -6.35 6.35)
|
||||
(xy -5.08 3.81)
|
||||
)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type outline))
|
||||
)
|
||||
(circle (center 0 0) (radius 10.16)
|
||||
(stroke (width 0) (type default))
|
||||
(fill (type none))
|
||||
)
|
||||
(text "V" (at -8.128 -0.254 0)
|
||||
(effects (font (size 2.54 2.54)))
|
||||
)
|
||||
)
|
||||
(symbol "VSOURCE_1_1"
|
||||
(pin input line (at 0 17.78 270) (length 7.62)
|
||||
(name "E1" (effects (font (size 1.27 1.27))))
|
||||
(number "1" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
(pin input line (at 0 -17.78 90) (length 7.62)
|
||||
(name "E2" (effects (font (size 1.27 1.27))))
|
||||
(number "2" (effects (font (size 1.27 1.27))))
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
@ -1,3 +0,0 @@
|
||||
(sym_lib_table
|
||||
(lib (name "schematic_libspice")(type "KiCad")(uri "${KIPRJMOD}/schematic_libspice.kicad_sym")(options "")(descr ""))
|
||||
)
|
@ -117,6 +117,14 @@
|
||||
"zones_allow_external_fillets": false,
|
||||
"zones_use_no_outline": true
|
||||
},
|
||||
"ipc2581": {
|
||||
"dist": "",
|
||||
"distpn": "",
|
||||
"internal_id": "",
|
||||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_pairs": [],
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
@ -309,11 +317,21 @@
|
||||
"different_unit_net": "error",
|
||||
"duplicate_reference": "error",
|
||||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"footprint_filter": "ignore",
|
||||
"footprint_link_issues": "warning",
|
||||
"four_way_junction": "ignore",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"label_dangling": "error",
|
||||
"label_multiple_wires": "warning",
|
||||
"lib_symbol_issues": "warning",
|
||||
"lib_symbol_mismatch": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
"missing_unit": "warning",
|
||||
"multiple_net_names": "warning",
|
||||
"net_not_bus_member": "warning",
|
||||
"no_connect_connected": "warning",
|
||||
@ -322,8 +340,14 @@
|
||||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "warning",
|
||||
"power_pin_not_driven": "error",
|
||||
"same_local_global_label": "warning",
|
||||
"similar_label_and_power": "warning",
|
||||
"similar_labels": "warning",
|
||||
"similar_power": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"single_global_label": "ignore",
|
||||
"unannotated": "error",
|
||||
"unconnected_wire_endpoint": "warning",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
"wire_dangling": "error"
|
||||
@ -335,12 +359,12 @@
|
||||
},
|
||||
"meta": {
|
||||
"filename": "sallen_key.kicad_pro",
|
||||
"version": 1
|
||||
"version": 3
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
{
|
||||
"bus_width": 12.0,
|
||||
"bus_width": 12,
|
||||
"clearance": 0.2,
|
||||
"diff_pair_gap": 0.25,
|
||||
"diff_pair_via_gap": 0.25,
|
||||
@ -350,15 +374,16 @@
|
||||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 2147483647,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.25,
|
||||
"via_diameter": 0.8,
|
||||
"via_drill": 0.4,
|
||||
"wire_width": 6.0
|
||||
"wire_width": 6
|
||||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
"version": 4
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
@ -369,14 +394,89 @@
|
||||
"gencad": "",
|
||||
"idf": "",
|
||||
"netlist": "",
|
||||
"plot": "",
|
||||
"pos_files": "",
|
||||
"specctra_dsn": "",
|
||||
"step": "",
|
||||
"svg": "",
|
||||
"vrml": ""
|
||||
},
|
||||
"page_layout_descr_file": ""
|
||||
},
|
||||
"schematic": {
|
||||
"annotate_start_num": 0,
|
||||
"bom_export_filename": "${PROJECTNAME}.csv",
|
||||
"bom_fmt_presets": [],
|
||||
"bom_fmt_settings": {
|
||||
"field_delimiter": ",",
|
||||
"keep_line_breaks": false,
|
||||
"keep_tabs": false,
|
||||
"name": "CSV",
|
||||
"ref_delimiter": ",",
|
||||
"ref_range_delimiter": "",
|
||||
"string_delimiter": "\""
|
||||
},
|
||||
"bom_presets": [],
|
||||
"bom_settings": {
|
||||
"exclude_dnp": false,
|
||||
"fields_ordered": [
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Reference",
|
||||
"name": "Reference",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Qty",
|
||||
"name": "${QUANTITY}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Value",
|
||||
"name": "Value",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "DNP",
|
||||
"name": "${DNP}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Exclude from BOM",
|
||||
"name": "${EXCLUDE_FROM_BOM}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Exclude from Board",
|
||||
"name": "${EXCLUDE_FROM_BOARD}",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": true,
|
||||
"label": "Footprint",
|
||||
"name": "Footprint",
|
||||
"show": true
|
||||
},
|
||||
{
|
||||
"group_by": false,
|
||||
"label": "Datasheet",
|
||||
"name": "Datasheet",
|
||||
"show": true
|
||||
}
|
||||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"include_excluded_from_bom": true,
|
||||
"name": "Default Editing",
|
||||
"sort_asc": true,
|
||||
"sort_field": "Reference"
|
||||
},
|
||||
"connection_grid_size": 50.0,
|
||||
"drawing": {
|
||||
"dashed_lines_dash_length_ratio": 12.0,
|
||||
"dashed_lines_gap_length_ratio": 3.0,
|
||||
@ -393,6 +493,11 @@
|
||||
"intersheets_ref_suffix": "",
|
||||
"junction_size_choice": 3,
|
||||
"label_size_ratio": 0.3,
|
||||
"operating_point_overlay_i_precision": 3,
|
||||
"operating_point_overlay_i_range": "~A",
|
||||
"operating_point_overlay_v_precision": 3,
|
||||
"operating_point_overlay_v_range": "~V",
|
||||
"overbar_offset_ratio": 1.23,
|
||||
"pin_symbol_size": 25.0,
|
||||
"text_offset_ratio": 0.3
|
||||
},
|
||||
@ -408,14 +513,18 @@
|
||||
"meta": {
|
||||
"version": 0
|
||||
},
|
||||
"model_mode": 0,
|
||||
"model_mode": 4,
|
||||
"workbook_filename": ""
|
||||
},
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"space_save_all_events": true,
|
||||
"spice_adjust_passive_values": false,
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
"spice_model_current_sheet_as_root": true,
|
||||
"spice_save_all_currents": false,
|
||||
"spice_save_all_dissipations": false,
|
||||
"spice_save_all_voltages": false,
|
||||
"subpart_first_id": 65,
|
||||
"subpart_id_separator": 0
|
||||
@ -423,7 +532,7 @@
|
||||
"sheets": [
|
||||
[
|
||||
"403a5eac-c035-4b08-8ba1-e036b0ed18fb",
|
||||
""
|
||||
"Root"
|
||||
]
|
||||
],
|
||||
"text_variables": {}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,3 +1,4 @@
|
||||
(sym_lib_table
|
||||
(version 7)
|
||||
(lib (name "sallen_key_schlib")(type "KiCad")(uri "${KIPRJMOD}/sallen_key_schlib.kicad_sym")(options "")(descr ""))
|
||||
)
|
||||
|
@ -1614,11 +1614,10 @@ void CONNECTION_GRAPH::resolveAllDrivers()
|
||||
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
|
||||
auto results = tp.parallelize_loop( dirty_graphs.size(),
|
||||
[&]( const int a, const int b)
|
||||
auto results = tp.submit_loop( 0, dirty_graphs.size(),
|
||||
[&]( const int ii )
|
||||
{
|
||||
for( int ii = a; ii < b; ++ii )
|
||||
update_lambda( dirty_graphs[ii] );
|
||||
update_lambda( dirty_graphs[ii] );
|
||||
});
|
||||
results.wait();
|
||||
|
||||
@ -2257,11 +2256,10 @@ void CONNECTION_GRAPH::buildConnectionGraph( std::function<void( SCH_ITEM* )>* a
|
||||
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
|
||||
auto results = tp.parallelize_loop( m_driver_subgraphs.size(),
|
||||
[&]( const int a, const int b)
|
||||
auto results = tp.submit_loop( 0, m_driver_subgraphs.size(),
|
||||
[&]( const int ii )
|
||||
{
|
||||
for( int ii = a; ii < b; ++ii )
|
||||
m_driver_subgraphs[ii]->UpdateItemConnections();
|
||||
m_driver_subgraphs[ii]->UpdateItemConnections();
|
||||
});
|
||||
|
||||
results.wait();
|
||||
@ -2464,12 +2462,11 @@ void CONNECTION_GRAPH::buildConnectionGraph( std::function<void( SCH_ITEM* )>* a
|
||||
return 1;
|
||||
};
|
||||
|
||||
auto results2 = tp.parallelize_loop( m_driver_subgraphs.size(),
|
||||
[&]( const int a, const int b)
|
||||
auto results2 = tp.submit_loop( 0, m_driver_subgraphs.size(),
|
||||
[&]( const int ii )
|
||||
{
|
||||
for( int ii = a; ii < b; ++ii )
|
||||
updateItemConnectionsTask( m_driver_subgraphs[ii] );
|
||||
});
|
||||
updateItemConnectionsTask( m_driver_subgraphs[ii] );
|
||||
} );
|
||||
results2.wait();
|
||||
|
||||
m_net_code_to_subgraphs_map.clear();
|
||||
|
@ -42,6 +42,7 @@
|
||||
#include <id.h>
|
||||
#include <confirm.h>
|
||||
#include <widgets/wx_html_report_box.h>
|
||||
#include <widgets/std_bitmap_button.h>
|
||||
#include <dialogs/dialog_text_entry.h>
|
||||
#include <string_utils.h>
|
||||
#include <kiplatform/ui.h>
|
||||
@ -76,15 +77,15 @@ DIALOG_ERC::DIALOG_ERC( SCH_EDIT_FRAME* parent ) :
|
||||
m_running( false ),
|
||||
m_ercRun( false ),
|
||||
m_centerMarkerOnIdle( nullptr ),
|
||||
m_severities( 0 )
|
||||
m_crossprobe( true ),
|
||||
m_scroll_on_crossprobe( true )
|
||||
{
|
||||
m_currentSchematic = &parent->Schematic();
|
||||
|
||||
SetName( DIALOG_ERC_WINDOW_NAME ); // Set a window name to be able to find it
|
||||
KIPLATFORM::UI::SetFloatLevel( this );
|
||||
|
||||
if( EESCHEMA_SETTINGS* cfg = GetAppSettings<EESCHEMA_SETTINGS>( "eeschema" ) )
|
||||
m_severities = cfg->m_Appearance.erc_severities;
|
||||
m_bMenu->SetBitmap( KiBitmapBundle( BITMAPS::config ) );
|
||||
|
||||
m_messages->SetImmediateMode();
|
||||
|
||||
@ -92,7 +93,7 @@ DIALOG_ERC::DIALOG_ERC( SCH_EDIT_FRAME* parent ) :
|
||||
|
||||
m_markerTreeModel = new ERC_TREE_MODEL( parent, m_markerDataView );
|
||||
m_markerDataView->AssociateModel( m_markerTreeModel );
|
||||
m_markerTreeModel->Update( m_markerProvider, m_severities );
|
||||
m_markerTreeModel->Update( m_markerProvider, getSeverities() );
|
||||
|
||||
m_ignoredList->InsertColumn( 0, wxEmptyString, wxLIST_FORMAT_LEFT, DEFAULT_SINGLE_COL_WIDTH );
|
||||
|
||||
@ -129,8 +130,11 @@ DIALOG_ERC::DIALOG_ERC( SCH_EDIT_FRAME* parent ) :
|
||||
|
||||
SetFocus();
|
||||
|
||||
syncCheckboxes();
|
||||
updateDisplayedCounts();
|
||||
if( EESCHEMA_SETTINGS* cfg = GetAppSettings<EESCHEMA_SETTINGS>( "eeschema" ) )
|
||||
{
|
||||
m_crossprobe = cfg->m_ERCDialog.crossprobe;
|
||||
m_scroll_on_crossprobe = cfg->m_ERCDialog.scroll_on_crossprobe;
|
||||
}
|
||||
|
||||
// Now all widgets have the size fixed, call FinishDialogSettings
|
||||
finishDialogSettings();
|
||||
@ -148,7 +152,10 @@ DIALOG_ERC::~DIALOG_ERC()
|
||||
g_lastERCIgnored.push_back( { m_ignoredList->GetItemText( ii ), m_ignoredList->GetItemData( ii ) } );
|
||||
|
||||
if( EESCHEMA_SETTINGS* cfg = GetAppSettings<EESCHEMA_SETTINGS>( "eeschema" ) )
|
||||
cfg->m_Appearance.erc_severities = m_severities;
|
||||
{
|
||||
cfg->m_ERCDialog.crossprobe = m_crossprobe;
|
||||
cfg->m_ERCDialog.scroll_on_crossprobe = m_scroll_on_crossprobe;
|
||||
}
|
||||
|
||||
m_markerTreeModel->DecRef();
|
||||
}
|
||||
@ -189,6 +196,59 @@ void DIALOG_ERC::UpdateAnnotationWarning()
|
||||
}
|
||||
|
||||
|
||||
int DIALOG_ERC::getSeverities()
|
||||
{
|
||||
int severities = 0;
|
||||
|
||||
if( m_showErrors->GetValue() )
|
||||
severities |= RPT_SEVERITY_ERROR;
|
||||
|
||||
if( m_showWarnings->GetValue() )
|
||||
severities |= RPT_SEVERITY_WARNING;
|
||||
|
||||
if( m_showExclusions->GetValue() )
|
||||
severities |= RPT_SEVERITY_EXCLUSION;
|
||||
|
||||
return severities;
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_ERC::OnMenu( wxCommandEvent& event )
|
||||
{
|
||||
// Build a pop menu:
|
||||
wxMenu menu;
|
||||
|
||||
menu.Append( 4206, _( "Cross-probe Selected Items" ),
|
||||
_( "Highlight corresponding items on canvas when selected in the ERC list" ),
|
||||
wxITEM_CHECK );
|
||||
menu.Check( 4206, m_crossprobe );
|
||||
|
||||
menu.Append( 4207, _( "Center on Cross-probe" ),
|
||||
_( "When cross-probing, scroll the canvas so that the item is visible" ),
|
||||
wxITEM_CHECK );
|
||||
menu.Check( 4207, m_scroll_on_crossprobe );
|
||||
|
||||
// menu_id is the selected submenu id from the popup menu or wxID_NONE
|
||||
int menu_id = m_bMenu->GetPopupMenuSelectionFromUser( menu );
|
||||
|
||||
if( menu_id == 0 || menu_id == 4206 )
|
||||
{
|
||||
m_crossprobe = !m_crossprobe;
|
||||
}
|
||||
else if( menu_id == 1 || menu_id == 4207 )
|
||||
{
|
||||
m_scroll_on_crossprobe = !m_scroll_on_crossprobe;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool DIALOG_ERC::TransferDataToWindow()
|
||||
{
|
||||
UpdateData();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool DIALOG_ERC::updateUI()
|
||||
{
|
||||
// If ERC checks ever get slow enough we'll want a progress indicator...
|
||||
@ -217,6 +277,13 @@ void DIALOG_ERC::Report( const wxString& aMessage )
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_ERC::UpdateData()
|
||||
{
|
||||
m_markerTreeModel->Update( m_markerProvider, getSeverities() );
|
||||
updateDisplayedCounts();
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_ERC::updateDisplayedCounts()
|
||||
{
|
||||
int numErrors = 0;
|
||||
@ -348,30 +415,14 @@ void DIALOG_ERC::OnCloseErcDialog( wxCloseEvent& aEvent )
|
||||
// Dialog is mode-less so let the parent know that it needs to be destroyed.
|
||||
if( !IsModal() && !IsQuasiModal() )
|
||||
{
|
||||
wxCommandEvent* evt = new wxCommandEvent( EDA_EVT_CLOSE_ERC_DIALOG, wxID_ANY );
|
||||
|
||||
wxWindow* parent = GetParent();
|
||||
|
||||
if( parent )
|
||||
wxQueueEvent( parent, evt );
|
||||
if( wxWindow* parent = GetParent() )
|
||||
wxQueueEvent( parent, new wxCommandEvent( EDA_EVT_CLOSE_ERC_DIALOG, wxID_ANY ) );
|
||||
}
|
||||
|
||||
aEvent.Skip();
|
||||
}
|
||||
|
||||
|
||||
static int RPT_SEVERITY_ALL = RPT_SEVERITY_WARNING | RPT_SEVERITY_ERROR | RPT_SEVERITY_EXCLUSION;
|
||||
|
||||
|
||||
void DIALOG_ERC::syncCheckboxes()
|
||||
{
|
||||
m_showAll->SetValue( m_severities == RPT_SEVERITY_ALL );
|
||||
m_showErrors->SetValue( m_severities & RPT_SEVERITY_ERROR );
|
||||
m_showWarnings->SetValue( m_severities & RPT_SEVERITY_WARNING );
|
||||
m_showExclusions->SetValue( m_severities & RPT_SEVERITY_EXCLUSION );
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_ERC::OnLinkClicked( wxHtmlLinkEvent& event )
|
||||
{
|
||||
m_parent->OnAnnotate();
|
||||
@ -446,8 +497,7 @@ void DIALOG_ERC::OnRunERCClick( wxCommandEvent& event )
|
||||
}
|
||||
|
||||
if( m_cancelled )
|
||||
// @spellingerror
|
||||
m_messages->Report( _( "-------- ERC canceled by user.<br><br>" ), RPT_SEVERITY_INFO );
|
||||
m_messages->Report( _( "-------- ERC cancelled by user.<br><br>" ), RPT_SEVERITY_INFO );
|
||||
else
|
||||
m_messages->Report( _( "Done.<br><br>" ), RPT_SEVERITY_INFO );
|
||||
|
||||
@ -508,7 +558,7 @@ void DIALOG_ERC::testErc()
|
||||
}
|
||||
|
||||
// Update marker list:
|
||||
m_markerTreeModel->Update( m_markerProvider, m_severities );
|
||||
m_markerTreeModel->Update( m_markerProvider, getSeverities() );
|
||||
|
||||
// Display new markers from the current screen:
|
||||
for( SCH_ITEM* marker : m_parent->GetScreen()->Items().OfType( SCH_MARKER_T ) )
|
||||
@ -523,6 +573,12 @@ void DIALOG_ERC::testErc()
|
||||
|
||||
void DIALOG_ERC::OnERCItemSelected( wxDataViewEvent& aEvent )
|
||||
{
|
||||
if( !m_crossprobe )
|
||||
{
|
||||
aEvent.Skip();
|
||||
return;
|
||||
}
|
||||
|
||||
const KIID& itemID = RC_TREE_MODEL::ToUUID( aEvent.GetItem() );
|
||||
SCH_SHEET_PATH sheet;
|
||||
SCH_ITEM* item = m_parent->Schematic().ResolveItem( itemID, &sheet, true );
|
||||
@ -568,7 +624,7 @@ void DIALOG_ERC::OnERCItemSelected( wxDataViewEvent& aEvent )
|
||||
m_parent->RedrawScreen( m_parent->GetScreen()->m_ScrollCenter, false );
|
||||
}
|
||||
|
||||
m_parent->FocusOnItem( item );
|
||||
m_parent->FocusOnItem( item, m_scroll_on_crossprobe );
|
||||
redrawDrawPanel();
|
||||
}
|
||||
|
||||
@ -762,7 +818,7 @@ void DIALOG_ERC::OnERCItemRClick( wxDataViewEvent& aEvent )
|
||||
m_parent->GetCanvas()->GetView()->Update( marker );
|
||||
|
||||
// Update view
|
||||
if( m_severities & RPT_SEVERITY_EXCLUSION )
|
||||
if( getSeverities() & RPT_SEVERITY_EXCLUSION )
|
||||
static_cast<RC_TREE_MODEL*>( aEvent.GetModel() )->ValueChanged( node );
|
||||
else
|
||||
static_cast<RC_TREE_MODEL*>( aEvent.GetModel() )->DeleteCurrentItem( false );
|
||||
@ -788,7 +844,7 @@ void DIALOG_ERC::OnERCItemRClick( wxDataViewEvent& aEvent )
|
||||
}
|
||||
|
||||
// Rebuild model and view
|
||||
static_cast<RC_TREE_MODEL*>( aEvent.GetModel() )->Update( m_markerProvider, m_severities );
|
||||
static_cast<RC_TREE_MODEL*>( aEvent.GetModel() )->Update( m_markerProvider, getSeverities() );
|
||||
modified = true;
|
||||
break;
|
||||
|
||||
@ -804,7 +860,7 @@ void DIALOG_ERC::OnERCItemRClick( wxDataViewEvent& aEvent )
|
||||
}
|
||||
|
||||
// Rebuild model and view
|
||||
static_cast<RC_TREE_MODEL*>( aEvent.GetModel() )->Update( m_markerProvider, m_severities );
|
||||
static_cast<RC_TREE_MODEL*>( aEvent.GetModel() )->Update( m_markerProvider, getSeverities() );
|
||||
modified = true;
|
||||
break;
|
||||
|
||||
@ -830,7 +886,7 @@ void DIALOG_ERC::OnERCItemRClick( wxDataViewEvent& aEvent )
|
||||
ScreenList.DeleteMarkers( MARKER_BASE::MARKER_ERC, rcItem->GetErrorCode() );
|
||||
|
||||
// Rebuild model and view
|
||||
static_cast<RC_TREE_MODEL*>( aEvent.GetModel() )->Update( m_markerProvider, m_severities );
|
||||
static_cast<RC_TREE_MODEL*>( aEvent.GetModel() )->Update( m_markerProvider, getSeverities() );
|
||||
modified = true;
|
||||
}
|
||||
break;
|
||||
@ -956,7 +1012,7 @@ void DIALOG_ERC::ExcludeMarker( SCH_MARKER* aMarker )
|
||||
m_parent->GetCanvas()->GetView()->Update( marker );
|
||||
|
||||
// Update view
|
||||
if( m_severities & RPT_SEVERITY_EXCLUSION )
|
||||
if( getSeverities() & RPT_SEVERITY_EXCLUSION )
|
||||
m_markerTreeModel->ValueChanged( node );
|
||||
else
|
||||
m_markerTreeModel->DeleteCurrentItem( false );
|
||||
@ -976,28 +1032,14 @@ void DIALOG_ERC::OnEditViolationSeverities( wxHyperlinkEvent& aEvent )
|
||||
|
||||
void DIALOG_ERC::OnSeverity( wxCommandEvent& aEvent )
|
||||
{
|
||||
int flag = 0;
|
||||
|
||||
if( aEvent.GetEventObject() == m_showAll )
|
||||
flag = RPT_SEVERITY_ALL;
|
||||
else if( aEvent.GetEventObject() == m_showErrors )
|
||||
flag = RPT_SEVERITY_ERROR;
|
||||
else if( aEvent.GetEventObject() == m_showWarnings )
|
||||
flag = RPT_SEVERITY_WARNING;
|
||||
else if( aEvent.GetEventObject() == m_showExclusions )
|
||||
flag = RPT_SEVERITY_EXCLUSION;
|
||||
{
|
||||
m_showErrors->SetValue( true );
|
||||
m_showWarnings->SetValue( aEvent.IsChecked() );
|
||||
m_showExclusions->SetValue( aEvent.IsChecked() );
|
||||
}
|
||||
|
||||
if( aEvent.IsChecked() )
|
||||
m_severities |= flag;
|
||||
else if( aEvent.GetEventObject() == m_showAll )
|
||||
m_severities = RPT_SEVERITY_ERROR;
|
||||
else
|
||||
m_severities &= ~flag;
|
||||
|
||||
syncCheckboxes();
|
||||
|
||||
m_markerTreeModel->Update( m_markerProvider, m_severities );
|
||||
updateDisplayedCounts();
|
||||
UpdateData();
|
||||
}
|
||||
|
||||
|
||||
|
@ -49,6 +49,8 @@ public:
|
||||
DIALOG_ERC( SCH_EDIT_FRAME* parent );
|
||||
~DIALOG_ERC();
|
||||
|
||||
bool TransferDataToWindow() override;
|
||||
|
||||
// PROGRESS_REPORTER_BASE calls
|
||||
bool updateUI() override;
|
||||
void AdvancePhase( const wxString& aMessage ) override;
|
||||
@ -66,10 +68,14 @@ public:
|
||||
*/
|
||||
void ExcludeMarker( SCH_MARKER* aMarker = nullptr );
|
||||
|
||||
void UpdateData();
|
||||
void UpdateAnnotationWarning();
|
||||
|
||||
private:
|
||||
int getSeverities();
|
||||
|
||||
// from DIALOG_ERC_BASE:
|
||||
void OnMenu( wxCommandEvent& aEvent ) override;
|
||||
void OnCloseErcDialog( wxCloseEvent& event ) override;
|
||||
void OnRunERCClick( wxCommandEvent& event ) override;
|
||||
void OnDeleteOneClick( wxCommandEvent& event ) override;
|
||||
@ -92,8 +98,6 @@ private:
|
||||
|
||||
void testErc();
|
||||
|
||||
bool writeReport( const wxString& aFullFileName );
|
||||
|
||||
void deleteAllMarkers( bool aIncludeExclusions );
|
||||
|
||||
void syncCheckboxes();
|
||||
@ -114,7 +118,8 @@ private:
|
||||
|
||||
const SCH_MARKER* m_centerMarkerOnIdle;
|
||||
|
||||
int m_severities;
|
||||
bool m_crossprobe;
|
||||
bool m_scroll_on_crossprobe;
|
||||
};
|
||||
|
||||
|
||||
|
@ -5,6 +5,7 @@
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "widgets/std_bitmap_button.h"
|
||||
#include "widgets/wx_html_report_box.h"
|
||||
#include "widgets/wx_infobar.h"
|
||||
|
||||
@ -29,6 +30,24 @@ DIALOG_ERC_BASE::DIALOG_ERC_BASE( wxWindow* parent, wxWindowID id, const wxStrin
|
||||
wxBoxSizer* bMainSizer;
|
||||
bMainSizer = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
wxGridBagSizer* gbSizerOptions;
|
||||
gbSizerOptions = new wxGridBagSizer( 0, 0 );
|
||||
gbSizerOptions->SetFlexibleDirection( wxBOTH );
|
||||
gbSizerOptions->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
m_bMenu = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
|
||||
m_bMenu->SetMinSize( wxSize( 30,30 ) );
|
||||
|
||||
gbSizerOptions->Add( m_bMenu, wxGBPosition( 0, 2 ), wxGBSpan( 2, 1 ), wxALIGN_CENTER_VERTICAL, 5 );
|
||||
|
||||
|
||||
gbSizerOptions->AddGrowableCol( 0 );
|
||||
gbSizerOptions->AddGrowableCol( 1 );
|
||||
gbSizerOptions->AddGrowableRow( 0 );
|
||||
gbSizerOptions->AddGrowableRow( 1 );
|
||||
|
||||
bMainSizer->Add( gbSizerOptions, 0, wxEXPAND|wxLEFT, 5 );
|
||||
|
||||
m_runningResultsBook = new wxSimplebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
running = new wxPanel( m_runningResultsBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||
wxBoxSizer* bSizer14;
|
||||
@ -195,6 +214,7 @@ DIALOG_ERC_BASE::DIALOG_ERC_BASE( wxWindow* parent, wxWindowID id, const wxStrin
|
||||
|
||||
// Connect Events
|
||||
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_ERC_BASE::OnCloseErcDialog ) );
|
||||
m_bMenu->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ERC_BASE::OnMenu ), NULL, this );
|
||||
m_messages->Connect( wxEVT_COMMAND_HTML_LINK_CLICKED, wxHtmlLinkEventHandler( DIALOG_ERC_BASE::OnLinkClicked ), NULL, this );
|
||||
m_markerDataView->Connect( wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler( DIALOG_ERC_BASE::OnERCItemDClick ), NULL, this );
|
||||
m_markerDataView->Connect( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, wxDataViewEventHandler( DIALOG_ERC_BASE::OnERCItemRClick ), NULL, this );
|
||||
@ -216,6 +236,7 @@ DIALOG_ERC_BASE::~DIALOG_ERC_BASE()
|
||||
{
|
||||
// Disconnect Events
|
||||
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_ERC_BASE::OnCloseErcDialog ) );
|
||||
m_bMenu->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_ERC_BASE::OnMenu ), NULL, this );
|
||||
m_messages->Disconnect( wxEVT_COMMAND_HTML_LINK_CLICKED, wxHtmlLinkEventHandler( DIALOG_ERC_BASE::OnLinkClicked ), NULL, this );
|
||||
m_markerDataView->Disconnect( wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler( DIALOG_ERC_BASE::OnERCItemDClick ), NULL, this );
|
||||
m_markerDataView->Disconnect( wxEVT_COMMAND_DATAVIEW_ITEM_CONTEXT_MENU, wxDataViewEventHandler( DIALOG_ERC_BASE::OnERCItemRClick ), NULL, this );
|
||||
|
@ -14,7 +14,7 @@
|
||||
<property name="embedded_files_path">res</property>
|
||||
<property name="encoding">UTF-8</property>
|
||||
<property name="file">dialog_erc_base</property>
|
||||
<property name="first_id">1000</property>
|
||||
<property name="first_id">7100</property>
|
||||
<property name="internationalize">1</property>
|
||||
<property name="lua_skip_events">1</property>
|
||||
<property name="lua_ui_table">UI</property>
|
||||
@ -135,6 +135,101 @@
|
||||
<property name="name">bMainSizer</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="true">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxGridBagSizer" expanded="true">
|
||||
<property name="empty_cell_size"></property>
|
||||
<property name="flexible_direction">wxBOTH</property>
|
||||
<property name="growablecols">0,1</property>
|
||||
<property name="growablerows">0,1</property>
|
||||
<property name="hgap">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">gbSizerOptions</property>
|
||||
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
|
||||
<property name="permission">none</property>
|
||||
<property name="vgap">0</property>
|
||||
<object class="gbsizeritem" expanded="true">
|
||||
<property name="border">5</property>
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">2</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
|
||||
<property name="row">0</property>
|
||||
<property name="rowspan">2</property>
|
||||
<object class="wxBitmapButton" expanded="true">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer">0</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position">0</property>
|
||||
<property name="aui_row">0</property>
|
||||
<property name="auth_needed">0</property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="bitmap"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="current"></property>
|
||||
<property name="default">0</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="disabled"></property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="drag_accept_files">0</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="focus"></property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Refresh Grouping</property>
|
||||
<property name="margins"></property>
|
||||
<property name="markup">0</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size">30,30</property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_bMenu</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="position"></property>
|
||||
<property name="pressed"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">STD_BITMAP_BUTTON; widgets/std_bitmap_button.h; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnButtonClick">OnMenu</event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="true">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxEXPAND|wxTOP|wxRIGHT</property>
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include <wx/artprov.h>
|
||||
#include <wx/xrc/xmlres.h>
|
||||
#include <wx/intl.h>
|
||||
class STD_BITMAP_BUTTON;
|
||||
class WX_HTML_REPORT_BOX;
|
||||
class WX_INFOBAR;
|
||||
|
||||
@ -20,13 +21,16 @@ class WX_INFOBAR;
|
||||
#include <wx/colour.h>
|
||||
#include <wx/settings.h>
|
||||
#include <wx/string.h>
|
||||
#include <wx/bmpbuttn.h>
|
||||
#include <wx/bitmap.h>
|
||||
#include <wx/image.h>
|
||||
#include <wx/icon.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/gbsizer.h>
|
||||
#include <wx/html/htmlwin.h>
|
||||
#include <wx/gauge.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/panel.h>
|
||||
#include <wx/bitmap.h>
|
||||
#include <wx/image.h>
|
||||
#include <wx/icon.h>
|
||||
#include <wx/notebook.h>
|
||||
#include <wx/dataview.h>
|
||||
#include <wx/listctrl.h>
|
||||
@ -35,12 +39,11 @@ class WX_INFOBAR;
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/checkbox.h>
|
||||
#include <widgets/number_badge.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/dialog.h>
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#define ID_ERASE_DRC_MARKERS 1000
|
||||
#define ID_ERASE_DRC_MARKERS 7100
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
/// Class DIALOG_ERC_BASE
|
||||
@ -51,6 +54,7 @@ class DIALOG_ERC_BASE : public DIALOG_SHIM
|
||||
|
||||
protected:
|
||||
WX_INFOBAR* m_infoBar;
|
||||
STD_BITMAP_BUTTON* m_bMenu;
|
||||
wxSimplebook* m_runningResultsBook;
|
||||
wxPanel* running;
|
||||
wxNotebook* m_runningNotebook;
|
||||
@ -82,6 +86,7 @@ class DIALOG_ERC_BASE : public DIALOG_SHIM
|
||||
|
||||
// Virtual event handlers, override them in your derived class
|
||||
virtual void OnCloseErcDialog( wxCloseEvent& event ) { event.Skip(); }
|
||||
virtual void OnMenu( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnLinkClicked( wxHtmlLinkEvent& event ) { event.Skip(); }
|
||||
virtual void OnERCItemDClick( wxDataViewEvent& event ) { event.Skip(); }
|
||||
virtual void OnERCItemRClick( wxDataViewEvent& event ) { event.Skip(); }
|
||||
|
@ -921,16 +921,28 @@ void DIALOG_SYMBOL_FIELDS_TABLE::OnMenu( wxCommandEvent& event )
|
||||
// Build a pop menu:
|
||||
wxMenu menu;
|
||||
|
||||
menu.Append( 4204, _( "Include 'DNP' Symbols" ), wxEmptyString, wxITEM_CHECK );
|
||||
menu.Append( 4205, _( "Include 'Exclude from BOM' Symbols" ), wxEmptyString, wxITEM_CHECK );
|
||||
menu.AppendSeparator();
|
||||
menu.Append( 4206, _( "Highlight on Cross Probe" ), wxEmptyString, wxITEM_CHECK );
|
||||
menu.Append( 4207, _( "Select on Cross Probe" ), wxEmptyString, wxITEM_CHECK );
|
||||
|
||||
menu.Append( 4204, _( "Include 'DNP' Symbols" ),
|
||||
_( "Show symbols marked 'DNP' in the table. This setting also controls whether or not 'DNP' "
|
||||
"symbols are included on export." ),
|
||||
wxITEM_CHECK );
|
||||
menu.Check( 4204, !m_dataModel->GetExcludeDNP() );
|
||||
|
||||
menu.Append( 4205, _( "Include 'Exclude from BOM' Symbols" ),
|
||||
_( "Show symbols marked 'Exclude from BOM' in the table. Symbols marked 'Exclude from BOM' "
|
||||
"are never included on export." ),
|
||||
wxITEM_CHECK );
|
||||
menu.Check( 4205, m_dataModel->GetIncludeExcludedFromBOM() );
|
||||
|
||||
menu.AppendSeparator();
|
||||
|
||||
menu.Append( 4206, _( "Highlight on Cross-probe" ),
|
||||
_( "Highlight corresponding item on canvas when it is selected in the table" ),
|
||||
wxITEM_CHECK );
|
||||
menu.Check( 4206, cfg.selection_mode == 0 );
|
||||
|
||||
menu.Append( 4207, _( "Select on Cross-probe" ),
|
||||
_( "Select corresponding item on canvas when it is selected in the table" ),
|
||||
wxITEM_CHECK );
|
||||
menu.Check( 4207, cfg.selection_mode == 1 );
|
||||
|
||||
// menu_id is the selected submenu id from the popup menu or wxID_NONE
|
||||
|
@ -189,9 +189,6 @@ EESCHEMA_SETTINGS::EESCHEMA_SETTINGS() :
|
||||
m_params.emplace_back( new PARAM<int>( "appearance.edit_label_height",
|
||||
&m_Appearance.edit_label_height, -1 ) );
|
||||
|
||||
m_params.emplace_back( new PARAM<int>( "appearance.erc_severities",
|
||||
&m_Appearance.erc_severities, RPT_SEVERITY_ERROR | RPT_SEVERITY_WARNING ) );
|
||||
|
||||
m_params.emplace_back( new PARAM<bool>( "appearance.footprint_preview",
|
||||
&m_Appearance.footprint_preview, true ) );
|
||||
|
||||
@ -591,6 +588,12 @@ EESCHEMA_SETTINGS::EESCHEMA_SETTINGS() :
|
||||
m_params.emplace_back( new PARAM<int>( "symbol_chooser.sort_mode",
|
||||
&m_SymChooserPanel.sort_mode, 0 ) );
|
||||
|
||||
m_params.emplace_back( new PARAM<bool>( "ERC.crossprobe",
|
||||
&m_ERCDialog.crossprobe, true ) );
|
||||
|
||||
m_params.emplace_back( new PARAM<bool>( "ERC.scroll_on_crossprobe",
|
||||
&m_ERCDialog.scroll_on_crossprobe, true ) );
|
||||
|
||||
m_params.emplace_back( new PARAM<bool>( "import_graphics.interactive_placement",
|
||||
&m_ImportGraphics.interactive_placement, true ) );
|
||||
|
||||
|
@ -68,7 +68,6 @@ public:
|
||||
int edit_label_width;
|
||||
int edit_label_height;
|
||||
bool edit_label_multiple;
|
||||
int erc_severities;
|
||||
bool footprint_preview;
|
||||
bool print_sheet_reference;
|
||||
wxString default_font;
|
||||
@ -265,6 +264,12 @@ public:
|
||||
int sort_mode;
|
||||
};
|
||||
|
||||
struct DIALOG_ERC
|
||||
{
|
||||
bool crossprobe;
|
||||
bool scroll_on_crossprobe;
|
||||
};
|
||||
|
||||
struct DIALOG_IMPORT_GRAPHICS
|
||||
{
|
||||
bool interactive_placement;
|
||||
@ -328,40 +333,31 @@ private:
|
||||
static std::vector<NETLIST_PLUGIN_SETTINGS> netlistSettingsFromJson( const nlohmann::json& aObj );
|
||||
|
||||
public:
|
||||
APPEARANCE m_Appearance;
|
||||
APPEARANCE m_Appearance;
|
||||
AUI_PANELS m_AuiPanels;
|
||||
|
||||
AUTOPLACE_FIELDS m_AutoplaceFields;
|
||||
DRAWING m_Drawing;
|
||||
INPUT m_Input;
|
||||
AUTOPLACE_FIELDS m_AutoplaceFields;
|
||||
SELECTION m_Selection;
|
||||
|
||||
AUI_PANELS m_AuiPanels;
|
||||
|
||||
DRAWING m_Drawing;
|
||||
|
||||
FIND_REPLACE_EXTRA m_FindReplaceExtra;
|
||||
|
||||
INPUT m_Input;
|
||||
|
||||
PAGE_SETTINGS m_PageSettings;
|
||||
|
||||
PANEL_ANNOTATE m_AnnotatePanel;
|
||||
|
||||
PANEL_BOM m_BomPanel;
|
||||
PAGE_SETTINGS m_PageSettings;
|
||||
PANEL_ANNOTATE m_AnnotatePanel;
|
||||
PANEL_BOM m_BomPanel;
|
||||
|
||||
PANEL_SYMBOL_FIELDS_TABLE m_FieldEditorPanel;
|
||||
PANEL_LIB_VIEW m_LibViewPanel;
|
||||
PANEL_NETLIST m_NetlistPanel;
|
||||
PANEL_SYM_CHOOSER m_SymChooserPanel;
|
||||
|
||||
PANEL_LIB_VIEW m_LibViewPanel;
|
||||
FIND_REPLACE_EXTRA m_FindReplaceExtra;
|
||||
DIALOG_ERC m_ERCDialog;
|
||||
DIALOG_IMPORT_GRAPHICS m_ImportGraphics;
|
||||
|
||||
PANEL_NETLIST m_NetlistPanel;
|
||||
SIMULATOR m_Simulator;
|
||||
|
||||
PANEL_SYM_CHOOSER m_SymChooserPanel;
|
||||
bool m_RescueNeverShow;
|
||||
|
||||
DIALOG_IMPORT_GRAPHICS m_ImportGraphics;
|
||||
|
||||
SELECTION m_Selection;
|
||||
|
||||
SIMULATOR m_Simulator;
|
||||
|
||||
bool m_RescueNeverShow;
|
||||
|
||||
wxString m_lastSymbolLibDir;
|
||||
wxString m_lastSymbolLibDir;
|
||||
};
|
||||
|
||||
|
@ -2032,7 +2032,7 @@ bool SCH_EDIT_FRAME::GetShowAllPins() const
|
||||
}
|
||||
|
||||
|
||||
void SCH_EDIT_FRAME::FocusOnItem( EDA_ITEM* aItem )
|
||||
void SCH_EDIT_FRAME::FocusOnItem( EDA_ITEM* aItem, bool aAllowScroll )
|
||||
{
|
||||
// nullptr will clear the current focus
|
||||
if( aItem != nullptr && !aItem->IsSCH_ITEM() )
|
||||
@ -2060,7 +2060,7 @@ void SCH_EDIT_FRAME::FocusOnItem( EDA_ITEM* aItem )
|
||||
lastBrightenedItemID = aItem->m_Uuid;
|
||||
}
|
||||
|
||||
FocusOnLocation( aItem->GetFocusPosition() );
|
||||
FocusOnLocation( aItem->GetFocusPosition(), aAllowScroll );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -755,7 +755,7 @@ public:
|
||||
int GetSchematicJunctionSize();
|
||||
double GetSchematicHopOverScale();
|
||||
|
||||
void FocusOnItem( EDA_ITEM* aItem ) override;
|
||||
void FocusOnItem( EDA_ITEM* aItem, bool aAllowScroll = true ) override;
|
||||
|
||||
bool IsSyncingSelection() { return m_syncingPcbToSchSelection; }
|
||||
|
||||
|
@ -34,6 +34,9 @@
|
||||
#include <string_utils.h>
|
||||
#include <geometry/geometry_utils.h>
|
||||
#include <schematic.h>
|
||||
#include <sch_screen.h>
|
||||
#include <sch_sheet.h>
|
||||
#include <sch_sheet_pin.h>
|
||||
#include <settings/color_settings.h>
|
||||
#include <sch_painter.h>
|
||||
#include <default_values.h>
|
||||
@ -314,6 +317,82 @@ COLOR4D SCH_LABEL_BASE::GetLabelColor() const
|
||||
}
|
||||
|
||||
|
||||
void SCH_LABEL_BASE::SetLabelShape( LABEL_SHAPE aShape )
|
||||
{
|
||||
m_shape = (LABEL_FLAG_SHAPE) aShape;
|
||||
|
||||
static bool s_inUpdate = false;
|
||||
|
||||
if( s_inUpdate )
|
||||
return;
|
||||
|
||||
s_inUpdate = true;
|
||||
|
||||
if( Type() == SCH_HIER_LABEL_T )
|
||||
{
|
||||
SCH_HIERLABEL* label = static_cast<SCH_HIERLABEL*>( this );
|
||||
SCH_SCREEN* screen = static_cast<SCH_SCREEN*>( label->GetParent() );
|
||||
|
||||
if( screen )
|
||||
{
|
||||
const wxString& text = label->GetText();
|
||||
|
||||
for( SCH_ITEM* item : screen->Items().OfType( SCH_HIER_LABEL_T ) )
|
||||
{
|
||||
SCH_HIERLABEL* other = static_cast<SCH_HIERLABEL*>( item );
|
||||
|
||||
if( other != label && other->GetText() == text )
|
||||
other->SetLabelShape( aShape );
|
||||
}
|
||||
|
||||
for( const SCH_SHEET_PATH& sheetPath : screen->GetClientSheetPaths() )
|
||||
{
|
||||
SCH_SHEET* sheet = sheetPath.Last();
|
||||
|
||||
if( sheet )
|
||||
{
|
||||
for( SCH_SHEET_PIN* pin : sheet->GetPins() )
|
||||
{
|
||||
if( pin->GetText() == text )
|
||||
pin->SetLabelShape( aShape );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if( Type() == SCH_SHEET_PIN_T )
|
||||
{
|
||||
SCH_SHEET_PIN* pin = static_cast<SCH_SHEET_PIN*>( this );
|
||||
SCH_SHEET* parent = pin->GetParent();
|
||||
|
||||
if( parent )
|
||||
{
|
||||
const wxString& text = pin->GetText();
|
||||
SCH_SCREEN* screen = parent->GetScreen();
|
||||
|
||||
if( screen )
|
||||
{
|
||||
for( SCH_ITEM* item : screen->Items().OfType( SCH_HIER_LABEL_T ) )
|
||||
{
|
||||
SCH_HIERLABEL* hlabel = static_cast<SCH_HIERLABEL*>( item );
|
||||
|
||||
if( hlabel->GetText() == text )
|
||||
hlabel->SetLabelShape( aShape );
|
||||
}
|
||||
}
|
||||
|
||||
for( SCH_SHEET_PIN* other : parent->GetPins() )
|
||||
{
|
||||
if( other != pin && other->GetText() == text )
|
||||
other->SetLabelShape( aShape );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
s_inUpdate = false;
|
||||
}
|
||||
|
||||
|
||||
void SCH_LABEL_BASE::SetSpinStyle( SPIN_STYLE aSpinStyle )
|
||||
{
|
||||
// Assume "Right" and Left" mean which side of the anchor the text will be on
|
||||
|
@ -173,12 +173,19 @@ public:
|
||||
bool HasConnectivityChanges( const SCH_ITEM* aItem,
|
||||
const SCH_SHEET_PATH* aInstance = nullptr ) const override;
|
||||
|
||||
LABEL_FLAG_SHAPE GetShape() const { return m_shape; }
|
||||
void SetShape( LABEL_FLAG_SHAPE aShape ) { m_shape = aShape; }
|
||||
|
||||
// Type-specific versions for property manager
|
||||
LABEL_SHAPE GetLabelShape() const { return (LABEL_SHAPE) m_shape; }
|
||||
void SetLabelShape( LABEL_SHAPE aShape ) { m_shape = (LABEL_FLAG_SHAPE) aShape; }
|
||||
void SetLabelShape( LABEL_SHAPE aShape );
|
||||
|
||||
LABEL_FLAG_SHAPE GetShape() const { return m_shape; }
|
||||
void SetShape( LABEL_FLAG_SHAPE aShape )
|
||||
{
|
||||
// Set flags directly if a flag shape
|
||||
if( aShape >= F_FIRST )
|
||||
m_shape = aShape;
|
||||
else
|
||||
SetLabelShape( (LABEL_SHAPE) aShape );
|
||||
}
|
||||
|
||||
COLOR4D GetLabelColor() const;
|
||||
|
||||
|
@ -140,11 +140,10 @@ void SPICE_LIBRARY_PARSER::ReadFile( const wxString& aFilePath, REPORTER& aRepor
|
||||
// Read all self-contained models in parallel
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
|
||||
auto results = tp.parallelize_loop( modelQueue.size(),
|
||||
[&]( const int a, const int b )
|
||||
auto results = tp.submit_loop( 0, modelQueue.size(),
|
||||
[&]( const int ii )
|
||||
{
|
||||
for( int ii = a; ii < b; ++ii )
|
||||
createModel( ii, true );
|
||||
createModel( ii, true );
|
||||
} );
|
||||
results.wait();
|
||||
|
||||
|
@ -1541,7 +1541,7 @@ const BOX2I SYMBOL_EDIT_FRAME::GetDocumentExtents( bool aIncludeAllVisible ) con
|
||||
}
|
||||
|
||||
|
||||
void SYMBOL_EDIT_FRAME::FocusOnItem( EDA_ITEM* aItem )
|
||||
void SYMBOL_EDIT_FRAME::FocusOnItem( EDA_ITEM* aItem, bool aAllowScroll )
|
||||
{
|
||||
static KIID lastBrightenedItemID( niluuid );
|
||||
|
||||
@ -1587,7 +1587,7 @@ void SYMBOL_EDIT_FRAME::FocusOnItem( EDA_ITEM* aItem )
|
||||
lastBrightenedItemID = aItem->m_Uuid;
|
||||
}
|
||||
|
||||
FocusOnLocation( VECTOR2I( aItem->GetFocusPosition().x, -aItem->GetFocusPosition().y ) );
|
||||
FocusOnLocation( VECTOR2I( aItem->GetFocusPosition().x, -aItem->GetFocusPosition().y ), aAllowScroll );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -377,7 +377,7 @@ public:
|
||||
|
||||
void KiwayMailIn( KIWAY_EXPRESS& mail ) override;
|
||||
|
||||
void FocusOnItem( EDA_ITEM* aItem ) override;
|
||||
void FocusOnItem( EDA_ITEM* aItem, bool aAllowScroll = true ) override;
|
||||
|
||||
/**
|
||||
* Load a symbol from the schematic to edit in place.
|
||||
|
@ -3097,6 +3097,7 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
|
||||
KIGFX::VIEW_CONTROLS* controls = getViewControls();
|
||||
EE_GRID_HELPER grid( m_toolMgr );
|
||||
VECTOR2I cursorPos;
|
||||
bool startedWithDrag = false; // Track if initial sheet placement started with a drag
|
||||
|
||||
m_toolMgr->RunAction( ACTIONS::selectionClear );
|
||||
|
||||
@ -3188,7 +3189,8 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
|
||||
}
|
||||
}
|
||||
else if( !sheet && ( evt->IsClick( BUT_LEFT ) || evt->IsDblClick( BUT_LEFT )
|
||||
|| evt->IsAction( &ACTIONS::cursorClick ) || evt->IsAction( &ACTIONS::cursorDblClick ) ) )
|
||||
|| evt->IsAction( &ACTIONS::cursorClick ) || evt->IsAction( &ACTIONS::cursorDblClick )
|
||||
|| evt->IsDrag( BUT_LEFT ) ) )
|
||||
{
|
||||
SCH_SELECTION& selection = m_selectionTool->GetSelection();
|
||||
|
||||
@ -3211,7 +3213,15 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
|
||||
|
||||
m_toolMgr->RunAction( ACTIONS::selectionClear );
|
||||
|
||||
sheet = new SCH_SHEET( m_frame->GetCurrentSheet().Last(), cursorPos );
|
||||
VECTOR2I sheetPos = evt->IsDrag( BUT_LEFT ) ?
|
||||
grid.Align( evt->DragOrigin(), GRID_HELPER_GRIDS::GRID_GRAPHICS ) :
|
||||
cursorPos;
|
||||
|
||||
// Remember whether this sheet was initiated with a drag so we can treat mouse-up as
|
||||
// the terminating (second) click.
|
||||
startedWithDrag = evt->IsDrag( BUT_LEFT );
|
||||
|
||||
sheet = new SCH_SHEET( m_frame->GetCurrentSheet().Last(), sheetPos );
|
||||
sheet->SetScreen( nullptr );
|
||||
|
||||
wxString ext = wxString( "." ) + FILEEXT::KiCadSchematicFileExtension;
|
||||
@ -3265,10 +3275,11 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
|
||||
m_view->ClearPreview();
|
||||
m_view->AddToPreview( sheet->Clone() );
|
||||
}
|
||||
else if( sheet && ( evt->IsClick( BUT_LEFT ) || evt->IsDblClick( BUT_LEFT )
|
||||
|| isSyntheticClick
|
||||
|| evt->IsAction( &ACTIONS::cursorClick ) || evt->IsAction( &ACTIONS::cursorDblClick )
|
||||
|| evt->IsAction( &ACTIONS::finishInteractive ) ) )
|
||||
else if( sheet && ( evt->IsClick( BUT_LEFT ) || evt->IsDblClick( BUT_LEFT )
|
||||
|| isSyntheticClick
|
||||
|| evt->IsAction( &ACTIONS::cursorClick ) || evt->IsAction( &ACTIONS::cursorDblClick )
|
||||
|| evt->IsAction( &ACTIONS::finishInteractive )
|
||||
|| ( startedWithDrag && evt->IsMouseUp( BUT_LEFT ) ) ) )
|
||||
{
|
||||
getViewControls()->SetAutoPan( false );
|
||||
getViewControls()->CaptureCursor( false );
|
||||
@ -3338,7 +3349,8 @@ int SCH_DRAWING_TOOLS::DrawSheet( const TOOL_EVENT& aEvent )
|
||||
evt->SetPassEvent();
|
||||
break;
|
||||
}
|
||||
else if( sheet && ( evt->IsAction( &ACTIONS::refreshPreview ) || evt->IsMotion() ) )
|
||||
else if( sheet && ( evt->IsAction( &ACTIONS::refreshPreview ) || evt->IsMotion()
|
||||
|| evt->IsDrag( BUT_LEFT ) ) )
|
||||
{
|
||||
sizeSheet( sheet, cursorPos );
|
||||
m_view->ClearPreview();
|
||||
|
@ -548,9 +548,13 @@ void HIERARCHY_PANE::onCharHook( wxKeyEvent& aKeyStroke )
|
||||
|
||||
int mods = aKeyStroke.GetModifiers();
|
||||
|
||||
if( mods & wxMOD_ALTGR )
|
||||
hotkey += MD_ALTGR;
|
||||
// the flag wxMOD_ALTGR is defined in wxWidgets as wxMOD_CONTROL|wxMOD_ALT
|
||||
// So AltGr key cannot used as modifier key because it is the same as Alt key + Ctrl key.
|
||||
#if CAN_USE_ALTGR_KEY
|
||||
if( wxmods & wxMOD_ALTGR )
|
||||
mods |= MD_ALTGR;
|
||||
else
|
||||
#endif
|
||||
{
|
||||
if( mods & wxMOD_CONTROL )
|
||||
hotkey += MD_CTRL;
|
||||
|
@ -306,14 +306,14 @@ public:
|
||||
*
|
||||
* @param aPos is the point to go to.
|
||||
*/
|
||||
void FocusOnLocation( const VECTOR2I& aPos );
|
||||
void FocusOnLocation( const VECTOR2I& aPos, bool aAllowScroll = true );
|
||||
|
||||
/**
|
||||
* Focus on a particular canvas item.
|
||||
*
|
||||
* @param aItem is the item to focus on. nullptr clears the focus.
|
||||
*/
|
||||
virtual void FocusOnItem( EDA_ITEM* aItem ) {}
|
||||
virtual void FocusOnItem( EDA_ITEM* aItem, bool aAllowScroll = true ) {}
|
||||
|
||||
virtual void ClearFocus() { FocusOnItem( nullptr ); }
|
||||
|
||||
|
@ -220,9 +220,10 @@ public:
|
||||
|
||||
EDA_ITEM* ResolveItem( const KIID& aId, bool aAllowNullptrReturn = false ) const override;
|
||||
|
||||
void FocusOnItem( EDA_ITEM* aItem ) override;
|
||||
void FocusOnItem( BOARD_ITEM* aItem, PCB_LAYER_ID aLayer = UNDEFINED_LAYER );
|
||||
void FocusOnItems( std::vector<BOARD_ITEM*> aItems, PCB_LAYER_ID aLayer = UNDEFINED_LAYER );
|
||||
void FocusOnItem( EDA_ITEM* aItem, bool aAllowScroll = true ) override;
|
||||
void FocusOnItem( BOARD_ITEM* aItem, PCB_LAYER_ID aLayer = UNDEFINED_LAYER, bool aAllowScroll = true );
|
||||
void FocusOnItems( std::vector<BOARD_ITEM*> aItems, PCB_LAYER_ID aLayer = UNDEFINED_LAYER,
|
||||
bool aAllowScroll = true );
|
||||
|
||||
void HideSolderMask();
|
||||
void ShowSolderMask();
|
||||
|
@ -110,7 +110,7 @@ public:
|
||||
*/
|
||||
void BuildArgvUtf8();
|
||||
|
||||
BS::thread_pool& GetThreadPool() { return *m_singleton.m_ThreadPool; }
|
||||
BS::thread_pool<0>& GetThreadPool() { return *m_singleton.m_ThreadPool; }
|
||||
|
||||
GL_CONTEXT_MANAGER* GetGLContextManager() { return m_singleton.m_GLContextManager; }
|
||||
|
||||
|
@ -25,6 +25,7 @@
|
||||
class GL_CONTEXT_MANAGER;
|
||||
namespace BS
|
||||
{
|
||||
template <std::uint8_t>
|
||||
class thread_pool;
|
||||
}
|
||||
|
||||
@ -42,7 +43,7 @@ public:
|
||||
void Init();
|
||||
|
||||
public:
|
||||
BS::thread_pool* m_ThreadPool;
|
||||
BS::thread_pool<0>* m_ThreadPool;
|
||||
GL_CONTEXT_MANAGER* m_GLContextManager;
|
||||
};
|
||||
|
||||
|
@ -28,7 +28,7 @@
|
||||
#include <bs_thread_pool.hpp>
|
||||
#include <import_export.h>
|
||||
|
||||
using thread_pool = BS::thread_pool;
|
||||
using thread_pool = BS::thread_pool<0>;
|
||||
|
||||
/**
|
||||
* Get a reference to the current thread pool. N.B., you cannot copy the thread pool
|
||||
|
@ -84,38 +84,9 @@ private:
|
||||
/// Returns the instance of VIEW, used by the application.
|
||||
KIGFX::VIEW* getView();
|
||||
|
||||
/// Saves the state of key modifiers (Alt, Ctrl and so on).
|
||||
static int decodeModifiers( const wxKeyboardState* aState )
|
||||
{
|
||||
int mods = 0;
|
||||
int wxmods = aState->GetModifiers();
|
||||
|
||||
if( wxmods & wxMOD_ALTGR )
|
||||
mods |= MD_ALTGR;
|
||||
else
|
||||
{
|
||||
if( wxmods & wxMOD_CONTROL )
|
||||
mods |= MD_CTRL;
|
||||
|
||||
if( wxmods & wxMOD_ALT )
|
||||
mods |= MD_ALT;
|
||||
}
|
||||
|
||||
if( wxmods & wxMOD_SHIFT )
|
||||
mods |= MD_SHIFT;
|
||||
|
||||
#ifdef wxMOD_META
|
||||
if( wxmods & wxMOD_META )
|
||||
mods |= MD_META;
|
||||
#endif
|
||||
|
||||
#ifdef wxMOD_WIN
|
||||
if( wxmods & wxMOD_WIN )
|
||||
mods |= MD_SUPER;
|
||||
#endif
|
||||
|
||||
return mods;
|
||||
}
|
||||
/// Returns the state of key modifiers (Alt, Ctrl and so on) as OR'ed list
|
||||
/// of bits (MD_CTRL, MD_ALT ...)
|
||||
static int decodeModifiers( const wxKeyboardState* aState );
|
||||
|
||||
private:
|
||||
/// The time threshold for a mouse button press that distinguishes between a single mouse
|
||||
|
@ -26,11 +26,14 @@
|
||||
#include <bitmaps.h>
|
||||
#include <widgets/std_bitmap_button.h>
|
||||
#include <widgets/ui_common.h>
|
||||
#include <algorithm>
|
||||
#include <wx_filename.h>
|
||||
#include <wx/dir.h>
|
||||
#include <wx/dirdlg.h>
|
||||
#include <wx/settings.h>
|
||||
#include <wx/bitmap.h>
|
||||
#include <wx/image.h>
|
||||
#include <wx/math.h>
|
||||
#include "template_default_html.h"
|
||||
|
||||
// Welcome / fallback HTML now provided by template_default_html.h
|
||||
@ -99,7 +102,24 @@ void TEMPLATE_WIDGET::SetTemplate( PROJECT_TEMPLATE* aTemplate )
|
||||
wxBitmap* icon = aTemplate->GetIcon();
|
||||
|
||||
if( icon && icon->IsOk() )
|
||||
m_bitmapIcon->SetBitmap( *icon );
|
||||
{
|
||||
wxSize maxSize = m_bitmapIcon->GetSize();
|
||||
|
||||
if( icon->GetWidth() > maxSize.x || icon->GetHeight() > maxSize.y )
|
||||
{
|
||||
double scale = std::min( (double) maxSize.x / icon->GetWidth(),
|
||||
(double) maxSize.y / icon->GetHeight() );
|
||||
wxImage image = icon->ConvertToImage();
|
||||
int w = wxRound( icon->GetWidth() * scale );
|
||||
int h = wxRound( icon->GetHeight() * scale );
|
||||
image.Rescale( w, h, wxIMAGE_QUALITY_HIGH );
|
||||
m_bitmapIcon->SetBitmap( wxBitmap( image ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_bitmapIcon->SetBitmap( *icon );
|
||||
}
|
||||
}
|
||||
else
|
||||
m_bitmapIcon->SetBitmap( KiBitmap( BITMAPS::icon_kicad ) );
|
||||
}
|
||||
|
@ -636,7 +636,11 @@ void PROJECT_TREE_PANE::ReCreateTreePrj()
|
||||
std::lock_guard<std::mutex> lock2( m_gitTreeCacheMutex );
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
|
||||
tp.wait_for_tasks();
|
||||
while( tp.get_tasks_running() )
|
||||
{
|
||||
tp.wait_for( std::chrono::milliseconds( 250 ) );
|
||||
}
|
||||
|
||||
m_gitStatusTimer.Stop();
|
||||
m_gitSyncTimer.Stop();
|
||||
m_gitTreeCache.clear();
|
||||
@ -2293,25 +2297,21 @@ void PROJECT_TREE_PANE::onGitSyncTimer( wxTimerEvent& aEvent )
|
||||
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
|
||||
tp.push_task(
|
||||
[this]()
|
||||
{
|
||||
KIGIT_COMMON* gitCommon = m_TreeProject->GitCommon();
|
||||
tp.submit_task( [this]()
|
||||
{
|
||||
KIGIT_COMMON* gitCommon = m_TreeProject->GitCommon();
|
||||
|
||||
if( !gitCommon )
|
||||
{
|
||||
wxLogTrace( traceGit, "onGitSyncTimer: No git repository found" );
|
||||
return;
|
||||
}
|
||||
if( !gitCommon )
|
||||
{
|
||||
wxLogTrace( traceGit, "onGitSyncTimer: No git repository found" );
|
||||
return;
|
||||
}
|
||||
|
||||
GIT_PULL_HANDLER handler( gitCommon );
|
||||
handler.PerformFetch();
|
||||
GIT_PULL_HANDLER handler( gitCommon );
|
||||
handler.PerformFetch();
|
||||
|
||||
CallAfter( [this]()
|
||||
{
|
||||
gitStatusTimerHandler();
|
||||
} );
|
||||
} );
|
||||
CallAfter( [this]() { gitStatusTimerHandler(); } );
|
||||
} );
|
||||
|
||||
if( gitSettings.updatInterval > 0 )
|
||||
{
|
||||
@ -2327,11 +2327,7 @@ void PROJECT_TREE_PANE::gitStatusTimerHandler()
|
||||
updateTreeCache();
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
|
||||
tp.push_task(
|
||||
[this]()
|
||||
{
|
||||
updateGitStatusIconMap();
|
||||
} );
|
||||
tp.submit_task( [this]() { updateGitStatusIconMap(); } );
|
||||
}
|
||||
|
||||
void PROJECT_TREE_PANE::onGitStatusTimer( wxTimerEvent& aEvent )
|
||||
|
@ -274,5 +274,5 @@ void UPDATE_MANAGER::CheckForUpdate( wxWindow* aNoticeParent )
|
||||
};
|
||||
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
m_updateTask = tp.submit( update_check );
|
||||
m_updateTask = tp.submit_task( update_check );
|
||||
}
|
||||
|
@ -25,6 +25,7 @@
|
||||
|
||||
class wxChoice;
|
||||
class wxNonOwnedWindow;
|
||||
class wxTopLevelWindow;
|
||||
class wxWindow;
|
||||
|
||||
namespace KIPLATFORM
|
||||
@ -71,6 +72,8 @@ namespace KIPLATFORM
|
||||
*/
|
||||
void ReparentModal( wxNonOwnedWindow* aWindow );
|
||||
|
||||
void ReparentWindow( wxNonOwnedWindow* aWindow, wxTopLevelWindow* aParent );
|
||||
|
||||
/*
|
||||
* An ugly hack to fix an issue on OSX: cmd+c closes the dialog instead of copying the
|
||||
* text if a button with wxID_CANCEL is used in a wxStdDialogButtonSizer created by
|
||||
|
@ -154,6 +154,12 @@ void KIPLATFORM::UI::ReparentModal( wxNonOwnedWindow* aWindow )
|
||||
}
|
||||
|
||||
|
||||
void KIPLATFORM::UI::ReparentWindow( wxNonOwnedWindow* aWindow, wxTopLevelWindow* aParent )
|
||||
{
|
||||
// Not needed on this platform (only relevant for macOS child window ordering)
|
||||
}
|
||||
|
||||
|
||||
void KIPLATFORM::UI::FixupCancelButtonCmdKeyCollision( wxWindow *aWindow )
|
||||
{
|
||||
// Not needed on this platform
|
||||
|
@ -88,6 +88,12 @@ void KIPLATFORM::UI::ReparentModal( wxNonOwnedWindow* aWindow )
|
||||
}
|
||||
|
||||
|
||||
void KIPLATFORM::UI::ReparentWindow( wxNonOwnedWindow* aWindow, wxTopLevelWindow* aParent )
|
||||
{
|
||||
// Not needed on this platform (used only on macOS for child window ordering)
|
||||
}
|
||||
|
||||
|
||||
void KIPLATFORM::UI::FixupCancelButtonCmdKeyCollision( wxWindow *aWindow )
|
||||
{
|
||||
// Not needed on this platform
|
||||
|
@ -103,24 +103,21 @@ void KIPLATFORM::UI::EnsureVisible( wxWindow* aWindow )
|
||||
}
|
||||
|
||||
|
||||
void KIPLATFORM::UI::ReparentModal( wxNonOwnedWindow* aWindow )
|
||||
void KIPLATFORM::UI::ReparentWindow( wxNonOwnedWindow* aWindow, wxTopLevelWindow* aParent )
|
||||
{
|
||||
wxTopLevelWindow* parent =
|
||||
static_cast<wxTopLevelWindow*>( wxGetTopLevelParent( aWindow->GetParent() ) );
|
||||
|
||||
// Quietly return if no parent is found
|
||||
if( !parent )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
NSWindow* parentWindow = parent->GetWXWindow();
|
||||
NSWindow* parentWindow = aParent->GetWXWindow();
|
||||
NSWindow* theWindow = aWindow->GetWXWindow();
|
||||
|
||||
if( parentWindow && theWindow )
|
||||
{
|
||||
[parentWindow addChildWindow:theWindow ordered:NSWindowAbove];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void KIPLATFORM::UI::ReparentModal( wxNonOwnedWindow* aWindow )
|
||||
{
|
||||
// Quietly return if no parent is found
|
||||
if( wxTopLevelWindow* parent = static_cast<wxTopLevelWindow*>( wxGetTopLevelParent( aWindow->GetParent() ) ) )
|
||||
ReparentWindow( aWindow, parent );
|
||||
}
|
||||
|
||||
|
||||
|
@ -1114,7 +1114,7 @@ void BOARD::CacheTriangulation( PROGRESS_REPORTER* aReporter, const std::vector<
|
||||
};
|
||||
|
||||
for( ZONE* zone : zones )
|
||||
returns.emplace_back( tp.submit( cache_zones, zone ) );
|
||||
returns.emplace_back( tp.submit_task( [cache_zones, zone] { return cache_zones( zone ); } ) );
|
||||
|
||||
// Finalize the triangulation threads
|
||||
for( const std::future<size_t>& ret : returns )
|
||||
|
@ -270,24 +270,21 @@ void CN_CONNECTIVITY_ALGO::searchConnections()
|
||||
{
|
||||
std::vector<std::future<size_t>> returns( dirtyItems.size() );
|
||||
|
||||
auto conn_lambda =
|
||||
[&dirtyItems]( size_t aItem, CN_LIST* aItemList,
|
||||
PROGRESS_REPORTER* aReporter) -> size_t
|
||||
{
|
||||
if( aReporter && aReporter->IsCancelled() )
|
||||
for( size_t ii = 0; ii < dirtyItems.size(); ++ii )
|
||||
{
|
||||
returns[ii] = tp.submit_task(
|
||||
[&dirtyItems, ii, this] () ->size_t {
|
||||
if( m_progressReporter && m_progressReporter->IsCancelled() )
|
||||
return 0;
|
||||
|
||||
CN_VISITOR visitor( dirtyItems[aItem] );
|
||||
aItemList->FindNearby( dirtyItems[aItem], visitor );
|
||||
CN_VISITOR visitor( dirtyItems[ii] );
|
||||
m_itemList.FindNearby( dirtyItems[ii], visitor );
|
||||
|
||||
if( aReporter )
|
||||
aReporter->AdvanceProgress();
|
||||
if( m_progressReporter )
|
||||
m_progressReporter->AdvanceProgress();
|
||||
|
||||
return 1;
|
||||
};
|
||||
|
||||
for( size_t ii = 0; ii < dirtyItems.size(); ++ii )
|
||||
returns[ii] = tp.submit( conn_lambda, ii, &m_itemList, m_progressReporter );
|
||||
return 1; } );
|
||||
}
|
||||
|
||||
for( const std::future<size_t>& ret : returns )
|
||||
{
|
||||
@ -490,7 +487,11 @@ void CN_CONNECTIVITY_ALGO::Build( BOARD* aBoard, PROGRESS_REPORTER* aReporter )
|
||||
};
|
||||
|
||||
for( size_t ii = 0; ii < zitems.size(); ++ii )
|
||||
returns[ii] = tp.submit( cache_zones, zitems[ii] );
|
||||
{
|
||||
CN_ZONE_LAYER* ptr = zitems[ii];
|
||||
returns[ii] = tp.submit_task(
|
||||
[cache_zones, ptr] { return cache_zones( ptr ); } );
|
||||
}
|
||||
|
||||
for( const std::future<size_t>& ret : returns )
|
||||
{
|
||||
|
@ -191,19 +191,17 @@ void CONNECTIVITY_DATA::updateRatsnest()
|
||||
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
|
||||
auto results = tp.parallelize_loop( dirty_nets.size(),
|
||||
[&]( const int a, const int b )
|
||||
auto results = tp.submit_loop( 0, dirty_nets.size(),
|
||||
[&]( const int ii )
|
||||
{
|
||||
for( int ii = a; ii < b; ++ii )
|
||||
dirty_nets[ii]->UpdateNet();
|
||||
dirty_nets[ii]->UpdateNet();
|
||||
} );
|
||||
results.wait();
|
||||
|
||||
auto results2 = tp.parallelize_loop( dirty_nets.size(),
|
||||
[&]( const int a, const int b )
|
||||
auto results2 = tp.submit_loop( 0, dirty_nets.size(),
|
||||
[&]( const int ii )
|
||||
{
|
||||
for( int ii = a; ii < b; ++ii )
|
||||
dirty_nets[ii]->OptimizeRNEdges();
|
||||
dirty_nets[ii]->OptimizeRNEdges();
|
||||
} );
|
||||
results2.wait();
|
||||
|
||||
@ -370,11 +368,10 @@ void CONNECTIVITY_DATA::ComputeLocalRatsnest( const std::vector<BOARD_ITEM*>& aI
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
size_t num_nets = std::min( m_nets.size(), aDynamicData->m_nets.size() );
|
||||
|
||||
auto results = tp.parallelize_loop( 1, num_nets,
|
||||
[&]( const int a, const int b)
|
||||
auto results = tp.submit_loop( 1, num_nets,
|
||||
[&]( const int ii )
|
||||
{
|
||||
for( int ii = a; ii < b; ++ii )
|
||||
update_lambda( ii );
|
||||
update_lambda( ii );
|
||||
});
|
||||
results.wait();
|
||||
|
||||
|
@ -46,8 +46,10 @@
|
||||
#include <wx/wupdlock.h>
|
||||
#include <widgets/appearance_controls.h>
|
||||
#include <widgets/ui_common.h>
|
||||
#include <widgets/std_bitmap_button.h>
|
||||
#include <widgets/progress_reporter_base.h>
|
||||
#include <widgets/wx_html_report_box.h>
|
||||
#include <view/view_controls.h>
|
||||
#include <dialogs/panel_setup_rules_base.h>
|
||||
#include <dialogs/dialog_text_entry.h>
|
||||
#include <tools/drc_tool.h>
|
||||
@ -74,6 +76,9 @@ DIALOG_DRC::DIALOG_DRC( PCB_EDIT_FRAME* aEditorFrame, wxWindow* aParent ) :
|
||||
m_running( false ),
|
||||
m_drcRun( false ),
|
||||
m_footprintTestsRun( false ),
|
||||
m_report_all_track_errors( false ),
|
||||
m_crossprobe( true ),
|
||||
m_scroll_on_crossprobe( true ),
|
||||
m_markersTreeModel( nullptr ),
|
||||
m_unconnectedTreeModel( nullptr ),
|
||||
m_fpWarningsTreeModel( nullptr ),
|
||||
@ -85,6 +90,15 @@ DIALOG_DRC::DIALOG_DRC( PCB_EDIT_FRAME* aEditorFrame, wxWindow* aParent ) :
|
||||
m_frame = aEditorFrame;
|
||||
m_currentBoard = m_frame->GetBoard();
|
||||
|
||||
m_bMenu->SetBitmap( KiBitmapBundle( BITMAPS::config ) );
|
||||
|
||||
if( PCBNEW_SETTINGS* cfg = m_frame->GetPcbNewSettings() )
|
||||
{
|
||||
m_report_all_track_errors = cfg->m_DRCDialog.report_all_track_errors;
|
||||
m_crossprobe = cfg->m_DRCDialog.crossprobe;
|
||||
m_scroll_on_crossprobe = cfg->m_DRCDialog.scroll_on_crossprobe;
|
||||
}
|
||||
|
||||
m_messages->SetImmediateMode();
|
||||
|
||||
m_markersProvider = std::make_shared<DRC_ITEMS_PROVIDER>( m_currentBoard,
|
||||
@ -147,6 +161,13 @@ DIALOG_DRC::DIALOG_DRC( PCB_EDIT_FRAME* aEditorFrame, wxWindow* aParent ) :
|
||||
|
||||
DIALOG_DRC::~DIALOG_DRC()
|
||||
{
|
||||
if( PCBNEW_SETTINGS* cfg = m_frame->GetPcbNewSettings() )
|
||||
{
|
||||
cfg->m_DRCDialog.report_all_track_errors = m_report_all_track_errors;
|
||||
cfg->m_DRCDialog.crossprobe = m_crossprobe;
|
||||
cfg->m_DRCDialog.scroll_on_crossprobe = m_scroll_on_crossprobe;
|
||||
}
|
||||
|
||||
m_frame->ClearFocus();
|
||||
|
||||
g_lastDRCBoard = m_currentBoard;
|
||||
@ -240,6 +261,46 @@ int DIALOG_DRC::getSeverities()
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_DRC::OnMenu( wxCommandEvent& event )
|
||||
{
|
||||
// Build a pop menu:
|
||||
wxMenu menu;
|
||||
|
||||
menu.Append( 4205, _( "Report All Errors for Each Track" ),
|
||||
_( "If unchecked, only the first error will be reported for each track" ),
|
||||
wxITEM_CHECK );
|
||||
menu.Check( 4205, m_report_all_track_errors );
|
||||
|
||||
menu.AppendSeparator();
|
||||
|
||||
menu.Append( 4206, _( "Cross-probe Selected Items" ),
|
||||
_( "Highlight corresponding items on canvas when selected in the DRC list" ),
|
||||
wxITEM_CHECK );
|
||||
menu.Check( 4206, m_crossprobe );
|
||||
|
||||
menu.Append( 4207, _( "Center on Cross-probe" ),
|
||||
_( "When cross-probing, scroll the canvas so that the item is visible" ),
|
||||
wxITEM_CHECK );
|
||||
menu.Check( 4207, m_scroll_on_crossprobe );
|
||||
|
||||
// menu_id is the selected submenu id from the popup menu or wxID_NONE
|
||||
int menu_id = m_bMenu->GetPopupMenuSelectionFromUser( menu );
|
||||
|
||||
if( menu_id == 0 || menu_id == 4205 )
|
||||
{
|
||||
m_report_all_track_errors = !m_report_all_track_errors;
|
||||
}
|
||||
else if( menu_id == 2 || menu_id == 4206 )
|
||||
{
|
||||
m_crossprobe = !m_crossprobe;
|
||||
}
|
||||
else if( menu_id == 3 || menu_id == 4207 )
|
||||
{
|
||||
m_scroll_on_crossprobe = !m_scroll_on_crossprobe;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void DIALOG_DRC::OnErrorLinkClicked( wxHtmlLinkEvent& event )
|
||||
{
|
||||
m_frame->ShowBoardSetupDialog( _( "Custom Rules" ) );
|
||||
@ -252,7 +313,6 @@ void DIALOG_DRC::OnRunDRCClick( wxCommandEvent& aEvent )
|
||||
DRC_TOOL* drcTool = toolMgr->GetTool<DRC_TOOL>();
|
||||
ZONE_FILLER_TOOL* zoneFillerTool = toolMgr->GetTool<ZONE_FILLER_TOOL>();
|
||||
bool refillZones = m_cbRefillZones->GetValue();
|
||||
bool reportAllTrackErrors = m_cbReportAllTrackErrors->GetValue();
|
||||
bool testFootprints = m_cbTestFootprints->GetValue();
|
||||
|
||||
if( zoneFillerTool->IsBusy() )
|
||||
@ -326,7 +386,7 @@ void DIALOG_DRC::OnRunDRCClick( wxCommandEvent& aEvent )
|
||||
|
||||
{
|
||||
wxBusyCursor dummy;
|
||||
drcTool->RunTests( this, refillZones, reportAllTrackErrors, testFootprints );
|
||||
drcTool->RunTests( this, refillZones, m_report_all_track_errors, testFootprints );
|
||||
}
|
||||
|
||||
if( m_cancelled )
|
||||
@ -378,6 +438,12 @@ void DIALOG_DRC::UpdateData()
|
||||
|
||||
void DIALOG_DRC::OnDRCItemSelected( wxDataViewEvent& aEvent )
|
||||
{
|
||||
if( !m_crossprobe )
|
||||
{
|
||||
aEvent.Skip();
|
||||
return;
|
||||
}
|
||||
|
||||
BOARD* board = m_frame->GetBoard();
|
||||
RC_TREE_NODE* node = RC_TREE_MODEL::ToNode( aEvent.GetItem() );
|
||||
|
||||
@ -408,11 +474,8 @@ void DIALOG_DRC::OnDRCItemSelected( wxDataViewEvent& aEvent )
|
||||
{
|
||||
VECTOR2D selectedItemPos = aSelectedMarkerItem->GetPosition() / PCB_IU_PER_MM;
|
||||
VECTOR2D unSelectedItemPos = aUnSelectedMarkerItem->GetPosition() / PCB_IU_PER_MM;
|
||||
|
||||
double dist = selectedItemPos.Distance( unSelectedItemPos );
|
||||
|
||||
double minimumMarkerSeparationDistance =
|
||||
ADVANCED_CFG::GetCfg().m_MinimumMarkerSeparationDistance;
|
||||
double dist = selectedItemPos.Distance( unSelectedItemPos );
|
||||
double minimumMarkerSeparationDistance = ADVANCED_CFG::GetCfg().m_MinimumMarkerSeparationDistance;
|
||||
|
||||
return dist <= minimumMarkerSeparationDistance;
|
||||
};
|
||||
@ -430,7 +493,7 @@ void DIALOG_DRC::OnDRCItemSelected( wxDataViewEvent& aEvent )
|
||||
if( rc_item->GetErrorCode() == DRCE_UNRESOLVED_VARIABLE
|
||||
&& rc_item->GetParent()->GetMarkerType() == MARKER_BASE::MARKER_DRAWING_SHEET )
|
||||
{
|
||||
m_frame->FocusOnLocation( node->m_RcItem->GetParent()->GetPos() );
|
||||
m_frame->FocusOnLocation( node->m_RcItem->GetParent()->GetPos(), m_scroll_on_crossprobe );
|
||||
|
||||
aEvent.Skip();
|
||||
return;
|
||||
@ -512,7 +575,7 @@ void DIALOG_DRC::OnDRCItemSelected( wxDataViewEvent& aEvent )
|
||||
|
||||
if( item->Type() == PCB_ZONE_T )
|
||||
{
|
||||
m_frame->FocusOnItem( item, principalLayer );
|
||||
m_frame->FocusOnItem( item, principalLayer, m_scroll_on_crossprobe );
|
||||
|
||||
m_frame->GetBoard()->GetConnectivity()->RunOnUnconnectedEdges(
|
||||
[&]( CN_EDGE& edge )
|
||||
@ -541,7 +604,7 @@ void DIALOG_DRC::OnDRCItemSelected( wxDataViewEvent& aEvent )
|
||||
: edge.GetTargetPos();
|
||||
}
|
||||
|
||||
m_frame->FocusOnLocation( focusPos );
|
||||
m_frame->FocusOnLocation( focusPos, m_scroll_on_crossprobe );
|
||||
m_frame->RefreshCanvas();
|
||||
|
||||
return false;
|
||||
@ -552,7 +615,7 @@ void DIALOG_DRC::OnDRCItemSelected( wxDataViewEvent& aEvent )
|
||||
}
|
||||
else
|
||||
{
|
||||
m_frame->FocusOnItem( item, principalLayer );
|
||||
m_frame->FocusOnItem( item, principalLayer, m_scroll_on_crossprobe );
|
||||
}
|
||||
}
|
||||
else if( rc_item->GetErrorCode() == DRCE_DIFF_PAIR_UNCOUPLED_LENGTH_TOO_LONG )
|
||||
@ -579,7 +642,7 @@ void DIALOG_DRC::OnDRCItemSelected( wxDataViewEvent& aEvent )
|
||||
items.push_back( item );
|
||||
}
|
||||
|
||||
m_frame->FocusOnItems( items, principalLayer );
|
||||
m_frame->FocusOnItems( items, principalLayer, m_scroll_on_crossprobe );
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -594,11 +657,11 @@ void DIALOG_DRC::OnDRCItemSelected( wxDataViewEvent& aEvent )
|
||||
}
|
||||
|
||||
items.push_back( item );
|
||||
m_frame->FocusOnItems( items, principalLayer );
|
||||
m_frame->FocusOnItems( items, principalLayer, m_scroll_on_crossprobe );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_frame->FocusOnItem( item, principalLayer );
|
||||
m_frame->FocusOnItem( item, principalLayer, m_scroll_on_crossprobe );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -77,6 +77,7 @@ private:
|
||||
|
||||
bool TransferDataToWindow() override;
|
||||
|
||||
void OnMenu( wxCommandEvent& aEvent ) override;
|
||||
void OnDRCItemSelected( wxDataViewEvent& aEvent ) override;
|
||||
void OnDRCItemDClick( wxDataViewEvent& aEvent ) override;
|
||||
void OnDRCItemRClick( wxDataViewEvent& aEvent ) override;
|
||||
@ -117,6 +118,10 @@ private:
|
||||
bool m_drcRun;
|
||||
bool m_footprintTestsRun;
|
||||
|
||||
bool m_report_all_track_errors;
|
||||
bool m_crossprobe;
|
||||
bool m_scroll_on_crossprobe;
|
||||
|
||||
wxString m_markersTitleTemplate;
|
||||
wxString m_unconnectedTitleTemplate;
|
||||
wxString m_footprintsTitleTemplate;
|
||||
|
@ -5,6 +5,7 @@
|
||||
// PLEASE DO *NOT* EDIT THIS FILE!
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "widgets/std_bitmap_button.h"
|
||||
#include "widgets/wx_html_report_box.h"
|
||||
|
||||
#include "dialog_drc_base.h"
|
||||
@ -24,30 +25,43 @@ DIALOG_DRC_BASE::DIALOG_DRC_BASE( wxWindow* parent, wxWindowID id, const wxStrin
|
||||
wxBoxSizer* bSizer12;
|
||||
bSizer12 = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_cbRefillZones = new wxCheckBox( this, wxID_ANY, _("Refill all zones before performing DRC"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_cbRefillZones->SetValue(true);
|
||||
bSizer12->Add( m_cbRefillZones, 0, wxALL, 5 );
|
||||
|
||||
m_cbReportAllTrackErrors = new wxCheckBox( this, wxID_ANY, _("Report all errors for each track"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_cbReportAllTrackErrors->SetToolTip( _("If selected, all DRC violations for tracks will be reported. This can be slow for complicated designs.\n\nIf unselected, only the first DRC violation will be reported for each track connection.") );
|
||||
|
||||
bSizer12->Add( m_cbReportAllTrackErrors, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
bSizerOptions->Add( bSizer12, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
wxBoxSizer* bSizerOptSettings;
|
||||
bSizerOptSettings = new wxBoxSizer( wxVERTICAL );
|
||||
|
||||
m_cbTestFootprints = new wxCheckBox( this, wxID_ANY, _("Test for parity between PCB and schematic"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
bSizerOptSettings->Add( m_cbTestFootprints, 0, wxALL, 5 );
|
||||
|
||||
|
||||
bSizerOptions->Add( bSizerOptSettings, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
|
||||
m_MainSizer->Add( bSizerOptions, 0, wxEXPAND|wxTOP|wxBOTTOM|wxLEFT, 3 );
|
||||
|
||||
wxGridBagSizer* gbSizerOptions;
|
||||
gbSizerOptions = new wxGridBagSizer( 0, 0 );
|
||||
gbSizerOptions->SetFlexibleDirection( wxBOTH );
|
||||
gbSizerOptions->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED );
|
||||
|
||||
m_cbRefillZones = new wxCheckBox( this, wxID_ANY, _("Refill all zones before performing DRC"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
m_cbRefillZones->SetValue(true);
|
||||
gbSizerOptions->Add( m_cbRefillZones, wxGBPosition( 0, 0 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_cbTestFootprints = new wxCheckBox( this, wxID_ANY, _("Test for parity between PCB and schematic"), wxDefaultPosition, wxDefaultSize, 0 );
|
||||
gbSizerOptions->Add( m_cbTestFootprints, wxGBPosition( 0, 1 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 );
|
||||
|
||||
m_bMenu = new STD_BITMAP_BUTTON( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, wxBU_AUTODRAW|0 );
|
||||
m_bMenu->SetMinSize( wxSize( 30,30 ) );
|
||||
|
||||
gbSizerOptions->Add( m_bMenu, wxGBPosition( 0, 2 ), wxGBSpan( 2, 1 ), wxALIGN_CENTER_VERTICAL|wxRIGHT, 5 );
|
||||
|
||||
|
||||
gbSizerOptions->AddGrowableCol( 0 );
|
||||
gbSizerOptions->AddGrowableCol( 1 );
|
||||
gbSizerOptions->AddGrowableRow( 0 );
|
||||
gbSizerOptions->AddGrowableRow( 1 );
|
||||
|
||||
m_MainSizer->Add( gbSizerOptions, 0, wxEXPAND|wxTOP|wxLEFT, 10 );
|
||||
|
||||
m_runningResultsBook = new wxSimplebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
|
||||
running = new wxPanel( m_runningResultsBook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
|
||||
wxBoxSizer* bSizer14;
|
||||
@ -242,6 +256,7 @@ DIALOG_DRC_BASE::DIALOG_DRC_BASE( wxWindow* parent, wxWindowID id, const wxStrin
|
||||
// Connect Events
|
||||
this->Connect( wxEVT_ACTIVATE, wxActivateEventHandler( DIALOG_DRC_BASE::OnActivateDlg ) );
|
||||
this->Connect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_DRC_BASE::OnClose ) );
|
||||
m_bMenu->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_BASE::OnMenu ), NULL, this );
|
||||
m_messages->Connect( wxEVT_COMMAND_HTML_LINK_CLICKED, wxHtmlLinkEventHandler( DIALOG_DRC_BASE::OnErrorLinkClicked ), NULL, this );
|
||||
m_Notebook->Connect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( DIALOG_DRC_BASE::OnChangingNotebookPage ), NULL, this );
|
||||
m_markerDataView->Connect( wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler( DIALOG_DRC_BASE::OnDRCItemDClick ), NULL, this );
|
||||
@ -271,6 +286,7 @@ DIALOG_DRC_BASE::~DIALOG_DRC_BASE()
|
||||
// Disconnect Events
|
||||
this->Disconnect( wxEVT_ACTIVATE, wxActivateEventHandler( DIALOG_DRC_BASE::OnActivateDlg ) );
|
||||
this->Disconnect( wxEVT_CLOSE_WINDOW, wxCloseEventHandler( DIALOG_DRC_BASE::OnClose ) );
|
||||
m_bMenu->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( DIALOG_DRC_BASE::OnMenu ), NULL, this );
|
||||
m_messages->Disconnect( wxEVT_COMMAND_HTML_LINK_CLICKED, wxHtmlLinkEventHandler( DIALOG_DRC_BASE::OnErrorLinkClicked ), NULL, this );
|
||||
m_Notebook->Disconnect( wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, wxNotebookEventHandler( DIALOG_DRC_BASE::OnChangingNotebookPage ), NULL, this );
|
||||
m_markerDataView->Disconnect( wxEVT_COMMAND_DATAVIEW_ITEM_ACTIVATED, wxDataViewEventHandler( DIALOG_DRC_BASE::OnDRCItemDClick ), NULL, this );
|
||||
|
@ -84,136 +84,6 @@
|
||||
<property name="name">bSizer12</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="false">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="false">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer">0</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position">0</property>
|
||||
<property name="aui_row">0</property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">1</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="drag_accept_files">0</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Refill all zones before performing DRC</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_cbRefillZones</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="false">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxBOTTOM|wxRIGHT|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="false">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer">0</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position">0</property>
|
||||
<property name="aui_row">0</property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="drag_accept_files">0</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Report all errors for each track</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_cbReportAllTrackErrors</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip">If selected, all DRC violations for tracks will be reported. This can be slow for complicated designs.

If unselected, only the first DRC violation will be reported for each track connection.</property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="true">
|
||||
@ -225,71 +95,237 @@
|
||||
<property name="name">bSizerOptSettings</property>
|
||||
<property name="orient">wxVERTICAL</property>
|
||||
<property name="permission">none</property>
|
||||
<object class="sizeritem" expanded="false">
|
||||
<property name="border">5</property>
|
||||
<property name="flag">wxALL</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxCheckBox" expanded="false">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer">0</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position">0</property>
|
||||
<property name="aui_row">0</property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="drag_accept_files">0</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Test for parity between PCB and schematic</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_cbTestFootprints</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="sizeritem" expanded="true">
|
||||
<property name="border">10</property>
|
||||
<property name="flag">wxEXPAND|wxTOP|wxLEFT</property>
|
||||
<property name="proportion">0</property>
|
||||
<object class="wxGridBagSizer" expanded="true">
|
||||
<property name="empty_cell_size"></property>
|
||||
<property name="flexible_direction">wxBOTH</property>
|
||||
<property name="growablecols">0,1</property>
|
||||
<property name="growablerows">0,1</property>
|
||||
<property name="hgap">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="name">gbSizerOptions</property>
|
||||
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
|
||||
<property name="permission">none</property>
|
||||
<property name="vgap">0</property>
|
||||
<object class="gbsizeritem" expanded="true">
|
||||
<property name="border">5</property>
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">0</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT</property>
|
||||
<property name="row">0</property>
|
||||
<property name="rowspan">1</property>
|
||||
<object class="wxCheckBox" expanded="false">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer">0</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position">0</property>
|
||||
<property name="aui_row">0</property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">1</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="drag_accept_files">0</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Refill all zones before performing DRC</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_cbRefillZones</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="gbsizeritem" expanded="true">
|
||||
<property name="border">5</property>
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">1</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT</property>
|
||||
<property name="row">0</property>
|
||||
<property name="rowspan">1</property>
|
||||
<object class="wxCheckBox" expanded="false">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer">0</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position">0</property>
|
||||
<property name="aui_row">0</property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="checked">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="drag_accept_files">0</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Test for parity between PCB and schematic</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size"></property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_cbTestFootprints</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
</object>
|
||||
</object>
|
||||
<object class="gbsizeritem" expanded="true">
|
||||
<property name="border">5</property>
|
||||
<property name="colspan">1</property>
|
||||
<property name="column">2</property>
|
||||
<property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT</property>
|
||||
<property name="row">0</property>
|
||||
<property name="rowspan">2</property>
|
||||
<object class="wxBitmapButton" expanded="true">
|
||||
<property name="BottomDockable">1</property>
|
||||
<property name="LeftDockable">1</property>
|
||||
<property name="RightDockable">1</property>
|
||||
<property name="TopDockable">1</property>
|
||||
<property name="aui_layer">0</property>
|
||||
<property name="aui_name"></property>
|
||||
<property name="aui_position">0</property>
|
||||
<property name="aui_row">0</property>
|
||||
<property name="auth_needed">0</property>
|
||||
<property name="best_size"></property>
|
||||
<property name="bg"></property>
|
||||
<property name="bitmap"></property>
|
||||
<property name="caption"></property>
|
||||
<property name="caption_visible">1</property>
|
||||
<property name="center_pane">0</property>
|
||||
<property name="close_button">1</property>
|
||||
<property name="context_help"></property>
|
||||
<property name="context_menu">1</property>
|
||||
<property name="current"></property>
|
||||
<property name="default">0</property>
|
||||
<property name="default_pane">0</property>
|
||||
<property name="disabled"></property>
|
||||
<property name="dock">Dock</property>
|
||||
<property name="dock_fixed">0</property>
|
||||
<property name="docking">Left</property>
|
||||
<property name="drag_accept_files">0</property>
|
||||
<property name="enabled">1</property>
|
||||
<property name="fg"></property>
|
||||
<property name="floatable">1</property>
|
||||
<property name="focus"></property>
|
||||
<property name="font"></property>
|
||||
<property name="gripper">0</property>
|
||||
<property name="hidden">0</property>
|
||||
<property name="id">wxID_ANY</property>
|
||||
<property name="label">Refresh Grouping</property>
|
||||
<property name="margins"></property>
|
||||
<property name="markup">0</property>
|
||||
<property name="max_size"></property>
|
||||
<property name="maximize_button">0</property>
|
||||
<property name="maximum_size"></property>
|
||||
<property name="min_size"></property>
|
||||
<property name="minimize_button">0</property>
|
||||
<property name="minimum_size">30,30</property>
|
||||
<property name="moveable">1</property>
|
||||
<property name="name">m_bMenu</property>
|
||||
<property name="pane_border">1</property>
|
||||
<property name="pane_position"></property>
|
||||
<property name="pane_size"></property>
|
||||
<property name="permission">protected</property>
|
||||
<property name="pin_button">1</property>
|
||||
<property name="pos"></property>
|
||||
<property name="position"></property>
|
||||
<property name="pressed"></property>
|
||||
<property name="resize">Resizable</property>
|
||||
<property name="show">1</property>
|
||||
<property name="size"></property>
|
||||
<property name="style"></property>
|
||||
<property name="subclass">STD_BITMAP_BUTTON; widgets/std_bitmap_button.h; forward_declare</property>
|
||||
<property name="toolbar_pane">0</property>
|
||||
<property name="tooltip"></property>
|
||||
<property name="validator_data_type"></property>
|
||||
<property name="validator_style">wxFILTER_NONE</property>
|
||||
<property name="validator_type">wxDefaultValidator</property>
|
||||
<property name="validator_variable"></property>
|
||||
<property name="window_extra_style"></property>
|
||||
<property name="window_name"></property>
|
||||
<property name="window_style"></property>
|
||||
<event name="OnButtonClick">OnMenu</event>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
|
@ -10,22 +10,26 @@
|
||||
#include <wx/artprov.h>
|
||||
#include <wx/xrc/xmlres.h>
|
||||
#include <wx/intl.h>
|
||||
class STD_BITMAP_BUTTON;
|
||||
class WX_HTML_REPORT_BOX;
|
||||
|
||||
#include "dialog_shim.h"
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/gdicmn.h>
|
||||
#include <wx/string.h>
|
||||
#include <wx/checkbox.h>
|
||||
#include <wx/gdicmn.h>
|
||||
#include <wx/font.h>
|
||||
#include <wx/colour.h>
|
||||
#include <wx/settings.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/html/htmlwin.h>
|
||||
#include <wx/gauge.h>
|
||||
#include <wx/panel.h>
|
||||
#include <wx/bmpbuttn.h>
|
||||
#include <wx/bitmap.h>
|
||||
#include <wx/image.h>
|
||||
#include <wx/icon.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/gbsizer.h>
|
||||
#include <wx/html/htmlwin.h>
|
||||
#include <wx/gauge.h>
|
||||
#include <wx/panel.h>
|
||||
#include <wx/notebook.h>
|
||||
#include <wx/dataview.h>
|
||||
#include <wx/listctrl.h>
|
||||
@ -33,7 +37,6 @@ class WX_HTML_REPORT_BOX;
|
||||
#include <wx/simplebook.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <widgets/number_badge.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/dialog.h>
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
@ -48,8 +51,8 @@ class DIALOG_DRC_BASE : public DIALOG_SHIM
|
||||
|
||||
protected:
|
||||
wxCheckBox* m_cbRefillZones;
|
||||
wxCheckBox* m_cbReportAllTrackErrors;
|
||||
wxCheckBox* m_cbTestFootprints;
|
||||
STD_BITMAP_BUTTON* m_bMenu;
|
||||
wxSimplebook* m_runningResultsBook;
|
||||
wxPanel* running;
|
||||
wxNotebook* m_runningNotebook;
|
||||
@ -85,6 +88,7 @@ class DIALOG_DRC_BASE : public DIALOG_SHIM
|
||||
// Virtual event handlers, override them in your derived class
|
||||
virtual void OnActivateDlg( wxActivateEvent& event ) { event.Skip(); }
|
||||
virtual void OnClose( wxCloseEvent& event ) { event.Skip(); }
|
||||
virtual void OnMenu( wxCommandEvent& event ) { event.Skip(); }
|
||||
virtual void OnErrorLinkClicked( wxHtmlLinkEvent& event ) { event.Skip(); }
|
||||
virtual void OnChangingNotebookPage( wxNotebookEvent& event ) { event.Skip(); }
|
||||
virtual void OnDRCItemDClick( wxDataViewEvent& event ) { event.Skip(); }
|
||||
|
@ -425,7 +425,7 @@ void DIALOG_EXPORT_ODBPP::GenerateODBPPFiles( const JOB_EXPORT_PCB_ODB& aJob, BO
|
||||
};
|
||||
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
auto ret = tp.submit( saveFile );
|
||||
auto ret = tp.submit_task( saveFile );
|
||||
|
||||
std::future_status status = ret.wait_for( std::chrono::milliseconds( 250 ) );
|
||||
|
||||
|
@ -158,7 +158,7 @@ bool DRC_CACHE_GENERATOR::Run()
|
||||
|
||||
forEachGeometryItem( itemTypes, boardCopperLayers, countItems );
|
||||
|
||||
std::future<void> retn = tp.submit(
|
||||
std::future<void> retn = tp.submit_task(
|
||||
[&]()
|
||||
{
|
||||
std::unique_lock<std::shared_mutex> writeLock( m_board->m_CachesMutex );
|
||||
@ -225,7 +225,7 @@ bool DRC_CACHE_GENERATOR::Run()
|
||||
};
|
||||
|
||||
for( ZONE* zone : allZones )
|
||||
returns.emplace_back( tp.submit( cache_zones, zone ) );
|
||||
returns.emplace_back( tp.submit_task( [cache_zones, zone] { return cache_zones( zone ); } ) );
|
||||
|
||||
done.store( 1 );
|
||||
|
||||
|
@ -2317,56 +2317,54 @@ void CREEPAGE_GRAPH::GeneratePaths( double aMaxWeight, PCB_LAYER_ID aLayer )
|
||||
}
|
||||
}
|
||||
|
||||
auto processWorkItems = [&]( size_t start_idx, size_t end_idx ) -> bool
|
||||
auto processWorkItems = [&]( size_t idx ) -> bool
|
||||
{
|
||||
for( size_t idx = start_idx; idx < end_idx; ++idx )
|
||||
auto [gn1, gn2] = work_items[idx];
|
||||
|
||||
for( PATH_CONNECTION pc : GetPaths( gn1->m_parent, gn2->m_parent, aMaxWeight ) )
|
||||
{
|
||||
auto [gn1, gn2] = work_items[idx];
|
||||
std::vector<const BOARD_ITEM*> IgnoreForTest = {
|
||||
gn1->m_parent->GetParent(), gn2->m_parent->GetParent()
|
||||
};
|
||||
|
||||
for( PATH_CONNECTION pc : GetPaths( gn1->m_parent, gn2->m_parent, aMaxWeight ) )
|
||||
if( !pc.isValid( m_board, aLayer, m_boardEdge, IgnoreForTest, m_boardOutline,
|
||||
{ false, true }, m_minGrooveWidth ) )
|
||||
continue;
|
||||
|
||||
std::shared_ptr<GRAPH_NODE> connect1 = gn1, connect2 = gn2;
|
||||
std::lock_guard<std::mutex> lock( nodes_lock );
|
||||
|
||||
// Handle non-point node1
|
||||
if( gn1->m_parent->GetType() != CREEP_SHAPE::TYPE::POINT )
|
||||
{
|
||||
std::vector<const BOARD_ITEM*> IgnoreForTest = {
|
||||
gn1->m_parent->GetParent(), gn2->m_parent->GetParent()
|
||||
};
|
||||
auto gnt1 = AddNode( GRAPH_NODE::POINT, gn1->m_parent, pc.a1 );
|
||||
gnt1->m_connectDirectly = false;
|
||||
connect1 = gnt1;
|
||||
|
||||
if( !pc.isValid( m_board, aLayer, m_boardEdge, IgnoreForTest, m_boardOutline,
|
||||
{ false, true }, m_minGrooveWidth ) )
|
||||
continue;
|
||||
|
||||
std::shared_ptr<GRAPH_NODE> connect1 = gn1, connect2 = gn2;
|
||||
std::lock_guard<std::mutex> lock( nodes_lock );
|
||||
|
||||
// Handle non-point node1
|
||||
if( gn1->m_parent->GetType() != CREEP_SHAPE::TYPE::POINT )
|
||||
if( gn1->m_parent->IsConductive() )
|
||||
{
|
||||
auto gnt1 = AddNode( GRAPH_NODE::POINT, gn1->m_parent, pc.a1 );
|
||||
gnt1->m_connectDirectly = false;
|
||||
connect1 = gnt1;
|
||||
|
||||
if( gn1->m_parent->IsConductive() )
|
||||
{
|
||||
if( auto gc = AddConnection( gn1, gnt1 ) )
|
||||
gc->m_path.m_show = false;
|
||||
}
|
||||
if( auto gc = AddConnection( gn1, gnt1 ) )
|
||||
gc->m_path.m_show = false;
|
||||
}
|
||||
|
||||
// Handle non-point node2
|
||||
if( gn2->m_parent->GetType() != CREEP_SHAPE::TYPE::POINT )
|
||||
{
|
||||
auto gnt2 = AddNode( GRAPH_NODE::POINT, gn2->m_parent, pc.a2 );
|
||||
gnt2->m_connectDirectly = false;
|
||||
connect2 = gnt2;
|
||||
|
||||
if( gn2->m_parent->IsConductive() )
|
||||
{
|
||||
if( auto gc = AddConnection( gn2, gnt2 ) )
|
||||
gc->m_path.m_show = false;
|
||||
}
|
||||
}
|
||||
|
||||
AddConnection( connect1, connect2, pc );
|
||||
}
|
||||
|
||||
// Handle non-point node2
|
||||
if( gn2->m_parent->GetType() != CREEP_SHAPE::TYPE::POINT )
|
||||
{
|
||||
auto gnt2 = AddNode( GRAPH_NODE::POINT, gn2->m_parent, pc.a2 );
|
||||
gnt2->m_connectDirectly = false;
|
||||
connect2 = gnt2;
|
||||
|
||||
if( gn2->m_parent->IsConductive() )
|
||||
{
|
||||
if( auto gc = AddConnection( gn2, gnt2 ) )
|
||||
gc->m_path.m_show = false;
|
||||
}
|
||||
}
|
||||
|
||||
AddConnection( connect1, connect2, pc );
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
@ -2374,15 +2372,16 @@ void CREEPAGE_GRAPH::GeneratePaths( double aMaxWeight, PCB_LAYER_ID aLayer )
|
||||
// has already parallelized the work, so we can process all items in one go.
|
||||
if( tp.get_tasks_total() >= tp.get_thread_count() - 4 )
|
||||
{
|
||||
processWorkItems( 0, work_items.size() );
|
||||
for( size_t ii = 0; ii < work_items.size(); ii++ )
|
||||
processWorkItems( ii );
|
||||
}
|
||||
else
|
||||
{
|
||||
auto ret = tp.parallelize_loop( work_items.size(), processWorkItems );
|
||||
auto ret = tp.submit_loop( 0, work_items.size(), processWorkItems );
|
||||
|
||||
for( size_t ii = 0; ii < ret.size(); ii++ )
|
||||
{
|
||||
std::future<bool>& r = ret[ii];
|
||||
auto& r = ret[ii];
|
||||
|
||||
if( !r.valid() )
|
||||
continue;
|
||||
|
@ -505,7 +505,6 @@ bool DRC_TEST_PROVIDER_CONNECTION_WIDTH::Run()
|
||||
}
|
||||
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
std::vector<std::future<size_t>> returns;
|
||||
size_t total_effort = 0;
|
||||
|
||||
for( const auto& [ netLayer, itemsPoly ] : dataset )
|
||||
@ -513,14 +512,16 @@ bool DRC_TEST_PROVIDER_CONNECTION_WIDTH::Run()
|
||||
|
||||
total_effort += std::max( (size_t) 1, total_effort ) * distinctMinWidths.size();
|
||||
|
||||
std::vector<std::future<size_t>> returns;
|
||||
returns.reserve( dataset.size() );
|
||||
|
||||
for( const auto& [ netLayer, itemsPoly ] : dataset )
|
||||
{
|
||||
returns.emplace_back( tp.submit( build_netlayer_polys, netLayer.Netcode, netLayer.Layer ) );
|
||||
int netcode = netLayer.Netcode;
|
||||
PCB_LAYER_ID layer = netLayer.Layer;
|
||||
returns.emplace_back( tp.submit_task( [&, netcode, layer]() { return build_netlayer_polys( netcode, layer ); } ) );
|
||||
}
|
||||
|
||||
for( std::future<size_t>& ret : returns )
|
||||
for( auto& ret : returns )
|
||||
{
|
||||
std::future_status status = ret.wait_for( std::chrono::milliseconds( 250 ) );
|
||||
|
||||
@ -541,11 +542,13 @@ bool DRC_TEST_PROVIDER_CONNECTION_WIDTH::Run()
|
||||
if( minWidth - epsilon <= 0 )
|
||||
continue;
|
||||
|
||||
returns.emplace_back( tp.submit( min_checker, itemsPoly, netLayer.Layer, minWidth ) );
|
||||
returns.emplace_back( tp.submit_task( [min_checker, &itemsPoly, &netLayer, minWidth]() {
|
||||
return min_checker( itemsPoly, netLayer.Layer, minWidth );
|
||||
} ) );
|
||||
}
|
||||
}
|
||||
|
||||
for( std::future<size_t>& ret : returns )
|
||||
for( auto& ret : returns )
|
||||
{
|
||||
std::future_status status = ret.wait_for( std::chrono::milliseconds( 250 ) );
|
||||
|
||||
|
@ -594,115 +594,112 @@ void DRC_TEST_PROVIDER_COPPER_CLEARANCE::testTrackClearances()
|
||||
|
||||
LSET boardCopperLayers = LSET::AllCuMask( m_board->GetCopperLayerCount() );
|
||||
|
||||
auto testTrack = [&]( const int start_idx, const int end_idx )
|
||||
auto testTrack = [&]( const int trackIdx )
|
||||
{
|
||||
for( int trackIdx = start_idx; trackIdx < end_idx; ++trackIdx )
|
||||
PCB_TRACK* track = m_board->Tracks()[trackIdx];
|
||||
|
||||
for( PCB_LAYER_ID layer : LSET( track->GetLayerSet() & boardCopperLayers ) )
|
||||
{
|
||||
PCB_TRACK* track = m_board->Tracks()[trackIdx];
|
||||
std::shared_ptr<SHAPE> trackShape = track->GetEffectiveShape( layer );
|
||||
|
||||
for( PCB_LAYER_ID layer : LSET( track->GetLayerSet() & boardCopperLayers ) )
|
||||
m_board->m_CopperItemRTreeCache->QueryColliding( track, layer, layer,
|
||||
// Filter:
|
||||
[&]( BOARD_ITEM* other ) -> bool
|
||||
{
|
||||
BOARD_CONNECTED_ITEM* otherCItem = dynamic_cast<BOARD_CONNECTED_ITEM*>( other );
|
||||
|
||||
if( otherCItem && otherCItem->GetNetCode() == track->GetNetCode() )
|
||||
return false;
|
||||
|
||||
BOARD_ITEM* a = track;
|
||||
BOARD_ITEM* b = other;
|
||||
|
||||
// store canonical order so we don't collide in both directions
|
||||
// (a:b and b:a)
|
||||
if( static_cast<void*>( a ) > static_cast<void*>( b ) )
|
||||
std::swap( a, b );
|
||||
|
||||
std::lock_guard<std::mutex> lock( checkedPairsMutex );
|
||||
auto it = checkedPairs.find( { a, b } );
|
||||
|
||||
if( it != checkedPairs.end()
|
||||
&& ( it->second.layers.test( layer ) || ( it->second.has_error ) ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
checkedPairs[ { a, b } ].layers.set( layer );
|
||||
return true;
|
||||
}
|
||||
},
|
||||
// Visitor:
|
||||
[&]( BOARD_ITEM* other ) -> bool
|
||||
{
|
||||
if( m_drcEngine->IsCancelled() )
|
||||
return false;
|
||||
|
||||
if( other->Type() == PCB_PAD_T && static_cast<PAD*>( other )->IsFreePad() )
|
||||
{
|
||||
if( other->GetEffectiveShape( layer )->Collide( trackShape.get() ) )
|
||||
{
|
||||
std::lock_guard<std::mutex> lock( freePadsUsageMapMutex );
|
||||
auto it = freePadsUsageMap.find( other );
|
||||
|
||||
if( it == freePadsUsageMap.end() )
|
||||
{
|
||||
freePadsUsageMap[ other ] = track->GetNetCode();
|
||||
return true; // Continue colliding tests
|
||||
}
|
||||
else if( it->second == track->GetNetCode() )
|
||||
{
|
||||
return true; // Continue colliding tests
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If we get an error, mark the pair as having a clearance error already
|
||||
if( !testSingleLayerItemAgainstItem( track, trackShape.get(), layer, other ) )
|
||||
{
|
||||
if( !m_drcEngine->GetReportAllTrackErrors() )
|
||||
{
|
||||
BOARD_ITEM* a = track;
|
||||
BOARD_ITEM* b = other;
|
||||
|
||||
// store canonical order so we don't collide in both directions
|
||||
// (a:b and b:a)
|
||||
if( static_cast<void*>( a ) > static_cast<void*>( b ) )
|
||||
std::swap( a, b );
|
||||
|
||||
std::lock_guard<std::mutex> lock( checkedPairsMutex );
|
||||
auto it = checkedPairs.find( { a, b } );
|
||||
|
||||
if( it != checkedPairs.end() )
|
||||
it->second.has_error = true;
|
||||
|
||||
return false; // We're done with this track
|
||||
}
|
||||
}
|
||||
|
||||
return !m_drcEngine->IsCancelled();
|
||||
},
|
||||
m_board->m_DRCMaxClearance );
|
||||
|
||||
for( ZONE* zone : m_board->m_DRCCopperZones )
|
||||
{
|
||||
std::shared_ptr<SHAPE> trackShape = track->GetEffectiveShape( layer );
|
||||
testItemAgainstZone( track, zone, layer );
|
||||
|
||||
m_board->m_CopperItemRTreeCache->QueryColliding( track, layer, layer,
|
||||
// Filter:
|
||||
[&]( BOARD_ITEM* other ) -> bool
|
||||
{
|
||||
BOARD_CONNECTED_ITEM* otherCItem = dynamic_cast<BOARD_CONNECTED_ITEM*>( other );
|
||||
|
||||
if( otherCItem && otherCItem->GetNetCode() == track->GetNetCode() )
|
||||
return false;
|
||||
|
||||
BOARD_ITEM* a = track;
|
||||
BOARD_ITEM* b = other;
|
||||
|
||||
// store canonical order so we don't collide in both directions
|
||||
// (a:b and b:a)
|
||||
if( static_cast<void*>( a ) > static_cast<void*>( b ) )
|
||||
std::swap( a, b );
|
||||
|
||||
std::lock_guard<std::mutex> lock( checkedPairsMutex );
|
||||
auto it = checkedPairs.find( { a, b } );
|
||||
|
||||
if( it != checkedPairs.end()
|
||||
&& ( it->second.layers.test( layer ) || ( it->second.has_error ) ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
checkedPairs[ { a, b } ].layers.set( layer );
|
||||
return true;
|
||||
}
|
||||
},
|
||||
// Visitor:
|
||||
[&]( BOARD_ITEM* other ) -> bool
|
||||
{
|
||||
if( m_drcEngine->IsCancelled() )
|
||||
return false;
|
||||
|
||||
if( other->Type() == PCB_PAD_T && static_cast<PAD*>( other )->IsFreePad() )
|
||||
{
|
||||
if( other->GetEffectiveShape( layer )->Collide( trackShape.get() ) )
|
||||
{
|
||||
std::lock_guard<std::mutex> lock( freePadsUsageMapMutex );
|
||||
auto it = freePadsUsageMap.find( other );
|
||||
|
||||
if( it == freePadsUsageMap.end() )
|
||||
{
|
||||
freePadsUsageMap[ other ] = track->GetNetCode();
|
||||
return true; // Continue colliding tests
|
||||
}
|
||||
else if( it->second == track->GetNetCode() )
|
||||
{
|
||||
return true; // Continue colliding tests
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// If we get an error, mark the pair as having a clearance error already
|
||||
if( !testSingleLayerItemAgainstItem( track, trackShape.get(), layer, other ) )
|
||||
{
|
||||
if( !m_drcEngine->GetReportAllTrackErrors() )
|
||||
{
|
||||
BOARD_ITEM* a = track;
|
||||
BOARD_ITEM* b = other;
|
||||
|
||||
// store canonical order so we don't collide in both directions
|
||||
// (a:b and b:a)
|
||||
if( static_cast<void*>( a ) > static_cast<void*>( b ) )
|
||||
std::swap( a, b );
|
||||
|
||||
std::lock_guard<std::mutex> lock( checkedPairsMutex );
|
||||
auto it = checkedPairs.find( { a, b } );
|
||||
|
||||
if( it != checkedPairs.end() )
|
||||
it->second.has_error = true;
|
||||
|
||||
return false; // We're done with this track
|
||||
}
|
||||
}
|
||||
|
||||
return !m_drcEngine->IsCancelled();
|
||||
},
|
||||
m_board->m_DRCMaxClearance );
|
||||
|
||||
for( ZONE* zone : m_board->m_DRCCopperZones )
|
||||
{
|
||||
testItemAgainstZone( track, zone, layer );
|
||||
|
||||
if( m_drcEngine->IsCancelled() )
|
||||
break;
|
||||
}
|
||||
if( m_drcEngine->IsCancelled() )
|
||||
break;
|
||||
}
|
||||
|
||||
done.fetch_add( 1 );
|
||||
}
|
||||
|
||||
done.fetch_add( 1 );
|
||||
};
|
||||
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
|
||||
tp.push_loop( m_board->Tracks().size(), testTrack );
|
||||
auto track_futures = tp.submit_loop( 0, m_board->Tracks().size(), testTrack );
|
||||
|
||||
while( done < count )
|
||||
{
|
||||
@ -710,7 +707,8 @@ void DRC_TEST_PROVIDER_COPPER_CLEARANCE::testTrackClearances()
|
||||
|
||||
if( m_drcEngine->IsCancelled() )
|
||||
{
|
||||
tp.wait_for_tasks();
|
||||
// Wait for the submitted loop tasks to finish
|
||||
track_futures.wait();
|
||||
break;
|
||||
}
|
||||
|
||||
@ -967,82 +965,79 @@ void DRC_TEST_PROVIDER_COPPER_CLEARANCE::testPadClearances( )
|
||||
|
||||
LSET boardCopperLayers = LSET::AllCuMask( m_board->GetCopperLayerCount() );
|
||||
|
||||
const auto fp_check = [&]( size_t aFromIdx, size_t aToIdx )
|
||||
const auto fp_check = [&]( size_t ii )
|
||||
{
|
||||
for( size_t ii = aFromIdx; ii < aToIdx; ++ii )
|
||||
FOOTPRINT* footprint = m_board->Footprints()[ ii ];
|
||||
|
||||
for( PAD* pad : footprint->Pads() )
|
||||
{
|
||||
FOOTPRINT* footprint = m_board->Footprints()[ ii ];
|
||||
|
||||
for( PAD* pad : footprint->Pads() )
|
||||
for( PCB_LAYER_ID layer : LSET( pad->GetLayerSet() & boardCopperLayers ) )
|
||||
{
|
||||
for( PCB_LAYER_ID layer : LSET( pad->GetLayerSet() & boardCopperLayers ) )
|
||||
{
|
||||
if( m_drcEngine->IsCancelled() )
|
||||
return;
|
||||
if( m_drcEngine->IsCancelled() )
|
||||
return;
|
||||
|
||||
std::shared_ptr<SHAPE> padShape = pad->GetEffectiveShape( layer );
|
||||
std::shared_ptr<SHAPE> padShape = pad->GetEffectiveShape( layer );
|
||||
|
||||
m_board->m_CopperItemRTreeCache->QueryColliding( pad, layer, layer,
|
||||
// Filter:
|
||||
[&]( BOARD_ITEM* other ) -> bool
|
||||
m_board->m_CopperItemRTreeCache->QueryColliding( pad, layer, layer,
|
||||
// Filter:
|
||||
[&]( BOARD_ITEM* other ) -> bool
|
||||
{
|
||||
BOARD_ITEM* a = pad;
|
||||
BOARD_ITEM* b = other;
|
||||
|
||||
// store canonical order so we don't collide in both
|
||||
// directions (a:b and b:a)
|
||||
if( static_cast<void*>( a ) > static_cast<void*>( b ) )
|
||||
std::swap( a, b );
|
||||
|
||||
std::lock_guard<std::mutex> lock( checkedPairsMutex );
|
||||
auto it = checkedPairs.find( { a, b } );
|
||||
|
||||
if( it != checkedPairs.end()
|
||||
&& ( it->second.layers.test( layer ) || it->second.has_error ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
checkedPairs[ { a, b } ].layers.set( layer );
|
||||
return true;
|
||||
}
|
||||
},
|
||||
// Visitor
|
||||
[&]( BOARD_ITEM* other ) -> bool
|
||||
{
|
||||
if( !testPadAgainstItem( pad, padShape.get(), layer, other ) )
|
||||
{
|
||||
BOARD_ITEM* a = pad;
|
||||
BOARD_ITEM* b = other;
|
||||
|
||||
// store canonical order so we don't collide in both
|
||||
// directions (a:b and b:a)
|
||||
if( static_cast<void*>( a ) > static_cast<void*>( b ) )
|
||||
std::swap( a, b );
|
||||
|
||||
std::lock_guard<std::mutex> lock( checkedPairsMutex );
|
||||
auto it = checkedPairs.find( { a, b } );
|
||||
|
||||
if( it != checkedPairs.end()
|
||||
&& ( it->second.layers.test( layer ) || it->second.has_error ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
checkedPairs[ { a, b } ].layers.set( layer );
|
||||
return true;
|
||||
}
|
||||
},
|
||||
// Visitor
|
||||
[&]( BOARD_ITEM* other ) -> bool
|
||||
{
|
||||
if( !testPadAgainstItem( pad, padShape.get(), layer, other ) )
|
||||
{
|
||||
BOARD_ITEM* a = pad;
|
||||
BOARD_ITEM* b = other;
|
||||
if( it != checkedPairs.end() )
|
||||
it->second.has_error = true;
|
||||
}
|
||||
|
||||
std::lock_guard<std::mutex> lock( checkedPairsMutex );
|
||||
auto it = checkedPairs.find( { a, b } );
|
||||
return !m_drcEngine->IsCancelled();
|
||||
},
|
||||
m_board->m_DRCMaxClearance );
|
||||
|
||||
if( it != checkedPairs.end() )
|
||||
it->second.has_error = true;
|
||||
}
|
||||
for( ZONE* zone : m_board->m_DRCCopperZones )
|
||||
{
|
||||
testItemAgainstZone( pad, zone, layer );
|
||||
|
||||
return !m_drcEngine->IsCancelled();
|
||||
},
|
||||
m_board->m_DRCMaxClearance );
|
||||
|
||||
for( ZONE* zone : m_board->m_DRCCopperZones )
|
||||
{
|
||||
testItemAgainstZone( pad, zone, layer );
|
||||
|
||||
if( m_drcEngine->IsCancelled() )
|
||||
return;
|
||||
}
|
||||
if( m_drcEngine->IsCancelled() )
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
done.fetch_add( 1 );
|
||||
}
|
||||
|
||||
done.fetch_add( 1 );
|
||||
};
|
||||
|
||||
size_t numFootprints = m_board->Footprints().size();
|
||||
auto returns = tp.parallelize_loop( numFootprints, fp_check );
|
||||
auto returns = tp.submit_loop( 0, numFootprints, fp_check );
|
||||
|
||||
// Wait for all threads to finish
|
||||
for( size_t ii = 0; ii < returns.size(); ++ii )
|
||||
@ -1152,7 +1147,7 @@ void DRC_TEST_PROVIDER_COPPER_CLEARANCE::testGraphicClearances()
|
||||
m_board->m_DRCMaxClearance );
|
||||
};
|
||||
|
||||
std::future<void> retn = tp.submit(
|
||||
std::future<void> retn = tp.submit_task(
|
||||
[&]()
|
||||
{
|
||||
for( BOARD_ITEM* item : m_board->Drawings() )
|
||||
@ -1370,7 +1365,7 @@ void DRC_TEST_PROVIDER_COPPER_CLEARANCE::testZonesToZones()
|
||||
continue;
|
||||
|
||||
count++;
|
||||
tp.push_task( checkZones, ia, ia2, sameNet, layer );
|
||||
tp.submit_task( [checkZones, ia, ia2, sameNet, layer]() { checkZones(ia, ia2, sameNet, layer); } );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1382,7 +1377,7 @@ void DRC_TEST_PROVIDER_COPPER_CLEARANCE::testZonesToZones()
|
||||
if( m_drcEngine->IsCancelled() )
|
||||
break;
|
||||
|
||||
if( tp.wait_for_tasks_duration( std::chrono::milliseconds( 250 ) ) )
|
||||
if( tp.wait_for( std::chrono::milliseconds( 250 ) ) )
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -110,11 +110,11 @@ bool DRC_TEST_PROVIDER_DISALLOW::Run()
|
||||
}
|
||||
|
||||
auto query_areas =
|
||||
[&]( std::pair<ZONE* /* rule area */, ZONE* /* copper zone */> areaZonePair ) -> size_t
|
||||
[&]( const int idx ) -> size_t
|
||||
{
|
||||
if( m_drcEngine->IsCancelled() )
|
||||
return 0;
|
||||
|
||||
const auto& areaZonePair = toCache[idx];
|
||||
ZONE* ruleArea = areaZonePair.first;
|
||||
ZONE* copperZone = areaZonePair.second;
|
||||
BOX2I areaBBox = ruleArea->GetBoundingBox();
|
||||
@ -169,14 +169,9 @@ bool DRC_TEST_PROVIDER_DISALLOW::Run()
|
||||
};
|
||||
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
std::vector<std::future<size_t>> returns;
|
||||
auto futures = tp.submit_loop( 0, toCache.size(), query_areas );
|
||||
|
||||
returns.reserve( toCache.size() );
|
||||
|
||||
for( const std::pair<ZONE*, ZONE*>& areaZonePair : toCache )
|
||||
returns.emplace_back( tp.submit( query_areas, areaZonePair ) );
|
||||
|
||||
for( const std::future<size_t>& ret : returns )
|
||||
for( auto& ret : futures )
|
||||
{
|
||||
std::future_status status = ret.wait_for( std::chrono::milliseconds( 250 ) );
|
||||
|
||||
|
@ -149,14 +149,10 @@ bool DRC_TEST_PROVIDER_SLIVER_CHECKER::Run()
|
||||
};
|
||||
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
std::vector<std::future<size_t>> returns;
|
||||
|
||||
returns.reserve( copperLayers.size() );
|
||||
auto returns = tp.submit_loop( 0, copperLayers.size(), build_layer_polys );
|
||||
|
||||
for( size_t ii = 0; ii < copperLayers.size(); ++ii )
|
||||
returns.emplace_back( tp.submit( build_layer_polys, ii ) );
|
||||
|
||||
for( const std::future<size_t>& ret : returns )
|
||||
for( auto& ret : returns )
|
||||
{
|
||||
std::future_status status = ret.wait_for( std::chrono::milliseconds( 250 ) );
|
||||
|
||||
|
@ -737,50 +737,47 @@ void DRC_TEST_PROVIDER_SOLDER_MASK::testMaskBridges()
|
||||
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
|
||||
auto returns = tp.parallelize_loop( test_items.size(), [&]( size_t a, size_t b ) -> bool
|
||||
auto returns = tp.submit_loop( 0, test_items.size(), [&]( size_t i ) -> bool
|
||||
{
|
||||
BOARD_ITEM* item = test_items[ i ];
|
||||
|
||||
if( m_drcEngine->IsErrorLimitExceeded( DRCE_SOLDERMASK_BRIDGE ) )
|
||||
return false;
|
||||
|
||||
BOX2I itemBBox = item->GetBoundingBox();
|
||||
|
||||
if( item->IsOnLayer( F_Mask ) && !isNullAperture( item ) )
|
||||
{
|
||||
for( size_t i = a; i < b; ++i )
|
||||
{
|
||||
BOARD_ITEM* item = test_items[ i ];
|
||||
// Test for aperture-to-aperture collisions
|
||||
testItemAgainstItems( item, itemBBox, F_Mask, F_Mask );
|
||||
|
||||
if( m_drcEngine->IsErrorLimitExceeded( DRCE_SOLDERMASK_BRIDGE ) )
|
||||
return false;
|
||||
// Test for aperture-to-zone collisions
|
||||
testMaskItemAgainstZones( item, itemBBox, F_Mask, F_Cu );
|
||||
}
|
||||
else if( item->IsOnLayer( PADSTACK::ALL_LAYERS ) )
|
||||
{
|
||||
// Test for copper-item-to-aperture collisions
|
||||
testItemAgainstItems( item, itemBBox, F_Cu, F_Mask );
|
||||
}
|
||||
|
||||
BOX2I itemBBox = item->GetBoundingBox();
|
||||
if( item->IsOnLayer( B_Mask ) && !isNullAperture( item ) )
|
||||
{
|
||||
// Test for aperture-to-aperture collisions
|
||||
testItemAgainstItems( item, itemBBox, B_Mask, B_Mask );
|
||||
|
||||
if( item->IsOnLayer( F_Mask ) && !isNullAperture( item ) )
|
||||
{
|
||||
// Test for aperture-to-aperture collisions
|
||||
testItemAgainstItems( item, itemBBox, F_Mask, F_Mask );
|
||||
// Test for aperture-to-zone collisions
|
||||
testMaskItemAgainstZones( item, itemBBox, B_Mask, B_Cu );
|
||||
}
|
||||
else if( item->IsOnLayer( B_Cu ) )
|
||||
{
|
||||
// Test for copper-item-to-aperture collisions
|
||||
testItemAgainstItems( item, itemBBox, B_Cu, B_Mask );
|
||||
}
|
||||
|
||||
// Test for aperture-to-zone collisions
|
||||
testMaskItemAgainstZones( item, itemBBox, F_Mask, F_Cu );
|
||||
}
|
||||
else if( item->IsOnLayer( PADSTACK::ALL_LAYERS ) )
|
||||
{
|
||||
// Test for copper-item-to-aperture collisions
|
||||
testItemAgainstItems( item, itemBBox, F_Cu, F_Mask );
|
||||
}
|
||||
++count;
|
||||
|
||||
if( item->IsOnLayer( B_Mask ) && !isNullAperture( item ) )
|
||||
{
|
||||
// Test for aperture-to-aperture collisions
|
||||
testItemAgainstItems( item, itemBBox, B_Mask, B_Mask );
|
||||
|
||||
// Test for aperture-to-zone collisions
|
||||
testMaskItemAgainstZones( item, itemBBox, B_Mask, B_Cu );
|
||||
}
|
||||
else if( item->IsOnLayer( B_Cu ) )
|
||||
{
|
||||
// Test for copper-item-to-aperture collisions
|
||||
testItemAgainstItems( item, itemBBox, B_Cu, B_Mask );
|
||||
}
|
||||
|
||||
++count;
|
||||
}
|
||||
|
||||
return true;
|
||||
} );
|
||||
return true;
|
||||
} );
|
||||
|
||||
for( size_t i = 0; i < returns.size(); ++i )
|
||||
{
|
||||
|
@ -70,13 +70,15 @@ bool DRC_TEST_PROVIDER_TRACK_ANGLE::Run()
|
||||
return false; // DRC cancelled
|
||||
|
||||
auto checkTrackAngle =
|
||||
[&]( PCB_TRACK* item ) -> bool
|
||||
[&]( const int ind ) -> bool
|
||||
{
|
||||
if( m_drcEngine->IsErrorLimitExceeded( DRCE_TRACK_ANGLE ) )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
PCB_TRACK* item = m_drcEngine->GetBoard()->Tracks()[ind];
|
||||
|
||||
if( item->Type() != PCB_TRACE_T )
|
||||
{
|
||||
return true;
|
||||
@ -195,17 +197,10 @@ bool DRC_TEST_PROVIDER_TRACK_ANGLE::Run()
|
||||
const int progressDelta = 250;
|
||||
int ii = 0;
|
||||
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
std::vector<std::future<bool>> returns;
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
auto futures = tp.submit_loop( 0, m_drcEngine->GetBoard()->Tracks().size(), checkTrackAngle );
|
||||
|
||||
returns.reserve( m_drcEngine->GetBoard()->Tracks().size() );
|
||||
|
||||
for( PCB_TRACK* item : m_drcEngine->GetBoard()->Tracks() )
|
||||
{
|
||||
returns.emplace_back( tp.submit( checkTrackAngle, item ) );
|
||||
}
|
||||
|
||||
for( std::future<bool>& ret : returns )
|
||||
for( auto& ret : futures )
|
||||
{
|
||||
std::future_status status = ret.wait_for( std::chrono::milliseconds( 250 ) );
|
||||
|
||||
|
@ -67,8 +67,9 @@ bool DRC_TEST_PROVIDER_TRACK_SEGMENT_LENGTH::Run()
|
||||
return false; // DRC cancelled
|
||||
|
||||
auto checkTrackSegmentLength =
|
||||
[&]( BOARD_ITEM* item ) -> bool
|
||||
[&]( const int idx ) -> bool
|
||||
{
|
||||
BOARD_ITEM* item = m_drcEngine->GetBoard()->Tracks()[idx];
|
||||
if( m_drcEngine->IsErrorLimitExceeded( DRCE_TRACK_SEGMENT_LENGTH ) )
|
||||
return false;
|
||||
|
||||
@ -153,16 +154,9 @@ bool DRC_TEST_PROVIDER_TRACK_SEGMENT_LENGTH::Run()
|
||||
int ii = 0;
|
||||
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
std::vector<std::future<bool>> returns;
|
||||
auto futures = tp.submit_loop( 0, m_drcEngine->GetBoard()->Tracks().size(), checkTrackSegmentLength );
|
||||
|
||||
returns.reserve( m_drcEngine->GetBoard()->Tracks().size() );
|
||||
|
||||
for( PCB_TRACK* item : m_drcEngine->GetBoard()->Tracks() )
|
||||
{
|
||||
returns.emplace_back( tp.submit( checkTrackSegmentLength, item ) );
|
||||
}
|
||||
|
||||
for( std::future<bool>& ret : returns )
|
||||
for( auto& ret : futures )
|
||||
{
|
||||
std::future_status status = ret.wait_for( std::chrono::milliseconds( 250 ) );
|
||||
|
||||
|
@ -319,27 +319,17 @@ bool DRC_TEST_PROVIDER_ZONE_CONNECTIONS::Run()
|
||||
total_effort = std::max( (size_t) 1, total_effort );
|
||||
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
std::vector<std::future<int>> returns;
|
||||
auto returns = tp.submit_loop( 0, zoneLayers.size(),
|
||||
[&]( const int ii )
|
||||
{
|
||||
if( !m_drcEngine->IsCancelled() )
|
||||
{
|
||||
testZoneLayer( zoneLayers[ii].first, zoneLayers[ii].second );
|
||||
done.fetch_add( zoneLayers[ii].first->GetFilledPolysList( zoneLayers[ii].second )->FullPointCount() );
|
||||
}
|
||||
} );
|
||||
|
||||
returns.reserve( zoneLayers.size() );
|
||||
|
||||
for( const std::pair<ZONE*, PCB_LAYER_ID>& zonelayer : zoneLayers )
|
||||
{
|
||||
returns.emplace_back( tp.submit(
|
||||
[&]( ZONE* aZone, PCB_LAYER_ID aLayer ) -> int
|
||||
{
|
||||
if( !m_drcEngine->IsCancelled() )
|
||||
{
|
||||
testZoneLayer( aZone, aLayer );
|
||||
done.fetch_add( aZone->GetFilledPolysList( aLayer )->FullPointCount() );
|
||||
}
|
||||
|
||||
return 0;
|
||||
},
|
||||
zonelayer.first, zonelayer.second ) );
|
||||
}
|
||||
|
||||
for( const std::future<int>& ret : returns )
|
||||
for( auto& ret : returns )
|
||||
{
|
||||
std::future_status status = ret.wait_for( std::chrono::milliseconds( 250 ) );
|
||||
|
||||
|
@ -2026,76 +2026,73 @@ bool STEP_PCB_MODEL::CreatePCB( SHAPE_POLY_SET& aOutline, const VECTOR2D& aOrigi
|
||||
{
|
||||
std::mutex mutex;
|
||||
|
||||
auto subtractLoopFn = [&]( const int a, const int b )
|
||||
auto subtractLoopFn = [&]( const int shapeId )
|
||||
{
|
||||
for( int shapeId = a; shapeId < b; shapeId++ )
|
||||
TopoDS_Shape& shape = vec[shapeId];
|
||||
|
||||
Bnd_Box shapeBbox;
|
||||
BRepBndLib::Add( shape, shapeBbox );
|
||||
|
||||
TopTools_ListOfShape holelist;
|
||||
|
||||
{
|
||||
TopoDS_Shape& shape = vec[shapeId];
|
||||
std::unique_lock lock( mutex );
|
||||
|
||||
Bnd_Box shapeBbox;
|
||||
BRepBndLib::Add( shape, shapeBbox );
|
||||
const TColStd_ListOfInteger& indices = aBSBHoles.Compare( shapeBbox );
|
||||
|
||||
TopTools_ListOfShape holelist;
|
||||
|
||||
{
|
||||
std::unique_lock lock( mutex );
|
||||
|
||||
const TColStd_ListOfInteger& indices = aBSBHoles.Compare( shapeBbox );
|
||||
|
||||
for( const Standard_Integer& index : indices )
|
||||
holelist.Append( aHolesList[index] );
|
||||
}
|
||||
|
||||
if( holelist.IsEmpty() )
|
||||
continue;
|
||||
|
||||
TopTools_ListOfShape cutArgs;
|
||||
cutArgs.Append( shape );
|
||||
|
||||
BRepAlgoAPI_Cut cut;
|
||||
|
||||
cut.SetRunParallel( true );
|
||||
cut.SetToFillHistory( false );
|
||||
|
||||
cut.SetArguments( cutArgs );
|
||||
cut.SetTools( holelist );
|
||||
cut.Build();
|
||||
|
||||
if( cut.HasErrors() || cut.HasWarnings() )
|
||||
{
|
||||
m_reporter->Report( wxString::Format( _( "** Got problems while cutting "
|
||||
"%s net '%s' **" ),
|
||||
aWhat,
|
||||
UnescapeString( netname ) ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
shapeBbox.Dump();
|
||||
|
||||
if( cut.HasErrors() )
|
||||
{
|
||||
wxString msg = _( "Errors:\n" );
|
||||
wxStringOutputStream os_stream( &msg );
|
||||
wxStdOutputStream out( os_stream );
|
||||
|
||||
cut.DumpErrors( out );
|
||||
m_reporter->Report( msg, RPT_SEVERITY_ERROR );
|
||||
}
|
||||
|
||||
if( cut.HasWarnings() )
|
||||
{
|
||||
wxString msg = _( "Warnings:\n" );
|
||||
wxStringOutputStream os_stream( &msg );
|
||||
wxStdOutputStream out( os_stream );
|
||||
|
||||
cut.DumpWarnings( out );
|
||||
m_reporter->Report( msg, RPT_SEVERITY_WARNING );
|
||||
}
|
||||
}
|
||||
|
||||
shape = cut.Shape();
|
||||
for( const Standard_Integer& index : indices )
|
||||
holelist.Append( aHolesList[index] );
|
||||
}
|
||||
|
||||
if( holelist.IsEmpty() )
|
||||
return; // nothing to cut for this shape
|
||||
|
||||
TopTools_ListOfShape cutArgs;
|
||||
cutArgs.Append( shape );
|
||||
|
||||
BRepAlgoAPI_Cut cut;
|
||||
|
||||
cut.SetRunParallel( true );
|
||||
cut.SetToFillHistory( false );
|
||||
|
||||
cut.SetArguments( cutArgs );
|
||||
cut.SetTools( holelist );
|
||||
cut.Build();
|
||||
|
||||
if( cut.HasErrors() || cut.HasWarnings() )
|
||||
{
|
||||
m_reporter->Report( wxString::Format( _( "** Got problems while cutting "
|
||||
"%s net '%s' **" ),
|
||||
aWhat,
|
||||
UnescapeString( netname ) ),
|
||||
RPT_SEVERITY_ERROR );
|
||||
shapeBbox.Dump();
|
||||
|
||||
if( cut.HasErrors() )
|
||||
{
|
||||
wxString msg = _( "Errors:\n" );
|
||||
wxStringOutputStream os_stream( &msg );
|
||||
wxStdOutputStream out( os_stream );
|
||||
|
||||
cut.DumpErrors( out );
|
||||
m_reporter->Report( msg, RPT_SEVERITY_ERROR );
|
||||
}
|
||||
|
||||
if( cut.HasWarnings() )
|
||||
{
|
||||
wxString msg = _( "Warnings:\n" );
|
||||
wxStringOutputStream os_stream( &msg );
|
||||
wxStdOutputStream out( os_stream );
|
||||
|
||||
cut.DumpWarnings( out );
|
||||
m_reporter->Report( msg, RPT_SEVERITY_WARNING );
|
||||
}
|
||||
}
|
||||
|
||||
shape = cut.Shape();
|
||||
};
|
||||
|
||||
tp.parallelize_loop( vec.size(), subtractLoopFn ).wait();
|
||||
tp.submit_loop( 0, vec.size(), subtractLoopFn ).wait();
|
||||
}
|
||||
};
|
||||
|
||||
@ -2172,7 +2169,7 @@ bool STEP_PCB_MODEL::CreatePCB( SHAPE_POLY_SET& aOutline, const VECTOR2D& aOrigi
|
||||
BS::multi_future<void> mf;
|
||||
|
||||
for( const auto& [netname, _] : shapesToFuseMap )
|
||||
mf.push_back( tp.submit( fuseLoopFn, netname ) );
|
||||
mf.push_back( tp.submit_task( [&, netname]() { fuseLoopFn( netname ); } ) );
|
||||
|
||||
mf.wait();
|
||||
}
|
||||
|
@ -207,7 +207,7 @@ void FOOTPRINT_LIST_IMPL::loadFootprints()
|
||||
};
|
||||
|
||||
for( size_t ii = 0; ii < num_elements; ++ii )
|
||||
returns[ii] = tp.submit( fp_thread );
|
||||
returns[ii] = tp.submit_task( fp_thread );
|
||||
|
||||
for( const std::future<size_t>& ret : returns )
|
||||
{
|
||||
|
@ -253,27 +253,27 @@ EDA_ITEM* PCB_BASE_FRAME::ResolveItem( const KIID& aId, bool aAllowNullptrReturn
|
||||
return GetBoard()->ResolveItem( aId, aAllowNullptrReturn );
|
||||
}
|
||||
|
||||
void PCB_BASE_FRAME::FocusOnItem( EDA_ITEM* aItem )
|
||||
void PCB_BASE_FRAME::FocusOnItem( EDA_ITEM* aItem, bool aAllowScroll )
|
||||
{
|
||||
// nullptr will clear the current focus
|
||||
if( aItem != nullptr && !aItem->IsBOARD_ITEM() )
|
||||
return;
|
||||
|
||||
FocusOnItem( static_cast<BOARD_ITEM*>( aItem ), UNDEFINED_LAYER );
|
||||
FocusOnItem( static_cast<BOARD_ITEM*>( aItem ), UNDEFINED_LAYER, aAllowScroll );
|
||||
}
|
||||
|
||||
void PCB_BASE_FRAME::FocusOnItem( BOARD_ITEM* aItem, PCB_LAYER_ID aLayer )
|
||||
void PCB_BASE_FRAME::FocusOnItem( BOARD_ITEM* aItem, PCB_LAYER_ID aLayer, bool aAllowScroll )
|
||||
{
|
||||
std::vector<BOARD_ITEM*> items;
|
||||
|
||||
if( aItem )
|
||||
items.push_back( aItem );
|
||||
|
||||
FocusOnItems( items, aLayer );
|
||||
FocusOnItems( items, aLayer, aAllowScroll );
|
||||
}
|
||||
|
||||
|
||||
void PCB_BASE_FRAME::FocusOnItems( std::vector<BOARD_ITEM*> aItems, PCB_LAYER_ID aLayer )
|
||||
void PCB_BASE_FRAME::FocusOnItems( std::vector<BOARD_ITEM*> aItems, PCB_LAYER_ID aLayer, bool aAllowScroll )
|
||||
{
|
||||
static std::vector<KIID> lastBrightenedItemIDs;
|
||||
|
||||
@ -361,7 +361,7 @@ void PCB_BASE_FRAME::FocusOnItems( std::vector<BOARD_ITEM*> aItems, PCB_LAYER_ID
|
||||
case PCB_PAD_T:
|
||||
case PCB_MARKER_T:
|
||||
case PCB_VIA_T:
|
||||
FocusOnLocation( item->GetFocusPosition() );
|
||||
FocusOnLocation( item->GetFocusPosition(), aAllowScroll );
|
||||
GetCanvas()->Refresh();
|
||||
return;
|
||||
|
||||
@ -449,7 +449,7 @@ void PCB_BASE_FRAME::FocusOnItems( std::vector<BOARD_ITEM*> aItems, PCB_LAYER_ID
|
||||
}
|
||||
}
|
||||
|
||||
FocusOnLocation( focusPt );
|
||||
FocusOnLocation( focusPt, aAllowScroll );
|
||||
|
||||
GetCanvas()->Refresh();
|
||||
}
|
||||
|
@ -349,6 +349,15 @@ PCBNEW_SETTINGS::PCBNEW_SETTINGS()
|
||||
m_params.emplace_back( new PARAM<wxString>( "system.last_footprint3d_dir",
|
||||
&m_LastFootprint3dDir, "" ) );
|
||||
|
||||
m_params.emplace_back( new PARAM<bool>( "DRC.report_all_track_errors",
|
||||
&m_DRCDialog.report_all_track_errors, false ) );
|
||||
|
||||
m_params.emplace_back( new PARAM<bool>( "DRC.crossprobe",
|
||||
&m_DRCDialog.crossprobe, true ) );
|
||||
|
||||
m_params.emplace_back( new PARAM<bool>( "DRC.scroll_on_crossprobe",
|
||||
&m_DRCDialog.scroll_on_crossprobe, true ) );
|
||||
|
||||
registerMigration( 0, 1,
|
||||
[&]()
|
||||
{
|
||||
|
@ -168,6 +168,13 @@ public:
|
||||
bool doNotExportUnconnectedPads;
|
||||
};
|
||||
|
||||
struct DIALOG_DRC
|
||||
{
|
||||
bool report_all_track_errors;
|
||||
bool crossprobe;
|
||||
bool scroll_on_crossprobe;
|
||||
};
|
||||
|
||||
struct FOOTPRINT_CHOOSER
|
||||
{
|
||||
// Footprint chooser is a FRAME, so there's no DIALOG_SHIM to save/restore control state
|
||||
@ -227,6 +234,7 @@ public:
|
||||
AUI_PANELS m_AuiPanels;
|
||||
|
||||
DIALOG_EXPORT_D356 m_ExportD356;
|
||||
DIALOG_DRC m_DRCDialog;
|
||||
FOOTPRINT_CHOOSER m_FootprintChooser;
|
||||
|
||||
ZONES m_Zones;
|
||||
|
@ -27,6 +27,7 @@
|
||||
#include <tools/pcb_selection_tool.h>
|
||||
#include <tools/pcb_picker_tool.h>
|
||||
#include <tools/edit_tool.h>
|
||||
#include <tools/drc_tool.h>
|
||||
#include <pcb_painter.h>
|
||||
#include <connectivity/connectivity_data.h>
|
||||
#include <drc/drc_engine.h>
|
||||
@ -34,11 +35,12 @@
|
||||
#include <dialogs/dialog_book_reporter.h>
|
||||
#include <dialogs/panel_setup_rules_base.h>
|
||||
#include <dialogs/dialog_footprint_associations.h>
|
||||
#include <dialogs/dialog_drc.h>
|
||||
#include <kiplatform/ui.h>
|
||||
#include <string_utils.h>
|
||||
#include <tools/board_inspection_tool.h>
|
||||
#include <fp_lib_table.h>
|
||||
#include <pcb_shape.h>
|
||||
#include <pcbnew_settings.h>
|
||||
#include <widgets/appearance_controls.h>
|
||||
#include <widgets/wx_html_report_box.h>
|
||||
#include <widgets/footprint_diff_widget.h>
|
||||
@ -338,7 +340,9 @@ wxString BOARD_INSPECTION_TOOL::InspectDRCErrorMenuText( const std::shared_ptr<R
|
||||
|
||||
void BOARD_INSPECTION_TOOL::InspectDRCError( const std::shared_ptr<RC_ITEM>& aDRCItem )
|
||||
{
|
||||
wxCHECK( m_frame, /* void */ );
|
||||
DRC_TOOL* drcTool = m_toolMgr->GetTool<DRC_TOOL>();
|
||||
|
||||
wxCHECK( drcTool && m_frame, /* void */ );
|
||||
|
||||
BOARD_ITEM* a = m_frame->GetBoard()->ResolveItem( aDRCItem->GetMainItemID() );
|
||||
BOARD_ITEM* b = m_frame->GetBoard()->ResolveItem( aDRCItem->GetAuxItemID() );
|
||||
@ -349,7 +353,7 @@ void BOARD_INSPECTION_TOOL::InspectDRCError( const std::shared_ptr<RC_ITEM>& aDR
|
||||
if( aDRCItem->GetErrorCode() == DRCE_LIB_FOOTPRINT_MISMATCH )
|
||||
{
|
||||
if( FOOTPRINT* footprint = dynamic_cast<FOOTPRINT*>( a ) )
|
||||
DiffFootprint( footprint );
|
||||
DiffFootprint( footprint, drcTool->GetDRCDialog() );
|
||||
|
||||
return;
|
||||
}
|
||||
@ -698,7 +702,7 @@ void BOARD_INSPECTION_TOOL::InspectDRCError( const std::shared_ptr<RC_ITEM>& aDR
|
||||
|
||||
r->Flush();
|
||||
|
||||
dialog->Raise();
|
||||
KIPLATFORM::UI::ReparentWindow( dialog, drcTool->GetDRCDialog() );
|
||||
dialog->Show( true );
|
||||
}
|
||||
|
||||
@ -1613,7 +1617,7 @@ int BOARD_INSPECTION_TOOL::ShowFootprintLinks( const TOOL_EVENT& aEvent )
|
||||
}
|
||||
|
||||
|
||||
void BOARD_INSPECTION_TOOL::DiffFootprint( FOOTPRINT* aFootprint )
|
||||
void BOARD_INSPECTION_TOOL::DiffFootprint( FOOTPRINT* aFootprint, wxTopLevelWindow* aReparentTo )
|
||||
{
|
||||
DIALOG_BOOK_REPORTER* dialog = m_frame->GetFootprintDiffDialog();
|
||||
|
||||
@ -1694,7 +1698,11 @@ void BOARD_INSPECTION_TOOL::DiffFootprint( FOOTPRINT* aFootprint )
|
||||
|
||||
r->Flush();
|
||||
|
||||
dialog->Raise();
|
||||
if( aReparentTo )
|
||||
KIPLATFORM::UI::ReparentWindow( dialog, aReparentTo );
|
||||
else
|
||||
dialog->Raise();
|
||||
|
||||
dialog->Show( true );
|
||||
}
|
||||
|
||||
|
@ -90,7 +90,7 @@ public:
|
||||
int ShowFootprintLinks( const TOOL_EVENT& aEvent );
|
||||
|
||||
int DiffFootprint( const TOOL_EVENT& aEvent );
|
||||
void DiffFootprint( FOOTPRINT* aFootprint );
|
||||
void DiffFootprint( FOOTPRINT* aFootprint, wxTopLevelWindow* aReparentTo = nullptr );
|
||||
|
||||
/**
|
||||
* @return true if a net or nets to highlight have been set
|
||||
|
@ -60,6 +60,8 @@ public:
|
||||
|
||||
int ShowDRCDialog( const TOOL_EVENT& aEvent );
|
||||
|
||||
DIALOG_DRC* GetDRCDialog() { return m_drcDialog; }
|
||||
|
||||
/**
|
||||
* Check to see if the DRC_TOOL dialog is currently shown
|
||||
*/
|
||||
|
@ -581,7 +581,7 @@ void TRACKS_CLEANER::cleanup( bool aDeleteDuplicateVias, bool aDeleteNullSegment
|
||||
// and extract all of the pairs of segments that might be merged. Then, perform
|
||||
// the actual merge in the main loop.
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
auto merge_returns = tp.parallelize_loop( 0, m_brd->Tracks().size(), track_loop );
|
||||
auto merge_returns = tp.submit_blocks( 0, m_brd->Tracks().size(), track_loop );
|
||||
bool retval = false;
|
||||
|
||||
for( size_t ii = 0; ii < merge_returns.size(); ++ii )
|
||||
|
@ -654,49 +654,46 @@ PCB_NET_INSPECTOR_PANEL::calculateNets( const std::vector<NETINFO_ITEM*>& aNetCo
|
||||
std::mutex resultsMutex;
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
|
||||
auto resultsFuture = tp.parallelize_loop(
|
||||
0, foundNets.size(),
|
||||
[&, this, calc]( const int start, const int end )
|
||||
auto resultsFuture = tp.submit_loop(
|
||||
0, foundNets.size(),
|
||||
[&, this, calc]( const int i )
|
||||
{
|
||||
int netCode = foundNets[i]->GetNetCode();
|
||||
|
||||
constexpr PATH_OPTIMISATIONS opts = { .OptimiseViaLayers = true,
|
||||
.MergeTracks = true,
|
||||
.OptimiseTracesInPads = true,
|
||||
.InferViaInPad = false };
|
||||
|
||||
LENGTH_DELAY_STATS lengthDetails = calc->CalculateLengthDetails(
|
||||
netItemsMap[netCode],
|
||||
opts,
|
||||
nullptr,
|
||||
nullptr,
|
||||
LENGTH_DELAY_LAYER_OPT::WITH_LAYER_DETAIL,
|
||||
m_showTimeDomainDetails ? LENGTH_DELAY_DOMAIN_OPT::WITH_DELAY_DETAIL
|
||||
: LENGTH_DELAY_DOMAIN_OPT::NO_DELAY_DETAIL );
|
||||
|
||||
if( aIncludeZeroPadNets || lengthDetails.NumPads > 0 )
|
||||
{
|
||||
for( int i = start; i < end; ++i )
|
||||
{
|
||||
int netCode = foundNets[i]->GetNetCode();
|
||||
std::unique_ptr<LIST_ITEM> new_item = std::make_unique<LIST_ITEM>( foundNets[i] );
|
||||
|
||||
constexpr PATH_OPTIMISATIONS opts = { .OptimiseViaLayers = true,
|
||||
.MergeTracks = true,
|
||||
.OptimiseTracesInPads = true,
|
||||
.InferViaInPad = false };
|
||||
new_item->SetPadCount( lengthDetails.NumPads );
|
||||
new_item->SetLayerCount( m_board->GetCopperLayerCount() );
|
||||
new_item->SetPadDieLength( lengthDetails.PadToDieLength );
|
||||
new_item->SetPadDieDelay( lengthDetails.PadToDieDelay );
|
||||
new_item->SetViaCount( lengthDetails.NumVias );
|
||||
new_item->SetViaLength( lengthDetails.ViaLength );
|
||||
new_item->SetViaDelay( lengthDetails.ViaDelay );
|
||||
new_item->SetLayerWireLengths( *lengthDetails.LayerLengths );
|
||||
|
||||
LENGTH_DELAY_STATS lengthDetails = calc->CalculateLengthDetails(
|
||||
netItemsMap[netCode],
|
||||
opts,
|
||||
nullptr,
|
||||
nullptr,
|
||||
LENGTH_DELAY_LAYER_OPT::WITH_LAYER_DETAIL,
|
||||
m_showTimeDomainDetails ? LENGTH_DELAY_DOMAIN_OPT::WITH_DELAY_DETAIL
|
||||
: LENGTH_DELAY_DOMAIN_OPT::NO_DELAY_DETAIL );
|
||||
if( m_showTimeDomainDetails )
|
||||
new_item->SetLayerWireDelays( *lengthDetails.LayerDelays );
|
||||
|
||||
if( aIncludeZeroPadNets || lengthDetails.NumPads > 0 )
|
||||
{
|
||||
std::unique_ptr<LIST_ITEM> new_item = std::make_unique<LIST_ITEM>( foundNets[i] );
|
||||
|
||||
new_item->SetPadCount( lengthDetails.NumPads );
|
||||
new_item->SetLayerCount( m_board->GetCopperLayerCount() );
|
||||
new_item->SetPadDieLength( lengthDetails.PadToDieLength );
|
||||
new_item->SetPadDieDelay( lengthDetails.PadToDieDelay );
|
||||
new_item->SetViaCount( lengthDetails.NumVias );
|
||||
new_item->SetViaLength( lengthDetails.ViaLength );
|
||||
new_item->SetViaDelay( lengthDetails.ViaDelay );
|
||||
new_item->SetLayerWireLengths( *lengthDetails.LayerLengths );
|
||||
|
||||
if( m_showTimeDomainDetails )
|
||||
new_item->SetLayerWireDelays( *lengthDetails.LayerDelays );
|
||||
|
||||
std::scoped_lock lock( resultsMutex );
|
||||
results.emplace_back( std::move( new_item ) );
|
||||
}
|
||||
}
|
||||
} );
|
||||
std::scoped_lock lock( resultsMutex );
|
||||
results.emplace_back( std::move( new_item ) );
|
||||
}
|
||||
} );
|
||||
|
||||
resultsFuture.get();
|
||||
|
||||
|
@ -611,7 +611,7 @@ bool ZONE_FILLER::Fill( const std::vector<ZONE*>& aZones, bool aCheck, wxWindow*
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
|
||||
for( const std::pair<ZONE*, PCB_LAYER_ID>& fillItem : toFill )
|
||||
returns.emplace_back( std::make_pair( tp.submit( fill_lambda, fillItem ), 0 ) );
|
||||
returns.emplace_back( std::make_pair( tp.submit_task( [&, fillItem]() { return fill_lambda( fillItem ); } ), 0 ) );
|
||||
|
||||
while( !cancelled && finished != 2 * toFill.size() )
|
||||
{
|
||||
@ -636,9 +636,9 @@ bool ZONE_FILLER::Fill( const std::vector<ZONE*>& aZones, bool aCheck, wxWindow*
|
||||
{
|
||||
// Queue the next step (will re-queue the existing step if it didn't complete)
|
||||
if( ret.second == 0 )
|
||||
returns[ii].first = tp.submit( fill_lambda, toFill[ii] );
|
||||
returns[ii].first = tp.submit_task( [&, idx = ii]() { return fill_lambda( toFill[idx] ); } );
|
||||
else if( ret.second == 1 )
|
||||
returns[ii].first = tp.submit( tesselate_lambda, toFill[ii] );
|
||||
returns[ii].first = tp.submit_task( [&, idx = ii]() { return tesselate_lambda( toFill[idx] ); } );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -827,7 +827,7 @@ bool ZONE_FILLER::Fill( const std::vector<ZONE*>& aZones, bool aCheck, wxWindow*
|
||||
return retval;
|
||||
};
|
||||
|
||||
auto island_returns = tp.parallelize_loop( 0, polys_to_check.size(), island_lambda );
|
||||
auto island_returns = tp.submit_blocks( 0, polys_to_check.size(), island_lambda );
|
||||
cancelled = false;
|
||||
|
||||
// Allow island removal threads to finish
|
||||
|
@ -147,7 +147,7 @@ long PYTHON_MANAGER::Execute( const std::vector<wxString>& aArgs,
|
||||
if( !aSaveOutput )
|
||||
{
|
||||
thread_pool& tp = GetKiCadThreadPool();
|
||||
auto ret = tp.submit( monitor, process );
|
||||
auto ret = tp.submit_task( [monitor, process] { monitor( process ); } );
|
||||
}
|
||||
}
|
||||
|
||||
|
218
thirdparty/pybind11/CMakeLists.txt
vendored
218
thirdparty/pybind11/CMakeLists.txt
vendored
@ -5,21 +5,20 @@
|
||||
# All rights reserved. Use of this source code is governed by a
|
||||
# BSD-style license that can be found in the LICENSE file.
|
||||
|
||||
#cmake_minimum_required(VERSION 3.4)
|
||||
# Propagate this policy (FindPythonInterp removal) so it can be detected later
|
||||
if(NOT CMAKE_VERSION VERSION_LESS "3.27")
|
||||
cmake_policy(GET CMP0148 _pybind11_cmp0148)
|
||||
endif()
|
||||
|
||||
# The `cmake_minimum_required(VERSION 3.4...3.22)` syntax does not work with
|
||||
# some versions of VS that have a patched CMake 3.11. This forces us to emulate
|
||||
# the behavior using the following workaround:
|
||||
if(${CMAKE_VERSION} VERSION_LESS 3.22)
|
||||
cmake_policy(VERSION ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION})
|
||||
else()
|
||||
cmake_policy(VERSION 3.22)
|
||||
cmake_minimum_required(VERSION 3.15...4.0)
|
||||
|
||||
if(_pybind11_cmp0148)
|
||||
cmake_policy(SET CMP0148 ${_pybind11_cmp0148})
|
||||
unset(_pybind11_cmp0148)
|
||||
endif()
|
||||
|
||||
# Avoid infinite recursion if tests include this as a subdirectory
|
||||
if(DEFINED PYBIND11_MASTER_PROJECT)
|
||||
return()
|
||||
endif()
|
||||
include_guard(GLOBAL)
|
||||
|
||||
# Extract project version from source
|
||||
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/include/pybind11/detail/common.h"
|
||||
@ -64,16 +63,15 @@ if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|
||||
|
||||
set(PYBIND11_MASTER_PROJECT ON)
|
||||
|
||||
if(OSX AND CMAKE_VERSION VERSION_LESS 3.7)
|
||||
# Bug in macOS CMake < 3.7 is unable to download catch
|
||||
message(WARNING "CMAKE 3.7+ needed on macOS to download catch, and newer HIGHLY recommended")
|
||||
elseif(WINDOWS AND CMAKE_VERSION VERSION_LESS 3.8)
|
||||
# Only tested with 3.8+ in CI.
|
||||
message(WARNING "CMAKE 3.8+ tested on Windows, previous versions untested")
|
||||
endif()
|
||||
|
||||
message(STATUS "CMake ${CMAKE_VERSION}")
|
||||
|
||||
if(DEFINED SKBUILD AND DEFINED ENV{PYBIND11_GLOBAL_SDIST})
|
||||
message(
|
||||
FATAL_ERROR
|
||||
"PYBIND11_GLOBAL_SDIST is not supported, use nox -s build_global or a pybind11-global SDist instead."
|
||||
)
|
||||
endif()
|
||||
|
||||
if(CMAKE_CXX_STANDARD)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
@ -82,59 +80,160 @@ if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR)
|
||||
set(pybind11_system "")
|
||||
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
if(CMAKE_VERSION VERSION_LESS "3.18")
|
||||
set(_pybind11_findpython_default OFF)
|
||||
else()
|
||||
set(_pybind11_findpython_default ON)
|
||||
endif()
|
||||
else()
|
||||
set(PYBIND11_MASTER_PROJECT OFF)
|
||||
set(pybind11_system SYSTEM)
|
||||
set(_pybind11_findpython_default COMPAT)
|
||||
endif()
|
||||
|
||||
# Options
|
||||
option(PYBIND11_INSTALL "Install pybind11 header files?" ${PYBIND11_MASTER_PROJECT})
|
||||
option(PYBIND11_TEST "Build pybind11 test suite?" ${PYBIND11_MASTER_PROJECT})
|
||||
option(PYBIND11_NOPYTHON "Disable search for Python" OFF)
|
||||
option(PYBIND11_DISABLE_HANDLE_TYPE_NAME_DEFAULT_IMPLEMENTATION
|
||||
"To enforce that a handle_type_name<> specialization exists" OFF)
|
||||
option(PYBIND11_SIMPLE_GIL_MANAGEMENT
|
||||
"Use simpler GIL management logic that does not support disassociation" OFF)
|
||||
set(PYBIND11_INTERNALS_VERSION
|
||||
""
|
||||
CACHE STRING "Override the ABI version, may be used to enable the unstable ABI.")
|
||||
option(PYBIND11_USE_CROSSCOMPILING "Respect CMAKE_CROSSCOMPILING" OFF)
|
||||
|
||||
if(PYBIND11_DISABLE_HANDLE_TYPE_NAME_DEFAULT_IMPLEMENTATION)
|
||||
add_compile_definitions(PYBIND11_DISABLE_HANDLE_TYPE_NAME_DEFAULT_IMPLEMENTATION)
|
||||
endif()
|
||||
if(PYBIND11_SIMPLE_GIL_MANAGEMENT)
|
||||
add_compile_definitions(PYBIND11_SIMPLE_GIL_MANAGEMENT)
|
||||
endif()
|
||||
|
||||
cmake_dependent_option(
|
||||
USE_PYTHON_INCLUDE_DIR
|
||||
"Install pybind11 headers in Python include directory instead of default installation prefix"
|
||||
OFF "PYBIND11_INSTALL" OFF)
|
||||
|
||||
cmake_dependent_option(PYBIND11_FINDPYTHON "Force new FindPython" OFF
|
||||
"NOT CMAKE_VERSION VERSION_LESS 3.12" OFF)
|
||||
set(PYBIND11_FINDPYTHON
|
||||
${_pybind11_findpython_default}
|
||||
CACHE STRING "Force new FindPython - NEW, OLD, COMPAT")
|
||||
|
||||
if(PYBIND11_MASTER_PROJECT)
|
||||
|
||||
# Allow PYTHON_EXECUTABLE if in FINDPYTHON mode and building pybind11's tests
|
||||
# (makes transition easier while we support both modes).
|
||||
if(PYBIND11_FINDPYTHON
|
||||
AND DEFINED PYTHON_EXECUTABLE
|
||||
AND NOT DEFINED Python_EXECUTABLE)
|
||||
set(Python_EXECUTABLE "${PYTHON_EXECUTABLE}")
|
||||
endif()
|
||||
|
||||
# This is a shortcut that is primarily for the venv cmake preset,
|
||||
# but can be used to quickly setup tests manually, too
|
||||
set(PYBIND11_CREATE_WITH_UV
|
||||
""
|
||||
CACHE STRING "Create a virtualenv if it doesn't exist")
|
||||
|
||||
if(NOT PYBIND11_CREATE_WITH_UV STREQUAL "")
|
||||
set(Python_ROOT_DIR "${CMAKE_CURRENT_BINARY_DIR}/.venv")
|
||||
if(EXISTS "${Python_ROOT_DIR}")
|
||||
if(EXISTS "${CMAKE_BINARY_DIR}/CMakeCache.txt")
|
||||
message(STATUS "Using existing venv at ${Python_ROOT_DIR}, remove or --fresh to recreate")
|
||||
else()
|
||||
# --fresh used to remove the cache
|
||||
file(REMOVE_RECURSE "${CMAKE_CURRENT_BINARY_DIR}/.venv")
|
||||
endif()
|
||||
endif()
|
||||
if(NOT EXISTS "${Python_ROOT_DIR}")
|
||||
find_program(UV uv REQUIRED)
|
||||
# CMake 3.19+ would be able to use COMMAND_ERROR_IS_FATAL
|
||||
message(
|
||||
STATUS "Creating venv with ${UV} venv -p ${PYBIND11_CREATE_WITH_UV} '${Python_ROOT_DIR}'")
|
||||
execute_process(COMMAND ${UV} venv -p ${PYBIND11_CREATE_WITH_UV} "${Python_ROOT_DIR}"
|
||||
RESULT_VARIABLE _venv_result)
|
||||
if(_venv_result AND NOT _venv_result EQUAL 0)
|
||||
message(FATAL_ERROR "uv venv failed with '${_venv_result}'")
|
||||
endif()
|
||||
message(
|
||||
STATUS
|
||||
"Installing deps with ${UV} pip install -p '${Python_ROOT_DIR}' -r tests/requirements.txt"
|
||||
)
|
||||
execute_process(
|
||||
COMMAND ${UV} pip install -p "${Python_ROOT_DIR}" -r
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/tests/requirements.txt" RESULT_VARIABLE _pip_result)
|
||||
if(_pip_result AND NOT _pip_result EQUAL 0)
|
||||
message(FATAL_ERROR "uv pip install failed with '${_pip_result}'")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
if(NOT DEFINED Python3_EXECUTABLE
|
||||
AND NOT DEFINED Python_EXECUTABLE
|
||||
AND NOT DEFINED Python_ROOT_DIR
|
||||
AND NOT DEFINED ENV{VIRTUALENV}
|
||||
AND EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/.venv")
|
||||
message(STATUS "Autodetecting Python in virtual environment")
|
||||
set(Python_ROOT_DIR "${CMAKE_CURRENT_SOURCE_DIR}/.venv")
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# NB: when adding a header don't forget to also add it to setup.py
|
||||
set(PYBIND11_HEADERS
|
||||
include/pybind11/detail/class.h
|
||||
include/pybind11/detail/common.h
|
||||
include/pybind11/detail/cpp_conduit.h
|
||||
include/pybind11/detail/descr.h
|
||||
include/pybind11/detail/dynamic_raw_ptr_cast_if_possible.h
|
||||
include/pybind11/detail/exception_translation.h
|
||||
include/pybind11/detail/function_record_pyobject.h
|
||||
include/pybind11/detail/init.h
|
||||
include/pybind11/detail/internals.h
|
||||
include/pybind11/detail/native_enum_data.h
|
||||
include/pybind11/detail/pybind11_namespace_macros.h
|
||||
include/pybind11/detail/struct_smart_holder.h
|
||||
include/pybind11/detail/type_caster_base.h
|
||||
include/pybind11/detail/typeid.h
|
||||
include/pybind11/detail/using_smart_holder.h
|
||||
include/pybind11/detail/value_and_holder.h
|
||||
include/pybind11/attr.h
|
||||
include/pybind11/buffer_info.h
|
||||
include/pybind11/cast.h
|
||||
include/pybind11/chrono.h
|
||||
include/pybind11/common.h
|
||||
include/pybind11/complex.h
|
||||
include/pybind11/conduit/pybind11_conduit_v1.h
|
||||
include/pybind11/conduit/pybind11_platform_abi_id.h
|
||||
include/pybind11/conduit/wrap_include_python_h.h
|
||||
include/pybind11/critical_section.h
|
||||
include/pybind11/options.h
|
||||
include/pybind11/eigen.h
|
||||
include/pybind11/eigen/common.h
|
||||
include/pybind11/eigen/matrix.h
|
||||
include/pybind11/eigen/tensor.h
|
||||
include/pybind11/embed.h
|
||||
include/pybind11/eval.h
|
||||
include/pybind11/gil.h
|
||||
include/pybind11/gil_safe_call_once.h
|
||||
include/pybind11/gil_simple.h
|
||||
include/pybind11/iostream.h
|
||||
include/pybind11/functional.h
|
||||
include/pybind11/native_enum.h
|
||||
include/pybind11/numpy.h
|
||||
include/pybind11/operators.h
|
||||
include/pybind11/pybind11.h
|
||||
include/pybind11/pytypes.h
|
||||
include/pybind11/subinterpreter.h
|
||||
include/pybind11/stl.h
|
||||
include/pybind11/stl_bind.h
|
||||
include/pybind11/stl/filesystem.h)
|
||||
include/pybind11/stl/filesystem.h
|
||||
include/pybind11/trampoline_self_life_support.h
|
||||
include/pybind11/type_caster_pyobject_ptr.h
|
||||
include/pybind11/typing.h
|
||||
include/pybind11/warnings.h)
|
||||
|
||||
# Compare with grep and warn if mismatched
|
||||
if(PYBIND11_MASTER_PROJECT AND NOT CMAKE_VERSION VERSION_LESS 3.12)
|
||||
if(PYBIND11_MASTER_PROJECT)
|
||||
file(
|
||||
GLOB_RECURSE _pybind11_header_check
|
||||
LIST_DIRECTORIES false
|
||||
@ -152,10 +251,7 @@ if(PYBIND11_MASTER_PROJECT AND NOT CMAKE_VERSION VERSION_LESS 3.12)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# CMake 3.12 added list(TRANSFORM <list> PREPEND
|
||||
# But we can't use it yet
|
||||
string(REPLACE "include/" "${CMAKE_CURRENT_SOURCE_DIR}/include/" PYBIND11_HEADERS
|
||||
"${PYBIND11_HEADERS}")
|
||||
list(TRANSFORM PYBIND11_HEADERS PREPEND "${CMAKE_CURRENT_SOURCE_DIR}/")
|
||||
|
||||
# Cache variable so this can be used in parent projects
|
||||
set(pybind11_INCLUDE_DIR
|
||||
@ -198,6 +294,9 @@ else()
|
||||
endif()
|
||||
|
||||
include("${CMAKE_CURRENT_SOURCE_DIR}/tools/pybind11Common.cmake")
|
||||
# https://github.com/jtojnar/cmake-snips/#concatenating-paths-when-building-pkg-config-files
|
||||
# TODO: cmake 3.20 adds the cmake_path() function, which obsoletes this snippet
|
||||
include("${CMAKE_CURRENT_SOURCE_DIR}/tools/JoinPaths.cmake")
|
||||
|
||||
# Relative directory setting
|
||||
if(USE_PYTHON_INCLUDE_DIR AND DEFINED Python_INCLUDE_DIRS)
|
||||
@ -207,6 +306,9 @@ elseif(USE_PYTHON_INCLUDE_DIR AND DEFINED PYTHON_INCLUDE_DIR)
|
||||
endif()
|
||||
|
||||
if(PYBIND11_INSTALL)
|
||||
if(DEFINED SKBUILD_PROJECT_NAME AND SKBUILD_PROJECT_NAME STREQUAL "pybind11_global")
|
||||
install(DIRECTORY ${pybind11_INCLUDE_DIR}/pybind11 DESTINATION "${SKBUILD_HEADERS_DIR}")
|
||||
endif()
|
||||
install(DIRECTORY ${pybind11_INCLUDE_DIR}/pybind11 DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||
set(PYBIND11_CMAKECONFIG_INSTALL_DIR
|
||||
"${CMAKE_INSTALL_DATAROOTDIR}/cmake/${PROJECT_NAME}"
|
||||
@ -222,25 +324,11 @@ if(PYBIND11_INSTALL)
|
||||
tools/${PROJECT_NAME}Config.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
|
||||
INSTALL_DESTINATION ${PYBIND11_CMAKECONFIG_INSTALL_DIR})
|
||||
|
||||
if(CMAKE_VERSION VERSION_LESS 3.14)
|
||||
# Remove CMAKE_SIZEOF_VOID_P from ConfigVersion.cmake since the library does
|
||||
# not depend on architecture specific settings or libraries.
|
||||
set(_PYBIND11_CMAKE_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
|
||||
unset(CMAKE_SIZEOF_VOID_P)
|
||||
|
||||
write_basic_package_version_file(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
|
||||
VERSION ${PROJECT_VERSION}
|
||||
COMPATIBILITY AnyNewerVersion)
|
||||
|
||||
set(CMAKE_SIZEOF_VOID_P ${_PYBIND11_CMAKE_SIZEOF_VOID_P})
|
||||
else()
|
||||
# CMake 3.14+ natively supports header-only libraries
|
||||
write_basic_package_version_file(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
|
||||
VERSION ${PROJECT_VERSION}
|
||||
COMPATIBILITY AnyNewerVersion ARCH_INDEPENDENT)
|
||||
endif()
|
||||
# CMake natively supports header-only libraries
|
||||
write_basic_package_version_file(
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
|
||||
VERSION ${PROJECT_VERSION}
|
||||
COMPATIBILITY AnyNewerVersion ARCH_INDEPENDENT)
|
||||
|
||||
install(
|
||||
FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
|
||||
@ -249,6 +337,7 @@ if(PYBIND11_INSTALL)
|
||||
tools/pybind11Common.cmake
|
||||
tools/pybind11Tools.cmake
|
||||
tools/pybind11NewTools.cmake
|
||||
tools/pybind11GuessPythonExtSuffix.cmake
|
||||
DESTINATION ${PYBIND11_CMAKECONFIG_INSTALL_DIR})
|
||||
|
||||
if(NOT PYBIND11_EXPORT_NAME)
|
||||
@ -262,6 +351,41 @@ if(PYBIND11_INSTALL)
|
||||
NAMESPACE "pybind11::"
|
||||
DESTINATION ${PYBIND11_CMAKECONFIG_INSTALL_DIR})
|
||||
|
||||
# pkg-config support
|
||||
if(NOT prefix_for_pc_file)
|
||||
if(IS_ABSOLUTE "${CMAKE_INSTALL_DATAROOTDIR}")
|
||||
set(prefix_for_pc_file "${CMAKE_INSTALL_PREFIX}")
|
||||
else()
|
||||
set(pc_datarootdir "${CMAKE_INSTALL_DATAROOTDIR}")
|
||||
if(CMAKE_VERSION VERSION_LESS 3.20)
|
||||
set(prefix_for_pc_file "\${pcfiledir}/..")
|
||||
while(pc_datarootdir)
|
||||
get_filename_component(pc_datarootdir "${pc_datarootdir}" DIRECTORY)
|
||||
string(APPEND prefix_for_pc_file "/..")
|
||||
endwhile()
|
||||
else()
|
||||
cmake_path(RELATIVE_PATH CMAKE_INSTALL_PREFIX BASE_DIRECTORY CMAKE_INSTALL_DATAROOTDIR
|
||||
OUTPUT_VARIABLE prefix_for_pc_file)
|
||||
endif()
|
||||
endif()
|
||||
endif()
|
||||
join_paths(includedir_for_pc_file "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}")
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/tools/pybind11.pc.in"
|
||||
"${CMAKE_CURRENT_BINARY_DIR}/pybind11.pc" @ONLY)
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pybind11.pc"
|
||||
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig/")
|
||||
|
||||
# When building a wheel, include __init__.py's for modules
|
||||
# (see https://github.com/pybind/pybind11/pull/5552)
|
||||
if(DEFINED SKBUILD_PROJECT_NAME AND SKBUILD_PROJECT_NAME STREQUAL "pybind11")
|
||||
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/empty")
|
||||
file(TOUCH "${CMAKE_CURRENT_BINARY_DIR}/empty/__init__.py")
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/empty/__init__.py"
|
||||
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/")
|
||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/empty/__init__.py"
|
||||
DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig/")
|
||||
endif()
|
||||
|
||||
# Uninstall target
|
||||
if(PYBIND11_MASTER_PROJECT)
|
||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/tools/cmake_uninstall.cmake.in"
|
||||
|
6
thirdparty/pybind11/MANIFEST.in
vendored
6
thirdparty/pybind11/MANIFEST.in
vendored
@ -1,6 +0,0 @@
|
||||
recursive-include pybind11/include/pybind11 *.h
|
||||
recursive-include pybind11 *.py
|
||||
recursive-include pybind11 py.typed
|
||||
recursive-include pybind11 *.pyi
|
||||
include pybind11/share/cmake/pybind11/*.cmake
|
||||
include LICENSE README.rst pyproject.toml setup.py setup.cfg
|
76
thirdparty/pybind11/README.rst
vendored
76
thirdparty/pybind11/README.rst
vendored
@ -1,9 +1,11 @@
|
||||
.. figure:: https://github.com/pybind/pybind11/raw/master/docs/pybind11-logo.png
|
||||
:alt: pybind11 logo
|
||||
|
||||
**pybind11 — Seamless operability between C++11 and Python**
|
||||
**pybind11 (v3) — Seamless interoperability between C++ and Python**
|
||||
|
||||
|Latest Documentation Status| |Stable Documentation Status| |Gitter chat| |GitHub Discussions| |CI| |Build status|
|
||||
|Latest Documentation Status| |Stable Documentation Status| |Gitter chat| |GitHub Discussions|
|
||||
|
||||
|CI| |Build status| |SPEC 4 — Using and Creating Nightly Wheels|
|
||||
|
||||
|Repology| |PyPI package| |Conda-forge| |Python Versions|
|
||||
|
||||
@ -32,14 +34,14 @@ this heavy machinery has become an excessively large and unnecessary
|
||||
dependency.
|
||||
|
||||
Think of this library as a tiny self-contained version of Boost.Python
|
||||
with everything stripped away that isn’t relevant for binding
|
||||
with everything stripped away that isn't relevant for binding
|
||||
generation. Without comments, the core header files only require ~4K
|
||||
lines of code and depend on Python (2.7 or 3.5+, or PyPy) and the C++
|
||||
standard library. This compact implementation was possible thanks to
|
||||
some of the new C++11 language features (specifically: tuples, lambda
|
||||
functions and variadic templates). Since its creation, this library has
|
||||
grown beyond Boost.Python in many ways, leading to dramatically simpler
|
||||
binding code in many common situations.
|
||||
lines of code and depend on Python (CPython 3.8+, PyPy, or GraalPy) and the C++
|
||||
standard library. This compact implementation was possible thanks to some C++11
|
||||
language features (specifically: tuples, lambda functions and variadic
|
||||
templates). Since its creation, this library has grown beyond Boost.Python in
|
||||
many ways, leading to dramatically simpler binding code in many common
|
||||
situations.
|
||||
|
||||
Tutorial and reference documentation is provided at
|
||||
`pybind11.readthedocs.io <https://pybind11.readthedocs.io/en/latest>`_.
|
||||
@ -71,6 +73,7 @@ pybind11 can map the following core C++ features to Python:
|
||||
- Internal references with correct reference counting
|
||||
- C++ classes with virtual (and pure virtual) methods can be extended
|
||||
in Python
|
||||
- Integrated NumPy support (NumPy 2 requires pybind11 2.12+)
|
||||
|
||||
Goodies
|
||||
-------
|
||||
@ -78,8 +81,9 @@ Goodies
|
||||
In addition to the core functionality, pybind11 provides some extra
|
||||
goodies:
|
||||
|
||||
- Python 2.7, 3.5+, and PyPy/PyPy3 7.3 are supported with an
|
||||
implementation-agnostic interface.
|
||||
- CPython 3.8+, PyPy3 7.3.17+, and GraalPy 24.1+ are supported with an
|
||||
implementation-agnostic interface (see older versions for older CPython
|
||||
and PyPy versions).
|
||||
|
||||
- It is possible to bind C++11 lambda functions with captured
|
||||
variables. The lambda capture data is stored inside the resulting
|
||||
@ -88,8 +92,8 @@ goodies:
|
||||
- pybind11 uses C++11 move constructors and move assignment operators
|
||||
whenever possible to efficiently transfer custom data types.
|
||||
|
||||
- It’s easy to expose the internal storage of custom data types through
|
||||
Pythons’ buffer protocols. This is handy e.g. for fast conversion
|
||||
- It's easy to expose the internal storage of custom data types through
|
||||
Pythons' buffer protocols. This is handy e.g. for fast conversion
|
||||
between C++ matrix classes like Eigen and NumPy without expensive
|
||||
copy operations.
|
||||
|
||||
@ -119,25 +123,55 @@ goodies:
|
||||
Supported compilers
|
||||
-------------------
|
||||
|
||||
1. Clang/LLVM 3.3 or newer (for Apple Xcode’s clang, this is 5.0.0 or
|
||||
1. Clang/LLVM 3.3 or newer (for Apple Xcode's clang, this is 5.0.0 or
|
||||
newer)
|
||||
2. GCC 4.8 or newer
|
||||
3. Microsoft Visual Studio 2015 Update 3 or newer
|
||||
3. Microsoft Visual Studio 2022 or newer (2019 probably works, but was dropped in CI)
|
||||
4. Intel classic C++ compiler 18 or newer (ICC 20.2 tested in CI)
|
||||
5. Cygwin/GCC (previously tested on 2.5.1)
|
||||
6. NVCC (CUDA 11.0 tested in CI)
|
||||
7. NVIDIA PGI (20.9 tested in CI)
|
||||
|
||||
Supported Platforms
|
||||
-------------------
|
||||
|
||||
* Windows, Linux, macOS, and iOS
|
||||
* CPython 3.8+, Pyodide, PyPy, and GraalPy
|
||||
* C++11, C++14, C++17, C++20, and C++23
|
||||
|
||||
About
|
||||
-----
|
||||
|
||||
This project was created by `Wenzel
|
||||
Jakob <http://rgl.epfl.ch/people/wjakob>`_. Significant features and/or
|
||||
improvements to the code were contributed by Jonas Adler, Lori A. Burns,
|
||||
Sylvain Corlay, Eric Cousineau, Aaron Gokaslan, Ralf Grosse-Kunstleve, Trent Houliston, Axel
|
||||
Huebl, @hulucc, Yannick Jadoul, Sergey Lyskov Johan Mabille, Tomasz Miąsko,
|
||||
Dean Moldovan, Ben Pritchard, Jason Rhinelander, Boris Schäling, Pim
|
||||
Schellart, Henry Schreiner, Ivan Smirnov, Boris Staletic, and Patrick Stewart.
|
||||
improvements to the code were contributed by
|
||||
Jonas Adler,
|
||||
Lori A. Burns,
|
||||
Sylvain Corlay,
|
||||
Eric Cousineau,
|
||||
Aaron Gokaslan,
|
||||
Ralf Grosse-Kunstleve,
|
||||
Trent Houliston,
|
||||
Axel Huebl,
|
||||
@hulucc,
|
||||
Yannick Jadoul,
|
||||
Sergey Lyskov,
|
||||
Johan Mabille,
|
||||
Tomasz Miąsko,
|
||||
Dean Moldovan,
|
||||
Ben Pritchard,
|
||||
Jason Rhinelander,
|
||||
Boris Schäling,
|
||||
Pim Schellart,
|
||||
Henry Schreiner,
|
||||
Ivan Smirnov,
|
||||
Dustin Spicuzza,
|
||||
Boris Staletic,
|
||||
Ethan Steinberg,
|
||||
Patrick Stewart,
|
||||
Ivor Wanders,
|
||||
and
|
||||
Xiaofei Wang.
|
||||
|
||||
We thank Google for a generous financial contribution to the continuous
|
||||
integration infrastructure used by this project.
|
||||
@ -178,3 +212,5 @@ to the terms and conditions of this license.
|
||||
:target: https://pypi.org/project/pybind11/
|
||||
.. |GitHub Discussions| image:: https://img.shields.io/static/v1?label=Discussions&message=Ask&color=blue&logo=github
|
||||
:target: https://github.com/pybind/pybind11/discussions
|
||||
.. |SPEC 4 — Using and Creating Nightly Wheels| image:: https://img.shields.io/badge/SPEC-4-green?labelColor=%23004811&color=%235CA038
|
||||
:target: https://scientific-python.org/specs/spec-0004/
|
||||
|
13
thirdparty/pybind11/SECURITY.md
vendored
Normal file
13
thirdparty/pybind11/SECURITY.md
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
# Security Policy
|
||||
|
||||
## Supported Versions
|
||||
|
||||
Security updates are applied only to the latest release.
|
||||
|
||||
## Reporting a Vulnerability
|
||||
|
||||
If you have discovered a security vulnerability in this project, please report it privately. **Do not disclose it as a public issue.** This gives us time to work with you to fix the issue before public exposure, reducing the chance that the exploit will be used before a patch is released.
|
||||
|
||||
Please disclose it at [security advisory](https://github.com/pybind/pybind11/security/advisories/new).
|
||||
|
||||
This project is maintained by a team of volunteers on a reasonable-effort basis. As such, please give us at least 90 days to work on a fix before public exposure.
|
3
thirdparty/pybind11/docs/Doxyfile
vendored
3
thirdparty/pybind11/docs/Doxyfile
vendored
@ -18,5 +18,4 @@ ALIASES += "endrst=\endverbatim"
|
||||
QUIET = YES
|
||||
WARNINGS = YES
|
||||
WARN_IF_UNDOCUMENTED = NO
|
||||
PREDEFINED = PY_MAJOR_VERSION=3 \
|
||||
PYBIND11_NOINLINE
|
||||
PREDEFINED = PYBIND11_NOINLINE
|
||||
|
3
thirdparty/pybind11/docs/_static/css/custom.css
vendored
Normal file
3
thirdparty/pybind11/docs/_static/css/custom.css
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
.highlight .go {
|
||||
color: #707070;
|
||||
}
|
@ -1,11 +0,0 @@
|
||||
.wy-table-responsive table td,
|
||||
.wy-table-responsive table th {
|
||||
white-space: initial !important;
|
||||
}
|
||||
.rst-content table.docutils td {
|
||||
vertical-align: top !important;
|
||||
}
|
||||
div[class^='highlight'] pre {
|
||||
white-space: pre;
|
||||
white-space: pre-wrap;
|
||||
}
|
158
thirdparty/pybind11/docs/advanced/cast/custom.rst
vendored
158
thirdparty/pybind11/docs/advanced/cast/custom.rst
vendored
@ -1,35 +1,55 @@
|
||||
.. _custom_type_caster:
|
||||
|
||||
Custom type casters
|
||||
===================
|
||||
|
||||
In very rare cases, applications may require custom type casters that cannot be
|
||||
expressed using the abstractions provided by pybind11, thus requiring raw
|
||||
Python C API calls. This is fairly advanced usage and should only be pursued by
|
||||
experts who are familiar with the intricacies of Python reference counting.
|
||||
Some applications may prefer custom type casters that convert between existing
|
||||
Python types and C++ types, similar to the ``list`` ↔ ``std::vector``
|
||||
and ``dict`` ↔ ``std::map`` conversions which are built into pybind11.
|
||||
Implementing custom type casters is fairly advanced usage.
|
||||
While it is recommended to use the pybind11 API as much as possible, more complex examples may
|
||||
require familiarity with the intricacies of the Python C API.
|
||||
You can refer to the `Python/C API Reference Manual <https://docs.python.org/3/c-api/index.html>`_
|
||||
for more information.
|
||||
|
||||
The following snippets demonstrate how this works for a very simple ``inty``
|
||||
type that that should be convertible from Python types that provide a
|
||||
``__int__(self)`` method.
|
||||
The following snippets demonstrate how this works for a very simple ``Point2D`` type.
|
||||
We want this type to be convertible to C++ from Python types implementing the
|
||||
``Sequence`` protocol and having two elements of type ``float``.
|
||||
When returned from C++ to Python, it should be converted to a Python ``tuple[float, float]``.
|
||||
For this type we could provide Python bindings for different arithmetic functions implemented
|
||||
in C++ (here demonstrated by a simple ``negate`` function).
|
||||
|
||||
..
|
||||
PLEASE KEEP THE CODE BLOCKS IN SYNC WITH
|
||||
tests/test_docs_advanced_cast_custom.cpp
|
||||
tests/test_docs_advanced_cast_custom.py
|
||||
Ideally, change the test, run pre-commit (incl. clang-format),
|
||||
then copy the changed code back here.
|
||||
Also use TEST_SUBMODULE in tests, but PYBIND11_MODULE in docs.
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
struct inty { long long_value; };
|
||||
namespace user_space {
|
||||
|
||||
void print(inty s) {
|
||||
std::cout << s.long_value << std::endl;
|
||||
}
|
||||
struct Point2D {
|
||||
double x;
|
||||
double y;
|
||||
};
|
||||
|
||||
The following Python snippet demonstrates the intended usage from the Python side:
|
||||
Point2D negate(const Point2D &point) { return Point2D{-point.x, -point.y}; }
|
||||
|
||||
} // namespace user_space
|
||||
|
||||
|
||||
The following Python snippet demonstrates the intended usage of ``negate`` from the Python side:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
class A:
|
||||
def __int__(self):
|
||||
return 123
|
||||
from my_math_module import docs_advanced_cast_custom as m
|
||||
|
||||
|
||||
from example import print
|
||||
|
||||
print(A())
|
||||
point1 = [1.0, -1.0]
|
||||
point2 = m.negate(point1)
|
||||
assert point2 == (-1.0, 1.0)
|
||||
|
||||
To register the necessary conversion routines, it is necessary to add an
|
||||
instantiation of the ``pybind11::detail::type_caster<T>`` template.
|
||||
@ -38,47 +58,57 @@ type is explicitly allowed.
|
||||
|
||||
.. code-block:: cpp
|
||||
|
||||
namespace pybind11 { namespace detail {
|
||||
template <> struct type_caster<inty> {
|
||||
public:
|
||||
/**
|
||||
* This macro establishes the name 'inty' in
|
||||
* function signatures and declares a local variable
|
||||
* 'value' of type inty
|
||||
*/
|
||||
PYBIND11_TYPE_CASTER(inty, const_name("inty"));
|
||||
namespace pybind11 {
|
||||
namespace detail {
|
||||
|
||||
/**
|
||||
* Conversion part 1 (Python->C++): convert a PyObject into a inty
|
||||
* instance or return false upon failure. The second argument
|
||||
* indicates whether implicit conversions should be applied.
|
||||
*/
|
||||
bool load(handle src, bool) {
|
||||
/* Extract PyObject from handle */
|
||||
PyObject *source = src.ptr();
|
||||
/* Try converting into a Python integer value */
|
||||
PyObject *tmp = PyNumber_Long(source);
|
||||
if (!tmp)
|
||||
template <>
|
||||
struct type_caster<user_space::Point2D> {
|
||||
// This macro inserts a lot of boilerplate code and sets the type hint.
|
||||
// `io_name` is used to specify different type hints for arguments and return values.
|
||||
// The signature of our negate function would then look like:
|
||||
// `negate(Sequence[float]) -> tuple[float, float]`
|
||||
PYBIND11_TYPE_CASTER(user_space::Point2D, io_name("Sequence[float]", "tuple[float, float]"));
|
||||
|
||||
// C++ -> Python: convert `Point2D` to `tuple[float, float]`. The second and third arguments
|
||||
// are used to indicate the return value policy and parent object (for
|
||||
// return_value_policy::reference_internal) and are often ignored by custom casters.
|
||||
// The return value should reflect the type hint specified by the second argument of `io_name`.
|
||||
static handle
|
||||
cast(const user_space::Point2D &number, return_value_policy /*policy*/, handle /*parent*/) {
|
||||
return py::make_tuple(number.x, number.y).release();
|
||||
}
|
||||
|
||||
// Python -> C++: convert a `PyObject` into a `Point2D` and return false upon failure. The
|
||||
// second argument indicates whether implicit conversions should be allowed.
|
||||
// The accepted types should reflect the type hint specified by the first argument of
|
||||
// `io_name`.
|
||||
bool load(handle src, bool /*convert*/) {
|
||||
// Check if handle is a Sequence
|
||||
if (!py::isinstance<py::sequence>(src)) {
|
||||
return false;
|
||||
}
|
||||
auto seq = py::reinterpret_borrow<py::sequence>(src);
|
||||
// Check if exactly two values are in the Sequence
|
||||
if (seq.size() != 2) {
|
||||
return false;
|
||||
}
|
||||
// Check if each element is either a float or an int
|
||||
for (auto item : seq) {
|
||||
if (!py::isinstance<py::float_>(item) && !py::isinstance<py::int_>(item)) {
|
||||
return false;
|
||||
/* Now try to convert into a C++ int */
|
||||
value.long_value = PyLong_AsLong(tmp);
|
||||
Py_DECREF(tmp);
|
||||
/* Ensure return code was OK (to avoid out-of-range errors etc) */
|
||||
return !(value.long_value == -1 && !PyErr_Occurred());
|
||||
}
|
||||
}
|
||||
value.x = seq[0].cast<double>();
|
||||
value.y = seq[1].cast<double>();
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Conversion part 2 (C++ -> Python): convert an inty instance into
|
||||
* a Python object. The second and third arguments are used to
|
||||
* indicate the return value policy and parent object (for
|
||||
* ``return_value_policy::reference_internal``) and are generally
|
||||
* ignored by implicit casters.
|
||||
*/
|
||||
static handle cast(inty src, return_value_policy /* policy */, handle /* parent */) {
|
||||
return PyLong_FromLong(src.long_value);
|
||||
}
|
||||
};
|
||||
}} // namespace pybind11::detail
|
||||
} // namespace detail
|
||||
} // namespace pybind11
|
||||
|
||||
// Bind the negate function
|
||||
PYBIND11_MODULE(docs_advanced_cast_custom, m, py::mod_gil_not_used()) { m.def("negate", user_space::negate); }
|
||||
|
||||
.. note::
|
||||
|
||||
@ -86,8 +116,22 @@ type is explicitly allowed.
|
||||
that ``T`` is default-constructible (``value`` is first default constructed
|
||||
and then ``load()`` assigns to it).
|
||||
|
||||
.. note::
|
||||
For further information on the ``return_value_policy`` argument of ``cast`` refer to :ref:`return_value_policies`.
|
||||
To learn about the ``convert`` argument of ``load`` see :ref:`nonconverting_arguments`.
|
||||
|
||||
.. warning::
|
||||
|
||||
When using custom type casters, it's important to declare them consistently
|
||||
in every compilation unit of the Python extension module. Otherwise,
|
||||
in every compilation unit of the Python extension module to satisfy the C++ One Definition Rule
|
||||
(`ODR <https://en.cppreference.com/w/cpp/language/definition>`_). Otherwise,
|
||||
undefined behavior can ensue.
|
||||
|
||||
.. note::
|
||||
|
||||
Using the type hint ``Sequence[float]`` signals to static type checkers, that not only tuples may be
|
||||
passed, but any type implementing the Sequence protocol, e.g., ``list[float]``.
|
||||
Unfortunately, that loses the length information ``tuple[float, float]`` provides.
|
||||
One way of still providing some length information in type hints is using ``typing.Annotated``, e.g.,
|
||||
``Annotated[Sequence[float], 2]``, or further add libraries like
|
||||
`annotated-types <https://github.com/annotated-types/annotated-types>`_.
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user