mirror of
https://github.com/NGSolve/netgen.git
synced 2025-01-11 21:50:34 +05:00
occ features
This commit is contained in:
parent
e4e1994a60
commit
f2e8425145
@ -23,6 +23,7 @@
|
|||||||
#include <Standard_GUID.hxx>
|
#include <Standard_GUID.hxx>
|
||||||
#include <Geom_TrimmedCurve.hxx>
|
#include <Geom_TrimmedCurve.hxx>
|
||||||
#include <GC_MakeSegment.hxx>
|
#include <GC_MakeSegment.hxx>
|
||||||
|
#include <GC_MakeCircle.hxx>
|
||||||
#include <GC_MakeArcOfCircle.hxx>
|
#include <GC_MakeArcOfCircle.hxx>
|
||||||
#include <BRepBuilderAPI_MakeEdge.hxx>
|
#include <BRepBuilderAPI_MakeEdge.hxx>
|
||||||
#include <BRepBuilderAPI_MakeWire.hxx>
|
#include <BRepBuilderAPI_MakeWire.hxx>
|
||||||
@ -319,7 +320,8 @@ DLL_HEADER void ExportNgOCC(py::module &m)
|
|||||||
|
|
||||||
py::class_<gp_Trsf>(m, "gp_Trsf")
|
py::class_<gp_Trsf>(m, "gp_Trsf")
|
||||||
.def(py::init<>())
|
.def(py::init<>())
|
||||||
.def("SetMirror", [] (gp_Trsf & trafo, const gp_Ax1 & ax) { trafo.SetMirror(ax); })
|
.def("SetMirror", [] (gp_Trsf & trafo, const gp_Ax1 & ax) { trafo.SetMirror(ax); return trafo; })
|
||||||
|
.def_static("Mirror", [] (const gp_Ax1 & ax) { gp_Trsf trafo; trafo.SetMirror(ax); return trafo; })
|
||||||
.def("__call__", [] (gp_Trsf & trafo, const TopoDS_Shape & shape) {
|
.def("__call__", [] (gp_Trsf & trafo, const TopoDS_Shape & shape) {
|
||||||
return BRepBuilderAPI_Transform(shape, trafo).Shape();
|
return BRepBuilderAPI_Transform(shape, trafo).Shape();
|
||||||
})
|
})
|
||||||
@ -343,6 +345,8 @@ DLL_HEADER void ExportNgOCC(py::module &m)
|
|||||||
|
|
||||||
.def("ShapeType", [] (const TopoDS_Shape & shape)
|
.def("ShapeType", [] (const TopoDS_Shape & shape)
|
||||||
{ return shape.ShapeType(); })
|
{ return shape.ShapeType(); })
|
||||||
|
.def_property_readonly("type", [](const TopoDS_Shape & shape)
|
||||||
|
{ return shape.ShapeType(); })
|
||||||
|
|
||||||
.def("SubShapes", [] (const TopoDS_Shape & shape, TopAbs_ShapeEnum & type)
|
.def("SubShapes", [] (const TopoDS_Shape & shape, TopAbs_ShapeEnum & type)
|
||||||
{
|
{
|
||||||
@ -411,24 +415,14 @@ DLL_HEADER void ExportNgOCC(py::module &m)
|
|||||||
for (auto s : modlist)
|
for (auto s : modlist)
|
||||||
cout << "modified from list el: " << s.ShapeType() << endl;
|
cout << "modified from list el: " << s.ShapeType() << endl;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
for (TopExp_Explorer e(shape1, TopAbs_FACE); e.More(); e.Next())
|
for (auto & s : { shape1, shape2 })
|
||||||
{
|
for (TopExp_Explorer e(s, TopAbs_FACE); e.More(); e.Next())
|
||||||
const string & name = OCCGeometry::global_shape_names[e.Current().TShape()];
|
{
|
||||||
// TopTools_ListOfShape modlist = history->Modified(e.Current());
|
const string & name = OCCGeometry::global_shape_names[e.Current().TShape()];
|
||||||
// for (auto s : modlist)
|
for (auto smod : history->Modified(e.Current()))
|
||||||
for (auto s : history->Modified(e.Current()))
|
OCCGeometry::global_shape_names[smod.TShape()] = name;
|
||||||
OCCGeometry::global_shape_names[s.TShape()] = name;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for (TopExp_Explorer e(shape2, TopAbs_FACE); e.More(); e.Next())
|
|
||||||
{
|
|
||||||
const string & name = OCCGeometry::global_shape_names[e.Current().TShape()];
|
|
||||||
// TopTools_ListOfShape modlist = history->Modified(e.Current());
|
|
||||||
// for (auto s : modlist)
|
|
||||||
for (auto s : history->Modified(e.Current()))
|
|
||||||
OCCGeometry::global_shape_names[s.TShape()] = name;
|
|
||||||
}
|
|
||||||
#endif // OCC_HAVE_HISTORY
|
#endif // OCC_HAVE_HISTORY
|
||||||
|
|
||||||
return builder.Shape();
|
return builder.Shape();
|
||||||
@ -470,20 +464,25 @@ DLL_HEADER void ExportNgOCC(py::module &m)
|
|||||||
})
|
})
|
||||||
;
|
;
|
||||||
|
|
||||||
|
|
||||||
|
py::class_<TopoDS_Edge, TopoDS_Shape> (m, "TopoDS_Edge");
|
||||||
|
py::class_<TopoDS_Wire, TopoDS_Shape> (m, "TopoDS_Wire");
|
||||||
|
py::class_<TopoDS_Face, TopoDS_Shape> (m, "TopoDS_Face");
|
||||||
|
py::class_<TopoDS_Solid, TopoDS_Shape> (m, "TopoDS_Solid");
|
||||||
|
|
||||||
m.def("Sphere", [] (gp_Pnt cc, double r) {
|
m.def("Sphere", [] (gp_Pnt cc, double r) {
|
||||||
return BRepPrimAPI_MakeSphere (cc, r).Shape();
|
return BRepPrimAPI_MakeSphere (cc, r).Solid();
|
||||||
});
|
});
|
||||||
|
|
||||||
m.def("Cylinder", [] (gp_Pnt cpnt, gp_Dir cdir, double r, double h) {
|
m.def("Cylinder", [] (gp_Pnt cpnt, gp_Dir cdir, double r, double h) {
|
||||||
return BRepPrimAPI_MakeCylinder (gp_Ax2(cpnt, cdir), r, h).Shape();
|
return BRepPrimAPI_MakeCylinder (gp_Ax2(cpnt, cdir), r, h).Solid();
|
||||||
});
|
});
|
||||||
m.def("Cylinder", [] (gp_Ax2 ax, double r, double h) {
|
m.def("Cylinder", [] (gp_Ax2 ax, double r, double h) {
|
||||||
return BRepPrimAPI_MakeCylinder (ax, r, h).Shape();
|
return BRepPrimAPI_MakeCylinder (ax, r, h).Solid();
|
||||||
});
|
});
|
||||||
|
|
||||||
m.def("Box", [] (gp_Pnt cp1, gp_Pnt cp2) {
|
m.def("Box", [] (gp_Pnt cp1, gp_Pnt cp2) {
|
||||||
return BRepPrimAPI_MakeBox (cp1, cp2).Shape();
|
return BRepPrimAPI_MakeBox (cp1, cp2).Solid();
|
||||||
});
|
});
|
||||||
|
|
||||||
m.def("Prism", [] (const TopoDS_Shape & face, gp_Vec vec) {
|
m.def("Prism", [] (const TopoDS_Shape & face, gp_Vec vec) {
|
||||||
@ -551,36 +550,37 @@ DLL_HEADER void ExportNgOCC(py::module &m)
|
|||||||
py::class_<Handle(Geom_TrimmedCurve)> (m, "Geom_TrimmedCurve")
|
py::class_<Handle(Geom_TrimmedCurve)> (m, "Geom_TrimmedCurve")
|
||||||
;
|
;
|
||||||
|
|
||||||
m.def("Segment", [](gp_Pnt p1, gp_Pnt p2) { // ->Handle(Geom_TrimmedCurve) {
|
m.def("Segment", [](gp_Pnt p1, gp_Pnt p2) {
|
||||||
Handle(Geom_TrimmedCurve) curve = GC_MakeSegment(p1, p2);
|
Handle(Geom_TrimmedCurve) curve = GC_MakeSegment(p1, p2);
|
||||||
// return curve;
|
return BRepBuilderAPI_MakeEdge(curve).Edge();
|
||||||
return BRepBuilderAPI_MakeEdge(curve).Shape();
|
|
||||||
});
|
});
|
||||||
m.def("ArcOfCircle", [](gp_Pnt p1, gp_Pnt p2, gp_Pnt p3) { // ->Handle(Geom_TrimmedCurve) {
|
m.def("Circle", [](gp_Pnt c, gp_Dir n, double r) {
|
||||||
|
Handle(Geom_Circle) curve = GC_MakeCircle (c, n, r);
|
||||||
|
return BRepBuilderAPI_MakeEdge(curve).Edge();
|
||||||
|
});
|
||||||
|
m.def("ArcOfCircle", [](gp_Pnt p1, gp_Pnt p2, gp_Pnt p3) {
|
||||||
Handle(Geom_TrimmedCurve) curve = GC_MakeArcOfCircle(p1, p2, p3);
|
Handle(Geom_TrimmedCurve) curve = GC_MakeArcOfCircle(p1, p2, p3);
|
||||||
return BRepBuilderAPI_MakeEdge(curve).Shape();
|
return BRepBuilderAPI_MakeEdge(curve).Edge();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
m.def("Wire", [](std::vector<TopoDS_Shape> edges) -> TopoDS_Shape {
|
m.def("Wire", [](std::vector<TopoDS_Shape> edges) {
|
||||||
BRepBuilderAPI_MakeWire builder;
|
BRepBuilderAPI_MakeWire builder;
|
||||||
for (auto s : edges)
|
for (auto s : edges)
|
||||||
{
|
switch (s.ShapeType())
|
||||||
switch (s.ShapeType())
|
{
|
||||||
{
|
case TopAbs_EDGE:
|
||||||
case TopAbs_EDGE:
|
builder.Add(TopoDS::Edge(s)); break;
|
||||||
builder.Add(TopoDS::Edge(s)); break;
|
case TopAbs_WIRE:
|
||||||
case TopAbs_WIRE:
|
builder.Add(TopoDS::Wire(s)); break;
|
||||||
builder.Add(TopoDS::Wire(s)); break;
|
default:
|
||||||
default:
|
throw Exception("can make wire only from edges and wires");
|
||||||
throw Exception("can make wire only from edges and wires");
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
return builder.Wire();
|
return builder.Wire();
|
||||||
});
|
});
|
||||||
|
|
||||||
m.def("Face", [](TopoDS_Shape wire) {
|
m.def("Face", [](TopoDS_Wire wire) {
|
||||||
return BRepBuilderAPI_MakeFace(TopoDS::Wire(wire)).Shape();
|
return BRepBuilderAPI_MakeFace(wire).Face();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user