Change log


spatix v024.002 (2023-02-07, techsupport till 2025-06-30)


  • New feature: "Clean re-install" option at the Welcome page of Spatix installer will remove and rewrite all previous user-settings by the modern default user settings, if checked
  • New feature: Spatix shortcuts are now available from terra-application windows as well
  • New feature: More user-friendly errors reporting on SPX-file save operations (no disk space, write to read-only media, overwrite locked, not enough rights, etc.)
  • New feature: Raster-refs Manager will show file read errors while locating attached rasters as texts inside raster rectangle (note that some previews may still be present in Spatix cache)
  • New feature: Lock X, Lock Y and Lock Z now are three separate buttons. Appropriate spaccels are lock axis x, lock axis y and lock axis z
  • New feature: Grid Lock now acts together with other active locks
  • New feature: WMS Manager and Raster-ref Manager can now work with geographic CRS. Geographic CRS can be chosen in the "Edit › CAD File Settings › CRS" dialog box.
  • New feature: Support for wkbPolyhedralSurface, wkbTIN and wkbTriangle layer types in GDAL Import
  • New feature: Element Information Tool and Choose Elements Tool now allow to iterate through the set of located elements by mouse Reset click
  • New feature: You can now enable scrollbars in View windows via new "Edit › Preferences › Interface" checkbox
  • New feature: State of sdubtoolbars shall be saved and restored upon Spatix restart
  • New feature: DXF Export. The ability to select the INSUNITS value from the command dialog is implemented. Value of primary SPX-file units is used by default.
  • New feature: DXF Import. Implemented units conversion from DXF to primary SPX-file units.
  • Refactor: Cursor shape preferences were extracted and moved to a separate "Cursor" section in the "Edit › Preferences" dialog box
  • Refactor: Huge rasters attach as reference performance significantly improved
  • Refactor: Disable change active layer by double-click in the Layers Manager layers table (since bad user experience). Use context menu on mouse right-click to set active layer.
  • Fix: "3D cursor mode" setings is now saved between Spatix sessions
  • Fix: spatix.com website did not open from the About dialog
  • Fix: View background color is updated immediately from "Edit › Preferences › Views". Spatix restart no longer required.
  • Fix: Some Tool Windows had irrelevant captions
  • Fix: Last used Text height is now preserved in Place Text Tool
  • Fix: Margins and sizes of Text Tools Toolsettings Windows were harmonized
  • Fix: Tab-key switch through GUI elements was broken, now is fixed
  • Fix: Color of the missing fastfont glyphs was always white. Now it is correctly taken from the text element
  • Fix: Locked SPX-files will now open in Spatix in read-only mode without errors
  • Fix: Appropriate tab-page of the Raster/WMS/Layers/Presets manager will be activated in the docking area upon the relevant Manager is triggered from toolbar or menue
  • Fix: Inverted background color is now used as a grid color. Grid dots were now visible on brights view backgrounds earlier.
  • Fix: Import Export Tools now save/recall the last used path
  • Fix: Better layer 2D/3D type detection on GDAL Export (Z coordinate was lost on export into SHP-file)
  • Fix: "Soon expire" message box had wrong-formatted message
  • Fix: Visualization, highlighting and proper location of imageref elements in reference files
  • Fix: Several Spatix crash reasons were addressed based on crash-reports analysis
  • Exception on Spatix start-up in certain cases
  • Exception on GDAL Export when wrong layerId is given
  • NPE in OpenGLBackEnd::setRenderingSettings() in case no Z-buffer is enabled
  • Huge memory leak for recursively constructed Figures that might already have elements appended and stored in the SPX file, while whose geometry is re-expanded from the relevant Figure definition elements
  • Exception when Spatix is closing
  • NPE in SColorPicker
  • NPE in WndMainMenuRemoveItem()
  • NPE in GdalSpxExporter::assignAttributes()
  • Fix: Restored the ability to select elements by rectangle in "Individual" mode of Choose Elements Tool
  • Fix: Highlighted elements at the end of the Element Information Command are properly cleaned
  • Fix: More predictable visualization of elements intersection point for Snap to Intersection snap mode
  • Fix: PhotoTools installation path is set to be the latest Spatix installation path (not the first one)
  • Fix: Photo-pairs are now properly saved in PhotoTools
  • Fix: Perpendicular to view plane lines were not visible, now are drawn as dots of appropriate linewidth
  • Fix: Allow opening of DGN v7 with missing EOF marker
  • Fix: Modify/Insert/Delete Vertex Tools, more precise definition of pick point, limit element types available for operation to only linear elements
  • Fix: Delete Vertex, ELM_LINE type handling was broken
  • Fix: Processing of DXF handles on DXF import as uint64 values
  • Fix: Improve view update performance in case view command clicks that do not really cause sceen modification
  • Fix: Modify Element tool crashed on location of the ellipse/circle for modification

API changes

  • New feature: Unicode versions of CFace functions that start commands: StateCmdW(), StateCmdExW(), StateCmdModifyW(), StateCmdViewW()
  • New feature: Spatix -based IxApps licensing based on API-key logic was implemented
  • <ixapp_name>; <ixapp_contract> new info was added into telemetry-collected data
  • IxAppStub example of how to use the new API-key licensing functionality was added into SDK package
  • CMake -based build instructions were added into SDK package
  • New feature: SScannableList::GetLastElmdInfo() returns additional info about last scanned element
  • New feature: Doxygen -built API documentation is now added into released SDK package
  • Refactor: Rename all remaining "MiniApp" to "IxApp" appearances: in code, in comments, in file names, etc. (with one exception: INI file sections and settings names)
  • include/SMiniApp.h was renamed into include/IxApp.h in SDK
  • CFace/miniapp_typ.h was renamed into CFace/ixapp_typ.h in SDK
  • CFace/miniapp_fdf.h was renamed into CFace/ixapp_fdf.h in SDK
  • SMiniApp::ActiveMiniapp() was renamed into SIxApp::me()
  • Refactor: Remove sorid (String or ID) concept from source-codes
  • Refactor: Remove output string parameter from isSnapModeAvailable() hooks
  • Refactor: Rearrange SDK header files so that to remove redundant and unnecessary stuff from SDK include folder
  • Refactor: Remove unused tokenizer.h and userpref_fdf.h from SDK
  • Refactor: Remove unused VwsSetInterruptableAll(), VwSetInterruptable()
  • Refactor: Rename ViewUpdateReason enum values
  • Refactor: Some renames of C++ idents that do no affect CFace layer
  • Refactor: undobuf.h was renamed into CadIO/UndoActionInfo.h in SDK
  • Fix: SScrollArea::computeCenterPoint() now is operational for non-top views
  • Fix: CFace -created Spaccels that had no relevant GUI item were not run, now will run
  • Fix: synchronize view screenshot taking procedure with the usual view rendering workflow

spatix v023.005 (2023-05-12, techsupport till 2024-06-01)


  • New feature: Improvements into Raster references
  • New "Reload" command for Raster references — allows to update cached rasters from originals
  • Raster reference manager items now became sortable
  • Raster references that are waiting to be placed manually are marked as "Unplaced"
  • Increased performance of loading rasters having a color table
  • MSVC-2022 build of Spatix supports Intergraph's custom TIFF TAG which holds raster placement transformation matrix in georeferenced TIFFs
  • OZI map files georeference data is supported
  • Button to view/change CAD layer of the raster reference element (raster references visibility is controlled via layers visibility)
  • New feature: New spaccels to manage raster references:
  • rasterref color override <color_idx> #RRGGBB — replaces palette color by the given one when raster reference is displayed
  • rasterref color transparent #RRGGBB — specifies which color should be treated as a transparent one
  • rasterref attach file <file_name1>[ <file_name2>[ ...]] — attaches raster references by file names
  • elem choose rasterref byname <name1>[ <name2>[ ...]] — adds raster reference elements into the selection set by specifying their relevant file names
  • New feature: Added support for attachment of WMTS layers. Check for the new [WmtsServices] section in the WMS.ini.
  • New feature: New spaccel view capture 1..8 [<file_name>] which saves selected view window contents as raster file or puts it into clipboard (when no <file_name> was specified)
  • New feature: WMS.ini new settings imagescale for WmsServices layers only — to increase/decrease requested raster resolution, thus trading detail over network speed (1.0 used by default and stands for 1-pixel in raster maps to 1 pixel on screen. Value 0.5 would map 1 pixel in raster to 4 pixels on screen.)
  • New feature: More intelligent check for front/back/left/right view orientations, when basemap layers should not be visible
  • New feature: Element Info Tool dialog box preserves scroll position and allows to collapse upper and lower areas with element information
  • Fix: Allow to zoom-in by mouse wheel only when cursor flies over the view window
  • Fix: MSVC-2022 build had instable behavior due to newer Qt got a newer qHash() algorithm
  • Fix: DXF export of hatch elevations for hatches not-parallel and parallel to XoY plane
  • Fix: WMS.ini is re-read before displaying the list of WMS providers in GUI (so that to show latest user changes into WMS.ini)
  • Fix: WMS.ini is no longer read-only on first Spatix install
  • Fix: Lock to XYZ and Lock to Grid actions workability restored
  • Fix: Rasters with color table are loaded properly
  • Fix: Disappearance of text elements when internal font (like fastfont) is changed to be italic or bold for existing text element
  • Fix: Non-command spaccels are run in appropriate sequence with command- spaccels when started from spaccels script file
  • Fix: Support spaccel scripts to have empty lines
  • Fix: Current active command's undo state is preserved in Undo stack on CAD file save event so that to consistently manage Undo history cleanup
  • Fix: Element Info Tool dialog box now can show field values which have Unicode characters
  • Fix: Datapoints which are entered by dx= and xy= spaccels are now considered as usual datapoints for next Lock/Snap events that may follow and may use it in operations
  • Fix: Raster reference cache is properly cleared upon remove of rasterref element or when external raster is missing. Caching properly works for more than one view. Image cache folder is changed to be %TEMP%/Spatix/imgcache
  • Fix: Interpretation of "Use CRS" checkbox was corrected
  • Fix: Place Line command restores state of locks after self-restart
  • Fix: Layers used counting for header elements was wrong
  • Fix: English messages typo in Raster references manager
  • Fix: Endless loop in ElmEuaValuesIterate()
  • Fix: ASSERT in ImgRefTableModel::addReference() when zero references are added
  • Fix: Majority of most recurrent recent crash-reports were processed (fixed access violations in object_safe_cast(), WMS Manager, GDAL Export, GDAL Import, Layers Manager, NPE in CadViewWindow handling, etc.)
  • Fix: User manuals PDF auto-generation

API changes

  • New feature: Prototype for WinProcessExtWindowShortcuts() CFace function
  • New feature: StateCmdDatapoint() function to simulate datapoint into the view
  • New feature: Added isUndo flag into Doc_OnEldModifiedFunc() hook function set by DocSetFuncOnEldModified()
  • New feature: Include Doxygen-generated CHM API-docs into Spatix SDK (experimental)
  • Fix: Calling convention for Doc_OnEldModifiedFunc() and SnapFilterFunc() were made INTERFACECALL (see DocSetFuncOnEldModified() and SnapSetFilterFunction())
  • Fix: Mouse wheel events leaking from focused dialog box to view windows
  • Fix: Widget being modified by the user is excluded from the SYNC_INTERNAL_FROM_EXTERNAL synchronization process
  • Fix: include\CadMath\half_float.h header was excluded from Spatix SDK
  • Fix: Check and fix buildability of example apps included into Spatix SDK

spatix v023.002 (2023-03-07, techsupport till 2024-04-01)


  • New feature: New Raster References functionality (available via WMS IxApp)
  • Both Geo-referenced rasters attachment and manually placed rasters are supported
  • Path to raster file is saved either as absolute (in case reference file is on different logical drive), or as relative (in case it is on the same drive with the SPX file)
  • You may use usual Manipulate Tools to adjust raster placement
  • MSVC-2022 build of Spatix supports 16-bit color depth for RGB/BW raster references
  • MSVC-2022 build of Spatix supports ECW file format for raster references
  • New feature: Spaccel scripts execution (you now may pass the text file with Spaccels list to be executed via Spatix command line and via new spaccel command)
  • New spaccel file qnew <file_name> [<seed_name>] — creates new SPX file based on default or given seed (q in qnew stands for "Quiet")
  • New spaccel file exit — exits Spatix (this is in addition to file close spaccel which was available before)
  • New spaccel file save — saves latest changes into the currently opened SPX file
  • New spaccel spaccel file execute <file_name> — loads and runs spaccel commands from text file
  • New Spatix command line option --spaccel <file_name> which loads and executes spaccels from <file_name> upon Spatix startup
  • Text files with spaccel commands may have comments: Lines started with # as a first character are ignored
  • Spaccels sequence read from file would be terminated in case CAD file creation/open error
  • New feature: New Use CRS checkbox (off by default) in the CAD File Settings › CRS settings allows to import vector and raster files as-is (without coordinates transformation)
  • Note: To attach WMS basemap layer you now MUST first go and enable this flag
  • New feature: ToolSettings window for Place Line, Place Polyline and Place Polygon tools allowing to specify line segment length and azimuth
  • New feature: WMS dialogs and some other windows were reimplemented as dockable panels so that save screen space
  • New feature: Ctrl+F12 shortcut assigned to Layers Manager, Ctrl+F11 — for Spaccels windows
  • New feature: GDAL_DATA and PROJ_LIB environment variables no longer used by Spatix to locate GDAL and PROJ data folders.
  • This is not to intersect with other software (like PostGIS) that may be installed on the same machine and have such folders on their own.
  • If you need to override data folders location for Spatix, set up SPATIX_GDAL_DATA and SPATIX_PROJ_LIB environment variables instead.
  • New feature: Element Info command now displays vertices count for big elements
  • New feature: Spaccels for commands that missed any have been defined
  • New feature: New Get Text Attributes tool to pick up actual text attributes from existing text elements
  • New feature: Spatix and other tools Manuals generation was put onto new technological rails (PDF generation from HTML/XML sources)
  • Refactor: Change Text Attributes tool now does not include possibility to change common active element attributes like layer, color, line weight and style
  • Refactor: Menu items and tool tips for CAD and View command names were tuned to be in the same general style for letters case (according to English captions rules)
  • Fix: Disable bold and italic checkboxes for fonts that do not support such styles
  • Fix: Dead loop while adding WMS layer into view having too far zoom out
  • Fix: Crash on GDAL import of files having less than 20 contours
  • Fix: Several icons were tuned to be properly rendered in Windows 10+
  • Fix: View windows are now restored properly upon switching from Tie-points mode
  • Fix: Bug while restoring CRS data from SPX file settings
  • Fix: Delete Linear Part Tool to work predictably in views having perspective projection
  • Fix: Rasters are rendered first in the OpenGL pipeline, so that vectors stay on top
  • Fix: Implement snap for embedded Raster elements
  • Fix: NPE on Spatix start up
  • Fix: Pushed state of Lock command buttons are now updated if lock was set via spaccels
  • Fix: Fixed save/restore mechanism of commands' ToolSettings window size
  • Fix: Memory corruption on DXF import of hatches that have more than 5000 points for contours
  • Fix: Memory leak in Phototools
  • Fix: Issue of skipping the first element in case of KML format import via GDAL
  • Fix: Added GDAL to the spx2dwg distribution package
  • Fix: Fixed undo behavior for view commands in stereo mode
  • Fix: Uninitialized memory access in GridDisplayPrepare()
  • Fix: Disable dockability of Style Presets and some other big dialog panels (like ones from WMS IxApp) to the upper and lower docking panes, limit them to only left and right docking panes for user convenience

API changes

  • New feature: VwSetTitle() if called with non-NULL txt parameter would prevent Spatix to update view title on its own (e.g. upon view orientation is changed). Pass txt=NULL to revert control of the view title to Spatix.
  • New feature: New element type ELM_HDR_IMGREF (raster reference) as API (see EldImgrefXXX() API calls in /include/ElmEld/eld.h).
  • New feature: New DocGetModelCRS(), DocSetModelCRSEx() and DocGetModelCRSEx() API calls support explicit manipulation of the "Use CRS" flag
  • New feature: Split SCadView::StageScene and SCadView::StageRefScene rendering pipeline stages into 2: SCadView::StageSceneFirst and SCadView::StageRefSceneFirst, followed by original ones (used to render rasters first)
  • New feature: VwRndrParamsSet() to override view orientation parameters only for current view update operation
  • Fix: SSettings::value() to return default value if not found

spatix v022.008 (2022-08-30, techsupport till 2023-10-01)


  • New feature: WMS layer operations support for undo/redo of transform and borders setup
  • New feature: Read in level names from DGNv7 files
  • New feature: Layers Dialog in Layers IxApp was improved to support keyboard shortcuts for Layers renaming (F2), removal (Del) and insertion (Numpad +)
  • New feature: Preserve export parameters of GDAL Export dialog box between calls witin the same Spatix session
  • New feature: Implemented progress visualization for GDAL import/export processes
  • Fix: GDAL export was fixed to support for formats (GPX, GEOJSON) which require strict order of layers being exported
  • Fix: Calculation of used layers while DGNv7 CAD file open
  • Fix: GDAL Export now treats Symbols at layer=0 as groups — exports their constituents
  • Fix: DGNv7 ScanRun() for better cell components by level visibility control (as it is the case for SPX files)
  • Fix: Stack overflow while GDAL export and some NPE-s
  • Fix: Tune WMS IxApp request headers to fake FireFox (allows to access openstreetmap tiles)

API changes

  • New feature: Dump Used Memory Blocks (into Visual Studio Output window) tool in Debug tools IxApp — works in debug build of Spatix only (DebugTools.ix available in Spatix SDK)
  • New feature: New CFace function DocSetModelCRS() was implemented
  • New feature: lz4 and zlib libraries used by Spatix were upgraded to the latest versions
  • Refactor: Scan() function renamed to ScanRun() for better grep-ability through source-codes
  • Fix: DGNv7 ScanRun() recover support for SP_RET_ELD mode of scan
  • Fix: Removed all references to AppCallHook() which is no longer relevant — EXECUTE_IN_IXAPP() is relevant
  • Fix: Removed hook.h which is no longer relevant

spatix v022.007 (2022-07-20, techsupport till 2023-09-01)


  • New feature: Parallel release of Spatix built with the latest MS Visual Studio 2022 and with updated dependency libraries to the latest supported and compatible versions
  • Qt 5.15.4
  • GDAL 3.5.0 (supports even more vector formats)
  • Proj 9.0.0
  • ERDAS ECW 5.5.0, etc...
  • new Spatix distributive package still includes MSVC2013 crt120 libraries by now so that to preserve old Terra-apps compatibility
  • New feature: Support for CRS (Coordinate Reference Systems) transformations in Spatix while working with WMS layers and vector import/export via GDAL library
  • SPX file now has its own settings for CRS being used — configured via "Edit › CAD File Settings › CRS"
  • CRS definition: several CRS definition formats are supported — see tooltip over "Edit › CAD File Settings › CRS › CRS:" field
  • CRS definition: WKT (Well Known Text) v2 format is supported. WKT v3 is supported in the new MS Visual Studio 2022 build of Spatix by the newer GDAL/Proj dependency libraries
  • WMS raster tiles would be automatically wrapped (re-projected) into SPX's CAD file CRS on the fly
  • "[ ] Transform to model CRS" option for the Import/Export IxApp tools. If chosen, would transform geometry being imported into CRS of SPX file. If not — source coordinates would be used verbatim to create Spatix elements
  • New feature: New tool Export To File — allows export of SPX vectors into various vector formats via GDAL library
  • Supports Shape files, DXF, ADF, geojson, KML, GPX, MapInfo TAB
  • Supports attached User Attributes to be exported (availability depends on output format)
  • Supports reprojection into target CRS
  • New feature: Place Raster tool is no longer experimental (no need to start Spatix with the special command line option to activate it)
  • New feature: Add keyboard navigation into Spatix startup window: arrows to choose file, ENTER to open it, ESCAPE to close window
  • New feature: Text Tools toolsettings window text styles enabled status now depends on the chosen font. If non-truetype font is chosen, 'bold' and 'italic' options are disabled
  • New feature: More spaccels to alter Text styles options:
  • tvknot=cellbottom|underscore|bottom|center|top|celltop
  • thknot=left|center|right
  • tortho=1|0
  • tbold=1|0
  • titalic=1|0
  • tunderlined=1|0
  • New feature: Scale Element tool does not reset the command after accepting the stretch any longer. Allows to stretch further with the same settings
  • New feature: Scale Element tool, added possibility to enter scales manually in the stretch mode
  • New feature: Construct Big Element tool, Make copy option is made accessible
  • New feature: Choose Element tool now supports grid lock when moving selected elements by drag
  • New feature: Measure Tools and Element Info tool made enabled in Spatix read-only mode (when there is no activation or R/O file is opened)
  • New feature: Find and Replace text tool: If text is replaced to empty string, relevant element is deleted from design file
  • New feature: View Pan by keyboard arrow-keys X,Y-step is now configurable. See "Edit › Preferences › Views"
  • New feature: Documentation for administrators about Spatix network activities was included into distributive — see Spatix_SecurityGuide.pdf
  • New feature: Change Text Attributes tool which allows to alter text styles of a selection of text elements
  • New feature: Show measurements in Element Info command, if any are attached to the element
  • New feature: WMS IxApp improvements
  • WMS layers are now stored in SPX files as new type of element: ELM_HDR_WMSLAYER
  • usual Layers Manager can be used to control their visibility
  • new parameters for WMS layer definition in the WMS.ini: maxcachesize, axisswap, minx, miny, maxx, maxy
  • WMS layers created in previous version of Spatix would not be visible — need to be re-created
  • better icons for WMS IxApp tools
  • Map Freeze command that allows to freeze the current state of the map tiles in the design file
  • New feature: Render textured polygons in case appropriate user-linkages are found on elements (experimental)
  • use --feature-enabletexpgons command line option to activate
  • DGNv8 texturing/materials info for elements is partially recognized
  • more details available by request
  • New feature: GDAL_DATA environment variable (if set) would supersede all other means for GDAL data folder place specifications (like wms.ini or \gdal-data folder nearby Spatix EXE module)
  • New feature: PROJ_LIB environment variable recognized in new 2022 build of Spatix would supersede all other means for PROJ data folder place specifications (like \proj-data folder nearby Spatix EXE module)
  • New feature: Add more info messages into status bar for User Attributes Editor tool
  • Fix: Expiration logic for Spatix and PhotoTools now comes in less harsh wording, no close Spatix on message box close, etc.
  • Fix: Enlarge combobox dropdowns for LineWidth and Layer pickers
  • Fix: Some memory leaks in WMS IxApp
  • Fix: Apply LZMA compression for Spatix distributive package
  • Fix: OS-depended slash separator in paths visible in Spatix startup window, main window title, when copying path to currently opened file into clipboard and other places
  • Fix: IxApp DLLs now would be completely unloaded upon IxApp::Stop() command
  • Fix: Style options in Text Tools toolsettings window could appear or disappear unexpectedly (now always visible)
  • Fix: Layer of Text element's glyphs was not preserved while rendering
  • Fix: Text elements color could randomly change when view is zoomed out to extent when text element degrades to simplified graphical representation
  • Fix: Initial GUI item values in Modify Text tool are now taken from located element
  • Fix: Changing of unicode text via Change Text Attributes tool made text element non-unicode
  • Fix: Some settings in Dimensioning Tools toolsettings window now have shared value for all dimensioning tools, e.g. values in color pickers in Dimensioning Tools are now synchronized
  • Fix: View rotation sub-toolbar may have become inaccessible in case camera view rotation was last active choice and then camera view was cancelled
  • Fix: Possible crash when opening Find and Replace tool
  • Fix: Spatix would build a raster pyramid cache in %temp% directory for raster elements displayed in views if their size is greater than 1 megapixel (1000x1000px)
  • Fix: Remove Spatix startup warnings which popped up in the log window and induced questions from users
  • Fix: Space char of GOST fonts were rendered as visible dot
  • Fix: Measure Coords Delta Command of AdvVecTools IxApp pivot point and cloud point terms were mixed up
  • Fix: Some visual artifacts could appear under main cursor on some devices
  • Fix: Latest active Snap Point is being reset (if there were one) upon start of new Spatix command. Otherwise snap point made in previous command could affect the new one
  • Fix: Tab-order was corrected in some of GUI windows
  • Fix: Performance improvements of new View window open operation
  • Fix: Trim to Element tool behavior when snapping to the element's center was fixed
  • Fix: Snapped-to element would now become the first candidate for the further Modify command
  • Fix: Extend Segment tool when extending element by fixed negative length in some cases had incorrect behavior
  • Fix: Set of drawn element types allowed to be located by Modify Tools were not possible to override from within IxApp -based CAD Command implementations
  • Fix: ViewCommand started via CFace API (not by QAction associated with a toolbar) was not properly cancelled by StateCmdStop()
  • Fix: Inconsistent Spatix behavior in read-only mode: can manage layers, can save views to CAD, but cannot use Element Information and Measure tools
  • Fix: IxApp subtoolbars could appear incorrect when opening them from Application menu (fixed by new way to form toolbar settings name for subtoolbars)
  • Fix: Improved errors reporting on SPX file save operations in case there is no free space available or media is read-only
  • Fix: Improved errors reporting in case OpenGL resources are not enough to create View window (as a result of "window becomes white" feedback report)
  • Fix: Many possible reasons of Spatix crash registered in crashdumps were eliminated
  • Crash in ElmLinearProcessVisiblePieces() in case of rectangular selection over isometric view of pasila.spx
  • Crash on close of ViewParamsPresetsDialog when no document is open (from crash-reports)
  • Crash on exit due to unload of DLLs having font.setFamily(QStringLiteral("Courier New")) in UI
  • Crash on "[v] make copy" click in Mirror tool
  • Crash on reference of unloaded library data in SPATIX_DETECT_MEMORY_LEAKS_ON mode
  • several NPE-s, and more...
  • Fix: Several problems in PhotoTools
  • distortion was applied multiple times to the various scales of the same image
  • there were some memory leaks
  • performance optimizations
  • GDALRasterFile to open GDAL driver in GA_Update (not read-only) mode when TIFF write IO is required
  • Fix: Remove logging "Sending dumps to dump server" into console if none dumps are to be sent
  • Fix: DGNv8 to SPX conversion of elements that lay on unknown layers
  • Fix: spx2dgn VBA module was not saving level table changes into DGN
  • Fix: View windows after tiling are sorted in activation history order
  • Fix: dx= spaccel not to include global origin into typed in values
  • Fix: dx= spaccel to pick up the last Tentative point (if currently active) as a reference
  • Fix: dx= and xy= spaccels to cancel currently active Tentative point (if any), so that simulated datapoint would not go into tentative position
  • Fix: sequential execution of spaccels was broken
  • Fix: crash on Spatix startup in case Spatix Welcome window is set into [v] doNotShowAgain mode

API changes

  • New feature: DrawRasterStereo() CFace function which draws 2 rasters onto a stereo view
  • New feature: New SpatixReadOnlyCommand class. Derived commands stay enabled in Spatix read-only mode (when there is no activation or R/O file is opened). Some fixes into SActionManager and SpatixToolbar for that
  • New feature: ExpStrEncoder — a new tool to encode expiration-related messages into #define- messages
  • New feature: Introduced SnapAwareLocationEnumerator which extends logic of processing of snapped elements. Snapped element (if exists) would be the first returned by the SnapAwareLocationEnumerator
  • Location CFace API and SpatixCommand descenders now use SnapAwareLocationEnumerator
  • Refactor: Hide private static member of CFaceRenderExtension from public CFace API
  • Refactor: Use of raster images in GLTexturizer was optimized for less memory consumption
  • Refactor: All access to SpatixApp::instance()->activeDocument() to be done via SCadDocument::ActiveDocument() and with not-NULL checks of result value
  • Refactor: SpatixSDK switched to use dump_syms_1900.exe to generate *.SYM-files. It works faster
  • Refactor: Many changes to CMake build system for Spatix due to MSVC-2022 support and dependency libraries update
  • Fix: Spatix now calls hooks set by DocSetFuncOnEldModified() for every IxApp that set one
  • Fix: Reading R,G,B color components in corect order in ColorReadTableFromFile()
  • Fix: EldMetricsAtPoint() was fixed for arc and ellipse elements when given point coincides with element's origin
  • Fix: EldDistanceAtPoint() calculation of projection point was fixed
  • Fix: Switch back to Win32 API's implementation of OsFileXXX() API (see COMMONS_USE_QT_FILE_API def), since Qt's implementation does not correctly handle boundary cases (e.g. write to full disk, write to read-only disk, etc.)
  • Fix: Disable separate especial handling of not-yet-modified SPX file SaveAs command case (since implementation based Qt's file API does not correctly handle boundary cases)
  • Fix: Several fixes/improvements in Debug Tools
  • GUIItemsInfoDlg to show target widget by flashing red frame in correct X,Y position in case widget is a free-floating window
  • Debug Tools Element Info Command and Main Tools Element Info commands to properly and seamlessly handle highlight of selected elements and toolsettins dialog manipulation
  • Blinking rect which highlights target QWidgets in Debug Tools GUIItemsInfoDlg made to be transparent
  • Fix: SpatixCommand destructor to be called in the context of the relevant IxApp
  • Fix: On Spatix close IxApps will be deleted in reverse order than they were created
  • Fix: Remove Spatix tests dependency on BOOST libraries

spatix v022.001 (2022-02-04, expires 2023-02-28)


  • New feature: 3 minutes after start Spatix would check if new version is available, and if it is — inform user with the non-modal dialog box about that
  • New feature: New WMS IxApp displays cartographic 2D raster tiles (google maps, yandex maps, etc.) in views
  • WMS v1.3.0 and TMS layers are supported
  • Currently only ESPG:3857 coordinate system is supported
  • Map layers are configured in config\wms.ini -file
  • WMS.ix is included into installation package and into autoload IxApps
  • Setup orientation of map Tool allows to place map layer within Spatix world coordinates system
  • Setup WMS-layers of view Tool allows to add WMS layers into the views
  • Map orientation and enabled layers settings are saved in the SPX file
  • New feature: User Attributes toolset: Pick, Assign, Clear user attributes tools:
  • Allow to edit EUA- user attributes attached to elements (e.g. those that shall be imported from Shape files)
  • Support for Presets of attributes (tuples)
  • Support elements location by selection and by clipper
  • New feature: Shortcuts and spaccels can be saved and loaded as *.ini files from "Edit › Shortcuts" dialog box
  • New feature: Stretch mode for Scale Element tool
  • New feature: Choose text elements by substring in Choose Elements tool (supports regular expressions as well)
  • New feature: Find and Replace text tool (can work globally, over selection or clipper)
  • New feature: More fine control over the view zoom factor by the mouse wheel:
  • Added "Zoom factor on mouse wheel" preference into "Edit › Preferences › Views"
  • Alt+Wheel now means zooming in/out view with a half factor
  • Added options for smaller zoom factors into View Zoom tool settings
  • New feature: Measure Element tool would now calculate length of big lines and area of big polygons (arc segments not completely supported yet)
  • New feature: Command line parameters to enable logging of internal Spatix events to file (useful for remote problems diagnostics)
  • New feature: Spatix Expired dialog box is no longer modal (but still will close Spatix on OK). You may move it outside the screen and continue working.
  • Fix: Improved status bar info messages in Scale Element tool
  • Fix: Crash in PhotoTools when Spatix is closed
  • Fix: Construct Big Element and Break Big Element tools improvements:
  • Construct Big Element bug when symbol is built instead of chosen element type in the combobox when using selection
  • Always restart Construct / Break Big Element command on Reset
  • Disabled possibility to use ELM_HDR_BIG_LINE element as a part of another one
  • Allowed to choose unclosed elements when trying to construct polyhole by locating elements
  • Eliminate memory leaks in Construct Big Element tool
  • Disable possibility to construct polyhole from a single element (when locating by clicks or using selection)
  • Restrict construction of polyholes without holes when using selection (this also fixes 'auto mode' behavior)
  • Possible crash when trying to click on one element in Construct Big element tool
  • Typos in Construct big element tool info message
  • Fix: Text elements display and highlight functionality was broken (wrong color and line style were chosen)
  • Fix: Place Raster tool to draw rasters in dynamics when placing several rasters at one time
  • Fix: Annoying lag when trying to dock toolbar to dock area in some cases
  • Fix: Correct tabstep order in some GUI dialogs
  • Fix: crash in Dimensioning Angle by Elements tool (new way to compute lines intersection)
  • Fix: Scale in Export DXF tool now is pre-multiplied by resolution factor

API changes

  • Refactor: Improve performance of raster elements visualization even more (cached degradation pyramid implemented)
  • Refactor: Improve diagnostics and recoverability of SPX-files that were not completely saved due to too long compression process (user did not wait and killed Spatix)
  • New feature: PtIsOnLine() in CadMath to check if point lies on line defined by point and vector
  • New feature: PtIsOnLineEx() in CadMath to check if point lies on line defined by 2 points
  • New feature: Isect3dLineByLine() in CadMath to search intersection of two 3D lines

spatix v021.010 (2021-10-15, expires 2022-12-31)


  • New feature: New independent installer for PhotoTools. Installer will locate currently installed Spatix path and install PhotoTools there
  • New feature: Improved toolbars
  • Preserving position of IxApp toolbars inside toolbar area
  • Now toolbar will be shown in floating state on the first IxApp launch, so that user may move it wherever he or she wants
  • Preserving position of Spatix toolbars (Symbology, Snaps, Locks, File)
  • New feature: Place Raster improvements
  • Improved Place Raster logic: now user should accept operation before placing raster
  • Support for World files with raster coordinates (stretching and translation is supported, rotation is not)
  • Support for Unicode symbols in file paths/names when loading rasters
  • New feature: New Delete Linear Part tool from ManipulateTools
  • Supported elements: ELM_LINE, ELM_PLINE, ELM_PGON, ELM_ARC, ELM_ELLIPSE, ELM_HDR_BIG_LINE, ELM_HDR_BIG_PGON, ELM_BSPLINE2
  • New feature: GUI Items Info tool for DebugTools (included into SDK)
  • Fix: Improved PhotoTools stability and localization:
  • Fixed several issues which could cause crashes (start/stop, opening/closing view)
  • Now both . and , are supported for entering floating point numbers
  • Fix: Improved stability of Place Raster tool
  • Fixed several memory leaks
  • Fixed crash when Pan (for example using middle mouse button) is used during placing image for the second time or further
  • Fix: Fixed memory leaks when interrupting commands in most of ManipulateTools
  • Fix: Several fixes in UI behavior
  • Adjusting floating widgets positions on available screen area change (toolbars and dock widgets should never disappear outside of screen area)
  • Move tools sub-toolbars into the visible area if they can't be accessed by user (e.g. because screen[s] configuration has changed)
  • Perspective View dynamics cube is now drawn in visible view center
  • Reverted meaning of arrowkeys when used to pan view window. Arrow keys shall now move the view over design, not design inside the view
  • While some Qt text-input-widget was focused and arrow keys were pressed the active view content was also moved. Now view contents will stay still
  • Fix: Addressed critical errors from log window which triggered it to appear on screen and confused users
  • Removed empty errors when working with PhotoTools
  • Removed error about _datapointCallback
  • Removed errors when IxApp is restarted
  • Fix: "Chained" spaccels with xy= or dx= expressions after command start (like place block; xy=0:0; dx=100:100) will now work again as expected with correct coordinates

API changes

  • New feature: Introduce SpatixColor into Elm structure — by now as union-s over existing fields (not to break the backwards compatibility)
  • New feature: Implemented support of Unicode strings with surrogate pairs (Emoji etc). (FNT_USE_UNISCRIBE must be defined)
  • New feature: Improved support for rasters in rendering API
  • Visualization implemented by usage of GLTexturizer
  • Implemented a cache of decompressed images and prepared textures
  • Implemented clipping by visible area of image (IMAGES_PAINTER_PREPROCESSING needs to be defined to activate it)
  • Fix: KLUDGE in sx_cad_routines.cpp
  • Fix: Improved EldDistanceAtPoint() to process elements which need to be stroked first
  • Fix: Processing CMNDLG_MULTISELECT flag in DlgQueryFiles() to allow selection of multiple files
  • Fix: Processing DLG_FLOATONLY flag in DlgOpenS() to allow placing of floating windows

spatix v021.008 (2021-08-18, expires 2022-12-31)


  • New feature: Restored support for TrueType fonts to be used for ELM_TEXT elements in Spatix
  • Works fine only if the same-named TT font is installed on all computers where same SPX-file is opened, otherwise degrades to fastfont
  • FontID to font name and font-style map yet to be stored within SPX-file settings to improve SPX-files portability
  • New feature: Filled elements in onDynamics() draw now look semitransparent (allowing user to control the vertexes placement over background in Place tools and Manipulate tools)
  • New feature: New spaccels to set up active element styles: lr=, co=, ls=, wt=, fill=, fillco=, th=, font= (se Spatix manual for more details)
  • New feature: Preserving toolbars state on Spatix restart (partially) even if appropriate IxApps are not loaded on startup or are loaded in different order
  • If toolbar is floating then its global position on the screen will be restored
  • If floating toolbar is not visible with current display set (e.g. when one of monitors was disconnected between Spatix sessions) then toolbar will be moved to the display on which main window is currently located
  • If toolbar is in a group (pinned to another toolbar to form an island), it will be restored in that group
  • If toolbar is docked to one of the toolbars docking area then it will be restored at this toolbar docking area (left/top/right/down)
  • Upon show, floating toolbar would readjust themselves to fit the display area that is currently visible
  • Position of toolbar inside particular toolbar docking area is still unpredictable (both for "docking line" and "ordering within a docking line")
  • New feature: New IsHidden=true setting per IxApps in the [MiniAppsSettings] INI-file section would hide IxApp from menu. In case all IxApps of one group are hidden — no group menu is shown
  • IsHidden=true was embedded by default for build-in IxApps for new clean installations of Spatix
  • New feature: New Spatix command line options --log-fatal, --log-error, --log-warning, --log-info, --log-state, --log-debug, --log-more, --log-evenmore, --log-signal to override the current debug level which was set up in DebugTools
  • New feature: DXF import using DXF import/export tool would not reuse existing layers, unless the layer name matches. Unique layers imported from DXF would go under the common header layer named as this DXF file.
  • New feature: Now DXF_ReadHatch() would read Hatches with polyline boundaries (there was a support request for that)
  • New feature: Automatically open log window on any fatal error message instead of modal message box (useful for tracking failed spaccels)
  • Fix: less strict rotation matrices comparison — to add Std rotation names more likely into view window captions
  • Fix: Std view rotation names now have priority over saved view presets when choosing view caption text
  • Fix: hide Main Tools Place Raster tool from GUI in case no --feature-showdebugelems command line option was specified
  • Fix: Measure Element tool to attribute 0-length lines as points
  • Fix: ColorTable export into ASCII 0-255 *.pal files format is made compatible with JASC-PAL color table files format
  • Fix: Menu items for IxApps that are unloaded from sub-menu group no longer disappear (allowing to load them back again later)
  • Fix: Memory leak in EtiText_TextGetGeometry(), DXF_ImportHatch(), publishIndentifier(), in Dimensioning tools while calling FntGetRegisteredFontNames() and a huge one in fnt_glyph_geom.cpp
  • Fix: Proper clipping of ELM_BSPLINE2 by view window boundaries
  • Fix: Incorrect extend segment towards snap point by Extend Segment tool
  • Fix: Rare case when Spatix toolbar may stay condensed (too small) when dragged off the docking area into the floating state. There was no way to enlarge it.
  • Fix: Rare case when floating Spatix toolbar would not glue into island since overlaps to toolbars being docked nearby
  • Fix: Trimming arc to arc in some cases could fail (reduced accuracy when comparing coefficients of the "arcs intersection equation" to zero)
  • Fix: Curve being a part of big line can't be chosen in Extend Segment tool (since ELM_CURVE has no means to be extended yet)
  • Fix: Now polygon can be trimmed only if intersection point is lying on it's segment
  • Fix: Order of saving/loading view state settings from SPX-files was broken. Now view windows geometry and indexes should be correctly saved/restored (there was a support request for that)
  • Fix: Added support for ELM_ARC when extending big line element ends using Extend Segment tool
  • Fix: Several fixes that probably address problems from crash-reports:
  • exception in LyrCreate()
  • exception in DXF_WritePolyline()SCadDocument::ActiveDocument()
  • exception in DXF_Import()SCadDocument::setColorTable()SPubIdentifier::data()
  • Fix: All toolbars now have proper names (so that could be referred to)
  • Fix: Intermediate rendering in stereo mode caused crashes of TS software in stereo windows
  • Fix: Element Information tool — transient highlight of element was not cleared off upon switch to another command
  • Fix: SpatixStartupWidget dialog box that asks which file to re-open on startup no longer blinks
  • Fix: Invalid warning message about CadCommand not started appeared in the log while starting up CadCommands from C-based IxApps
  • Refactor: More accurate definition of hit point in Trim to Element tool
  • Refactor: Simplify the generalized geometry needed for simplified rendering of zoomed-out-too-far text elements
  • Refactor: Speed up FntGetGeometryU8() and FntOutlineToEld()

API changes

  • Fix: Move DUMP_MEMORY_LEAKS() to the latest step of atexit() processing, so that to properly catch destructions of static variables in the debug Spatix build
  • Refactor: Font typeface names are now handled as UTF8 string throughout the API

spatix v021.007 (2021-07-23, expires 2022-12-31)


  • New feature: SPX2DGN separate tool (not bundled into Spatix distributive) — a MS VBA project which imports SPX files into currently open Microstation DGN
  • New feature: Element's Information Tool would now show element attributes attached to element by ImportExportTools IxApp while GDAL-based import
  • New feature: Name of the standard view rotation or view preset name now is visible in the view window caption
  • New feature: New Main Tools › Place Raster tool — to place ELM_HDR_RASTER from file or from clipboard. (Use command line --feature-showdebugelems to activate experimental support for ELM_HDR_RASTER)
  • New feature: Extend Segment tool, Trim to Element / Intersection tool now supports ELM_ARC elements
  • New feature: PhotoTools now would read/write GeoTIFF format (including resolution pyramid) via GDAL integration
  • PhotoTools was refactored to consume less memory while dealing with huge photos
  • New feature: Ability to edit entries and import/export ColorTable. See dialog "Edit › CAD file settings... › Color Table". Several palette file formats are supported:
  • binary-RGB, binary-BGR
  • ASCII 0-255 triplets, ASCII 0.0-1.0 triplets
  • XML AutoCAD color-book (online editor: https://download.autodesk.com/global/acb/index.html)
  • New feature: GUI to copy parameters from existing views and/or other presets while defining View Parameters Presets. See dialog "Edit › View Params Presets..."
  • New feature: GUI to add elements into selection by thir IDs. See "Choose Elements Tool › Element ID" tab.
  • New feature: Restored support for ELM_BSPLINE2 element (from SpatixC era), snap modes support for it, and tools to create/manipulate it — needed to revert TrueType fonts support
  • New feature: Improve the Spatix settings userconf.ini files organization
  • support to extend settings by *.ini files taken from read-write "include"-folders (useful for adding more tools into auto-run while tool setup process)
  • support to extend settings by *.ini files taken from read-only "overlay"-folders (useful for company admins to fix/override some of the settings or groups of settings)
  • also sections of userconf.ini now can be extracted into separate *.ini files (e.g. useful for sharing shortcuts definitions among users)
  • possibility to say the place where user settings should be taken from in the Spatix command line option: --config-dir c:\path_to_config_folder
  • the userconf.ini in the current Spatix installation package was not yet refactored to use this improvement
  • Spatix installation package would create a _backup_DATE folder with the previous userconf.ini and other *.ini files
  • New feature: Add grouping of IxApps (second level into menu of IxApps) that were added via separate *.ini files during installation. Add GroupName= key into [MiniAppsSettings] section in custom ini-file to give a group a name.
  • Fix: discover and fix many memory leaks with the new _DEBUG-build approach (especially Eld container -related)
  • Fix: F1-F12 shortcut keys workability for Terra apps
  • Fix: abs() to fabs() usage in Extend Segment Tool
  • Fix: ElmMeasure() fix for arc length and ellipse circumference calculation
  • Fix: Some Qt GUI refresh performance improvements
  • Fix: NPE in font_lib in case DGN7IO CadFile provider DLL was not loaded
  • Fix: Invalid floating point value separators (commas) in PhotoTools configuration files for some locales (i.e. Finnish)
  • Fix: ImportExportTools GDAL-based import to recognize national letters in file names and feature attributes/values
  • Fix: Activate Spatix main window (if it is in background) by first click inside any View window
  • Fix: Fix TIFF format pixels format interpretation inside Qt library qtiff.dll
  • Fix: Review all Spatix Toolbars and sub-toolbars to have non-empty caption in the floating state
  • Fix: Break Element tool, Extend Segment tool and Dimensioning Tools would now allow to locate only those element types that support relevant operation
  • Fix: No window flickering in ElementInfoDlg
  • Fix: Import/Export Tools — Temporarily set current directory to GDAL source file's directory to support relative paths while import of VRT file format
  • Fix: 0-length line is now attributed as "Point" in the Measure Element tool
  • Fix: Changed Trim to Element / Intersection Tools logic: now they find intersection with respect to current view projection/orientation parameters
  • Fix: Dimensioning Segment Tool for points and 0-length polylines — tool now ignores such elements
  • Fix: Adjust floating SpatixToolbar to be located in the visible screen area on show (no longer toobars stay locked to no longer connected monitor)
  • Fix: Save absolute file paths to recently opened CadFiles into the settings — recent files are no longer lost if you run Spatix from different locations
  • Fix: Trim to Element tool now properly cleans up Transient geometry
  • Refactor: Changed angle locating sequence in Measure Angle and Dimensioning Angle tools (first click is first end-point › then, center point › last — second end-point).
  • Refactor: Break Element Tool command sequence made to be more clear/responsive to users: added onAccept() hook, added onDynamics(), added info messages in status bar, new way to choose break point on the element: via perpendicular from current dynamics point with respect to view orientation
  • User manual was not yet updated to reflect above changes

API changes

  • New feature: implemented some of the MISSINGFEATURE-s in sx_xxx layer: ElmIsViewIndependent()/ElmSetViewIndependent()/VwSetGrid()/CadDocumentSave()
  • New feature: C++ Lambda-functions for running code snippets onIdle(), onDelete(), etc.
  • onIdle() — lambda will be called only once upon main Spatix messages loop has nothing to do (useful to thin out calls about GUI updates)
  • onDelete() — lambda will be called upon destruction of the relevant object (useful to define clean-up code nearby to set-up code)
  • New feature: First version of CFace API to work with system clipboard (for now only texts and images are supported). See include/CFace/clipboard_fdf.h
  • New feature: PhotoTools, SpatixRendering — a big refactoring of the texturization engine to maintain loading of textures which size is greater than GPU supports (splitting them to pieces)
  • New feature: Spatix Toolbars C++ API improvements when using custom layout: insert actions, widgets, separators
  • Fix: Avoid recursive call to dynamics during public identifiers synchronization if dynamics call is currently already being processed (i.e. when pub. idents are synchronized inside dynamics hook)
  • Fix: File extensions filter in DlgQueryFiles().
  • Refactor: Hide SiXXX() SScannable interface-callers into CadIO module (stop using them throughout the project), ScannableXXX() CadIO module public funcs are to be used instead
  • Refactor: Remove redundancy in ElmRead()/EldRead()/EldReadEx() function names, read() methods of SScannable and ScannableReadElm()/ScannableReadEld() proxy funcs of CadIO
  • Refactor: Remove redundancy in many versions of append()/write()/remove() members of SCadFile in favor to ElmWrite()/EldWrite()/ElmDelete() semantics

spatix v021.005 (2021-05-06, expires 2022-05-31)


  • New feature: GDAL import now supports conversion of attribute values into text element
  • New feature: GDAL import now allows to specify the character encoding being used in vector files which are imported (if one was not recognized)
  • New feature: Added info messages for all dimensioning tools.
  • New feature: Added precision setting in Dimensioning Tools.
  • New feature: Spaccels view open N / view close N / view toggle N to control view windows
  • New feature: spx2dwg: saving / restoring the structure and attributes (EUA) of elements while export / import SPX file format
  • New feature: Added settings for choosing 3D cursor mode in views into the preferences dialog box
  • New feature: Callout is now drawn when placing area label out of polygon in Dimensioning Area.
  • Fix: Removed invalid error messages after executing spaccels for TS apps
  • Fix: Improved dimensioning tools command sequences to avoid double-clicking in some cases.
  • Fix: Do not draw invisible elements whose linewidth=0 and isFilled=false
  • Fix: Check and fix setting up final element styles while rendering elements
  • Fix: Change Attributes now would update By-Layer flags in the element
  • Fix: Tune tab-steps order and layout for toolsettings windows of some tools in the ManipulateTools IxApp
  • Fix: FntMeasureStringFast() now will take into account all X,Y and Z rotations for text element
  • Fix: Export DXF tool results now can be opened by Microstation and AutoCAD (refactored handles generation)
  • Fix: Initialize uninitialized ELM_TEXT members in ElmTextCreate() functions
  • Fix: Dump unicode text properly in DebugTools Element Info tool
  • Fix: First figure is now choosable in Place Figure Instance tool
  • Fix: rgb() inline func for correct b,g,r order of fields in RGBColor struct
  • Fix: NPE in isSnapModeAvailable() — there were crashreports about it
  • Fix: NPE in ElmFindSymbol() and ElmFindFigureDef() — there were crashreports about it
  • Fix: Some of memory leaks were eliminated

API changes

  • New feature: AppExecuteShortcut() function to pass WM_KEYDOWN event to underlying Spatix window system giving it a chance to execute shortcut if such shortcut for a key (including modifiers) is registered in Spatix
  • New feature: Design for a new SpatixColor descriptor concept (to be used to implement RGB colors in SPX-files), tune HSVColor structure
  • Refactor: Some optimizations in the ColorRgbToHsv() and ColorByRgb()
  • Refactor: Get rid of kludge RGBToUInt() and RGBFromUInt() macros
  • Refactor: Change linewt_t from 16-bit to 32-bit uint
  • Fix: EldGetSymbol() for proper applying of transformation (yet needs to be tested)

spatix v021.004 (2021-04-13, expires 2022-04-30)


  • New feature: FigureTools IxApp workability restored (ported from SpatixC), FigureTools added into the distro
  • tool to create figure definitions
  • tool to place figures based on figure definition
  • "figure-libraries" are not yet supported, all figure definitions are stored in the same (currently opened) SPX file
  • no tools to "re-define" figure definition
  • New feature: PhotoTools — restored workability of this tool (not included into the distro)
  • New feature: PhotoTools — added expiration
  • New feature: spx2dwg — AutoCAD app now is able to export currently open DWG into SPX file format (not included into the distro)
  • New feature: Dimension area tool
  • New feature: Dimension Angle by Elements tool.
  • New feature: improve responsiveness of mouse operations in View over RDP
  • new preferences parameter (category: "interface") — if mouse coordinates to be updated on every mouse move in the status bar (if enabled, this does not cause refresh of the whole SpatixMainWindow from the backing store on every mouse move)
  • disable costly formatting in SpatixCommand::updateAppStatusMessage() in case cursor coordinates are not to be shown
  • disable backing store and background paining for SCadView widget and its parent (a scroll area whose client area is completely occluded by SCadView OpenGL window)
  • improve userconf.ini settings for using OS cursor in RDP mono mode. Set SCadView_use3dCursors=always/never/auto in userconf.ini — to force WinAPI or 3D cursor.
  • Fixed: GdalConverter — missed break in switch()
  • Fixed: incorrect line style applying in Dimensioning Tools.
  • Fixed: dimension styles applying in Dimensioning Circle (for callout).
  • Fixed: copy unrecognized types of user data linkages while converting from DGNv8
  • Fixed: extending ELM_LINE by fixed value.
  • Fixed: Main units instead of world units in Extend Segment tool.
  • Fixed: memory management by CommonElmSmartPainterBuffer class
  • Fixed: Some DXF import/export improvements:
  • remove dangling layer_name pointer
  • improve write-out 64 bit doubles in ASCII mode (remove trailing 0-z after decimal dot in double values)
  • TrimString() improvements
  • Avoid redundant call to refillActiveLayers()

API changes

  • New feature: Added polygon area calculation to ElmMeasure (now polygon area can be calculated via Measure Element).
  • New feature: new check in Elm/EldSetAttr() for data fit into ElmUserAttr structure (see ELM_UATTR_DATA_MAX_SIZE)
  • Refactor: improve EldGetPlane() and ElmIsFlatPlane() performance for orto-parallel cases
  • Refactor: move standard rotations to CadMath from SpatixCore\CadView
  • Refactor: optimize DRngSet memory consumption
  • Refactor: optimize EldSplitByPlane() memory consumption
  • Refactor: replace SLayerSet definition from Maybe<QSet<lyrid_t>> towards BitMask — less conversions during rendering operations
  • Refactor: registerPreference() parameters reorder for convenience

spatix v021.003 (2021-03-07, expires 2022-03-31)


  • New feature: DimensioningTools IxApp which includes tools:
  • Dimensioning Linear
  • Dimensioning Segment
  • Dimensioning Diameter
  • Dimensioning Radius
  • Dimensioning Angle
  • all Dimensioning tools currently create Symbol with child geometry. Support for special-purpose ELM_HDR_DIMENSION element type is not yet implemented
  • there are no tools to modify created dimensioning yet
  • New feature: New "Place callout" tool in TextTools IxApp
  • New feature: Import into Spatix variety of vector file formats using GDAL library. Supported and tested formats:
  • ESRI shape files,
  • Google KML (but not KMZ yet),
  • GEOJson,
  • GPX (GPS eXchange),
  • Mapinfo TAB -files,
  • SXF, and some others. Actually, more formats are supported, but not properly tested yet
  • projections management and coordinate transformations are not supported yet. Coordinates are imported as-is (with only uniform scale factor possible)
  • exporting of the same data is not implemented (yet)
  • GDAL library and its dependencies are included into distributive
  • ESRI Shape files may contain 4-th D "Measure" value. It is imported as a user-linkage attribute embedded into Elm structure
  • Many vector file formats come with relational attributes database. Relational attributes are imported as user-linkage attributes embedded into top-most (header) Elm structure. New special-purpose API was designed for working with relational attributes attached to Elm-s
  • GDAL provides element styles abstraction, which was not fully mapped yet at Spatix element styles. Original GDAL-provided styles are imported as user-linkage attributes embedded into top-most (header) Elm structure (not to lose this data) (Experimental, this may change in future)
  • GDAL also provides support for variety of raster files import. This is not implemented.
  • Updated About dialog about GDAL dependency, Spatix legal notes (incl. installer)
  • New feature: pre-relase (experimental) features included into the release build of Spatix could be activated via command-line. Currently the following features could be activated:
  • --feature-showdebugelems — debug elements in SPX file are rendered the in views. So far pre-release debug elements are: ELM_HDR_RASTER, ELM_HDR_DIMENSION. Internal binary structure of these elements may change in future w/o backwards compatibility
  • --feature-enablereffiles — show "File › Ref files › attach/detach" menu, allowing to attach vector elements files to the main opened SPX file
  • New feature: (experimental) Add support for ELM_HDR_RASTER in SPX files (use --feature-showdebugelems command line option to activate this)
  • No GUI tools to create those in Spatix yet, but such rasters are properly imported from DGNv8 (where they can be created by Ctrl+V of raster data from clipboard into Microstation)
  • New feature: (experimental) Add support for vector reference files to be attached to the master file
  • Not yet tested well, use --feature-enablereffiles command line option to activate this
  • No GUI tools to properly control attachments yet
  • New feature: coordinate system setup shall be properly converted while reading DGNv8 files (rev.-eng. Dgn8ModelHeader stream)
  • New feature: SPX2DWG standalone freeware tool which could be used to import SPX files from within the AutoCAD into the current DWG document (can be downloaded from https://spatix.com/downloads)
  • New feature: Apply BIG-line and BIG-polygon styles to all their components in the "Construct Big" tool of ManipulateTools IxApp.
  • New feature: Every DLL and EXE module now are provided with the proper VersionInfo@Win32 resource
  • Fixed: visual align of "View Attributes › Grid Settings" Dialog Box, provide Main Units labels
  • Fixed: grid to be drawn to real MainUints scale. So, grid now allows creation of precise to-scale geometry
  • Fixed: MDI ChildView windows to move as "rubber-bands" on mouse-drag (in this case MDI child window does not go into "crazy dance" while dragging)
  • Fixed: MainToolsCpp "Element Info" tool not to skip every odd header property
  • Fixed: "Preferences › Application › Interfaces › Recently opened files count" settings to support up to 100 previously opened CAD files
  • Fixed: "Extend Segment" tool of ManipulateTools IxApp to create ELM_LINE instead of ELM_PLINE when extending a simple line.
  • Fixed: precision while coordinates readout from UORs (old structures are yet in place — not to break compatibility with current Terra-apps binaries)
  • Fixed: "Measure Distance" tool to work more predictable
  • Fixed: problem with opening sub-toolboxes from the "Applications" main menu
  • Fixed: "Edit › CAD File Settings" dialog for correct and proper Coordinates setup
  • Fixed: the appcrash in the GLPainter::drawImage() from the crashdump reports. This is another attempt. This one has a good chance to be the last.
  • Fixed: the appcrash in the CoordinateAdjuster::isSupported() from the crashdump reports.
  • Fixed: the appcrash in the EldIsSelectedByRect() for 0-component big elements.
  • Fixed: the appcrash in the EldReplace() to zero **pelmd pointer
  • Fixed: "symbology" to be renamed as "element styles" where it was still visible in Spatix GUI (not yet fixed in API declatarions)
  • Fixed: assertion in Layer Manager for wasSelected
  • Fixed: blank button icon in "Element Style Presets" tool.
  • Fixed: initial "Create Preset" dialog box position for 2-monitor configuration.
  • Fixed: the appcrash since map->layerSymbology(id) could return NULLs — since crashdumps contain related NPE-s
  • Fixed: the appcrash since NPE in ~CFaceRenderExtension() from crashdumps
  • Fixed: the appcrash since NPE in Eti_FigureGetGeometry() from crashdumps
  • Fixed: the propable appcrash since NPE in EldCalcListMbrSetHdr() from crashdumps
  • Fixed: EldResize() and EldShrinkMem() to properly update myHeader links for Eld children
  • Fixed: EldOffset() incorrect behaviour for 0-component big elements
  • Fixed: EldDuplicate() incorrect behaviour for 0-component big elements
  • Fixed: AppFree() to be a linkable "C" function instead of a macro which expands to free()
  • Fixed: memory buffer overruns and uninitialized memory access in TextTools
  • Fixed: Spatix Telemetry client-side algorithms: PID added into local filenames, local locking while Telemetry send-out, datetime formatting fixes for strange time-zones
  • Fixed: memory leaks in ElementUserInfo tool and not freed Scannable handles in STransientController and DefaultSelectionSet
  • Updated icons for DXF IxApp
  • Updated icon for Measure Angle tool
  • Updated user manual is included into distributive

API changes

  • New feature: add possibility to see structure member offset and size in DebugTools IxApp's (which is included into SDK) Element Info command
  • New feature: improve precision of CadFileSettings::worldsPerSubUnit and subsPerMainUnit (they were uint32, now became double-s)
  • API change: ElmSetAttrs() shall now overwrite attributes rather than append
  • New API: EldEuaValueXXX() API for working with relational attributes attached to elements (used to import Shape-files and other vector geometry attributes via GDAL library)
  • New API: provide CadFileGetXXX()@CFace and CadFileSetXXX()@CFace getters and setters for CadFileSettings values — to isolate access to CadFileSettings structure which quite evolves from time to time:
  • spxerror_t CadFileGetOrigin( const CadFile* file, Dpoint3d *pOrigin );
  • double CadFileGetWorldsPerMainUnit( const CadFile* file );
  • double CadFileGetWorldsPerSubUnit( const CadFile* file );
  • double CadFileGetSubsPerMainUnit( const CadFile* file );
  • spxerror_t CadFileGetMainUnitsNameW( const CadFile* file, wchar_t* name, int bufferMaxLenChars );
  • spxerror_t CadFileGetSubUnitsNameW( const CadFile* file, wchar_t* name, int bufferMaxLenChars );
  • spxerror_t CadFileGetMainUnitsName( const CadFile* file, char* name, int bufferMaxLenChars );
  • spxerror_t CadFileGetSubUnitsName( const CadFile* file, char* name, int bufferMaxLenChars );
  • spxerror_t CadFileSetMainUnitsNameW( const CadFile* file, wchar_t* name );
  • spxerror_t CadFileSetSubUnitsNameW( const CadFile* file, wchar_t* name );
  • spxerror_t CadFileSetCoordSystem( const CadFile* file, const Dpoint3d *origin, double worldsPerSubUnit, double subsPerMainUnit );
  • New API: provide new SpatixPlatformFeatureSet/Get()@CommonsCpp API to switch experimental features of Spatix on/off in runtime even in release builds
  • New API: provide experimental EldRasterXXX()@ElmEld API to create ELM_HDR_RASTER
  • Refactor: rename "UOR" towards "Worlds" (World coordinate system units), rename "Master Unit" towards "Main Unit", including API changes:
  • IRenderableDocument::uorsPerMasterUnit()worldsPerMainUnit()
  • SCadFileSettings::uorsPerMasterUnits()worldsPerMainUnit(), setSubunitsPerMasterUnits()setSubsPerMainUnit(), setUnitsOfResolutionPerSubunit()setWorldsPerSubUnit()
  • CadFileSettings::nameOfMasterUnitsnameOfMainUnits
  • CadFileGetUORsInMaster()@CFaceCadFileGetWorldsPerMainUnits()
  • SCadDocument::uorsPerMasterUnit()worldsPerMainUnit()
  • Refactor: rename "MiniApp" towards "IxApp" in all comments (but not in code yet)
  • Refactor: remove legacy RscXXX()@CFace API (file CFaceResource_fdf.h, resource_api.h)
  • Refactor: remove legacy LyrXXX()@Layers API (files layer.c, layer.h)
  • Refactor: provide FNTNAME_MAX (font_lib.h) constant for max font name buffer size
  • Refactor: SCadView::viewGrid() getter changed prototype
  • Refactor: restored DbgMemMemoryXXX() API for memory leakage detections (works only in DEBUG build of Spatix)
  • Refactor: many of CFace functions that take const CadFile *file parameter on input now support to take in NULL as a marker of master the file of the active document. Also, they will now return ERR_BADFILENUMBER is file is invalid.
  • Fixed: SDK distributive to build example IxApps up to SYM-files generation
  • Fixed: AppFree() to be a linkable "C" function instead of a macro which expands to free(). Link to Spatix.CommonsCpp.lib to get this.
  • Fixed: PgonIsConvex() — added test for polygon simplicity + max number of vertices for the convex test
  • Fixed: incorrect calculation in DgnSetCoordSettings() and DgnGetUorSystem() (in the sx_cad_routines.cpp) — subunitsPerMasterUnit should not be modified
  • Fixed: memory leaks collection API to work as before (in Debug build of Spatix only)
  • Fixed: GLPgonTesselator() to be lazy-initialized (to save more memory)
  • Fixed: the problem in the ElmGetAttrs()
  • Fixed: the possible extra padding byte is now will be zeroe-d in EldSetAttr()

spatix v020.012 (2020-12-21, expires 2022-01-31)


  • Update Spatix expiry date to 2022-01-31 (expired Spatix periodically shows annoying dialog box, but does not prevent user from working)
  • Added info on Spatix expiration into legal notes shown during installation time
  • New feature: Menu item "Edit › Copy edited file name" which puts the current CAD file path and name into clipboard
  • New feature: Option for "Construct big element" to choose element styles that should be applied to big element being constructed (active style/style of the first clicked/last clicked element)
  • New feature: Option to choose angle measurement units in "Measure Angle" tool
  • New feature: "Construct Big Element › Polyhole (by selection)" tool was restored from SpatixC
  • Improved: Symbols and Figires — their components visibility now is controlled by their layer global visibility flag
  • Improved: Delete Vertex tool to allow the choice of element to be modified if there are many under the mouse click
  • Improved: "Element Information" tool to recognize Polyholes from Symbols
  • Improved: Layer Manager to not allow users to select or deselect globally invisible layers when toggling layer visibility for view
  • Improved: "Extend Segment" tool to support Big polylines
  • Improved: "Element Info" Command from DebugTools to work over selection of elements
  • Fixed: broken rendering of "Layer Overrides" for element attributes per view
  • Fixed: cursor to be a Locate cursor for "Measure Element" and "Measure Angle between elements" tools
  • Fixed: displaying a first angle side in "Measure Angle" to see the whole angle dynamically
  • Fixed: "Break Big Element" tool to work by element's location, not only by selection
  • Fixed: too rough stroking tolerance for ellipse being holes of the polyholes
  • Fixed: duplicated element IDs conflict with deleted elements on SPX file open
  • Fixed: some elements that were converted from DGNv8 or DXF to become invisible

API changes

  • Fixed: memory management within the group of functions SelOrCurGetFPoses(), SelGetFPoses(), SelFreePoses(), DefaultSelectionSet::getPositions(), DefaultSelectionSet::freePositions()

spatix v020.010 (2020-11-10, expires 2021-01-31)


  • New feature: Lock mouse to grid ("View settings › Show Grid, View Settings › Grid › setup parameters", enable grid lock in locks toolbar)
  • New feature: MeasureTools IxApp used for measuring elements added to distributive. 3 tools: Measure Distance, Measure Angle, Measure Element (length, area, etc, but BIG elements are not supported yet)
  • New feature: Element Info tool added into MainToolCPP IxApp (nearby Choose element tool)
  • New feature: Extend Segment tool in the ManipulateTools (for now works with ELM_LINE and ELM_PLINE only)
  • New feature: Added more control over cursor shape visualization parameters (See "Edit › Preferences › View")
  • New feature: keyboard arrow keys navigate the active view
  • New feature: Render only each 5th element during view pan/drag/rotation/
  • New feature: Many improvements in DXF importer: Added Support for 3DFACE element, UTF-8 texts, better treatment of element styles
  • Fixed: Added latest Spatix Manual into distributive (opens up via "Help › Manual")
  • Fixed: "Help › FAQ and Help › Feedback" hyperlinks to spatix.com website
  • Refactor: Speeded up rendering of filled convex polygons (simpler triangulation algorithm is used in this case)
  • Fixed: several memory corruptions
  • Fixed: curve, arc and ellipses clipping by view window area
  • Fixed: Clipper operations for polyholes and ellipses, Clipper now moves/copies as-is those elements which do not intersect Clipper shape at all
  • Fixed: crash in view renderer
  • Fixed: crash in DebugTools
  • Fixed: improper update of layers in Layer Manager when Hide Unused is active after importing DXF
  • Refactor: Adjusted font sizes for all application widgets to be the same size font
  • Fixed: subtoolbars display in some cases
  • Refactor: starting from StageScene job we clear z-buffer after each job, if z-buffer is enabled
  • Fixed: view-parallel text element rotation, hittest and selection handles display
  • Fixed: crash with stereo windows hibernation
  • Fixed: some problems with view background color
  • Fixed: Adjust cursor for Choose element tool to be a Locate Cursor
  • Fixed: When many elements selected by the extended mode of the Choose elements — elements count is updated correctly
  • Fixed: big elements creation from points of more than 5000 points (e.g. affects TerraScan "Draw into design" feature for trajectories and big polygons)

API changes

  • New feature: Scan only Nth element in CadFile
  • New feature: Convex polygons now have EPF_ISCONVEX flag set in pel->h.state member
  • New feature: New better way to set up toolbars in the code (more #ifdef-friendly, IxApps code needs to be adjusted)

spatix v020.007 (2020-08-10, expires 2021-01-31)


  • SPX files compression
  • Spatix is less hungry to memory
  • stack memory usage optimization
  • OpenGL memory usage optimization
  • Layers GUI improvements
  • Restore proper rendering of Polyholes (with proper holes punching)
  • New IxApp for DXF files import / export
  • Performance optimizations
  • Over 5001-point big shapes are properly rendered, with zoom-factor dependent degradation

spatix v020.005 (2020-06-05, expires 2021-01-31)


  • Clipper for planar elements boolean operations — 1st beta version
  • clip/cut without closing contours not yet supported
  • clip/cut of pure vertical polygons (e.g. walls) is not working correctly
  • clip/cut of curve elements not yet implemented
  • clip/cut of a polygon having overlapping or intersecting edges is not working correctly
  • DGNv8 file format can be read by Spatix — 1st beta version
  • view settings are not yet read/decoded
  • no support for 2D elements yet
  • no support for XAttributes storage
  • no support for saving/writing of DGNv8
  • More ergonomics in GUI
  • levels management GUI
  • toolbars can be pinned together into floating islands
  • large icons for drop-down toolbars
  • toolbars now have caption, sub-toolbars have [x] button which allow to close them
  • welcome window which suggests to open file at startup
  • Other changes
  • improvements in performance of bulky operations of write/delete elements and render heavy mouse-dynamics
  • performance improvement for drawing on multiple views
  • some of the chrashdumps were addressed and bugs were fixed

spatix v020.002 (2020-04-14, expires 2021-01-31)


  • Layer manager — now it's possible to add, rename and delete layers, layers hierarchy is also supported with proper layer symbology resolving
  • Set expiration date to 2021-01-31
  • First version of Spatix Telemetry. It accumulates and periodically uploads the information about Spatix and IxApplications being executed on top of it to Spatix and TerraSolid servers.
  • Added cursor XOR mode setting. Can be set in "Preferences › Application › View".
  • Added setting for disabling scrollbars in MDI area.
  • Fixed: active text font and size selection
  • Fixed: view commands lifecycle in CFace
  • Minor changes About window
  • Fixed: SPX dirty state for undo/redo

spatix v020.001 (2020-03-18)


  • Got rid of cursor asymetry.
  • Added labels to the detached toolbars.
  • New basic view rotation command.
  • New stereo view navigation controls.
  • New stereo autofocus algorithm.
  • Reduced RAM memory usage per view.