Part Module/zh-cn: Difference between revisions

From FreeCAD Documentation
(Updating to match new version of source page)
(Updating to match new version of source page)
Line 86: Line 86:
=== Measure ===
=== Measure ===


[[Std Measure Menu|Measure]]: Allows linear and angular measurement between points, edges, and faces.
[[File:Std Measure Menu.png|64px]] [[Std Measure Menu|Measure]]: Allows linear and angular measurement between points, edges, and faces.


* [[Image:Part_Measure_Linear.svg|32px]] [[Part_Measure_Linear|Measure Linear]] allows you to make linear measurements.
* [[Image:Part_Measure_Linear.svg|32px]] [[Part_Measure_Linear|Measure Linear]] allows you to make linear measurements.

Revision as of 14:07, 27 September 2019

简介

FreeCAD的实体建模能力都是基于 Open Cascade Technology (OCCT)内核——一种具有创建与处理高级3D几何体等特性的专业级CAD系统。零件工作台(Part Workbench)是一种建立于OCCT库之上的层级,为用户提供了访问OCCT几何图元与函数的功能。每种工作台(如底图工作台, 草图工作台, 零件设计工作台等等)的一切2D与3D绘制功能其实都是基于零件工作台暴露出的函数实现的。因此,可以认为零件工作台是FreeCAD建模功能的核心组件。

以零件工作台创建的对象相对简单;为了构建更为复杂的几何图形,可以为之运用布尔运算(并集与减运算)。此建模范式就是尽人皆知的构造实体几何 (CSG) 工作流程,它是早期CAD系统中所用的传统方法。另一方面,零件设计工作台(PartDesign Workbench)还提供了更为现代的工作流程来构建几何图形:它利用参数化方式来定义草图,再将其挤压成型为基本的实体对象,最后通过参数化变换(特征编辑)来修改模型,直到用户获取预期的最终模型为止。

零件对象比网格工作台(Mesh Workbench)创建的网格对象更为复杂,因为用户可以对前者执行更为高级的操作,如连续的布尔运算、修改历史与参数化处理。

零件工作台是最基础的层级,它为FreeCAD中的其他工作台暴露出OCCT的各种绘制函数

工具

这些工具皆位于Part菜单。

图元

以下这些工具用于创建图元对象。

  • Box: 根据指定的规格绘制一个立方体
  • Cylinder: 根据指定的规格绘制一个圆柱体
  • Sphere: 根据指定的规格绘制一个球体
  • Cone: 根据指定的规格绘制一个圆锥体
  • Torus: 根据指定的规格绘制一个环面(torus)(圆环 (ring))
  • CreatePrimitives: 一种用于创建各类参数化几何图元的工具
  • Shapebuilder: 一种利用各种参数化几何图元创建更加复杂几何图形的工具

修改对象

这些工具用于修改已存在的对象。通过它们即可选取待修改的对象。

  • Extrude: 将对象的平面端面挤压成型
  • Revolve: 通过令一(非实体)对象绕某轴旋转来创建另一个实体对象
  • Mirror: 根据指定的镜面对选中的对象进行镜像操作
  • Fillet: 为对象的边倒(圆)角
  • Chamfer: 为对象的边倒角
  • Ruled Surface:
  • Loft: 对轮廓进行放样操作(放样成另一种轮廓)
  • Sweep: 沿路径对一个或多个轮廓进行扫描
  • Offset tools:
    • 3D Offset: 根据原始几何形状在特定的距离处构建一个平行的副本。
    • 2D Offset: 根据原始连线在特定的距离处创建一个平行的副本,或者缩放一个平面端面。(v0.17)
  • Thickness: 镂空一个实体,在选中的面上留下开口。
  • Projection on surface: 向表面上投影logo、文本或任意表面、连线、边。可以为投影部分创建一个示例或连线。(v0.19)
  • Booleans: 在对象上执行布尔运算
  • Union: 将两个对象融为一体 (并集)
  • Common: 提取出两个对象中的共有部分(交集)
  • Cut: 从一个对象中去掉另一个对象(差集)

Measure

File:Std Measure Menu.png Measure: Allows linear and angular measurement between points, edges, and faces.

其他工具

  • Import CAD: 您可利用此工具为当前文档添加*.IGES、*.STEP、*.BREP文档。
  • Export CAD: 您可利用此工具将一个零件对象导出至一个*.IGES、*.STEP、*.BREP文件。
  • Shape from Mesh: 根据一个网格对象创建一个几何形状对象。
  • Convert to solid: 将一个几何形状对象转换为一个实体对象。
  • Reverse shapes: 调转选中对象所有表面上的法线方向。
  • File:Part CreateSimpleCopy.svg Create simple copy: 为选中的对象创建一个简单的副本。
  • Refine shape: 通过去除不必要的线条来清理表面。
  • Check geometry: 检测选中对象的几何体是否存在错误。
  • Measure: 令用户可以实现点/边/面间的线性测量与角度测量。
  • Attachment: 本工具的功能为令一个对象附着于另一对象之上。

首选项

OCCT中的几何概念

在OpenCascade术语中,我们会在几何图元(geometric primitive)与拓扑形状(topological shape)之间进行区分。一个几何图元可以是点、线、圆、平面等等,甚至还可以为类似于B-样条曲线或表面(surface)这样更为复杂的图元类型。而拓扑形状则可以是顶点、边、连线、面(face)、实体或其他形状所复合而成的对象。几何图元不能直接显示于3D场景中,却常用于构建拓扑形状的几何图形。例如,一条边可由线或部分圆来构建而成。

总而言之,几何图元都是“无形状”的基本构成单位,而拓扑形状则是基于前者所构建的实体对象。

至于全部图元与形状的完整列表可参考 OCC文档 (或者: sourcearchive.com)以Geom_*搜索几何图元,以TopoDS_*搜索拓扑形状。在此,您可以阅读到两者间更多的不同点。请注意,官方的OCC文档并不存在于网络上(您必须下载一份存档文件),而且它主要为程序员而设,并非终端用户。但是,仍希望您能以此为起点来查找更为深入的信息。

几何类型实际可分为两大关键组群:曲线(curve)与表面(surface)。您可利用曲线(线、圆……)来直接构建一个边,而采用表面(平面,圆柱体……)来构建一个面(face)。例如,几何图元中的线是无限长的,即它由一个基向量与一个方向向量定义而成,而线的拓扑形状表示却一定要以起点与终点来定义为有限长度。另外,一个立方体——一个实体——可用6个有限的平面来创建。

当然,您也可以将一条边或一个面还原为其对应的几何图元。

这样一来,利用区区几种形状您就可以构建出灰常复杂的零件。反之,您亦可以从一个更加复杂的形状中提取出构成它的所有子形状。

脚本

参见: 零件脚本

零件模块中主要使用的数据结构为OpenCascade中的 BRep数据类型。几乎零件模块中的所有内容与对象类型都可在Python脚本中使用。这其中包括几何图元,如线段与圆形(或弧), 以及整个TopoShapes范畴,如顶点、边、连线、面、实体与组合对象。对于其中的每一种对象而言,都存在若干创建方法,而对于TopoShapes中的特定对象而言,还支持一些如布尔并集/差集/交集等高级操作。以FreeCAD脚本基础页面所述的方式来浏览零件模块中的内容,即可获悉更多详情。

示例

为了创建一条线条元素,可以切换至Python控制台并录入:

import Part,PartGui 
doc=App.newDocument()  
l=Part.LineSegment()
l.StartPoint=(0.0,0.0,0.0)
l.EndPoint=(1.0,1.0,1.0)
doc.addObject("Part::Feature","Line").Shape=l.toShape() 
doc.recompute()

让我们来逐步分析上述python示例:

import Part,PartGui
doc=App.newDocument()

加载零件模块并创建一个新文档

l=Part.LineSegment()
l.StartPoint=(0.0,0.0,0.0)
l.EndPoint=(1.0,1.0,1.0)

线条其实就是线段,因为它具有起点和终点。

doc.addObject("Part::Feature","Line").Shape=l.toShape()

这行代码为文档添加了一个零件对象类型,并为此对象的'Shape'属性设置为以线段进行形状表示。在此,关键是要理解我们通过几何图元(Part.LineSegment)创建了一个TopoShape(利用toShape()方法)。只有几何图形才能添加至文档中。在FreeCAD中,几何图元常用作几何图形的“基本组成结构”。

doc.recompute()

此句更新了文档。这为新零件对象的可视化表示做好了准备工作。

请注意,我们可以直接通过在构造函数中指定起点与终点来创建一条线段,例如 Part.LineSegment(point1,point2),或者正如我们此前的做法,在创建一条默认线段后再调整其属性。

以相似的方式来创建一个圆形:

import Part
doc = App.activeDocument()
c = Part.Circle() 
c.Radius=10.0  
f = doc.addObject("Part::Feature", "Circle")
f.Shape = c.toShape()
doc.recompute()

请再次注意,这段代码利用圆形(几何图元)构建了一个几何形状。之后,我们依然能通过下列方式访问造型几何体:

s = f.Shape
e = s.Edges[0]
c = e.Curve

在此,我们获取对象f的几何形状,再获得构成它的一系列边。在当前情况下只能获得一条边,因为我们用单个圆形构造了整个几何形状,因此只取边列表中的第一项,继而获得构成该形状的曲线。每条边都有一个曲线,几何图元就是基于它而成。

如果您想了解更多请前往拓扑数据脚本页面。

教程