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 |
|
Jürg Lehni
|
26e35322a4
|
Some reworking of code and comments.
|
2015-09-06 13:20:57 +02:00 |
|
Jürg Lehni
|
8b67d8a1dc
|
Remove #isStraight() in favor of #hasHandles() and implement #clearHandles()
Relates to #652
|
2015-09-06 12:47:35 +02:00 |
|
Jürg Lehni
|
3fa385ac7c
|
Fix typo in previous commit.
|
2015-09-05 09:56:37 +02:00 |
|
Jürg Lehni
|
af355dc82c
|
Fix false positives in Curve#isLinear() and Segment#isLinear().
|
2015-09-03 09:01:07 +02:00 |
|
Jürg Lehni
|
041c31a88a
|
Prevent variable leackage.
|
2015-09-02 15:54:14 +02:00 |
|
Jürg Lehni
|
b9a07ca538
|
Address code comments by @iconexperience in #762.
|
2015-08-31 22:01:18 +02:00 |
|
Jürg Lehni
|
20222be5c6
|
Minor clean-up in fat-line code.
|
2015-08-30 19:59:13 +02:00 |
|
Jürg Lehni
|
0651eee0c2
|
No more need for special handling of 'subtract' overlaps.
This is now taken care of in the code that handles overlaps itself, and the additional code was causing additional issues.
|
2015-08-30 19:58:32 +02:00 |
|
Jürg Lehni
|
4379e0b0f0
|
Improve boolean debug code.
|
2015-08-30 19:56:17 +02:00 |
|
Jürg Lehni
|
31771aa01d
|
Insert results of boolean operations above whichever of the two paths appear further up in the stack.
|
2015-08-30 14:47:46 +02:00 |
|
Jürg Lehni
|
b4755ea699
|
Deactivate debug logging code.
|
2015-08-30 14:38:18 +02:00 |
|