Propagate maxh to children only in occgeom constructor

Allows resetting maxh to larger values again:

```
from netgen.occ import *
from ngsolve import *

b1 = Box((-1,-1,-1), (1,1,1))

b1.faces.Max(X).maxh = 0.1
b1.faces.Max(X).maxh = 0.2

geo = OCCGeometry(b1)
mesh = Mesh(geo.GenerateMesh(maxh=0.5))
Draw(mesh)
```

Needed for example in meshing app. Before it was not possible to set
maxh to larger value again.
This commit is contained in:
Christopher Lackner 2024-04-26 09:55:53 +02:00
parent eef79e64f2
commit f808a2bb64
3 changed files with 20 additions and 6 deletions

View File

@ -16,6 +16,7 @@ namespace netgen
OCCSolid(TopoDS_Shape dshape) OCCSolid(TopoDS_Shape dshape)
: solid(TopoDS::Solid(dshape)) : solid(TopoDS::Solid(dshape))
{ } { }
TopoDS_Solid& GetShape() { return solid; }
}; };
} }

View File

@ -1261,6 +1261,24 @@ namespace netgen
} }
} }
// Propagate maxh to children
for(auto& solid : solids)
{
auto& shape = static_cast<OCCSolid&>(*solid).GetShape();
if(!OCCGeometry::HaveProperties(shape))
continue;
for(auto& f : GetFaces(shape))
{
auto& face = GetFace(f);
face.properties.maxh = min2(face.properties.maxh,
GetProperties(shape).maxh);
}
}
for(auto& face : faces)
for(auto& edge : face->edges)
edge->properties.maxh = min2(edge->properties.maxh,
face->properties.maxh);
// Add identifications // Add identifications
auto add_identifications = [&](auto & shapes, auto & shape_map) auto add_identifications = [&](auto & shapes, auto & shape_map)
{ {

View File

@ -836,12 +836,7 @@ DLL_HEADER void ExportNgOCCShapes(py::module &m)
}, },
[](TopoDS_Shape& self, double val) [](TopoDS_Shape& self, double val)
{ {
for (auto typ : { TopAbs_SOLID, TopAbs_FACE, TopAbs_EDGE, TopAbs_VERTEX }) OCCGeometry::GetProperties(self).maxh = val;
for (TopExp_Explorer e(self, typ); e.More(); e.Next())
{
auto & maxh = OCCGeometry::GetProperties(e.Current()).maxh;
maxh = min2(val, maxh);
}
}, "maximal mesh-size for shape") }, "maximal mesh-size for shape")
.def_property("hpref", .def_property("hpref",