face_grid leaked both buffers when the kernel threw mid-grid, and tess copied every mesh array a second time. Also drop the stale S5 references.
87 lines
3.5 KiB
C++
87 lines
3.5 KiB
C++
/*
|
|
OCP.STEPControl — STEP read and write.
|
|
|
|
The reader inherits its transfer surface from XSControl_Reader; what is
|
|
added here is the unit handling the app needs (FileUnits reports what the
|
|
file declares, SetSystemLengthUnit rescales the transfer) and ReadStream,
|
|
which takes a Python file-like.
|
|
|
|
ReadStream reuses the slurp bridge from occt_stream.h rather than wrapping
|
|
a streambuf that calls back into Python — same reasoning as BinTools, and
|
|
the same one extra copy.
|
|
|
|
The GIL stays held throughout, per the note in mod_XSControl.cpp: XSTEP is
|
|
built on process-global state and the app serialises imports anyway.
|
|
|
|
The wheel ships none of OCCT's share/ resources; STEP still resolves units
|
|
in a container with no CSF_* environment, which tests/test_inc3_io.py pins.
|
|
*/
|
|
|
|
#include "../common/occt_module.h"
|
|
#include "../common/occt_policies.h"
|
|
#include "../common/occt_stream.h"
|
|
|
|
#include <STEPControl_Controller.hxx>
|
|
#include <STEPControl_Reader.hxx>
|
|
#include <STEPControl_StepModelType.hxx>
|
|
#include <STEPControl_Writer.hxx>
|
|
#include <TColStd_SequenceOfAsciiString.hxx>
|
|
#include <TopoDS_Shape.hxx>
|
|
#include <XSControl_Reader.hxx>
|
|
|
|
#include <sstream>
|
|
|
|
void register_STEPControl(nb::module_ &root) {
|
|
nb::module_ m = ocp_submodule(root, "STEPControl");
|
|
|
|
nb::enum_<STEPControl_StepModelType>(m, "STEPControl_StepModelType",
|
|
nb::is_arithmetic())
|
|
.value("STEPControl_AsIs", STEPControl_AsIs)
|
|
.value("STEPControl_ManifoldSolidBrep", STEPControl_ManifoldSolidBrep)
|
|
.value("STEPControl_BrepWithVoids", STEPControl_BrepWithVoids)
|
|
.value("STEPControl_FacetedBrep", STEPControl_FacetedBrep)
|
|
.value("STEPControl_FacetedBrepAndBrepWithVoids",
|
|
STEPControl_FacetedBrepAndBrepWithVoids)
|
|
.value("STEPControl_ShellBasedSurfaceModel",
|
|
STEPControl_ShellBasedSurfaceModel)
|
|
.value("STEPControl_GeometricCurveSet", STEPControl_GeometricCurveSet)
|
|
.value("STEPControl_Hybrid", STEPControl_Hybrid)
|
|
.export_values();
|
|
|
|
nb::class_<STEPControl_Controller> controller(m, "STEPControl_Controller");
|
|
OCP_DEF_S(
|
|
controller, "Init", []() { return STEPControl_Controller::Init(); });
|
|
|
|
nb::class_<STEPControl_Reader, XSControl_Reader>(m, "STEPControl_Reader")
|
|
.def(nb::init<>())
|
|
.def(
|
|
"ReadStream",
|
|
[](STEPControl_Reader &self, const char *name, nb::handle stream) {
|
|
std::istringstream buffer(ocp_slurp(stream));
|
|
return self.ReadStream(name, buffer);
|
|
},
|
|
"theName"_a, "theIStream"_a)
|
|
.def("FileUnits", &STEPControl_Reader::FileUnits, "theLengthUnits"_a,
|
|
"theAngleUnits"_a, "theSolidAngleUnits"_a)
|
|
.def("SetSystemLengthUnit", &STEPControl_Reader::SetSystemLengthUnit,
|
|
"theLengthUnit"_a)
|
|
.def("SystemLengthUnit", &STEPControl_Reader::SystemLengthUnit);
|
|
|
|
nb::class_<STEPControl_Writer>(m, "STEPControl_Writer")
|
|
.def(nb::init<>())
|
|
.def(
|
|
"Transfer",
|
|
[](STEPControl_Writer &self, const TopoDS_Shape &sh,
|
|
const STEPControl_StepModelType mode,
|
|
const Standard_Boolean compgraph) {
|
|
return self.Transfer(sh, mode, compgraph);
|
|
},
|
|
"sh"_a, "mode"_a, "compgraph"_a = Standard_True)
|
|
.def(
|
|
"Write",
|
|
[](STEPControl_Writer &self, const Standard_CString filename) {
|
|
return self.Write(filename);
|
|
},
|
|
"filename"_a);
|
|
}
|