← Commit history

regenerate after fusion-lane (reference/fusion360-1.13.0.json, public: 12 library-authoring verbs, 5 partial): Fusion 146 of 236

Colby Knox ·8f613d76be ·13d ago ·parent a520645
4 files changed +72−31
README.md+2−2
@@ -57,12 +57,12 @@ verb by verb: [docs/coverage.md](docs/coverage.md). <!-- coverage:start (tools/generate.py writes this) --> | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---|-| **core** | 93 | 93 | 89 | 61 |+| **core** | 93 | 93 | 89 | 73 | | **native** | 46 | 46 | 41 | 27 | | **checks** | 37 | 33 | 29 | 9 | | **app** | 60 | 60 | 25 | 37 | | **platform** | 19 | 19 | 0 | 0 |-| standard (all but platform) | 236 | 232 | 184 | 134 |+| standard (all but platform) | 236 | 232 | 184 | 146 | <!-- 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+15−15
@@ -1,17 +1,17 @@ # Coverage: every standard verb on each bridge -Altium bridge 0.2.78 (the reference), KiCad bridge 1.0.68, Fusion 360 bridge 1.12.8. 54 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*.+Altium bridge 0.2.78 (the reference), KiCad bridge 1.0.68, Fusion 360 bridge 1.13.0. 54 verbs came from other bridges' proposals (tools/proposed/); they are marked *proposed*. `exact` is the same job under the same or an equivalent name; `partial` does part of it or does it differently (`verbs/coverage.json` names what in `note`); `unsupported` answers `not_supported` for the whole job and is not counted; blank is missing. Generated by `tools/generate.py` from `verbs/coverage.json`; do not edit by hand.  | Tier | Verbs | Altium | KiCad | Fusion 360 | |---|---|---|---|---|-| **core** | 93 | 93 | 89 | 61 |+| **core** | 93 | 93 | 89 | 73 | | **native** | 46 | 46 | 41 | 27 | | **checks** | 37 | 33 | 29 | 9 | | **app** | 60 | 60 | 25 | 37 | | **platform** | 19 | 19 | 0 | 0 |-| standard (all but platform) | 236 | 232 | 184 | 134 |+| standard (all but platform) | 236 | 232 | 184 | 146 |  ## core @@ -28,18 +28,18 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `board_shape` | Redefine the CURRENT board's outline as a wMm x hMm rectangle at (x0Mm, y0Mm) by rewriting the board outline's segments. | `altium_board_shape` | `kicad_board_outline` | `fusion_board_shape` | | `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. | `altium_board_summary` | `kicad_board_summary` | `fusion_board_info` (partial) | | `bodies` *proposed* | Every part's 3D body as a box: its footprint rectangle on the board and its height range above the surface it sits on (a bottom part measures down from the... | `altium_bodies` | `kicad_bodies` | `fusion_bodies` |-| `clone_symbol` | Copy a symbol inside the current SchLib under a new name, all display modes included. | `altium_clone_symbol` | `kicad_clone_symbol` |  |+| `clone_symbol` | Copy a symbol inside the current SchLib under a new name, all display modes included. | `altium_clone_symbol` | `kicad_clone_symbol` | `fusion_clone_symbol` (partial) | | `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... | `altium_component_data` | `kicad_component_data` | `fusion_component_data` | | `component_pins` | Every pad of one board component with its net, position, layer, size and hole. | `altium_component_pins` | `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. | `altium_copper_layers` | `kicad_copper_layers` | `fusion_copper_layers` |-| `copy_footprint` | Duplicate a footprint inside the current PcbLib under a new name (every primitive replicated). | `altium_copy_footprint` | `kicad_copy_footprint` |  |+| `copy_footprint` | Duplicate a footprint inside the current PcbLib under a new name (every primitive replicated). | `altium_copy_footprint` | `kicad_copy_footprint` | `fusion_copy_footprint` | | `copy_routing` *proposed* | Copy the tracks and vias inside a box to an offset, remapping nets by pairing parts (a designator map or pattern), so a repeated channel gets the same... | `altium_copy_routing` | `kicad_copy_routing` | `fusion_copy_routing` |-| `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. | `altium_create_footprint` | `kicad_create_footprint` |  |-| `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. | `altium_create_symbol` | `kicad_create_symbol` |  |+| `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. | `altium_create_footprint` | `kicad_create_footprint` | `fusion_create_footprint` |+| `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. | `altium_create_symbol` | `kicad_create_symbol` | `fusion_create_symbol` | | `doc_params` | Read or set a sheet's document parameters: the title block (Title, DocumentNumber, Revision, DrawnBy, Author, CompanyName, ...). | `altium_doc_params` | `kicad_doc_params` (partial) |  | | `edit_footprint` *proposed* | Edit a library footprint in place: change, delete, add or renumber pads; add, replace or delete graphics on a layer; set its description, tags and... | `altium_edit_footprint` | `kicad_fp_edit` | `fusion_edit_footprint` (partial) | | `edit_parts` *proposed* | Edit placed parts: value, designator, any field (add, change, remove), do-not-populate, exclusion from the BOM or position files, mounting type and the... | `altium_edit_parts` | `kicad_edit_parts` | `fusion_edit_parts` (partial) |-| `find_symbol` | Find symbols (or footprints with kind:'footprint') by part of their name across libraries: the given ones, or every installed .SchLib/.PcbLib. | `altium_find_symbol` | `kicad_find_symbol` |  |+| `find_symbol` | Find symbols (or footprints with kind:'footprint') by part of their name across libraries: the given ones, or every installed .SchLib/.PcbLib. | `altium_find_symbol` | `kicad_find_symbol` | `fusion_find_symbol` (partial) | | `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... | `altium_footprint_primitives` | `kicad_footprint_graphics` (partial) |  | | `generate_body` *proposed* | Make a part's 3D body from its package family and its datasheet dimensions (chip, SOIC, QFN, QFP, BGA, SOT-23, DFN, MELF, electrolytic can, crystal, pin... | `altium_generate_body` |  | `fusion_generate_body` | | `import_svg` *proposed* | Import SVG artwork (a logo, a label) as filled polygons on a silkscreen, copper, mask or user layer, at a position and size; curves flattened, holes kept.... | `altium_import_svg` | `kicad_import_svg` | `fusion_import_svg` (partial) |@@ -64,14 +64,14 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `read_footprint` *proposed* | Every detail of one library footprint: pads (number, type, shape, position, size, drill, layers), the layers it uses, its courtyard box, graphics per layer,... | `altium_read_footprint` | `kicad_read_footprint` | `fusion_read_footprint` | | `read_rules` | Every design rule on the current board, flat, disabled ones included: name, kind ordinal, enabled, priority, both scope expressions, comment, and Altium's... | `altium_read_rules` | `kicad_list_design_rules` | `fusion_read_rules` | | `read_schematic` | Components on the CURRENT schematic sheet (designator, library reference, comment, position, parameters) in one agent round trip. | `altium_read_schematic` | `kicad_sch_components` (partial) | `fusion_schematic` (partial) |-| `read_symbol` | Read a SchLib component back: description, display-mode count, the pins of mode 0 (designator, name, electrical type), every parameter with its hidden flag,... | `altium_read_symbol` | `kicad_read_symbol` |  |-| `remove_footprint` | Delete one footprint from the current PcbLib. | `altium_remove_footprint` | `kicad_remove_footprint` |  |+| `read_symbol` | Read a SchLib component back: description, display-mode count, the pins of mode 0 (designator, name, electrical type), every parameter with its hidden flag,... | `altium_read_symbol` | `kicad_read_symbol` | `fusion_read_symbol` (partial) |+| `remove_footprint` | Delete one footprint from the current PcbLib. | `altium_remove_footprint` | `kicad_remove_footprint` | `fusion_remove_footprint` | | `remove_graphics` *proposed* | Remove board graphics (lines, rectangles, circles, arcs, polygons, texts, dimensions) by id, or every one on a layer and of a kind. One undo step. | `altium_remove_graphics` | `kicad_remove_graphics` | `fusion_remove_graphics` | | `remove_items` | Delete specific free tracks and vias, given exactly as altium_routing_state returned them. One undo step. | `altium_remove_items` | `kicad_remove_route` (partial) | `fusion_remove_items` | | `remove_parts` *proposed* | Remove placed parts from the board by designator, as one undo step. The library is not touched (that is remove_footprint). | `altium_remove_parts` | `kicad_remove_parts` | `fusion_remove_parts` |-| `remove_symbol` | Delete one component from the current SchLib. | `altium_remove_symbol` | `kicad_remove_symbol` |  |-| `rename_footprint` | Rename a footprint in the current PcbLib. | `altium_rename_footprint` | `kicad_rename_footprint` |  |-| `rename_symbol` | Rename a component (LibReference) in the current SchLib. | `altium_rename_symbol` | `kicad_rename_symbol` |  |+| `remove_symbol` | Delete one component from the current SchLib. | `altium_remove_symbol` | `kicad_remove_symbol` | `fusion_remove_symbol` |+| `rename_footprint` | Rename a footprint in the current PcbLib. | `altium_rename_footprint` | `kicad_rename_footprint` | `fusion_rename_footprint` |+| `rename_symbol` | Rename a component (LibReference) in the current SchLib. | `altium_rename_symbol` | `kicad_rename_symbol` | `fusion_rename_symbol` | | `ripup_nets` | Delete every free track, arc and via on each named net. One undo step. | `altium_ripup_nets` | `kicad_ripup_nets` | `fusion_ripup_nets` | | `route_net` | Route one net as tracks, segment by segment; a waypoint on another layer drops a via there. One undo step, read back. | `altium_route_net` | `kicad_route_net / kicad_add_track` | `fusion_route_net` | | `routing_state` | The WHOLE current board as data, in mm: tracks, arcs, vias, pads (with owner and net), components (ref, x, y, rotation, side), polygon pours, the outline,... | `altium_routing_state` | `kicad_routing_state` | `fusion_routing_state` |@@ -104,14 +104,14 @@ Read and edit the design. Every bridge provides these: they are how an AI sees a | `set_layer_count` *proposed* | Set the board's copper layer count (2, 4, 6 or 8): the layer table and the stack-up, keeping the board thickness. | `altium_set_layer_count` | `kicad_set_layer_count` | `fusion_set_layer_count` | | `set_models` | Replace every footprint model on a SchLib component with ONE PCBLIB model (set_params footprint and add_models APPEND, which is how a symbol ends up with two). | `altium_set_models` | `kicad_footprint_models` (partial) |  | | `set_outline` | Reshape the current board's outline (a rectangle with rounded corners, or a polygon). One undo step. | `altium_set_outline` | `kicad_board_outline` | `fusion_set_outline` |-| `set_params` | Set parameters on a SchLib component, optionally its comment, and optionally link a footprint by name. | `altium_set_params` | `kicad_set_params` |  |+| `set_params` | Set parameters on a SchLib component, optionally its comment, and optionally link a footprint by name. | `altium_set_params` | `kicad_set_params` | `fusion_set_params` (partial) | | `set_track_width` | Set the width of the EXISTING tracks and arcs on nets or a net class (rules only steer new routing). Widen power nets after routing, or thin a net that... | `altium_set_track_width` | `kicad_modify_track` (partial) | `fusion_set_track_width` | | `set_visibility` | Show or hide one named parameter on a SchLib component. | `altium_set_visibility` | `kicad_set_visibility` |  | | `sheet_params` | Write parameters onto PLACED parts on the schematic sheets (the BOM write-back): MPN, Manufacturer, Mouser/DigiKey/LCSC numbers, anything. A missing... | `altium_sheet_params` | `kicad_sheet_params` |  | | `silk_state` | The silkscreen as it stands: every part's body box, its designator and comment (text, location, size, rotation, shown, Altium's measured box), and the free... | `altium_silk_state` | `kicad_silk_state` | `fusion_silk_state` | | `swap_footprint` | Replace the FIRST component on the current board with a footprint from a PcbLib at the same position, re-assigning nets by pad designator. Tracks are... | `altium_swap_footprint` | `kicad_update_footprints_from_library` (partial) |  | | `symbol_prims` | Read a SchLib component's drawing: primitive counts by kind, body rectangle, polyline bounding box, display mode and the footprint models. Read-only, use it... | `altium_symbol_prims` | `kicad_symbol_prims` |  |-| `xcopy_footprint` | Copy a footprint ACROSS libraries: from fromLib into toLib (opened and made current), optionally under a new name. | `altium_xcopy_footprint` | `kicad_xcopy_footprint` |  |+| `xcopy_footprint` | Copy a footprint ACROSS libraries: from fromLib into toLib (opened and made current), optionally under a new name. | `altium_xcopy_footprint` | `kicad_xcopy_footprint` | `fusion_xcopy_footprint` (partial) |  ## native 
verbs/coverage.json+54−13
@@ -7,7 +7,7 @@  "proposed": 54,  "compared": {   "kicad": "1.0.68",-  "fusion360": "1.12.8"+  "fusion360": "1.13.0"  },  "tiers": {   "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",@@ -174,7 +174,11 @@     "verb": "kicad_clone_symbol",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_clone_symbol",+    "match": "partial",+    "note": "one display mode (an EAGLE symbol has none)"+   }   },   {    "name": "component_data",@@ -239,7 +243,10 @@     "verb": "kicad_copy_footprint",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_copy_footprint",+    "match": "exact"+   }   },   {    "name": "copy_routing",@@ -270,7 +277,10 @@     "verb": "kicad_create_footprint",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_create_footprint",+    "match": "exact"+   }   },   {    "name": "create_symbol",@@ -284,7 +294,10 @@     "verb": "kicad_create_symbol",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_create_symbol",+    "match": "exact"+   }   },   {    "name": "doc_params",@@ -349,7 +362,11 @@     "verb": "kicad_find_symbol",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_find_symbol",+    "match": "partial",+    "note": "searches the .lbr files or folder named (Fusion keeps no installed-library list a script can read)"+   }   },   {    "name": "footprint_primitives",@@ -748,7 +765,11 @@     "verb": "kicad_read_symbol",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_read_symbol",+    "match": "partial",+    "note": "one display mode (an EAGLE symbol has none); pins carry their gate"+   }   },   {    "name": "remove_footprint",@@ -762,7 +783,10 @@     "verb": "kicad_remove_footprint",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_remove_footprint",+    "match": "exact"+   }   },   {    "name": "remove_graphics",@@ -827,7 +851,10 @@     "verb": "kicad_remove_symbol",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_remove_symbol",+    "match": "exact"+   }   },   {    "name": "rename_footprint",@@ -841,7 +868,10 @@     "verb": "kicad_rename_footprint",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_rename_footprint",+    "match": "exact"+   }   },   {    "name": "rename_symbol",@@ -855,7 +885,10 @@     "verb": "kicad_rename_symbol",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_rename_symbol",+    "match": "exact"+   }   },   {    "name": "ripup_nets",@@ -1397,7 +1430,11 @@     "verb": "kicad_set_params",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_set_params",+    "match": "partial",+    "note": "attributes on every device of the component; comment is a COMMENT attribute; footprint joins pins to pads by number"+   }   },   {    "name": "set_track_width",@@ -1501,7 +1538,11 @@     "verb": "kicad_xcopy_footprint",     "match": "exact"    },-   "fusion360": null+   "fusion360": {+    "verb": "fusion_xcopy_footprint",+    "match": "partial",+    "note": "toLib is required: an EAGLE library is a file, not a current library in an editor"+   }   },   {    "name": "add_rule",
verbs/standard.json+1−1
@@ -7,7 +7,7 @@  "proposed": 54,  "compared": {   "kicad": "1.0.68",-  "fusion360": "1.12.8"+  "fusion360": "1.13.0"  },  "tiers": {   "core": "Read and edit the design. Every bridge provides these: they are how an AI sees and changes a board.",