mirror of
https://github.com/NGSolve/netgen.git
synced 2024-11-11 16:49:16 +05:00
csg2d - fix tutorial
This commit is contained in:
parent
10a9decfd2
commit
2763285b46
@ -345,12 +345,35 @@ bool IsOverlapping( Spline p, Spline s, double & alpha, double & beta, Intersect
|
||||
// Check if s.p0 lies on p and vice versa, also check if tangents are in same direction (TODO: TEST)
|
||||
// If so, assume overlapping splines
|
||||
// TODO: Better checks! False positives could happen here!
|
||||
if(Dist(s.StartPI(), p.StartPI())<EPSILON)
|
||||
{
|
||||
lam0 = 0.0;
|
||||
alpha = 0.0;
|
||||
}
|
||||
else if(Dist(s.StartPI(), p.EndPI())<EPSILON)
|
||||
{
|
||||
lam0 = 0.0;
|
||||
alpha = 1.0;
|
||||
}
|
||||
else
|
||||
IntersectSplineSegment1( p, s.StartPI(), p_mid, lam0, alpha, true );
|
||||
|
||||
if(Dist(p.StartPI(), s.StartPI())<EPSILON)
|
||||
{
|
||||
lam1 = 0.0;
|
||||
beta = 0.0;
|
||||
}
|
||||
else if(Dist(p.StartPI(), s.EndPI())<EPSILON)
|
||||
{
|
||||
lam1 = 0.0;
|
||||
beta = 1.0;
|
||||
}
|
||||
else
|
||||
IntersectSplineSegment1( s, p.StartPI(), s_mid, lam1, beta, true );
|
||||
|
||||
// Also check if midpoints lie on other spline
|
||||
IntersectSplineSegment1( p, s.GetPoint(0.5), p_mid, lam2, alpha_mid, true );
|
||||
IntersectSplineSegment1( s, p.GetPoint(0.5), s_mid, lam3, beta_mid, true );
|
||||
IntersectSplineSegment1( p, s.GetPoint(0.4), p_mid, lam2, alpha_mid, true );
|
||||
IntersectSplineSegment1( s, p.GetPoint(0.4), s_mid, lam3, beta_mid, true );
|
||||
|
||||
auto tang0 = s.GetTangent(0.);
|
||||
auto tang1 = p.GetTangent(alpha);
|
||||
|
@ -1,7 +1,5 @@
|
||||
from ngsolve import *
|
||||
|
||||
from random import random, seed
|
||||
ngsglobals.msg_level = 0
|
||||
from ngsolve import Draw, Mesh
|
||||
|
||||
import netgen
|
||||
from pyngcore import *
|
||||
@ -9,42 +7,31 @@ from netgen.geom2d import *
|
||||
|
||||
seed(4)
|
||||
|
||||
def GenerateMesh():
|
||||
g = CSG2d()
|
||||
outer = Rectangle((0, 0), (1, 1), "outer","outer")
|
||||
inner = Solid2d()
|
||||
|
||||
g = CSG2d()
|
||||
g1 = CSG2d()
|
||||
outer = Rectangle(0, 1, 0, 1,"outer","outer")
|
||||
inner = Solid2d()
|
||||
|
||||
for i in range(30):
|
||||
for i in range(30):
|
||||
cx = random()
|
||||
cy = random()
|
||||
r = 0.03+0.05*random()
|
||||
print("Add Circle", i, cx, cy, r, flush = True)
|
||||
circle = Circle(cx, cy, r, "circle"+str(i), "circle"+str(i))
|
||||
g1.Add(circle)
|
||||
circle = Circle((cx, cy), r, "circle"+str(i), "circle"+str(i))
|
||||
inner += circle
|
||||
outer -= circle
|
||||
|
||||
|
||||
g.Add(inner)
|
||||
g.Add(outer)
|
||||
geo = g.GenerateSplineGeometry()
|
||||
g.Add(inner)
|
||||
g.Add(outer)
|
||||
geo = g.GenerateSplineGeometry()
|
||||
|
||||
m = geo.GenerateMesh(maxh=0.1)
|
||||
|
||||
try:
|
||||
from ngsolve import Draw, Mesh
|
||||
Draw(geo)
|
||||
|
||||
# draw this geometry for checking ff the final mesh/geometry is correct
|
||||
# g1.Add(outer)
|
||||
# geo1 = g1.GenerateSplineGeometry()
|
||||
# Draw(geo1)
|
||||
|
||||
print('generate mesh')
|
||||
m = geo.GenerateMesh(maxh=0.1)
|
||||
mesh = Mesh(m)
|
||||
mesh.Curve(3)
|
||||
Draw(mesh)
|
||||
|
||||
return mesh
|
||||
|
||||
from ngsolve import Draw
|
||||
with PajeTrace():
|
||||
mesh = GenerateMesh()
|
||||
except:
|
||||
pass
|
||||
|
Loading…
Reference in New Issue
Block a user