- fixed some method ambiguities that Julia nightly 14 1.14.0-DEV.2604 introduced and that Aqua started finding.
- easing functions for
rescale()
- compat for PolygonAlgorithms 0.4
- compat entry for PolygonAlgorithms
- colorant parsing in mesh.jl
- roundcorner()
- compat entries
text(ts::TypstString, pos::Point)andrender_typst_document(ts::TypstString)use Typstry.jl for text typesetting.
- Julia 1.10+
polyxor(),polydifference(),polyunion()
- triangular grids
squirclepath()rule(pt1, pt2)polysidelengths()
Some 'invalid' Point methods have been removed:
-
Broadcasting on xy-elements like
Point(x, y) .+ nare no longer valid. UsePoint(x, y) + Point(n, n). -
Point-Realarithmetic operations such asPoint(x, y) + nare also no longer valid.
LaTeX support is still under development. See JuliaGraphics/Cairo.jl#357.
textformat()polysmooth()hascloseoptionmarkcells()andgetcells()- use package extension for LaTeX support
- add CompatHelper git workflow
- add Aqua.jl testing
createmovieoption foranimateto make MKV and MP4 videospolybsplinedraws bspline polygons
- minimum Julia version 1.9
- fixes for
drawpath(p, f)to do the Bezier curve truncation better - added dependency PolygonAlgorithms.jl and replace poly intersection routines with new ones
- Aqua says TOML deps must be in alphabetical order :)
- remove @assert statements
- documents now built to https://github.com/JuliaGraphics/LuxorManual
- fixed bug in
box(pt, w, h, cr, :path)(don't create new path) - removed some invalid Point methods (#294)
betweenhas more methods for ranges and arrays
- invalid
Pointmethods such asPoint(1, 3) + 6orPoint(1, 3) .+ 4
LaTeX support is still under development. See JuliaGraphics/Cairo.jl#357.
setfillrule(), access Cairo's fill rule parametergetfillrule()...circlering(), creates ring of circles inside a circlepolysuper(), creates superellipse-based polygonstidysvg(fromfile, tofile), munge those SVG glyphsplaceeps(), place EPS files- dependency on DataStructures.jl added
- rejigged benchmarks folder a bit
circle()constructed more carefully with four arcs (thanks @hyrodium) #268- Point arithmetic fix #270 (thanks @j-maffe)
LaTeX support is still under development. See JuliaGraphics/Cairo.jl#357.
-
code to handle svg backgrounds (thanks @oheil and @hustf!) #150
-
getline()gets current line width -
getcolor()gets current color -
multiply Point by 3×3 matrix using
*
- added more information to doc strings and tutorials
LaTeX support is still under development. See JuliaGraphics/Cairo.jl#357.
bezigon()- the
Base.show(f::IO, ::MIME"image/svg+xml")method that displays SVGs in notebooks modifies the glyph ids to avoid the familiar "Jupyter cells leak" problem (described here) polyclip()clips one poly with another convex polygonispointonleftonline()used by ↑rotatepoint()is better name forrotate_point_around_point()(thanks @gantz-giraffe !)
- changed precompile.jl to use SnoopPrecompile
hexspiral()now counts from 1 not 0 (or 2)- fixed positioning bug in
textpath() - placing images now uses premultiplied alpha value
- fixed bug in
pointcrossesboundingbox()
rotate_point_around_point()is nowrotatepoint()
-
drawing image buffer and drawing indices (thanks @oheil!)
-
thread safety (thanks @oheil!)
-
action dispatcher (thanks @ArbitRandomUser!)
-
fixed hexspiral to work on v1.7 and earlier
-
some work to adapt to changes made in MathTeXEngine release 0.5.0
-
BoundingBox() can be used on Tables and table cells (needs tests)
-
hexagon constructors
-
fix
drawpath()straight lines (thanks @jules for spotting this!) -
add return values for some path functions
-
fixed obscure bug in
polyportion()if polygons were closed
- some old unused stuff
textfit()algorithm revisited; it's quicker, at least....polymorph()keywords changedpolymorph()can now also morph between open polygons- minimum Julia version is now 1.6
- there are still bugs/edgecases in
polyhull()which I can't find/fix - docs now built on Linux (for LaTeX purposes)
- support for Julia v1.3, minimum version is now Julia 1.6.
- first attempt at
polymorph() hcat()andvcat()can join SVG drawings (thanks @davibarreira!)- yet another method for
perpendicular()
- check for dodgy corners in
polysmooth()(thanks @arbitrandomuser!) - even more LaTeX characters (thanks @davibarreira!)
- bug in ngon()-vertices-reversepath fixed
BoundingBox(path)calculates boundingbox more precisely (fixes #213)
- imports in latex.jl
- drawpath() progressive path drawing
- trimbezier() and splitbezier()
- pathsample() like polysample() for paths, but different
- more LaTeX characters (thanks @davibarreira!)
- AbstractPoint (thanks Giovanni @gpucce!)
- docs now forcepush to gh-pages
- latex text strings can also be paths (except the new LaTeX characters)
- Bezier arrows are now a bit tidier might fix #200
-
dependency on LatexStrings
-
Luxor.get_current_hue()andLuxor.get_current_color()
-
the shape-making functions such as
circle/ellipse/rectnow return 'useful' values instead of Booleans. These values can usually be used as arguments toBoundingBox(). (for @TheCedarPrince :)) -
switched to Graham Scan algorithm for
polyhull() -
allow user to change tolerance for
isapprox() -
export
determinant3()
-
LaTeX strings for
text()- amazing work by @davibarreira, @Kolaru, and @TheCedarPrince - Thanks! -
leading option for
textfit() -
BoundingBox()for stored Path objects -
textonpoly()can put text on the route of a polygon
-
code to support VSCode
-
textfit() fits text inside bounding box, first attempt
-
polyhull() - @thecedarprince (Hi Jacob!) convinced me it was useful :)
-
method for
arc(0, 0, action)fixes #184 -
bug in simplify() #186 (thanks Ole @Wikunia!)
- support for 32-bit Windows - (r)svg doesn't work
- Path type to hold a Cairo Path;
makepath(),drawpath(),polytopath(),bezierpathtopath()
- squircle() rt keyword default bug fixed
- textpath() method has action and alignment options
- prettypoly() fix action keyword arg
- pointcrossesboundingbox() fix bug (thanks @hustf!)
- beziersegmentangles() attend to special cases
- dependency on ImageMagick
- many functions can now accept
action=keyword arguments as well as positional ones - offsetpoly(... function) algorithm altered (it still sucks, though :))
include_firstkwarg added topolysample()- texttrack() rewritten so that the alignment works
- added method to randompointarray() to generate Poisson-disk-sampled points
- initnoise() can use other RNG (thanks @JeffreyPalmer!)
- add_mesh_patch() to add more patches to a mesh
- setblendextend() to allow set blend (pattern) extend modes
- small change in hyphenation code in textwrap(), still not perfect though
- box(pt, w, h, radii) - can specify different radii for each corner
- rect() and box() have reversepath options
- Base.getindex(p::Point, i) = (p.x, p.y)[i]
- arrow(pt, radius...) - heads are hopefully better aligned to the shaft
- box-[top|middle|bottom]-left|center|right functions default to using the drawing's bbox.
- setstrokescale() - enable/disable stroke scaling
- ispointonpoly() - true if point lies on polygon (default atol=10e-5)
- tickline() - spaced points
- rotate_point_around_point()
- Drawing() takes a boolean named argument
strokescaleto enable/disable stroke scaling (thanks @JeffreyPalmer!)
- crescent()
- anticlockwise arrows
- custom arrowheads
polyportion()/polyremainder()now throw error for single-point polys (duh)- BoundingBox() no longer fails if there's no drawing (returns a default value)
- documentation restructured along divio ("grand unified theory of documentation" lines
- Allow alpha settings for image matrix (thanks @Sov-trotter!)
- add dependency on FFMPEG.jl
- add @drawsvg @savesvg
- add
svgstring()to obtain the SVG source of a finished SVG drawing as a string
- FFMPEG code changed to run bundled version from FFMPEG.jl
- changed a test that used random numbers and failed on v1.7
- recording (
:recandsnapshot()) (thanks @hustf!)
- CI now ci.yml rather than travis
- texttrack() switch to textoutlines()
- beziersegmentangles() bug fixed
- bug in isarcclockwise() fixed (thanks @johannes-fischer!)
- ispolyconvex() test changed to work properly
- anglethreepoints() changed to work up to 360° properly
textoutlines():center-ed alignments brought into line with 2.9.0 text() fix- more macros allow variables (thanks Mateusz!)
- ellipseinquad() ellipse bounded by quadrilateral
- anglethreepoints() find angle formed by three points
- ispolyconvex() test if polygon is convex
- beziersegmentangles() construct Bézier using in out angled handles
- bug in randompointarray() fixed
text():center-ed alignments are now more carefully calculated, allowing for various xadvance values. So there may be a few instances where text is positioned a few pixels further left compared with earlier Luxor versions.- BASE64 added (thanks @fonsp!)
- Rsvg support: readsvg()
- placeimage() now also accepts SVG files and SVG code (thanks guo-yong-zhi, schneiderfelipe)
- placeimage() now also accepts a matrix of UInt32
- minimum Julia version is 1.3
- juliacircles() has keyword options to allow stroke/clip actions
- algorithm for cener3pts fixed (thanks hyrodium)
- support for Julia 1.0, 1.1, 1.2
- triangle functions
- perpendicular() bisector
- macros allow variables (thanks Mason!)
- fixed text rotation/alignment issue (#122)
- additional methods for
offsetpoly()for open polylines - image_as_matrix!() - reusable buffer
- image_as_matrix(): reverted accidental flip of xy coordinates introduced at 2.5.0 (sorry everyone!)
- getworldposition()
- polycross()
- docs use JuliaMono
- in a few functions (eg
sector,box) a:clipaction didn't work, because it was applied within agsave()/grestore()block.:clipactions should now work, as they're applied after.
- some old deprecations finally gone
- get_fontsize() - thanks Ole!
- currentdrawing() function to return the current drawing if there is one
- show() fixed for new Drawing() eg in REPL
- background() preserves graphics state
- imagematrix() bugs in alpha fixed hopefully
-
imagematrix functions return the permuted matrix now
-
pointlinedistance() now returns the correct results (thanks Paul!)
- precompile()
- fix circlecircleinnertangents() edge case
currentpoint(),has_current_point()pointcircletangent()circlecircleoutertangents()circlecircleinnertangents()
julialogo()centered optiontidysvg()function to hack glyphnames in SVG files (probably a temporary thing)- support for Pluto
- document handling code (cf Pluto support)
julialogo()tweaks to allow :path action- @svg rendering modified (eg no glyphname hacking done)
- arrow decorations
- :image type, image_as_matrix(), @imagematrix to convert current vector drawing to matrix
- some
:nothings replaced with:nones - fixed some
boxbugs, when they were drawn when they shouldn't have been
bars()- usebarchart()
startnewpathoption fortextoutlines()uniquedefined for Points- Travis/Appveyor cache
- GIFs preview in Juno
- attempt to make arrow shafts not stick out of arrow heads
- internals of rule doesn't use sets any more
- changed compatibility versions in Project.toml (Colors/Cairo)
- add/subtract Point to