fixed segment bug

This commit is contained in:
zzzzrrr 2009-08-16 15:36:54 -04:00
parent 47eb8c6f6c
commit e0f1c4facd
3 changed files with 28 additions and 4 deletions

View File

@ -87,7 +87,7 @@ class Poly2TriDemo extends BasicGame("Poly2Tri") {
val i18 = "data/i.18" val i18 = "data/i.18"
val tank = "data/tank.dat" val tank = "data/tank.dat"
var currentModel = strange var currentModel = tank
var doCDT = true var doCDT = true
var mouseButton = 0 var mouseButton = 0
@ -173,15 +173,29 @@ class Poly2TriDemo extends BasicGame("Poly2Tri") {
}) })
if(drawCDT) { if(drawCDT) {
val draw = if(drawcdtMesh) slCDT.triangleMesh else slCDT.triangles val draw = if(drawcdtMesh) slCDT.triangleMesh else slCDT.triangles
//val draw = slCDT.testTri
draw.foreach( t => { draw.foreach( t => {
for(i <- 0 to 2) {
val s = t.points(i)
val e = if(i == 2) t.points(0) else t.points(i + 1)
val j = if(i == 0) 2 else if(i == 1) 0 else 1
if(t.edges(j))
g.setColor(yellow)
else
g.setColor(red)
g.drawLine(s.x,s.y,e.x,e.y)
}
/*
val triangle = new Polygon val triangle = new Polygon
triangle.addPoint(t.points(0).x, t.points(0).y) triangle.addPoint(t.points(0).x, t.points(0).y)
triangle.addPoint(t.points(1).x, t.points(1).y) triangle.addPoint(t.points(1).x, t.points(1).y)
triangle.addPoint(t.points(2).x, t.points(2).y) triangle.addPoint(t.points(2).x, t.points(2).y)
g.setColor(red) g.setColor(red)
g.draw(triangle) g.draw(triangle)
*/
}) })
slCDT.debugTriangles.foreach( t => { slCDT.debugTriangles.foreach( t => {

View File

@ -137,7 +137,7 @@ class CDT(val points: List[Point], val segments: List[Segment], iTriangle: Trian
point.edges.foreach(e => edgeEvent(e, node)) point.edges.foreach(e => edgeEvent(e, node))
} catch { } catch {
case e: Exception => case e: Exception =>
//throw new Exception("Suspect point = " + i) throw new Exception("Suspect point = " + i)
} }
} }

View File

@ -58,6 +58,16 @@ class Segment(var p: Point, var q: Point) {
val tmp = p val tmp = p
p = q p = q
q = tmp q = tmp
} else if(p.y == q.y) {
// If y values are equal, make sure point with smaller x value
// is the the left
if(p.x > q.x) {
val tmp = p
p = q
q = tmp
} else if(p.x == q.x) {
throw new Exception("Duplicate point")
}
} }
q.edges += this q.edges += this
} }