mirror of
https://github.com/NGSolve/netgen.git
synced 2024-12-25 05:20:34 +05:00
Restructure code in GetElementOfPoint
This commit is contained in:
parent
06af8111e8
commit
286f63f002
@ -5609,52 +5609,8 @@ namespace netgen
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (dimension == 2 || (dimension==3 && !GetNE() && GetNSE()))
|
if (dimension == 2 || (dimension==3 && !GetNE() && GetNSE()))
|
||||||
{
|
return GetSurfaceElementOfPoint(p, lami, indices, build_searchtree, allowindex);
|
||||||
int ne;
|
|
||||||
int ps_startelement = 0; // disable global buffering
|
|
||||||
|
|
||||||
if(ps_startelement != 0 && ps_startelement <= GetNSE() && PointContainedIn2DElement(p,lami,ps_startelement))
|
|
||||||
return ps_startelement;
|
|
||||||
|
|
||||||
NgArray<int> locels;
|
|
||||||
if (elementsearchtree || build_searchtree)
|
|
||||||
{
|
|
||||||
// update if necessary:
|
|
||||||
const_cast<Mesh&>(*this).BuildElementSearchTree ();
|
|
||||||
// double tol = elementsearchtree->Tolerance();
|
|
||||||
// netgen::Point<3> pmin = p - Vec<3> (tol, tol, tol);
|
|
||||||
// netgen::Point<3> pmax = p + Vec<3> (tol, tol, tol);
|
|
||||||
elementsearchtree->GetIntersecting (p, p, locels);
|
|
||||||
ne = locels.Size();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ne = GetNSE();
|
|
||||||
|
|
||||||
for (int i = 1; i <= ne; i++)
|
|
||||||
{
|
|
||||||
int ii;
|
|
||||||
|
|
||||||
if (elementsearchtree)
|
|
||||||
ii = locels.Get(i);
|
|
||||||
else
|
|
||||||
ii = i;
|
|
||||||
|
|
||||||
if(ii == ps_startelement) continue;
|
|
||||||
|
|
||||||
if(indices != NULL && indices->Size() > 0)
|
|
||||||
{
|
|
||||||
bool contained = indices->Contains(SurfaceElement(ii).GetIndex());
|
|
||||||
if((allowindex && !contained) || (!allowindex && contained)) continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(PointContainedIn2DElement(p,lami,ii)) return ii;
|
|
||||||
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
|
|
||||||
{
|
|
||||||
int ps_startelement = 0; // disable global buffering
|
int ps_startelement = 0; // disable global buffering
|
||||||
// int i, j;
|
// int i, j;
|
||||||
int ne;
|
int ne;
|
||||||
@ -5723,11 +5679,8 @@ namespace netgen
|
|||||||
return ii;
|
return ii;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -5809,14 +5762,9 @@ namespace netgen
|
|||||||
//(*testout) << "p " << p << endl;
|
//(*testout) << "p " << p << endl;
|
||||||
//(*testout) << "velement " << velement << endl;
|
//(*testout) << "velement " << velement << endl;
|
||||||
|
|
||||||
if (!GetNE() && GetNSE() )
|
// first try to find a volume element containing p and project to face
|
||||||
|
if(velement!=0)
|
||||||
{
|
{
|
||||||
lami[0] = vlam[0];
|
|
||||||
lami[1] = vlam[1];
|
|
||||||
lami[2] = vlam[2];
|
|
||||||
return velement;
|
|
||||||
}
|
|
||||||
|
|
||||||
NgArray<int> faces;
|
NgArray<int> faces;
|
||||||
topology.GetElementFaces(velement,faces);
|
topology.GetElementFaces(velement,faces);
|
||||||
|
|
||||||
@ -5868,17 +5816,44 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
NgArray<int> faces2;
|
// Did't find any matching face of a volume element, search 2d elements directly
|
||||||
topology.GetElementFaces(velement,faces2);
|
int ne;
|
||||||
/*
|
|
||||||
cout << "no matching surf element" << endl
|
NgArray<int> locels;
|
||||||
<< "p = " << p << endl
|
// TODO: build search tree for surface elements
|
||||||
<< "faces-orig = " << faces2 << endl
|
if (!GetNE() && GetNSE() && (elementsearchtree || build_searchtree))
|
||||||
<< "faces = " << faces << endl
|
{
|
||||||
<< ", vol el = " << velement
|
// update if necessary:
|
||||||
<< ", vlam = " << vlam[0] << "," << vlam[1] << "," << vlam[2] << endl;
|
const_cast<Mesh&>(*this).BuildElementSearchTree ();
|
||||||
*/
|
// double tol = elementsearchtree->Tolerance();
|
||||||
|
// netgen::Point<3> pmin = p - Vec<3> (tol, tol, tol);
|
||||||
|
// netgen::Point<3> pmax = p + Vec<3> (tol, tol, tol);
|
||||||
|
elementsearchtree->GetIntersecting (p, p, locels);
|
||||||
|
ne = locels.Size();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ne = GetNSE();
|
||||||
|
|
||||||
|
for (int i = 1; i <= ne; i++)
|
||||||
|
{
|
||||||
|
int ii;
|
||||||
|
|
||||||
|
if (locels.Size())
|
||||||
|
ii = locels.Get(i);
|
||||||
|
else
|
||||||
|
ii = i;
|
||||||
|
|
||||||
|
if(indices != NULL && indices->Size() > 0)
|
||||||
|
{
|
||||||
|
bool contained = indices->Contains(SurfaceElement(ii).GetIndex());
|
||||||
|
if((allowindex && !contained) || (!allowindex && contained)) continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(PointContainedIn2DElement(p,lami,ii)) return ii;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user