Skip to content

一篇文章搞清楚一个物体,你用肉眼,在 FreeCAD 绘图区看到的位置,究竟是如何呈现的

在 OCC 的几何层

在 OCC 里,几何元素,都是在局部坐标系里描述的

一个点,比如说 gp_Pnt,它记录(1,1,1),是针对一个局部坐标系的原点的

这个局部坐标系,是参数方程,本身附带的属性

比如你想绘制一个圆,你既可以 $ x^2 + y^2 = R^2 (x-1)^2 + (y-1)^2 = R^2 $

这两个圆,从几何上是一样的,但是参数方程不同

在 OCC 的拓扑层

OCC 的 TopoDS_Shape(包括其子类),每一个对象,都记录了 TopLoc_Location 字段

问题:Location (1,1,1) 基于的是谁?

回答:是局部坐标系的原点,它没有一个显式的变量来存储,而是由参数方程本身附带而来

问题:为什么每一个对象,都有这样一个字段

回答:鼓励服用,一个汽车四个轮子,可以通过调整 Location,来复用底层同一个几何

step 存储

OCC 的这个 TopLoc_Location 会被写入到 step 里并持久化存储

FreeCAD 第一关:Part::TopoShape 包装层

这层其实没做啥,基本是包装的 TopoDS_Shape,并没有有在这一层又搞一套位置信息

它的 get set 函数,直接封装了 TopoDS 的东西,即操作 myLocation

FreeCAD 第二关:GeoFeature::Placement

在 CAD 领域,所有物体是按照一个树形结构进行排序,树的根相当于是世界,每一个物体记录自己相对于父亲的 Local 位置

FreeCAD 第三关:渲染

Part 生成显示 mesh 时会处理 shape 自己的几何数据

问题:导入一个正方体,去看它的 Local,永远在原点,你问它,它的世界位置,也是在原点,但是实际上,物体可能跑的很远了

回答:对象的坐标系原点在世界原点,但这个对象坐标系下面的几何数据本身离原点很远

即眼睛看到的,实际上是 OCC+FreeCAD 的结合,但是仅拿位置,就是只能拿 FreeCAD

重置局部坐标系

现在可以解释重置局部坐标系会发生什么:

首先 OCC 那侧的数据不会变

如果你从代码上,强制仅修改局部坐标系,那么很显然 Global 会变,会突变(仅考虑单一物体)