mirror of
https://github.com/jhasse/poly2tri.git
synced 2024-11-05 22:09:52 +01:00
fixed advanding front, constrained edge bug
This commit is contained in:
parent
b67a9b4495
commit
690f0e138c
@ -180,7 +180,7 @@ class Poly2TriDemo extends BasicGame("Poly2Tri") {
|
|||||||
val draw = if(drawcdtMesh) slCDT.triangleMesh else slCDT.triangles
|
val draw = if(drawcdtMesh) slCDT.triangleMesh else slCDT.triangles
|
||||||
|
|
||||||
draw.foreach( t => {
|
draw.foreach( t => {
|
||||||
if(true) {
|
if(false) {
|
||||||
for(i <- 0 to 2) {
|
for(i <- 0 to 2) {
|
||||||
val s = t.points(i)
|
val s = t.points(i)
|
||||||
val e = if(i == 2) t.points(0) else t.points(i + 1)
|
val e = if(i == 2) t.points(0) else t.points(i + 1)
|
||||||
|
@ -93,30 +93,24 @@ class AFront(iTriangle: Triangle) {
|
|||||||
def constrainedEdge(sNode: Node, eNode: Node, T1: ArrayBuffer[Triangle],
|
def constrainedEdge(sNode: Node, eNode: Node, T1: ArrayBuffer[Triangle],
|
||||||
T2: ArrayBuffer[Triangle], edge: Segment) {
|
T2: ArrayBuffer[Triangle], edge: Segment) {
|
||||||
|
|
||||||
var node = sNode
|
var node = sNode.prev
|
||||||
|
|
||||||
val point1 = edge.q
|
val point1 = edge.q
|
||||||
val point2 = edge.p
|
val point2 = edge.p
|
||||||
|
|
||||||
var marked = false
|
|
||||||
|
|
||||||
// Scan the advancing front and update Node triangle pointers
|
// Scan the advancing front and update Node triangle pointers
|
||||||
while(node != null && node != eNode) {
|
while(node != null && node != eNode.next) {
|
||||||
|
|
||||||
T2.foreach(t => {
|
T2.foreach(t => {
|
||||||
if(t.contains(node.point, node.next.point))
|
if(t.contains(node.point, node.next.point))
|
||||||
node.triangle = t
|
node.triangle = t
|
||||||
marked = true
|
|
||||||
})
|
})
|
||||||
|
|
||||||
if(!marked)
|
|
||||||
T1.foreach(t => {
|
T1.foreach(t => {
|
||||||
if(t.contains(node.point, node.next.point))
|
if(t.contains(node.point, node.next.point))
|
||||||
node.triangle = t
|
node.triangle = t
|
||||||
})
|
})
|
||||||
|
|
||||||
node = node.next
|
node = node.next
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def -=(tuple: Tuple3[Node, Node, Triangle]) {
|
def -=(tuple: Tuple3[Node, Node, Triangle]) {
|
||||||
|
@ -139,7 +139,7 @@ class CDT(polyLine: Array[Point], clearPoint: Point) {
|
|||||||
// Implement sweep-line
|
// Implement sweep-line
|
||||||
private def sweep {
|
private def sweep {
|
||||||
|
|
||||||
for(i <- 1 until 36 /*points.size*/) {
|
for(i <- 1 until points.size) {
|
||||||
val point = points(i)
|
val point = points(i)
|
||||||
// Process Point event
|
// Process Point event
|
||||||
val node = pointEvent(point)
|
val node = pointEvent(point)
|
||||||
@ -208,9 +208,7 @@ class CDT(polyLine: Array[Point], clearPoint: Point) {
|
|||||||
tList.foreach(t => {
|
tList.foreach(t => {
|
||||||
t.neighbors.foreach(n => if(n != null && !tList.contains(n)) nTriangles += n)
|
t.neighbors.foreach(n => if(n != null && !tList.contains(n)) nTriangles += n)
|
||||||
mesh.map -= t
|
mesh.map -= t
|
||||||
//mesh.debug += t
|
|
||||||
})
|
})
|
||||||
//nTriangles.foreach(n => mesh.debug += n)
|
|
||||||
|
|
||||||
val lPoints = new ArrayBuffer[Point]
|
val lPoints = new ArrayBuffer[Point]
|
||||||
val rPoints = new ArrayBuffer[Point]
|
val rPoints = new ArrayBuffer[Point]
|
||||||
@ -250,11 +248,8 @@ class CDT(polyLine: Array[Point], clearPoint: Point) {
|
|||||||
val point1 = if(ahead) edge.q else edge.p
|
val point1 = if(ahead) edge.q else edge.p
|
||||||
val point2 = if(ahead) edge.p else edge.q
|
val point2 = if(ahead) edge.p else edge.q
|
||||||
|
|
||||||
val sNode = if(ahead) node else aFront.locate(point1).prev
|
val sNode = if(ahead) node else aFront.locate(point1)
|
||||||
val eNode = aFront.locate(point2).next
|
val eNode = aFront.locate(point2)
|
||||||
|
|
||||||
//mesh.debug += sNode.triangle
|
|
||||||
//mesh.debug += eNode.triangle
|
|
||||||
|
|
||||||
aFront.constrainedEdge(sNode, eNode, T1, T2, edge)
|
aFront.constrainedEdge(sNode, eNode, T1, T2, edge)
|
||||||
|
|
||||||
@ -262,14 +257,8 @@ class CDT(polyLine: Array[Point], clearPoint: Point) {
|
|||||||
T1.last markEdge(point1, point2)
|
T1.last markEdge(point1, point2)
|
||||||
T2.last markEdge(point1, point2)
|
T2.last markEdge(point1, point2)
|
||||||
// Copy constraied edges from old triangles
|
// Copy constraied edges from old triangles
|
||||||
T1.foreach(t => {t.markEdge(tList)/*;mesh.debug += t*/})
|
T1.foreach(t => t.markEdge(tList))
|
||||||
T2.foreach(t => {t.markEdge(tList)/*;mesh.debug += t*/})
|
T2.foreach(t => t.markEdge(tList))
|
||||||
|
|
||||||
var n = sNode
|
|
||||||
while(n != eNode) {
|
|
||||||
mesh.debug += n.triangle
|
|
||||||
n = n.next
|
|
||||||
}
|
|
||||||
|
|
||||||
} else if(firstTriangle == null) {
|
} else if(firstTriangle == null) {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user