openscad/openscad
GitHub: openscad/openscad
OpenSCAD 是一款基于脚本的参数化 3D CAD 建模软件,专为程序员和工程师设计,通过代码定义几何体实现精确可控的三维模型创建。
Stars: 8955 | Forks: 1463
[](https://github.com/openscad/openscad/actions)
[](https://circleci.com/gh/openscad/openscad/tree/master)
[](https://scan.coverity.com/projects/2510)
[](https://kiwiirc.com/client/irc.libera.chat/#openscad)
# 什么是 OpenSCAD?
OpenSCAD 是一款用于创建实体 3D CAD 对象的软件。它是自由软件,可在 Linux/UNIX、MS Windows 和 macOS 上使用。
与大多数用于创建 3D 模型的自由软件(例如著名的应用程序 Blender)不同,OpenSCAD 侧重于 CAD 方面,而不是 3D 建模的艺术方面。因此,如果您计划创建机器零件的 3D 模型,这可能是您正在寻找的应用程序,但它可能不是制作计算机动画电影的工具。
OpenSCAD 不是交互式建模器。相反,它更像是一个 3D 编译器,读取描述对象的脚本文件并从该脚本文件渲染 3D 模型(参见下面的示例)。这赋予您(设计师)对建模过程的完全控制权,并使您能够轻松更改建模过程中的任何步骤,或创建由可配置参数定义的设计。
OpenSCAD 提供两种主要建模技术:第一种是实体几何构造(即 CSG),第二种是 2D 轮廓的拉伸。作为这些 2D 轮廓的数据交换格式,使用的是 Autocad DXF 文件。除了用于拉伸的 2D 路径外,还可以从 DXF 文件读取设计参数。除了 DXF 文件,OpenSCAD 还可以读取和创建 STL 和 OFF 文件格式的 3D 模型。
# 目录
- [入门指南](#getting-started)
- [文档](#documentation)
- [构建 OpenSCAD](#building-openscad)
- [前置条件](#prerequisites)
- [获取源代码](#getting-the-source-code)
- [构建 macOS 版本](#building-for-macos)
- [构建 Linux/BSD 版本](#building-for-linuxbsd)
- [在依赖项较旧或缺失的系统上构建 Linux/BSD 版本](#building-for-linuxbsd-on-systems-with-older-or-missing-dependencies)
- [构建 Windows 版本](#building-for-windows)
- [编译](#compilation)
# 入门
您可以在 下载最新的 OpenSCAD 二进制文件。像安装任何其他软件一样安装二进制文件。
当您打开 OpenSCAD 时,您会在窗口内看到三个框架。左侧的框架是您编写代码以建模 3D 对象的地方。右侧的框架是您查看模型 3D 渲染效果的地方。
让我们来制作一棵树吧!在左侧框架中输入以下代码:
```
cylinder(h = 30, r = 8);
```
然后按 F5 渲染 3D 模型。现在您可以看到我们树干的圆柱体。现在让我们添加由球体表示的树木茂密/多叶部分。为此,我们将合并一个圆柱体和一个球体。
```
union() {
cylinder(h = 30, r = 8);
sphere(20);
}
```
但是,看起来不太对!茂密/多叶的部分在树的底部周围。我们需要将球体沿 z 轴向上移动。
```
union() {
cylinder(h = 30, r = 8);
translate([0, 0, 40]) sphere(20);
}
```
就是这样!您制作了您的第一个 3D 模型!还有其他基本形状,您可以与其他集合操作(并集、交集、差集)和变换(旋转、缩放、平移)结合使用来制作复杂的模型!请在 [OpenSCAD 手册](https://en.wikibooks.org/wiki/OpenSCAD_User_Manual) 中查看所有其他语言功能。
# 文档
请查看 OpenSCAD 主页 以获取文档。
## 构建 OpenSCAD
要从源代码构建 OpenSCAD,请按照下面适用于您的平台的说明进行操作。
### 前置条件
要构建 OpenSCAD,您需要一些库和工具。括号中的版本号指定了用于开发的版本。其他版本可能有效,也可能无效。
如果您使用的是较新版本的 Ubuntu,您可以从 aptitude 安装这些库。如果您使用的是 Mac 或较旧的 Linux/BSD,有一些构建脚本可以从源代码下载并编译库。请按照下面您正在编译的平台说明进行操作。
* 支持 C++17 的 C++ 编译器
* [cmake (3.5 ->)](https://cmake.org/)
* [Qt (5.12 ->)](https://qt.io/)
* [QScintilla2 (2.9 ->)](https://riverbankcomputing.com/software/qscintilla/)
* [CGAL (5.4 ->)](https://www.cgal.org/)
* [GMP (5.x)](https://gmplib.org/)
* [MPFR (3.x)](https://www.mpfr.org/)
* [boost (1.70 ->)](https://www.boost.org/)
* [OpenCSG (1.4.2 ->)](http://www.opencsg.org/)
* [GLEW (1.5.4 ->)](http://glew.sourceforge.net/)
* [Eigen (3.x)](https://eigen.tuxfamily.org/)
* [glib2 (2.x)](https://developer.gnome.org/glib/)
* [fontconfig (2.10 -> )](https://fontconfig.org/)
* [freetype2 (2.4 -> )](https://freetype.org/)
* [harfbuzz (0.9.19 -> )](https://www.freedesktop.org/wiki/Software/HarfBuzz/)
* [libzip (0.10.1 -> )](https://libzip.org/)
* [Bison (2.4 -> )](https://www.gnu.org/software/bison/)
* [Flex (2.5.35 -> )](http://flex.sourceforge.net/)
* [pkg-config (0.26 -> )](https://www.freedesktop.org/wiki/Software/pkg-config/)
* [double-conversion (2.0.1 -> )](https://github.com/google/double-conversion/)
对于测试套件,额外要求是:
* Python3 (3.8 -> )
* [Ghostscript (10.x ->)](https://www.ghostscript.com/index.html)
* [Catch2 (3.0 ->)](https://github.com/catchorg/Catch2)
### 获取源代码
在您的系统上安装 git。然后运行 clone:
```
git clone https://github.com/openscad/openscad.git
```
这会将最新源代码下载到名为 `openscad` 的目录中。
要拉取各种子模块(包括 [MCAD 库](https://github.com/openscad/MCAD)),请执行以下操作:
```
cd openscad
git submodule update --init --recursive
```
### 贡献更改
您可以通过访问 https://github.com/openscad/openscad/issues 创建 issue 来计划和讨论您的更改。
如果您想处理现有 issue 并计划稍后通过 PR 贡献更改,您可以通过在该 issue 的评论中输入以下内容将其分配给自己:
`/assign-me`
### 构建 macOS 版本
前置条件:
* Xcode
* automake, libtool, cmake, pkg-config, wget, meson, python-packaging(我们建议使用 Homebrew 安装这些)
安装依赖项:
使用以下选项之一构建依赖项后,请按照 *编译* 部分中的说明进行操作。
1. **从源代码**
运行设置环境变量的脚本:
source scripts/setenv-macos.sh
然后运行编译所有依赖项的脚本:
./scripts/macosx-build-dependencies.sh
2. **Homebrew**(假设 [Homebrew](https://brew.sh/) 已安装)
./scripts/macosx-build-homebrew.sh
### 构建 Linux/BSD 版本
首先,确保您已安装 git(通常打包为 'git-core' 或 'scmgit')。克隆此 git 仓库后,使用系统的包管理器下载并安装上面列出的依赖包。提供了一个便捷脚本,可以在某些系统上帮助完成此过程:
```
sudo ./scripts/uni-get-dependencies.sh qt6
```
安装依赖项后,检查它们的版本。您可以运行此脚本来帮助您:
```
./scripts/check-dependencies.sh
```
注意不要在任何地方(`/usr/local/`)留有旧的本地副本。
如果所有依赖项都存在且版本足够新,请跳至编译说明。
### 在依赖项较旧或缺失的系统上构建 Linux/BSD 版本
如果您的某些系统依赖库缺失或较旧,则可以按照以下过程将较新版本下载并构建到 `$HOME/openscad_deps` 中。首先,运行设置环境变量的脚本。
```
source ./scripts/setenv-unibuild.sh
```
然后运行脚本编译上述所有前置库:
```
./scripts/uni-build-dependencies.sh
```
请注意,此处不包括 gcc、qt 或 glib2 等大型依赖项,仅包括较小的依赖项(boost、CGAL、opencsg 等)。构建后,再次检查依赖项。
```
./scripts/check-dependencies.sh
```
之后,请按照下面的编译说明进行操作。
### 在 Nix 上构建
包含了一个 [开发 Nix shell](scripts/nix) 用于本地增量编译。
### 构建 Windows 版本
OpenSCAD for Windows 通常从 Linux 交叉编译。如果您希望在 Windows 上尝试 MSVC 构建,请查看此站点:
https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Building_on_Windows
OpenSCAD 已添加 MSVC 构建支持。有关如何构建它的说明,请参阅 [使用 MSVC 构建](doc/win-build.md)。
要进行交叉构建,首先确保您拥有 MXE 项目的所有必要依赖项(列在 https://mxe.cc/#requirements )。不要安装 MXE 本身,下面的脚本会在 `$HOME/openscad_deps/mxe` 下为您完成此操作
然后安装您的开发工具以获取 GCC。然后,在克隆此 git 仓库后,启动一个新的干净 bash shell 并运行设置环境变量的脚本。
```
source ./scripts/setenv-mingw-xbuild.sh 64
```
然后运行脚本下载并编译上述所有前置库:
```
./scripts/mingw-x-build-dependencies.sh 64
```
请注意,此过程可能需要数小时和数十 GB 的磁盘空间,因为它使用 [https://mxe.cc](https://mxe.cc) 系统交叉构建许多库。完成后,构建 OpenSCAD 并将其打包为安装程序:
```
./scripts/release-common.sh mingw64
```
对于 32 位 Windows 交叉构建,请将上述说明中的 64 替换为 32。
### 构建 WebAssembly 版本
我们支持使用预制的 Docker 镜像为 WebAssembly w/ Emscripten 构建无界面(headless)OpenSCAD,该镜像构建于 [openscad/openscad-wasm](https://github.com/openscad/openscad-wasm)(其中也有用法示例)
#### 浏览器
以下命令创建 `build-web/openscad.wasm` 和 `build-web/openscad.js`:
```
./scripts/wasm-base-docker-run.sh emcmake cmake -B build-web -DCMAKE_BUILD_TYPE=Debug -DEXPERIMENTAL=1
./scripts/wasm-base-docker-run.sh cmake --build build-web -j2
```
[openscad/openscad-playground](https://github.com/openscad/openscad-playground) 使用此 WASM 构建来提供具有 OpenSCAD 功能子集的 [Web UI](https://ochafik.com/openscad2/)。
#### 独立 node.js 构建
以下命令创建 `build-node/openscad.js`,它是可执行的(需要 `node`):
```
./scripts/wasm-base-docker-run.sh emcmake cmake -B build-node -DWASM_BUILD_TYPE=node -DCMAKE_BUILD_TYPE=Debug -DEXPERIMENTAL=1
./scripts/wasm-base-docker-run.sh cmake --build build-node -j2
build-node/openscad.js --help
```
### 编译
首先,运行 `cmake -B build -DEXPERIMENTAL=1` 以在 `build` 文件夹中生成 Makefile。
然后运行 `cmake --build build`。最后,在 Linux 上您可能需要以 root 身份运行 `cmake --install build`。
如果您在从源代码编译时遇到问题,请在 [GitHub 页面上的 issue 跟踪器](https://github.com/openscad/openscad/issues) 中提出新 issue。
此站点及其子页面也可能有帮助:
https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Building_OpenSCAD_from_Sources
构建完成后,您可以从 `build` 目录运行 `ctest` 进行测试。
注意:`cmake --build` 和 `ctest` 都接受 `-j N` 参数,以便将负载分配到 `N` 个并行进程。
### 本地运行 CI 工作流
* 安装 [circleci-cli](https://circleci.com/docs/2.0/local-cli/)(您需要一个 API 密钥)
*注意*:我们也使用 GitHub Workflows,但仅用于在 Windows 上运行测试(我们在下面基于 Linux 的 CircleCI 工作流中对其进行交叉构建)。此外,[act](https://github.com/nektos/act) 也不喜欢我们的子模块设置。
* 运行 CI 作业
# 当“成功”时,这些将在工作流的最末尾上传失败。
circleci local execute --job openscad-mxe-64bit
circleci local execute --job openscad-mxe-32bit
circleci local execute --job openscad-appimage-64bit
*注意*:openscad-macos 无法在本地构建。
* 如果/当 GCC 被随机终止时,请给 docker 更多 RAM(例如,计划运行的每个并发镜像 4GB)
* 要更交互式地调试作业,您可以采用手动方式(检查 .circleci/config.yml 以获取所需的实际 docker 镜像)
docker run --entrypoint=/bin/bash -it openscad/mxe-x86_64-gui:latest
然后一旦您进入控制台:
git clone https://github.com/%your username%/openscad.git workspace
cd workspace
git checkout %your branch%
git submodule init
git submodule update
# 然后执行 .circleci/config.yml 中的命令:
# export NUMCPU=2
# ...
# ./scripts/release-common.sh -snapshot -mingw64 -v "$OPENSCAD_VERSION"
标签:3D建模, 3D打印, AI工具, Bash脚本, CAD软件, Constructive Solid Geometry, CSG, DXF格式, OpenSCAD, STL格式, 三维编译器, 代码编程, 参数化设计, 实体建模, 工程师工具, 快速成型, 数字制造, 机械设计, 脚本驱动, 自动化设计