如何在 OpenCASCADE 中创建圆柱体 TopoDS_Solid

另请参见如何在 OpenCASCADE 中创建长方体 TopoDS_Solid如何在 OpenCASCADE 中创建立方体 TopoDS_Solid

使用我的 OCCUtils 库,你可以轻松创建用户定义直径和长度的圆柱体:

make_cylinder_example.cpp
#include <occutils/Primitive.hxx>

using namespace OCCUtils;

TopoDS_Solid myCube = Primitive::MakeCylinder(5.0 /* mm diameter */, 25.0 /* mm length */);

你也可以使用 Primites::Orientation::XPrimites::Orientation::YPrimites::Orientation::Z 定义圆柱体的方向:

make_cylinder_orientation.cpp
#include <occutils/Primitive.hxx>
#include <vector>

using namespace OCCUtils;

TopoDS_Solid myCube = Primitive::MakeCylinder(5.0 /* mm diameter */,
    25.0 /* mm length */, Primitive::Orientation::X);

你也可以在长度轴上居中此圆柱体。原点(默认:(0,0,0))始终位于圆柱体的主轴上(即沿其长度方向)。

make_cylinder_centered.cpp
#include <occutils/Primitive.hxx>
#include <vector>

using namespace OCCUtils;

/*
 * 创建在 X 和 Y 轴上居中的立方体
 */
TopoDS_Solid myCube = Primitive::MakeCylinder(5.0 /* mm diameter */, 25.0 /* mm length */,
    Primitive::Orientation::X,
    Primitive::CenterL);

你也可以使用特定原点作为第三个参数(gp_Pnt)。

如果你想在不使用 OCCUtils 的情况下手动操作,请查看 OCC 类 BRepPrimAPI_MakeBox,你可以像这样使用它:

make_cylinder_manual.cpp
gp_Ax2 ax = /* 在此处定义圆柱体的原点和方向 */
BRepPrimAPI_MakeCylinder cyl(ax, diameter / 2.0, length);
cyl.Build();
TopoDS_Solid mySolid = cyl.Solid();

在这种情况下,你需要通过计算正确的原点手动居中对象。在 OCCUtils 中,这是使用

compute_offsets.cpp
// 基于居中计算偏移量
if(center & CenterX) {
    origin.SetX(origin.X() - xSize / 2.0);
}
if(center & CenterY) {
    origin.SetY(origin.Y() - ySize / 2.0);
}
if(center & CenterZ) {
    origin.SetZ(origin.Z() - zSize / 2.0);
}

Check out similar posts by category: C/C++, OpenCASCADE