完善主体资料,免费赠送VIP会员!
* 主体类型
* 企业名称
* 信用代码
* 所在行业
* 企业规模
* 所在职位
* 姓名
* 所在行业
* 学历
* 工作性质
请先选择行业
您还可以选择以下福利:
行业福利,领完即止!

下载app免费领取会员

NULL

ad.jpg

opencascade坐标体系与实践

发布于:2025-07-10 19:29:07

一.前言

    在建模时,经常需要指定基准方向或基准平面,例  创建一个旋转体需要定义旋转轴,创建一个平面需要定义法向量和参考方向。

二.gp_Ax1、gp_Ax2、gp_Ax3

2.1 gp_Ax1

    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 来指定旋转轴。

2.2 gp_Ax2

    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参数,表示圆柱的轴线位置和起始面朝向。

2.3 gp_Ax3

    gp_Ax3表示一个三维坐标系,它与gp_Ax2 类似,但允许可以指定左手坐标系。gp_Ax3可以由原点,方向和副方向来定义,也可以从gp_Ax2 转换得到。

    实际上,gp_Ax3 提供了表示左手坐标系的可能,因为gp_Ax2默认是右手坐标系,如果要左手,就得用gp_Ax3.

2.4 全局静态常量

    gp::OX() 是X轴方向 的gp_Dir(1,0,0)

    gp::OZ() 是Z轴方向

    gp::XOY() 是XOY平面的gp_Ax2

    使用示例

    创建一个倾斜放置的长方体,创建一个边长100*50*30的长方体,并让它的底面位于点(-200,-80,-70)


腿腿教学网-opencascade坐标体系与实践

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

    下图为

        gp_Pnt origin(-00, -0, -0);

        gp_Dir normal(0,0,1);

    效果

腿腿教学网-opencascade坐标体系与实践

三.几何变换操作

    在实际建模中,经常需要对形状进行移动,旋转等操作。

3.1 平移 Translation

    沿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代码,下面也可以实现移动


3.2 旋转Rotation

    绕任意轴旋转

腿腿教学网-opencascade坐标体系与实践

    绕点(0,0,0)穿过Z轴的线 旋转shape  45度。

3.3 镜像 Mirror


    上面基于面来进行镜像,可以用gp_Ax2来定义平面,trsf.SetMirror(gp_Ax2(point,normal)) 这样normal定义平面法线,平面过point,然后镜像shape.

四.TopLoc_Location的构造与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

未标题-1.jpg

上一篇:没有了

下一篇:没有了