Erstellen eines Cylinder TopoDS_Solid in OpenCASCADE
Also see How to create a Box TopoDS_Solid in OpenCASCADE and How to create a Cube TopoDS_Solid in OpenCASCADE
Using my OCCUtils library, you can easily create a cylinder of user-defined diameter and length:
#include <occutils/Primitive.hxx>
using namespace OCCUtils;
TopoDS_Solid myCube = Primitive::MakeCylinder(5.0 /* mm diameter */, 25.0 /* mm length */);Du kannst auch die Ausrichtung des Zylinders mit Primites::Orientation::X, Primites::Orientation::Y oder Primites::Orientation::Z definieren:
#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);Du kannst diesen Zylinder auch auf der Längenachse zentrieren. Der Ursprungspunkt (Standard: (0,0,0)) liegt immer auf der Hauptachse des Zylinders (d.h. entlang seiner Länge.
#include <occutils/Primitive.hxx>
#include <vector>
using namespace OCCUtils;
/*
* Erstelle einen Würfel, der auf der X- und Y-Achse zentriert ist
*/
TopoDS_Solid myCube = Primitive::MakeCylinder(5.0 /* mm diameter */, 25.0 /* mm length */,
Primitive::Orientation::X,
Primitive::CenterL);Du kannst auch einen spezifischen Ursprungspunkt als drittes Argument verwenden (gp_Pnt).
Wenn du es manuell ohne OCCUtils tun möchtest, sieh dir die OCC-Klasse BRepPrimAPI_MakeBox an, die du so verwenden kannst:
gp_Ax2 ax = /* Define origin point and direction of the cylinder here */;
BRepPrimAPI_MakeCylinder cyl(ax, diameter / 2.0, length);
cyl.Build();
TopoDS_Solid mySolid = cyl.Solid();In diesem Fall musst du das Objekt manuell zentrieren, indem du den korrekten Ursprungspunkt berechnest. In OCCUtils wird dies mit
// Offsets basierend auf Zentrierung berechnen
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);
}