- Rust 71.9%
- Fluent 26.7%
- WGSL 0.7%
- Max 0.3%
- HTML 0.1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Opening / navigating a heavy 3D DWG (e.g. a BIM model with ~10k ACIS solids) was effectively frozen. Several independent costs, all addressed here: - Face3D edge/fill buffers were re-uploaded on every camera move (keyed on camera_generation). They are world-space and selection-independent, so gate them on (geometry_epoch, fill_mode) instead — a pan no longer re-walks every wire. - Solid meshes were drawn one buffer + one draw call per solid (~10k draws/ frame), which strangled the GPU front end. Concatenate every solid's LOD0 into a few large buffers (split only to stay under the 256 MB buffer cap) and draw the whole set in a handful of calls. Built once per geometry epoch, so selection / hover never re-pack it. - Selection / hover highlight is now a small tinted overlay of just the picked solids, drawn last with an Always-depth pipeline so it shows on top even when the solid is occluded — instead of re-tinting and re-uploading all meshes. - Hover / pick hit-testing scanned every triangle of every solid each move (seconds on a heavy model). Add a 3D-AABB screen-rect broad phase (MeshLodSet now carries z_aabb) and reuse the renderer's cached expanded mesh set, so picking is O(solids) cheap projections plus the few solids actually under the cursor. - Block-internal hatch hit-testing exploded every INSERT on every hover. Cache the result per geometry epoch and skip blocks that contain no hatch. - Curved-surface (cone/sphere/torus) tessellation tolerance is now radius- relative (CURVE_REL_TOL) so a cylinder's facet count is size-independent and matches the circle/arc wire tessellation, instead of exploding on large radii. Also adds docs/tessellation.md mapping every EntityType to its tessellation path (truck B-rep vs truck curve topology vs direct). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
| .cargo | ||
| .claude | ||
| .github | ||
| assets | ||
| crates | ||
| docs | ||
| packaging | ||
| plugins | ||
| src | ||
| tests | ||
| web/fonts | ||
| .gitignore | ||
| build.rs | ||
| Cargo.lock | ||
| Cargo.toml | ||
| COMMANDS.md | ||
| HEADER_AUDIT.md | ||
| index.html | ||
| LICENSE | ||
| README.md | ||
| STATUSBAR.md | ||
| Trunk.toml | ||
Open CAD Studio
OCS is a CAD application for 2D drafting and 3D modeling, built with Rust. Reads and writes DWG and DXF files natively. Also has a web version now!
OCS Web try it in the browser: https://hakanseven12.github.io/OpenCADStudio/
Features
File Formats
- DWG read/write (R13 through R2018)
- DXF read/write (R13 through R2018)
- STL export (
STLOUT/EXPORTSTL) - STEP AP203 export (
STEPOUT) - OBJ import (
IMPORTOBJ) - PDF export (plot layouts to PDF)
- WBLOCK — write selected entities or a block to an external file
- XREF — attach, reload, and auto-resolve external references
2D Drafting
| Command | Description |
|---|---|
LINE, PLINE, RECTANG, POLYGON |
Basic geometry |
CIRCLE, ARC, ELLIPSE, SPLINE |
Curves |
HATCH, HATCHEDIT |
Hatch fills with pattern, scale, angle editing |
OFFSET, TRIM, EXTEND, FILLET |
Modify geometry (supports lines, arcs, ellipses, polylines, splines) |
BREAK, STRETCH, LENGTHEN |
Shape editing |
ARRAY, MIRROR, MOVE, COPY, ROTATE, SCALE |
Transformations |
EXPLODE |
Explode blocks, dimensions, polylines, mlines |
DDEDIT |
Double-click text editing |
MASSPROP |
Area, perimeter, centroid of selected entities |
3D Modeling
| Command | Description |
|---|---|
BOX, SPHERE, CYLINDER |
Solid primitives |
EXTRUDE, REVOLVE |
Profile-based solids |
LOFT |
Ruled-surface loft through cross-sections |
SWEEP |
Sweep a profile along a path |
ARRAY3D |
3D array |
| ACIS tessellation | Renders 3DSOLID, REGION, and BODY entities |
Annotations & Dimensions
- Dimensions: Linear, Aligned, Angular, Radial, Diameter, Ordinate — with full
DIMSTYLEsupport (DIMASZ,DIMSCALE,DIMEXO,DIMEXE, and more) - Text:
MTEXT,TEXT,DTEXTwith font browser (STYLE DIALOG) - Leaders:
MLEADERwith straight and spline path types;MLEADERSTYLEmanager - Tolerances: GD&T feature control frames
- Tables:
TABLEentity render;TABLESTYLEmanager - MLine:
MLINEentity withMLSTYLEmanager andEXPLODEsupport
Paper Space & Layouts
- Multi-tab layout system with model space and unlimited paper space tabs
- Viewport projection: Model content correctly projected into paper-space viewport rectangles
- Camera persistence: View position and zoom saved per layout; restored on file open and tab switch
- Correct paper size: Physical paper dimensions read from embedded PlotSettings (not drawing limits)
- Inline MSPACE overlay — enter a viewport with double-click; edit model entities in place
VPORTS— preset viewport configurations (single, 2H, 2V, 4-way)LAYOUTMANAGER/LAYOUTPANEL— GUI layout managerPLOTSTYLEPANEL/STYLESMANAGER— plot style table editor (CTB/STB)PRINT— send layout to system printer
Blocks & References
INSERTwith attribute prompting (ATTREQ)ATTEDIT— edit block attribute values interactivelyREFEDIT/REFCLOSE— in-place block reference editingXREF— attach, reload, and resolve external DWG/DXF referencesDATAEXTRACTION— export entity property data to CSV
Snapping & Precision
- Object snaps: Endpoint, Midpoint, Center, Node, Quadrant, Intersection, Perpendicular, Tangent, Nearest, Insertion, and more
- Ellipse arc endpoints, LWPolyline arc midpoints, Hatch boundary points
- Object Snap Tracking (
OTRACK/F11) - Polar Tracking with configurable angle increment
- Dynamic Input overlay (
DYNMODE/F12) - Grid snap with adaptive spacing
- Command history navigation (↑ / ↓)
Rendering
- GPU-accelerated via WebGPU (wgpu)
- 4× MSAA anti-aliasing
- Orthographic and perspective camera
- ViewCube with face/edge/corner snapping
- Wide polylines: LWPolyline and Polyline2D filled strokes
- Raster images: GPU-textured quad pipeline (
IMAGEcommand) - Wipeout: Solid fill masking
- Complex linetypes: Text and shape elements rendered in linetype patterns
- White/black entity colors adapt to background luminance
- Per-viewport background color (
BACKGROUND) - Visual style selector (Wireframe, Shaded, etc.)
- X-ray ghost pass for selected wires occluded by geometry
UI
- Modular ribbon interface — Home, Insert, Annotate, View, Manage, Layout
- Command line with autocomplete and history
- Layer Manager with per-viewport freeze columns
- Properties panel
COLORSCHEME— runtime theme switchingSHORTCUTS— keyboard shortcuts panelSPLINEDIT— close, open, reverse spline control points- UCS icon with 3D foreshortening and axis labels
Installation
Linux (AppImage)
Download OpenCADStudio-*-linux-x86_64.AppImage from the latest release, then:
chmod +x OpenCADStudio-*-linux-x86_64.AppImage
./OpenCADStudio-*-linux-x86_64.AppImage
No installation required — runs directly on any modern Linux distribution.
Windows
Download OpenCADStudio-*-windows-x86_64.exe from the latest release and run it directly. Windows SmartScreen may show "Windows protected your PC" because the binary is not yet code-signed — click More info → Run anyway.
macOS (Apple Silicon)
Apple Silicon (M-series) only; Intel macOS isn't built. The app is ad-hoc signed but not Apple-notarised (notarisation requires a paid Apple Developer ID), so macOS Gatekeeper guards the first launch. Pick whichever path is easiest:
Option A — Homebrew (recommended):
brew install --cask --no-quarantine \
https://raw.githubusercontent.com/HakanSeven12/OpenCADStudio/main/packaging/homebrew/open-cad-studio.rb
--no-quarantine lets Gatekeeper skip the unsigned-app prompt. See packaging/homebrew/ for publishing this as a brew tap.
Option B — manual .dmg:
Download OpenCADStudio-*-macos-arm64.dmg from the latest release, open it, and drag OpenCADStudio.app to /Applications. If the first launch is blocked, clear the quarantine flag once:
xattr -dr com.apple.quarantine /Applications/OpenCADStudio.app
On older macOS you can instead right-click OpenCADStudio.app → Open and confirm; on macOS Ventura and later, approve it via System Settings → Privacy & Security → Open Anyway.
Build from Source
Requirements: Rust 1.75+
git clone https://github.com/HakanSeven12/OpenCADStudio.git
cd OpenCADStudio
cargo build --release --bin OpenCADStudio
./target/release/OpenCADStudio
License
GPL-3.0-only — see LICENSE