← Commit history

KiCad bridge 1.0.59 reference: 63 of 182 standard verbs (was 55); board model conformance (#1)

Colby Knox ·a207f3b249 ·15d ago ·parent 70f72bb
5 files changed +189−27
README.md+2−2
@@ -42,12 +42,12 @@ verb by verb: [docs/coverage.md](docs/coverage.md). <!-- coverage:start (tools/generate.py writes this) --> | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---|-| **core** | 60 | 60 | 12 | 20 |+| **core** | 60 | 60 | 20 | 20 | | **native** | 34 | 34 | 18 | 14 | | **checks** | 32 | 32 | 4 | 2 | | **app** | 56 | 56 | 21 | 20 | | **platform** | 19 | 19 | 0 | 0 |-| standard (all but platform) | 182 | 182 | 55 | 56 |+| standard (all but platform) | 182 | 182 | 63 | 56 | <!-- coverage:end -->  The **checks** tier is where the other bridges are furthest behind, and it is the cheapest to close: those verbs are
docs/coverage.md+13−13
@@ -1,17 +1,17 @@ # Coverage: every standard verb on each bridge -Reference: Altium bridge 0.2.75. Compared: KiCad bridge 1.0.58, Fusion 360 bridge 1.12.0.+Reference: Altium bridge 0.2.75. Compared: KiCad bridge 1.0.59, Fusion 360 bridge 1.12.0. `exact` is the same job under the same or an equivalent name; `partial` does part of it or does it differently; blank is missing. Generated by `tools/generate.py` from `verbs/coverage.json`; do not edit by hand.  | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---|-| **core** | 60 | 60 | 12 | 20 |+| **core** | 60 | 60 | 20 | 20 | | **native** | 34 | 34 | 18 | 14 | | **checks** | 32 | 32 | 4 | 2 | | **app** | 56 | 56 | 21 | 20 | | **platform** | 19 | 19 | 0 | 0 |-| standard (all but platform) | 182 | 182 | 55 | 56 |+| standard (all but platform) | 182 | 182 | 63 | 56 |  ## core @@ -25,23 +25,23 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `apply_silkscreen` | Land a silkscreen plan in one undo step: designators and comments moved, sized and turned (or hidden), free overlay texts and lines added (bottom texts... |  |  | | `board_outline` | Draw the board shape as tracks and arcs on a mechanical layer: the outline a fab house reads from the Gerbers. A board built by script has its shape but... |  |  | | `board_shape` | Redefine the CURRENT board's outline as a wMm x hMm rectangle at (x0Mm, y0Mm) by rewriting the board outline's segments. |  |  |-| `board_summary` | One-screen summary of the current board, shaped from one read_board round trip: component counts by side, nets, copper layers actually in use, rule counts. |  | `fusion_board_summary` |+| `board_summary` | One-screen summary of the current board, shaped from one read_board round trip: component counts by side, nets, copper layers actually in use, rule counts. | `kicad_board_summary` | `fusion_board_summary` | | `clone_symbol` | Copy a symbol inside the current SchLib under a new name, all display modes included. |  |  |-| `component_data` | Placement data for one board component, or for all of them: footprint pattern, comment, layer/side, position, rotation, size, pad count and the nets on its... |  | `fusion_component_data` |-| `component_pins` | Every pad of one board component with its net, position, layer, size and hole. |  | `fusion_component_pins` |-| `copper_layers` | Every copper layer Altium can address on the current board (top, mid 1-30, planes 1-16, bottom) with names and visibility. |  | `fusion_copper_layers` |+| `component_data` | Placement data for one board component, or for all of them: footprint pattern, comment, layer/side, position, rotation, size, pad count and the nets on its... | `kicad_component_data` | `fusion_component_data` |+| `component_pins` | Every pad of one board component with its net, position, layer, size and hole. | `kicad_component_pins` | `fusion_component_pins` |+| `copper_layers` | Every copper layer Altium can address on the current board (top, mid 1-30, planes 1-16, bottom) with names and visibility. | `kicad_copper_layers` | `fusion_copper_layers` | | `copy_footprint` | Duplicate a footprint inside the current PcbLib under a new name (every primitive replicated). |  |  | | `create_footprint` | Create one footprint from a pad list in a PcbLib (the library is created and saved if the path does not exist) and return a proof frame. |  |  | | `create_symbol` | Create one rectangular symbol from a pin list in a SchLib (the library is created and saved if the path does not exist) and return a proof frame. |  |  | | `doc_params` | Read or set a sheet's document parameters: the title block (Title, DocumentNumber, Revision, DrawnBy, Author, CompanyName, ...). |  |  | | `find_symbol` | Find symbols (or footprints with kind:'footprint') by part of their name across libraries: the given ones, or every installed .SchLib/.PcbLib. |  |  | | `footprint_primitives` | Geometry dump of one PLACED component: its tracks, arcs, pads (with solder and paste mask expansion in um) and texts in mils with layer ids; other primitive... |  |  |-| `layer_stack` | The CURRENT board's stack-up: copper layers in order with copper thickness and the dielectric under each (height, constant, material), and the total... |  | `fusion_layer_stack` |+| `layer_stack` | The CURRENT board's stack-up: copper layers in order with copper thickness and the dielectric under each (height, constant, material), and the total... | `kicad_layer_stack` | `fusion_layer_stack` | | `layers` | The current board's layer set with ids, names, kind and whether each is displayed. |  | `fusion_layers` |-| `layers_in_use` | Which layers of the current board actually carry primitives: copper layers with copper (densest first) and every layer with anything on it. |  | `fusion_layers_in_use` |-| `list_designators` | Every component designator on the current board. |  | `fusion_list_designators` |+| `layers_in_use` | Which layers of the current board actually carry primitives: copper layers with copper (densest first) and every layer with anything on it. | `kicad_layers_in_use` | `fusion_layers_in_use` |+| `list_designators` | Every component designator on the current board. | `kicad_list_designators` | `fusion_list_designators` | | `list_library` | Names of every component in a .SchLib or every footprint in a .PcbLib (kind taken from the extension). Opens the library; no screenshot. | `kicad_list_footprints / kicad_list_symbols` (partial) |  |-| `list_nets` | Every net on the current board with its pad count. |  | `fusion_list_nets` |+| `list_nets` | Every net on the current board with its pad count. | `kicad_list_nets` | `fusion_list_nets` | | `move_parts` | Move and rotate placed components; each part is read back to 0.001 mm and the exact rotation. One undo step. | `kicad_move_footprint` | `fusion_move_parts` | | `net_connections` | Every pad on the board with its net and owner (Designator.Pad), plus a bounding span and the airline length (minimum spanning tree over its pads, airlineMm)... | `kicad_trace_net / kicad_find_connections` (partial) | `fusion_net_connections` | | `normalize_bodies` | Move every 3D body of a PcbLib's footprints (or one footprint) onto its pad cluster. A body added through the canvas lands 50000 mil from the pads in the... |  |  |@@ -104,10 +104,10 @@ Wraps the EDA tool's own feature (its DRC, ERC, Gerbers, pours, Update PCB). Eve | `install_library_bundle` | One-click install of a wiki library bundle (zip of .SchLib/.PcbLib): unpack, register, open the library, prove it with a frame. | `kicad_install_library_bundle` | `fusion_install_library_bundle` | | `list_installed_libraries` | Every library in Altium's Installed Libraries list (read-only). |  |  | | `net_classes` | Net classes on the current board: list them with their nets, or make one (replacing a class of that name) with an optional width and clearance rule scoped... |  | `fusion_net_classes` |-| `netlist` | The compiled netlist of a project: every net with its pins (Designator.Pin) across every sheet, the hierarchy resolved; or one net; or compare with the nets... | `kicad_extract_netlist` | `fusion_netlist` |+| `netlist` | The compiled netlist of a project: every net with its pins (Designator.Pin) across every sheet, the hierarchy resolved; or one net; or compare with the nets... | `kicad_netlist` | `fusion_netlist` | | `panelize` | Step and repeat a board into a manufacturing panel: a new .PcbDoc holding Altium's own embedded board array of the board (rows x cols), with rails, the... |  |  | | `pcb_report` | Numbers instead of pixels: for a PcbLib, every footprint's pads, pad bounding box, primitive census and 3D bodies; for a board, outline, components with... | `kicad_errors` (partial) |  |-| `pour_state` | Every polygon pour with the copper it actually poured: filled area per pour and per layer, and the pours that poured nothing. | `kicad_zone_state` | `fusion_pour_state` |+| `pour_state` | Every polygon pour with the copper it actually poured: filled area per pour and per layer, and the pours that poured nothing. | `kicad_pour_state` | `fusion_pour_state` | | `remove_pours` | Delete polygon pours by net (and layer), or all of them, and the pour keepouts (cutouts) apply_pours made. Tracks and vias are untouched. | `kicad_remove_zone` | `fusion_remove_pours` | | `replicate_layout` | Copy one channel's placement to matching channels: each target keeps its anchor part where it is and every other part takes the source's offset and rotation... |  |  | | `repour` | Repour every polygon on the board (Altium's Repour All) and answer the copper after. Runs outside the script engine so scoped rules apply. |  | `fusion_repour` |
reference/kicad-1.0.59.jsonadded+138
@@ -0,0 +1,138 @@+{+ "bridge": "kicad",+ "version": "1.0.59",+ "verbs": [+  "kicad_3d_view",+  "kicad_3d_viewer_settings",+  "kicad_add_track",+  "kicad_add_via",+  "kicad_add_zone",+  "kicad_adom_library_heal",+  "kicad_adom_library_status",+  "kicad_analyze_connections",+  "kicad_apply_zone_plan",+  "kicad_autoroute",+  "kicad_board_pads",+  "kicad_board_summary",+  "kicad_bodies",+  "kicad_bridge_call",+  "kicad_bridge_status",+  "kicad_check_for_updates",+  "kicad_click",+  "kicad_close",+  "kicad_close_3d_viewer",+  "kicad_close_footprint_editor",+  "kicad_close_symbol_editor",+  "kicad_component_data",+  "kicad_component_pins",+  "kicad_copper_layers",+  "kicad_demo",+  "kicad_describe",+  "kicad_diagnostics",+  "kicad_dismiss_dialogs",+  "kicad_enable_software_opengl",+  "kicad_errors",+  "kicad_export_bom_csv",+  "kicad_export_gerber",+  "kicad_export_molecule",+  "kicad_export_part",+  "kicad_export_pdf",+  "kicad_export_pos",+  "kicad_export_step",+  "kicad_export_svg",+  "kicad_extract_netlist",+  "kicad_find_connections",+  "kicad_fix_keyboard",+  "kicad_format_upgrade",+  "kicad_freerouting",+  "kicad_get_settings",+  "kicad_install_footprint",+  "kicad_install_library",+  "kicad_install_library_bundle",+  "kicad_install_plugin",+  "kicad_install_symbol",+  "kicad_ipc_api",+  "kicad_launch",+  "kicad_layer_stack",+  "kicad_layers_in_use",+  "kicad_lint_board",+  "kicad_lint_library",+  "kicad_lint_schematic",+  "kicad_list_design_rules",+  "kicad_list_designators",+  "kicad_list_footprints",+  "kicad_list_nets",+  "kicad_list_symbols",+  "kicad_list_versions",+  "kicad_log_tail",+  "kicad_make_part_project",+  "kicad_menu_items",+  "kicad_model_check",+  "kicad_move_footprint",+  "kicad_netlist",+  "kicad_open_3d_viewer",+  "kicad_open_board",+  "kicad_open_editors",+  "kicad_open_footprint_editor",+  "kicad_open_schematic",+  "kicad_open_symbol_editor",+  "kicad_pcm_add_repository",+  "kicad_pcm_install",+  "kicad_pcm_list",+  "kicad_pcm_remove_repository",+  "kicad_pcm_uninstall",+  "kicad_place_footprint",+  "kicad_placement_state",+  "kicad_placement_validate",+  "kicad_plugin_diagnose",+  "kicad_pour_state",+  "kicad_prewarm",+  "kicad_progress",+  "kicad_readiness",+  "kicad_refresh_board_views",+  "kicad_remove_route",+  "kicad_remove_zone",+  "kicad_render_board",+  "kicad_rescan_libraries",+  "kicad_route",+  "kicad_route_net",+  "kicad_routing_state",+  "kicad_routing_validate",+  "kicad_run_drc",+  "kicad_run_erc",+  "kicad_sch_delete",+  "kicad_sch_label",+  "kicad_sch_move",+  "kicad_sch_place_symbol",+  "kicad_sch_set_property",+  "kicad_sch_wire",+  "kicad_screenshot_all",+  "kicad_select_clear",+  "kicad_select_net",+  "kicad_send_key",+  "kicad_set_design_rules",+  "kicad_set_settings",+  "kicad_show_2d_board",+  "kicad_show_3d_board",+  "kicad_show_3d_chip",+  "kicad_show_footprint",+  "kicad_show_library",+  "kicad_show_project",+  "kicad_show_schematic",+  "kicad_show_symbol",+  "kicad_silk_fields_batch",+  "kicad_silk_graphics_batch",+  "kicad_silk_text_batch",+  "kicad_state",+  "kicad_status",+  "kicad_taskbar_repair",+  "kicad_text_bounds",+  "kicad_trace_net",+  "kicad_uninstall",+  "kicad_uninstall_library",+  "kicad_upgrade",+  "kicad_verb_times",+  "kicad_window_info",+  "kicad_zone_state"+ ]+}
verbs/coverage.json+35−11
@@ -4,7 +4,7 @@   "version": "0.2.75"  },  "compared": {-  "kicad": "1.0.58",+  "kicad": "1.0.59",   "fusion360": "1.12.0"  },  "tiers": {@@ -61,7 +61,10 @@    "name": "board_summary",    "tier": "core",    "altium": "altium_board_summary",-   "kicad": null,+   "kicad": {+    "verb": "kicad_board_summary",+    "match": "exact"+   },    "fusion360": {     "verb": "fusion_board_summary",     "match": "exact"@@ -78,7 +81,10 @@    "name": "component_data",    "tier": "core",    "altium": "altium_component_data",-   "kicad": null,+   "kicad": {+    "verb": "kicad_component_data",+    "match": "exact"+   },    "fusion360": {     "verb": "fusion_component_data",     "match": "exact"@@ -88,7 +94,10 @@    "name": "component_pins",    "tier": "core",    "altium": "altium_component_pins",-   "kicad": null,+   "kicad": {+    "verb": "kicad_component_pins",+    "match": "exact"+   },    "fusion360": {     "verb": "fusion_component_pins",     "match": "exact"@@ -98,7 +107,10 @@    "name": "copper_layers",    "tier": "core",    "altium": "altium_copper_layers",-   "kicad": null,+   "kicad": {+    "verb": "kicad_copper_layers",+    "match": "exact"+   },    "fusion360": {     "verb": "fusion_copper_layers",     "match": "exact"@@ -150,7 +162,10 @@    "name": "layer_stack",    "tier": "core",    "altium": "altium_layer_stack",-   "kicad": null,+   "kicad": {+    "verb": "kicad_layer_stack",+    "match": "exact"+   },    "fusion360": {     "verb": "fusion_layer_stack",     "match": "exact"@@ -170,7 +185,10 @@    "name": "layers_in_use",    "tier": "core",    "altium": "altium_layers_in_use",-   "kicad": null,+   "kicad": {+    "verb": "kicad_layers_in_use",+    "match": "exact"+   },    "fusion360": {     "verb": "fusion_layers_in_use",     "match": "exact"@@ -180,7 +198,10 @@    "name": "list_designators",    "tier": "core",    "altium": "altium_list_designators",-   "kicad": null,+   "kicad": {+    "verb": "kicad_list_designators",+    "match": "exact"+   },    "fusion360": {     "verb": "fusion_list_designators",     "match": "exact"@@ -200,7 +221,10 @@    "name": "list_nets",    "tier": "core",    "altium": "altium_list_nets",-   "kicad": null,+   "kicad": {+    "verb": "kicad_list_nets",+    "match": "exact"+   },    "fusion360": {     "verb": "fusion_list_nets",     "match": "exact"@@ -710,7 +734,7 @@    "tier": "native",    "altium": "altium_netlist",    "kicad": {-    "verb": "kicad_extract_netlist",+    "verb": "kicad_netlist",     "match": "exact"    },    "fusion360": {@@ -740,7 +764,7 @@    "tier": "native",    "altium": "altium_pour_state",    "kicad": {-    "verb": "kicad_zone_state",+    "verb": "kicad_pour_state",     "match": "exact"    },    "fusion360": {
verbs/standard.json+1−1
@@ -4,7 +4,7 @@   "version": "0.2.75"  },  "compared": {-  "kicad": "1.0.58",+  "kicad": "1.0.59",   "fusion360": "1.12.0"  },  "tiers": {