v1.43a - Raster-Along-Paths, Adjust Levels, Expand/Contract, Draft Angle, Simplify/Subdivide Paths, and more!

This is a pretty significant update with some great new features for designing and crafting a project's canvas. The UI has also evolved a bit futher - things have been moved around and situated in a bit more of an organized fashion. There are also a lot of fixes and improvements that are included in this update, which also serve to setup for a major push to add the last few features that are planned to be in PixelCNC for the first beta release  in the coming months. The goal is for v1.43a to be the last alpha release - which means that the feature set will largely remain locked after the next release, at least that's the plan, though I am pretty sure I'll still be giving myself permission to add in new things here and there as needed. The main things that will be worked on after the beta release are the creation and inclusion of learning materials - built-in help system(s), tutorials, and walk-throughs for creating projects of various kinds from scratch.

The free-trial version can now open project files with this release which will allow new users to download example projects and explore PixelCNC's functionality more in-depth through them. I'll be releasing sets of example projects for both free-trial and paid-version users to play around with and get some ideas from in the coming weeks.

Here's the changes.txt for v1.43a:

  • added raster-along-paths function for conforming a raster-layer along paths
  • added raster-editing "levels" function for re-mapping height values
  • added raster-editing "expand/contract" function
  • added raster-editing "draft angle" function
  • added path-editing "simplify" function for removing nodes from paths
  • added path-editing "subdivide" function for inserting nodes into paths
  • added angle parameter to shapes-from-paths' angled shape mode, which has been renamed to "Chamfered Shape"
  • added dialog repositioning, dialogs can now be dragged around via titlebar
  • added operation-type selection dialog to replace the small text-only drop-down menu on operations' parameters
  • added raster-editing brush stroke fade rate value, which affects both a brush stroke's diameter and value as a function of stroke length
  • added polygonal/faceted modifier to raster-editing: holding the ALT keyboard button increases time between brushstroke points recorded while disabling cubic bezier interpolation
  • added rendering of z-plane to 3d view when adjusting contouring Z plane values for trace-to-paths and relevant CNC operations
  • added "DXF Tolerance" setting for controlling the precision that paths are generated from DXF entities, which was originally controlled by the "DXF Threshold" setting, which also controlled auto-join threshold
  • added low-fidelity paths-layer rendering behavior when "Simple Update" is enabled via "View Settings" dialog
  • added dynamic system performance "budget" setting to "CNC/CAM Settings" dialog
  • added information buttons to various dialogs and functions for users to learn about the different features as they are encountered
  • added new UI font: "CallingCode"
  • added new interface theme "darkgray"
  • added back original advection stipple operation and renamed newer stipple operation to "stipple2"
  • added opening of project files to the free-trial to enable users to better evaluate capabilities and features
  • improved project file format by replacing PNG compression with bitpacking  to produce smaller files that are generated significantly faster
  • improved project file save speed by replacing dictionary-encoder with and entropy-encoder, sacrificing compression for speed
  • improved speed and quality of path-generation for loaded DXF arcs and splines
  • improved speed and quality of path sweep generation
  • improved quality of medial-axis when contour height is closer to the top or bottom of the canvas, which caused "spiny" cutpaths
  • changed "DXF Threshold" setting to "DXF Auto-Join", and removed control over precision of generated paths when loading DXF entities
  • changed "Cap FPS" toggle to a user-defined maximum framerate setting
  • changed text-to-raster to include entirety of text layer even if it extends outside of the canvas, instead of text only within the canvas area
  • changed organization of some of the configuration settings
  • changed lower-bound of "max segment length" CNC/CAM setting
  • changed project toolpath rendering to omit operations which are excluded from G-code and the CNC simulation (paperclip icon on operations)
  • changed many aspects of UI system to be more comfortable and intuitive
  • changed "stipple2" operation's algorithmic internals to make it easier to generate good stipples
  • changed SDL/OpenGL/window initialization to possibly resolve WINE incompatibility issues (report back your findings!)
  • removed wireframe render toggle from view button bar
  • fixed freeze when exporting G-code using a post-processor that has a zero-character length CommentBegin or CommentEnd string
  • fixed tool units alternating between "none" and "(null)" if tool index's type is set to "none"
  • fixed spiral operation's minimum depth parameter having no effect
  • fixed UI locking up if actively applying a raster brush-stroke and cursor overlaps any UI elements
  • fixed path-editing logic stalling while dragging a path node if the cursor ends up over elements of the user interface
  • fixed mis-alignment between shown raster-editing brush geometry and the actual brush stroke produced on a raster-layer
  • fixed brush-stroke discontinuities formed along a continous brush-stroke
  • fixed infrequently occurring gap along a continuous brush-stroke
  • fixed potential crash when applying many brush-strokes to a raster-layer
  • fixed DXF spline entities importing as coarse polyline paths rather than smooth paths that conform to the original spline form
  • fixed loading paths for DXF spline entities with non-normalized knot values
  • fixed 1-pixel gap above menubar
  • fixed new project tools defaulting to inches for metric projects
  • fixed grid plane area not moving with camera properly in metric mode
  • fixed layer smoothing inconsistency with different canvas quality settings
  • fixed bug causing merged layers to not refresh their canvas contribution
  • fixed program freeze when quitting while CNC simulation is playing
  • fixed tapered ballnose tool not working with stipple2 operation
  • fixed img_alloc() overflow error after generating toolpaths enough times

Raster Along Path(s)

Raster-layers can now be conformed along paths. Place a raster-layer above a paths-layer and the raster-along-paths dialog (found on the  left while the raster-layer is selected). There are a number of possibilities with this new functionality. For example:

Users can choose whether PixelCNC should automatically scale the layer to fit a user-specified number of repetitions along each path, individually. This means that if there are multiple paths in the paths-layer, each one will see the raster-layer scaled differently, depending on the length of each path in order for the raster-layer to be repeated that fixed number of times. Alternatively, a fixed-scaling for the layer can be chosen, anywhere from zero-to-double the size of the raster-layer.

Two other parameters, lateral offset and fixed-angle, allow for more control over how the  raster-layer is conformed to paths-layers, to achieve more interesting effects:

New Layer Editing Functions

Both the raster-layer and paths-layer editing modes have seen new features and editing functions added. These functions each are limited to the area that the layer occupies along the Z-axis. Its effect will not extend below the layer, or above the layer. There's a distinct possibility this may be changed so that each function's effect does extend below/above the layer and when applied to the layer the layer's Z origin and size will adapt to accommodate the end result.

"Adjust Levels" allows re-mapping of a raster-layer's heights/depths similar to a photo editing programs' "adjust curves". A selection of different interpolation modes enables users to produce more  effects than just a plain linear interpolation.

Layers with too sharp of edges/drop-offs that are not going to be sturdy, or perhaps that the user won't be able to reliably mill or carve due to geometry issues can now have a draft-angle applied. Along with a draft-angle users can also expand and contract their raster-layers by a specified radius. The expand/contract can be applied in 3D or 2D, or something reminiscent of 2.5D by manipulating the options available.

Paths can now be simplified by a user-chosen error threshold. PixelCNC will attempt to retain as much shape and form as possible by manipulating the control points of the nodes that have not been removed, rather than simply removing the nodes that are determined to be beneath the error threshold set by the user and letting the paths' shape.

Paths can also now be subdivided, if users wish to manipulate a path's form with more control without having to manually insert new nodes along paths.

More Changes to Stipple Operation(s)

Firstly, the existing "dithered" stipple operation replaced the older "advection" stipple algorithm with v1.41a. The original advection version has been added back as the "Stipple" operation type while the newer dithered stipple has been moved to a new operation called "Stipple2".

Original "advection" stipple operation with 50% advection on the left and zero advection on the right.

The main reason for restoring the original stipple operation is because it allows stipple distributions that can't be achieved with the newer dithered stipple operation. Some users may wish to have stipples placed at an even spacing from eachother, which the newer dithered stipple operation cannot provide.

Secondly, the dithered stipple operation (now called Stipple2) has also had its parameters re-worked to be easier to use. They're still not 100% where I'd prefer that they be, due to the complexity of the underlying algorithm, but they are definitely much easier to make nice looking stipples with. It's a lot easier to trial-and-error some decent looking stipples, and the default parameters should work with a wider range of canvas compositions.

Brush Stroke Fade Rate

The manual brush editing feature, which is now a sub-mode when raster editing is enabled, has a new "fade rate" parameter. This parameter allows for brush strokes which reduce in size and diameter as a function  of their length. A higher Brush Fade value will cause the brush stroke to reduce in size and height more quickly. The dynamics involved here will likely be separated and independently controllable for the next release, perhaps with a few non-linear falloff functions for stroke diameter/value parameters.

There were also improvements to the overall quality of the manual brush stroke system, eliminating two different causes of intermittent discontinuities that would occur along paths and make them less smooth looking than one would hope. Now they're smooth as silk, finally!

Render Contouring  Z-Plane

There are several places in PixelCNC where the user must enter a height or depth value, which requires that the user understand exactly what's going on insofar as the thickness of their project and the result or effect they are going for. Now users have visual feedback that shows the height that something will be traced or a toolpath will contour the canvas.

This applies when tracing the canvas or a selected raster/model/text layer to paths. It also appears when creating/editing an operation's parameters if it is a medial-carve, profiling, or pocketing operation.

Chamfer Angle Parameter

The generative function for creating raster-layer shapes/geometry from paths-layers with  an angled chamfer has not only been  renamed from "Angled Shape" to "Chamfered Shape" but it also no longer only generates a fixed 45-degree chamfer. Upon selecting the Chamfered Shape mode a Chamfer Angle parameter appears for the user to specify their own angle.

Operation-Type Selection Dialog

Now there's a bit more of a visual representation for users when choosing an operation's type, whether when creating a new one or modifying an existing one. Previously, users would see an anemic little drop-down menu that wasn't very descriptive or informative about what each operation type is and/or does.

Dialog Repositioning

Certain dialogs can now also be dragged around, which is helpful in situations where the user might want to refine or adjust something in the 3D view, or change a layer or other parameter on the main UI before using the dialog to generate or produce something.

Optimized Project File Format

PixelCNC's project file-format has been re-worked, eliminating the LZW dictionary-encoder and replacing it with the FSE/ANS entropy-coder, which is much faster but not able to compress as thoroughly as a dictionary coder. Another change is to how heightmap data is being compressed into project files. Previously, PixelCNC would store heightmap data - for raster-layers and operation simulation cutmaps - by simply feeding the 32-bit float Z values as 8-bit RGBA pixels into a PNG compressor. This was also slow and didn't really compress data effectively. Now the heightmap data is packed into 16-bit values, which automatically halves the size of the image data.

While project files are not much smaller in most cases, they save significantly faster. If it just wrote the raw data for everything to disk it would save virtually instantly, but projects would be dozens of megabytes for even simple ones. One idea has been  to simply stop storing operations' simulated result in the project file, and just require that an opened project have its operations' simulated cuts generated by the computer that's loading it. That would save some megabytes as well.

PixelCNC's project auto-backup feature, which will backup a project every minute or so if the user has made any changes to it, has been disabled by default mostly due to projects saving very slowly. This is because PixelCNC basically stops letting the user do anything while a project is saving. The canvas will cease to update, operations won't generate, etc.. until after a project being saved has completed. This could be rectified by double-buffering all the data involved but it was simpler to just stall any pertinent functionality until saving is complete, except that saving projects was slow. Now that projects save much more quickly this feature is enabled by default, as it should no longer get in the way of using PixelCNC. It's a useful feature while users are still able to enter bad values into operations' parameters and cause a crash :P

What's Next?

This  is ideally the last alpha release. 2020 threw a few curve balls preventing this from being the first beta (which was planned for July, since the end of 2019), but hopefully we can squeeze in the last set of features - which have been planned for some time and includes some more canvas editing functionality and at least one new CNC operation, more provisions for built-in help and other usability improvements. The long-standing lack of support for ASCII STL models, and OBJ models - whether ASCII or binary, will be rectified.

One of the issues with compositing layers, and some of the generative functions for producing raster-layers prevents more versatile vertical sizing and positioning behavior. Text-layers, for instance, have no "background", they have what amount to "transparent" areas that do not composite with the canvas even if the layer is raised vertically. However, if copied to a raster-layer after being raised, the "bottom" of the text layer becomes solid, as shown here  with the original text layer on the left and the raster-layer produced from it on the right:

The Z origin and size of the raster-layer are the same as the original text-layer, the raster-layer has only been moved horizontally to show the non-transparent background produced by text-to-raster. The plan is to instead get rid of this transparency behavior altogether, which is implemented as a bit of a hackish afterthought, and replace that with a sort of vertical cropping of layers - confining the top/bottom of what becomes composited with the canvas, where anything beneath the lower cropping-boundary is omitted as 'transparent'. This might be done as a slider among the layer's parameters (while cropping the top will be done right in  the 3D view as with X/Y cropping).

Another important feature that's been on the backburner is the generation of proper arc/helical CNC motions, which will dramatically reduce the number of feed commands and thus lines of G-code in exported CNC programs while producing smoother cuts.

For a long time now project files have been able to be opened with PixelCNC, that is, you can set Windows to open .PNC files with PixelCNC and it will. The ability to select one or more images/models/vectors and "open with" PixelCNC and have them all load up as layers of a project, or at least being able to add multiple images/vectors/models to a project rather than each individually, could prove very useful and streamline workflows.

There's still plenty left to be done for the beta, but we're on the home stretch! September is looking like the time that everyone can expect the first beta release - at which point we'll be moving to focusing more on PixelCNC's online presence and advertising, which includes creating learning resources, videos, tutorials, and other things to help support users and show off to would-be users.


PixelCNC v1.43a (64-bit).zip 2 MB
Jul 02, 2020
PixelCNC v1.43a (32-bit).zip 2 MB
Jul 02, 2020
PixelCNC v1.43a Trial (64-bit).zip 2 MB
Jul 02, 2020
PixelCNC v1.43a Trial (32-bit).zip 2 MB
Jul 02, 2020

Get PixelCNC: Fast/Easy CAM for Signs, Engravings, Art, and More!

Buy Now$199.95 USD or more

Leave a comment

Log in with itch.io to leave a comment.