惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
S
SegmentFault 最新的问题
Engineering at Meta
Engineering at Meta
量子位
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Google DeepMind News
Google DeepMind News
博客园_首页
云风的 BLOG
云风的 BLOG
月光博客
月光博客
I
InfoQ
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Vercel News
Vercel News
美团技术团队
Microsoft Security Blog
Microsoft Security Blog
P
Proofpoint News Feed
D
Docker
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
博客园 - 叶小钗
Martin Fowler
Martin Fowler
雷峰网
雷峰网
酷 壳 – CoolShell
酷 壳 – CoolShell
J
Java Code Geeks
Microsoft Azure Blog
Microsoft Azure Blog

博客园 - 我才是银古

第16章:常见问题、排错与最佳实践 第15章:扩展生态、MCAD 与外部集成 第12章:实战案例:机械结构与 3D 打印零件 第14章:构建、测试、调试与贡献流程 第13章:OpenSCAD 源码架构与核心执行流程 第11章:预览、渲染、网格精度与性能优化 第09章:列表推导、递归与算法建模 第08章:参数化零件库与复用设计 第10章:导入导出、命令行与自动化 第06章:CSG 布尔建模方法 第05章:基础几何、坐标系与变换 第04章:参数、变量、函数、模块与作用域 OpenSCAD 教程目录 第03章:OpenSCAD 语言基础 第02章:安装、环境配置与开发工作流 第01章:OpenSCAD 项目全景与学习路线 第02章:源码获取、编译与开发环境配置 第01章:OCCT项目全景与学习路线 第18章:二次开发实战与综合案例 第17章:与 Qt VTK Python pythonOCC 生态集成 第18章:综合实战案例 第17章:数据交换与协同 第16章:源码架构与二次开发 第15章:插件与自定义工作台开发 第14章:Python脚本宏与自动化 第13章:FEM仿真分析 第12章:CAM数控加工 第11章:SurfaceMesh与逆向工程 第10章:Draft二维绘图与BIM建筑 第09章:工程图TechDraw
第07章:二维图形、拉伸、旋转与投影
我才是银古 · 2026-05-06 · via 博客园 - 我才是银古

第07章:二维图形、拉伸、旋转与投影

1. 为什么重视 2D

许多机械零件本质上是二维轮廓加厚度:板件、垫片、面板、齿轮、支架、铭牌、盒体截面。OpenSCAD 提供一组强大的二维建模能力,再通过 linear_extruderotate_extrude 生成三维实体。

二维建模通常比直接三维布尔更稳定、更快,也更接近激光切割、CNC 轮廓加工和板材设计流程。

2. square 与 circle

square([40, 20], center = true);
circle(r = 10, $fn = 64);

二维对象位于 XY 平面,没有厚度。导出 SVG、DXF 或进行拉伸时非常有用。

3. polygon

polygon 用点列表定义二维多边形:

points = [[0,0], [40,0], [30,20], [10,20]];
polygon(points);

复杂多边形可使用 paths 指定外轮廓和孔洞路径。顶点顺序、自交和闭合性会影响结果。建议先用简单点集验证,再生成复杂路径。

4. offset

offset 可对二维轮廓扩张、收缩或圆角处理:

offset(r = 2) square([30, 20], center = true);
offset(delta = -1) circle(10);

二维 offset 常用于生成壁厚、间隙、圆角矩形和刀具补偿。相比三维 minkowski,二维偏移再拉伸通常更高效。

5. linear_extrude

线性拉伸把二维对象沿 Z 方向变成三维实体:

linear_extrude(height = 5, center = true)
    circle(d = 20, $fn = 64);

可选参数包括 twistscaleslices 等,可制作扭转体或渐变体:

linear_extrude(height = 40, twist = 180, slices = 80)
    square([10, 4], center = true);

扭转模型面数增长快,应控制 $fnslices

6. rotate_extrude

旋转拉伸将二维截面绕 Z 轴旋转,适合旋钮、轮子、管件、碗形件、环形件:

rotate_extrude($fn = 96)
    translate([20, 0, 0]) circle(d = 4);

注意二维截面通常需要放在 X 轴正侧,不要穿过旋转轴,否则可能产生自交。

7. projection

projection 可把三维对象投影到二维:

projection(cut = true)
    translate([0,0,5]) cube([30, 20, 10], center = true);

这适合从三维模型生成切割轮廓、检查截面、导出 SVG/DXF。cut = true 表示取 Z=0 截面,false 表示投影轮廓。

8. text 文本

OpenSCAD 支持文本生成二维轮廓:

linear_extrude(1)
    text("OpenSCAD", size = 8, halign = "center", valign = "center");

文本可用于铭牌、面板标记、浮雕和凹刻。注意字体在不同系统上可能不同,团队协作时应明确字体或把最终轮廓导出固定。

9. DXF 与 SVG 工作流

OpenSCAD 可以导入 DXF、SVG 等二维资源,也可以导出二维轮廓。常见流程:

  1. 在 Inkscape、QCAD、LibreCAD 中绘制二维图形。
  2. 清理重复线、断线、自交和单位。
  3. 导入 OpenSCAD 作为轮廓。
  4. 通过 linear_extrude 生成实体。
  5. 加入孔、倒角、文字或装配结构。

导入外部轮廓时要检查比例和坐标原点。很多问题来自单位不一致或路径未闭合。

10. 二维参数化案例:法兰盘

$fn = 80;
outer_d = 60;
inner_d = 25;
hole_d = 5;
hole_circle_d = 45;
thickness = 6;

module flange_2d() {
    difference() {
        circle(d = outer_d);
        circle(d = inner_d);
        for (a = [0:90:270])
            rotate(a) translate([hole_circle_d/2, 0]) circle(d = hole_d);
    }
}

linear_extrude(thickness, center = true)
    flange_2d();

这个例子展示了“先二维、后拉伸”的清晰结构。后续可增加沉孔、倒角和型号文字。

11. 二维建模检查清单

  • 轮廓是否闭合且不自交?
  • 坐标原点是否适合装配?
  • 外部导入文件单位是否正确?
  • 拉伸高度是否满足制造要求?
  • 孔位是否用参数或极坐标生成?
  • 文本字体是否可复现?
  • 导出 SVG/DXF 前是否隐藏了三维参考对象?