openscad/openscad

GitHub: openscad/openscad

OpenSCAD 是一款基于脚本的参数化 3D CAD 建模软件,专为程序员和工程师设计,通过代码定义几何体实现精确可控的三维模型创建。

Stars: 8955 | Forks: 1463

[![GitHub (master)](https://img.shields.io/github/checks-status/openscad/openscad/master.svg?logo=github&label=build&logoColor=black&colorA=f9d72c&style=plastic)](https://github.com/openscad/openscad/actions) [![CircleCI (master)](https://img.shields.io/circleci/project/github/openscad/openscad/master.svg?logo=circleci&logoColor=black&colorA=f9d72c&style=plastic)](https://circleci.com/gh/openscad/openscad/tree/master) [![Coverity Scan](https://img.shields.io/coverity/scan/2510.svg?colorA=f9d72c&logoColor=black&style=plastic)](https://scan.coverity.com/projects/2510) [![访问我们的 IRC 频道](https://kiwiirc.com/buttons/irc.libera.chat/openscad.png)](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格式, 三维编译器, 代码编程, 参数化设计, 实体建模, 工程师工具, 快速成型, 数字制造, 机械设计, 脚本驱动, 自动化设计