下载app免费领取会员
在建模时,经常需要指定基准方向或基准平面,例 创建一个旋转体需要定义旋转轴,创建一个平面需要定义法向量和参考方向。
gp_Ax1 表示一条带方向的轴线(直线),它是由一个点(轴线上任意取一个点做原点)和一个方向(gp_Dir)定义。
例: gp_Ax1 axis(gp_Pnt(0,0,0) , gp_Dir(0,0,1) ) 定义一个通过原点,沿全局Z轴方向的直。
gp_Ax1 常用于指定旋转轴、镜像轴等。
例: gp_Trsf.SetRotation(axis,angle) 需要gp_Ax1 来指定旋转轴。
gp_Ax2 表示一个二维坐标系,即一个平面上的坐标系,它由原点、主方向和X方向定义,是始终保持右手系的坐标系。
主方向(gp_Dir)可以看作是该平面的法向量,X方向(gp_Dir)则定义了平面内的参考X轴方向,Y方向可以由右手规则来确定。
例:gp_Ax2 ax2(gp_Pnt(0,0,0), gp_Pnt(0,0,1) ,gp_Dir(1,0,0)) 定义了原点在(0,0,0),法向量为Z轴,X方向指向全局X轴的平面坐标系。也就是全局XOY平面坐标。
gp_Ax2广泛用于定义放置方向,比如BRepPrimAPI_MakeCylinder 可以接受gp_Ax2参数,表示圆柱的轴线位置和起始面朝向。
gp_Ax3表示一个三维坐标系,它与gp_Ax2 类似,但允许可以指定左手坐标系。gp_Ax3可以由原点,方向和副方向来定义,也可以从gp_Ax2 转换得到。
实际上,gp_Ax3 提供了表示左手坐标系的可能,因为gp_Ax2默认是右手坐标系,如果要左手,就得用gp_Ax3.
gp::OX() 是X轴方向 的gp_Dir(1,0,0)
gp::OZ() 是Z轴方向
gp::XOY() 是XOY平面的gp_Ax2
使用示例
创建一个倾斜放置的长方体,创建一个边长100*50*30的长方体,并让它的底面位于点(-200,-80,-70)

上面例子中我们定义一个gp_Ax2,其中原点为(-200,-80,-70) ,法向量为(1,2,1),OCCT将自动选择一个与法向不平行的轴作为x方向。长方体按照这个坐标系进行放置,底面中心在origin,竖直方向沿着法向。
下图为
gp_Pnt origin(-00, -0, -0);
gp_Dir normal(0,0,1);
效果

在实际建模中,经常需要对形状进行移动,旋转等操作。
沿X,Y,Z方向移动一个形状
这里,通过gp_Vec(dx,dy,dz) 定义位移向量,用SetTranslation设置到trsf,然后将trsf封装成TopLoc_Location 并调用shape的Moved方法生成平移后的shape。
shape.Moved(loc)相当于shape.Located(shape.Location()*loc) 它不会改变原shape,而是返回一个新的TopoDS_Shape 共享同一个TShape,共享几何。
上面是移动的操作demo代码,下面也可以实现移动
绕任意轴旋转

绕点(0,0,0)穿过Z轴的线 旋转shape 45度。
上面基于面来进行镜像,可以用gp_Ax2来定义平面,trsf.SetMirror(gp_Ax2(point,normal)) 这样normal定义平面法线,平面过point,然后镜像shape.
TopLoc_Location构造
可以通过gp_Trsf构造
gp_Trsf trsf;
TopLoc_Location loc(trsf);
这样loc就包含了trsf所描述的坐标变换,如果trsf是恒等变换,直接用TopLoc_Location() 默认构造与TopLoc_Location(gp_Trsf()) 并不完全等价。默认构造产生一个空的Location对象,而用身份矩阵构造则产生一个含有Datum3D的Location,它们在IsEqual比较是不相等的,因此,如果想要表示无变化,使用默认构造更好。
组合Location
如果对已有的Location的shape再调用Moved / Located,那么实际的总变换是将新的TopLoc_Location乘以已有的Location,结果依然存储在Shape的字段中,而不是累积很多级。
Shape定位关系
每个TopoDS_Shape有一个Location属性,可以通过shape.Location()获取 或 shape.Location(loc) 设置。
如果对shape调用Located(loc)会返回一个新的shape,其Location被设置给为给定的loc:29
转载请注明来源本文地址:https://www.tuituisoft/cad/249813.html
上一篇:没有了
下一篇:没有了