From 2520569cc7ca28d2b7fa748222d0e08629ed1183 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 12 Sep 2020 19:34:41 +0200 Subject: [PATCH] fixes #0004426: [skip ci] Patch to add MinLength and MaxLenght to the Netgen options in the Python API (provided by thomasFreeCAD) --- src/Mod/MeshPart/App/AppMeshPartPy.cpp | 17 ++++++++++------- src/Mod/MeshPart/App/Mesher.cpp | 5 +++++ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/Mod/MeshPart/App/AppMeshPartPy.cpp b/src/Mod/MeshPart/App/AppMeshPartPy.cpp index 9666c5bc09..07463bca91 100644 --- a/src/Mod/MeshPart/App/AppMeshPartPy.cpp +++ b/src/Mod/MeshPart/App/AppMeshPartPy.cpp @@ -116,7 +116,7 @@ public: "currently):\n" "\n" " meshFromShape(Shape, Fineness, SecondOrder=0,\n" - " Optimize=1, AllowQuad=0)\n" + " Optimize=1, AllowQuad=0, MaxLength=0, MinLength=0)\n" " meshFromShape(Shape, GrowthRate=0, SegPerEdge=0,\n" " SegPerRadius=0, SecondOrder=0, Optimize=1,\n" " AllowQuad=0)\n" @@ -576,28 +576,30 @@ private: } #if defined (HAVE_NETGEN) - static char* kwds_fineness[] = {"Shape", "Fineness", "SecondOrder", "Optimize", "AllowQuad",NULL}; + static char* kwds_fineness[] = {"Shape", "Fineness", "SecondOrder", "Optimize", "AllowQuad", "MinLength", "MaxLength", NULL}; PyErr_Clear(); int fineness=0, secondOrder=0, optimize=1, allowquad=0; - if (PyArg_ParseTupleAndKeywords(args.ptr(), kwds.ptr(), "O!i|iii", kwds_fineness, + if (PyArg_ParseTupleAndKeywords(args.ptr(), kwds.ptr(), "O!i|iiidd", kwds_fineness, &(Part::TopoShapePy::Type), &shape, &fineness, - &secondOrder, &optimize, &allowquad)) { + &secondOrder, &optimize, &allowquad, &minLen, &maxLen)) { MeshPart::Mesher mesher(static_cast(shape)->getTopoShapePtr()->getShape()); mesher.setMethod(MeshPart::Mesher::Netgen); mesher.setFineness(fineness); mesher.setSecondOrder(secondOrder != 0); mesher.setOptimize(optimize != 0); mesher.setQuadAllowed(allowquad != 0); + mesher.setMinMaxLengths(minLen, maxLen); return Py::asObject(new Mesh::MeshPy(mesher.createMesh())); } - static char* kwds_user[] = {"Shape", "GrowthRate", "SegPerEdge", "SegPerRadius", "SecondOrder", "Optimize", "AllowQuad",NULL}; + static char* kwds_user[] = {"Shape", "GrowthRate", "SegPerEdge", "SegPerRadius", "SecondOrder", + "Optimize", "AllowQuad", "MinLength", "MaxLength", NULL }; PyErr_Clear(); double growthRate=0, nbSegPerEdge=0, nbSegPerRadius=0; - if (PyArg_ParseTupleAndKeywords(args.ptr(), kwds.ptr(), "O!|dddiii", kwds_user, + if (PyArg_ParseTupleAndKeywords(args.ptr(), kwds.ptr(), "O!|dddiiidd", kwds_user, &(Part::TopoShapePy::Type), &shape, &growthRate, &nbSegPerEdge, &nbSegPerRadius, - &secondOrder, &optimize, &allowquad)) { + &secondOrder, &optimize, &allowquad, &minLen, &maxLen)) { MeshPart::Mesher mesher(static_cast(shape)->getTopoShapePtr()->getShape()); mesher.setMethod(MeshPart::Mesher::Netgen); mesher.setGrowthRate(growthRate); @@ -606,6 +608,7 @@ private: mesher.setSecondOrder(secondOrder != 0); mesher.setOptimize(optimize != 0); mesher.setQuadAllowed(allowquad != 0); + mesher.setMinMaxLengths(minLen, maxLen); return Py::asObject(new Mesh::MeshPy(mesher.createMesh())); } #endif diff --git a/src/Mod/MeshPart/App/Mesher.cpp b/src/Mod/MeshPart/App/Mesher.cpp index b83d22d48b..02d40dfccb 100644 --- a/src/Mod/MeshPart/App/Mesher.cpp +++ b/src/Mod/MeshPart/App/Mesher.cpp @@ -357,6 +357,11 @@ Mesh::MeshObject* Mesher::createMesh() const hyp2d->SetNbSegPerRadius(nbSegPerRadius); } + if (maxLen > 0) + hyp2d->SetMaxSize(maxLen); + if (minLen > 0) + hyp2d->SetMinSize(maxLen); + hyp2d->SetQuadAllowed(allowquad); hyp2d->SetOptimize(optimize); hyp2d->SetSecondOrder(secondOrder); // apply bisecting to create four triangles out of one