feat(commands): add CLOSE, HIDE, VISUALSTYLES, QUICKCALC, HYPERLINK, XOPEN
Six more standard commands by reusing existing infrastructure: - CLOSE: close the active tab (Message::TabClose) - HIDE / VISUALSTYLES: per-viewport render mode (Message::SetRenderMode) - QUICKCALC / QC: alias the CAL arithmetic evaluator - HYPERLINK <url>: attach a hyperlink via the PE_URL XData record - XOPEN: open a selected xref's source file (Message::OpenRecent) COMMANDS.md updated to 214 done / 15 partial / 33 missing of 262. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
c19c18c2f2
commit
e2a83a6487
7 changed files with 201 additions and 77 deletions
159
COMMANDS.md
159
COMMANDS.md
|
|
@ -22,6 +22,7 @@ Status of every standard CAD command in Open CAD Studio:
|
||||||
| `XLINE` | XL | Infinite construction line | ✅ |
|
| `XLINE` | XL | Infinite construction line | ✅ |
|
||||||
| `RAY` | — | One-way infinite line | ✅ |
|
| `RAY` | — | One-way infinite line | ✅ |
|
||||||
| `SPLINE` | SPL | NURBS spline | ✅ |
|
| `SPLINE` | SPL | NURBS spline | ✅ |
|
||||||
|
| `SPLINEFIT` | FITSPLINE | Fit a spline through a polyline's points | ✅ |
|
||||||
| `MLINE` | ML | Multiline | ✅ |
|
| `MLINE` | ML | Multiline | ✅ |
|
||||||
| `POINT` | PO | Point | ✅ |
|
| `POINT` | PO | Point | ✅ |
|
||||||
| `DONUT` | DO | Filled ring | ✅ |
|
| `DONUT` | DO | Filled ring | ✅ |
|
||||||
|
|
@ -35,13 +36,13 @@ Status of every standard CAD command in Open CAD Studio:
|
||||||
| `TABLE` | — | Table entity | ✅ |
|
| `TABLE` | — | Table entity | ✅ |
|
||||||
| `DIVIDE` | DIV | Divide entity into equal parts | ✅ |
|
| `DIVIDE` | DIV | Divide entity into equal parts | ✅ |
|
||||||
| `MEASURE` | ME | Divide entity at measured intervals | ✅ |
|
| `MEASURE` | ME | Divide entity at measured intervals | ✅ |
|
||||||
| `3DPOLY` | — | 3D polyline | ❌ |
|
| `3DPOLY` | — | 3D polyline | ✅ |
|
||||||
| `HELIX` | — | 3D helix | ❌ |
|
| `HELIX` | — | 3D helix | ✅ |
|
||||||
|
| `TRACE` | — | Thick 2D line (legacy) | ✅ |
|
||||||
|
| `SKETCH` | — | Freehand sketch | ✅ |
|
||||||
|
| `SOLID` | SO | Filled 2D shape (legacy) | ✅ |
|
||||||
|
| `MINSERT` | — | Matrix block insert | ✅ |
|
||||||
| `REGION` | REG | 2D closed region | ❌ |
|
| `REGION` | REG | 2D closed region | ❌ |
|
||||||
| `TRACE` | — | Thick 2D line (legacy) | ❌ |
|
|
||||||
| `SKETCH` | — | Freehand sketch | ❌ |
|
|
||||||
| `SOLID` | SO | Filled 2D shape (legacy) | ❌ |
|
|
||||||
| `MINSERT` | — | Matrix block insert | ❌ |
|
|
||||||
| `FIELD` | — | Auto-updating text field | ❌ |
|
| `FIELD` | — | Auto-updating text field | ❌ |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -81,12 +82,12 @@ Status of every standard CAD command in Open CAD Studio:
|
||||||
| `GROUP` | G | Group | ✅ |
|
| `GROUP` | G | Group | ✅ |
|
||||||
| `UNGROUP` | UG | Ungroup | ✅ |
|
| `UNGROUP` | UG | Ungroup | ✅ |
|
||||||
| `OVERKILL` | — | Remove duplicate geometry | 🔶 |
|
| `OVERKILL` | — | Remove duplicate geometry | 🔶 |
|
||||||
| `3DALIGN` | — | 3D align | ❌ |
|
| `3DMOVE` | — | 3D move | ✅ |
|
||||||
| `3DMIRROR` | — | 3D mirror | ❌ |
|
| `3DROTATE` | ROTATE3D | 3D rotate (cached solid) | ✅ |
|
||||||
| `3DMOVE` | — | 3D move | ❌ |
|
| `3DMIRROR` | MIRROR3D | 3D mirror (cached solid) | ✅ |
|
||||||
| `3DROTATE` | — | 3D rotate | ❌ |
|
| `3DALIGN` | ALIGN3D | 3D align (cached solid) | ✅ |
|
||||||
| `3DARRAY` | ARRAY3D | 3D array | ✅ |
|
| `3DARRAY` | ARRAY3D | 3D array | ✅ |
|
||||||
| `SLICE` | SL | Slice solid | ❌ |
|
| `SLICE` | SL | Slice solid with plane | ✅ |
|
||||||
| `SUBTRACT` | SU | Subtract solids | ✅ |
|
| `SUBTRACT` | SU | Subtract solids | ✅ |
|
||||||
| `UNION` | UNI | Union solids | ✅ |
|
| `UNION` | UNI | Union solids | ✅ |
|
||||||
| `INTERSECT` | IN | Intersect solids | ✅ |
|
| `INTERSECT` | IN | Intersect solids | ✅ |
|
||||||
|
|
@ -120,11 +121,11 @@ Status of every standard CAD command in Open CAD Studio:
|
||||||
| `MLEADERREMOVE` | MLR | Remove leader segment | ✅ |
|
| `MLEADERREMOVE` | MLR | Remove leader segment | ✅ |
|
||||||
| `MLEADERALIGN` | MLAL | Align multileaders | ✅ |
|
| `MLEADERALIGN` | MLAL | Align multileaders | ✅ |
|
||||||
| `MLEADERCOLLECT` | MLC | Collect multileaders | ✅ |
|
| `MLEADERCOLLECT` | MLC | Collect multileaders | ✅ |
|
||||||
| `DIMJOGGED` | DJO | Jogged radius dimension | ❌ |
|
| `DIMJOGGED` | DJO | Jogged radius dimension | ✅ |
|
||||||
| `DIMCENTER` | DCE | Center mark | ❌ |
|
| `DIMCENTER` | DCE | Center mark | ✅ |
|
||||||
| `CENTERLINE` | — | Center line | ❌ |
|
| `CENTERLINE` | — | Center line | ✅ |
|
||||||
| `CENTERMARK` | — | Center mark on arc/circle | ❌ |
|
| `CENTERMARK` | — | Center mark on arc/circle | ✅ |
|
||||||
| `QLEADER` | QL | Quick leader (legacy) | ❌ |
|
| `QLEADER` | QL | Quick leader (legacy) | ✅ |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -136,12 +137,12 @@ Status of every standard CAD command in Open CAD Studio:
|
||||||
| `DDEDIT` | ED | Edit text | ✅ |
|
| `DDEDIT` | ED | Edit text | ✅ |
|
||||||
| `FIND` | — | Find and replace text | ✅ |
|
| `FIND` | — | Find and replace text | ✅ |
|
||||||
| `TABLESTYLE` | TS | Table style manager | ✅ |
|
| `TABLESTYLE` | TS | Table style manager | ✅ |
|
||||||
|
| `DATALINK` | — | Link table to external spreadsheet (CSV) | ✅ |
|
||||||
|
| `ARCTEXT` | — | Text along an arc | ✅ |
|
||||||
|
| `TORIENT` | — | Orient text for readability | ✅ |
|
||||||
| `DATAEXTRACTION` | — | Data extraction wizard | 🔶 |
|
| `DATAEXTRACTION` | — | Data extraction wizard | 🔶 |
|
||||||
| `DATALINK` | — | Link table to external spreadsheet | 🔶 |
|
|
||||||
| `FIELD` | — | Auto-updating text field | ❌ |
|
| `FIELD` | — | Auto-updating text field | ❌ |
|
||||||
| `SPELL` | SP | Spell check | ❌ |
|
| `SPELL` | SP | Spell check | ❌ |
|
||||||
| `ARCTEXT` | — | Text along an arc | ❌ |
|
|
||||||
| `TORIENT` | — | Orient text for readability | ✅ |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -163,10 +164,10 @@ Status of every standard CAD command in Open CAD Studio:
|
||||||
| `LTSCALE` | — | Global linetype scale | ✅ |
|
| `LTSCALE` | — | Global linetype scale | ✅ |
|
||||||
| `LAYISO` | — | Isolate layer | ✅ |
|
| `LAYISO` | — | Isolate layer | ✅ |
|
||||||
| `LAYUNISO` | — | End layer isolation | ✅ |
|
| `LAYUNISO` | — | End layer isolation | ✅ |
|
||||||
|
| `LAYDEL` | — | Delete layer | ✅ |
|
||||||
|
| `LAYMRG` | — | Merge layers | ✅ |
|
||||||
|
| `LAYERSTATE` | LAS | Save / restore layer states | ✅ |
|
||||||
| `LAYWALK` | — | Walk through layers | ❌ |
|
| `LAYWALK` | — | Walk through layers | ❌ |
|
||||||
| `LAYDEL` | — | Delete layer | ❌ |
|
|
||||||
| `LAYMRG` | — | Merge layers | ❌ |
|
|
||||||
| `LAYERSTATE` | — | Save / restore layer states | ❌ |
|
|
||||||
| `LAYLOCKFADECTL` | — | Locked layer fading control | ❌ |
|
| `LAYLOCKFADECTL` | — | Locked layer fading control | ❌ |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -177,24 +178,25 @@ Status of every standard CAD command in Open CAD Studio:
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| `BLOCK` | B | Define block | ✅ |
|
| `BLOCK` | B | Define block | ✅ |
|
||||||
| `INSERT` | I | Insert block | ✅ |
|
| `INSERT` | I | Insert block | ✅ |
|
||||||
|
| `MINSERT` | — | Matrix block insert | ✅ |
|
||||||
| `WBLOCK` | W | Write block to file | ✅ |
|
| `WBLOCK` | W | Write block to file | ✅ |
|
||||||
| `XATTACH` | XA | Attach external reference | ✅ |
|
| `XATTACH` | XA | Attach external reference | ✅ |
|
||||||
| `XREF` | XR | External reference manager | ✅ |
|
| `XREF` | XR | External reference manager | ✅ |
|
||||||
| `XRELOAD` | — | Reload external reference | ✅ |
|
| `XRELOAD` | — | Reload external reference | ✅ |
|
||||||
|
| `XCLIP` | XC | Clip external reference | ✅ |
|
||||||
| `REFEDIT` | — | Edit reference in-place | ✅ |
|
| `REFEDIT` | — | Edit reference in-place | ✅ |
|
||||||
| `REFCLOSE` | — | Close reference edit | ✅ |
|
| `REFCLOSE` | — | Close reference edit | ✅ |
|
||||||
|
| `BEDIT` | BE | Block editor | ✅ |
|
||||||
|
| `BASE` | — | Set drawing base point | ✅ |
|
||||||
|
| `NCOPY` | — | Copy nested objects out of a block | ✅ |
|
||||||
| `ATTDEF` | ATT | Define attribute | ✅ |
|
| `ATTDEF` | ATT | Define attribute | ✅ |
|
||||||
| `ATTEDIT` | ATE | Edit attribute | ✅ |
|
| `ATTEDIT` | ATE | Edit attribute | ✅ |
|
||||||
| `ATTEXT` | — | Extract attributes (legacy) | ✅ |
|
| `ATTEXT` | — | Extract attributes (legacy) | ✅ |
|
||||||
| `XCLIP` | XC | Clip external reference | 🔶 |
|
| `ATTSYNC` | — | Synchronize attribute definitions | ✅ |
|
||||||
| `BASE` | — | Set drawing base point | 🔶 |
|
| `BLOCKPALETTE` | — | Multi-view block palette (command-line list) | 🔶 |
|
||||||
| `BEDIT` | BE | Block editor | 🔶 |
|
| `ATTMAN` | — | Attribute manager (command-line list) | 🔶 |
|
||||||
| `BLOCKPALETTE` | — | Multi-view block palette | 🔶 |
|
|
||||||
| `ATTMAN` | — | Attribute manager | 🔶 |
|
|
||||||
| `ATTSYNC` | — | Synchronize attribute definitions | 🔶 |
|
|
||||||
| `MINSERT` | — | Matrix block insert | ❌ |
|
|
||||||
| `XBIND` | XB | Bind xref elements to drawing | ❌ |
|
| `XBIND` | XB | Bind xref elements to drawing | ❌ |
|
||||||
| `XOPEN` | — | Open xref for editing | ❌ |
|
| `XOPEN` | — | Open xref for editing | ✅ |
|
||||||
| `BSAVE` | — | Save block in editor | ❌ |
|
| `BSAVE` | — | Save block in editor | ❌ |
|
||||||
| `BCLOSE` | — | Close block editor | ❌ |
|
| `BCLOSE` | — | Close block editor | ❌ |
|
||||||
|
|
||||||
|
|
@ -207,31 +209,30 @@ Status of every standard CAD command in Open CAD Studio:
|
||||||
| `BOX` | — | Box solid | ✅ |
|
| `BOX` | — | Box solid | ✅ |
|
||||||
| `SPHERE` | — | Sphere solid | ✅ |
|
| `SPHERE` | — | Sphere solid | ✅ |
|
||||||
| `CYLINDER` | — | Cylinder solid | ✅ |
|
| `CYLINDER` | — | Cylinder solid | ✅ |
|
||||||
|
| `CONE` | — | Cone solid | ✅ |
|
||||||
|
| `WEDGE` | — | Wedge solid | ✅ |
|
||||||
|
| `TORUS` | — | Torus solid | ✅ |
|
||||||
|
| `PYRAMID` | PYR | Pyramid solid | ✅ |
|
||||||
|
| `POLYSOLID` | — | Wall-like solid | ✅ |
|
||||||
| `EXTRUDE` | EXT | Extrude profile | ✅ |
|
| `EXTRUDE` | EXT | Extrude profile | ✅ |
|
||||||
|
| `PRESSPULL` | — | Push / pull a closed boundary | ✅ |
|
||||||
|
| `THICKEN` | — | Thicken a closed profile to a solid | ✅ |
|
||||||
| `REVOLVE` | REV | Revolve profile around axis | ✅ |
|
| `REVOLVE` | REV | Revolve profile around axis | ✅ |
|
||||||
| `SWEEP` | — | Sweep profile along path | ✅ |
|
| `SWEEP` | — | Sweep profile along path | ✅ |
|
||||||
| `LOFT` | — | Loft between profiles | ✅ |
|
| `LOFT` | — | Loft between profiles | ✅ |
|
||||||
| `MASSPROP` | — | Mass properties | ✅ |
|
| `MASSPROP` | — | Mass properties | ✅ |
|
||||||
| `EXPORTSTEP` | — | Export to STEP | ✅ |
|
| `EXPORTSTEP` | — | Export to STEP | ✅ |
|
||||||
| `EXPORTSTL` | — | Export to STL | ✅ |
|
| `EXPORTSTL` | — | Export to STL | ✅ |
|
||||||
| `CONE` | — | Cone solid | ✅ |
|
| `SLICE` | SL | Slice solid with plane | ✅ |
|
||||||
| `PYRAMID` | — | Pyramid solid | ❌ |
|
|
||||||
| `WEDGE` | — | Wedge solid | ✅ |
|
|
||||||
| `TORUS` | — | Torus solid | ✅ |
|
|
||||||
| `HELIX` | — | 3D helix | ❌ |
|
|
||||||
| `POLYSOLID` | — | Wall-like solid | ❌ |
|
|
||||||
| `PRESSPULL` | — | Push / pull a face | ❌ |
|
|
||||||
| `THICKEN` | — | Thicken surface to solid | ❌ |
|
|
||||||
| `CONVTOSOLID` | — | Convert to solid | ❌ |
|
|
||||||
| `CONVTOSURFACE` | — | Convert to surface | ❌ |
|
|
||||||
| `SLICE` | SL | Slice solid with plane | ❌ |
|
|
||||||
| `SUBTRACT` | SU | Subtract solids | ✅ |
|
| `SUBTRACT` | SU | Subtract solids | ✅ |
|
||||||
| `UNION` | UNI | Union solids | ✅ |
|
| `UNION` | UNI | Union solids | ✅ |
|
||||||
| `INTERSECT` | IN | Intersect solids | ✅ |
|
| `INTERSECT` | IN | Intersect solids | ✅ |
|
||||||
| `SECTION` | SEC | Section plane | ❌ |
|
| `INTERFERE` | INF | Interference solid from overlap | ✅ |
|
||||||
|
| `SECTION` | — | Cross-section outline of a solid | ✅ |
|
||||||
|
| `CONVTOSOLID` | — | Convert to solid | ❌ |
|
||||||
|
| `CONVTOSURFACE` | — | Convert to surface | ❌ |
|
||||||
| `SECTIONPLANE` | — | Section plane object | ❌ |
|
| `SECTIONPLANE` | — | Section plane object | ❌ |
|
||||||
| `FLATSHOT` | — | 2D view from 3D | ❌ |
|
| `FLATSHOT` | — | 2D view from 3D | ❌ |
|
||||||
| `INTERFERE` | INF | Interference check | ❌ |
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -245,19 +246,21 @@ Status of every standard CAD command in Open CAD Studio:
|
||||||
| `REGEN` | RE | Regenerate drawing | ✅ |
|
| `REGEN` | RE | Regenerate drawing | ✅ |
|
||||||
| `REDRAW` | R | Redraw viewport | ✅ |
|
| `REDRAW` | R | Redraw viewport | ✅ |
|
||||||
| `VPORTS` | — | Viewport configuration | ✅ |
|
| `VPORTS` | — | Viewport configuration | ✅ |
|
||||||
|
| `VPJOIN` | — | Join viewports | ✅ |
|
||||||
|
| `SYNCPVIEWPORTS` | VPSYNC | Sync viewport display settings | ✅ |
|
||||||
| `MSPACE` | MS | Switch to model space | ✅ |
|
| `MSPACE` | MS | Switch to model space | ✅ |
|
||||||
| `PSPACE` | PS | Switch to paper space | ✅ |
|
| `PSPACE` | PS | Switch to paper space | ✅ |
|
||||||
| `MVIEW` | MV | Model view in layout | ✅ |
|
| `MVIEW` | MV | Model view in layout | ✅ |
|
||||||
| `UCSICON` | — | Toggle UCS icon | ✅ |
|
| `UCSICON` | — | Toggle UCS icon | ✅ |
|
||||||
|
| `VIEW` | V | Named views manager | ✅ |
|
||||||
|
| `PLAN` | — | Switch to plan view | ✅ |
|
||||||
| `NAVVCUBE` | — | Toggle ViewCube | 🔶 |
|
| `NAVVCUBE` | — | Toggle ViewCube | 🔶 |
|
||||||
| `NAVBAR` | — | Toggle navigation bar | 🔶 |
|
| `NAVBAR` | — | Toggle navigation bar | 🔶 |
|
||||||
| `VPJOIN` | — | Join viewports | 🔶 |
|
|
||||||
| `TOOLPALETTES` | — | Tool palettes panel | 🔶 |
|
| `TOOLPALETTES` | — | Tool palettes panel | 🔶 |
|
||||||
| `PROPERTIES` | PR | Properties palette | 🔶 |
|
| `PROPERTIES` | PR | Properties palette | 🔶 |
|
||||||
| `SHEETSET` | SSM | Sheet set manager | 🔶 |
|
| `SHEETSET` | SSM | Sheet set manager | 🔶 |
|
||||||
| `FILETAB` | — | Toggle file tabs | 🔶 |
|
| `FILETAB` | — | Toggle file tabs | 🔶 |
|
||||||
| `LAYOUTTAB` | — | Toggle layout tabs | 🔶 |
|
| `LAYOUTTAB` | — | Toggle layout tabs | 🔶 |
|
||||||
| `VIEW` | V | Named views manager | ✅ |
|
|
||||||
| `DVIEW` | DV | Dynamic view (legacy) | ❌ |
|
| `DVIEW` | DV | Dynamic view (legacy) | ❌ |
|
||||||
| `NAVSWHEEL` | — | Steering wheel | ❌ |
|
| `NAVSWHEEL` | — | Steering wheel | ❌ |
|
||||||
| `RENDER` | RR | Render | ❌ |
|
| `RENDER` | RR | Render | ❌ |
|
||||||
|
|
@ -265,9 +268,8 @@ Status of every standard CAD command in Open CAD Studio:
|
||||||
| `LIGHT` | — | Add scene light | ❌ |
|
| `LIGHT` | — | Add scene light | ❌ |
|
||||||
| `SUNPROPERTIES` | — | Sun light settings | ❌ |
|
| `SUNPROPERTIES` | — | Sun light settings | ❌ |
|
||||||
| `MATERIALS` | MAT | Material editor | ❌ |
|
| `MATERIALS` | MAT | Material editor | ❌ |
|
||||||
| `VISUALSTYLES` | — | Visual style manager | ❌ |
|
| `VISUALSTYLES` | — | Apply a built-in visual style (no custom-style manager) | 🔶 |
|
||||||
| `HIDE` | HI | Hidden-line regeneration | ❌ |
|
| `HIDE` | HI | Hidden-line regeneration | ✅ |
|
||||||
| `PLAN` | — | Switch to plan view | ❌ |
|
|
||||||
| `VPMAX` | — | Maximize viewport | ❌ |
|
| `VPMAX` | — | Maximize viewport | ❌ |
|
||||||
| `VPMIN` | — | Restore viewport | ❌ |
|
| `VPMIN` | — | Restore viewport | ❌ |
|
||||||
|
|
||||||
|
|
@ -285,10 +287,10 @@ Status of every standard CAD command in Open CAD Studio:
|
||||||
| `DIST` | DI | Distance between two points | ✅ |
|
| `DIST` | DI | Distance between two points | ✅ |
|
||||||
| `ID` | — | Point coordinate | ✅ |
|
| `ID` | — | Point coordinate | ✅ |
|
||||||
| `LIST` | LI | List object data | ✅ |
|
| `LIST` | LI | List object data | ✅ |
|
||||||
| `DBLIST` | — | List all objects | ❌ |
|
| `DBLIST` | — | List all objects | ✅ |
|
||||||
| `MEASUREGEOM` | — | Measure distance / angle / area | ❌ |
|
| `MEASUREGEOM` | — | Measure distance / angle / area | ✅ |
|
||||||
| `QUICKCALC` | QC | Quick calculator | ❌ |
|
| `CAL` | — | Command-line calculator | ✅ |
|
||||||
| `CAL` | — | Command-line calculator | ❌ |
|
| `QUICKCALC` | QC | Quick calculator | ✅ |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -301,15 +303,16 @@ Status of every standard CAD command in Open CAD Studio:
|
||||||
| `SAVE` | — | Save | ✅ |
|
| `SAVE` | — | Save | ✅ |
|
||||||
| `SAVEAS` | — | Save as | ✅ |
|
| `SAVEAS` | — | Save as | ✅ |
|
||||||
| `QSAVE` | — | Quick save | ✅ |
|
| `QSAVE` | — | Quick save | ✅ |
|
||||||
|
| `SAVEALL` | — | Save all open drawings | ✅ |
|
||||||
| `PLOT` | — | Print / plot | ✅ |
|
| `PLOT` | — | Print / plot | ✅ |
|
||||||
| `EXPORT` | — | Export | ✅ |
|
| `EXPORT` | — | Export | ✅ |
|
||||||
|
| `EXPORTPDF` | — | Export to PDF | ✅ |
|
||||||
| `PAGESETUP` | — | Page setup | ✅ |
|
| `PAGESETUP` | — | Page setup | ✅ |
|
||||||
| `PLOTSTYLE` | — | Plot style | ✅ |
|
| `PLOTSTYLE` | — | Plot style | ✅ |
|
||||||
| `PURGE` | PU | Purge unused items | ✅ |
|
| `PURGE` | PU | Purge unused items | ✅ |
|
||||||
| `EXPORTPDF` | — | Export to PDF | ❌ |
|
|
||||||
| `RECOVER` | — | Recover damaged drawing | ❌ |
|
|
||||||
| `CLOSE` | — | Close drawing | ❌ |
|
|
||||||
| `QUIT` | — | Exit application | ✅ |
|
| `QUIT` | — | Exit application | ✅ |
|
||||||
|
| `RECOVER` | — | Recover damaged drawing | ❌ |
|
||||||
|
| `CLOSE` | — | Close drawing | ✅ |
|
||||||
| `ARCHIVE` | — | Archive drawing set | ❌ |
|
| `ARCHIVE` | — | Archive drawing set | ❌ |
|
||||||
| `ETRANSMIT` | — | Transmit drawing package | ❌ |
|
| `ETRANSMIT` | — | Transmit drawing package | ❌ |
|
||||||
|
|
||||||
|
|
@ -324,18 +327,19 @@ Status of every standard CAD command in Open CAD Studio:
|
||||||
| `PLOTSTYLEEDITOR` | — | Plot style editor | ✅ |
|
| `PLOTSTYLEEDITOR` | — | Plot style editor | ✅ |
|
||||||
| `MLEADERSTYLE` | — | Multileader style manager | ✅ |
|
| `MLEADERSTYLE` | — | Multileader style manager | ✅ |
|
||||||
| `DIMSTYLE` | D | Dimension style manager | ✅ |
|
| `DIMSTYLE` | D | Dimension style manager | ✅ |
|
||||||
|
| `CUI` | — | Customize user interface | ✅ |
|
||||||
|
| `CUIIMPORT` | — | Import customization file | ✅ |
|
||||||
|
| `CUIEXPORT` | — | Export customization file | ✅ |
|
||||||
|
| `ALIASEDIT` | — | Edit command aliases | ✅ |
|
||||||
|
| `OPTIONS` | OP | Application settings (drafting) | ✅ |
|
||||||
|
| `OBJECTSCALE` | — | Mark objects annotative | ✅ |
|
||||||
|
| `SCRIPT` | SCR | Run script file | ✅ |
|
||||||
| `AUDIT` | — | Audit drawing integrity | 🔶 |
|
| `AUDIT` | — | Audit drawing integrity | 🔶 |
|
||||||
| `OVERKILL` | — | Remove duplicate geometry | 🔶 |
|
| `OVERKILL` | — | Remove duplicate geometry | 🔶 |
|
||||||
| `CUI` | — | Customize user interface | 🔶 |
|
|
||||||
| `CUIIMPORT` | — | Import customization file | 🔶 |
|
|
||||||
| `CUIEXPORT` | — | Export customization file | 🔶 |
|
|
||||||
| `ALIASEDIT` | — | Edit command aliases | 🔶 |
|
|
||||||
| `FINDNONPURGEABLE` | — | Find non-purgeable items | 🔶 |
|
| `FINDNONPURGEABLE` | — | Find non-purgeable items | 🔶 |
|
||||||
| `OPTIONS` | OP | Application settings | 🔶 |
|
|
||||||
| `XBIND` | — | Bind xref elements | ❌ |
|
| `XBIND` | — | Bind xref elements | ❌ |
|
||||||
| `HYPERLINK` | — | Insert hyperlink | ❌ |
|
| `HYPERLINK` | — | Insert hyperlink | ✅ |
|
||||||
| `DBCONNECT` | — | Connect to external database | ❌ |
|
| `DBCONNECT` | — | Connect to external database | ❌ |
|
||||||
| `SCRIPT` | SCR | Run script file | ❌ |
|
|
||||||
| `APPLOAD` | — | Load application (LISP / ARX) | ❌ |
|
| `APPLOAD` | — | Load application (LISP / ARX) | ❌ |
|
||||||
| `NETLOAD` | — | Load .NET plug-in | ❌ |
|
| `NETLOAD` | — | Load .NET plug-in | ❌ |
|
||||||
| `ACTRECORD` | — | Record action macro | ❌ |
|
| `ACTRECORD` | — | Record action macro | ❌ |
|
||||||
|
|
@ -347,15 +351,22 @@ Status of every standard CAD command in Open CAD Studio:
|
||||||
|
|
||||||
| Category | Total | ✅ Done | 🔶 Partial | ❌ Missing |
|
| Category | Total | ✅ Done | 🔶 Partial | ❌ Missing |
|
||||||
|---|---|---|---|---|
|
|---|---|---|---|---|
|
||||||
| Draw | 31 | 20 | 0 | 11 |
|
| Draw | 32 | 30 | 0 | 2 |
|
||||||
| Modify | 42 | 34 | 1 | 7 |
|
| Modify | 42 | 39 | 1 | 2 |
|
||||||
| Dimension | 25 | 22 | 0 | 3 |
|
| Dimension | 26 | 26 | 0 | 0 |
|
||||||
| Text & Table | 9 | 6 | 2 | 1 |
|
| Text & Table | 10 | 7 | 1 | 2 |
|
||||||
| Layer | 19 | 14 | 0 | 5 |
|
| Layer | 19 | 17 | 0 | 2 |
|
||||||
| Block & Reference | 22 | 11 | 6 | 5 |
|
| Block & Reference | 23 | 18 | 2 | 3 |
|
||||||
| 3D Modeling | 28 | 16 | 0 | 12 |
|
| 3D Modeling | 27 | 23 | 0 | 4 |
|
||||||
| View & Navigation | 31 | 11 | 8 | 12 |
|
| View & Navigation | 32 | 15 | 8 | 9 |
|
||||||
| Inquiry | 12 | 8 | 0 | 4 |
|
| Inquiry | 12 | 12 | 0 | 0 |
|
||||||
| File & Plot | 16 | 11 | 0 | 5 |
|
| File & Plot | 17 | 14 | 0 | 3 |
|
||||||
| Manage & Customize | 21 | 5 | 7 | 9 |
|
| Manage & Customize | 22 | 13 | 3 | 6 |
|
||||||
| **Total** | **256** | **158** | **24** | **74** |
|
| **Total** | **262** | **214** | **15** | **33** |
|
||||||
|
|
||||||
|
> Counts include commands listed under more than one category (e.g. `SLICE`, `HELIX`,
|
||||||
|
> `MINSERT`, `SUBTRACT`/`UNION`/`INTERSECT` appear in both their 2D and 3D groups).
|
||||||
|
>
|
||||||
|
> Still out of scope: `POINTCLOUDATTACH`/`RECAP` (proprietary binary point-cloud parser
|
||||||
|
> plus a GPU point renderer) and `UNDERLAYLAYERS`/`UOSNAP` (PDF/DWF internal-layer
|
||||||
|
> parsing) — each needs an external dependency and real test files.
|
||||||
|
|
|
||||||
|
|
@ -565,6 +565,36 @@ impl OpenCADStudio {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// XOPEN — open the source file of the selected external reference in
|
||||||
|
// a new tab (reuses the existence-checked OpenRecent path).
|
||||||
|
"XOPEN" => {
|
||||||
|
let names: Vec<String> = self.tabs[i]
|
||||||
|
.scene
|
||||||
|
.selected_entities()
|
||||||
|
.iter()
|
||||||
|
.filter_map(|(_, e)| match e {
|
||||||
|
acadrust::EntityType::Insert(ins) => Some(ins.block_name.clone()),
|
||||||
|
_ => None,
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
let path = names.iter().find_map(|bn| {
|
||||||
|
let br = self.tabs[i].scene.document.block_records.get(bn)?;
|
||||||
|
if br.xref_path.is_empty() {
|
||||||
|
None
|
||||||
|
} else {
|
||||||
|
Some(br.xref_path.clone())
|
||||||
|
}
|
||||||
|
});
|
||||||
|
match path {
|
||||||
|
Some(p) => {
|
||||||
|
return Some(Task::done(Message::OpenRecent(std::path::PathBuf::from(p))))
|
||||||
|
}
|
||||||
|
None => self
|
||||||
|
.command_line
|
||||||
|
.push_error("XOPEN: select an external reference (xref) to open."),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// NCOPY — copy the nested objects of the selected block reference(s)
|
// NCOPY — copy the nested objects of the selected block reference(s)
|
||||||
// into model space, keeping the block (a non-destructive extraction;
|
// into model space, keeping the block (a non-destructive extraction;
|
||||||
// every nested object is copied — the block is not exploded).
|
// every nested object is copied — the block is not exploded).
|
||||||
|
|
|
||||||
|
|
@ -566,6 +566,38 @@ impl OpenCADStudio {
|
||||||
return Some(Task::none());
|
return Some(Task::none());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HYPERLINK <url> — attach a hyperlink to the selected objects, stored
|
||||||
|
// in the standard PE_URL XData record so it round-trips in the file.
|
||||||
|
cmd if cmd == "HYPERLINK" || cmd.starts_with("HYPERLINK ") => {
|
||||||
|
use acadrust::xdata::{ExtendedDataRecord, XDataValue};
|
||||||
|
let url = cmd.strip_prefix("HYPERLINK").unwrap_or("").trim().to_string();
|
||||||
|
if url.is_empty() {
|
||||||
|
self.command_line.push_info("Usage: HYPERLINK <url> (select objects first)");
|
||||||
|
return Some(Task::none());
|
||||||
|
}
|
||||||
|
let handles: Vec<acadrust::Handle> =
|
||||||
|
self.tabs[i].scene.selected_entities().iter().map(|(h, _)| *h).collect();
|
||||||
|
if handles.is_empty() {
|
||||||
|
self.command_line.push_error("HYPERLINK: select objects first.");
|
||||||
|
return Some(Task::none());
|
||||||
|
}
|
||||||
|
self.push_undo_snapshot(i, "HYPERLINK");
|
||||||
|
let mut n = 0usize;
|
||||||
|
for h in &handles {
|
||||||
|
if let Some(e) = self.tabs[i].scene.document.get_entity_mut(*h) {
|
||||||
|
let xd = &mut e.common_mut().extended_data;
|
||||||
|
let mut rec = ExtendedDataRecord::new("PE_URL");
|
||||||
|
rec.add_value(XDataValue::String(url.clone()));
|
||||||
|
xd.add_record(rec);
|
||||||
|
n += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
self.tabs[i].dirty = true;
|
||||||
|
self.command_line
|
||||||
|
.push_output(&format!("HYPERLINK: attached to {n} object(s)."));
|
||||||
|
return Some(Task::none());
|
||||||
|
}
|
||||||
|
|
||||||
// ADJUST — set brightness / contrast / fade on selected raster images
|
// ADJUST — set brightness / contrast / fade on selected raster images
|
||||||
// ADJUST BRIGHTNESS|CONTRAST|FADE <0-100>
|
// ADJUST BRIGHTNESS|CONTRAST|FADE <0-100>
|
||||||
cmd if cmd == "ADJUST" || cmd.starts_with("ADJUST ") => {
|
cmd if cmd == "ADJUST" || cmd.starts_with("ADJUST ") => {
|
||||||
|
|
|
||||||
|
|
@ -137,6 +137,12 @@ impl OpenCADStudio {
|
||||||
.push_output(&format!("Visual style: {label}."));
|
.push_output(&format!("Visual style: {label}."));
|
||||||
return Some(Task::done(Message::SetWireframe(wireframe)));
|
return Some(Task::done(Message::SetWireframe(wireframe)));
|
||||||
}
|
}
|
||||||
|
// CLOSE — close the active drawing tab (with the unsaved-changes
|
||||||
|
// prompt the tab-close handler already runs).
|
||||||
|
"CLOSE" => {
|
||||||
|
return Some(Task::done(Message::TabClose(self.active_tab)));
|
||||||
|
}
|
||||||
|
|
||||||
"EXIT" | "QUIT" => {
|
"EXIT" | "QUIT" => {
|
||||||
// Funnel through the OS close path so the unsaved-changes
|
// Funnel through the OS close path so the unsaved-changes
|
||||||
// dialog runs before `iced::exit()`. Falls back to a hard
|
// dialog runs before `iced::exit()`. Falls back to a hard
|
||||||
|
|
|
||||||
|
|
@ -45,10 +45,16 @@ impl OpenCADStudio {
|
||||||
return Some(Task::done(Message::QSelectOpen));
|
return Some(Task::done(Message::QSelectOpen));
|
||||||
}
|
}
|
||||||
|
|
||||||
// CAL <expression> — evaluate an arithmetic expression
|
// CAL / QUICKCALC <expression> — evaluate an arithmetic expression
|
||||||
// (+ - * /, parentheses, unary minus, decimals).
|
// (+ - * /, parentheses, unary minus, decimals).
|
||||||
cmd if cmd == "CAL" || cmd.starts_with("CAL ") => {
|
cmd if cmd == "CAL"
|
||||||
let expr = cmd.trim_start_matches("CAL").trim();
|
|| cmd == "QUICKCALC"
|
||||||
|
|| cmd == "QC"
|
||||||
|
|| cmd.starts_with("CAL ")
|
||||||
|
|| cmd.starts_with("QUICKCALC ")
|
||||||
|
|| cmd.starts_with("QC ") =>
|
||||||
|
{
|
||||||
|
let expr = cmd.splitn(2, char::is_whitespace).nth(1).unwrap_or("").trim();
|
||||||
if expr.is_empty() {
|
if expr.is_empty() {
|
||||||
self.command_line
|
self.command_line
|
||||||
.push_info("Usage: CAL <expression> e.g. CAL (2+3)*4");
|
.push_info("Usage: CAL <expression> e.g. CAL (2+3)*4");
|
||||||
|
|
|
||||||
|
|
@ -333,6 +333,15 @@ inventory::submit!(crate::command::CommandRegistration {
|
||||||
// Copy nested objects out of a block.
|
// Copy nested objects out of a block.
|
||||||
"NCOPY",
|
"NCOPY",
|
||||||
"NCOPYALL",
|
"NCOPYALL",
|
||||||
|
// Close tab, hidden-line / visual styles, calculator, hyperlink.
|
||||||
|
"CLOSE",
|
||||||
|
"HIDE",
|
||||||
|
"HI",
|
||||||
|
"VISUALSTYLES",
|
||||||
|
"QUICKCALC",
|
||||||
|
"QC",
|
||||||
|
"HYPERLINK",
|
||||||
|
"XOPEN",
|
||||||
// Slice/section + interference + press-pull/thicken + 3D transforms + wall/pyramid.
|
// Slice/section + interference + press-pull/thicken + 3D transforms + wall/pyramid.
|
||||||
"SLICE",
|
"SLICE",
|
||||||
"SL",
|
"SL",
|
||||||
|
|
|
||||||
|
|
@ -988,6 +988,36 @@ impl OpenCADStudio {
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// HIDE — hidden-line view of the active viewport.
|
||||||
|
"HIDE" | "HI" => {
|
||||||
|
return Some(Task::done(Message::SetRenderMode(
|
||||||
|
acadrust::entities::ViewportRenderMode::HiddenLine,
|
||||||
|
)));
|
||||||
|
}
|
||||||
|
|
||||||
|
// VISUALSTYLES <name> — apply a built-in visual style to the active
|
||||||
|
// viewport via its render mode (the style-definition manager dialog
|
||||||
|
// is not modelled; this applies the standard styles).
|
||||||
|
cmd if cmd == "VISUALSTYLES" || cmd.starts_with("VISUALSTYLES ") => {
|
||||||
|
use acadrust::entities::ViewportRenderMode as VRM;
|
||||||
|
let name = cmd.strip_prefix("VISUALSTYLES").unwrap_or("").trim().to_uppercase();
|
||||||
|
let mode = match name.as_str() {
|
||||||
|
"2DWIREFRAME" | "2D" => Some(VRM::Wireframe2D),
|
||||||
|
"3DWIREFRAME" | "WIREFRAME" | "3D" => Some(VRM::Wireframe3D),
|
||||||
|
"HIDDEN" | "HIDDENLINE" => Some(VRM::HiddenLine),
|
||||||
|
"FLAT" | "FLATSHADED" => Some(VRM::FlatShaded),
|
||||||
|
"REALISTIC" | "SHADED" | "GOURAUD" => Some(VRM::GouraudShaded),
|
||||||
|
"CONCEPTUAL" | "SHADEDWITHEDGES" => Some(VRM::GouraudShadedWithEdges),
|
||||||
|
_ => None,
|
||||||
|
};
|
||||||
|
match mode {
|
||||||
|
Some(m) => return Some(Task::done(Message::SetRenderMode(m))),
|
||||||
|
None => self.command_line.push_info(
|
||||||
|
"VISUALSTYLES <2DWIREFRAME|3DWIREFRAME|HIDDEN|REALISTIC|CONCEPTUAL|SHADED>",
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_ => return None,
|
_ => return None,
|
||||||
}
|
}
|
||||||
Some(self.finish_dispatch(cmd))
|
Some(self.finish_dispatch(cmd))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue