1.5.1 (2022-05-07)
- Add implicit
detail/smoothing,color/texture,position/orientation/sizeandfontoptions to custom blocks - Logical
and/orexpressions now short circuit (don't evaluate their second parameter unless needed) - Added support for creating
MaterialPropertyfromSCNMaterialsusingNS/UIImage - Fixed setting camera position on locked documents (such as the Example projects)
- Added slightly stronger type safety when calling commands
- Fixed axes contrast when using per-camera backgrounds
- Fixed font inheritance for user-defined blocks
- Added custom fonts to model info display
- Added USDZ to list of supported export types
- Improved iOS compatibility
1.5.0 (2022-04-29)
- Added support for custom light sources using the
lightcommand - Added user-defined functions/commands (previously only blocks could be defined)
- The width and/or height for exported images can now be set on a per-camera basis
- Added
polygoncommand for more easily creating regular polygon paths - The scene background can now be set individually for each camera
- Using
position,orientationandsizeinside apathnow works again (broken since 1.4.4) - Using
rndcommand in option default expressions no longer has a knock-on effect on the sequence - Options can now reference local constants in their default values
- Material brightness logic used in Viewer app is now part of the ShapeScript core
- Using
wrapwidthorlinespacingtext commands inside ansvgpathblock now raises an error - Fixed blank screen when scene contains empty
cameranode - Removed
StatementType.blockcase in favor of expression form - Fixed some bugs in path generation relating to point colors
- The
OSColortypealias is now private - Added SVGPath dependency
1.4.7 (2022-04-14)
- Camera is no longer reset on every reload
- Fixed camera snapback if moved during initial model load
- Added
smoothingcommand for controlling surface normal generation - Disallowed used of
detailandfontcommands in scopes where they have no effect - The
svgpathcommand now works on Linux - Bumped Euclid to version 0.5.20
1.4.6 (2022-04-08)
- Fixed
svgpathcommand (broken in 1.4.5) - Fixed bug where axes were rendered in the wrong color
- Watertight status is now displayed in object info panel
- The
roundrectcommand now works on Linux - Bumped LRUCache to version 1.0.3
- Bumped Euclid to version 0.5.18
1.4.5 (2022-03-07)
- Added support for setting per-vertex colors in a path
- Font, text color and linespacing can now be specified per-line within a text block
- Fixed underestimated bounds calculation for extrusion along a path
- Made logic for child count calculation more consistent
- Bumped Euclid to version 0.5.17
1.4.4 (2021-01-21)
- Fixed infinite recursion crash when a shape file tries to import itself
- Improved error message when imported model file is not readable
- Fixed assertion failure when evaluating imported block due to source confusion
- Added stricter symbol checking in stdlib so, e.g. name can't be used inside a path
- Fixed bug in viewer where examples always open in orthographic mode
- Imported gifs are now counted as textures rather than models in info panel
- Model type is now displayed correctly in info panel
- Fixed some iOS compatibility issues
1.4.3 (2021-12-25)
- ShapeScript will now attempt to ensure generated meshes are watertight by default
- Fixed unintended behavior change with blocks returning multiple shapes (introduced in 1.3.7)
- Fixed precondition failure when calling a block from inside a
pathcommand - Camera nodes are no longer included in object count in model info
- Handle repeated parameter lists without command tokens in
svgpath - Added additional
svgpatherror handling - Bumped Euclid to version 0.5.15
1.4.2 (2021-12-10)
- The
svgpathcommand now supports arc instructions ('A' and 'a') - Fixed bug in
svgpathaffecting absolute horizontal ('H') and vertical ('V') lines - Save panel in viewer now adds
.shapeextension to file name if not present - Made online documentation link logic more robust
1.4.1 (2021-11-22)
- Fixed bug where
alongproperty was ignored inextrudecommand - Fixed wireframe rendering mode in viewer
1.4.0 (2021-11-03)
- Added user-defined cameras
- Added boolean constants and operators
- Added comparison operators (greater than, equals, etc)
- Added
if/elsestatements - Added
assertcommand - Improved suggestions for mistyped operators
- Replaced range expression with separate
toandstepoperators - Failure to load an external model now displays an error instead of failing silently
- Added distinct error type for invalid text escape sequences
- Simplified identifier expression representation
- Converted
optionkeyword to contextual keyword - Added
Geometry.worldTransformproperty
1.3.10 (2021-11-01)
- DAE files containing triangle strips or non-triangular polygons are now loaded correctly
- Fixed empty Geometry names not being set to nil
- Fixed broken footer links in help pages
- Bumped Euclid to version 0.5.14
1.3.9 (2021-10-22)
- Added multiple camera options
- Added orthographic view option
- Reorganized camera menu and keyboard shortcuts
- View settings are now saved per-document instead of globally
- Fixed bug where camera would reset when toggling wireframe mode
- Documents now open in tabs automatically when tab bar is shown
1.3.8 (2021-10-10)
- Added
svgpathcommand for creating paths using SVG-compatible syntax - Added
boundsmember property for calculating dimensions of complex shapes - Added
wrapwidthandlinespacingoptions for text - Improved debug command behavior for children of CSG containers
- Fixed bug when setting
backgroundcolor with a single number (e.g.0for black) - Fixed bug where only first expression argument was highlighted in a type-mismatch error
1.3.7 (2021-09-26)
- Added debug command for highlighting invisible geometry
- Custom blocks can now return any value type, not just meshes or paths
- Infix expressions are now handled correctly when used in a statement position
- Improved type mismatch error messages for block parameters
- String values are no longer nullable and empty strings are handled more correctly
- Nested command calls without parentheses are now handled correctly
- Improved type reporting for single-value tuples in error messages
- Updated print behavior to better match text interpolation
1.3.6 (2021-09-21)
- Added text interpolation, allowing text strings to be constructed dynamically
- Import and textures file paths can now be constructed dynamically
- Alpha component of colors can now be overridden with a convenient syntax
- Removed confusing references to "string" and "identifier" from error messages
- Added ability to load text fonts from a file name or path
- Fixed bug where font getter returned texture instead
- Improved help documentation
1.3.5 (2021-09-19)
- Numbers can now be used in text blocks
- Fixed bug with times/divide operator associativity
- Fixed default zoom level in viewer when axes are shown
- Fixed bug in scene bounds calculation when children have a transform applied
- Improved error message for missing files specified by full path
- Limited maximum lineWidth when rendering paths
1.3.4 (2021-09-17)
- The position/size/orientation options can now be used inside
textblocks - Fixed parsing error when using inline expressions in loop range
- Unsupported string escape sequences are now treated as an error
- Command parameters are now included in assertion failure error highlighting
- Fixed bug with sequential escape sequences in text
1.3.3 (2021-09-14)
- Fixed crash when font is set to an empty string
- Fixed incorrect suggestion of
optionfor typos in contexts where it isn't available - Print logging in a long/infinite loop no longer freezes UI
- Help index is now generated automatically
- Improved help for colors and text
1.3.2 (2021-09-13)
- Added stack overflow detection, preventing crashes due to infinite recursion
- Added support for underscores in identifiers
- Empty and single-element tuples are now permitted (useful in loops and data structures)
- Looping over vector, size and color values is no longer permitted (only tuples and ranges)
- Geometry
Hashableimplementation is now based on value rather than reference - Bumped Euclid to 0.5.12, which fixes the getters for
Rotation.pitch/yaw/roll - Shape position/orientation/size are now read/write properties instead of setters
- Wireframes are now rendered with polygons instead of lines on x86, for better quality
- Added open/create document prompt when opening app
- Improved Welcome view
1.3.1 (2021-09-07)
- Disabled axes by default and added instructions for enabling to help
- Added ordinal members for accessing arbitrary tuple elements
- Fixed rendering bug when using negative scale values
- Fixed bug where functions were able to access local variables of the caller
- Fixed dot operator (member lookup) chaining
- Added documentation for tuples and structured data access
- Bumped Euclid to 0.5.11, which includes several performance optimizations
- Fixed issue where console would not clear correctly when reloading
- Fixed hint message when missing closing brace
- Added
colourandgreyas aliases forcolorandgray - Made stroke line width proportional to the scene size
- Improved logic for default camera zoom level
- Increase antialiasing quality in viewer
- Updated screenshots and fixed bugs in help examples
1.3.0 (2021-08-31)
- Added new standalone range expression with optional
stepvalue - For loops can now be used with either range or tuple/vector values
- Added support for hex color literals
- Added standard color names as constants
- Inherited standard library symbols no longer override user-defined constants
- All ShapeScript value types now conform to
AnyHashable - Removed
CustomStringConvertibleconformance fromGeometryTypeas it made debugging harder - Renamed
StatementType.nodetoStatementType.block, since the term was confusing - Bumped Euclid to 0.5.10, which includes several bug fixes and features
- Fixed crash when trying to access vector or color members from a non-numeric tuple
- Fixed crash when trying to color members from a tuple with more than 4 elements
- Accessing vector members on a tuple with more than 3 elements now raises an error
- Made unchecked Color initializer private
- Removed SceneViewController.snapshot() method
- Added option to show axes in ShapeScript Viewer
- Wireframe view option in viewer is now rendered using lines instead of SceneKit Debug option
- Made wireframe view option persistent across app launches
1.2.4 (2021-08-25)
- Fixed a crash when logging large integer values
- Fixed bug where negative numbers would be logged as zero when using the print command
- Improved formatting of logged numeric values generally
1.2.3 (2021-08-24)
- Enabled parenthesized expressions to span multiple lines
- Improved error message when assigning multiple values to single type
- Fixed assigning color literal value to background without parens
- Added Color initializers
- Added SceneViewController.snapshot() method
1.2.2 (2021-08-24)
- Blocks that accept child values can now be called without braces around them
- Fixed confusing error messages caused by mesh commands being unavailable in certain scopes
- Made script evaluation cancellable in case of infinite iteration or recursion
- Fixed bug in Viewer app where view fails to refresh after loading geometry
- Improved and simplified error handling logic
1.2.1 (2021-08-19)
- Fixed crash when
forloop end index < start index - Improved
printlog output, especially for arrays/tuples and nested values - Added
Loggableprotocol for stringifying values logged using the ShapeScriptprintcommand - Replaced
TokenType.descriptionwithTokenType.errorDescriptionto aid debugging - Text now supports using \n for line-breaks (this was documented as working, but never implemented)
- Fixed confusing error message when first value of tuple matches expected type
- Fixed nonsensical error message when a command is used in an expression
- Bumped Euclid to 0.5.9, which includes fixes for extruded paths
- Extruding along a compound path now forms a union between the resultant shapes
- Fixed typos and improved help documentation
- Fixed member lookup precedence
- Improved test coverage
1.2.0 (2021-08-15)
- Improved progressive rendering logic, reducing wait before seeing first results in viewer
- Geometry cache is now limited to ~1GB per open document instead of being unbounded
- Cached geometry is now cleared when document is closed instead of persisting for app lifetime
- Invalid font names now produce an error instead of silently falling back to Helvetica
- Paths are now drawn in white when background is set to a dark color or texture
- Fixed an index out-of-bounds crash in the Levenshtein distance function
- Bumped Euclid to 0.5.8, which includes several bug fixes
- Renamed
GeometryType.noneto the more descriptiveGeometryType.group - Made
Geometry.meshandGeometry.associatedDataproperties thread-safe usingNSLock - Removed
Scene.deepCopy()andGeometry.deepCopy()methods as instances are now thread-safe - Moved selection logic out of
ShapeScriptLiband into Viewer example application - Fixed bug in Viewer where geometries would be deselected during progressive loading
- Added LRUCache dependency
1.1.6 (2021-08-04)
- Paths are now drawn using polygons strips, which looks sharper and renders more consistently
- Made further improvements to cancelling in-progress rendering when reloading a file
- Bumped Euclid to 0.5.4, which includes several bug fixes and performance improvements
- Improved performance when rendering scenes with nested CSG operations or groups
- Fixed rendering and bounds calculation of non-planar extruded shapes
1.1.5 (2021-08-02)
- Info window in ShapeScript Viewer no longer includes imported models in texture count
- Fixed a regression in ShapeScript Viewer 1.1.4 where error message wouldn't refresh correctly on reload
- Improved error messaging for errors that occur in an imported file
- Reloading a partially-rendered scene should now terminate the rendering more quickly, freeing up CPU
- Rendering is now cancelled when document is closed (previously it continued in background)
- Improved responsiveness of incremental rendering for complex scenes
- Program
sourceandstatementsproperties are now public
1.1.4 (2021-07-31)
- Increased time precision of document file monitoring in ShapeScript Viewer app
- Improved threading a progress logging in ShapeScript Viewer app
- Added Linux support for ShapeScriptLib (excluding rendering and text functions)
- Made static color constants immutable
- Bumped Euclid version to 0.5.3
1.1.3 (2021-07-10)
- Fixed assertion failure if a parsing error occurs at the last character in the .shape file
- Fixed bug in Path plane calculation that could result in corrupted extrusion shapes
- Fixed a tessellation bug affecting anti-clockwise polygons
1.1.2 (2021-07-03)
- Fixed bug where CRLF was treated as two separate linebreaks, resulting in a crash
- Error column indicator is now better aligned when code contains wide characters (e.g. emoji)
- Fixed inverted black/white squares on chessboard example
1.1.1 (2021-06-26)
- Fixed operator associativity (addition/subtraction were previously right-associative)
- Performing CSG operations on complex geometry no longer causes a stack overflow
- Bumped Euclid version to 0.4.5
1.1.0 (2021-04-08)
- Added support for background colors and images
- Added debug console
- Improved ShapeScript error handling
- Object names are now included in info popup
- Upgraded project to Swift 5.1
- Bumped Euclid version to 0.4.0
- Fixed Xcode warnings
1.0.1 (2020-09-03)
- Added iOS and tvOS support to ShapeScript framework (Viewer app is still macOS only)
- Bumped Euclid version to 0.3.5
1.0.0 (2020-09-02)
- First release