Skip to content

Commit

Permalink
csg2d - fix tutorial
Browse files Browse the repository at this point in the history
  • Loading branch information
mhochsteger committed Sep 15, 2020
1 parent 10a9dec commit 2763285
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 38 deletions.
31 changes: 27 additions & 4 deletions libsrc/geom2d/csg2d.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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!
IntersectSplineSegment1( p, s.StartPI(), p_mid, lam0, alpha, true );
IntersectSplineSegment1( s, p.StartPI(), s_mid, lam1, beta, true );
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);
Expand Down
55 changes: 21 additions & 34 deletions py_tutorials/csg2d.py
Original file line number Diff line number Diff line change
@@ -1,50 +1,37 @@
from ngsolve import *

from random import random, seed
ngsglobals.msg_level = 0
from ngsolve import Draw, Mesh

import netgen
from pyngcore import *
from netgen.geom2d import *

seed(4)

def GenerateMesh():

g = CSG2d()
g1 = CSG2d()
outer = Rectangle(0, 1, 0, 1,"outer","outer")
inner = Solid2d()
g = CSG2d()
outer = Rectangle((0, 0), (1, 1), "outer","outer")
inner = Solid2d()

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)
inner += circle
outer -= circle
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))
inner += circle
outer -= circle


g.Add(inner)
g.Add(outer)
geo = g.GenerateSplineGeometry()
Draw(geo)
g.Add(inner)
g.Add(outer)
geo = g.GenerateSplineGeometry()

# draw this geometry for checking ff the final mesh/geometry is correct
# g1.Add(outer)
# geo1 = g1.GenerateSplineGeometry()
# Draw(geo1)
m = geo.GenerateMesh(maxh=0.1)

print('generate mesh')
m = geo.GenerateMesh(maxh=0.1)
try:
from ngsolve import Draw, Mesh
Draw(geo)
mesh = Mesh(m)
mesh.Curve(3)
Draw(mesh)

return mesh

from ngsolve import Draw
with PajeTrace():
mesh = GenerateMesh()
except:
pass

0 comments on commit 2763285

Please sign in to comment.