Manual:Traditional modeling, the CSG way/zh-cn

CSG 代表构造实体几何，描述了使用实体 3D 几何的最基本方式，即使用诸如并集、差集、或交集之类的布尔运算，向实体对象添加和移除部分实体，达成创建复杂对象的目的.

本手册前面提到，一方面，FreeCAD 可以处理多种类型的几何体；另一方面，我们使用 FreeCAD 设计的 3D 对象，是真实世界的对象. 因此，这里首选的、最有用的类型，毫无疑问，是实体，是 BREP 几何体，主要由Part 工作台来处理. 多边形网格仅由点和三角形构成，与此不同，BREP 对象的面由数学曲线定义，无论缩放比例如何，都保证有绝对的精度.



两者之间的差异，类似于位图和矢量图像之间的差异. 与位图图像一样，多边形网格的曲面划分为一系列的点. 如果你贴近观察，或者将它打印得非常大，你会发现它不是曲面而是切面. 在矢量图像和 BREP 数据里，曲线上任何点的位置都不会存储在几何体中，而是在运行中即时精确计算.

在 FreeCAD 中，所有基于 BREP 的几何都由另一个开源软件 OpenCasCade 处理. FreeCAD 与 OpenCasCade 内核之间的主要接口是 Part 工作台. 大多数其他工作台在 Part 工作台的基础上构建其功能.

其他工作台通常提供了更高级的工具来构建和操作几何体，实际上都操纵的是 Part 对象，因此非常有必要了解这些对象的内部工作机制，并且能够使用 Part 工具. 一些更智能的工具无法正确解决的问题，Part 工具因为更简单，经常可以帮你解决.

为了说明 Part 工作台的工作原理，我们将仅使用 CSG 操作对模型建模（螺钉除外，因为我们将使用一个插件，里面有尺寸，在下一章中介绍）.



让我们创建一个新文档（ Ctrl + N 或菜单 File -> New Document）来保存我们设计的桌子. 该文档最初在 Combo View 面板的 Model 选项卡中称为“unnamed”，但如果将文档（ Ctrl+Shift+S 或 菜单 File -> Save As）保存为称作“table.fcstd” 的新 FreeCAD 文档，文档便重命名为“table”，更清楚地标识了该项目.

现在我们切换到 Part 工作台，开始创建我们的第一个桌腿.


 * 按下 [[Image:Part_Box.png|16px]] Cube 按钮
 * 选择 Cube，然后设置以下属性（在 Data 选项卡中）：
 * 长度：80mm（或 8cm，或 0.8m，FreeCAD 可以使用任何单位）
 * 宽度：80mm
 * 高度：75cm
 * 按 Ctrl+C 然后按 Ctrl+V（或菜单 Edit -> Copy 然后 Paste）复制 Cube（没有任何变化，因为第二个对象与第一个重合. ）
 * 选择已创建的名为 Cube001 的新对象（单击左侧 Model 选项卡中的 Cube001）
 * 编辑其 Placement 属性来更改其位置：
 * 位置 x：8mm
 * 位置 y：8mm

你应该得到了两个高高的立方体，一个与另一个相距 8毫米.



现在我们可以从另一个中减去一个：选择第一个，即保留的那个，然后，按下 CTRL 键，选择另一个，即将被减去（顺序很重要），然后按下 Cut 按钮.



注意创建的对象，称为“Cut”. “Cut”仍然包含我们用作运算子的两个立方体. 实际上，文档中仍然存在两个“Cube"，仅被隐藏并在树视图中的“Cut”对象的分组中，仍然可以通过展开“Cut”对象旁边的箭头来选择它们. 如果需要，可以右键单击来将它们显示出来，或更改它们的属性.

然后改变它们的位置，数据如下：
 * 我们复制基础立方体 6 次，创建另外三个脚. 由于它仍然复制在剪贴板里，可以简单地粘贴（Ctrl + V）6次.
 * Cube002：x：0，y：80cm
 * Cube003：x：8mm，y：79.2cm
 * Cube004：x：120cm，y：0
 * Cube005：x：119.2cm，y：8mm
 * Cube006：x：120cm，y：80cm
 * Cube007：x：119.2cm，y：79.2cm


 * 做另外三个切割，首先选择“host”立方体，然后选择要切除的立方体. 我们有了四个 Cut 对象.



你可能一直在想，可以将完整的脚重复三次，而不必复制基础立方体六次. 完全正确，在 FreeCAD 中，有很多方法可以实现相同的结果. 这是一个宝贵的经验，值得记住. 因为随着我们接触到更复杂的对象，某些操作可能无法提供正确的结果，经常需要尝试其他方法.


 * 我们使用相同的 Cut 方法为螺钉打孔. 由于需要 8 个洞，每个脚两个，我们本来可以制作 8 个物体作减法. 然而让我们探索一下其他方法，制作4个管子，这些管子被两个脚重复使用. 所以让我们用 [[Image:Part_Cylinder.png|16px]] Cylinder 创建四个管子. 这次同样的，你可以先造一个，然后作复制. 给所有圆柱体的半径设为 6mm. 需要旋转它们，这也是通过 Data 选项卡下的Placement 属性完成的. （ 注意：在设置 Angle 之前 更改 Axis 属性，否则旋转不会生效） ：
 * Cylinder: height: 130cm, angle: 90°, axis: x:0,y:1,z:0, position: x:-10mm, y:40mm, z:72cm
 * Cylinder001: height: 130cm, angle: 90°, axis: x:0,y:1,z:0, position: x:-10mm, y:84cm, z:72cm
 * Cylinder002: height: 90cm, angle: 90°, axis: x:-1,y:0,z:0, position: x:40mm, y:-10mm, z:70cm
 * Cylinder003: height: 90cm, angle: 90°, axis: x:-1,y:0,z:0, position: x:124cm, y:-10mm, z:70cm



注意到圆柱体比需要的长一些. 这是因为，与所有基于实体的 3D 应用程序一样，FreeCAD 中的布尔运算有时对于面与面重合的情况过于敏感，可能会失败. 通过做得长一些，可以让自己处于安全的一侧.


 * 下面做差集. 选择第一条腿，然后按住 CTRL 键，选择其中一根穿过它的管，按 Cut 按钮. 孔做好了，管被隐藏. 在树视图中展开穿好孔的脚，就会找到这根管.
 * 选择此隐藏管穿过的另一只脚，然后重复上面的操作，这次按住 Ctrl，在树视图中选择管，因为它在 3D 视图中隐藏了（也可以再次显示它，然后在 3D 视图中选择它）. 对其它的脚重复这一操作，直到每个脚都有两个孔.



你看，做每只脚都是一长串的操作. 所有这些操作都保持着参数化，可以随时更改任意操作的任何参数. 在FreeCAD 中，常常将这一堆参数化的操作称为“建模历史”，因为它实际上包含了你所执行操作的所有历史记录.

FreeCAD 的另一个特点是 3D 对象的概念和 3D 操作的概念 倾向于融合为同一个东西. 剪切既是一个操作，同时也是由此操作产生的 3D 对象. 在 FreeCAD 中，这称为“特征”，而不是对象或操作.


 * 下面做桌面，就是一个简单的木块. 另造一个 Box，长度：126cm，宽度：86cm，高度：8cm，位置：x：10mm，y：10mm，z：67cm. 在 View 选项卡中，更改其 Shape Color 属性，改为漂亮的褐色，木质的颜色.



请注意，虽然腿的厚度为 8mm，但我们将它放置在距离桌子 10mm 处，在它们之间留出了 2mm. 当然，这不是必需的，不会发生在真正的桌子上. 但在“组装”模型中这种操作是常见的，可以帮助那些看模型的人理解哪些是独立的部分，需要以后手动连接在一起.

现在我们的五件部品已经完成了，是时候给他们更专有的，而不是“Cut015”这类的名称了. 右键单击树视图中的对象（或按 F2），可以将它们重命名，改为对自己，或以后打开文件的其他人，更有意义的内容. 人们常说，相比于你建模它们的方式，简单地给你的对象赋予正确的名称要重要得多.


 * 下面安装几颗螺丝. 有一个由 FreeCAD 社区成员开发的非常有用的插件，称为紧固件，你可以在FreeCAD 插件库中找到. 这使得插入螺钉变得非常容易. 其他工作台的安装很容易，在插件页面上有说明.
 * Fasteners 工作台安装完毕并重新启动 FreeCAD 后，它将显示在工作台列表中，可以切换进去. 要在一个孔中添加螺钉，首先选择这个孔的圆形边缘.



然后我们可以按下紧固件工作台上的一个螺钉按钮，例如 EN 1665 Hexagon bolt with flanges, heavy series. 螺钉放好，与孔对齐，并自动选择直径以匹配这个孔的尺寸. 有时螺钉是倒置的，可以通过翻转其 invert 特性来纠正. 也可以将其偏移设置为 2mm，遵循在桌面和桌腿之间使用的同样的规则.




 * 对所有孔重复此操作，桌子就完成了.

The internal structure of Part objects

As we saw above, it is possible in FreeCAD to select not only whole objects, but parts of them, such as the circular border of our screw hole. This is a good time to have a quick look at how Part objects are constructed internally. Every workbench that produces Part geometry will be based on these:


 * Vertices: These are points (usually endpoints) on which all the rest is built. For example, a line has two vertices.
 * Edges: the edges are linear geometry like lines, arcs, ellipses or NURBS curves. They usually have two vertices, but some special cases have only one (a closed circle for example).
 * Wires: A wire is a sequence of edges connected by their endpoints. It can contain edges of any type, and it can be closed or not.
 * Faces: Faces can be planar or curved, and can be formed by one closed wire, which forms the border of the face, or more than one, in case the face has holes.
 * Shells: Shells are simply a group of faces connected by their edges. It can be open or closed.
 * Solids: When a shell is tightly closed, that is, it has no "leak", it becomes a solid. Solids carry the notion of inside and outside. Many workbenches rely on this to make sure the objects they produce can be built in the real world.
 * Compounds: Compounds are simply aggregates of other shapes, no matter their type, into a single shape.

In the 3D view, you can select individual vertices, edges or faces. Selecting one of these also selects the whole object.

A note about shared design

You might look at the table above, and think its design is not good. The tightening of the feet with the tabletop is probably too weak. You might want to add reinforcing pieces, or simply you have other ideas to make it better. This is where sharing becomes interesting. You can download the file made during this exercise from the link below, and modify it to make it better. Then, if you share that improved file, others might be able to make it even better, or use your well-designed table in their projects. Your design might then give other ideas to other people, and maybe you will have helped a tiny bit to make a better world...

Downloads


 * The file produced in this exercise: https://github.com/yorikvanhavre/FreeCAD-manual/blob/master/files/table.FCStd

Read more


 * The Part Workbench
 * The FreeCAD addons repository
 * The Fasteners Workbench