Autobackups and Autosaves

Autobackups can now be saved to a specific folder and that folder can be changed in CET Control Panel's Data Management tab. If not specified, it defaults to CET Documents/autobackup.

Autosaves are now saved into cmWritable/autosave. In develop mode, cmWritable is in the write folder of your CET Workspace. In build, that is in AppData/Local/CET Data.

Autosave Resources

Resources such as textures, excel worksheets, DWGs, Cm3Ds and CmSyms are now extracted and saved separately from the autosave drawing file. If the same resource has been saved by an earlier autosave, they will NOT be resaved. Resources can be found in cmWritable/externalFormatterResources, with the extension .cmextrs.

The motivation for this is that drawings with a large number of resources will not need to spend too much time autosaving them, since autosaves are done periodically and are the most common form of saving.


The image comparator has been moved from cm.test.imageDiffTool to Structurally this makes more sense since the actual C++ code to diff is in and it uses MemoryImages which is also in This should make the image comparison tool more accessible for other extensions and not just for test extensions.

Floating-point line widths

In the PDF canvas, if the lineWidthStyle of a LineType is not unit, the code sets the minimum width to be 1.

Furthermore, the width of a LineType is an integer, which further prevents width values that are less than 1 and greater than 0 (eg 0.001).

This makes the lines too thick for material handling since the systems can be enormous and users might want to zoom-in on a frame or beam that is small relative to the system.

The changes are adopted from GDICanvas's getPen method, which calculates the scaling and pixel width-to-millimeter conversion factors. Then, these values are used to calculate the actual width of the GDI pen.

For PDF, the same calculations are used to obtain a floating-point width from the integer width field.

Invalid Filename

Filename checking has now been expanded to account for reserved Windows names (eg. COM[0-9]) and invalid end characters (period and space).

See the following for more info:

Variants Constraints

The previous implementation of spreadsheet in was initally designed to work with products and features (DsBaseExternalRefTypes) as these were the only things initially shown in spreadsheet. Later this spreadsheet class became the base class for materials and other stuff as well, but the naming of the fields and methods together with the logic were left as it is, new subclasses of the spreadsheet would still use the original implications to the data it holds as "Products".

To make the spreadsheet compatible with more data types, a refactoring was done on the spreadsheet. Instead of supporting the DsBaseExternalRefType, it has now been refactored to support DsBaseCodeType, which is the parent class of DsBaseExternalRefType. DsBaseCodeType is also the parent class of other data types, such as DsRuleType (constraints data). This refactoring has allowed the reuse of the spreadsheet in "Constraints" tab within creator to hold and show constraints data, while also maintaining the funtionalities that were previously implemented with the spreadsheet class itself.

As part of Abstract Material Handling in CET 14.5, we are introducing some new Abstract Shelving components and some engine adaptations to help develop shelving extensions.



Updated the palette tool to work with new schemes. PaletteApplyEnv is now abstract and has group scheme and prop scheme specific subclasses.



Elevation Tool

A tool has been added under Edit > Elevate (3D only) for changing the elevation of a selection. The elevation can be changed via a property or graphically in the 3D view.

It is now possible to lock the positions of all objects in the photolab view. This option can be toggled in the photolab UI and is intended to make it easier to position the camera before rendering.


The render progress UI has been redesigned to better reflect the ongoing progress during rendering. A "preparing" state has been added to the progress along with the previous "rendering", "done" and "failed" states. The preparing state now reflects the progress of the render job data being packaged and sent to the render server. Additionally, some UI changes have been made to give the UI a new look. The dialog itself has been changed from a dialog window to an application window, allowing it to be stretched and resized.


Added a flag to enable autosaves and autobackups to obtain a 2D screenshot of the drawing.


Default export location logic has been reworked to make more sense to users, and to remove old confusing logic.


Various UI Elements have been removed from the cm/core/ui/, since they are no longer relevant now that autosaves and autobackups have been moved to pre-determined folders.

Specifically, the "recursive" checkbox and the "directory" selection field have been removed. Autosaves and autobackups are now saved in a flat file structure by default, so there is no need to remove them by checking all folders recursively from a given parent folder.


Instead of streaming the entire full-resolution texture when saving, we now have the option to simply stream the original texture URL together with a lower resolution version of the texture, resulting in a significantly smaller cmdrw file. If the texture is still present on load, it will be used. If not, the streamed lower res version will be used.

The UI for photolab's advanced mode render quality settings have been redesigned. In this effort, many of the fields and functionality previously kept in the LabRenderQualityBox has now been moved into a new class - AdvancedRenderSettingsBox.

Tooltips have been added to most of the photolab post-processing options. Additionally, the help dialog has been updated to reflect some new post-processing options.


Excel import for flooring catalogs was moved to a new Flooring tab in 'Catalogue Creator'. The custom.flooring.import extension has changed parent from custom.flooring => custom.dataCatalog


The cm_sqlite.dll dynamic link library has been updated to a more recent version. SQLite Version is now 3.42.0 (2023-05-16), previous version was 3.8.9 (2015-04-08).

With the new version of SQLite we also enabled the SQLite FTS5 extension. For more info see: