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
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
Jürg Lehni
e07d8f55ea
Add debug logging for intersections again.
2015-08-28 16:18:14 +02:00
Jürg Lehni
4ccb53ac68
Remove note about overlapping paths not working.
...
: D
2015-08-26 18:03:22 +02:00
Jürg Lehni
3ad897c943
Remove all boolean debug code.
...
Keeping it on the boolean-fix branch for now.
2015-08-26 17:47:18 +02:00
Jürg Lehni
da0d01ee09
More work on main boolean code.
...
Start addressing self-intersecting paths, and remove resulting open paths for now.
2015-08-26 17:36:20 +02:00
Jürg Lehni
a099377ac6
Remove debug logging for CurveLocation.
2015-08-26 16:58:52 +02:00
Jürg Lehni
d85b4f0c80
Fix issues with wrong sorting of CurveLocation in Curve.filterIntersections()
2015-08-26 16:56:28 +02:00
Jürg Lehni
fd1f2e56f8
Optimize Item#intersects() by only checking to see if there are at least one intersection.
2015-08-25 11:45:28 +02:00
Jürg Lehni
7ca8ce3cbb
Actually use selfOp argument for self operations.
...
Appears to be working fine.
2015-08-24 21:02:42 +02:00
Jürg Lehni
e242634011
Minor code clean-up.
2015-08-24 12:59:10 +02:00
Jürg Lehni
4be48cec16
A lot more work to correctly support overlapping edge cases in boolean operations: intersect(), exclude(), subtract()
2015-08-24 12:30:14 +02:00
Jürg Lehni
75f669d839
Implement proper method to determine which segment to choose when encountering overlaps.
2015-08-24 04:36:49 +02:00
Jürg Lehni
15bcf2a7aa
More work on supporting overlaps in boolean operations other than unite().
2015-08-23 22:42:57 +02:00
Jürg Lehni
68832e0690
Revert "Switch to using 0, 1 instead of tMin, tMax for tangents."
...
This reverts commit edfabcbbd8
.
; Conflicts:
; src/path/PathItem.Boolean.js
2015-08-23 21:48:16 +02:00
Jürg Lehni
92ec09f451
Some debug code fixes and improvements.
2015-08-23 21:34:41 +02:00
Jürg Lehni
85d21c84b8
Start implementing support for touching and overlapping shapes in boolean operations.
...
Relates to #449 , #450 , #648 , #719
2015-08-23 21:19:19 +02:00
Jürg Lehni
edfabcbbd8
Switch to using 0, 1 instead of tMin, tMax for tangents.
...
getTangentAt() can handle that since a while now.
2015-08-23 09:43:28 +02:00
Jürg Lehni
9bd399b5b8
Introduce Curve#isStraight() and use it in splitPath() and divide() to keep the result of splitting straight curves straight.
...
Do not use Curve#isLinear(), as that would include curves with collinear handles, and we don't want to set these straight.
2015-08-22 22:06:42 +02:00
Jürg Lehni
bddff95fe3
Remove workarounds in splitPath() thanks to improved precision of Numerical.solveCubic().
2015-08-22 14:24:31 +02:00
Jürg Lehni
da82116501
Rework handling of weighted and normalized curve tangents and normals.
...
Relates to #563
2015-08-19 17:15:41 +02:00
Jürg Lehni
08bdfe585b
Fix issue in getWinding() where rays were counted twice.
...
Closes #736 .
2015-08-18 22:36:10 +02:00
Jürg Lehni
f8314f927e
Various changes on #isLinear(), #hasHandles() & co
...
Relates to #652
- Implement #hasHandles() on Path, Segment and Curve
- Remove Path#isPolygon()
- Define #isLinear() consistently across Path, Segment and Curve.
- Introduce new Segment#isStraight()
2015-08-17 14:31:23 +02:00
Jürg Lehni
10fb616665
Fixed leaked globals.
...
Detected using QUnit's "Check for Globals" feature!
2015-07-27 12:36:45 +02:00
Jürg Lehni
c1485e7068
Use < instead of <= when comparing against TOLERANCE
2015-06-16 19:33:21 +02:00
Jürg Lehni
b541088c6f
A whole lot of documentation clean-up.
2015-06-16 17:50:37 +02:00
Jürg Lehni
15813107c0
Remove unused variables.
2015-02-26 13:44:09 +01:00
Jürg Lehni
6562f861ab
More code clean-up.
2015-01-05 00:13:30 +01:00
Jürg Lehni
9977b6ab68
Some code clean-up.
2015-01-05 00:09:34 +01:00
Jürg Lehni
72bd150a34
Fix the rest of the failing tests that 6c6ad76c94
had caused.
...
Also closes #610 .
2015-01-04 23:59:25 +01:00
Jürg Lehni
5f3df1f5a1
Fix some failing tests with PathItem#contains(), introduced by commit 6c6ad76c94
2015-01-04 23:28:39 +01:00
Jürg Lehni
5d875f2d83
Clean up code formatting.
2015-01-04 22:37:27 +01:00
Jürg Lehni
8928eaffd0
Merge branch 'refs/heads/master' into boolean-operations
2015-01-04 22:00:55 +01:00
Jürg Lehni
7e80e19e32
Insert results of boolean operations above the first path.
2015-01-04 21:59:31 +01:00
Jürg Lehni
d522e4aec2
Merge remote-tracking branch 'origin/master' into boolean-operations
...
Conflicts:
src/path/PathItem.Boolean.js
2015-01-04 21:29:50 +01:00
Jürg Lehni
9f0a774fd0
Fix newly introduced error in clean-up.
2015-01-04 18:07:02 +01:00
Jürg Lehni
77193e1465
Clean-up new splitPath() code.
2015-01-04 17:37:15 +01:00
hkrish
718af4527f
Boolean: handle linear segments correctly.
...
Earlier implementation was unfinished and did not reset some handles to
linear, this caused the winding to be miscalculated.
Conflicts:
src/path/PathItem.Boolean.js
2015-01-04 17:30:19 +01:00
Jürg Lehni
afc14b9634
Reduce Numerical.TOLERANCE to 1e-6, and use the same value across the boolean code.
...
Yields very good results now, across all tests.
2015-01-04 15:54:50 +01:00
Jürg Lehni
cca6606f72
Reduce the amount of path reversing required.
...
We don't need paths at clockwise / counter-clockwise orientation. We simply need them oriented the same way, or the opposite way.
2015-01-04 01:51:27 +01:00
Jürg Lehni
390ef324f2
Find a better implementation for exclude() boolean operations, requiring only one pass instead of two.
2015-01-04 01:50:24 +01:00
Jürg Lehni
5c184e381b
Merge remote-tracking branch 'origin/master' into boolean-operations
...
Conflicts:
src/path/PathItem.Boolean.js
2015-01-03 21:09:31 +01:00
Jürg Lehni
b6a4815d03
Remove Curve#isHorizontal() as its implementation and precision is specific to boolean operations.
2015-01-03 21:02:12 +01:00
Jürg Lehni
46d7717812
Use standard values for tMin / tMax when calling getTangentAt() tracePaths()
2015-01-03 20:59:20 +01:00
Jürg Lehni
6bb6002d1a
No need to double tolerances here.
2015-01-03 20:35:51 +01:00
Jürg Lehni
3e67f72393
Some code clean-up.
2015-01-03 20:25:12 +01:00
Jürg Lehni
51ec3325e3
Remove the need to store winding samples in array and sort.
...
Calculating the average winding value instead yields the same results.
2015-01-03 11:25:10 +01:00
Jürg Lehni
26f209c835
Implement better strategy for handling edge cases in winding samples.
2015-01-03 11:24:27 +01:00
Jürg Lehni
80e1a54171
Dirty temporary fix for new median winding code that struggles with circles.
2015-01-03 01:17:48 +01:00
Jürg Lehni
e195db2567
Handle empty paths in Path#reorient()
...
Closes #548
2015-01-03 00:46:24 +01:00
Jürg Lehni
001561decb
Remove the dependency of Math.random() from boolean operation code.
...
Closes #473
2015-01-03 00:32:06 +01:00
Jürg Lehni
bb2fece225
Restructure code that determines median winding contribution.
2015-01-03 00:26:13 +01:00
Jürg Lehni
538eac6dc7
Use smaller tolerances in winding code, to address edge cases.
...
Closes #559
2015-01-02 23:47:26 +01:00
Jürg Lehni
51739e6e27
Merge remote-tracking branch 'origin/master' into solve-cubic
...
Conflicts:
src/path/PathItem.Boolean.js
2015-01-02 21:26:04 +01:00
Jürg Lehni
4ed9ef54f2
Fix bug in Curve.filterIntersections() and clean up code a bit.
2015-01-02 21:19:18 +01:00
Jürg Lehni
878be7962e
Merge branch 'refs/heads/master' into solve-cubic
...
Conflicts:
src/path/Curve.js
src/path/PathItem.Boolean.js
src/util/Numerical.js
2015-01-02 15:33:23 +01:00
Jürg Lehni
b3c7be67fc
Support optional hidden matrix argument in #getIntersections()
...
...in order to provide an alternative matrix for the passed path to check against.
2014-10-20 16:53:49 +02:00
Jürg Lehni
797a393c9a
Remove various double white-spaces.
2014-08-25 12:49:14 +02:00
Jürg Lehni
48cb05a181
Replace tabs with 4 white-spaces.
2014-08-16 19:24:54 +02:00
hkrish
6c6ad76c94
Handle overlapping intercepts in getIntersection,
...
In a more robust way. Restricting ranges in parameter is not a nice way
to handle endpoint intersections.
2014-05-17 13:43:46 +02:00
Jürg Lehni
9d7ec13724
Update prepro.js to version that can evaluate whole expressions, and fix a newly introduced issue with it.
2014-05-14 15:14:03 +02:00
hkrish
e5e2a8d7d4
Revert "Correct boolean condition in getWinding."
...
This reverts commit fcc2e93daf
.
2014-05-13 20:41:48 +02:00
hkrish
fcc2e93daf
Correct boolean condition in getWinding.
...
Also clarify the condition using braces
2014-05-13 20:14:53 +02:00
Jürg Lehni
c64f177583
Simplify linearHandles code changes a bit.
2014-05-08 10:48:22 +01:00
hkrish
1c9d1de380
Boolean: handle linear segments correctly.
...
Earlier implementation was unfinished and did not reset some handles to
linear, this caused the winding to be miscalculated.
2014-05-05 18:46:39 +02:00
Jürg Lehni
19630d6229
Fix spelling mistakes.
2014-04-24 19:34:49 +02:00
Jürg Lehni
9ccba17fbe
Clean up white-space, comments and jshint errors.
2014-04-14 18:29:26 +02:00
Jürg Lehni
60f6eca6c4
Do not keep the view's matrix baked into _globalMatrix, since we might allow multiple views soon.
2014-04-07 17:35:17 +02:00
Jürg Lehni
66b1087d33
Have boolean operation result inherit styles from the left-hand item in the operation.
...
Closes #445 .
2014-04-07 12:18:04 +02:00
Jürg Lehni
f002c633a7
Remove trailing white spaces and ensure newlines at the end.
2014-04-06 13:48:03 +02:00
Jonathan Puckey
01dbfe705c
Fix accidental leaking of variables to the global scope.
...
Found using jscritic.com
2014-03-28 13:46:51 +01:00
Jürg Lehni
e453b90ad2
Remove unused variable.
2014-03-20 17:26:22 +01:00
Jürg Lehni
2a3f0646f0
Fix exception in _getMonoCurves() when path is empty.
...
Closes #427 .
2014-03-17 14:58:40 +01:00
Jürg Lehni
72ba453ba2
Define Path#reorient() and simplify preparePath()
2014-03-17 10:04:09 +01:00
Jürg Lehni
e04946e250
Simplify CompoundPath#reorient() code.
2014-03-17 10:03:49 +01:00
Jürg Lehni
7372c14f0c
Expose reorientPath() functionality as Path#getInteriorPoint() and CompoundPath#reorient()
2014-03-17 09:48:00 +01:00
Jürg Lehni
6d47824a69
Merge remote-tracking branch 'origin/master' into bool-cleanup
...
Conflicts:
src/path/PathItem.Boolean.js
2014-03-16 22:48:08 +01:00
hkrish
b193cf0fe8
More precise handling of islands and holes in reorient path
2014-03-15 16:15:55 +01:00
hkrish
b1fca8d3dc
Merge branch 'master' into bool-cleanup
...
* master: (36 commits)
Avoid dividing with zero while splitting curves
Implement propper support for pointer events and MSPointer events.
Clean up white-space.
WinGums: Some more code clean-up.
WineGum example: Untangle the offset calculation code a bit.
WineGum example: Some more style changes.
Some more simplifications and style changes.
Convert to cleaner OOP style.
Precalculate side points again for better performance.
Optimise WineGums example.
Change title of WineGums example.
Optimise WineGums example.
Add WineGums example by kynd.info.
Fix newly introduced issue in CompoundPath#moveTo() / #lineTo()
Optimize and fix code that draws selections and handles.
Minor clean-up in the way Base.exports are handled.
Better handle Path#moveTo() / #closePath() edge cases in SVG data.
Fix SVG issues with reflected control points in the commands 'SsTt'
Prevent accidental transformation of selection bounds in TextItem.
Fix importPoly() on Node.js
...
2014-03-13 19:32:51 +01:00
Jürg Lehni
3c257dcae0
Merge branch 'refs/heads/master' into apply-matrix
2014-03-13 00:54:05 +01:00
Jürg Lehni
6a58679593
Stick to 80 char line length.
2014-03-12 15:40:22 +01:00
hkrish
066d47dbf7
Avoid dividing with zero while splitting curves
2014-03-12 13:34:43 +01:00
Jürg Lehni
5b49fdf3ff
Merge branch 'refs/heads/master' into apply-matrix
2014-03-04 09:27:55 +01:00
Jürg Lehni
7911d8b42a
Change code sequence in tracePaths() to only calculate tangents and winding values if they are required.
2014-03-02 21:39:54 +01:00
Jürg Lehni
21bd4628f2
Merge branch 'refs/heads/bool-cleanup'
2014-03-02 21:19:47 +01:00
Jürg Lehni
d7be443119
Simplify path filtering code in tracePaths() a bit, and improve documentation.
2014-03-02 21:19:31 +01:00
Jürg Lehni
fb1420eee0
Internalize Item#applyMatrix() code in #transform() and add short-cut method to it in Matrix#apply()
2014-03-02 15:50:45 +01:00
hkrish
cb810c73bd
Fix self-intersection resolution on a single bezier curve
2014-02-28 16:51:28 +01:00
Jürg Lehni
ccfd51a65a
Improve performance of Path constructors and handling of { insert: false } Item creation.
2014-02-26 16:15:51 +01:00
Jürg Lehni
14df7b5d5a
Shorten new edge case code in getWinding() a bit.
2014-02-24 20:29:44 +01:00
hkrish
cac86627be
Correct winding number calculation when horizontal curves are involved.
2014-02-24 19:11:32 +01:00
hkrish
49ddfafe4d
Handle stationary points in #getWinding method.
2014-02-22 18:56:19 +01:00
hkrish
b4d8315484
Reject monotone curves which doesn't contribute to the winding, early.
2014-02-22 18:54:26 +01:00
Jürg Lehni
cf4d72f141
Improve data-structure for monotonic curves.
2014-02-21 10:07:27 +01:00
Jürg Lehni
4973ea9845
Minor clean up in getWinding() code.
2014-02-21 00:40:24 +01:00
Jürg Lehni
5dd26f5b9f
Explain about self-intersection handling in getIntersections()
2014-02-20 20:49:36 +01:00
Jürg Lehni
84e1f208fb
Revert change in d730b75073
...
As highlighted by @hari in the comments.
2014-02-20 20:44:15 +01:00