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)
: 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
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)
{
for (auto typ : { TopAbs_SOLID, TopAbs_FACE, TopAbs_EDGE, TopAbs_VERTEX })
for (TopExp_Explorer e(self, typ); e.More(); e.Next())
{
auto & maxh = OCCGeometry::GetProperties(e.Current()).maxh;
maxh = min2(val, maxh);
}
OCCGeometry::GetProperties(self).maxh = val;
}, "maximal mesh-size for shape")
.def_property("hpref",