Merge branch 'occ_extrude_identify' into 'master'

Occ extrude identify

See merge request ngsolve/netgen!570
This commit is contained in:
Lackner, Christopher 2023-05-17 16:35:50 +02:00
commit f802197576

View File

@ -982,7 +982,9 @@ DLL_HEADER void ExportNgOCCShapes(py::module &m)
return CastShape(shape.Reversed()); })
.def("Extrude", [](const TopoDS_Shape & shape, double h,
optional<gp_Vec> dir) {
optional<gp_Vec> dir, bool identify,
Identifications::ID_TYPE idtype)
{
for (TopExp_Explorer e(shape, TopAbs_FACE); e.More(); e.Next())
{
Handle(Geom_Surface) surf = BRep_Tool::Surface (TopoDS::Face(e.Current()));
@ -996,7 +998,7 @@ DLL_HEADER void ExportNgOCCShapes(py::module &m)
surf->D1 (0,0,p,du,dv);
edir = du^dv;
}
BRepPrimAPI_MakePrism builder(shape, h*edir, true);
BRepPrimAPI_MakePrism builder(shape, h*edir, false);
for (auto typ : { TopAbs_SOLID, TopAbs_FACE, TopAbs_EDGE, TopAbs_VERTEX })
for (TopExp_Explorer e(shape, typ); e.More(); e.Next())
@ -1005,11 +1007,17 @@ DLL_HEADER void ExportNgOCCShapes(py::module &m)
for (auto mods : builder.Generated(e.Current()))
OCCGeometry::GetProperties(mods).Merge(prop);
}
if(identify)
{
Transformation<3> trsf(h * occ2ng(edir));
Identify(GetFaces(shape), GetFaces(builder.LastShape()),
"extrusion_cs", idtype, trsf);
}
return builder.Shape();
}
throw Exception("no face found for extrusion");
}, py::arg("h"), py::arg("dir")=nullopt, "extrude shape to thickness 'h', shape must contain a plane surface, optionally give an extrusion direction")
}, py::arg("h"), py::arg("dir")=nullopt, py::arg("identify")=false,
py::arg("idtype")=Identifications::CLOSESURFACES, "extrude shape to thickness 'h', shape must contain a plane surface, optionally give an extrusion direction")
.def("Extrude", [] (const TopoDS_Shape & face, gp_Vec vec) {
return BRepPrimAPI_MakePrism (face, vec).Shape();