ModelingData -2造型数据

造型数据ModelingData 2

Geometry

非参数和参数几何

非参数参数
直接通过值来操作Geom(Geom2d)使用Handle来操作,但是控制类(不只是数据结构,可直接生成几何,如GC_MakeLine)是使用值来操作
非参数类不能被继承提供从Geom到gp的方法

非参数几何

gp_Pnt - 笛卡尔坐标点

gp_Vec - 向量

gp_Dir - 方向(模为1,标准向量)

gp_Trsf - 变化,可以设置移动、旋转、缩放

gp_Ax1 - 轴

gp_Lin,gp_Circ,gp_Elips,gp_Hypr,gp_Parab,gp_Cylinder,gp_Sphere,gp_Torus - 表示线(cruve)和面的基本类型

控制类

直接构造:gce_MakeCircle,gce_MakeLin

受约束的构造(针有2d)GccAna_Circ2d2TanRad(创建与2个点/线/圆相切并具有给定半径的二维圆)

2维类通常加后缀2d,如gp_Pnt2d

非参数几何的限制

一些对象是无限的,没有办法让他们变得有限,如Line,plane,cylinder

一些复杂的形式无法展现

点到线的距离等

参数几何

  • Curves - Geom_Curve的子类

Geon_Line

二次曲线:Geom_Circle,Geom_Ellipse,Geom_Hyperbola,Geom_Parabola

自由形式:Geom_BSplineCurve,Geom_BezierCurve

Geom_OffsetCurve

裁剪相关:Geom_TrimmedCurve

  • Surface - Geom_Surface的子类

基本面:Geom_Plane,Geom_CylindricalSurface,Geom_SphericalSurface,Geom_ToroidalSurface,Geom_ConicalSurface

自由形式:Geom_BSplineSurface,Geom_BezierSurface

扫略面:Geom_SurfaceOfLinearExtrusion,Geom_SurfaceOfRevolution

Geom_OffsetSurface

裁剪相关:Geom_RectangularTrimmedSurface

控制类

直接构造:gce_MakeCircle,gce2d_MakeCircle

约束构造(只针对2d):Geom2dGcc_Circl2d3Tan

Topology

抽象拓扑TopoDS:通过描述边界之间的联系来完成定义

边界表示B-Rep:通过拓扑和几何信息来完成对象的定义

抽象TopoDS和B-Rep表达与算法类分在了不同的package下
请添加图片描述

**图形连接性:**两个图形连接起来如果他们共享了一些子图形的话
请添加图片描述

TopoDS_Shape通过以下3点定义一个shape

  • 一个TopoDS_TShape handle-在它内部有一个默认的局部坐标系,以此来描述对象,当时它不能直接被使用
  • 一个局部坐标系-
  • 一个方向

位置修改

OCCT允许重新修改拓扑信息通过位置。

有关位置的方法有 Location Move Moved

//构造位置信息
gp_Ax1 axis(gp_Pnt(ax,ay,az),gp_Vec(dx,dy,dz));
gp_Trsf T;
T.SetRotation(axis,angle);
//更新已经存在的位置
aShape.Move(T);

方向

OCCT中定义的方向是为了完成边界表达,通过在里面和外面的相关信息。这些信息是一系列影响图形正确与否的规则。

Vertex在edge中

方向本身对于Vertex没有任何含义,Vertex方向仅仅是在界定Edge时起作用,此时第一个Vertex具有TopAbs_Forward方向,而第二个具有TopAbs_REVERSED方向。

注意:BRepBuilderAPI_MakeVerex构造了一个TopAbs_Forward的Vertex

gp_Pnt ap1(10,0,0),ap2(20,0,0);
TopoDS_Edge anEdge = BRepBuilderAPI_MakeEdge(ap1,ap2);
TopExp_Explorer anExpEV(anEdge,TopAbs_VERTEX);
for(;anExpEv.More();anExpEv.Next())
{
    const TopoDS_Vertex& av = TopoDS::Vertex(anExpEV.Current());
    const gp_Pnt& aPnt = Brep_Tool::Pnt(av);
    if(av.Orientation()==TopAbs_FORWARD)
    {...}
    else if(av.Orientation()==TopAbs_REVERSED)
    {...//inner}
}

edge在wire中

面是通过多个edge来限定的,edge在面上的方向遵循右手定则,面应该在edge方向的左边,如果edge的方向不是对的,可以使重新构建curve,也可以翻转底层的curve,通常翻转底层的curve即可。
请添加图片描述

face在solid中

法向应该指向外面。如果sloid指的是模型空间而不包括空间边界,则法向量指向里面
请添加图片描述

TopoDS_Shape提供了一些有用的方法:

IsNull()-确定TShape是否是null

Nullify()-作废TShape智能指针

Location()-返回存在的坐标

Move()-施加变形

Moved()-返回新的移动后的形状

ShapeType()-返回TopoDS_Shape类型

IsPatrner()-是否是相同的TShape

IsSame()-是否是相同的TShape和坐标

IsEqual()-是否是相同的TShape、坐标、方向

Shape的向下转换

TopoDS::Vertex() 返回一个TopoDS_VerTex,如果是一个不正确的转换会抛出异常

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

步、步、为营

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值