Jürg Lehni
|
812ac63e60
|
Compare points instead of curve time paramters for better precision and reliability.
|
2015-09-21 10:53:53 -04:00 |
|
Jürg Lehni
|
e36319b71a
|
Give PathItem#getIntersections() a way to filter found intersections right away.
And use it in #getCrossings()
|
2015-09-21 10:41:59 -04:00 |
|
Jürg Lehni
|
f6f42fe09b
|
Improve handling of overlap ambiguity in getIntersection()
Two passes are needed, first strict, then non-strict, to prevent 'better' next candiates over 'worse' ones.
|
2015-09-21 09:44:17 -04:00 |
|
Jürg Lehni
|
19a17b2918
|
Prevent infinite loops through circular references of multiple intersections.
|
2015-09-21 09:43:19 -04:00 |
|
Jürg Lehni
|
40570b3e59
|
Furher improve boolean debug logging and drawing.
|
2015-09-21 09:42:47 -04:00 |
|
Jürg Lehni
|
1ad95c9020
|
Improve CurveLocation.add() to always merge duplicates.
We nee to check neighbors of the found location too.
|
2015-09-21 07:06:41 -04:00 |
|
Jürg Lehni
|
1302df0cb8
|
Fix variable leackage.
|
2015-09-20 23:22:31 +02:00 |
|
Jürg Lehni
|
b68be09c87
|
Fix all accidental non-breaking spaces.
|
2015-09-20 22:39:28 +02:00 |
|
Jürg Lehni
|
530b8b7bc8
|
Handle adjusted overlap winding contribution and operator calls through new isValid() function.
|
2015-09-20 15:50:26 +02:00 |
|
Jürg Lehni
|
738cc4c214
|
Yet another improvement in multiple interseections boolean code.
This appears to be the one. The only remaining failing cases seem to be linked to getting the same intersection twice now!
Relates to #787
|
2015-09-20 15:29:54 +02:00 |
|
Jürg Lehni
|
946157f1b1
|
Add note about usage of _originalWinding.
|
2015-09-20 14:19:14 +02:00 |
|
Jürg Lehni
|
20ed1e007c
|
More fixes in handling of multiple intersection locations.
|
2015-09-20 14:17:23 +02:00 |
|
Jürg Lehni
|
5db9703aff
|
No more need to check for crossings since every intersection is now either an overlap or a crossing.
|
2015-09-20 14:16:47 +02:00 |
|
Jürg Lehni
|
53862233e5
|
Improve debug logging of new multiple intersections code.
|
2015-09-19 22:47:57 +02:00 |
|
Jürg Lehni
|
4df65c1809
|
Various improvements to code that handles multiple intersections in same location.
Relates to #787
|
2015-09-19 19:07:44 +02:00 |
|
Jürg Lehni
|
1d6f552212
|
Prevent endless loop through circular references.
|
2015-09-19 13:42:48 +02:00 |
|
Jürg Lehni
|
2c8634793c
|
First attempt at implementing handling of multiple intersections in the same location.
Relates to #787, works pretty well already for many situations.
|
2015-09-19 13:21:29 +02:00 |
|
Jürg Lehni
|
081de1d12a
|
'exclude' operation needs overlap handling too.
|
2015-09-18 22:29:29 +02:00 |
|
Jürg Lehni
|
a95ba12bc3
|
isCrossing() needs parameter checks on both curves.
|
2015-09-18 22:26:09 +02:00 |
|
Jürg Lehni
|
b5af47a7b1
|
Implement a better approach to calculate Path#clockwise...
...merging code with Path#area.
Closes #788
|
2015-09-18 21:41:54 +02:00 |
|
Jürg Lehni
|
8cf562c57b
|
Revert "Remove special handling of winding contribution on overlaps"
This reverts commit c6a38589e9 .
The special handling seems to be still necessary in some edge cases, e.g. in BooleanOperations.html
|
2015-09-18 21:10:58 +02:00 |
|
Jürg Lehni
|
10eafccd1a
|
Implement 0.75 * handle scaling in curve bounds checks.
|
2015-09-18 21:09:57 +02:00 |
|
Jürg Lehni
|
17dc5eb51a
|
Allow gettings of unstyled bounds on curves without paths.
|
2015-09-18 20:15:18 +02:00 |
|
Jürg Lehni
|
c6a38589e9
|
Remove special handling of winding contribution on overlaps
Looks like the new code handles this correclty now!
|
2015-09-18 18:06:15 +02:00 |
|
Jürg Lehni
|
23443dc8f4
|
Clean up boolean code.
|
2015-09-18 17:51:57 +02:00 |
|
Jürg Lehni
|
66b01973f0
|
Simplify exclusion handling for new boolean code.
|
2015-09-18 17:51:43 +02:00 |
|
Jürg Lehni
|
87687d816b
|
Implement PathItem#resolveCrossings() based on the new #getCrossings() method.
|
2015-09-18 17:51:03 +02:00 |
|
Jürg Lehni
|
c70f8cb3cc
|
Simplify overlap calculations by keeping the original winding value.
|
2015-09-18 17:46:46 +02:00 |
|
Jürg Lehni
|
59a23fdd3f
|
Improve debug logging.
|
2015-09-18 17:33:42 +02:00 |
|
Jürg Lehni
|
73a9989261
|
Fix CurveLocation#isCrossing() for locations in the middle of curves.
|
2015-09-18 17:32:19 +02:00 |
|
Jürg Lehni
|
ae93652b56
|
Clean up getIntersection() methods.
Now that they filter the results on the fly.
|
2015-09-18 17:31:23 +02:00 |
|
Jürg Lehni
|
85311cfb29
|
Improve Path#getArea() and #isClockwise()
|
2015-09-18 17:27:29 +02:00 |
|
Jürg Lehni
|
17356637ac
|
Clean up new CurveLocation code.
|
2015-09-17 10:18:45 +02:00 |
|
Jürg Lehni
|
9c812335e5
|
Curve._filterIntersections() is now without a job.
|
2015-09-17 09:39:22 +02:00 |
|
Jürg Lehni
|
1508b8fc75
|
Improve debug logging.
|
2015-09-17 01:15:41 +02:00 |
|
Jürg Lehni
|
2750c34090
|
Improve the way intersections are sorted and merged.
Use a binary search to determine insertion index and compare with neighbours to eliminate doubles.
|
2015-09-17 01:03:13 +02:00 |
|
Jürg Lehni
|
30f1441c26
|
Various boolean code clean-ups.
|
2015-09-16 18:34:35 +02:00 |
|
Jürg Lehni
|
d0332f843f
|
Renamed Curve#reverse() and Segment#reverse() to #reversed()
Since they don't modify the object. Also introduce new Segment#reverse(), which does.
|
2015-09-16 18:16:48 +02:00 |
|
Jürg Lehni
|
857e27e3a8
|
Fix accidental variable leackage.
|
2015-09-16 18:15:26 +02:00 |
|
Jürg Lehni
|
7061bc0e0a
|
Simplify CurveLocation.sort() code
Relates to #787
|
2015-09-16 10:52:51 +02:00 |
|
Jürg Lehni
|
0980ad3fe9
|
Fix remaining issues with curve location sorting.
Relates to #787
|
2015-09-16 10:44:41 +02:00 |
|
Jürg Lehni
|
f8bd7a2005
|
Improve debug logging and drawing.
And add more descriptive comments to tracePath().
|
2015-09-16 09:52:41 +02:00 |
|
Jürg Lehni
|
197aa4b4cf
|
No need to wrap angles as they're always -PI < a < PI.
|
2015-09-16 02:56:24 +02:00 |
|
Jürg Lehni
|
2026e5571e
|
Some code cleanup and comments in isCrossing().
|
2015-09-16 02:54:25 +02:00 |
|
Jürg Lehni
|
e548391276
|
Use the zero-epsilon when checking beginnings and ends of curves for overlaps.
Relates to #786 and #777
|
2015-09-16 02:33:56 +02:00 |
|
Jürg Lehni
|
8f9549dd12
|
Fix non-breaking spaces.
|
2015-09-16 02:29:17 +02:00 |
|
Jürg Lehni
|
ad276ba46a
|
More improvements in tracePaths()
- Use new isCrossing() check
- Correctly switch crossings in exclusion
|
2015-09-15 19:39:35 +02:00 |
|
Jürg Lehni
|
60a725b527
|
Implement correct CurveLocation#isCrossing() check.
And improve curve caching. Still needs work.
|
2015-09-15 19:38:28 +02:00 |
|
Jürg Lehni
|
3ce7d88347
|
Second attempt at simplifying boolean code.
This time without endless loops.
|
2015-09-15 16:31:05 +02:00 |
|
Jürg Lehni
|
089738478c
|
Bring back boolean exclusion handling to reverted code.
|
2015-09-15 15:03:12 +02:00 |
|
Jürg Lehni
|
7b3f8598f4
|
Make sure all results of boolean operations are styled and inserted in the sample way.
|
2015-09-15 14:11:27 +02:00 |
|
Jürg Lehni
|
e4b4037721
|
Revert "Improve handling of exclude() operations."
This reverts commit e85586d0fe .
|
2015-09-15 13:01:52 +02:00 |
|
Jürg Lehni
|
5e327f7a48
|
Revert "Substantial simplifications in boolean code."
This reverts commit a665175a89 .
|
2015-09-14 15:23:46 +02:00 |
|
Jürg Lehni
|
7aef20ae6b
|
Compare intersection points instead of curve time when deciding to merge.
Use same precision indepenent of curve length.
|
2015-09-14 15:18:44 +02:00 |
|
Jürg Lehni
|
fec479167c
|
Improve debug logging and drawing.
|
2015-09-14 15:16:52 +02:00 |
|
Jürg Lehni
|
a665175a89
|
Substantial simplifications in boolean code.
These were probably made possible thanks to increased precision elsewhere in the lib.
|
2015-09-14 01:20:03 +02:00 |
|
Jürg Lehni
|
e85586d0fe
|
Improve handling of exclude() operations.
Determine wether to switch to other intersection or not based on tangents.
Closes #781 again.
|
2015-09-14 00:51:46 +02:00 |
|
Jürg Lehni
|
b532c9cce2
|
Handle boolean exclusion as a special case.
Switching each time an intersection is encountered.
Closes #781
|
2015-09-13 22:12:04 +02:00 |
|
Jürg Lehni
|
fbb0f3f37d
|
Remove left-over debugging code.
|
2015-09-13 21:50:35 +02:00 |
|
Jürg Lehni
|
b231e9b2a8
|
Accept CompoundPath items as children of CompoundPath items.
Just add their children and remove the parent.
Closes #541
|
2015-09-13 16:06:24 +02:00 |
|
Jürg Lehni
|
e2d2c836e5
|
Some boolean code clean-up.
|
2015-09-13 14:19:56 +02:00 |
|
Jürg Lehni
|
ea2ff5ec28
|
Increase precision in Curve.getParameterOf()
Usually only requires 0-1 more iteration.
|
2015-09-13 13:45:20 +02:00 |
|
Jürg Lehni
|
d84a84c67f
|
Change the way winding contributions are propagated
The new approach preserves segment sequence.
Relates to #777
|
2015-09-13 13:06:01 +02:00 |
|
Jürg Lehni
|
19c9a0e722
|
Use the correct points on curve2 when checking intersections at beginnings and ends.
|
2015-09-13 11:52:17 +02:00 |
|
Jürg Lehni
|
d62caf6faa
|
Introduce CURVETIME_EPSILON, to be used when handling curve time parameters.
Relates to #777
|
2015-09-12 22:55:58 +02:00 |
|
Jürg Lehni
|
4f04dae20f
|
Use the correct GEOMETRIC_EPSILON when matching beginnings and ends of curve in Curve.getParameterOf()
Relates to #777
|
2015-09-12 22:26:16 +02:00 |
|
Jürg Lehni
|
8047f90ccf
|
Switch to using GEOMETRIC_EPSILON in getWinding() code.
|
2015-09-12 22:20:31 +02:00 |
|
Jürg Lehni
|
ef45a5f62c
|
Clean up tMin / tMax uses.
|
2015-09-12 22:14:04 +02:00 |
|
Jürg Lehni
|
a0730756c1
|
Use correct term for curve parameter renormalization.
|
2015-09-12 22:13:18 +02:00 |
|
Jürg Lehni
|
085cdd74a2
|
Use GEOMETRIC_EPSILON when comparing curve start / end points.
Relates to #777
|
2015-09-12 21:56:53 +02:00 |
|
Jürg Lehni
|
2fb203ddd1
|
Adjust notes since we now support boolean operations on self-intersecting Paths items
|
2015-09-12 11:58:17 +02:00 |
|
Jürg Lehni
|
3da921a0b0
|
Improve CompoundPath#reduce() to properly reduce suppaths.
Relates to #779
|
2015-09-12 11:43:41 +02:00 |
|
Jürg Lehni
|
fb5f8c0115
|
Introduce GEOMETRIC_EPSILON, for isOrthogonal(), isCollinear() and overlap checks.
Relates to #777
|
2015-09-12 10:35:47 +02:00 |
|
Jürg Lehni
|
cdd0cee623
|
Activate resolving of self-intersections in boolean code.
Relates to #779
|
2015-09-12 10:24:19 +02:00 |
|
Jürg Lehni
|
35f3ac87bf
|
Change checks for startConnected / endConnected to support compound-paths.
Closes #778
|
2015-09-12 10:12:17 +02:00 |
|
Jürg Lehni
|
86f404123e
|
Minor code tweaks.
|
2015-09-11 12:07:27 +02:00 |
|
Jürg Lehni
|
c69ea345da
|
Correctly handle self-intersections when deciding to switch segments.
Closes #765
|
2015-09-10 05:21:47 +02:00 |
|
Jürg Lehni
|
4770cfe2f8
|
Minor intersection refactoring clean up.
|
2015-09-10 05:18:56 +02:00 |
|
Jürg Lehni
|
04452730dd
|
Simplify CurveLocation data structures.
Directly creating and linking intersections simplifies things a lot.
|
2015-09-09 17:17:49 +02:00 |
|
Jürg Lehni
|
78e0bae6aa
|
Activate code that handles self-intersection directly now.
Relates to #765, #761
|
2015-09-09 08:24:02 +02:00 |
|
Jürg Lehni
|
abf70378fe
|
Some more code fixes.
One was breaking unit tests.
|
2015-09-09 08:15:43 +02:00 |
|
Jürg Lehni
|
155442e706
|
Increase readability of convex-hull check in self-intersection code.
|
2015-09-09 08:12:03 +02:00 |
|
Jürg Lehni
|
70f8f1912f
|
Some code clean-up.
|
2015-09-09 08:06:59 +02:00 |
|
Jürg Lehni
|
332b09c534
|
More curve interesection optimizations.
Only evaluate points if locations are actually added.
|
2015-09-09 07:46:48 +02:00 |
|
Jürg Lehni
|
dae8bb630b
|
Avoid checking curves if completely out of control bounds.
This leads to a huge speed increase! Relates to #765
|
2015-09-09 07:34:28 +02:00 |
|
Jürg Lehni
|
1c1e19614e
|
Avoid matching connected start- and end points when self-intersecting curves.
Partial fix for #765.
|
2015-09-09 07:28:08 +02:00 |
|
Jürg Lehni
|
3f53aa78ce
|
Do not access curve objects for geometry since they might be subdivided.
Partial fix for #765
|
2015-09-09 07:26:39 +02:00 |
|
Jürg Lehni
|
b96036fb03
|
Fix strange curve check.
Something went wrong in prior refactoring here. Also, no need to check curve beginnings and ends again, just handles.
|
2015-09-09 06:25:37 +02:00 |
|
Jürg Lehni
|
98d7703b5c
|
Finish implementing Curve#isStraight and #isLinear()
Closes #652
|
2015-09-06 18:02:15 +02:00 |
|
Jürg Lehni
|
31d9e1cd6e
|
Implement Curve#isLinear() to check for parametrical linearity.
Along with some unit tests for it.
|
2015-09-06 17:56:12 +02:00 |
|
Jürg Lehni
|
9d12a0a82c
|
Rename Curve#isLinear() to #isStraight()
Relates to #652
|
2015-09-06 17:35:27 +02:00 |
|
Jürg Lehni
|
9dab662a1f
|
Clean-up various Segment and Curve tests.
Moving functionality back to Path#toShape() since it was too specific, and missleading as part of the exposed Segment API.
|
2015-09-06 17:27:33 +02:00 |
|
Jürg Lehni
|
71a7cc37e6
|
Many documentation clean-ups.
|
2015-09-06 17:20:01 +02:00 |
|
Jürg Lehni
|
b52d343527
|
Use same notation for all injection scopes.
|
2015-09-06 16:48:23 +02:00 |
|
Jürg Lehni
|
cf813faa75
|
Remove all mention of points and square points as units.
And some other doc clean-ups.
|
2015-09-06 16:37:10 +02:00 |
|
Jürg Lehni
|
dd1f5ba3d1
|
Remove Path#isLinear() and use Path#getArea() instaed in boolean code.
|
2015-09-06 16:35:15 +02:00 |
|
Jürg Lehni
|
3d89cd71bd
|
Some clean-up work on documentation.
|
2015-09-06 15:54:11 +02:00 |
|
Jürg Lehni
|
fa9eb8be99
|
Merge remote-tracking branch 'origin/develop' into boolean-fix
; Conflicts:
; src/path/PathItem.Boolean.js
|
2015-09-06 15:36:40 +02:00 |
|
Jürg Lehni
|
66717868cd
|
Address failing #isLinear() tests.
|
2015-09-06 14:10:15 +02:00 |
|
Jürg Lehni
|
d7fb5cd512
|
Do not reduce linear curves with handles defined.
|
2015-09-06 13:21:08 +02:00 |
|