mirror of
https://github.com/NGSolve/netgen.git
synced 2025-04-08 22:37:28 +05:00
bug fix in revolution
This commit is contained in:
parent
7feea75c6a
commit
557721fc46
@ -2,7 +2,7 @@
|
|||||||
#include <meshing.hpp>
|
#include <meshing.hpp>
|
||||||
#include <csg.hpp>
|
#include <csg.hpp>
|
||||||
|
|
||||||
#undef DEVELOP
|
// #undef DEVELOP
|
||||||
// #define DEVELOP
|
// #define DEVELOP
|
||||||
|
|
||||||
namespace netgen
|
namespace netgen
|
||||||
@ -887,12 +887,7 @@ namespace netgen
|
|||||||
Array<Segment> & refedges,
|
Array<Segment> & refedges,
|
||||||
Array<bool> & refedgesinv)
|
Array<bool> & refedgesinv)
|
||||||
{
|
{
|
||||||
int j, k, l;
|
|
||||||
int hi;
|
|
||||||
Point<3> hp;
|
|
||||||
Vec<3> t, a1, a2, m, n;
|
|
||||||
Segment seg;
|
Segment seg;
|
||||||
Solid * locsol;
|
|
||||||
Array<int> locsurfind, locsurfind2;
|
Array<int> locsurfind, locsurfind2;
|
||||||
|
|
||||||
Array<int> edges_priority;
|
Array<int> edges_priority;
|
||||||
@ -908,26 +903,31 @@ namespace netgen
|
|||||||
{
|
{
|
||||||
(*testout) << "debug edge !!!" << endl;
|
(*testout) << "debug edge !!!" << endl;
|
||||||
(*testout) << "edgepoints = " << edgepoints << endl;
|
(*testout) << "edgepoints = " << edgepoints << endl;
|
||||||
(*testout) << "s1, s2 = " << s1_rep << " - " << s2_rep << endl;
|
(*testout) << "s1, s2 = " << s1 << " - " << s2 << endl;
|
||||||
|
(*testout) << "s1_rep, s2_rep = " << s1_rep << " - " << s2_rep << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
refedges.SetSize(0);
|
refedges.SetSize(0);
|
||||||
refedgesinv.SetSize(0);
|
refedgesinv.SetSize(0);
|
||||||
hp = Center (edgepoints[0], edgepoints[1]);
|
Point<3> hp = Center (edgepoints[0], edgepoints[1]);
|
||||||
ProjectToEdge (geometry.GetSurface(s1), geometry.GetSurface(s2), hp);
|
ProjectToEdge (geometry.GetSurface(s1), geometry.GetSurface(s2), hp);
|
||||||
|
|
||||||
if (debug)
|
if (debug)
|
||||||
*testout << "hp = " << hp << endl;
|
*testout << "hp = " << hp << endl;
|
||||||
|
|
||||||
|
Vec<3> t, a1, a2;
|
||||||
geometry.GetSurface(s1) -> CalcGradient (hp, a1);
|
geometry.GetSurface(s1) -> CalcGradient (hp, a1);
|
||||||
geometry.GetSurface(s2) -> CalcGradient (hp, a2);
|
geometry.GetSurface(s2) -> CalcGradient (hp, a2);
|
||||||
t = Cross (a1, a2);
|
t = Cross (a1, a2);
|
||||||
t.Normalize();
|
t.Normalize();
|
||||||
if (!pos) t *= -1;
|
if (!pos) t *= -1;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0; i < geometry.GetNTopLevelObjects(); i++)
|
for (int i = 0; i < geometry.GetNTopLevelObjects(); i++)
|
||||||
{
|
{
|
||||||
|
Solid * locsol;
|
||||||
|
|
||||||
if (geometry.GetTopLevelObject(i)->GetLayer() != layer)
|
if (geometry.GetTopLevelObject(i)->GetLayer() != layer)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
@ -967,7 +967,7 @@ namespace netgen
|
|||||||
*/
|
*/
|
||||||
locsurfind.SetSize(1);
|
locsurfind.SetSize(1);
|
||||||
locsurfind[0] = -1;
|
locsurfind[0] = -1;
|
||||||
for (j = 0; j < geometry.GetNSurf(); j++)
|
for (int j = 0; j < geometry.GetNSurf(); j++)
|
||||||
if (geometry.GetSurface(j) == surf)
|
if (geometry.GetSurface(j) == surf)
|
||||||
{
|
{
|
||||||
locsurfind[0] = j;
|
locsurfind[0] = j;
|
||||||
@ -983,7 +983,7 @@ namespace netgen
|
|||||||
(*testout) << "edge of tlo " << i << ", has " << locsurfind.Size() << " faces." << endl;
|
(*testout) << "edge of tlo " << i << ", has " << locsurfind.Size() << " faces." << endl;
|
||||||
|
|
||||||
|
|
||||||
for (j = locsurfind.Size()-1; j >= 0; j--)
|
for (int j = locsurfind.Size()-1; j >= 0; j--)
|
||||||
if (fabs (geometry.GetSurface(locsurfind[j])
|
if (fabs (geometry.GetSurface(locsurfind[j])
|
||||||
->CalcFunctionValue (hp) ) > ideps*size)
|
->CalcFunctionValue (hp) ) > ideps*size)
|
||||||
locsurfind.Delete(j);
|
locsurfind.Delete(j);
|
||||||
@ -993,15 +993,14 @@ namespace netgen
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
for (j = 0; j < locsurfind.Size(); j++)
|
for (int j = 0; j < locsurfind.Size(); j++)
|
||||||
{
|
{
|
||||||
int lsi = locsurfind[j];
|
int lsi = locsurfind[j];
|
||||||
int rlsi = geometry.GetSurfaceClassRepresentant(lsi);
|
int rlsi = geometry.GetSurfaceClassRepresentant(lsi);
|
||||||
|
|
||||||
Vec<3> rn;
|
|
||||||
|
|
||||||
// n is outer normal to solid
|
// n is outer normal to solid
|
||||||
n = geometry.GetSurface(lsi) -> GetNormalVector (hp);
|
Vec<3> n = geometry.GetSurface(lsi) -> GetNormalVector (hp);
|
||||||
if (debug)
|
if (debug)
|
||||||
*testout << "n1 = " << n << endl;
|
*testout << "n1 = " << n << endl;
|
||||||
if (geometry.GetSurface (lsi)->Inverse())
|
if (geometry.GetSurface (lsi)->Inverse())
|
||||||
@ -1016,7 +1015,7 @@ namespace netgen
|
|||||||
}
|
}
|
||||||
|
|
||||||
// rn is normal to class representant
|
// rn is normal to class representant
|
||||||
rn = geometry.GetSurface(rlsi) -> GetNormalVector (hp);
|
Vec<3> rn = geometry.GetSurface(rlsi) -> GetNormalVector (hp);
|
||||||
if (debug)
|
if (debug)
|
||||||
{
|
{
|
||||||
(*testout) << "rn = " << rn << endl;
|
(*testout) << "rn = " << rn << endl;
|
||||||
@ -1028,7 +1027,8 @@ namespace netgen
|
|||||||
bool sameasref = ((n * rn) > 0);
|
bool sameasref = ((n * rn) > 0);
|
||||||
|
|
||||||
//m = Cross (t, rn);
|
//m = Cross (t, rn);
|
||||||
m = Cross (t, n); if(!sameasref) m*=-1.;
|
Vec<3> m = Cross (t, n);
|
||||||
|
if(!sameasref) m*=-1.;
|
||||||
|
|
||||||
m.Normalize();
|
m.Normalize();
|
||||||
|
|
||||||
@ -1050,6 +1050,15 @@ namespace netgen
|
|||||||
locsol -> VectorIn2 (hp, m, -1. * n, eps) == IS_INSIDE);
|
locsol -> VectorIn2 (hp, m, -1. * n, eps) == IS_INSIDE);
|
||||||
pre_ok[1] = (locsol -> VectorIn2 (hp, -1.*m, n, eps) == IS_OUTSIDE &&
|
pre_ok[1] = (locsol -> VectorIn2 (hp, -1.*m, n, eps) == IS_OUTSIDE &&
|
||||||
locsol -> VectorIn2 (hp, -1.*m, -1. * n, eps) == IS_INSIDE);
|
locsol -> VectorIn2 (hp, -1.*m, -1. * n, eps) == IS_INSIDE);
|
||||||
|
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
*testout << "eps = " << eps << endl;
|
||||||
|
*testout << "in,1 = " << locsol -> VectorIn2 (hp, m, n, eps) << endl;
|
||||||
|
*testout << "in,1 = " << locsol -> VectorIn2 (hp, m, -1. * n, eps) << endl;
|
||||||
|
*testout << "in,1 = " << locsol -> VectorIn2 (hp, -1.*m, n, eps) << endl;
|
||||||
|
*testout << "in,1 = " << locsol -> VectorIn2 (hp, -1.*m, -1. * n, eps) << endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
while(pre_ok[0] && pre_ok[1] && eps > 1e-16*size);
|
while(pre_ok[0] && pre_ok[1] && eps > 1e-16*size);
|
||||||
|
|
||||||
@ -1062,7 +1071,7 @@ namespace netgen
|
|||||||
eps = 1e-8*size;
|
eps = 1e-8*size;
|
||||||
|
|
||||||
|
|
||||||
for (k = 1; k <= 2; k ++)
|
for (int k = 1; k <= 2; k ++)
|
||||||
{
|
{
|
||||||
bool edgeinv = (k == 2);
|
bool edgeinv = (k == 2);
|
||||||
|
|
||||||
@ -1107,8 +1116,8 @@ namespace netgen
|
|||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
(*testout) << "is true" << endl;
|
(*testout) << "is true" << endl;
|
||||||
hi = 0;
|
int hi = 0;
|
||||||
for (l = 1; !hi && l <= refedges.Size(); l++)
|
for (int l = 1; !hi && l <= refedges.Size(); l++)
|
||||||
{
|
{
|
||||||
if (refedges.Get(l).si == rlsi && // JS sept 2006
|
if (refedges.Get(l).si == rlsi && // JS sept 2006
|
||||||
// if (refedges.Get(l).si == lsi &&
|
// if (refedges.Get(l).si == lsi &&
|
||||||
@ -1192,7 +1201,7 @@ namespace netgen
|
|||||||
|
|
||||||
for(int i=0; i<refedges.Size()-1; i++)
|
for(int i=0; i<refedges.Size()-1; i++)
|
||||||
{
|
{
|
||||||
for(j=i+1; !todelete.Test(i) && j<refedges.Size(); j++)
|
for(int j=i+1; !todelete.Test(i) && j<refedges.Size(); j++)
|
||||||
{
|
{
|
||||||
if(todelete.Test(j))
|
if(todelete.Test(j))
|
||||||
continue;
|
continue;
|
||||||
|
@ -869,7 +869,7 @@ namespace netgen
|
|||||||
if(ret1 != DOES_INTERSECT)
|
if(ret1 != DOES_INTERSECT)
|
||||||
return ret1;
|
return ret1;
|
||||||
|
|
||||||
return VecInSolid(p,v2,eps);
|
return VecInSolid(p,v1+0.01*v2,eps);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Revolution :: GetNSurfaces() const
|
int Revolution :: GetNSurfaces() const
|
||||||
|
Loading…
x
Reference in New Issue
Block a user