The CHANGELOG is a record of major changes and releases for Turtle.
View Source
<#
.SYNOPSIS
Project CHANGELOG
.DESCRIPTION
The CHANGELOG for the project
.NOTES
The CHANGELOG is a record of major changes and releases for the project.
#>
param(
# We can provide the repository url by hard-coding it, or it can be provided in site or page metadata.
[uri]
$RepositoryUrl = "https://github.com/PowerShellWeb/Turtle",
# We can provide the changelog path by hard-coding it, or it can provided in site or page metadata.
[string]
$ChangeLogPath = '../CHANGELOG.md'
)
# Push into this location, in case we are building this file interactively.
if ($PSScriptRoot) { Push-Location $PSScriptRoot}
# Get my own help
$myHelp = Get-Help $MyInvocation.MyCommand.ScriptBlock.File
if ($myHelp) {
# If we have page metadata
if ($page -is [Collections.IDictionary]) {
# Replace 'Project' in the title with the url, to make the title and description more helpful
$page.Title = $myHelp.SYNOPSIS -replace 'Project', {
$RepositoryUrl.Segments[-1] -replace '/'
}
$page.Description = $myHelp.Description.text -join [Environment]::NewLine -replace 'The Project', {
$RepositoryUrl.Segments[-1] -replace '/'
}
}
# If we have notes, replace the project with our name
$myNotes = $myHelp.alertSet.alert.text -join [Environment]::NewLine -replace 'The Project', {
$RepositoryUrl.Segments[-1] -replace '/'
}
if ($myNotes) {
# and convert our notes from markdown.
(ConvertFrom-Markdown -InputObject $myNotes).Html
}
}
# Break up the space a bit with horizontal rules.
"<hr/>"
# Display source for this page
"<details>"
"<summary>View Source</summary>"
"<pre>"
"<code class='language-PowerShell'>"
[Web.HttpUtility]::HtmlEncode($MyInvocation.MyCommand.ScriptBlock)
"</code>"
"</pre>"
"</details>"
# Break up the space a bit with horizontal rules.
"<hr/>"
# Get our changelog
(Get-ChildItem -Path $ChangeLogPath |
ConvertFrom-Markdown | # and convert it from markdown
# Then, replace issue links
Select-Object -ExpandProperty HTML) -replace '(?<=[\(\,)]\s{0,})\#\d+', {
$match = $_
if ($RepositoryUrl) {
# with actual links to the issues.
$issueNumber = $($match -replace '\#' -as [int])
"<a href='$RepositoryUrl/issues/$issueNumber'>" + "#$issueNumber" + "</a>"
} else {
"$match"
}
}
# If we pushed into the location, pop back out.
if ($PSScriptRoot) { Pop-Location}
# We're done!
Turtle 0.2.1:
- New Documentation:
- Over 130 examples!
- A Brief History of Turtles (#249)
- Website improvements
- Major improvements
- A turtle can now be any element!
- Support for CSS keyframes, styles, and variables!
- Vastly expanded SVG support, including bezier curves!
- CircleArcs and Pie Graphs! Improvements to circles.
Turtlecommand improvements:Get-TurtleSave-TurtleShow-Turtlewill show the turtle (#257)
- New methods:
Turtle.a/Arc(#231)Turtle.b/BezierCurve(#228)Turtle.CircleArc(#235)Turtle.c/CubicBezierCurve(#230)Turtle.FractalShrub(#332)Turtle.Leg(#288)Turtle.Pie/PieGraph(#239)Turtle.q/QuadraticBezierCurve(#229)Turtle.Repeat(#256)Turtle.Spider(#289)Turtle.Spiderweb(#290)Turtle.Spokes(#291)Turtle.Sun(#297)Turtle.Show(#258)
- New properties:
Turtle.get_ArgumentList(#296)Turtle.get/set_Attribute(#247)Turtle.get/set_Class(#237)Turtle.get_Commands(#250)Turtle.get_DataBlock(#284)Turtle.get/set_Element(#248)Turtle.get/set_Defines(#243)Turtle.get_ScriptBlock(#253)Turtle.get/set_Defines(#243)Turtle.get/set_Keyframe(s)(#251)Turtle.get_History(#279)Turtle.get/set_Link/Href(#241)Turtle.get/set_Locale(#300)Turtle.get_Marker(#227)Turtle.get/set_MarkerEnd(#233)Turtle.get/set_MarkerMiddle(#234)Turtle.get/set_MarkerStart(#232)Turtle.get/set_Opacity(#293)Turtle.get/set_Precision(#225)Turtle.ResizeViewBox(#238)Turtle.get/set_Start(#245)Turtle.get/set_Style(#254)Turtle.get/set_Variable(#263)Turtle.get/set_Title(#285)
- New pseudo type:
Turtle.HistoryTurtle.js(experimental)- Javascript version of turtle (#302)
- Initial Core Operations:
Turtle.js.heading(#303)Turtle.js.rotate(#304)Turtle.js.forward(#305) (#337) (#338)Turtle.js.isPenDown(#306)Turtle.js.goTo(#307)Turtle.js.step(#308)Turtle.js.teleport(#309) (#334)Turtle.js.steps(#310)Turtle.js.min(#311)Turtle.js.max(#312)Turtle.js.resize(#313)Turtle.js.x(#314)Turtle.js.y(#315)Turtle.js.width(#316)Turtle.js.height(#317)Turtle.js.pathData(#318) (#339)Turtle.js.polygon(#319) (#336) (#338)Turtle.js.penUp(#322)Turtle.js.penDown(#323)Turtle.js.parse(#327)Turtle.js.go(#330)Turtle.js.ToString.ps1()(#320)Turtle.js.get_JavaScript.ps1(#324)
- Thanks @ninmonkey for early testing!
- Improved methods:
- Improvemented Properties:
- Adding
[OutputType([xml])]to properties that output XML (#266) Turtle.get_Durationdefaults (#270)Turtle.get_Mask/PatternMaskreturns only the mask (#261)Turtle.set_BackgroundColorapplies to SVG directly (#260)Turtle.get_Maximumis a vector (#275)Turtle.get_Minimumis a vector (#276)Turtle.get_Positionis a vector (#274)Turtle.set_Strokesupports gradients (#295)Turtle.set_Fillsupports gradients (#294)Turtle.set_PathAnimationwill not overwrite a morph (#244)Turtle.get/set_PatternAnimationuses duration (#299) and improved docs (#298)Turtle.get_TextElementdefaults to centered text (#265)Turtle.get_TextElementimproved color support (#292)Turtle.get_ViewBoxnegative bounds (#286)
- Adding
- More aliases:
- Fixed extra output in
Turtle.Pop(#264)
Turtle 0.2:
Turtles All The Way Down
A turtle can now contain .Turtles
Which can contain .Turtles
Which can contain .Turtles
Which can contain .Turtles...
Turtle 0.1.10:
- Updated Methods
- New Shapes
- Added Demos
- Intro To Turtles (#197)
Turtle 0.1.9:
- Turtle Text Path Support
Get-Turtleparameter improvements (#169, #170)Get-Turtletracks invocation info (#157)
Turtle 0.1.8:
- Turtle Performance
- New Moves:
- New Reflection Examples (#162)
Turtle 0.1.7:
- Morphing Turtles
Turtle.Morphmorphs shapes (#154)Turtle.get/set_Durationcontrol animation durations (#153)- Lots of new examples
- New Fractals:
Turtle 0.1.6:
- Vastly expanded Get-Turtle examples (#149)
- Check out https://psturtle.com/Commands/Get-Turtle
- New L-Systems:
- Fixing KochCurve parameter order (#147)
- Added New-Turtle docs (#148)
Turtle 0.1.5:
- New Shapes:
- Fixes:
Turtle 0.1.4
TurtleUpgrades- New Properties:
- New Methods:
- Fixes:
Turtle.Towards()returns a relative angle (#123)
Turtle 0.1.3
- Fixing
Get-Turtleinline sets (#108, #107) - Fixing
.PNG/JPEG/WEBPto no longer try to use msedge (#110) - Adding
Turtle.get/set_FillRuleto get or set the fill rule for the turtle. (#109)
Turtle 0.1.2
Get-Turtle/Turtlecan now get or set properties or methods- New Methods:
Turtle.Distance()determines the distance to a pointTurtle.Towards()determines the angle to a pointTurtle.Home()sends the turtle to 0,0Turtle.lt/rtaliases help original Logo compatibilityTurtle.Save()calls Save-Turtle
- Explicitly exporting commands from module
Turtle 0.1.1
- Updates:
Turtle.get/set_IDallows for turtle identifiersTurtle.ToString()stringifies the SVG
- Fixes:
- New:
- New Fractals:
Turtle 0.1
- Initial Release
- Builds a Turtle Graphics engine in PowerShell
- Core commands
Get-Turtle(aliasturtle) runs multiple movesNew-Turtlecreate a turtleMove-Turtleperformas a single moveSet-Turtlechanges a turtleSave-Turtlesaves a turtle
turtle Forward 10 Rotate 120 Forward 10 Roate 120 Forward 10 Rotate 120 |
Set-Turtle Stroke '#4488ff' |
Save-Turtle ./Triangle.svg
- Core Object
.Headingcontrols the turtle heading.Stepsstores a list of moves as an SVG path.IsPenDowncontrols the pen.Forward()moves forward at heading.Rotate()rotates the heading.Square()draws a square.Polygon()draws a polygon.Circle()draws a circle (or partial circle)
- LSystems
- Turtle can draw a L system. Several are included:
BoxFractalGosperCurveHilbertCurveKochCurveKochIslandKochSnowflakeMooreCurvePeanoCurveSierpinskiTriangleSierpinskiCurveSierpinskiSquareCurveSierpinskiArrowheadCurveTerdragonCurveTwinDragonCurve
- Turtle can draw a L system. Several are included:
turtle SierpinskiTriangle 10 4 |
Set-Turtle Stroke '#4488ff' |
Save-Turtle ./SierpinskiTriangle.svg