Commit Graph

295 Commits (v1.6.0)

Author SHA1 Message Date
Sebastian Kuzminsky 929202aa62
Cache arc length (#82)
* add Arc.__hash__()

This function returns a hash of the Arc parameters, providing a kind of
Arc object fingerprint.

* Arc: cache segment length

Computing the length of an Arc segment takes a relatively long time.

This commit teaches the Arc class to remember its segment length,
to avoid recomputing it.  It invalidates the cache and recomputes the
segment length if any of the Arc parameters have changed.
2020-06-19 18:45:56 -07:00
taoari c7b6c030a6
relative path support (#81)
* relative path support

* add test for path.d(rel=True)

* add path test to test_path.py
2020-06-19 18:43:29 -07:00
Sebastian Kuzminsky 8457dc01ee
fix Arc.sweep when transform scale flips it around (#112)
Fixes #111.
2020-06-19 18:29:36 -07:00
skef fd7348a1df Fix tuple assignment (#86) 2019-01-07 21:24:35 -08:00
Andy ae42197d10 fixed path area (issue #74) 2018-12-03 22:27:59 -08:00
Sumeet P b4e211fd79 cx and cy to be 0 for circle/ellipse by default (#78)
When cx and cy attributes are not defined either in ellipse or circle tag, consider both to be 0.
2018-11-13 15:43:09 -08:00
Andy Port 58d48029ac fixed bug in new Arc-friendly Path.area() method 2018-11-04 22:22:20 -08:00
Sebastian Kuzminsky b37e74f5f3 Update Path.area to work with Arc segments (#65)
* add some tests of Path.area()

These tests currently fail because area() doesn't deal with Arc segments.
Fix in the following commit.

* make Path.area() approximate arcs

Fixes #37.

* Path.area(): fixup tabs/spaces for python3

* added asin to imports

* added asin to imports

* minor improvements to style, performance, and docstring
2018-11-04 21:40:56 -08:00
tatarize e91a35c3da Basic Svg_Io_Sax (#66)
* Basic Svg_Io_Sax

* Update to binary write

* Fixed SaxSvg Load, tweaked test.

* Couple tweaks.

* Couple tweaks to fit the dom parser api better

* Switch to iterparse for speed

* Used None matrix for identity in default case.

* Test Update for None Matrix
2018-11-04 21:07:40 -08:00
Sebastian Kuzminsky 2feb3c92b5 Arc line intersect, 3rd try (#64)
* add Line.point_to_t() and tests

These tests don't print anything while they run, and they use use the
assert() helpers from the unittest module.

* add Arc.point_to_t() and tests

These tests don't print anything while they run, and they use use the
assert() helpers from the unittest module.

* add a bunch of failing arc/line intersection tests

This commit contains a bunch of failing arc/line intersections that I
and other people have run into.

These tests don't print anything while they run, and they use use the
assert() helpers from the unittest module where possible.

All these tests are fixed in the following commit.

* better implementation of Arc.intersect(Line)

Fixes mathandy/svgpathtools#35.

This commit fixes all the arc/line intersection test cases added in the
previous commit.

This implementation provides special handling in Arc.intersect() when
`self` is a non-rotated Arc and `other_seg` is a Line.  In this case
it uses the straight-forward closed-form solution to identify the
intersection points.

Rotated Arcs and Arcs intersecting with non-Line objects still use
the pre-existing intersection code, that part is totally untouched by
this commit.
2018-11-04 20:55:17 -08:00
Andy Port d810653b63
minor improvements 2018-11-02 16:42:11 -07:00
Andy Port 9e218b2b3b
minor wording change 2018-11-02 16:19:39 -07:00
Andy Port 74a881a181
Added paths2Drawing 2018-10-18 21:28:34 -07:00
Andy Port a86be9d306
added paths2Drawing functionality 2018-10-18 21:27:04 -07:00
Andy Port ee8eda5aae now `dimensions` parameter supports units will specify `viewbox` if not given 2018-10-13 22:22:52 -07:00
Andy Port aa03a4aecb now parameter supports units will specify if not given 2018-10-13 21:40:35 -07:00
Andy Port 95179a6bfa fixed issue with parameter being ignored 2018-10-13 20:36:01 -07:00
Andy Port 7fa103e533 Fixed issue with viewbox being written as tuple 2018-10-13 19:50:33 -07:00
Andy f77f94db5b added SciPy to Travis CI environment 2018-08-22 20:21:09 -07:00
Andy Port 165372562e
Revert "Arc line intersect, take 2 (#60)" (#63)
This reverts commit 2da39e4c02.
2018-08-22 00:27:55 -07:00
Sebastian Kuzminsky 2da39e4c02 Arc line intersect, take 2 (#60)
* add Line.point_to_t() and tests

* add Arc.point_to_t() and tests

* add a bunch of failing arc/line intersection tests

This commit contains a bunch of failing arc/line intersections that I
and other people have run into.

All these tests are fixed in the following commit.

* better implementation of Arc.intersect(Line)

Fixes mathandy/svgpathtools#35.

This commit fixes all the arc/line intersection test cases added in the
previous commit.

This implementation provides special handling in Arc.intersect() when
`self` is a non-rotated Arc and `other_seg` is a Line.  In this case
it uses the straight-forward closed-form solution to identify the
intersection points.

Rotated Arcs and Arcs intersecting with non-Line objects still use
the pre-existing intersection code, that part is totally untouched by
this commit.
2018-08-22 00:19:05 -07:00
Andy Port 4bc146fd62 save() now requires filename 2018-08-21 21:27:29 -07:00
Andy Port 0955278f73 aesthetic cleanup 2018-08-21 21:10:27 -07:00
Andy Port 7ebc56a831 aesthetic cleanup 2018-08-21 20:54:02 -07:00
Andy Port b1dfc9e8f7 removed future dependency 2018-08-21 20:09:29 -07:00
Andy Port ee5ab1813b updated for python3 compatibility 2018-08-21 20:07:53 -07:00
Andy Port 40a515ee63 removed all np.matrix uses (deprecation) 2018-08-21 20:05:59 -07:00
Andy Port 3d1a225503 removed future dependencies 2018-08-21 19:39:25 -07:00
Michael X. Grey 360d6b224c Flattening SVG groups and handling transforms (#55)
* Some progress (and added CONTRIBUTING.md)

* fixed documentation line-width to be PEP 8 compliant

* fixed documentation line-width to be PEP 8 compliant

* style changes

* made some design changes

* Make the Document class available when importing the library

* Add a method to parse transform strings

* Iterate on the implementation of the Document class

* Tweaks to transform parsing implementation

* Implementing a depth-first flattening of groups

* Finish implementation of flatten_paths

* Beginning to write tests for groups

* Refactoring flatten_paths() into flatten_all_paths()

* Clean up implementation of document classes

* Debugging xml namespace behavior -- needs improvement

* Improve the way the svg namespace is handled

* Print out some paths to see that they're sane

* Fix multiplication of numpy matrices -- need to use .dot() instead of operator*

* Create a unit test for parsing SVG groups

* Return a reference to an element instead of a copied dictionary of attributes

* Add a test for <path> elements that contain a 'transform' attribute

* minor docstring improvements

* got rid of svg2path changes (reverted to master)

* updated to match master

* Remove accidental paranthesis

* Remove unnecessary import

* Use a default width and height of 0, as dictated by SVG specs, in case width or height is missing

* Expose the CONVERSIONS and CONVERT_ONLY_PATHS constants

* Fix the use of some numpy operations

* Remove untested functions

* Fix add_group() and write tests for adding groups and paths

* Update documentation of document module

* Add tests for parsing transforms

* Update the module name for svg_to_paths

* Improve Python3 compatibility

* Try to improve compatibility

* More tweaks for compatibility
2018-08-21 18:00:29 -07:00
Andy ccc9ee6ae1 added clipping to work around floating point error in Arc._parameterize() 2018-07-24 15:07:02 -07:00
Andy b47345da91 added clipping to work around floating point error in Arc._parameterize() 2018-07-24 14:57:54 -07:00
Andy be946b8d92 removed 2018-07-24 14:35:39 -07:00
Andy 2b1670460e removed build & eggs-info from git repo 2018-07-24 14:34:28 -07:00
Andy 7fc7e45113 fixed false error raised when scipy not installed 2018-07-09 21:40:00 -04:00
Andy 8d5023939e updated for new PyPI release 2018-07-06 23:04:23 -04:00
Andy fb916596e2 fixed scale 2018-07-06 23:00:25 -04:00
Andy fd521748fa fixed scaled (before cleanup) 2018-07-06 22:59:28 -04:00
Andy 2cb56c50c5 added .travis.yml 2018-06-10 14:57:24 -07:00
Andy 31a8d2ac11 rgb2hex now allows lists as input 2018-06-10 14:41:27 -07:00
Andy 850055fa57 fixed bez2poly function 2018-06-10 14:38:08 -07:00
Andy a2ea4a0e80 fixed path curvature 2018-06-10 14:33:17 -07:00
Andy fd95b5609f partially fixed scale fcn and improved tests 2018-06-08 22:13:18 -07:00
mdejean f932036fb5 After Z, next subpath starts at same position (#53)
* After Z, next subpath starts at same position

Fixes #52

* removed old comment to mirror new behavior
2018-06-02 00:49:49 -07:00
Andy Port 18b1337877 renamed svg2paths module to allow imports 2018-06-02 00:32:16 -07:00
Andy Port 55661d18a4
Merge pull request #54 from playi/scale
add scale() for curves, and scaled() for paths
2018-05-30 21:20:22 -07:00
Andy Port 304c0bbe1d
improved `scale` related tests 2018-05-30 19:30:24 -07:00
Andy Port 72d7467896
implemented (almost) full SVG scale transform functionality 2018-05-30 19:07:58 -07:00
Orion Elenzil ee656c7de0 refactor `scale()` and `scaled()` to `scale_uniform()` and `scaled_uniform()` 2018-05-30 10:54:56 -07:00
Andy Port 6fcc71d63b minor docstring improvements 2018-05-28 19:46:38 -07:00
Andy Port 6da601f8a7
Merge pull request #56 from DmitryMilk/polyline-adjust-to-specification
Polyline/polygon parsing adjusted to specification
2018-05-28 18:50:12 -07:00