[!CAUTION] 此仓库已停止维护。不接受任何 PR 或 issue。
CADmium
本项目旨在从零开始创建一款新的 CAD 程序。它体积小巧,可在 Web 浏览器中运行,源代码免费公开在 Github 上。
传统 CAD 程序耗费了数千年(原文如此,指大量集体工程时间)的集体工程时间才发展到如今的水平,因此本程序在功能广度上永远无法与之竞争。但 CADmium 旨在以不到 10% 的工作量覆盖 80% 最常见的 CAD 使用场景。目前我们面向的是只想为 3D 打印机设计一个小部件的家庭爱好者,而非想要设计汽车或飞机的公司,尽管后者未来也会实现。
如果你在寻找:
- 一个简单、现代、参数化的 CAD 界面,且可在浏览器中运行
- 能够将实体导出为 .step、.obj 或 .cadmium(一种由本项目发明的基于 json 的 CAD 格式)
- 能够将草图导出为 .svg 或 .dxf
- 无需互联网连接即可工作
那么这个项目可能适合你!
状态:早期原型。该工具尚未达到 MVP 阶段,但正在公开开发中。请不要将此分享到 HN 或 Reddit 或类似平台。 哈哈,我想那艘船已经开走了]!
总体计划
演示:我们目前正朝着首个演示版本 V0.0.1 冲刺。这是我们决定构建和发布流程的良好初步练习。
在那之后,我们将再进行几次演示(V0.0.*)版本发布,不断聚合功能,直到它感觉相当可用为止。
Alpha: 当我们感觉已经达成一个人们可能真正想要使用的 MVP 时,就是发布 Alpha 版本(V0.1.0)并主动向用户征求反馈的时候了。我们将利用这些反馈进行更多改进,如有必要,重新设计某些部分以实现出色的工作流。
除此之外,我们拭目以待!
技术
底层的边界表示引擎是 truck,它使用 rust 编写,且不依赖于任何遗留的 b-rep 引擎。
借助 truck,我们编写了一个名为 cadmium 的小型 rust 库,它提供了用于项目、工作区、草图、拉伸和约束的结构体。我们的目标是,对于偏好代码优先 CAD 的用户,这个 rust 库提供与 UI 相同的所有功能。该库能够将项目保存和加载到磁盘上的 json 文件。我们还构建了一组 javascript 绑定,以便整个项目可以编译为 wasm 并在浏览器中运行。
UI 使用 SvelteKit 和 Tailwind 构建。它托管在 Github Pages 上。我们使用 three.js 进行渲染,在此情况下,其底层使用 WebGL。我们使用 Threlte 以声明式方式管理场景图。
原生构建使用 Tauri,这是一个基于 Rust 的、围绕操作系统特定的原生 webview 的封装,允许我们从同一代码库构建原生应用。
许可证
本软件依据 Elastic License 2.0 提供。简而言之,您可以随意使用本软件,但不得将其作为服务提供给第三方。
运行代码
如果您只是想试用一下,点击此处 查看在线 Web 演示。
要在本地使用 pnpm workspace 和 turbo 进行构建:
git clone https://github.com/Cadmium-Co/CADmium.git
cd CADmium
pnpm install
pnpm dev
原生构建
# Development
pnpm tauri dev
# Generate binaries and installers
pnpm tauri build
Tauri 可以使用以下命令为原生构建生成图标](https://tauri.app/v1/guides/features/icons/):
pnpm tauri icon applications/web/public/cadmium_logo_min.svg
工具配置
pnpm
我们使用 pnpm 来管理 monorepo。请按照此处说明进行安装:https://pnpm.io/installation#using-a-standalone-script
如果你是 node 新手,可以使用 pnpm 来管理 nodejs:
# https://pnpm.io/cli/env#use
pnpm env use --global 20
rust
首先使用 rustup 安装 rust:https://rustup.rs
然后安装 wasm-pack
cargo install wasm-pack
运行测试
pnpm test
Playwright 用于 e2e 测试。您可能会被提示输入一条命令来安装它。
对于 manjaro/archlinux 用户,它可能会报告缺少依赖项。在 manjaro 上,缺少的依赖项已得到解决 感谢此评论:
yay -S aur/enchant1.6 aur/icu66 aur/libwebp052
仅监视 vitest 单元测试:
cd applications/web
pnpm test:unit -w
rust
要构建并运行 Rust 测试:
cargo test
rust 示例
使用 rust 代码的简单示例可在 packages/cadmium/examples 中找到
使用以下命令运行简单的 rust 示例:
cargo run --example project_simple_extrusion
将生成 example.obj 文件和 example.step 输出文件,.step 文件可在 CAD 查看器中查看。
git blame
为了忽略仅用于格式更改的提交,以保留正确的作者信息,请设置你的本地 git 配置:
git config blame.ignoreRevsFile .git-blame-ignore-revs
贡献
我们正在积极寻找贡献者!请加入 Discord 来帮忙!
尤其是,我们需要在以下领域获得帮助:
设计: 该工具必须看起来和用起来都令人愉悦,而我们并非设计师。我们非常乐意接受以下形式的贡献:
- 关于如何让不同元素看起来和行为更好的建议、模型或 tailwindcss 示例
- 特别是,帮助挑选一个效果好且独特的调色板
- 帮助研究如何实现深色模式
Rust: 这是我们在 Rust 中的第一个项目。我们需要经验丰富的 Rustaceans 的帮助来:
- 研究如何更好地组织 rust 代码
- 指出我在语言使用上的任何明显问题(到目前为止,我们完全避免了 Lifetimes、Traits、Rc、RefCell 等,这可能阻碍了进展)
Svelte: 这是我们使用 Svelte 的第一个项目。我们非常希望有经验丰富的眼睛来:
- 审查基本结构,并告诉我们是否犯了任何重大错误
- 在 Svelte 5 发布时帮助我们迁移
如果你觉得你愿意并且能够帮助,请加入 我们的 discord!
许可证常见问题
你们使用什么许可证?
我们使用 Elastic License v2.0。
该许可证的条款是什么?
你可以对代码做任何你想做的事,除了将其作为服务提供给第三方。
为什么你们使用该许可证而不是 MIT、GPL 等?
因为我们不希望 Autodesk、Siemens、Dassault 或 PTC 克隆我们的代码,更改标志,并将其作为他们的产品之一提供。
我能为我的家人托管一个 CADmium 实例吗?
可以。
我能为我的公司托管一个 CADmium 实例供内部使用吗?
可以。
我能为我的公司托管一个 CADmium 实例,作为免费服务提供给我的客户吗?
不可以。
我能为我的公司托管一个 CADmium 实例,作为付费服务提供给我的客户吗?
不可以。
如果你们在某个时间点决定停止开发 CADmium,项目将会/可能发生什么?
我们会将许可证转换为 MIT、GPL 或类似的东西。
如果我 fork 该项目并进行修改(重新品牌化或添加新功能),我可以自己托管它吗?
可以,只要你的 fork 仅由你或你的公司使用。你不被允许将你的 fork 作为服务托管给第三方。
我必须发布我的 fork 吗?
不。
V0.0.1 发布(演示版)的即时待办事项
用于跟踪进度的 Github 项目在这里
- 草图
- 实现一个独立的 2D 一阶约束求解器
- 将该新求解器集成到 sketch.rs 中
- 能够在实体的面上创建草图
- 能够在 UI 中创建和修改约束
- 实体:直线、矩形、圆、圆弧、2D 圆角
- 约束:水平、垂直、平行、垂直、长度、半径、重合,可能还有其他几个
- 拉伸
- 配置拉伸以创建新实体或从现有实体中减去
- 模式:新建、添加、切割
- 控制:深度、偏移
- 能够一次拉伸多个面(来自一个草图),同时不拉伸草图中的每个面
- 旋转
- 与拉伸相同
- 布尔
- 并集、交集、差集
- 项目
- 能够重命名项目
- 能够删除步骤
- 将 ctrl + s 绑定到 .cadmium 导出,将 ctrl + o 绑定到 .cadmium 导入
- 单位
- 明确整个文件使用毫米单位
- 文件
- 保存和加载 CADmium 文件
- 导出为 STEP、OBJ、STL、SVG、DXF
- 营销
- 演示如何制作的 Youtube 视频:
- 一个简单的立方体
- 一个带螺丝孔的板
- 一些相当复杂的东西 像这个
- 演示如何制作的 Youtube 视频: