split curves on intersections
This commit is contained in:
parent
af2f499412
commit
75884e0d7d
89
src/main.js
89
src/main.js
|
|
@ -644,50 +644,51 @@ class Shape {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
let epsilon = 0.0001
|
let epsilon = 0.01
|
||||||
// let newCurves = []
|
let newCurves = []
|
||||||
// for (let i=0; i<this.curves.length-1; i++) {
|
let intersectMap = {}
|
||||||
// for (let j=i+1; j<this.curves.length; j++) {
|
for (let i=0; i<this.curves.length-1; i++) {
|
||||||
// let intersects = this.curves[i].intersects(this.curves[j])
|
for (let j=i+1; j<this.curves.length; j++) {
|
||||||
// if (intersects.length==0) {
|
let intersects = this.curves[i].intersects(this.curves[j])
|
||||||
// newCurves.push(this.curves[i])
|
console.log(intersects)
|
||||||
// } else {
|
if (intersects.length) {
|
||||||
// intersects.sort().reverse() // with respect to curve 1
|
intersectMap[i] ||= []
|
||||||
// let secondaryIntersects = []
|
intersectMap[j] ||= []
|
||||||
// let remainingFraction = 1
|
for(let intersect of intersects) {
|
||||||
// let remainingCurve = this.curves[i]
|
let [t1, t2] = intersect.split("/")
|
||||||
// let curveBasket = []
|
intersectMap[i].push(parseFloat(t1))
|
||||||
// for (let intersect of intersects) {
|
intersectMap[j].push(parseFloat(t2))
|
||||||
// let [t1, t2] = intersect.split("/")
|
}
|
||||||
// if (t1 > epsilon && t1 < 1-epsilon) {
|
}
|
||||||
// let split = remainingCurve.split(t1 / remainingFraction)
|
}
|
||||||
// remainingFraction = t1
|
}
|
||||||
// curveBasket.push(split.right)
|
for (let lst in intersectMap) {
|
||||||
// remainingCurve = split.left
|
for (let i=1; i<intersectMap[lst].length; i++) {
|
||||||
// }
|
if (Math.abs(intersectMap[lst][i] - intersectMap[lst][i-1]) < epsilon) {
|
||||||
// if (t2 > epsilon && t2 < 1-epsilon) {
|
intersectMap[lst].splice(i,1)
|
||||||
// secondaryIntersects.push(t2)
|
i--
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// curveBasket.reverse()
|
}
|
||||||
// for (let curve of curveBasket) {
|
for (let i=this.curves.length-1; i>=0; i--) {
|
||||||
// newCurves.push(curve)
|
if (i in intersectMap) {
|
||||||
// }
|
intersectMap[i].sort().reverse()
|
||||||
// curveBasket = []
|
let remainingFraction = 1
|
||||||
// secondaryIntersects.sort() // now sorting with respect to curve 2
|
let remainingCurve = this.curves[i]
|
||||||
// remainingFraction = 1
|
for (let t of intersectMap[i]) {
|
||||||
// remainingCurve = this.curves[j]
|
let split = remainingCurve.split(t / remainingFraction)
|
||||||
// for (let t2 of secondaryIntersects) {
|
remainingFraction = t
|
||||||
// let split = remainingCurve.split(t2 / remainingFraction)
|
newCurves.push(split.right)
|
||||||
// remainingFraction = t2
|
remainingCurve = split.left
|
||||||
// curveBasket.push(split.right)
|
}
|
||||||
// remainingCurve = split.left
|
newCurves.push(remainingCurve)
|
||||||
// }
|
|
||||||
// this.curves.splice(j, 1, ...curveBasket)
|
} else {
|
||||||
// }
|
newCurves.push(this.curves[i])
|
||||||
// }
|
}
|
||||||
// }
|
}
|
||||||
// this.curves = newCurves
|
newCurves.reverse()
|
||||||
|
this.curves = newCurves
|
||||||
this.recalculateBoundingBox()
|
this.recalculateBoundingBox()
|
||||||
}
|
}
|
||||||
draw(context) {
|
draw(context) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue