Erstellen eines Box TopoDS_Solid in OpenCASCADE
English
Deutsch
Also see How to create a Cube TopoDS_Solid in OpenCASCADE and How to create a Cylinder TopoDS_Solid in OpenCASCADE
Using my OCCUtils library, you can easily create a box of user-defined dimensions:
make_box_occutils.cpp
#include <occutils/Primitive.hxx>
#include <vector>
using namespace OCCUtils;
TopoDS_Solid myCube = Primitive::MakeBox(5.0 /* X size */, 7.0 /* Y size */, 9.0 /* Z size */);Du kannst diese Box auch auf einer oder mehreren Achsen zentrieren (wenn sie auf keiner Achse zentriert ist, wird eine der Ecken auf dem Ursprungspunkt liegen):
make_box_centered.cpp
#include <occutils/Primitive.hxx>
#include <vector>
using namespace OCCUtils;
/*
* Erstelle eine Box, die auf der X- und Y-Achse zentriert ist
*/
TopoDS_Solid myCube = Primitive::MakeBox(5.0, 7.0, 9.0
Primitive::CenterX | Primitive::CenterY);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:
brepprimapi_makebox.cpp
BRepPrimAPI_MakeBox box(origin, xSize, ySize, zSize);
box.Build();
TopoDS_Solid mySolid = box.Solid();In diesem Fall musst du das Objekt manuell zentrieren, indem du den korrekten Ursprungspunkt berechnest. In OCCUtils wird dies mit
compute_offsets.cpp
// 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);
}Check out similar posts by category:
C/C++, OpenCASCADE
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow