mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-25 21:40:33 +05:00
project point without geominfo returns new geominfo
This commit is contained in:
parent
1e3ed047db
commit
6c012675aa
@ -72,11 +72,12 @@ namespace netgen
|
||||
Clean();
|
||||
}
|
||||
|
||||
void CSGeometry :: ProjectPoint(int surfind, Point<3> & p) const
|
||||
PointGeomInfo CSGeometry :: ProjectPoint(int surfind, Point<3> & p) const
|
||||
{
|
||||
Point<3> hp = p;
|
||||
GetSurface(surfind)->Project (hp);
|
||||
p = hp;
|
||||
return PointGeomInfo();
|
||||
}
|
||||
|
||||
bool CSGeometry :: ProjectPointGI(int surfind, Point<3> & p, PointGeomInfo & gi) const
|
||||
|
@ -188,7 +188,7 @@ namespace netgen
|
||||
|
||||
virtual void SaveToMeshFile (ostream & ost) const override;
|
||||
|
||||
void ProjectPoint(INDEX surfind, Point<3> & p) const override;
|
||||
PointGeomInfo ProjectPoint(INDEX surfind, Point<3> & p) const override;
|
||||
bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const override;
|
||||
void ProjectPointEdge(INDEX surfind, INDEX surfind2, Point<3> & p) const override;
|
||||
Vec<3> GetNormal(int surfind, const Point<3> & p) const override;
|
||||
|
@ -95,6 +95,9 @@ namespace netgen
|
||||
mesh.SetLocalH(bounding_box.PMin(), bounding_box.PMax(),
|
||||
mparam.grading);
|
||||
|
||||
// only set meshsize for edges longer than this
|
||||
double mincurvelength = 1e-3 * bounding_box.Diam();
|
||||
|
||||
if(mparam.uselocalh)
|
||||
{
|
||||
double eps = 1e-12 * bounding_box.Diam();
|
||||
@ -108,7 +111,7 @@ namespace netgen
|
||||
const auto & edge = edges[i];
|
||||
auto length = edge->GetLength();
|
||||
// skip very short edges
|
||||
if(length < eps)
|
||||
if(length < mincurvelength)
|
||||
continue;
|
||||
static constexpr int npts = 20;
|
||||
// restrict mesh size based on edge length
|
||||
|
@ -50,7 +50,7 @@ namespace netgen
|
||||
virtual size_t GetNBoundaries() const = 0;
|
||||
virtual Array<unique_ptr<GeometryEdge>> GetBoundary(size_t index) const = 0;
|
||||
virtual string GetName() const { return "default"; }
|
||||
virtual void Project(Point<3>& p) const = 0;
|
||||
virtual PointGeomInfo Project(Point<3>& p) const = 0;
|
||||
// Project point using geo info. Fast if point is close to
|
||||
// parametrization in geo info.
|
||||
virtual bool ProjectPointGI(Point<3>& p, PointGeomInfo& gi) const =0;
|
||||
@ -124,9 +124,9 @@ namespace netgen
|
||||
|
||||
virtual void FinalizeMesh(Mesh& mesh) const {}
|
||||
|
||||
virtual void ProjectPoint (int surfind, Point<3> & p) const
|
||||
virtual PointGeomInfo ProjectPoint (int surfind, Point<3> & p) const
|
||||
{
|
||||
faces[surfind-1]->Project(p);
|
||||
return faces[surfind-1]->Project(p);
|
||||
}
|
||||
|
||||
virtual void ProjectPointEdge (int surfind, int surfind2, Point<3> & p) const
|
||||
|
@ -176,7 +176,7 @@ namespace netgen
|
||||
{
|
||||
locpoint = p1 + (h*plainpoint(0)) * ex + (h* plainpoint(1)) * ey;
|
||||
if (!geo.ProjectPointGI(gi.trignum, locpoint, gi))
|
||||
geo.ProjectPoint(gi.trignum, locpoint);
|
||||
gi = geo.ProjectPoint(gi.trignum, locpoint);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1034,7 +1034,7 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a
|
||||
SetCenter();
|
||||
}
|
||||
|
||||
void OCCGeometry :: ProjectPoint(int surfi, Point<3> & p) const
|
||||
PointGeomInfo OCCGeometry :: ProjectPoint(int surfi, Point<3> & p) const
|
||||
{
|
||||
static int cnt = 0;
|
||||
if (++cnt % 1000 == 0) cout << "Project cnt = " << cnt << endl;
|
||||
@ -1048,9 +1048,12 @@ void STEP_GetEntityName(const TopoDS_Shape & theShape, STEPCAFControl_Reader * a
|
||||
suval.Coord( u, v);
|
||||
pnt = thesurf->Value( u, v );
|
||||
|
||||
|
||||
PointGeomInfo gi;
|
||||
gi.trignum = surfi;
|
||||
gi.u = u;
|
||||
gi.v = v;
|
||||
p = Point<3> (pnt.X(), pnt.Y(), pnt.Z());
|
||||
|
||||
return gi;
|
||||
}
|
||||
|
||||
bool OCCGeometry :: ProjectPointGI(int surfind, Point<3>& p, PointGeomInfo& gi) const
|
||||
|
@ -280,7 +280,7 @@ namespace netgen
|
||||
|
||||
void DoArchive(Archive& ar) override;
|
||||
|
||||
void ProjectPoint(int surfind, Point<3> & p) const override;
|
||||
PointGeomInfo ProjectPoint(int surfind, Point<3> & p) const override;
|
||||
void ProjectPointEdge (int surfind, int surfind2, Point<3> & p) const override;
|
||||
bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const override;
|
||||
Vec<3> GetNormal(int surfind, const Point<3> & p) const override;
|
||||
|
@ -144,7 +144,7 @@ bool STLGeometry :: ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & g
|
||||
return true;
|
||||
}
|
||||
|
||||
void STLGeometry :: ProjectPoint (INDEX surfind, Point<3> & p) const
|
||||
PointGeomInfo STLGeometry :: ProjectPoint (INDEX surfind, Point<3> & p) const
|
||||
{
|
||||
throw Exception("ProjectPoint without PointGeomInfo not implemented");
|
||||
}
|
||||
|
@ -193,7 +193,7 @@ namespace netgen
|
||||
virtual void Save (string filename) const override;
|
||||
|
||||
bool CalcPointGeomInfo(int surfind, PointGeomInfo& gi, const Point<3> & p3) const override;
|
||||
void ProjectPoint(INDEX surfind, Point<3> & p) const override;
|
||||
PointGeomInfo ProjectPoint(INDEX surfind, Point<3> & p) const override;
|
||||
bool ProjectPointGI (int surfind, Point<3> & p, PointGeomInfo & gi) const override;
|
||||
Vec<3> GetNormal(int surfind, const Point<3> & p) const override;
|
||||
Vec<3> GetNormal(int surfind, const Point<3> & p, const PointGeomInfo & gi) const override;
|
||||
|
Loading…
Reference in New Issue
Block a user