在OpenCascade中创建基本几何实体

在OpenCascade中创建基本⼏何实体
Construction of Primitives in Open Cascade
⼀、创建基本图元Making Primitives
将⽤到如下的类创建基本图元,包括长⽅体(Box)、楔形体(Wedge)、旋转体(Revol)等。这些类提供Shell和Solid函数来返回实体(solid)和壳(shell)。
使⽤⽅法都是调⽤这些类的构造函数,输⼊相应的参数,直接构造出基本图元。构造函数的参数不同,创建的基本⼏何实体的形状也会不同。
注:所有旋转体的⾓度值都是弧度值。
1.创建长⽅体BRepPrimAPI_MakeBox
使⽤MakeBox类创建⼀个长⽅体,结果以⼀个壳或体返回。创建长⽅体的⽅式有如下四种:
以上创建⽅式对应类的BRepPrimAPI_MakeBox的四种构造函数:
Standard_EXPORT  BRepPrimAPI_MakeBox(const Standard_Real dx,const Standard_Real dy,const
Standard_Real dz);
Standard_EXPORT  BRepPrimAPI_MakeBox(const gp_Pnt& P,const Standard_Real dx,const Standard_Real dy,const Standard_Real dz);
Standard_EXPORT  BRepPrimAPI_MakeBox(const gp_Pnt& P1,const gp_Pnt& P2);
Standard_EXPORT  BRepPrimAPI_MakeBox(const gp_Ax2& Axes,const Standard_Real dx,const Standard_Real dy,const Standard_Real dz);
与上图对应的创建长⽅体的代码如下所⽰:
BRepPrimAPI_MakeBox (200.,150.,100.);
BRepPrimAPI_MakeBox (gp_Pnt(60, 60, 0), 200.,150.,100.);
BRepPrimAPI_MakeBox (gp_Pnt(60, 60, 0), gp_Pnt(200.,150.,100.));
BRepPrimAPI_MakeBox (gp_Ax2(gp_Pnt(100.,80.,70.),gp_Dir(1.,2.,1.)),80.,90.,120.);
2.创建楔形体BRepPrimAPI_MakeWedge
使⽤类BRepPrimAPI_MakeWedge来创建楔形体。楔形体就是带斜⾯的长⽅体,即带⾓度的长⽅体。楔形体的创建⽅式与长⽅体的创建⽅式相似。下图所⽰为构造楔形体的两种⽅式。⼀种是加⼊ltx尺⼨来描述dy上的⾯,另⼀种是加⼊xmin,xmax,zmin,zmax来描述dy上的⾯。
第⼀种⽅式是第⼆种⽅式在满⾜以下条件下的特例:灭蚁灵
xmin = 0, xmax = ltx, zmin = 0, zmax = dz
创建⼀个⾦字塔的楔形体可以⽤下⾯的⽅式:
xmin = xmax = dx / 2, zmin = zmax = dz / 2
⽣成上图所⽰的程序如下所⽰:
TopoDS_Shape S1 = BRepPrimAPI_MakeWedge(60.,100.,80.,20.);
TopoDS_Shape S2 = BRepPrimAPI_MakeWedge(gp_Ax2(gp_Pnt(100.,100.,0.),gp_Dir(0.,0.,1.)),
第六次人口普查
60.,50.,80.,25.,-10.,40.,70.);
3.BRepPrimAPI_MakeOneAxis
水泥砂浆
类BRepPrimAPI_MakeOneAxis是所有旋转体图元的基类。旋转体通过将曲线绕⼀个轴旋转得到。它们有圆柱体、圆锥体、球体、圆环体等。
这些旋转体对于不同的图元有不同的构造参数,但是它们也有共同的参数:
l ⼀个坐标系统;
嚆矢l ⼀个⾓度,范围为[0, 2*PI];
l 曲线的vmin,vmax参数;
OneAxis构造的结果是体Solid、壳Shell或⾯Face。
通常不会直接使⽤类BRepPrimAPI_MakeOneAxis,⽽是使⽤它的派⽣类。
如下图所⽰描述了类的参数:
4.创建圆柱体BRepPrimAPI_MakeCylinder
使⽤类BRepPrimAPI_MakeCylinder来创建圆柱体。圆柱可以在默认的坐标系中被创建,也可以指定的坐标系(gp_Ax2)中创建。创建⽅式如下:
l 半径、⾼度创建⼀个完整的圆柱;
l 半径、⾼度及⾓度来创建部分圆柱;
如下代码所⽰为沿X、Y、Z偏移⼀定距离的四分之⼀的圆柱:
Standard_Real X = 20;
Standard_Real Y = 10;
Standard_Real Z = 15;
Standard_Real R = 10;
Standard_Real DY = 30;
// Make the system of coordinates.
gp_Ax2 axes = gp::ZOX();
axes.Translate(gp_Vec(X, Y, Z));
TopoDS_Face F = BRepPrimAPI_MakeCylinder(axes, R, DY, PI/2.);
5.创建圆锥体BRepPrimAPI_MakeCone
使⽤类BRepPrimAPI_MakeCone来创建圆锥体。与圆柱体⼀样,圆锥体可以在默认的坐标系中被创建,也可以指定的坐标系中被创建。创建⽅式如下:
l 两个半径和⾼度来创建⼀个完整的圆锥。⼀个半径可以为零,这样就创建了⼀个尖顶的圆锥;
l 半径、⾼度和⾓度来创建部分圆锥。
如下代码创建的圆锥如下图所⽰:
TopoDS_Shape C1 = BRepPrimAPI_MakeCone (50.,25.,200.);
TopoDS_Shape C2 = BRepPrimAPI_MakeCone(gp_Ax2(gp_Pnt(100.,100.,0.),
gp_Dir(0.,0.,1.)),
605.,0.,150.,210.*PI180);
6.创建球体BRepPrimAPI_MakeSphere
使⽤类BRepPrimAPI_MakeSphere来创建球体。与圆柱体⼀样,球体可以在默认的坐标系中被创建,也可以指定的坐标系中被创建。有四种创建⽅式,如下图所⽰:
l ⼀个半径值,创建⼀个完整的球体;
l 半径和⾓度,创建部分的球体;
l 半径和两个⾓度值,创建纬度上的部分的球体。两个⾓度a1,a2必须满⾜如下条件:PI/2 <= a1 < a2 <= PI/2
l ⼀个半径和三个⾓度值;
实现上图中球体的代码如下:
TopoDS_Shape S1 = BRepPrimAPI_MakeSphere(gp_Pnt(-200.,-250.,0.),80.);
TopoDS_Shape S2 = BRepPrimAPI_MakeSphere(100.,120.*PI180);
TopoDS_Shape S3 = BRepPrimAPI_MakeSphere(gp_Pnt(200.,250.,0.),100.,
-60.*PI180, 60.*PI180);
TopoDS_Shape S4 = BRepPrimAPI_MakeSphere(gp_Pnt(0.,0.,-300.),150.,
-45.*PI180, 45.*PI180, 45.*PI180);
7.创建圆环体BRepPrimAPI_MakeTorus
使⽤类BRepPrimAPI_MakeTorus来创建圆环体。与其它基本图元类似,⼀个圆环体可以在默认的坐标系中创建,也可以在指定的坐标系中创建。创建与与球体创建⽅式类似:
l 两个半径,创建⼀个完整的圆环体;
l 两个半径和⼀个⾓度值,创建部分的圆环体;
l 两个半径和两个⾓度值,创建纬度上的部分圆环体;两个⾓度必须满⾜如下条件:0 < a2 – a1 < 2 * PI;
l 两个半径和三个⾓度值,创建部分的圆环体;
TopoDS_Shape S1 = BRepPrimAPI_MakeTorus(60.,20.);
TopoDS_Shape S2 = BRepPrimAPI_MakeTorus(gp_Ax2(gp_Pnt(100.,100.,0.),gp_Dir(1.,1.,1.)),
50.,20.,210.*PI180);
TopoDS_Shape S3 = BRepPrimAPI_MakeTorus(gp_Ax2(gp_Pnt(-200.,-150.,-100),gp_Dir(0.,1.,0.)),
60.,20.,-45.*PI180,45.*PI180,90.*PI180);
8.创建旋转体BRepPrimAPI_MakeRevolution
使⽤类BRepPrimAPI_MakeRevolution来根据⼀条曲线和轴创建旋转体。曲线可以是任意的Geom_Curve,有四种构造⽅式:
l From a curve, use the full curve and make a full rotation;
l From a curve and an angle of rotation;
l From a curve and two parameters to trim the curve. The two parameters must be growing and within the curve range;
l From a curve, two parameters, and an angle. The two parameters must be growing and within the curve range.
⼆、创建扫掠体Sweeping: Prism, Revolution and Pipe
扫掠体(Sweeps)就是⼀条截⾯(profile)沿任意轨道线(path)扫掠后得到的体。截⾯可以是任意的拓朴结构。轨道线通常是曲线(curve or wire)。创建扫掠体的规则如下:
l 点扫掠后得到边;Vertices generate Edges;
l 边扫掠后得到⾯;Edges generate Faces;
l 线扫掠后得到壳;Wires generate Shells;
l ⾯扫掠后得到体;Faces generate Solids;
l 壳扫掠后得到组合体;Shells generate Composite Solids;
l A Compound generates a Compound with the sweep of all its elements;
体(Solids)和组合体(Composite Solids)的扫掠是禁⽌的。
包BRepPrimAPI中实现了三种扫掠体:称线性扫掠体为Prism,称旋转扫掠体为Revol和通⽤的扫掠体叫作Pipe。
Interval1. BRepPrimAPI_MakeSweep
类BRepPrimAPI_MakeSweep是扫掠体的基类。对⽤户来说,没有什么实质的⽤途。
2. 创建拉伸体BRepPrimAPI_MakePrism
使⽤类BRepPrimAPI_MakePrism来创建线性拉伸体prism。拉伸体可从⼀个形状及⼀个向量或⼀个⽅向来创建。从⼀个向量可以创建⼀个有限拉伸体,⽽从⼀个⽅向可以创建⼀个⽆限的或半⽆限的拉伸体。⼀个布尔的函数参数⽤来控制半⽆限和全⽆限的拉伸体。所有的构造函数都有⼀个布尔值来控制构造的拉伸体与原拉伸体是否共享,默认是共享⽅式构造。如下代码为使⽤⼀个⾯,⼀个⽅向和⼀个长度来创建⼀个有限的、⽆限的和半⽆限的拉伸体。
⽣成上图所⽰形状的代码如下所⽰:
//--- Prism a vertex -> result is an edge ---
TopoDS_Vertex V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(-200.,-200.,0.));
TopoDS_Shape S1 = BRepBuilderAPI_MakePrism(V1,gp_Vec(0.,0.,100.));
//--- Prism an edge -> result is a face ---
TopoDS_Edge E = BRepBuilderAPI_MakeEdge(gp_Pnt(-150.,-150,0.), gp_Pnt(-50.,-50,0.));
TopoDS_Shape S2 = BRepPrimAPI_MakePrism(E,gp_Vec(0.,0.,100.));
//--- Prism an wire -> result is a shell ---
TopoDS_Edge E1 = BREpBuilderAPI_MakeEdge(gp_Pnt(0.,0.,0.), gp_Pnt(50.,0.,0.));
TopoDS_Edge E2 = BREpBuilderAPI_MakeEdge(gp_Pnt(50.,0.,0.), gp_Pnt(50.,50.,0.));
TopoDS_Edge E3 = BREpBuilderAPI_MakeEdge(gp_Pnt(50.,50.,0.), gp_Pnt(0.,0.,0.));
TopoDS_Wire W = BRepBuilderAPI_MakeWire(E1,E2,E3);
TopoDS_Shape S3 = BRepPrimAPI_MakePrism(W,gp_Vec(0.,0.,100.));
//--- Prism a face or a shell -> result is a solid ---
gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(200.,200.,0.gp_Dir(0.,0.,1.)), 80.);
TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c);
TopoDS_Wire Wc = BRepBuilderAPI_MakeWire(Ec);
TopoDS_Face F = BRepBuilderAPI_MakeFace(gp::XOY(),Wc);
TopoDS_Shape S4 = BRepBuilderAPI_MakePrism(F,gp_Vec(0.,0.,100.));
3. 创建旋转体BRepPrimAPI_MakeRevol
使⽤类BRepPrimAPI_MakeRevol来创建旋转扫掠体。旋转扫掠体由⼀个形状、轴和⼀个⾓度构造⽽得。类BRepPrimAPI_MakeRevol所有的构造函数的最后⼀个参数是⽤来控制构造的形状与原形状的关系,默认为共享的⽅式。
⽣成上图所⽰形状的代码如下所⽰:
//--- Revol of a vertex -> result is an edge ---
TopoDS_Vertex V1 = BRepBuilderAPI_MakeVertex(gp_Pnt(-200.,-200.,0.));
gp_Ax1 axe = gp_Ax1(gp_Pnt(-170.,-170.,0.),gp_Dir(0.,0.,1.));
TopoDS_Shape S1 = BRepPrimAPI_MakeRevol(V1,axe);
//--- Revol of an edge -> result is a face ---
TopoDS_Edge E = BRepBuilderAPI_MakeEdge(gp_Pnt(-120.,-120,0.), gp_Pnt(-120.,-120,100.));
axe = gp_Ax1(gp_Pnt(-100.,-100.,0.),gp_Dir(0.,0.,1.));
TopoDS_Shape S2 = BRepPrimAPI_MakeRevol(E,axe);
督导论文
//--- Revol of a wire -> result is a shell ---
TopoDS_Edge E1 = BRepBuilderAPI_MakeEdge(gp_Pnt(0.,0.,0.), gp_Pnt(50.,0.,0.));
TopoDS_Edge E2 = BRepBuilderAPI_MakeEdge(gp_Pnt(50.,0.,0.), gp_Pnt(50.,50.,0.));
TopoDS_Edge E3 = BRepBuilderAPI_MakeEdge(gp_Pnt(50.,50.,0.), gp_Pnt(0.,0.,0.));
TopoDS_Wire W = BRepBuilderAPI_MakeWire(E1,E2,E3);
axe = gp_Ax1(gp_Pnt(0.,0.,30.),gp_Dir(0.,1.,0.));
TopoDS_Shape S3 = BRepPrimAPI_MakeRevol(W,axe, 210.*PI180);
/
/--- Revol of a face -> result is a solid ---
gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(200.,200.,0.),gp_Dir(0.,0.,1.)), 80.);
TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c);
TopoDS_Wire Wc = BRepBuilderPI_MakeWire(Ec);
TopoDS_Face F = BRepBuilderAPI_MakeFace(gp_Pln(gp::XOY()),Wc);
axe = gp_Ax1(gp_Pnt(290,290.,0.),gp_Dir(0.,1,0.));
TopoDS_Shape S4 = BRepPrimAPI_MakeRevol(F,axe, 90.*PI180);

本文发布于:2024-09-20 21:36:31,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/305506.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:创建   扫掠   形状   部分
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议