PixelCNC v1.58b/v1.59b - Renamed milling operations, paths-layer operation input, raster-editing histories, etc...
(Since starting this devlog post, hotfix v1.59b has been released, which fixed two issues involving the trochoidal milling operations. The rest of this post is about the changes that were included with v1.58b.)
In a sort of return to our roots this was a relatively quick update interval, being only 5 weeks since the previous v1.57b update. It does come with some great new toolpath generation features and capabilities. It also includes a re-naming of the milling operations to better accommodate the offset and trochoidal milling operations within their category, especially since another trochoidal milling operation has been added with this update.
Here are the major additions and changes that v1.58b brings.
Milling Operation Naming
Previously we had Horizontal Milling, Pocket Milling, and Trochoidal Milling. Horizontal and Trochoidal were the same in that they were for essentially roughing out the shape of the canvas by contouring the canvas at each cutting depth's Z-plane for generating cuts at that depth. The Pocket Milling operation, in contrast, used a single 2D contour of the canvas at a user-specified Contour Z plane and filled that area with layers of cuts that are each Cut Depth deep, down to the specified Max Depth for the operation.
The Horizontal and Pocket Milling operations are both renamed to have "Offset" in their names, as they generate cuts by offsetting from their contours at the cutting Stepover increment, as shown above.
As such the Horizontal Milling operation has been renamed to "2.5D Offset Milling" to reflect both the fact that it contours the canvas at each cutting depth as well as uses the offset cutting strategy to remove material. Similarly, the Pocket Milling operation has been renamed to "2D Offset Milling" because it only uses a single 2D contour for all of its cutting depths and isn't' necessarily used for roughing out the 3D shape of a canvas.
The Trochoidal Milling operation has been renamed to "2.5D Trochoidal Milling" and is effectively just a trochoidal version of the 2.5D Offset Milling toolpath (aka Horizontal Milling).
These name changes might be confusing, initially, so we've opted to include the original names in parentheses beneath their new names in the operation types dialog.
2D Trochoidal Milling
The new trochoidal pocketing operation, instead of being named as such, is named "2D Trochoidal Milling" and is effectively a trochoidal version of the 2D Offset Milling operation (aka Pocket Milling).
The difference between the 2D/2.5D Trochoidal Milling operations is the same as the difference between the 2D/2.5D Offset Milling operations. We hope this new naming convention is helpful for users trying to figure out what operations are for and what they can/should be used to accomplish.
More Toolpaths From Paths-Layers
All 2D milling operations, as well as Medial-Axis Carving, can now take a paths-layer as input for generating toolpaths. Users can now choose whether to contour the canvas at a specified Z-plane, as before, or choose a paths-layer to use as the contour input.
Paths-layers can be imported from SVG and DXF files, generated by tracing the canvas or raster/model/text layers (which can be loaded from images/models/vectors too). Allowing operations to use a paths-layer as input effectively removes the steps required of a user who wants to use a vector as input to these operations, where they would have to use Shapes From Paths to create a 3D raster-layer from their paths and then setup their canvas so that operations could contour the generated shapes. That's not necessary now.
The caveat is that internally PixelCNC is still generating toolpaths at the canvas' resolution. That is to say that the accuracy and quality of generated cutpaths are still affected by the resolution of the canvas.
Raster-Editing Parameter Histories
A few of the raster-editing functions now include a parameter history which allows re-using previously used parameters. Each editing function that includes a parameter history stores the 16 most recent applied parameters.
The raster-editing functions that parameter histories have been added to are: Adjust Levels, Expand/Contract, Column/Row Tiling, and Circular Tiling. Each function retains its own independent editing history - as opposed to there being one global edit history that includes all functions.
Layer Bounding Boxes
The rendering of layer bounding boxes has been changed to increase overall visibility and clarity across different 3D view coloration/themes. The tilt angle of raster-layers along the X and Y axes is also now visually depicted in the bounding boxes of raster-layers.
Fixed Remove Bottom Smoothing Artifacts
There was an issue with the Remove Bottom option when used on layers that also had a smoothing factor. Strange artifacts would cause holes along the edges of the layer contents between the shapes within the layer and the bottom that was being removed and replaced with the layer's Z-Fill. This has been fixed so that the bottom of the layer properly blends with the Z-Fill of the layer when smoothing is being used.
This bug really only manifested if the layer was at a slight rotation angle and had its bottom layer coplanar with the bottom plane of the canvas volume, so it was really not a huge problem, but it was still undesirable behavior.
GPU Performance Check
PixelCNC now gauges the speed of heightmap calculations on both the CPU and GPU and automatically disables GPU: Image Convolution if the CPU's performance is superior. This can very well be the case if the CPU has many cores and the graphics capabilities of the system are very limited. This should speed up working with the canvas and layer editing functions as well as generating toolpaths for those systems.
There has also been the addition of a CPU version of the Round shape type computation for the Shapes From Paths function, which was previously relying exclusively on the GPU regardless of whether or not the GPU Image Convolution setting was disabled. This meant that systems with hardware configurations like that mentioned above would take a long time to generate rounded shapes from paths when it should've been calculated on the CPU instead.
Tool Occlusion Rendering
This wasn't even listed in the changes.txt (by accident) but the simulation now renders the occluded part of the cutting tool in red, like this:
It was something that only took a few minutes to do and was such a quick spur-of-the-moment change that adding it to the changes list was completely forgotten.
The most immediate next feature to be added is the ability to assemble canvas layer compositions into "groups" which can be switched between in the Project Canvas mode, as well as used as input to an operation. This will make it much simpler to have different canvas contents to generate toolpaths off of for different operations, rather than every operation either using the same exact canvas composition or the user having to go back and forth between their project's canvas and operations to toggle layer visibilities and re-create compositions for each operation.
We're also looking at how we can introduce an online asset library that users can share project content through. This will initially be a very simple "browser" dialog in PixelCNC for creating new layers from content found in the library and we'll add more features and functionality with subsequent version releases afterward. Right now it's really still something that's just being worked out on the drawing board.
Allowing multi-line text for text-layers is something we've also been considering. There is a lot of internal code around handling keyboard input and rendering text-layers that was structured for single-line text so it will be a bit of a process. Fortunately the internals for actually rasterizing out text with a TrueType/OpenType font already handles newline characters swimmingly. We'll have to add in the ability to change vertical line spacing too though.