From 1818ffd15206c2f7ee32ac41b7fb0e8e1d4c86cd Mon Sep 17 00:00:00 2001 From: "mhochsteger@cerbsim.com" Date: Mon, 29 Nov 2021 16:01:55 +0100 Subject: [PATCH] occ - fix meshing in parameter space, fix edge curve parameters --- libsrc/meshing/basegeom.cpp | 13 ++++++++----- libsrc/occ/occ_face.cpp | 8 +++----- libsrc/occ/occgenmesh.cpp | 1 - libsrc/occ/occgeom.cpp | 4 ++-- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/libsrc/meshing/basegeom.cpp b/libsrc/meshing/basegeom.cpp index e8a2e352..5da279b0 100644 --- a/libsrc/meshing/basegeom.cpp +++ b/libsrc/meshing/basegeom.cpp @@ -478,7 +478,7 @@ namespace netgen if(edge->primary == edge) { - DivideEdge(edge, mparam, mesh, edge_points, edge_params); + DivideEdge(edge, mparam, mesh, edge_points, params); } else { @@ -505,22 +505,25 @@ namespace netgen swap(edge_points[i], edge_points[np-3-i]); swap(edge_params[i], edge_params[np-3-i]); } + + params.SetSize(edge_params.Size()+2); + params[0] = 0.; + params.Last() = 1.; + + for(auto i : Range(edge_params)) + params[i+1] = edge_params[i]; } pnums.SetSize(edge_points.Size() + 2); pnums[0] = startp; pnums.Last() = endp; - params.SetSize(edge_points.Size()+2); - params[0] = 0.; - params.Last() = 1.; for(auto i : Range(edge_points)) { auto pi = mesh.AddPoint(edge_points[i]); tree.Insert(mesh[pi], pi); pnums[i+1] = pi; - params[i+1] = edge_params[i]; } for(auto i : Range(pnums.Size()-1)) diff --git a/libsrc/occ/occ_face.cpp b/libsrc/occ/occ_face.cpp index 6988808d..99fe0717 100644 --- a/libsrc/occ/occ_face.cpp +++ b/libsrc/occ/occ_face.cpp @@ -102,14 +102,12 @@ namespace netgen double s0, s1; auto cof = BRep_Tool::CurveOnSurface (edge, face, s0, s1); - for(auto i : Range(2)) - { - Point<3> p = mesh[seg[i]]; - gedge.ProjectPoint(p, &seg.epgeominfo[i]); - } double s[2] = { seg.epgeominfo[0].dist, seg.epgeominfo[1].dist }; // fixes normal-vector roundoff problem when endpoint is cone-tip + s[0] = s0 + s[0]*(s1-s0); + s[1] = s0 + s[1]*(s1-s0); + double delta = s[1]-s[0]; s[0] += 1e-10*delta; s[1] -= 1e-10*delta; diff --git a/libsrc/occ/occgenmesh.cpp b/libsrc/occ/occgenmesh.cpp index 6f87e389..65eaba39 100644 --- a/libsrc/occ/occgenmesh.cpp +++ b/libsrc/occ/occgenmesh.cpp @@ -443,7 +443,6 @@ namespace netgen res = MESHING2_GIVEUP; } - projecttype = PARAMETERSPACE; static Timer t1("rest of loop"); RegionTimer reg1(t1); bool meshing_failed = res != MESHING2_OK; diff --git a/libsrc/occ/occgeom.cpp b/libsrc/occ/occgeom.cpp index 3b5131e9..07c671a3 100644 --- a/libsrc/occ/occgeom.cpp +++ b/libsrc/occ/occgeom.cpp @@ -198,9 +198,9 @@ namespace netgen bool OCCGeometry :: MeshFace(Mesh& mesh, const MeshingParameters& mparam, int nr, FlatArray glob2loc) const { - bool failed = OCCMeshFace(*this, mesh, glob2loc, mparam, nr, PLANESPACE, true); + bool failed = OCCMeshFace(*this, mesh, glob2loc, mparam, nr, PARAMETERSPACE, true); if(failed) - failed = OCCMeshFace(*this, mesh, glob2loc, mparam, nr, PARAMETERSPACE, false); + failed = OCCMeshFace(*this, mesh, glob2loc, mparam, nr, PLANESPACE, false); if(failed) {