AMCAX Kernel
Geometry kernel for CAD/CAE/CAM
九韶内核 1.0.0.0
载入中...
搜索中...
未找到
实体建模

创建基本形状

基本形状包括方盒,圆柱,圆锥/圆台,球,圆环。

方盒

AMCAX::MakeBox 类提供创建方盒的功能。

AMCAX::TopoShape box = AMCAX::MakeBox(AMCAX::Point3(-5.0, -5.0, 0.0), AMCAX::Point3(5.0, 5.0, 3.0));
创建立方体的类
定义 MakeBox.hpp:18
形状的基类,包含具有位置和方向信息的基础形状
定义 TopoShape.hpp:15
PointT< double, 3 > Point3
三维点
定义 PointT.hpp:459

圆柱

AMCAX::MakeCylinder 类提供创建圆柱的功能。

AMCAX::TopoShape cylinder = AMCAX::MakeCylinder(AMCAX::Frame3(AMCAX::Point3(0.0, 0.0, 0.0), AMCAX::Direction3(0.0, 0.0, 1.0)), 3.0, 5.0);
创建圆柱体的类
定义 MakeCylinder.hpp:16
DirectionT< double, 3 > Direction3
三维方向
定义 DirectionT.hpp:587
FrameT< double, 3 > Frame3
三维标架
定义 FrameT.hpp:885

圆锥/圆台

AMCAX::MakeCone 类提供创建圆锥/圆台的功能。

AMCAX::TopoShape cone = AMCAX::MakeCone(4.0, 0.0, 4.0);
创建圆锥体的类
定义 MakeCone.hpp:16

AMCAX::MakeSphere 类提供创建球的功能。

AMCAX::TopoShape sphere = AMCAX::MakeSphere(AMCAX::Point3(-3.0, 0.0, 0.0), 1.0);
创建球体的类
定义 MakeSphere.hpp:16

圆环

AMCAX::MakeTorus 类提供创建圆环的功能。

AMCAX::TopoShape torus = AMCAX::MakeTorus(AMCAX::Frame3(AMCAX::Point3(0.0, 0.0, 2.0), AMCAX::Direction3(1.0, 0.0, 0.0)), 4.0, 2.0);
创建圆环的类
定义 MakeTorus.hpp:19

布尔运算

布尔运算功能包括融合,求交,剪切,分割,计算截面线。

融合

AMCAX::BoolBRepFuse 类提供融合功能。

AMCAX::TopoShape shape1, shape2;
AMCAX::OCCTIO::OCCTTool::Read(shape1, "./data/part.brep");
AMCAX::OCCTIO::OCCTTool::Read(shape2, "./data/box.brep");
//Fuse
AMCAX::TopoShape fuse = AMCAX::BoolBRepFuse(shape1, shape2);
并集运算的类
定义 BoolBRepFuse.hpp:15
static AMCAX_API bool Read(TopoShape &s, std::istream &is)
读取输入流中的形状

求交

AMCAX::BoolBRepCommon 类提供求交功能。

AMCAX::TopoShape shape1, shape2;
AMCAX::OCCTIO::OCCTTool::Read(shape1, "./data/part.brep");
AMCAX::OCCTIO::OCCTTool::Read(shape2, "./data/box.brep");
//Common
AMCAX::TopoShape common = AMCAX::BoolBRepCommon(shape1, shape2);
交集运算的类
定义 BoolBRepCommon.hpp:14

剪切

AMCAX::BoolBRepCut 类提供剪切功能。

//Cut
切割运算的类
定义 BoolBRepCut.hpp:16

分割

AMCAX::BoolBRepSplitter 类提供分割功能。

AMCAX::TopoShape shape1, shape2;
AMCAX::OCCTIO::OCCTTool::Read(shape1, "./data/part.brep");
AMCAX::OCCTIO::OCCTTool::Read(shape2, "./data/box.brep");
//Splitter
auto tool_shape = std::list{ shape1 };
auto tool_argument = std::list{ shape2 };
splitter.SetTools(tool_shape);
splitter.SetArguments(tool_argument);
AMCAX::TopoShape split = splitter.Shape();
分割操作的类
定义 BoolBRepSplitter.hpp:16
AMCAX_API void SetTools(const std::list< TopoShape > &ls)
设置工具形状
AMCAX_API void SetArguments(const std::list< TopoShape > &listargs)
设置要处理的形状
virtual AMCAX_API const TopoShape & Shape()
获取结果形状

计算交线

AMCAX::BoolBRepSection 类提供计算交线功能,结果会保存为 TopoCompound。

AMCAX::TopoShape section = AMCAX::BoolBRepSection(cone, sphere);
计算形状间交线运算的类
定义 BoolBRepSection.hpp:17

像上述这样直接调用接口得到的结果,不会计算在形状中的参数曲线。若想计算参数曲线,需要先初始化,然后再计算交线。

section.Init1(cone);
section.ComputePCurveOn1(true);
section.Init2(sphere);
section.ComputePCurveOn2(true);
section.Build();
AMCAX::TopoShape result = section.Shape();

扫掠操作

拉伸

AMCAX::MakePrism 类提供拉伸(扫掠)功能。

AMCAX::MakeGeom3Ellipse makeEllipse(AMCAX::Frame3(), 3.0, 1.0);
std::shared_ptr<AMCAX::Geom3Curve> curve = makeEllipse.Value();
//Make an extrusion shape
创建边的类
定义 MakeEdge.hpp:24
创建面的类
定义 MakeFace.hpp:22
构造三维几何椭圆的类
定义 MakeGeom3Ellipse.hpp:13
创建棱柱或拉伸形状的类
定义 MakePrism.hpp:16
创建环的类
定义 MakeWire.hpp:17
边的类
定义 TopoEdge.hpp:12
面类
定义 TopoFace.hpp:12
环类
定义 TopoWire.hpp:12
VectorT< double, 3 > Vector3
三维向量
定义 VectorT.hpp:707

旋转

AMCAX::MakeRevol 类提供旋转(扫掠)功能。

std::vector<AMCAX::Point3> poles{ AMCAX::Point3(1.0, 0.0, 0.0), AMCAX::Point3(0.8, 0.0, 0.5), AMCAX::Point3(1.0, 0.0, 1.0) };
auto bz = std::make_shared<AMCAX::Geom3BezierCurve>(poles);
//Make a revolved shape
static AMCAX_API const Axis3 & OZ() noexcept
获取三维中的 z 轴,包括原点和 z 轴方向
创建旋转体的类
定义 MakeRevol.hpp:18

管道

通过指定脊线(线框-Wire)和轮廓(形状-Shape)来创建管道。可通过 AMCAX::MakePipeAMCAX::MakePipeShell 实现。MakePipe 为简单的管道算法,仅适用单个截面(平面形状)和光滑轨道。MakePipeShell 为更完备的管道算法,支持多个截面(平面形状),支持轨道不光滑。但路径(不应当有自相交)必须和截面平面相交。需要注意的是:Add 只能是 TopoWire 或 TopoVertex。

//Makepipe
//Make a face
double radius = 0.1;
AMCAX::Frame3 aFrame(AMCAX::Point3(0., 0., 0.), AMCAX::Direction3(-8.57143, 0., 4.));
AMCAX::Circle3 aCircle = AMCAX::Circle3(aFrame, radius);
//Make a curve
std::vector<AMCAX::Point3> pointSet;
pointSet.push_back(AMCAX::Point3(0., 0., 0.));
pointSet.push_back(AMCAX::Point3(-1., 0., 1.));
pointSet.push_back(AMCAX::Point3(0., 0., 2.));
pointSet.push_back(AMCAX::Point3(1., 0., 3.));
pointSet.push_back(AMCAX::Point3(0., 0., 4.));
std::shared_ptr<AMCAX::Geom3BSplineCurve> aBSplineCurve = AMCAX::NURBSAPIInterpolate::InterpolatePoints(pointSet,
//Make a wire
AMCAX::TopoEdge aSpineEdge = AMCAX::MakeEdge(aBSplineCurve);
AMCAX::TopoWire aSpineWire = AMCAX::MakeWire(aSpineEdge);
//Make a pipe
AMCAX::TopoShape aPipe = AMCAX::MakePipe(aSpineWire, aFace);
//MakePipeShell
AMCAX::MakePipeShell ps(aSpineWire);
ps.Add(aWire, false, false);
ps.Build();
构造管道的算法类
定义 MakePipe.hpp:20
构造管道壳体的算法类
定义 MakePipeShell.hpp:31
static AMCAX_API std::shared_ptr< Geom3BSplineCurve > InterpolatePoints(const std::vector< Point3 > &points, int degree=3, bool isClosed=false, ApproxParameterizationType ptype=ApproxParameterizationType::ChordLength)
构造顺序通过数据点的插值曲线
CircleS< 3 > Circle3
三维圆
定义 CircleT.hpp:178
@ Centripetal
向心参数化:数据点的参数与它们之间距离的平方根成正比
定义 ApproxParameterizationType.hpp:17

放样操作

AMCAX::MakeLoft 类提供放样功能。添加若干 Wire,可以放样出 Shell 或 Solid。

//Make a polygon
AMCAX::Point3 aPoint1(1.0, 0.0, 0.0);
AMCAX::Point3 aPoint2(-0.5, std::sqrt(3.0) * 0.5, 0.0);
AMCAX::Point3 aPoint3(-0.5, -std::sqrt(3.0) * 0.5, 0.0);
AMCAX::MakePolygon aPolygon(aPoint1, aPoint2, aPoint3, true);
//Get the polygon wire
AMCAX::TopoWire bottomWire = aPolygon.Wire();
//Get the top wire
aTransform.SetTranslationPart(AMCAX::Vector3(0.0, 0.0, 3.0));
AMCAX::TopoWire topWire = AMCAX::TopoCast::Wire(AMCAX::TransformShape(bottomWire, aTransform));
//Make a lofting shape
AMCAX::MakeLoft aMakeLoft(true, true);
aMakeLoft.AddWire(bottomWire);
aMakeLoft.AddWire(topWire);
aMakeLoft.Build();
AMCAX::TopoShape loft = aMakeLoft.Shape();
构造放样形状的类
定义 MakeLoft.hpp:29
创建多边形的类
定义 MakePolygon.hpp:18
static AMCAX_API const TopoWire & Wire(const TopoShape &s)
将形状转换为环
对形状进行变换的类
定义 TransformShape.hpp:12
constexpr void SetTranslationPart(const VectorT< OtherScalar, DIM > &vec) noexcept
设置变换中的平移部分
定义 TransformationT.hpp:337
void SetRotation(const PointT< OtherScalar, DIM > &point, const OtherScalar2 &angle) noexcept
设置变换为二维中绕点旋转某一角度
定义 TransformationT.hpp:138
constexpr double pi
数学常数 Pi,圆的周长与直径之比
定义 Constants.hpp:42
TransformationT< double, 3 > Transformation3
三维变换
定义 TransformationT.hpp:1102

边缘处理

圆角

圆角是取代锋利边缘的光滑面。 AMCAX::MakeFillet 类和 AMCAX::MakeFillet2d 类提供圆角的功能。

MakeFillet(圆角)

AMCAX::TopoShape box = AMCAX::MakeBox(AMCAX::Point3(-5.0, -5.0, -5.0), AMCAX::Point3(5.0, 5.0, 5.0));
//Get the edge in box
AMCAX::TopoExplorerTool::MapShapes(box, AMCAX::ShapeType::Edge, edges);
AMCAX::TopoShape e1 = edges[0];
//Make fillet
mf.Add(1.0, AMCAX::TopoCast::Edge(e1));
mf.Build();
AMCAX::TopoShape box_fillet = mf.Shape();
索引集的模板类
定义 IndexSet.hpp:20
圆角类
定义 MakeFillet.hpp:23
static AMCAX_API const TopoEdge & Edge(const TopoShape &s)
将形状转换为边
static AMCAX_API void MapShapes(const TopoShape &s, ShapeType t, IndexSet< TopoShape > &shapeSet)
构造给定类型的子形状集合

MakeFillet2d(平面圆角)

AMCAX::TopoShape box = AMCAX::MakeBox(AMCAX::Point3(-5.0, -5.0, -5.0), AMCAX::Point3(5.0, 5.0, 5.0));
//Get the face in box
AMCAX::TopoExplorerTool::MapShapes(box, AMCAX::ShapeType::Face, faces);
AMCAX::TopoShape f = faces[0];
//Get the vertex in f1
AMCAX::TopoExplorerTool::MapShapes(f1, AMCAX::ShapeType::Vertex, vertex);
AMCAX::TopoShape v1 = vertex[0];
//Make fillet2d
mf2d.AddFillet(AMCAX::TopoCast::Vertex(v1), 1.0);
mf2d.Build();
AMCAX::TopoShape box_fillet2d = mf2d.Shape();
在平面顶点上构造圆角和倒角的类
定义 MakeFillet2d.hpp:20
static AMCAX_API const TopoVertex & Vertex(const TopoShape &s)
将形状转换为顶点
static AMCAX_API const TopoFace & Face(const TopoShape &s)
将形状转换为面

倒角

AMCAX::MakeChamfer 类提供倒角功能。

AMCAX::TopoShape box = AMCAX::MakeBox(AMCAX::Point3(-5.0, -5.0, -5.0), AMCAX::Point3(5.0, 5.0, 5.0));
//Get the edge in box
AMCAX::TopoExplorerTool::MapShapes(box, AMCAX::ShapeType::Edge, edges);
AMCAX::TopoShape e1 = edges[0];
//Perform chamfer on a given shape
mc.Add(1.0, AMCAX::TopoCast::Edge(e1));
mc.Build();
AMCAX::TopoShape box_chamfer = mc.Shape();
倒角类
定义 MakeChamfer.hpp:20

形状变形

形状偏移

AMCAX::MakeOffset 类和 AMCAX::MakeOffsetShape 类提供对形状偏移的功能。

MakeOffset(2D形状的偏移)

输入wire进行offset,输入Face则对其边界进行offset,最后返回offset后的wire。

AMCAX::TopoShape box = AMCAX::MakeBox(AMCAX::Point3(-5.0, -5.0, -5.0), AMCAX::Point3(5.0, 5.0, 5.0));
//Get the face in box
AMCAX::TopoExplorerTool::MapShapes(box, AMCAX::ShapeType::Face, faces);
AMCAX::TopoShape f = faces[0];
//Get the wire of the f
AMCAX::TopoExplorerTool::MapShapes(f, AMCAX::ShapeType::Wire, wire);
//Make offset wire
double offset = 1.5;
AMCAX::JoinType theJoin = AMCAX::JoinType::Arc;
bool isOpenResult = false;
AMCAX::MakeOffset MakeOffset(w, theJoin, isOpenResult);
MakeOffset.Perform(offset);
AMCAX::TopoShape offset1 = MakeOffset.Shape();
//Make offset face
AMCAX::MakeOffset MakeOffset2(f1, theJoin, isOpenResult);
MakeOffset2.Perform(offset);
AMCAX::TopoShape offset2 = MakeOffset2.Shape();
偏移环的类
定义 MakeOffset.hpp:19
JoinType
连接类型
定义 GeometryMacros.hpp:74

MakeOffsetShape(3D形状的偏移)

对输入的 face 进行 offset,如果输入是 shell,则对其整个 solid 进行 offset,最后返回 offset 后的 face 或 solid。偏移带来的缝隙可以选择使用延伸求交或圆角进行连接,而偏移带来的自交部分会被删除,另外还可通过 Modified 和 Generated 进行建模追踪。

AMCAX::TopoShape box = AMCAX::MakeBox(AMCAX::Point3(-5.0, -5.0, -5.0), AMCAX::Point3(5.0, 5.0, 5.0));
//Get the face in box
AMCAX::TopoExplorerTool::MapShapes(box, AMCAX::ShapeType::Face, faces);
AMCAX::TopoShape f = faces[0];
//Make offset face
AMCAX::MakeOffsetShape MakeOffsetShape;
double offsetvalue = 1.2;
MakeOffsetShape.PerformBySimple(f, offsetvalue);
MakeOffsetShape.Build();
AMCAX::TopoShape offsetshape1 = MakeOffsetShape.Shape();
AMCAX::OCCTIO::OCCTTool::Write(offsetshape1, "MakeOffsetShape-face.brep");
//Make offset face
AMCAX::MakeOffsetShape MakeOffsetShape2;
AMCAX::TopoExplorerTool::MapShapes(box, AMCAX::ShapeType::Shell, shell);
AMCAX::TopoShape s = shell[0];
MakeOffsetShape2.PerformBySimple(s, offsetvalue);
MakeOffsetShape2.Build();
AMCAX::TopoShape offsetshape2 = MakeOffsetShape2.Shape();
构造偏移形状的算法类(用于构造壳体)
定义 MakeOffsetShape.hpp:18
AMCAX_API void PerformBySimple(const TopoShape &s, double offsetValue)
使用不进行相交计算的简单算法构造偏移形状
AMCAX_API void Build() override
执行算法
static AMCAX_API bool Write(const TopoShape &s, std::ostream &os, int format=3)
将形状写入输出流

MakeOffsetWire

功能同样为偏移平面上的 wire,但支持拓扑结构的改变;支持在不连接的地方进行延伸求交过渡或构建圆弧过渡;支持通过 Generated 函数进行追踪。

//Make a outerWire
std::vector<AMCAX::Point3> points1;
points1.push_back(AMCAX::Point3(-1.0, -1.0, 0.0));
points1.push_back(AMCAX::Point3(1.0, -1.0, 0.0));
points1.push_back(AMCAX::Point3(1.0, 1.0, 0.0));
points1.push_back(AMCAX::Point3(-1.0, 1.0, 0.0));
for (const auto& p : points1)
{
mp1.Add(p);
}
mp1.Close();
const auto& outerWire = mp1.Wire();
//Make a innerWire
std::vector<AMCAX::Point3> points2;
points2.push_back(AMCAX::Point3(0.0, -0.5, 0.0));
points2.push_back(AMCAX::Point3(-0.5, 0.0, 0.0));
points2.push_back(AMCAX::Point3(0.0, 0.5, 0.0));
points2.push_back(AMCAX::Point3(0.5, 0.0, 0.0));
for (const auto& p : points2)
{
mp2.Add(p);
}
mp2.Close();
const auto& innerWire = mp2.Wire();
//Make a face
auto surf = std::make_shared<AMCAX::Geom3Plane>();
b.Add(f, innerWire);
b.Add(f, outerWire);
//Make offset wire
double offset = 0.1;
{
AMCAX::JoinType join = AMCAX::JoinType::Intersection;
AMCAX::MakeOffsetWire mow(f, innerWire, join, offset);
const auto& result = mow.Shape();
}
{
AMCAX::JoinType join = AMCAX::JoinType::Intersection;
AMCAX::MakeOffsetWire mow(f, innerWire, join, -offset);
const auto& result = mow.Shape();
}
{
AMCAX::JoinType join = AMCAX::JoinType::Arc;
AMCAX::MakeOffsetWire mow(f, innerWire, join, offset);
const auto& result = mow.Shape();
}
{
AMCAX::JoinType join = AMCAX::JoinType::Arc;
AMCAX::MakeOffsetWire mow(f, innerWire, join, -offset);
const auto& result = mow.Shape();
}
构造偏移环的类,支持在平面或参数域上对环进行偏移
定义 MakeOffsetWire.hpp:19
AMCAX_API void Close()
封闭多边形
AMCAX_API void Add(const Point3 &p)
向多边形中添加一个新点
AMCAX_API const TopoWire & Wire()
获取多边形结果
static constexpr double Confusion() noexcept
获取混淆容差
定义 Precision.hpp:122
构造 B-Rep 结构的工具类
定义 TopoBuilder.hpp:37
AMCAX_API void MakeFace(TopoFace &f) const
构造一个空面
AMCAX_API void Add(TopoShape &s, const TopoShape &c) const
向形状中添加子形状

拓扑结构改变举例:(蓝黑色为输入,蓝色为期待的结果, 红色内部构建过程中产生出来的需要删除的部分)

形状加厚

AMCAX::MakeThickSolid 类提供形状加厚的功能。

AMCAX::TopoShape box = AMCAX::MakeBox(AMCAX::Point3(-5.0, -5.0, -5.0), AMCAX::Point3(5.0, 5.0, 5.0));
//Get the face in box
AMCAX::TopoExplorerTool::MapShapes(box, AMCAX::ShapeType::Face, faces);
AMCAX::TopoShape f = faces[0];
//Make a thick solid
double offsetvalue = 1.5;
ts.MakeThickBySimple(f, offsetvalue);
ts.Build();
AMCAX::TopoShape thicksolid = ts.Shape();
创建加厚实体形状的类
定义 MakeThickSolid.hpp:12
AMCAX_API void Build() override
执行算法
AMCAX_API void MakeThickBySimple(const TopoShape &s, double offsetValue)
通过简单算法构造加厚实体,仅适用于非封闭的单个面或包含相切面的壳体

替换面

AMCAX::BoolBRepReplaceFace 类提供替换面的功能。即选择实体中的一个面,将其替换成另一个曲面。基本逻辑是将被替换的面周围的面进行延伸,与新的曲面进行相交并重构拓扑。但如果曲面不能覆盖被替换的面,替换会失败。

//Get the face in box
AMCAX::TopoExplorerTool::MapShapes(cylinder, AMCAX::ShapeType::Face, shapeFaces);
AMCAX::TopoFace upface = AMCAX::TopoCast::Face(shapeFaces[1]);
// Replace the feature faces in solid with surface
AMCAX::Plane plane(AMCAX::Point3(0., 0., 12.), AMCAX::Direction3(0.2, 0.2, 1.0));
std::shared_ptr<AMCAX::Geom3Plane> surf = std::make_shared<AMCAX::Geom3Plane>(plane);
rf.SetShape(cylinder);
rf.AddFaceToReplace(upface);
rf.Build();
if (rf.IsDone())
{
AMCAX::TopoShape result = rf.Shape();
}
使用一个曲面替换实体中特征面的的类(如果曲面不能覆盖被替换的面,替换会失败)
定义 BoolBRepReplaceFace.hpp:17
AMCAX_API void SetReplaceSurface(const std::shared_ptr< Geom3Surface > &surface)
设置用于替换特征面的曲面
AMCAX_API void AddFaceToReplace(const TopoShape &face)
添加一个输入形状中要被替换的面
AMCAX_API void SetShape(const TopoShape &shape)
设置需要执行替换特征面的实体形状
AMCAX_API void Build() override
执行算法
virtual AMCAX_API bool IsDone() const
判断构造算法是否完成
平面类
定义 Plane.hpp:13

部分图片来源: https://dev.opencascade.org/doc/overview/html/index.html ,版权归其所有。