Release Notes
This page contains the Release Notes for all Carmenta Engine 5 versions.
5.16.2 Release Notes
Fixes and Minor Improvements
Improved search function in the documentation and added the possibility to filter the results on articles and API documentation.
Fixed a bug where setting the AuxiliaryGroundInput to null did not result in the auxiliary meshes being removed from the GlobeView.
Fixed a problem rendering plots in a GlobeView with the DirectX renderer.
Fixed a regression where the camera position could get stuck close to the ground when using StandardTool3D.
Fixed a regression where Collada 3D models could get incorrect transparency.
Fixed a memory related crash in the .NET Standard API.
Fixed a problem using keyed attribute variables in the .NET Standard API.
Clarified exception message when using a ScreenLayer under a TileLayer, when loaded by a CatalogLoadLayerSet.
Fixed an issue where a CatalogLoadLayerSet under a TileLayer in a local catalog map would be initialized too early.
CatalogLoadDataSetSet and CatalogLoadLayerSet now throw exceptions if the Catalog has been disposed.
Fixed a problem which could cause raster cache generation to freeze.
Improved the performance of GetDataSetInfo for DataSets that contain multiple color tables.
Fixed a bug using MapPackageImagePyramidWriter with views that have StartPosition ExtentOfData.
Fixed a bug closing an unused MapPackage.
Fixed a bug where MapPackageDataSet could fail to load PNG model textures from MapPackages.
Fixed a problem in MapPackageCoveragePyramidWriter for input rasters with different bit depths.
Fixed a crash in OgrDataSet trying to read empty KML files without any features.
Fixed a problem in OgrDataSet when the path was specified without a trailing slash.
Fixed a problem handling exceptions in the raster cache generation.
Fixed a problem in Jpeg2000DataSet which could cause a half-pixel offset in some images.
Fixed a problem in the documentation where many properties had an incorrect thread-safety header.
Fixed problem with resizing the QtQuickMapControl.
Fixed a problem that could cause a LineVisualizer with orthogonalOffset and a dashed line style to freeze.
Fixed a regression when using the mouse outside of the MapControl in a Windows .NET MAUI application.
Fixed a Windows .NET MAUI problem that occurred when the application creates and closes windows.
The clone functionality of ScreenLayer now respects the alwaysOnTop property instead of using the default value.
Fixed a crash in GlobeTileLayer.
Fixed a crash in SmoothOperator for certain input data.
Fixed a bug where TerrainRouteOperator could throw an unnecessary exception if the restrictedAreaSafety was positive but near zero.
Fixed problems in VisibilityOperator, TerrainMobilityOperator and AirspaceCoverageOperator when used with a LevelOfDetailOperator with criteria Scale.
Fixed a regression where a VerticalProfileOperator that was not under a TileLayer could request land-cover rasters in too high resolution.
Fixed a bug where some tactical graphics with the anticipated status was visualized as present status.
Fixed a bug where a ScaleBar would become incorrect if the Drawable had pixelSizeAdjustments with different values for resolutionScaleFactor and textScaleFactor.
Fixed an issue where it was not possible to set the color of lead lines for certain line styles.
Fixed a problem where hover and selection could interrupt visualizer animation in a GlobeView.
A LineVisualizer condition is now respected inside LeadLineSettings.
Fixed a problem where visualizers with renderingPriority high did not produce any output under a TileLayer with cacheAsBitmaps set to true.
5.16.1 Release Notes
System Requirements Changes
To use the .NET API on Android, or the .NET MAUI map control, .NET 7 or later is now required.
Important Notices and Breaking Changes
Carmenta Engine for Windows is now built with Visual Studio 2022. The 2022 C++ runtime libraries need to be included when you deploy an application on Windows; for details, see the article Deploying Carmenta Engine 5 Applications on Windows.
Several of the third-party components used by Carmenta Engine have been upgraded to newer versions. Please contact Carmenta Engine Product Support for details.
Fixes and Minor Improvements
Fixed a problem rendering an incorrect 3D line-of-sight overlay after new ground tiles were loaded.
Optimized repeated access of static, read-only, reference type properties in .NET Standard, C++ and Java APIs.
Added some missing header files for the Ogc module in the Linux installer.
Fixed several different problems in the 3D model parser for 3DS files.
Fixed a problem with incorrect crs and/or extents of CatalogMetadata objects after a .px file in the catalog was changed.
Corrected incomplete upgrade to EPSG version 10.082: the Crs methods AuthoritativeAxisAbbreviation and AuthoritativeAxisDirection failed to recognize some CRS codes that had been added since EPSG version 10.015.
Carmenta Engine now recognizes EPSG:900913 as WGS84 / Web Mercator.
Fixed a bug where DensityDataset could throw an exception if only a single feature was used to create the density raster.
Fixed a bug where RpfDataSet file index was re-generated unnecessarily.
Fixed a bug where collecting DataSetInfo from RpfDataSet crashed the application.
Fixed an issue where OgrDataSet sometimes could freeze when getDataSetInfo was called.
The Jpeg2000DataSet and the EcwDataSet can now automatically handle LongLat rasters that cross the date line.
Extended AixmDataSet to read polygon features defined by GML LinearRing elements.
Fixed a bug where an ImageDataSet reading TIFF files could sometimes throw an erroneous "vector too long" exception.
Fixed so that S57DataSet works with the ISearchable interface.
Fixed a crash that could occur when a dataset using a raster cache was initialized on demand.
The documentation is now more responsive and adapts to smaller screen sizes.
The documentation now respects the dark mode setting of the device/browser.
The search function in the documentation has been improved and should give better matches than before.
Added missing XML documentation files to .NET API NuGet packages.
Many other minor changes/fixes to the documentation.
An error handler has been added to the HelloWorldMaui sample.
Opening help pages in web browser from Carmenta Studio and Carmenta Explorer might write a temp file in user's home directory on some Linux versions, to make it work when the browser is sand-boxed and has only limited access to file system.
CatalogMetadata instances for WMTS services will now get a correct InitialArea property, if server provides it (requires Carmenta Server 4.9 or corresponding Carmenta Server Core version).
Fixed several different problems in MapPackageModelWriter when importing 3D Tiles data.
Linux binaries runtime-license-key-manager and s63-manager are now included when installing Linux packages under WSL from a Windows SDK installation.
Fixed a bug on Android devices where a rotation could sometimes crash the application.
Fixed a problem in OgcWmtsLayer where WMTS maps using the CRS EPSG:4326 could be incorrectly stretched and offset.
Fixed a crash in MemoryDataSet, if refreshFeaturePresentation() was called with incorrect arguments.
Fixed a crash when using the Carmenta Engine MapControl for .NET MAUI on Windows.
Fixed problem with using the .NET MAUI MapView class in the OnConnect method in a custom tool.
Fixed problem with using a custom tool, that does not inherit from the Tool class, when using .NET MAUI.
Fixed problem with replacing the default mouse cursor with a custom cursor when using .NET MAUI on Windows.
The CEEcw.Net.dll assembly was incorrectly included in both the Carmenta.Engine and the Carmenta.Engine.Ecw NuGet packages; it has now been removed from the former.
Fixed a bug where incorrect CRS was returned by VerticalProfileOperator.projectToRouteCrs.
Fixed a problem where an IsolineOperator that got rasters from a LineOfSightOperator could fail to generate some of the isolines.
Fixed a problem where an IsolineOperator would generate neither lines nor polygons if it got its input from a RasterMergeOperator that got its input from a LineOfSightOperator.
Fixed bug where AirRouteOperator would throw unnecessary exception if waypoints were placed where no elevation data was present.
Fixed a bug where ICustomPropagation method was sometimes not called in .NET Standard API.
Fixed a crash that could occur when setting properties on an active create tool.
Fixed a bug where S52 visualizer did not use a feature attribute.
Fixed a problem where text labels with followLine = True and offsetY = 0 could disappear.
5.16 Release Notes
New Functionality and Major Improvements
A new kind of custom object, the Custom Propagation, makes it possible to replace the standard propagation model of LineOfSightOperator (and its subclasses TargetLineOfSightOperator and AirspaceCoverageOperator) by a custom propagation model that can e.g. represent radio propagation or ballistic trajectories. The custom code only needs to handle propagation along a vertical terrain profile from the observer. For more details, refer to LineOfSightOperator.customPropagation.
The new AirRouteOperator can be used to find a nap-of-the-earth flight route for a rotary-wing aircraft along a given list of waypoints, balancing two objectives: speed and safety. For more information refer to the sample map configuration air_route_operator.px and its associated tutorial.
The ScreenLayer now supports Screen Elements – an easier way to add legends, scale bars, north arrrows and arbitrary texts to the map. A new sample configuration, screen_elements.px, gives examples of usage.
Carmenta Engine SDK has been updated to support cross platform development. Carmenta Engine for Windows can be used to develop applications for Android and Linux, using WSL2. Carmenta Engine for Linux can be used to develop applications for Android. And Carmenta Engine SDK license keys now support developing applications for all supported platforms.
The C++ API is now supported on Android. The QtQuickMapControl and the HelloWorldQtQuick and PlotLayer3D samples have also been updated to work on Android.
The .NET Standard API now includes MapControls for use in .NET MAUI applications for Android and Windows. A new HelloWorldMaui sample is also included. The .NET samples have all been updated for .NET 6.
The new DirectoryDataSet will monitor a directory for data files and dynamically update its contents when files are added or removed.
Carmenta Explorer has a new user interface which makes it easy to inspect the bundled map configuration samples.
The bundled documentation has been improved: It has a simplified look and is faster to load.
The new GeoJSON class makes it easy to convert Carmenta Engine features to and from GeoJSON.
The set of extensions offered for Carmenta Engine has been simplified. Several previous extensions are now part of the core, and other extensions have been combined.
System Requirements Changes
The 32-bit version of the Carmenta Engine SDK for Windows is no longer offered as a standalone installation. The 64-bit SDK is now always required for developing Carmenta Engine Windows applications. Building 32-bit Windows applications additionally requires installation of the 32-bit Carmenta Engine for Windows add-on.
Using the OpenGL renderer with GLES on Android and Linux now requires GLES 3. GLES 2 is no longer supported.
Using the DirectX renderer now requires DirectX 11. DirectX 9 is no longer supported.
Ubuntu 18.04 LTS, Red Hat Enterprise Linux 7, and versions of SUSE Linux Enterprise before version 15 SP4 are no longer supported. Supported Linux versions are now Ubuntu 20.04 LTS and 22.04 LTS, Red Hat Enterprise Linux 8 and 9, and SUSE Linux Enterprise 15 SP4.
Supported Visual Studio versions on Windows are now 2019 and 2022.
The minimum supported Java version is now Java 11 on all platforms.
The minimum supported version for the .NET Standard API is now 6.0 on all platforms.
The minimum supported Qt version on Windows and Linux is now 5.15.
Important Notices and Breaking Changes
For the British geodetic datum OSGB36, you can now get the accurate datum shift recommended by the Ordnance Survey simply by using datumShiftChoice = Conservative, while datumShiftChoice = Lenient continues to give the simpler Helmert datum shift that has errors of several meters. If your application uses the Conservative choice to create a CRS based on OSGB36, coordinate transformations from and to this CRS will now be more accurate but also slower, so if speed is more important than accuracy, you may want to switch to the Lenient choice.
The Java API on Windows and Android now uses the new com.carmenta.engine.Color class. Previous versions of Carmenta Engine used the java.awt.Color class on Windows and Linux, and an integer on Android.
The MapControl class in the Java API for Windows and Linux has been moved from the CECore.Java.jar archive to a new CEAwt.Java.jar archive.
The class ScreenLayer has a new boolean property alwaysOnTop. If True, the ScreenLayer will be displayed on top of visualizations from other layers, even if they have high rendering priority or come from hover or selection visualizers. The default value is True, so configuration files will be migrated automatically in Carmenta Studio and in runtime to preserve the old behavior, but application code that creates a ScreenLayer may now also need to set alwaysOnTop to False.
The class LegendLayer has been removed: to be displayed, a Legend should now be used as a ScreenLayer element instead. Configuration files will be migrated automatically in Carmenta Studio and in runtime, but application code accessing a LegendLayer directly must be updated.
On Windows, Carmenta Engine now opens files in a way that allows them to be deleted, even if Carmenta Engine is still accessing them.
The Android MapExplorer sample application that makes it possible to explore the sample configurations is no longer part of the SDK. It is instead available as a downloadable APK (with bundled geodata) from the Carmenta Engine download page.
Fixes and Minor Improvements
Fixed an issue where the GlobeView.Elevation method would give the wrong result if the point intersected an auxiliaryGroundInput mesh.
TerrainWarningOverlay is now automatically applied to all meshes read from GlobeView.auxiliaryGroundInput. Also fixed a bug that could prevent terrain warning from showing under GlobeView.layers.
Corrected the calculation of the distance3D update attribute in a GlobeTileLayer.
Added the property surfacePixelSizeAdjustments to GlobeView to allow adjustment of the size of objects in a surface layer.
Fixed a bug where the MeshGeometry.RayIntersections method failed to find intersections with very small triangles.
Fixed a problem in the .NET Standard API when adding LevelOfDetail objects to a LevelOfDetailCollection.
Corrected the instance type of the input property of the LevelOfDetail operator in the .NET Standard API.
Fixed two overloads of ShapeFileDataSet.Save that were incorrectly not declared static in the .NET Standard API.
Removed some recursive includes in the C++ API.
The Carmenta Engine NuGet packages for Android and the .NET Standard API for Windows and Linux are now signed.
The Python interface now uses Python 3.10 on both Windows and Linux. The Python runtime bundled with the Carmenta Engine Python API for Windows has also been upgraded to Python 3.10.
For methods that identify a Coordinate Reference System by authority and code, we have updated to EPSG version 10.082 (Feb. 2023) and to Esri Projection Engine Database version 3.1.0 (Jan. 2023).
GridFileDatumShift can now handle a path that contains spaces.
Fixed the two GeodeticDatum methods AlternativeDatumShifts and AlternativeDatumShiftsForArea, which would throw an erroneous exception with the message "no such column: auth_name". Also modernized the names of some of the grid shift files that the methods can look for, so that they will look for Geodetic TIFF Grid files instead of the NTv2 version of the files.
Fixed a problem in the method Crs.IntersectLineSegmentAndCircle, which had poor accuracy if the line segment was a rhumb line and the CRS did not use LongLat coordinates.
Corrected the false_northing parameter in the WKT written for a CRS with a UTM projection for the south hemisphere.
The CRS construction methods can now figure out the EPSG code automatically for some projected CRS instances, namely when the projection is a UTM projection and the geodetic datum is either WGS84, WGS72, NAD83 or NAD27.
The page setup functionality in Carmenta Explorer is now re-enabled.
Fixed a bug where the maxScale was not set properly when a user opens a data file directly in Carmenta Explorer.
Fixed some issues when displaying feature information in the properties panel in Carmenta Explorer.
Fixed Carmenta Explorer exporting GeoPackage when the View bounds exceeded the bounds for the View CRS.
Carmenta Studio now warns about object names containing spaces being unsupported.
Fixed a bug where changing default language in Carmenta Studio did not enable the Save button.
Fixed a bug where default language change in Carmenta Studio was added twice to undo list.
Corrected the default value of AttributeAssignment.attribute in Carmenta Studio.
Corrected the default value of GdalDataSet.groundControlPointsCrs to null in Carmenta Studio.
Removed OgcWmsLayer.asynchronous property in Carmenta Studio; the class doesn't have this property.
Carmenta Studio: fixed the automatic lookup of available attributes to work regardless of the file or namespace name of the configuration.
In Carmenta Studio, the Open File dialog will default to the folder containing the current file. This can be disabled in the options.
It is now possible to specify in Carmenta Studio that an operator in the configuration should be exposed through the Catalog mechanism as a CatalogDataSet.
Several fixes have been made to the information provided by the CatalogMetadata class. The differences betweeen reading a local Catalog and reading the same catalog published through Carmenta Server (using either of the CS/W or WMC catalog interfaces) should be much fewer.
Fixed a crash when Catalog tried to create CatalogMetadata for both a CatalogLoadDataSetSet and another DataSet if the metadata creation had to initialize the other DataSet. This could occur, for example, if the other DataSet was a ShapefileDataSet without any explicit Crs or CatalogDataSetExtent.
Fixed a bug where the Catalog overwrote user-specified CRS and Extent.
Fixed a bug where the Catalog failed to read XML-files when multiple search paths are specified.
Fixed issue where Catalog could yield one too many metadata objects.
Fixed an issue where calling FlushCache() on a CatalogLayer had no effect.
Improved support for center coordinates in b3dm files.
Fixed reading some bmp files.
Fixed a bug where DataSetSet failed to calculate the correct data coverage when its own CRS differed from the CRS of one of its underlying datasets.
The ODA Platform libraries, used by the DwgDxf module, have been upgraded to version 2023.12.
Upgraded the GDAL library to version 3.6.1.
Fixed error where ImageDataSet failed to read GeoTIFF file ground control points.
Fixed a bug in ImageDataSet preventing it from reading some TIFF files with built-in transparency masks.
The ImageDataSet and GdalDataSet can now automatically handle LongLat rasters whose longitude extent does not fit inside the usual interval from 180°W to 180°E.
Jpeg2000DataSet can now read RGB and RGBA images with 16-bit bands.
Improved performance in Jpeg2000DataSet when using the default visualizer on grayscale rasters.
The new property Jpeg2000DataSet.band allows selecting a single band to read from a multi-band JPEG 2000 image.
Fixed Jpeg2000DataSet failing to find TopoBase ORTHO-U metadata.
Fixed a bug where GeoPackageVectorWriter mistook attribute names for SQLite keywords.
Improved performance when reading raster mbtiles or GeoPackage MVT (using appropriate CRS and tile matrix bounds) with MapPackageDataSet in combination with GoogleMapsCompatible tilingScheme property on TileLayer.
Fixed a bug where mbtiles raster files with missing zoom interval metadata could not be read.
Limited the number of file handles held open by MapPackageDataSet.
Fixed a crash in MapPackageDataSet.GetMetadataDocuments() if the dataset was configured with an incorrect path.
Ensured that calling MapPackage.Close() releases all resources.
Fixed a heap corruption which could occur when using the MapPackagePyramidWriter.
Fixed settable crs property on MapPackageModelTable; CRS is handled automatically for this type of table and should not be set by the user. Attempting to do so will now be ignored and cause a warning to be logged.
Fixed a problem on Linux where MultiFileDataSet failed to open files when the path to the file was only set on the fileName property.
MySqlDataSet has been updated to work with MySQL 8.0 servers.
Fixed problems when reading Esri File Geodatabase via OgrDataSet: some data layers might not be visible, and the application could freeze when collecting metadata for DataSetInfo.
Fixed a bug in RpfDataSet where data was not displayed if some of the geodata were missing.
Fixed a bug in VpfDataSet which could cause polygons to not be read from the dataset in rare cases. Index files must be regenerated to see the effects of the fix.
Added missing documentation for some MapControl methods.
Fixed issue where documentation links to table members did not scroll correctly.
Fixed issue in the C++ example for LineOfSightOperator.carrierType.
Fixed an incorrect description of VisibilityIndexOperator.observerInput in the documentation.
The outdated HelloWorld and BasicMapApplicationJava step-by-step tutorials have been removed. The corresponding programming samples are still part of the SDK.
The outdated QtGraphicsView programming sample and associated tutorial have been removed. Refer to the QtQuickMapControl.hpp file for an example of how to use an ExternalDrawable in a C++ MapControl implementation.
The HelloWorldXamarin sample has been replaced with a new HelloWorldAndroidNet sample.
Added a workaround to the HelloWorldJava sample to not erase the background of the MapControl, when resizing the application window and running on Windows with Java 17 or later.
Fixed so that 3D Configuration Tutorial refers to the correct samples geodata directory.
Fixed return value in message-handling functions in the HelloWorldWin32 and HelloWorldMfc sample applications.
The VideoDataSet in the Projected Video Sample will now set attributes describing platform orientation when the Camera mode is used.
Fixed a bug in the map configuration sample range_operator.px where the distance between the circles was not updated correctly when zooming in and out.
Added ViewConstraints to the map configuration sample vertical_profile.px.
Improved the Vertical Profile Sample Application.
Added optional attributes read by CameraProjectOperator to specify the orientation of the platform in addition to the existing ones that specify the relative orientation of the camera.
Fixed issue when using lines with one or zero points with a GreatCircleOperator.
The LineOfSightOperator has a new property, interpolatedCells, that controls how many elevation cells away from the observer that elevations shall be looked up via interpolation instead of nearest-neighbor. The default value of 15 corresponds to the old behavior.
When using elevation rasters stored in LongLat, the LineOfSightOperator will handle its maxDistance more accurately. The improvement is noticeable mainly on higher latitudes when the maxDistance is long (hundreds of kilometers) and the LOS raster is colored all the way to the maxDistance.
Fixed a problem where LineOfSightOperator failed to handle observers with a LineGeometry correctly under an OrdinaryLayer with cacheMode = Dynamic or DynamicAsync.
Improved global cache performance when using one or more LineOfSightOperators.
The method Operator.GetRasterFeature will now ignore vector data produced by the operator, instead of returning Null.
RangeOperator will now copy the attributes of the input features to the output features.
The RasterConversionOperator has new properties changeContinuous and newContinuous.
Added missing null-check for the input property of SplitOperator.
The TerrainRouteOperator will now set a Boolean attribute routeFound on its basic output features, for consistency with the new AirRouteOperator.
Fixed a bug in TerrainRouteOperator and TerrainAccessOperator: The operators could ignore the final portion of a road feature that contained more than 240 nodes.
Added new method ProjectToRouteCrs to VerticalProfileOperator, which reprojects features in the vertical profile to the CRS of the route.
Fixed a bug in VerticalProfileOperator that could occur when lines or polygons came from elevationInput and there were nodes with no course change in the route feature. The bug could sometimes throw an exception "Coordinate outside allowed range", but sometimes it would just cause incorrect results.
Corrected the results from VerticalProfileOperator when parts of the profile route go beyond the extent of the elevation dataset.
Fixed two possible kinds of crash in VerticalProfileOperator when using the landCoverInput; one of them was triggered when the landCoverInput operator did not produce any data.
Fixed an unnecessary exception that could be thrown by a VerticalProfileOperator using landCoverInput and an extremely short route segment. The exception message was: "The VerticalProfileOperator failed to handled land cover input – could not construct an affine transformation between elevation and land-cover raster".
Corrected the land-cover results from VerticalProfileOperator when the elevations are coarser than the land-cover data, and the land-cover data lack pre-built overviews and are read by a GdalDataSet.
Added observerHeightType property to VisibilityIndexOperator.
The VisibilityIndexOperator can now work without any observerInput, and will then analyze observer positions in the entire View area.
VisibilityIndexOperator will now fill raster cells even if they are only partially inside the observer polygon.
Fixed a crash in VisibilityIndexOperator when the outputResolutionFactor was 8 or larger.
Fixed map projection issues for some tactical graphics in all standards.
Fixed air corridor unique designation duplication for MIL-STD-2525C and MIL-STD-2525D.
Fixed some cache key issues for MIL-STD-2525D and APP-6(D).
Corrected the color for civilian units in light color mode in MIL-STD-2525D and APP-6(D).
Enabled custom metadata for standard MIL-STD-2525C and earlier to show interaction handles for all entries.
Added support for using custom font for labels in tactical symbols in MIL-STD-2525D and APP-6(D).
Added support for the special C2 Headquarters text in MIL-STD-2525B, MIL-STD-2525C, APP-6(B) and APP-6(C).
Fixed offset of HQ symbols in MIL-STD-2525D and APP-6(D).
Added missing halo from the pole on HQ symbols in MIL-STD-2525D.
Added quantity field for regular symbols in MIL-STD-2525D and APP-6(D).
Improved the visualization of "support by fire" graphics interaction handle in MIL-STD-2525D and APP-6(D).
Fixed some selection artifacts for MIL-STD-2525D and APP-6(D).
Enabled scaling symbols embedded in lines in MIL-STD-2525D and APP-6(D).
Fixed an issue where MIL-STD-2525D and APP-6(D) were not able to display symbol modifiers.
Fixed the display of symbols in the MINEWARFARE symbolset in MIL-STD-2525D and APP-6(D).
Enabled MIL-STD-2525C and APP-6(C) standards to render all relevant categories of symbols with the correct affiliations.
Improved scaling in tactical "search area" graphics in all tactical standards.
Other minor fixes of tactical graphics.
Some cache files under the data directory, .../data/tactical/resources/*.dir, are no longer needed and have been removed.
It is now possible to use OverviewTool in a view with an ExternalDrawable.
Fixed a problem with StandardTool when adding nodes to polygons with large z values compared to x and y values.
Fixed a problem where CreateTool with tactical create parameters would sometimes not create the last node when creating lines or polygons.
Fixed a potential issue when switching between 3D and 2D views with a touch tool active.
Fixed a problem where Engine could fail to invoke the CreateTouchTool.FeatureCreated or CreateTouchTool3D.FeatureCreated events.
Fixed cursor not changing when hovering over selectable features in the default cursor-handling implementation in the C++ MapControl base class on Windows.
A new property makes it possible to control which kind of filtering RadarVideoLayer should use.
Fixed incorrect SVG visualizations where cubic and quadratic Bézier curves could use incorrect control points if the command preceding the curve was neither a cubic nor quadratic Bézier curve.
Fixed problems where a label was not displayed when a TextVisualizer was used with rotationMode = FlipUp and followLine = True.
Fixed animation on symbols that are part of a line geometry.
In LineVisualizer, fixed an issue with memory usage for complex line styles in untiled layers.
Fixed a bug in LineVisualizer where orthogonalOffset could start to simplify lines when the point density was high.
Fixed hover visualizations stuck after zoom.
Fixed a problem where an S52Visualizer could sometimes render objects in the wrong order.
Fixed opacity property of ScreenLayer in 3D.
Fixed integer keyed color tables to behave similar to float keyed color tables with the same value keys.
Fixed incorrect alpha of dashed lines when using the DirectX graphics renderer.
Fixed an issue with DirectX with the error message "Could not create texture".
Fixed rendering of texts containing only space in the OpenGL graphics renderer.
Fixed a possible crash in OpenGL when using huge textures.
Fixed a problem where the texture memory statistics for OpenGL could become erroneous.
Fixed an issue with OpenGL that would cause rendering to fail if the same Drawable instance was used first in a GlobeView, and then in a 2D View.
Fixed an issue where the Software graphics renderer sometimes clipped line geometries without enough margin, which could cause artifacts for wide lines.
Fixed a problem with View.FindChildObject() never returning any child objects from its overlay properties.
Fixed the C++ native visualizers (.natvis) for some layers.
Fixed a thread safety issue when using OrdinaryLayer.cacheMode = DynamicAsync.
Fixed a bug where the property vendorSpecificParameters of OgcWmsLayer was not used on GetCapabilities request.
Added a vendorSpecificParameters property to OgcWmtsLayer to work the same way as OgcWmsLayer.vendorSpecificParameters.
Fixed a bug where keyboard events did not propagate to tools attached to QtQuickMapControl.
In the Expression syntax, the built-in functions cos, sin and tan now handles negative arguments.
Fixed bug related to cloning a GlobeView that uses a SplitOperator as elevation input.
Fixed the Android Java MapControl when the parent context is not an Activity.
The name of background threads created by Carmenta Engine, on Linux and Android, are now set in a similar way as on Windows.
Fixed a freeze that could occur on Linux if a Carmenta Engine application incorrectly exits without first calling Runtime.Shutdown(). Doing so will now result in a warning being logged, followed by a crash.
Fixed a potential stack-buffer overrun that could happen if formatting values to string with an extreme number of decimals.
Fixed a possible memory leak that could occur when changing the position of a Radar under a RadarVideoLayer.
Reduced the CPU overhead of the TileLayer thread when loading tiles.
Fixed incorrect bounds calculation and intersection tests for rasters in a TileLayer with autoDownsample enabled.
Fixed CustomOperatorContext.GetFeatureVisualizers causing the selection and hover visualizers of a feature to be dropped.
Added CustomOperatorContext.GetFeatureHoverVisualizers and CustomOperatorContext.GetFeatureSelectionVisualizers, allowing custom operators to inspect and edit the hover and selection visualizers of a feature.
Fixed the width and height properties in ViewInfo to contain the drawable size – as documented – also during updates caused by invocations to View.whatsIn or View.whatsAt.
Stopped trying to load system libraries with an unnecessary 64 suffix.
Improved layout for a Legend with a wide outline or with empty descriptions or caption.
A Legend can now be placed at a constant offset from a map window corner via the new properties offsetX and offsetY.
A Legend, when used as a ScreenLayer element, can now be displayed in a GlobeView.
The "Legend" folder has been removed from the class tree in Carmenta Studio, and the Legend-related classes are now found in the new "Screen elements" folder.
The LengthUnit class has a new property abbreviation, and more predefined units have been added: the millimeter, centimeter, kilometer, inch, yard and mile.
5.15.1 Release Notes
Fixes and Minor Improvements
Fixed a bug in RpfDataSet that could make it throw exceptions for invalid tiles instead of skipping them.
Fixed a crash when unloading CEEcw64.dll during process exit on Windows.
Fixed a crash that could occur on Windows when loading CEEcw64.dll at the same time some other process was unloading it.
Fixed features returned from Jpeg2000DataSet having incorrect Id.DataSetId.
Fixed a rare threading bug that could cause a crash, typically when indexing S-57 data.
Fixed a problem assigning thread priorities on Linux and Android.
Fixed a problem when calculating the printed area in Printer.GetBitmap().
Fixed a thread safety issue that could cause a crash in rare cases of extremely high load.
Fixed an exception thrown on startup by thread pool when running on single-core virtual Windows machine.
5.15 Release Notes
New Functionality and Major Improvements
Carmenta Engine can now efficiently read configuration files, geodata and other resources directly from zip archives, without having to unpack them to the local file system. This makes it possible to deploy entire self-contained maps as single files. See the documentation page Virtual Paths (under Creating Map Configurations) for more information.
Small resource files, such as raster symbol images, can now be embedded directly into configuration files, so that the original files do not need to be deployed separately. See the documentation page Virtual Paths (under Creating Map Configurations) for more information.
The new GribDataSet makes it possible to read meteorological data in the GRIB format.
Carmenta Engine for Linux SDK now supports deploying applications on Linux/ARM platforms.
The VisibilityIndexOperator has been improved: It can now compute the visible percentages of an explicit target polygon. A new sample configuration file demonstrates this functionality.
TileLayer can now be configured to preload data to reduce the visible tiling artefacts. Refer to the new property TileLayer.preloadBehavior for more information.
It is now possible to use OGC 3D Tiles data sets efficiently in GlobeView. Refer to the new class MapPackageModelWriter for more information.
The support for MIL-STD-2525D and NATO STANDARD APP-6(D) has been extended with support for tactical graphics.
OrdinaryLayer now supports dynamic caching of features returned from CustomDataSet implementations.
A single Catalog instance can now load catalog services from multiple locations, including directly from zip archives.
The new class CatalogLoadDataSetSet makes it possible to use datasets from a Catalog directly in a configuration file, without extra application code.
The MapPackageDataSet can now read Mapbox Raster Tiles from .mbtiles files. (The MvtDataSet class, introduced in Carmenta Engine 5.12, is used to read Mapbox Vector Tiles from such files.)
MapPackageDataset now supports reading MVT data from OGC GeoPackage files using the Vector Tiles Community Extension.
MapPackageDataSet now supports the OGC GeoPackage WKT for Coordinate Reference Systems extension.
Carmenta Engine now supports parts of the OGC GeoPackage Metadata extension. Refer to the new GeoPackageMetadataWriter class for more information.
The new PointSampleOperator generates point features with sampled raster values as attributes.
The new WindBarbSymbol makes it easy to visualize wind direction and speed.
The new properties DatabaseDataSet properties ConnectTimeout and CommandTimeout provide improved control of database timeouts, and the new method DatabaseDataSet.StartConnect allows multiple database datasets to establish their server connections in parallel.
The S52Visualizer can now remove overlapping labels in the nautical charts.
CustomDataSet implementations can now supply DataSetInfo information and handle DataSetInfo.FromFile requests.
The raster cache feature has been updated: It now provides better compression, especially for RGB/RGBA data, and the raster cache is often faster to generate.
Added a number of math functions to the expression language, like abs(), sqrt(), cos(), sin(), exp() etc.
System Requirements Changes
Windows 11 is now a supported operating system.
Windows 7 and Windows 8 operating systems are no longer supported.
Android devices with 32-bit ARM CPUs are no longer supported.
The OracleDataSet now requires an Oracle 8 client driver. Oracle 7 client drivers are no longer supported.
The OpenGL renderer in Carmenta Engine for Linux can now, in addition to the existing OpenGL support, use OpenGL ES 3.0 or later.
The ODA Platform libraries (previously Teigha), used by the DwgDxf module, have been upgraded to version 2022.9. On Red Hat 7, the GCC runtime may need to be updated for the new version to run.
Important Notices and Breaking Changes
The Samples Geodata distribution which provides data for the Carmenta Engine sample applications and map configurations has been updated. Please install the new version (available from the Carmenta download page) to ensure that the samples work as intended.
The property TileLayer.viewAreaExtensionRadius is renamed to TileLayer.preloadArea and its value is changed from a percentage to a scalar. Refer to the documentation of TileLayer.preloadArea for more information.
Since recent versions of Android Studio have dropped the support for custom activity templates, the CarmentaEngineActivity template has been removed from the Carmenta Engine for Android SDK. The HelloWorldAndroid Application Tutorial has been updated to use one of the standard activity templates instead.
Support for setting environment variables on Android by using the System.setProperty method with a property prefixed with com.carmenta.engine.env. has been removed. Use the android.system.Os.setenv method instead.
In the C++ API on Linux, the previously deprecated Runtime::initialize() overloads taking a Display* parameter have been removed. Use the overloads without this parameter instead.
The Java .jar files, used when deploying applications for Linux, have been moved from the carmenta-engine package to the new carmenta-engine-java package.
ECW runtime files are no longer installed by default on Linux and Android. For more information, see the README files for the Linux and Android installations.
GreatCircleOperator will now process both polygon features and line features, instead of letting polygon features pass through unmodified.
A CRS definition in Well-Known Text (WKT) that is lacking a declared length unit for the projected coordinates will now cause an exception to be thrown.
The method Crs.FromWellKnownText(wkt, flavor, datumShiftChoice) has been deprecated, and may be removed in a future release. It is better to use an overload that does not specify the WKT flavor to read.
In the RasterConversionOperator, the type of the changeUndefinedValue property is now an enumeration type. Older configuration files will be migrated automatically.
In the VisibilityIndexOperator, the observerInput now accepts only polygon features, instead of center-point features. The six properties that controlled the area around a center point have been removed: ellipseDirection, ellipseRadius, ellipseRatio, rectangleHeight, rectangleWidth and shape. The Shape enumeration type has also been removed.
In the VisibilityIndexOperator, the default value of rays has been raised from 30 to 180.
In the VisibilityIndexOperator, the property outputResolution has been renamed to outputResolutionFactor. Configuration files will be migrated automatically, but application code accessing the property directly will have to be updated.
The output raster from a VisibilityIndexOperator now contains float values instead of integers.
Fixes and Minor Improvements
Fixed SymbolVisualizer's opacity replacing the layer opacity in GlobeView, when both opacities are less than 1.0.
Fixed several rendering issues affecting symbols in a GlobeView.
Fixed issue where opacity was not applied to a billboard SVG symbol in a GlobeView.
Fixed a bug where effects under GlobeView.layers could cause incorrect render order when using the DirectX renderer.
The GLTF model loader is now better at finding textures in GLTF v1.0 files.
Some methods that were missing from the Box and ShapefileDataSet classes in the .NET Standard API have been added.
Implicit conversion from the System.Drawing.Color type to Carmenta.Engine.Color type has been added to the .NET Standard API.
Fixed incorrect base class in the runtime type information for HttpLayer and LoadableLayer.
Fixed issue in Carmenta Explorer where setting the scale using the combobox failed to take effect in certain situations.
Fixed issue where Carmenta Explorer would collapse expandable items in the Properties panel when features were deselected.
Fixed a crash that could occur in Carmenta Explorer when trying to export raster data as vector data to a GeoPackage.
When .hgt, .sigdem and .dem files are opened in Carmenta Explorer via "Open Data File" or "Open Data Directory", they are now visualized using a ShadeOperator.
Feature geometries, Attributes and AttributeSets can now be copied from the Properties panel of Carmenta Explorer to the clipboard in a Carmenta Studio-friendly format when applicable, via a new option named "Copy Studio Compatible Value" in the context menu.
The Carmenta Engine runtime for Java is now included in the Carmenta Studio installation package, making it possible to run custom objects written in Java in Carmenta Explorer with only this package installed.
Fixed a problem in Carmenta Studio where a Condition could not be removed from a visualizer using the Condition-editor dialog.
Fixed minor issues in Carmenta Studio relating to obsolete properties.
Fixed an unexpected behavior that could occur in Carmenta Studio after attempting to give a resource a name that already exists in the configuration.
Fixed a problem that could cause Carmenta Studio to incorrectly issue warnings related to choice of CRS.
On Windows, if Carmenta Studio for some reason fails to start, an error dialog box with details on the problem will now appear.
In Carmenta Studio, removed the unused property centralLatitude from the EquidistantCylindricalProjection and the EquidistantCylindricalAngularProjection.
User properties set for a GlobeView in a catalog are now available through a new property CatalogGlobe.UserProperties.
Catalog extension now ignores .px files containing multiple Catalog-enabled views. Such files were previously loaded, but the views would get the same resource identifier, causing unexpected behavior. Now, a warning is logged and the whole .px file is skipped.
Fixed several bugs that could make a CatalogLoadLayerSet used inside a Catalog load an incorrect set of matching maps.
Upgraded the PROJ library to version 8.0.0.
For CRS-related methods that identify CRS instances by authority and authorityCode, the support for the "EPSG" authority has been updated to EPSG version 10.015 from February 2021, the support for the "ESRI" authority has been updated to the Esri Projection Engine Database version 12.7 from December 2020, and support has been added for a new authority, "IGNF" from the French mapping institute IGN, starting at the IGNF Register version 3.1.0 from 2018.
GridFileDatumShift can now read the format Geodetic TIFF Grid.
GridFileDatumShift no longer requires the combined length of path and fileName to be at most 126 characters.
The CRS class now supports reading and writing the newest versions of Well-Known Text: WKT2:2015 and WKT2:2019.
Some variants of CRS construction have been improved so that the GeodeticDatum component and its default datum shift can get their authority and authorityCode inferred from the authority and authorityCode of the whole CRS.
Fixed a problem when projecting rasters to a CRS based on an AzimuthalEqualAreaProjection: raster data that should appear near the boundary circle of the world map could become corrupted or cause a crash.
Fixed some issues when formatting date/time values into feature attribute strings in DatabaseDataSet.
DataSetInfo.FromDirectory and FromFile now recognize .hgt files as usable with GdalDataSet.
Fixed the DataSetInfo.ColorTable property not being retrieved from a CmrgDataSet.
DataSetInfo.FromDirectory now discovers VPF "LAT" files on all platforms. Previously, this only worked on Windows.
Fixed an issue with using rasterCachePolicy = Overviews with data with only one tile.
Fixed a problem with ImageDataSet sometimes retrieving one extra, unnecessary row and column of raster tiles.
It is now possible to write GeoPackage files with vector features containing attributes named ID and GEOMETRY.
Fixed a problem getting DataSetInfo for a GeoPackage file containing Carmenta 3D models.
Improved performance when writing GeoPackage image and coverage tile pyramids.
Upgraded the GDAL library to version 3.3.2.
The two RasterGeometry methods GetCellValue and GetFloatValue, as well as the similar DataSet methods GetValueAt, GetFloatValueAt, etc., have got new overloaded variants that take an explicit RasterFilter as an argument. This allows the use of bicubic interpolation, as well as the use of nearest-neighbor lookup on continuous raster data.
The RasterGeometry methods GetCellValue and GetFloatValue now convert the raster's undefined value to the correct integer/float type if the requested point is outside the raster.
Corrected the raster lookup methods of DataSet (GetValueAt, GetFloatValueAt, etc.) near the dateline for global LongLat rasters that start and end half a cell west or east of meridian 180°.
Corrected the DataSet methods that look up raster values for a collection of points (GetValuesAt, GetFloatValuesAt, etc.). If the dataset contained several overlapping rasters, one could incorrectly get the value representing undefined for a point if the first point-covering raster gave an undefined value for it, even if other rasters would have given a well-defined value. The documentation has also been updated to say that with collection lookup, one is not always guaranteed to get the highest well-defined value from overlapping rasters.
Improved the reprojection accuracy and dateline behavior for LongLat rasters that extend half a cell beyond the usual LongLat bounds, or that start and end half a cell west or east of meridian 180°.
Jpeg2000DataSet now assumes that three or four-channel images are RGB(A) regardless of color-space metadata. This allows the dataset to load some files with incorrect or missing metadata instead of throwing an exception.
It is now possible to read vector features from a SQLite view in a GeoPackage. Previously, it was only possible to read from tables.
MapPackageDataSet will now log warnings when reading OGC GeoPackages containing unsupported extensions, but it will still try to read them. Previously, the dataset would throw an exception.
Fixed issue with duplication of table names in MapPackage.
OgcWfsDataSet will now continue to request features of other types even if requesting one type resulted in a service exception, given throwExceptions = false. Previously, it would cancel all requests even if only one failed.
OgcWfsDataSet and OgcWcsDataSet will now perform multiple requests in parallel when used in a TileLayer, significantly improving performance.
OgcWfsDataSet: fixed incorrect URL-encoding of non-ASCII characters in requests to WFS service.
OgcWfsDataSet now has properties switchRequestXY and switchResponseXY that can make the data set swap the axis order of its GetFeatures requests and its interpretation of responses, allowing the standard behavior to be overridden for compatibility with some WFS servers.
Fixed a crash that could occur when reading invalid or corrupt S63 data.
Fixed a bug where the ShapeWriter class would write an incorrect file length in the output file's header if the length was over than 131070 bytes.
Fixed a minor problem with the MapInfoTemplate.px sample.
The SimpleTileServer sample application received minor improvements and now requires .NET Core 3.1.
Fixed the CsvDataSet implementations in the CustomDataSet samples to return the correct bounds rectangle.
Fixed various DPI related issues in the QtGraphicsView sample.
Fixed an unitialized-variable bug in the ProjectedVideo sample.
Improved the error handling when using CustomOperators.
AirspaceCoverageOperator will now ignore observers that are far outside of the areaOfInterestInput polygon. This prevents some internal working rasters from getting too large, resulting in an exception.
The highest resolution of elevations within the area of interest will now control the output resolution for an AirspaceCoverageOperator, even if the high resolution data covers only a part of the area.
Fixed a problem with the viewshed volumes from LineOfSightOperator and AirspaceCoverageOperator: they indicated that the observers could never see anything inside a two degrees wide cone, directed straight down. Also fixed some inaccuracies that could occur in the top surface of a viewshed volume, especially near the observer above a steep ground slope.
Improved accuracy in CameraProjectOperator calculations.
Fixed a bug where CameraProjectOperator could sometimes not work on older hardware using the DirectX renderer.
Fixed the order of polygon output from IsolineOperator, so that larger polygons are output before smaller ones.
The documentation and error handling relating to the usage of LayerRasterizeOperator in a GlobeView has been improved.
The Carmenta Engine runtime now correctly migrates old configurations that contain the renamed property LineOfSightOperator.outputHeightType to its current name, minVisibilityHeightType.
Fixed a minor inaccuracy in LineOfSightOperator and similar operators: they will no longer round the sensorHeight value to an integer.
Performance improvements in RasterReclassificationOperator.
ShadeOperator and SlopeOperator now mark output rasters as continuous.
Fixed a crash that could occur in TerrainRouteOperator when accessing areas without input data.
Corrected the calculation of the attribute constrainedBySearchMargin by TerrainRouteOperator and the similar attribute taopConstrainedByMaxDistance by TerrainAccessOperator: they could sometimes become False incorrectly.
Fixed a problem where the terrain profile from a VerticalProfileOperator, if not under a TileLayer, could wobble between two alternative shapes while the profile view was panned.
In VerticalProfileOperator, the MaxDistance is used more conservatively in an elevation raster, so that the number of raster cells to explore sideways is always rounded up.
Fixed a minor visualization error in the NATO STANDARD APP-6(B) iceberg symbol.
Fixed visualization errors that could occur in tactical main attack arrow.
Fixed an issue where tactical symbols would not change when the value of the TacticalVisualizerParameters.scale property changed during runtime.
Fixed an issue with parsing attribute-controlled SVGs, which was impacting some symbols in MIL-STD-2525D and NATO STANDARD APP-6(D).
Fixed rendering of the fireteam/crew echelon modifier in MIL-STD-2525D and NATO STANDARD APP-6(D).
Fixed missing frame for certain combinations of identity and status in MIL-STD-2525D and NATO STANDARD APP-6(D).
Fixed symbols using civilian coloring in MIL-STD-2525D and NATO STANDARD APP-6(D).
Fixed an issue where an incorrect cursor could be displayed when using multiple Windows Forms MapControls.
Fixed an issue where features in a GlobeView would not precisely follow the cursor when moved, depending on what type of visualization was under the cursor, if the layer has GroundRelative = true.
Fixed an issue with CreateTool where an extra node could be added at the end of the feature when double-clicking, to finish editing, while also moving the mouse.
Fixed a CreateTool dateline problem that could occur when the View and the MemoryDataSet both used the same CRS, which was based on a cylindrical map projection.
CreateTool and CreateTool3D now support animated mouse scroll zoom.
Corrected the camera direction arrow in the overview map of an OverviewTool connected to a main GlobeView, in two cases: when the overview View had a rotation, and when the overview View CRS had grid north different from true north.
Fixed an issue with StandardTool where it was not possible to add a node to a LongLat line segment that crossed the meridian 180°.
Fixed an unexpected behavior with StandardTool when trying to move a feature node, if the interacting-event handler does not allow moving nodes and multiple features are selected. Before, only the feature to which the node belongs would get moved. Now, all selected features get moved.
Fixed flickering artifacts that could occur in CompositeLineVisualizer due to floating-point inaccuracies when clip = true.
Upgraded the version of the embedded FreeType library (used on Windows and Android) to 2.9.1.
Fixed attribute variables not being correctly read in InteractionVisualizer.
Fixed incorrect rendering of text halo with some fonts on Linux.
Fixed some issues with text placement when using TextVisualizer.followLine.
Fixed visual artifacts that could occur when rendering patterns using the software renderer at certain DPI scales.
Improved rendering of line and polygon fill patterns. Filtering is now selected automatically depending on whether the pattern image is scaled or not.
Fixed multiple labels appearing in a polygon under a TileLayer and LabelOrganizingLayer when PointVisualizer.atCenter = true.
Fixed visual artifacts that could occur in non-software renderers when zooming closely in on a polygon under an OrdinaryLayer with a dynamic cacheMode.
Improved handling of miter limits in SVG symbols.
Fixed a rare issue where SVG symbols could show the Y padding of another, similar symbol.
Fixed rendering artifacts after updating a View with a resized BitmapDrawable.
Corrected the rendering of S-52 light sectors; azimuth calculations were incorrect and in some CRSs the angles of the sectors on screen were wrong.
Upgraded S-52 Presentation Library used by S52Visualizer, from version 4.0(.1) to 4.0(.3).
Fixed a bug in S57DataSet index files preventing long light legs from being displayed by S52Visualizer. Existing index files will still work, but the SCAMIN value will not be used, and the light legs will be displayed regardless of view scale. For correct handling of long light legs, the S-57 index files need to manually removed; new ones will be regenerated automatically.
Added a new property lobeRoll to SphereOperator.
SymbolVisualizer instances created from application code now get the correct default color, i.e. red.
The Android MapExplorer sample application has been updated to work on Android 11.
Fixed a crash on Android during application startup, when the assets folder contained a large number of files and sub-folders to unpack to the local file system.
View.DisplayStatistics has been fixed to correctly report the triangle count when using the DirectX renderer.
Carmenta Engine for Android is now built using Clang and the libc++ C++ standard library from Android NDK r23 LTS.
When using an SDK license key as a runtime license, when developing for Android, a watermark is now always shown in the view.
Fixed a crash that could occur in functions returning byte arrays, if the returned byte array were empty.
Fixed a possible crash when rendering text labels with mixed right-to-left (e.g. Arabic) and left-to-right text.
Avoided a rare deadlock that could occur under certain circumstances when an application loaded a configuration and started updating it, and then immediately loaded a second configuration.
LineOfSightOverlay now correctly limits the number of actually-used observers to 10. Previously, errors could occur if the number of observers exceeded this documented limit; now, observers beyond the first 10 are ignored.
Fixed several bugs in the performance profiler.
Performance improvements in LabelOrganizingLayer.
Fixed a regression in the Bing Maps support in OgcWmtsLayer.
Fixed a crash that could occur in OgcWmsLayer if explicitStyles was non-empty and has fewer elements than explicitLayers.
Fixed a crash that could occur in OgcWmsLayer under a view with a CRS not supported by the service.
Fixed a bug in the Printer.PrintBitmap() method, causing the red and blue color channels to be swapped in printed output.
Fixed a crash in OgcWmtsLayer.Reset().
Improved parsing of polygons from Mapbox vector tiles.
Fixed an issue where map was not correctly updated after zooming, when using a LabelOrganizingLayer with buffered set to true, and TileLayers.
Fixed an issue that could cause redundant state changes impacting performance when using OpenGL.
Fixed incorrect lookup order for localized properties specified in ISO 19139 documents, in, for instance, View.GetLocalizedDisplayName().
The set of methods for dealing with localized properties (e.g. View.getLocalizedDescription/View.setLocalizedDescription) have been extended with new methods (e.g. View.hasLocalizedDescription), to be able to check if a property has been set for a particular language.
The key used for verifying the signed .rpm packages is now imported correctly when running the installer as an ordinary user on Linux.
Fixed invalid truncation of UTF-8 attribute names in ShapefileWriter.
Fixed exporting grayscale images to TIFF.
The internal symbol cache has been optimized to reduce performance overhead.
Reduced visual artifacts when re-projecting rasters with lower resolution than the screen.
It is now possible to display Unicode characters above 0xffff, if the corresponding glyphs are included in the selected font. Previously, this only worked on Linux and Android, but not on Windows.
Increased precision of Geometry.toWellKnownText().
Fixed a crash that could occur with non-thread-safe custom operators when used in a TileLayer with TileLoadingPolicyParallel.
Fixed unnecessary WMS requests when OgcWmsLayer is used under a TileLayer with bitmap caching to disk enabled (cacheAsBitmaps = true and cachePath set).
Fixed Drawable.save() and Drawable.getImage() with attribute transparent=1 not making the background transparent when using the DirectX renderer.
The QtGraphicsView tutorial and sample has been updated to work with Qt 6.
The Qt and QtQuick map controls will now call mouseDown() once and then mouseDoubleClick() when the user double clicks. Previously, it would call mouseDown() twice, followed by mouseDoubleClick(). The new behavior matches that of the other map controls.
The QtQuickMapControl now receives touch events properly in Qt 6.
Fixed a potential stack overflow in the software renderer.
Fixed a problem with locating the Carmenta Engine data files and license on Android when using Xamarin.
Fixed problems causing crashes in XamarinMapControl due to incorrect surface usage or using EGL from wrong threads.
5.14.1 Release Notes
System Requirements Changes
Qt MapControl classes have been updated to work with Qt 6.
The Carmenta Engine .NET Standard API has been verified to work with .NET 5, on Windows and Linux.
Fixes and Minor Improvements
Fixed a crash in DwgDxfDataSet, when accessed from multiple threads simultaneously.
Fixed a georeferencing problem that could occur in a CmrgDataSet with a cylindrical map projection and an extent that crosses the dateline.
Fixed some issues when writing GeoPackages with non-EPSG coordinate reference systems.
Fixed a bug exporting coverage data to a GeoPackage, that could throw an exception.
MapPackageVectorWriter.WriteFeature() now throws an exception if the coordinate reference system of the feature does not match that of the of GeoPackage table.
CM93RasterDataSet: Workaround for a bug in external library when generating very narrow chart images.
Fixed a GDI resource leak in CM93RasterDataSet.
Fixed incorrect name property on the predefined LineStyle instances triple1 and triple2.
Fixed a problem reading tiles with overlapping data in MvtDataSet, using Google Maps compatible tiling scheme.
Reduced stuttering when loading detailed 3D assets.
Fixed a crash in the OpenGL renderer on Android devices without support for OpenGL ES 3.0.
Fixed a bug parsing polygon faces from OBJ 3D models.
Fixed a problem making it impossible to retrieve the metadata for the App-6(D) symbol standard.
Added missing property SymbolStandard.App6D.
Added some App6D types missing in Carmenta Studio.
SymbolStandardMetadata.composableSymbols property getter now return an empty vector instead of null for the 2525D and App6D standards.
Fixed a problem with distorted map colors when using the WPF map control with a software renderer.
Fixed incorrect placement of visualization for PointVisualizer with clipToViewArea = true, in an OrdinaryLayer with dynamic caching and a non-zero view rotation.
Passing an empty string as value to any of the setLocalized... methods on DataSet, Layer, View, Legend, LegendItem, or NamedStyle classes will now remove the localized value for the specified language.
The FileDataSet.Path property has been made writable. Just like FileDataSet.FileName, the property can now be modified as long as the dataset has not yet been initialized.
In the Windows Forms MapControl for the .NET Standard API, the kind parameter to the UpdateView() method, which was previously ignored, is now properly passed to the corresponding View.Update() method.
Fixed a possible crash in CatalogMap.FlushAllDataSets() method.
5.14 Release Notes
New Functionality and Major Improvements
The new CameraProjectOverlay makes it possible to display full motion video streams in 3D GlobeView maps.
The LineOfSightOperator can now produce viewshed volumes that show how much of an airspace can be seen. The volumes can be visualized in GlobeView or used as input to VerticalProfileOperator and IsolineOperator.
The new AirspaceCoverageOperator merges a number of viewshed volumes into a volume that represents what is covered by a sufficient number of observers. The operator can also produce the in-sufficiently covered parts of an airspace of interest.
New feature animation methods on MemoryDataSet can be used to smoothly move features along a 2D or 3D trajectory and to animate their transition to a new position.
The new Layer.DisableOnError functionality makes it easy to catch errors occurring in a layer and automatically turn the layer off to prevent further problems.
A new API makes it possible to write raster and vector data to files in the OGC GeoPackage format.
The new AixmDataSet class makes it possible to directly read and visualize aeronautical information in the AIXM 5.1 and 5.1.1 formats.
The Tactical Extension now supports symbols from the US MIL-STD-2525D and NATO APP-6(D) standards.
When using RadarVideoLayer it is now possible to visualize the sweep intensity using a user-defined color table. This is especially useful for weather radar presentation.
The hardware accelerated Effects concept is now available for 3D overlays such as line-of-sight and georeferenced video.
The Drawable.RendererSettings API makes it possible to configure the hardware accelerated rendering for greater visual fidelity.
The new SortOperator can be used to sort features in an operator chain in a user-defined order.
A new scheduling mechanism ensures that all MapControls in an application are updated fairly and that the application UI stays as responsive as possible.
System Requirements Changes
Ubuntu 16.04 LTS, Red Hat Enterprise Linux 6, SUSE Linux Enterprise 11 and SUSE Linux Enterprise 12 are no longer supported. Support for Ubuntu 20.04 LTS, Red Hat Enterprise Linux 8 and SUSE Linux Enterprise 15 has been added.
Android versions older than Android 6.0 are no longer supported.
The minimum supported Qt version is now 5.9 for both Qt and Qt Quick.
Important Notices and Breaking Changes
The MemoryDataSet.RestartAnimation() method has been renamed to MemoryDataSet.RestartVisualizationAnimation() to avoid confusion with the new feature animation support.
PresentationObject.Ordinal has been replaced with PresentationObject.Ring. The Ring property will be set to the polygon ring that the PresentationObject was created from.
The LabelOrganizingLayer.Buffered property now works as expected in both 2D and 3D. It was previously ignored in 3D; the layer always behaved as if it was set to True. If an old .px file is loaded, the old behavior will be emulated, but you should check the setting of this property on all your LabelOrganizingLayers.
To enable the use of user-defined color tables in RadarVideoLayer, the Radar.Color property is now of type ColorAttributeVariable instead of type Color. Configuration files will be automatically migrated but application code accessing the property directly will have to be updated.
The LineOfSightOperator property OutputHeightType has been renamed to MinVisibilityHeightType to avoid confusion as new output types were added. Configuration files will be migrated automatically, but application code accessing the property directly will have to be updated.
Carmenta Engine for Windows is now built with Visual Studio 2019. The 2019 C++ runtime libraries need to be included when you deploy an application on Windows; for details, see the article Deploying Carmenta Engine 5 Applications on Windows.
The article Efficient Integration of Map Controls in GUI Applications describes how to configure the new map update scheduling mechanism.
The View.Refresh() method has been removed. Applications should call View.Update() instead.
Breaking change for custom Tool implementations: ITool.onTimer has been removed. Use IToolTimerSink for periodic updates and the View.updating event to perform tool code right before an update is made.
Breaking change for custom MapControl implementations: Timers and all scheduling logic have been moved into the kernel and should no longer be implemented in the control. The View.dataReady and View.externalUpdate mechanisms have also been removed. Custom MapControls now only need to call View.setViewUpdateSettings() and handle the View.updateRequired event. To support custom tools using the IToolTimerSink interface, also call View.setToolTimerSettings() and handle the View.toolTimerElapsed event.
The signature of the View.Update(bool) and MapControl.UpdateView(bool) methods have been changed to take a ViewUpdateKind argument which determines when the update is performed. Most applications should use ViewUpdateKind.Immediate - only use ViewUpdateKind.Blocking when a blocking update is really needed.
Breaking change in the TacticalVisualizerParameters API: Some properties have been moved to the new subclass MilitaryCVisualizerParameters. Configuration files will be migrated automatically, but code that uses TacticalVisualizerParameters might need to be updated.
The DataSetInitialization enumeration value Delayed have been replaced with two new values, OnDemand and OnDemandSuppressErrors. The former was added to work better with the new Layer.DisableOnError functionality, while the latter works exactly as Delayed did in the previous version.
Fixes and Minor Improvements
Fixed issue where very large textures were only partially uploaded to the GPU when using OpenGL.
Fixed problem where changes to update attributes were not reflected in GlobeView surface layers even if the surface layer was flushed.
Fixed a problem with disappearing meshes in Collada models.
Fixed InteractionVisualizer ground nodes having wrong elevation when under an OrdinaryLayer with groundRelative = True.
Fixed symbols sometimes becoming unselectable in a GlobeView when under an OrdinaryLayer with groundRelative = true.
Fixed an issue where scale would not be applied to bitmap-cached symbols in a globe view.
Fixed incorrect behavior of the stream objects returned from the Raster.Data and Raster.ReadOnlyData properties in the .NET Standard API.
Selecting or deselecting features no longer forces expansion of other feature properties in the Properties panel of Carmenta Explorer.
In Carmenta Explorer, the Save File dialog for configurations created from geodata no longer suggests the filename of the most-recently saved configuration, thus reducing the risk of accidentally overwriting files.
Carmenta Explorer no longer displays a Select Features context menu item where it is not applicable.
On a fresh install, Carmenta Explorer now opens the Sample Map Configurations folder when pressing "Open Map Configuration".
Fixed a bug in Carmenta Explorer where it could crash when selecting a feature from an MvtDataSet.
Fixed a crash in Carmenta Explorer that could sometimes occur when opening several data files of which only some were georeferenced.
The "Page Setup" dialog in Carmenta Explorer is currently disabled.
Carmenta Studio: fixed a graphical corruption that could occur when a node that is parent of a SplitOperator is collapsed.
Removed obsolete property LoadLayerSet.autoLoad from Carmenta Studio.
Fixed a problem where Carmenta Studio could misinterpret a configuration file created with Configuration.Save(), if two operators of the same type were in the same operator chain.
Improved handling of errors that occur when a monitored Catalog is being updated after it has been modified.
Catalog Extension has a new type of service representing GlobeViews.
Upgraded to version 9.8.15 (July 2020) of the EPSG database of Coordinate Reference Systems.
Corrected some Esri names for geodetic datums (used for Shapefile georeferencing).
Corrected the bounds rectangle for a RotatedProjection.
Improved error handling in the DatabaseDataSets.
Improved performance of DataSetInfo.FromDirectory when querying a large number of files.
Fixed a crash retrieving DataSetInfo for raster file loaded by GDAL, if file had a built-in transform with rotation or skewing.
Fixed a problem when a GdalDataSet was reading a CRS definition from a GeoTIFF file and there was a TOWGS84GeoKey that gave an explicit datum shift different from the Carmenta default for the geodetic datum: The explicit datum shift would be used only initially, but would be lost when the CRS information was stored in the dataset index files.
Fixed a possible crash when reading some GeoTiff overview files that were not tiled.
Fixed thread-safety issues in GLTF 3D model reader.
The glTF 3D model reader will now read the emissive texture if there is no base color texture.
The GeoPackage tile reader is now more forgiving when reading tile sets that do not fully conform to the GeoPackage specification.
MapPackageDataSet can now read elevation or other coverage data from GeoPackages using the "GeoPackage Extension for Tiled Gridded Coverage Data".
MapPackageDataSet can now read GeoPackages containing SQL Views.
MapPackageDataSet can now read GeoPackages containing unusable CRS authority and code if they also provide a valid Well-Known Text representation.
Fixed problem with selecting features when using the MapPackageDataSet to read vector features from a GeoPackage.
Fixed a crash in MapPackageDataSet reading empty map package.
Added the new method RefreshAllFeaturePresentation to the MemoryDataSet class. This is a more efficient function to call than RefreshFeaturePresentation when all of the features in a MemoryDataSet have changed.
MvtDataSet now returns the valid rings of invalid multi-polygon geometries instead of throwing away the whole multi-polygon.
Reduced the memory used by a MvtDataSet when it is queried.
Fixed a problem where values in an OgcWcsDataset could not be retrieved using TryGetFloatValueAt.
The OgcWcsDataSet now creates a RasterVisualizer with a grayscale color table and attaches it to the features, instead of creating rasters with attached palettes.
OgcWfsDataSet can now handle DescribeFeatureType responses that indirectly describe the featureTypes using XML schema imports.
Fixed an issue where OgcWfsDataSet could send requests with empty SRSNAME parameter.
Fixed an issue where OgcWfsDataSet was using the RESOURCEID parameter in WFS 1.x, it now uses the correct FEATUREID parameter instead.
Fixed OgcWfsDataSet crash that could occur when zooming out very far in some configurations.
Fixed a problem that could cause OgcWfsDataSet to fail to get all features within the requested area.
OgcWfsDataSet now handles services that respond with a different-but-equivalent Content-Type from what was requested.
OgcWfsDataSet will now fall back to HTTP Post/XML-based GetFeature requests if HTTP Get/KVP-based request fails.
OgcWfsDataSet will now split very long DescribeFeatureType requests into multiple shorter ones.
Fixed OgcWfsDataSet sending GetFeature requests with both FILTER and BBOX parameters; filtering will now be done partly on client side for such requests.
Fixed a crash that could occur when cloning an OgcWmtsLayer that did not initialize successfully.
Fixed an issue where calling S57DataSet.GetFeatures() with one or more specific feature IDs would return numerous other features.
Added missing DEPTH attribute in DataSetInfo.FeatureAttributes for an S57DataSet.
The documentation of the S-63 support has been extended to include a few examples of the workflow for some typical use cases.
Registered S-63 exchange set data are now stored with a path relative to the path of the S-63 database instead of using an absolute path.
Improved support for reading WCS data from GeoServer.
Fixed a problem when cloning datasets, which could make the clone regenerate file index and raster cache files.
Fixed an issue where some datasets could sometimes fail to detect errors due to truncated data files.
When passing a crs parameter to one of the ShapeFileWriter constructors, the parameter could previously be misinterpreted as a bool, resulting in the wrong internal constructor being called.
Added relevant See Also links on reference pages in the Carmenta Studio documentation. Added a new documentation section on event handling with examples for the C++ API.
Improved performance of BorderMatchOperator and BorderSnapOperator when used on large numbers of complex polygons.
Fixed a problem where buffer zones would sometimes be calculated incorrectly.
CameraProjectOperator now sets the ID of its created features to that of the input feature that generated them.
Fixed bug where ConnectLineOperator would throw an exception if it received read-only line features expressed in more than one CRS.
Better error handling for CustomOperator implementations that fail to prepare the inputs.
Fixed an issue which could occur when two or more CustomOperators or ScriptOperators are joined via a SplitOperator under an OrdinaryLayer with a dynamic cacheMode.
Fixed an issue in GeometryConversionOperator: It would produce no output when converting meshes to elevation rasters if the mesh CRS differed from the view CRS.
A GridGenerator will now give more useful values for the auxiliary line attributes impactAngleAtStart and impactAngleAtFinish when the line starts or finishes in the interior of the map window.
Carmenta Engine will now throw an exception if a grid generator or a CrsBoundaryGenerator is used in a layer with a dynamic cacheMode.
Fixed a bug when IsolineOperator generated isopolygons which could result in the background polygon getting the wrong minValue and maxValue.
Fixed some problems when IsolineOperator gets rasters of minimum visibility heights from a LineOfSightOperator.
Fixed a problem with LineOfSightOperator where the values in a few output raster cells near the observer could sometimes incorrectly indicate no visibility.
Fixed an issue where a PolygonClipOperator in a GlobeView would remove polygons incorrectly.
Fixed an issue where RandomPointOperator created too few points.
The RasterConversionOperator properties Factor and Offset will no longer affect cells that have the undefined value.
Improved the result when merging rasters with different CRS in RasterMergeOperator.
Fixed RidgeOperator so that all properties that are expressed in meters are handled correctly also when the input raster CRS is based on another unit.
Fixed a problem when using RidgeOperator in a TileLayer: Lines that were longer than minLength could sometimes be removed if they passed through more than one TileLayer tile.
The properties Name and UserProperties are now set correctly for ShadowOperator instances loaded from px files.
The ShadowOperator output raster will now be Undefined wherever the input elevation raster is Undefined.
Fixed a problem when using ShadowOperator with floating point elevations.
ShadowOperator will no longer unnecessarily extend available elevation geodata to fill the requested area.
ShadowOperator no longer assumes that a sun within 10 degrees from zenith will make everything sunlit.
Fixed incorrect results from a ShadowOperator used in a very zoomed-out scale.
The TargetLineOfSightOperator and LineOfSightOperator have got a new property maxUpDistance.
The TargetLineOfSightOperator now supports both the horizontal and the three-dimensional maxDistanceType.
Fixed a problem with TerrainRouteOperator, which could produce incorrect route attributes for the accumulated distance and time spent in named, softly restricted areas, if different areas had the same name.
UtmGridGenerator now generates correct UPS grid lines around the south pole.
UtmGridGenerator will now place MGRS grid labels in a better way in polar regions.
Bug fix for UtmGridGenerator with a View area crossing meridian 180°. The labels for the 100-km MGRS squares would sometimes not be generated, depending on the projection type of the View CRS.
Corrected the resolution used when the VerticalProfileOperator requests data from its routeInput.
VerticalProfileOperator now skips lines from routeInput with horizontal length 0, instead using the first feature in routeInput that has longer length. This avoids issues that may occur e.g. when VerticalProfileOperator is used in conjunction with ConnectLineOperator.
All operators that inherit from the abstract class VisibilityOperator, for example LineOfSightOperator, have got a new property desiredInputResolution.
Fixed a bug where the tactical visualization of a selected minefield polygon in a rotated view could cause visual artefacts.
Fix out-of-bounds access error in MilStd2525C visualization that could occur with some very unusually shaped corridors.
Fixed an issue where tactical visualization ignored some UpdateAttributes.
Fixed an issue where a View could get zoomed out too much when an OverviewTool was connected to the View.
Fixed QtQuick Sample Application getting stuck in zoom tool when Alt-Tabbing.
Improved thread safety of included tools.
Fixed touch control when zoom is limited by view constraints.
Fixed a bug which could make it impossible to deselect features when using a GlobeView configuration in a WPF application.
Fixed an issue where BufferedDrawable.DrawRaster ignored the clipRect parameter.
Fixed issue where layers with CacheMode = DynamicAsync were not always updated properly in 3D.
Fixed an issue with CompositeLineVisualizer under a TileLayer.
Fixed an issue where a CompositeLineVisualizer with Style = Symmetric rendered some line segments in the wrong order.
Fixed visualization errors that could occur in line clipping in CompositeLineVis when zoomed in on the line.
DirectX 11 renderer: Fixed rendering of dashed lines in symbols rendered in 3D.
Improved the clarity of ground textures in GlobeView.SurfaceLayers when using OpenGL rendering.
When rendering meshes in 2D maps, textures that are too large for the GPU are now automatically downscaled.
Fixed bug that caused InteractionVisualizer.NodeVisualizer to become unselectable when using RenderingPriority = High.
Setting RenderingPriority on an InteractionVisualizer now works as expected.
More consistent rendering of very thin lines in the OpenGL renderer.
Fixed performance issue when zooming in very far on lines with repeated symbols or texts not under a TileLayer.
Fixed a problem where the leadline of a PointVisualizer did not automatically adapt to view scale and rotation when LengthUnit = Pixels, LeadLineSettings.AttachTo = Hotspot, and under an OrdinaryLayer with a dynamic CacheMode.
Fixed a bug in InteractionVisualizer where the nodeVisualizer was used when the groundNodeVisualizer should have been used.
Fixed a problem where symbols in PlotLayer3D would sometimes blink when using multiple windows.
Fixed a problem with PointVisualizer.ClipToViewArea not working under an OrdinaryLayer with dynamic caching.
Fixed an issue where PointVisualizer.Repeat = Node did not place symbols correctly on the last segment of a closed line when 'At' was not an integer.
Fixed a visualization problem in TileLayer; when a PointVisualizer was repeating a symbol along a line, some symbols could be missing after panning the view.
Fixed a problem in the Printer class, where raster layers could be printed in too low resolution.
Added new property S52Visualizer.OptimizeForBitmapTiling.
Added log warning when using a TerrainWarningOverlay on a view with a renderer that does not support it.
TextVisualizer with FollowLine = True now works correctly with closed geometries.
The TileLayer thread pool has been modified to reduce the risk that its background work will cause stutters in the map updates.
Fixed the handling of the color palette for 1-bit TIFF rasters. Fixed a problem where LegendLayer could sometimes cause crashes.
Fixed Flip-up when used with follow line in text visualizer.
LegendItem.GetImage() no longer generates images smaller than desiredWidth * desiredHeight.
It is now possible to use the Carmenta Engine .NET Standard API versions of the WPF and WinForms MapControls in the Visual Studio toolbox.
Fixed problems with changing renderer on computers with Intel HD Graphics.
Changed the type of the shift, ctrl and alt parameters from int32t to bool in the C++ API for the following methods in MapControl: keyDown, keyUp, mouseDoubleClick, mouseDown, mouseMove, mouseUp, mouseWheel.
Fixed ViewInfo.PixelHeight becoming too small in tiles that are partially outside the View CRS bounds in a TileLayer.
Fixed the scaling of objects when printing 3D GlobeView maps.
Fixed a problem that could cause .NET applications to freeze on shutdown when using a very high MapControl.UpdateInterval.
Fixed problem with Tools that do not implement the IToolTimerSink interface when using the WinForms MapControl and the Carmenta Engine .NET Standard API.
The rpm packages for Linux are now signed.
Fixed problem with the Java MapControl with some versions of Java when running on Linux.
The License Key Manager now asks for confirmation before installing a license.
Added a workaround for a bug in Visual Studio that made it impossible to use our Xamarin NuGet package with the project type Android Class Library (Xamarin).
Changes to the OrdinaryLayer.Selectable property is now reflected immediately without explicitly flushing the layer, even with cache mode DynamicAsync.
Fixed bug where a TileLayer could hang if reactivated after throwing an exception.
Fixed a bug in GeometryClipper.ClipPolygon(polygon1, polygon2, operation), which always returned null if the bounding rectangles of the polygons did not overlap, regardless of the requested operation.
In the StandardTool.Interacting event, setting the AllowSelect flag of a FeatureInteraction to False no longer disables hover unless the AllowHover flag is also set to False.
The GlobeView tile cache file is now shrunk back to its specified maximum size after a period of heavy load.
Fixed an issue where a RangeOperator immediately followed by a SplitOperator would not return any features.
Disabled automatic downsampling of large rasters undergoing projection or merging if Runtime.RasterSizeLimitEnabled is False.
Fixed a redraw problem in WPF map control after pan or zoom operation was completed, if the view had layers with EnabledDuringQuickUpdates property set to True.
Fixed wrong cursor being shown when hovering over features from an OgcWmsLayer or OgcWmtsLayer under a selectable LabelOrganizingLayer.
Upgraded the third party Teigha libraries, used by DwgDxfDataSet, to version Teigha 2021 Update 7.
Improved behavior when using label organizing under a layer with dynamic cache mode.
Fixed bug that could cause unexpected errors when reading very large rasters.
Fixed a bug where automatic updates from TileLayers were not performed when using MapControlUpdateMode = Immediate.
Fixed problem when calculating bounds of presentation object children.
Improved the logging of OgcWmsLayer server requests.
Fixed crash when reading PNG images with 16-bit grayscale or grayscale with alpha.
Fixed a possible race condition using cache mode DynamicAsync, when one source feature generated multiple features in the operator chain.
Fix crash that could occur when parsing some types of invalid XML.
The View.DisplayStatistics FPS counter is now averaged over time instead of over a number of frames.
It is now possible to control the interval time for the StandardTools and tools implementing IToolTimerSink by using the new MapControl.toolTimerInterval property.
Feature animations now work with MapControlUpdateMode.Immediate.
Fixed problems with running applications on Android when using newer version of the Android Gradle plugin in Android Studio.
Fixed an OpenGL-resource leak that could occur when switching to a different renderer in a configuration containing a TileLayer.
Fixed problem with some CustomDataSets that uses the Java API on Android.
Fixed problem with corruption of some raster tiles when using the TileLayer disk cache in a View with a specified PixelSizeAdjustment.TileSizeScaleFactor.
5.13.1 Release Notes
Fixes and Minor Improvements
Fixed a problem which could cause a Windows Forms MapControl using MapControlUpdateMode.OnTimer to never update the view.
Fixed an issue in the WPF MapControl: When using MapControlUpdateMode.Scheduled the view would be updated as often as possible, ignoring the MapControl.UpdateInterval setting.
Fixed a bug where the QtQuickMapControl could freeze when using Intel HD graphics cards.
Fixed a bug which could cause the QtQuickMapControl to render to the wrong part of the window.
Fixed a problem when setting the StandardTool.QuickUpdateEnabled property before the tool was connected to a MapControl.
Fixed a memory leak in TacticalSymbol.
A RangeOperator without input can now use update attributes.
Corrected too large viewshed from LineOfSightOperator when an observer looked uphill and maxDistanceType = ThreeDimensional.
Fixed incorrect interpolation of elevations in LineOfSightOperator.
Fixed a bug in LineOfSightOperator that occurred when its verticalUnit was not meter.
Fixed problems that could occur with the terrain routing operators when the restrictedAreaInput gave a raster feature in a CRS different from the elevation data CRS, or when two or more restricted raster features overlapped each other, or when the raster features were only softly restricted.
Fixed a bug where updated features were not rendered correctly in OrdinaryLayers with CacheMode = DynamicAsync under a LabelOrganizingLayer.
Fixed a bug where selection and hover visualizers attached to raster features were never rendered.
Fixed a problem with TextVisualizer.FollowLine when the TextVisualizer was using LengthUnit = NominalMeters.
Fixed a thread safety problem reading 3D models in 3DS format.
Fixed a bug where 3D LineOfSightOverlay observers with Dynamic = false never showed up in the 3D view.
Fixed a problem where the frame rate could suddenly drop significantly during heavy load in a GlobeView configuration using script or custom operators.
Corrected several errors and inconsistencies in profiler output for a GlobeView.
The calculation of the automatic update attribute distance3D now properly uses the Z coordinates of the feature, instead of calculating the distance to the object at Z = 0.
Fixed a problem with the UI freezing for several seconds when the GlobeView tile cache was used.
5.13 Release Notes
New Functionality and Major Improvements
It is now possible to create and edit circles and ellipses using the built-in tools.
The OgcWmtsLayer can now load tiles from tile-based map services that do not conform to the OGC WMTS standard, such as OpenStreetMap and Bing Maps.
The new RangeOperator makes it easier to visualize multiple concentric circles around point features.
The LineOfSightOperator algorithm has been parallelized and is now several times faster on most systems.
The DirectX 11 renderer has improved performance when rendering large amounts of information.
Some datasets can now read additional metadata according to the French GéoBase Défense and TopoBase Défense standards. The metadata is accessible to the application through the DataSetInfo mechanism.
It is no longer necessary to download and install a separate Java Runtime Environment to use Carmenta Studio.
The .NET Standard API is now distributed in a NuGet package on Linux.
The new method Printer.GetBitmap() method makes it easy to retrieve a high-DPI bitmap for printing on all platforms.
It is now possible to register SDK license keys without administrative rights.
The performance of TerrainRouteOperator and TerrainAccessOperator has been significantly improved thanks to internal optimizations.
The modelling of the road network in TerrainRouteOperator and TerrainAccessOperator has been improved: Road lines are now kept as line features during routing. This makes it possible to use road properties such as one-way restrictions, and road restrictions on vehicle width/height/length/weight can be respected.
The TerrainAccessOperator can now calculate travel times from a specified starting point; this analysis is known as "isochrones" or "omnidirectional route analysis".
The terrain routing can now handle areas that should be avoided but are not completely forbidden.
The TerrainRouteOperator has a new property outputRouteDetails which can be used to produce a more detailed representation of the calculated route.
Carmenta Studio on Windows can now validate path and file name properties in order to warn the user about Linux/Android portability problems.
The Projected Video application sample now includes an implementation of a subset of the MISB ST 0601.8 standard that is used in the STANAG 4609 standard for UAV metadata.
Animated attribute variables can now be triggered on demand using the new MemoryDataSet method RestartAnimation.
Added new operator RidgeOperator that detects ridges and valleys.
System Requirements Changes
Android versions older than Android 4.1 are no longer supported.
The minimum Qt version when using Qt Quick is now 5.9.
Important Notices and Breaking Changes
The deprecated property OrdinaryLayer.buffered and the deprecated enumeration value OrdinaryLayerCacheMode.Static have been removed. If you still have configurations using these properties, you should open them in Carmenta Studio and select a different cache mode.
Shapefile attribute names that could not be represented in plain 7-bit ASCII used to be handled inconsistently. Such attribute names will now always be read and written using the same code page as is used for string attribute values.
The enumerations CustomSymbolCacheHint and CustomVisualizerCacheHint now have bit field semantics, so several values can be combined. Custom symbols and visualizers written in Java will need to modify the return type of the draw() methods because of this change.
ConnectLineOperator and ConnectPolygonOperator now consider an attribute that is missing in both features to have the same value in those two features. This means that it will now connect two features that both lack an attribute specified in a condition, as long as the rest of the condition is satisfied.
The DemDataSet will no longer round non-integral elevation values to the nearest integer, instead it will always output float rasters to maintain precision. Old DemDataSet raster caches may need to be deleted to get correct behavior.
The printer support has changed. The recommended way to print a map is now to use the new method Printer.GetBitmap() to retrieve a high-DPI bitmap, and then use that bitmap with whatever printing API the application is using. This is supported on all platforms. The Printer.PrintBitmap() methods are still supported on Windows, but the deprecated Printer.Print() methods and the PrinterDrawable class have been removed.
The legacy View3D class, deprecated since version 5.12, has been removed together with all related support classes. The GlobeView class which previously inherited from View3D now inherits directly from View. View3D based map configurations need to be manually migrated to GlobeView in Carmenta Studio. Application code which uses the View3D API needs to be updated to use GlobeView instead.
The DataSetInfo.rasterAttributeTable property used to be of the type RasterValueAttributeSetCollection, but is now of the new type RasterAttributeTable.
The TerrainDeployabilityOperator has been removed, since its use case was too specific and can be emulated by a TerrainSpeedOperator if needed. No automatic migration will take place.
In the TerrainAccessOperator, the property maxTimeFromRoad has been renamed to maxTravelTime because its meaning is now more general, and it is now a DoubleAttributeVariable instead of a Double. Configuration files will be migrated automatically in Carmenta Studio and in runtime, but application code accessing the property directly will have to be updated.
In the TerrainRouteOperator, the property forbiddenAreaInput has been renamed to restrictedAreaInput because its meaning is now more general. (This property has also been added to TerrainSpeedOperator and TerrainAccessOperator.) Configuration files will be migrated automatically in Carmenta Studio and in runtime, but application code accessing the property directly will have to be updated.
From the TerrainSpeedOperator and the TerrainAccessOperator, some properties have been removed that could limit the analysis to one or more specified areas; these properties were vehicleInput, shape, rectangleWidth, rectangleHeight, ellipseRadius, ellipseRatio and ellipseDirection.
From the TerrainAccessOperator, the properties enableEvents, outputUnit and outputBitDepth have been removed. Now the operator can no longer generate events, the outputUnit will always be 1 second (the old default), and the outputBitDepth will normally be 16 (the old default) but can become 32 if the maxTravelTime is huge.
In the TerrainRouteOperator, TerrainSpeedOperator and TerrainAccessOperator, the snowDepth property is now a DoubleAttributeVariable instead of a Double, and snow depth on roads can come from road attributes. Configuration files will be migrated automatically in Carmenta Studio and in runtime, but application code accessing the property directly will have to be updated.
Fixes and Minor Improvements
The SimpleTileServer sample application now requires .NET Core 3.0.
Fixed an issue where previously loaded tiles would briefly disappear before the new ones were loaded when enabling/disabling the LineOfSightOverlay in GlobeView.
Fixed an issue with the globe halo in DirectX not always being drawn correctly.
Fixed some tessellation issues in the Collada, OBJ and OpenFlight model readers that could result in missing or incorrect triangles in the models.
Fixed a transparency bug when rendering semi-transparent objects in non-cached layers.
Improved the IntelliSense in Java API IDEs like Eclipse when javadoc is not available.
The following methods in GlobeView have changed their behavior so that they return an undefined point when provided with an undefined point: fromGeocentric, toGeocentric, fromGeocentricPositionAndOrientation and toGeocentricPositionAndOrientation.
Fixed problem with opening Catalogs containing CustomObjects that is loaded using a relative path.
Creating a Map Package in Carmenta Explorer no longer applies Carmenta Explorer's own PixelSizeAdjustments.
Fixed an issue when switching renderer in Carmenta Explorer on Linux where the view scale could change if there was a ViewContraints object attached to the View.
The Carmenta Explorer User's Guide has been updated to match the current version of the application.
Fixed a problem loading .NET CustomObjects in Carmenta Explorer on Linux when only the .NET Core Runtime is installed.
Fixed an issue where loading data files in Carmenta Explorer would fail when converting between UTF-8 and the active codepage.
Improved error handling when using Open Data Directory in Carmenta Explorer.
Fixed incorrect rendering in CM93RasterDataSet on high-DPI monitors.
Fixed incorrect rendering in CM93RasterDataSet when the view and the dataset had different CRSs.
Fixed a DensityDataSet bug where a blur radius defined in pixels could become too short in a TileLayer tile partially outside the View.Crs bounds.
Ensured that DtedDataSet can read a file also if it contains some unusual optional headers.
Open Data File... in Carmenta Explorer now handles the DWG/DXF format.
Fixed problems reading GeoPackage files with sparse tile matrices.
Double-precision floating point values are now supported in ImageDataSet when reading TIFF files.
MrSidDataSet can now automatically extract CRS information from the data files when available.
Improved calculation of EstimatedMaxScale in DataSetInfo for MrSidDataSet, EcwDataSet and Jpeg2000DataSet.
Fixed incorrect RasterFormat in DataSetInfo for MrSidDataSet and EcwDataSet.
Added check to avoid a crash in MvtDataSet when receiving faulty visualization info from Carmenta Server.
When loading invalid features from a MvtDataSet, logging now returns the corresponding request URL.
OgcWfsDataSet now correctly handles 'ImplementsResourceId' for services that provide only one feature.
Changed the ShapefileDataSet so that it can read attributes from a .dbf file larger than the official maximum size of 2 GB.
Improved the ability of ShapefileDataSet to read non-standard .shp files larger than the official maximum size of 2 GB. Files up to 8 GB should now be possible to read.
Shapefile writing has been made more conservative and will never produce files larger than 2 GB, the official maximal size. The default behavior of ShapefileDataSet.Save() and the ShapefileWriter class is now to throw an exception when a file becomes too large. There is also a new property of the ShapefileWriter class which allows automatic splitting of a big file into multiple files that are small enough.
Fixed a problem with ShapefileDataSet, which could not deduce the code page from a .dbf file if its Language Driver ID was greater than 127.
The VpfDataSet now recognizes both uppercase and lowercase LAT (Library Attribute Table) files when searching for VPF libraries.
Fixed some issues in VpfDataSet reading data with mixed uppercase/lowercase file names on Linux.
DataSetInfo will now include data formats that are not licensed, when using an activated SDK license. Using unlicensed data formats will result in the evaluation watermark being shown.
Fixed a selection problem in DfadDataSet.
DemDataSet will now apply the vertical resolution factor to all elevation values.
DemDataSet can now handle some more variants of the DEM file format, allowing it to read some files that couldn't be read in previous versions.
Fixed a crash that could occur in RpfDataSet with some invalid data files.
Some raster resampling operations now have improved performance thanks to increased parallelization.
Improved accuracy in raster reprojection in some cases.
Fixed a threading issue in GeometryConversionOperator's mesh-to-raster conversion.
Fixed a problem with LineOfSightOperator in a TileLayer where the result was only visible in one tile.
Fixed several different problems in GeoTextureMapOperator when used in a GlobeView.
Fixed the EllipseOperator behavior for a sector width of zero, so that it creates a valid polygon feature with at least three nodes.
TerrainRouteOperator and TerrainAccessOperator can now be used in GlobeView.Layers.
The TerrainRouteOperator has a new property outputSearchBounds which can be used to generate the search area as a rectangular polygon feature.
The preformatted travel time attributes produced by TerrainRouteOperator will now use the uppercase unit symbols H, M and S in accordance with ISO 8601.
In TerrainRouteOperator, the numeric attributes for a leg feature that represents a failure will now be null instead of the greatest representable integer attribute.
The output raster from TerrainAccessOperator will now always use its Undefined value to represent unreached cells.
In the TerrainSpeedOperator, the calculated terrain speeds will now be rounded up when placed in the integer speed raster, so that zero speeds are clearly distinguished from positive speeds.
TerrainSpeedOperator now also outputs copies of the road line features with an extra attribute giving the assumed speed on the road.
TerrainSpeedOperator and TerrainAccessOperator now correctly respect the desiredResolution property.
Fixed two bugs in TerrainSpeedOperator and TerrainAccessOperator which could sometimes cause the output to have gaps between the tiles of a TileLayer.
Fixed a bug in TerrainAccessOperator which could ignore relevant roads outside the requested area if the elevationInput was null.
Fixed a bug in the implementation of TerrainVehicleType.snowDepthMax.
More robust handling of missing properties in TerrainRouteOperator, TerrainSpeedOperator and TerrainAccessOperator.
For TerrainRouteOperator, TerrainSpeedOperator and TerrainAccessOperator, ensured that the terrain speed is assumed to be zero wherever the elevation raster is undefined.
Ensured that TerrainAccessOperator can work even when elevationInput, groundConditionInput and surfaceStructureInput are all null.
Fixed a problem with the Carmenta Studio editor for a TerrainVehicleTypeAttributeVariable.
Added a property to scale the width of the frames of tactical symbols.
Fixed an issue where tactical symbols were improperly cached.
Fixed a bug where the last node of a created tactical line or polygon couldn't be moved until another node or the whole feature was moved.
TacticalSymbol now supports direction arrows.
Fixed a case where the visualization of minefield areas could stop working after being outside the visible view area.
The OverviewTool now supports GlobeView maps.
Moving the rectangle in an overview using the OverviewTool will now respect the view constraints of the main view.
InteractionVisualizer can now also be used in 2D.
The InteractionVisualizer.NodeVisualizer will now automatically be applied to each node of the geometry, regardless of the setting on the visualizer.
Fixed a bug where having an InteractionVisualizer with a dashed EdgeVisualizer applied on a polygon feature would result in visual artifacts.
Improved the kinetic scrolling implementation.
Fixed a bug where a rapid zoom in would cause the view to zoom out.
OverviewTool now respects the quickUpdateEnabled setting of a StandardTool attached to the same main view.
Fixed bug where animated selection and hover visualizers were applied for longer than they should have if the object was deselected or dehovered before the animation was completed.
Fixed a bug which could make it difficult to create new nodes with StandardTouchTool3D.
Fixed a bug where mesh edges couldn't be selected.
StandardTool now updates the cursor based on what is under it when finishing an operation, instead of always setting the default arrow cursor.
TextVisualizers with wordWrap = true now breaks text also on hyphens.
Fixed a bug where visualizers with animated attribute variables that did not repeat forever and that were not set as selection or hover visualizers caused the MapControls to keep scheduling updates forever.
Fixed a bug in LineGeometry.parallelLine and in LineVisualizer.orthogonalOffset which in some cases would make the line run far away from the intended path.
Fixed a problem with lines created with CompositeLineVisualizer in TileLayer.
Fixed a bug in LineGeometry.parallelLine and in LineVisualizer.orthogonalOffset which in some cases would cut the resulting line in the wrong position.
Fixed a bug where the view constraints were not applied to the initial update when an explicit width was set on the view.
Fixed a bug where view constraints were not applied when the view was altered in a View.Updating handler.
Fixed a problem in Carmenta Explorer where the loaded configuration could get unloaded if the background map utility layers were toggled.
Fixed a case where polygon patterns could sometimes be visualized incorrectly.
Fixed an issue where texture patterns were not anchored the same in the hardware renderers as in the software renderer.
Fixed a bug where the RadarVideoLayer could have vertical artifacts at a sweep angle of 360 degrees.
Fixed a bug where lines would not be drawn after resizing the window in DirectX 9.
Fixed a bug where some meshes were incorrectly rendered without transparency in DirectX 9.
Fixed a case where texts could sometimes get the wrong color when using the OpenGL renderer.
Fixed a bug where effects could sometimes be rendered with visual artifacts.
3D models are now drawn using texture transforms in all renderers.
Fixed a scaling issue with legends in a LegendLayer when the same legend was was used somewhere else with different PixelSizeAdjustments.
Fixed a crash rendering the evaluation watermark on a 1x1 pixel drawable.
Fixed a rendering order issue with LayeredLineStyle under a TileLayer with cacheAsBitmap = true.
Fixed a raster reprojection bug with 16-bit integer rasters with negative values.
Fixed a bug where PixelSizeAdjustments could crop legends.
Fixed a rare crash that could occur when drawing arcs.
Improved the framerate of the Map Controls when using MapControlUpdateMode = Scheduled. The first problem was that the view could be updated twice without moving the camera or changing the view area. The second problem was related to map configurations where it took longer to update the view than what the schedule interval was set to. In this case some Map Controls could starve the GUI so that very few input events were taken care of, causing many view updates without changing the view area.
Fixed a bug where a view that had View.UpdateEnabled false before doing its first update could schedule an update with a huge interval.
Carmenta Engine for Android is now built using Clang and the libc++ standard C++ library from Android NDK r20.
Added support for TLS/SSL when connecting to OGC web services on Android.
Fixed an issue where the QtQuickMapControl could sometimes crash when changing the view.
Fixed a potential crash that could happen after an OgcWmsLayer that had failed to initialize correctly was cloned.
Fixed an issue clipping mesh geometries with edges against a rectangle.
Fixed a threading issue in the TIFF reader.
Fixed a crash with attributes that have the empty string as key which occurred when merging two AttributeSets.
Fixed a problem where a map update could hang indefinitely on a machine with only a single CPU core.
Fixed incorrect zoom level when printing a map from a monitor with a non-standard DPI.
Fixed an issue with tesselation of 3D model surfaces.
Fixed problem in TileLayer's autoThin which could cause features to become distorted when displayed in a different Crs.
The LicenseKeyManager window is now resizeable.
Fixed a bug where the creation of an external drawable could corrupt the existing GL state.
Fixed problem with initializing a .NET Core 3.0 CLR on Windows when using CustomObjects built with the .NET Standard API in Carmenta Explorer and other applications that are not running in a .NET Core CLR.
Fixed disposing of objects in CustomDataSets that uses the .NET Standard API, implements the IMinimizeGarbageCollection interface and has the CreatesReferences property set to false.
Handling of errors in CustomObjects implemented with the .NET Standard API has been changed to behave more like CustomObjects implemented in other APIs.
Fixed a memory leak in CustomDataSets that uses the .NET Standard API.
Fixed a problem in the QtQuickMapControl class, where the framerate could sometimes be capped to half of the monitor vsync refresh rate.
Fixed a resource leak when a CustomSymbol that uses the Java API is updated from a background thread.
5.12.2 Release Notes
Fixes and Minor Improvements
Fixed a problem in S57DataSet, where some very large S-57 overview cells could sometimes disappear from view.
Fixed a problem where the S63 class could fail to extract exchange set information from a MEDIA.TXT file.
Fixed a memory leak that occurred when cloning some objects in the Carmenta Engine .NET Standard API.
Fixed a bug in GlobeView.FlushLayerContainingObject(), ground was not always flushed and updated properly.
Fixed several thread-safety issues in OrdinaryLayer with cacheMode = DynamicAsync, that could result in application crashes.
Fixed a selection problem in OrdinaryLayer with dynamic caching, when the layer contained more than one dataset with a coordinate reference system different from that of the view.
Fixed a crash that could occur in WPF while rendering using antialiasing.
OgcWmtsLayer was changed to allow responses from some WMTS servers with incorrect HTTP content types.
Fixed some incorrect error handling in OgcWmtsLayer, that could cause a layer with asynchronous = false to hang indefinitely.
Fixed a problem with custom symbols being rendered in the wrong places in a 3D view.
Fixed incorrect default value for RaveGeoDataSet.Crs property, which could result in dataset using WGS84 long/lat instead of reading the coordinate reference system from the file.
5.12.1 Release Notes
Fixes and Minor Improvements
Fixed a problem in StandardTouchTool3D, where adding a node to a polygon could create a new node in the wrong position.
Fixed problem loading specific font faces from TrueType font collection files.
Fixed a clipping problem when rendering maps with effects enabled, on an ExternalDrawable with an explicit viewport.
Fixed a problem with TileLayers with both clipToViewArea = true and renderingPriority = High.
Added missing SERVICE parameter in some calls to OGC WMS servers that could make a server reject requests from a OgcWmsLayer.
Fixed a problem in error handling in HTTP components on Linux, for instance when a hostname in a URL could not be resolved.
Fixed two separate problems where datasets failing initialization but suppressing the error could cause new exceptions or crashes during later use.
Fixed issues in the Carmenta Engine .NET Standard API, that could cause memory leaks or in some cases a crash.
Fixed memory leaks when the view in a WPF map control was replaced by another view.
Fixed problem with the fallback in all tile layers to start loading tiles one by one if a custom operator was found. Sometimes the fallback did not work, and the tile layer could stop loading tiles entirely.
Fixed a potential crash in S57DataDataSet when generating index for an S-63 database.
5.12 Release Notes
New Functionality and Major Improvements
The new .NET Standard compatible API makes it possible to build .NET Standard assemblies and .NET Core applications on Windows and Linux. See The Carmenta Engine .NET Standard API for more information.
It is now possible to create hardware accelerated radar intensity displays using the new RadarVideoLayer.
The new MvtDataSet can be used to read Vector Tiles from both MVT services and local MBTiles files.
The two new operators CorridorOperator2D and CorridorOperator3D make it easy to generate corridors around 2D and 3D lines.
The DirectX renderer will now use DirectX 11 on supported graphics cards.
The OgcWmtsLayer has significantly improved performance thanks to increased parallelism when loading map tiles.
The VerticalProfileOperator has new inputs for land cover raster data and will use it to generate profile lines and polygons that use the same color scheme as the raster.
Support has been added for reading and using thematic raster attribute tables via ImageDataSet and GdalDataSet.
Symbol3D can now be used to load 3D models in the COLLADA, OpenFlight, glTF and OBJ formats.
On most GPUs, the DirectX and OpenGL renderers now upload textures and other information to the graphics card on a background thread. This avoids blocking the UI thread when new data is loaded.
The new OrdinaryLayer cache mode DynamicAsync is similar to Dynamic, but the cache is updated on a background thread to offload as much work as possible from the UI thread.
An activated SDK can now make use of unlicensed Carmenta Engine extensions for evaluation purposes. Use of unlicensed functionality will activate a watermark that stays visible until the application is closed. In order to see what licenses are currently used by the process, use the new function Runtime.ExtensionsUsedByProcess .
System Requirements Changes
The minimum supported Visual Studio version is now Visual Studio 2013.
For the Java API, the minimum supported Java version is now Java 8.
Ubuntu 14.04 LTS is no longer supported. Ubuntu 18.04 LTS support has been added.
Important Notices and Breaking Changes
The Samples Geodata distribution which provides data for the Carmenta Engine sample applications and map configurations has been updated. Please install the new version (available from the Carmenta download page) to ensure that the samples work as intended.
The View3D and related support classes have been deprecated and will be removed in a future release. The same is true for the BitmapLayer and PrinterDrawable classes, some methods of the Printer class and the OrdinaryLayerCacheMode.Static enumeration value.
The interpretation of long line segments in GlobeView has been changed from great circle lines to straight lines in long/lat, to match how polygons are drawn and how objects are clipped in GlobeTileLayer. This also affects PipeOperator.
The Symbol3D.Material property has changed to make it possible to override more material properties than just the colors. This change may affect the coloring of symbols in existing configurations using this feature; see Symbol3D.Material for more information.
The crsSource property that was present on some dataset has been removed. Datasets that can read the CRS definition from file will now always do so, unless the crs property is explicitly specified. Also, if the data files contain ground control points, these will now be used automatically. Similarly, the GdalDataSet.groundControlPointsCrsSource property has also been removed. Configuration files will be migrated automatically in Carmenta Studio and in runtime, but application code accessing these properties directly will have to be updated.
The EllipseOperator has been redesigned and will no longer generate output in the same CRS as its input feature. Applications that only display the results should not be affected, but applications that do some post-processing of the results may need adjustments.
It is now possible to select a subrange of a previously loaded plot batch in PlotLayer.UpdatePlots() and PlotLayer.UpdatePlots3D(). This could in rare cases break existing code calling these methods, see the API documentation for more information.
The accuracy of MapControl.UpdateInterval in the WPF MapControl is now greatly improved. Applications that compensated for the previous inaccurate timer by using a lower than expected UpdateInterval value in order to achieve a desired frame rate might now need to be adjusted.
A 64-bit SDK installation now requires a 64-bit Java runtime to run Carmenta Studio, and a 32-bit SDK installation requires a 32-bit Java runtime. The support to run a 32-bit Carmenta Studio on 64-bit Java runtime and vice versa has been removed.
The VisualizerLengthUnit.ViewCrs enumeration value, deprecated since version 5.9, has been removed. Please change your configuration to use VisualizerLengthUnit.NominalMeters instead (and convert the values of the relevant visualizer properties if your View.Crs is not meter based).
The behavior of the Layer.GetFeatures() method has changed: Layers that are inactive (e.g. because they are outside their scale range) are now skipped. A new method overload has been added for applications that still want the old behavior.
The ECW extractor has been moved from redist to the installation folder. It will still extract the merge module under redist and will now also extract a NuGet package for .NET Standard under packages.
The Xamarin NuGet package is now only supported when using PackageReference as the NuGet package management format in Visual Studio.
On certain low end systems the new DirectX 11 based renderer can lead to reduced performance. If you encounter such problems, contact Carmenta Support to get information about manually switching to DirectX 9 rendering.
Fixes and Minor Improvements
Fixed some incorrect clipping of grid lines when a GridGenerator generates 3D grid lines for a GlobeView.
Fixed some problems rendering lines and polygons crossing the date line or covering a pole, in GlobeView.
Corrected the calculation of GlobeView.GeocentricCameraUpVector.
Adjusted logarithmic depth formulas in GlobeView, removing some artifacts from inaccurate depth calculations.
Fixed a problem with the globe rendering that on some Android devices could cause the globe to look like it was rendered with only a few triangles.
The property Drawable.FadeFrames is now ignored in a GlobeView. If this was set to a non-zero value in previous versions, some layers in a GlobeView would not be rendered.
Fixed a problem where the GlobeView.GroundAt method returned the wrong point near areas with auxiliary ground meshes.
Fixed GlobeView dateline problems with polygon visualization and with BoxOperator.
Fixed incorrect rendering of specular lighting on globe surface.
Fixed View3D problem where specular lighting was not applied correctly with the OpenGL renderer.
Fixed a crash in the OpenGL renderer.
A number of methods with out parameters were previously available only in the C++ and .NET API:s. These have now been added to the Java and Python API:s as well, with slightly changed signatures.
Fixed an issue where Java threads could remain registered to the JVM after their work was done. One example of when this happened is when a TileLayer was removed and no longer used.
Fixed problem with accessing the metadata for Tactical symbol standards when using the .Net API on Android.
Improved handling of fatal X11 errors when running Java applications on Linux.
Fixed a problem with custom objects in Java, where the getLibraryPath() method of the context classes could return a URL-encoded string instead of a normal path.
The Python interface now uses Python 3.6 on both Windows and Linux.
Fixed an error that could occur when changing which View that should be displayed in Carmenta Explorer.
Fixed a bug where Carmenta Explorer would not navigate to geodata loaded with "Open data directory" if the data contained non-georeferenced data.
Carmenta Explorer Properties window: It is now possible to adjust the column width of the list of properties.
Fixed a bug where the Background Map utility layer in Carmenta Explorer would sometimes not be displayed if no configuration was loaded.
Enabled performance test for catalogs in Carmenta Explorer.
In Carmenta Studio, if a node has multiple properties that can hold children displayed as separate nodes (like for instance GlobeView.layers and GlobeView.surfaceLayers), the property name is now displayed directly on the child node link.
Several minor issues in Carmenta Studio have been corrected.
Fixed a problem saving a configuration file in Carmenta Studio when the configuration had animated attribute variables with a non-default Function.
Fixed issue with named styles not being set properly on maps read from a remote Catalog instance.
OgcWfsDataSet now sets its Crs property to the first coordinate reference system listed in the capabilities document returned from the server, instead of always using WGS84 long/lat.
A Catalog instance can now be instantiated with service descriptions read from a Carmenta Server WMC interface.
Coordinate Reference Systems: upgraded to EPSG version 9.5 from August 2018, upgraded the file bin/data/ecw_cs.wkt (used for ECW georeferencing) to a version from March 2018, and upgraded the cartographic projections library PROJ to version 4.9.3.
Corrected the Well-Known Text representation for a non-georeferenced Coordinate Reference System.
Fixed bugs in the reprojection of rectangles to or from the orthographic map projection. The bugs could sometimes hinder features from appearing in parts of the map, typically when the view was zoomed out so much that it showed areas beyond the boundary circle.
Fixed the reprojection of a rectangle to a Transverse Mercator projection: the result could be too small if the rectangle intersected a meridian 90 degrees from the central meridian.
Fixed a problem when reprojecting a feature with a closed line geometry: if the line feature crossed the interrupted meridian of the target projection, for example the date line in Mercator, then the final closing line segment could disappear.
Added new method DataSet.HighestRasterValue() which quickly locates the raster cell with the highest value within a polygon.
Improved automatic georeferencing of many data files in ImageDataSet and GdalDataSet: affine transforms with rotation and/or skewing are now supported, and ImageDataSet can read more used-defined Crs definitions from TIFF files.
Removed workaround for the geography data type in versions of Microsoft SQL Server older than version 2012.
Fixed a problem with OrdinaryLayer.CacheMode = Dynamic when panning a View that uses a cylindrical map projection like Mercator and that displays the whole or almost the whole world.
Improved the CPU utilization when creating raster caches for datasets.
The third party GDAL Library has been upgraded to version 2.2.3. Among other things, this fixed a problem where GdalDataSet did not correctly georeference ASRP data in the polar projection zones.
During construction of a CRS with a polar azimuthal map projection, a specified DatumShiftChoice = Conservative will now be ignored and the Lenient alternative will be used, to avoid throwing an unnecessary exception for a spherical geodetic datum. This behavior is safe because such projections are not used with any ellipsoidal geodetic datums that are incompatible with WGS84.
Fixed a bug where S57DataSet could crash for some file names with wildcards.
Fixed crash in DwgDxfDataSet reading some CAD files.
Fixed incorrect geometries created from reading hatch objects from DWG files.
The Microsoft SQL Server driver is now used by default when using the SqlServerDataSet on Linux.
Fixed a situation where an ImageDataSet with multiple files with different coordinate reference systems could throw a "vector<T> too long" exception.
Layer.GetFeatureAttributes and the attribute information from DataSetInfo are now affected by the attributes and readAttributes properties on the dataset. This also affects what attributes will be listed in the Properties window in Carmenta Explorer.
Upgraded the third party Teigha libraries, used by DwgDxfDataSet, to version Teigha 2019 Update 1.
Fixed a problem in VpfDataSet reading some VPF files with large fixed-size text fields.
MrSidDataSet can now read MrSID files with an alpha channel.
The MapPackageDataSet can now be used to read 3D mesh data from map packages.
The C-MAP datasets are now supported on 64-bit Windows.
The DemDataSet now tries to detect bad DEM files and give a proper error message, instead of failing silently.
Fixed a problem in MifDataSet, which could misread the .MID file and generate incorrect character attributes.
Fixed too low value for DataSetInfo.EstimatedMaxScale in ImageDataSet and GdalDataSet, for some data sources with overviews.
Corrected an issue in GdalDataSet when georeferencing with ground control points was supplied in a separate .TAB file.
OracleDataSet now correctly reads multipolygons with holes, instead of creating separate polygons for each ring.
Fixed a problem when MemoryDataSet.Save()/Load() was used and the CRS of the dataset was created with the DatumShiftChoice.Lenient flag.
Added long/lat positions for fix points in extended info for ARINC airway, approach, SID and STAR legs.
Added check that Runtime.Initialize() is called before using the S63 class.
Fixed a crash reading metadata for some ASRP and USRP data files with GdalDataSet.
Fixed bug slowing down initialization of the S63 class and creation of S57DataSet instances read from the S-63 database.
Added functionality to GeometryConversionOperator for converting mesh geometries to elevation rasters.
Fixed geometries created by BufferZoneOperator from lines and polygons spanning over the date line.
The enumeration type for TargetLineOfSightOperator.outputSightLines has been extended with more values, allowing the generation of interrupted lines of sight from observer to first terrain obstruction, or from first terrain obstruction to target.
Fixed TargetLineOfSightOperator to make it work in a GlobeView.
Fixed a crash that could sometimes occur in a TargetLineOfSightOperator when an observer was slightly outside the extent of available elevation data.
Fixed an unnecessary exception that could be thrown by a TargetLineOfSightOperator when an observer was near the boundary between two elevation datasets with different resolutions.
Fixed a problem with LineOfSightOperator and related operators, which could throw an unnecessary exception if the data from elevationInput and treeHeightInput used two CRS instances that were functionally equivalent but had different names.
A CameraProjectOperator that gets an image georeferenced by four corner points will now give more nodes in the generated outline to improve the accuracy.
CameraProjectOperator can now handle image rasters that have a color table created by a raster visualizer.
The EllipseOperator now generates its polygon nodes at very accurate distances from the center point. The operator also has a new property maxRadialEdgeLength that allows the generation of extra nodes along the radial edges of a sector, so that these edges can be forced to follow geodetic lines accurately.
Added the new property GridGenerator.Bounds that can be used to specify the extent of the grid. Also restricted the default grid extent to make it more robust for some types of map projections.
Fixed incorrect results from VerticalProfileOperator and VerticalClearanceOperator when a route stored in long/lat crossed the date line.
Fixed the VerticalProfileOperator which could sometimes scan one elevation raster cell too far along a route segment, which could be noticeable when the elevation rasters had low resolution.
Ensured that TerrainRouteOperator can work even when roadInput, elevationInput, groundConditionInput and/or surfaceStructureInput are null.
Corrected the z elevation of the first route point from a TerrainRouteOperator.
Corrected position of certain labels in tactical graphics when the symbol is rotated.
Fixed a problem with certain tactical symbols having misplaced anchor points.
Corrected transparency for filled non-black tactical symbols in MIL-STD-2525C Appendix B.
Fixed extraction of Tactical Extension files on Android when using Xamarin.
Decreased the startup time for configurations using Tactical Extension.
Fixed issue where a hovered tactical symbol could sometimes be rendered as if it were selected.
Fixed incorrect rendering for text field H1 for some tactical symbols.
Using StandardTool3D, it is now possible to rotate around ground points that have a higher altitude than the camera.
Fixed a bug with StandardTool3D when interacting with the ground node of an InteractionVisualizer for boxes generated by the BoxOperator. It was not possible to move the box vertically if the bottom elevation attribute was an integer instead of a double.
Made StandardTouchTool pan and zoom more smoothly in views with non-georeferenced CRS.
View.FlushLayersContainingObject() now works as documented for OgcWmsLayer, OgcWmtsLayer and CatalogLayer.
Meshes generated by BoxOperator can now be moved vertically when clicking and dragging on the vertical lines created by a InteractionVisualizer.
Changed behavior when zooming with the mouse wheel in the Java MapControl to be more like the other MapControls.
Fixed an issue where the position would be slightly offset when adding nodes to a BoxOperator mesh with StandardTool3D and StandardTouchTool3D.
Fixed a bug in CreateTool3D with ToolElevationMode set to AboveSeaLevel. The first node of the geometry was relative to the ground instead of using the explicit offset value.
Improved rendering performance for TileLayers and for OrdinaryLayers with CacheMode = Dynamic on most GPUs.
The StandardTouchTool3D kinetic scroll timer interval was reduced from 30 ms to 16 ms.
Fixed problem with the rectangle selection in the StandardTool when using an ExternalDrawable.
Fixed a problem in StandardTool3D, which in some rare situations could set an invalid camera point.
Fixed a bug where the kinetic scrolling depended on frame rate and pixel density, and it would sometimes be impossible to start the kinetic scrolling.
Fixed a problem where mouse wheel zoom did not activate quick updates.
The new methods Symbol3D.LoadMeshes() and TextureMap.GetRaster() makes it possible to programmatically access the content of a 3D symbol.
Support has been added for reading and writing WebP, TGA and SGI images.
Fixed some minor rendering issues for SVG symbols when used without bitmap caching in 3D views.
Corrected the behavior of a TextVisualizer with followLine = True and rotationMode = FlipUp.
Fixed an issue that could cause labels to disappear if View.Rotation was set when using a LabelOrganizingLayer with a TileLayer.
Improved text quality in GlobeView when PixelSizeAdjustments.TextScaleFactor > 1.0 and length unit is pixels.
Fixed some minor visualization errors in the S52Visualizer.
S-52 symbols for polygon areas are now discarded when they are offset outside their polygons.
Added property S52ViewingGroupFilter.ViewingGroupOverride to make it possible to control visibility of individual S-52 viewing groups.
Fixed a problem where a TileLayer could sometimes render a feature twice.
Fixed a bug parsing SVG <path> objects with relative move commands.
Fixed a problem where plots in 3D were sometimes rendered in the wrong position, depending on the preceding layer in the configuration.
Changed the "follow line" behavior of the text visualizer so that text with offset curves around corners where there is space.
PlotLayer can now visualize selected and/or hovered plots with a different plot symbol.
Fixed rendering errors when an SvgSymbol instance was used in multiple drawables.
DashedLineStyle now works in 3D configurations using DirectX.
Improved performance of PlotLayer.
Fixed a rare crash when using RenderingPriority and TileLayer.
Fixed a bug where effects could sometimes render incorrectly when using an Intel HD graphics card.
Fixed a problem where hovering visualization did not work with 3D objects.
PixelSizeAdjustments.SymbolScaleFactor now scales the size of symbols created by PlotLayer.
Fixed multiline text with TextVisualizer.followLine in hardware renderers.
Using displayStatistics with the OpenGL renderer will now properly display texture usage.
Fixed a bug where Display Statistics could sometimes rendered incorrectly.
Fixed a bug where desktop applications running on old hardware and using effects could sometimes cause the view to be rendered black.
Added methods on MeshGeometry to get ray intersections with the geometry.
Added method on GlobeView to get ray intersections with ground.
The methods PointAlongLine, PointAlongLine2D and OffsetPointAlongLine in the LineGeometry class will now clamp the returned point to the start or end of the line, instead of throwing an exception when the point distance goes beyond the start or end. The cases where they throw exceptions have been clarified in the documentation.
Fixed MapControl.UpdateView() in all controls so that the call is thread-safe.
Fixed a problem where the method Crs.IntersectLineSegments could give wrong results when a rhumb-line segment was intersected with a great-circle segment and at least one of the segments crossed the date line.
Fixed a problem where the method Crs.IntersectLineSegments could fail to find an intersection between two great-circle segments if at least one of the segments was longer than 90 degrees of arc distance.
Fixed a problem where the method Crs.IntersectLineSegmentAndCircle could fail to find an intersection when the line segment was a rhumb line.
The methods Crs.IntersectLineSegments and Crs.IntersectLineSegmentAndCircle could sometimes fail to find an intersection that occurred very near an end point of a line segment. Now, the methods will start by extending the line segments slightly at both ends.
Fixed an issue calculating the initial view area when the area was specified with the View.Area property, and the drawable height was larger than its width.
TileLayer in 2D will now stop splitting tiles indefinitely if you zoom in very far. The minimum tile size will be around 0.1 meter.
Added a PixelSizeAdjustment property tileSizeScaleFactor that can be used to scale the tileSize property of the TileLayer class.
Added new property Runtime.rasterSizeLimitEnabled, making it possible to disable the raster size limit, in 64-bit processes only.
Carmenta Engine for Linux now always assumes that file names on disk are encoded in UTF-8.
A few path and filename properties in RasterSymbol, SvgSymbol and dataset classes are now converted from relative to absolute paths, to fix some issues with Configuration.Save().
Fixed selection issue in TileLayer, after parent layers were made selectable.
Fixed problem when using multi-sampling in the Java MapControl on Linux.
Fixed a problem where a TileLayer could potentially load a tile only partially, but still use it for rendering.
Fixed a bug where some textures could become corrupt after resizing a BitmapDrawable.
Fixed the use of selection and hover attributes in combination with SymbolVisualizer and label organization.
Improved label organizing for a centered polygon label displayed with clipToViewArea: if the clipping results in several pieces, the largest piece will be prioritized.
Fixed problems with named styles on OgcWmsLayer and OgcWmsServerLayer instances.
Fixed a crash when using UpdateMode.UpdateTimer on the MapControl while detaching and reattaching the view.
QtQuickMapControl: Fixed a crash when setting the view to nullptr.
Added the ViewOwnership property to the Java and Android map controls.
Fixed a rounding error in the View.CrsToPixel() method.
Fixed a bug in the methods Crs.FormatLongitudeAsDegreesMinutesSeconds and Crs.FormatLatitudeAsDegreesMinutesSeconds: the minutes part could sometimes become "60" when it should be "00".
Added new overloaded variants of the methods GlobeView.FromGeocentric() and GlobeView.ToGeocentric() that can convert geocentric camera coordinates and orientation vectors from and to geographic camera coordinates and bearing/pitch/roll.
Ensured that the csv files in bin/data are encoded with UTF-8.
Improved rendering performance in S-52 configurations and other configurations using PointVisualizers with atCenter and clipToViewArea under TileLayers.
Fixed a case where computers that only partially supports OpenGL shaders could crash.
Fixed an issue where a ScriptOperator during initialization could display a warning pop-up, if a removable media drive was mapped to J: on Windows.
Fixed a crash when a TerrainWarningOverlay was used in a View with an ExternalDrawable.
Fixed problem with using a context menu in the Carmenta Engine WinForms MapControl.
Fixed an issue with a TileLayer with Asynchronous = False; in some cases an update could go through without waiting for all tiles to be loaded.
FindChildObject() and GetChildObjects() methods now return Effect objects as well.
Added new property GlobeView.Atmosphere, making it possible to turn off rendering of the artificial atmosphere in GlobeView.
Some of the restrictions for using OrdinaryLayer.CacheMode = Dynamic has been lifted.
Improved the accuracy of the MapControl.UpdateMode OnTimer to better reflect the value specified in MapControl.UpdateInterval for the WPF, WinForms and Xamarin MapControls. The accuracy of MapControl.UpdateMode Scheduled was also improved generally for all MapControls.
Fixed a problem with GroupDataSet not returning any features in a GlobeView.
All layers and datasets using HTTP now work with NTLM authentication.
Fixed a rare problem in the automatic raster merge in OrdinaryLayer, that could sometimes render a merged raster with the wrong raster visualizer.
Layer.EnabledDuringQuickUpdates now works as expected in the WPF MapControl.
The merge module for the DWG and DXF Runtime For Carmenta Engine is no longer needed and has been removed.
Added CustomOperatorProxy.IsThreadSafe property that can be used to indicate that a custom operator is thread-safe and can be called by multiple threads at the same time.
Added an option to TileLayer to use a Google Maps compatible tiling scheme.
The Printer class is no longer separately licensed.
Merge modules for the required VC++ runtimes are now used on Windows 10 when installing Carmenta Engine. This solves an issue with not being able to continue with the installation if a newer version of the runtime was already installed. It also fixes a bug where the computer could restart in the middle of an installation. This behavior is not changed for Windows 7 and 8, and information about this has been added to the installation instructions.
Fixed a bug where input coordinates could sometimes be scaled incorrectly in the QtQuickMapControl when using multiple monitors.
Replaced the Effects sample application with a new PlotLayer3D sample that demonstrates both hardware accelerated effects and using a PlotLayer in 3D.
Fixed a bug in the documentation generator: Documentation of methods that contained strings as arguments could sometimes be missing.
Added a sample map configuration that demonstrates how to visualize aeronautical data in the ARINC 424 format.
5.11 Release Notes
New Functionality and Major Improvements
The S52Visualizer class has been updated to render nautical charts according to the S-52 Presentation Library version 4.0.1, up from version 3.4. The visualization is more complete than before and the visualizer also has a number of new properties that control the visualization.
The S52Visualizer now supports the AML Portrayal Specification 2.0.0, providing complete visualization of AML (Additional Military Layers) data read by the S57DataSet.
Carmenta Engine for Android now includes a .NET API that is compatible with Xamarin. This makes it possible to develop Carmenta Engine based Android apps using C#. Refer to the HelloWorldXamarin application tutorial in the Carmenta Engine SDK for more information.
Carmenta Engine for Android now supports 3D GlobeView maps, TerrainWarningOverlay, LineOfSightOverlay and Effects.
PlotLayer can now be used in 3D GlobeView maps.
The Carmenta Engine SDK and Carmenta Studio documentation is now distributed in HTML format and displayed in the default web browser. The new format also has improved typography and provides improved searching and indexing functionality.
It is now possible to drag and drop geodata files and folders to Carmenta Explorer to directly visualize the data.
System Requirements Changes
The OpenGL renderer in Carmenta Engine for Android now uses OpenGL ES 2.0.
In Carmenta Engine for Android, GlobeView, TerrainWarningOverlay, LineOfSightOverlay and Effects requires a device with full support for OpenGL ES 3.0. Note that not all OpenGL ES 3.0 implementations support these features; Carmenta Support can provide an up-to-date list of Android devices which have been tested and verified to work well.
Important Notices and Breaking Changes
To support the updated S52Visualizer, the S57DataSet has also been updated, and the index file format for this dataset has changed. Index files from previous versions need to be removed and regenerated with the new version.
On modern graphics cards the OpenGL renderer no longer uses the fixed function pipeline. As a result, the OpenGL environment has changed for ICustomNativeSymbol and ICustomNativeVisualizer implementations, as well as for View.CustomDrawBackground and View.CustomDraw event handlers. Existing custom rendering code needs to be updated, see Custom Native Rendering for more information.
The texture related Map.BlendOperation and Map.AllowCompression properties and the BlendOperation enumeration have been removed; they were no longer used. Configuration files will be automatically migrated when opened in Carmenta Studio, but application code accessing these properties will have to be updated.
The DynamicLocalProjection has been deprecated and may be removed in future versions.
When DataSetInfo.FromDirectory() or DataSetInfo.FromFile() is called on DTED data, the temporary dataset that generates the DataSetInfo will now be a DtedDataSet instead of a GdalDataSet, which causes some differences in the attributes in DataSetInfo.AdditionalInfo.
Fixes and Minor Improvements
Various performance improvements in 3D GlobeView maps.
Fixed a GlobeView issue where features could fail to be displayed, usually when they should appear near a view edge between two view corners displaying sky.
Fixed a bug where colors of evaluation text and tool interaction visualization could get affected by fog color.
Fixed several issues related to PointVisualizer offsets, lead lines and different length units used in a GlobeView, and documented a few cases still not supported.
Fixed a problem reading untextured 3D Studio symbols which could cause all surfaces to be rendered black.
Fixed a problem with the GlobeView methods Elevation() and GroundAt() when a globe tile was entirely covered by auxiliary ground.
Fixed minor rendering artifacts around the edges of custom symbols in a GlobeView.
If multiple semi-transparent visualizers are applied to the same point feature in 3D, the rendering order is now maintained.
Fixed a problem with black flickering of the ground in a globe view with a 3D line of sight overlay.
Fixed a problem where the GlobeView tile tree was not updated when a LineOfSightOverlay observer was moved to a new position.
Fixed a case where the LineOfSightOverlay did not update after the range1Max property was changed.
Fixed a rendering problem in View3D, where screen layers could interfere with objects rendered in a CustomDraw event handler.
Fixed a crash when switching views from a GlobeView in the Java Map Control when the ground had not been completely loaded.
Bounds for a Symbol3D can now be retrieved before the symbol has been shown in a 3D view.
Fixed a case where inheriting from both ITool and IToolTimerSink would result in compilation errors due to ambiguity of inherited functions.
The Properties panel in Carmenta Explorer will now be updated with new geometry positions after features have been moved with the tools.
In the Carmenta Explorer properties window, polygons with holes no longer show a long list of the point count for each hole.
Fixed minor GUI problems in the "Export to Map Package" dialog in Carmenta Explorer.
Fixed a case where the Open Catalog dialog in Carmenta Explorer could be too wide without the possibility to make it narrower.
Fixed a case where opening a data directory in Carmenta Explorer could cause text to appear broken in the overview window.
Fixed a case where the nominal scale of the overview window in Carmenta Explorer was not preserved after a Smart Reload.
Fixed a bug in Carmenta Explorer where loading the same CatalogMap twice would add the utility layers to the main layer tree.
Fixed a case where Carmenta Studio would lock custom objects DLLs so that the DLLs could not be rebuilt while Carmenta Studio was open.
Fixed a case where the checkbox for the public modifier on Views in Carmenta Studio was editable even though it was grayed out.
In Carmenta Studio, added the distance3D update attribute to the attribute dropdown list in the Expression editor.
The Carmenta Studio editor panel for animated attribute variables now allows you to set properties by referencing other existing objects.
It is now possible to animate the ToValue and FromValue properties of an animated attribute variable.
In Carmenta Studio, added missing property MilStd2525CAttributes.altitudeDepth1.
Fixed a bug where the STYLES parameter in OGC WMS requests would not match the LAYERS parameter when using named styles.
Fixed a problem monitoring Catalog changes when a single configuration file contains multiple CatalogDatasets.
Added workaround for backslashes in paths when loading a CatalogMap on Linux.
Added the method TryFromAuthorityAndCode to the Crs class for the .NET and C++ APIs.
Improved support for opening OGC GeoPackage files via "Open Data File" in Carmenta Explorer or via DataSetInfo.FromFile.
Corrected the DataSetInfo.RasterFormat for numeric rasters stored as MapPackage data.
Fixed a case where GML data over WFS marked as gml.member was not read from OgcWfsDataSet, and added support for reading MultiPoints, MultiCurves (MultiLines) and MultiSurfaces (MultiPolygons).
Fixed an issue with DataSetInfo.FromDirectory() not releasing file locks on ECW data files.
Fixed support for network based data formats like OGC WMS in the GdalDataSet on Linux.
Fixed a crash when generating search index with OgrDataSet.
Fixed a problem on Linux reading TAB and MIF files with incorrect file extension casing.
Fixed a case where ShapefileDataSet.GetFeature(id) could throw an exception instead of returning a null pointer if id was not found.
Fixed issue with some raster datasets accessing their data even with RasterCachePolicy set to Full.
Fixed a thread safety issue in MapPackageDataSet.FlushCahce().
Fixed a possible deadlock in RaveGeoDataSet.
DataSetInfo for DtedDataSet will now return various metadata attributes in DataSetInfo.AdditionalInfo, including accuracy information.
Avoided merged transmittal representations in the result of DataSetInfo.FromDirectory() when several ASRP or USRP transmittals in the directory have the same transmittal ID.
Fixed a bug calculating raster resolutions in GdalDataSet, for datasets reading multiple files with different coordinate reference systems, that could make raster cache generation fail.
The DataSetInfo.AdditionalInfo can now read a numberOfImagesInDataSet attribute from the general information file for a dataset in a transmittal of ADRG, ASRP or USRP data.
Fixed a "vector<T> too long" exception that could occur in some MultiFileDataSet sub-classes, when reading multiple files with different coordinate reference systems.
Fixed an error in ShapefileDataSet.Save() related to the DBF byte representing the month of last update.
Fixed a problem where RaveGeo data could fail to be displayed within the RaveGeo resolution from a tile boundary of a TileLayer.
Fixed a crash in Carmenta Explorer when retrieving dataset information for a DataSetSet with MemoryDataSets as children.
Fixed a crash in Operator.GetRasterFeature() when the operator chain contained a SplitOperator.
Fixed an issue where Operator.GetRasterFeature() could return an incorrect result if the operator chain contained a LevelOfDetailOperator.
Fixed a problem with the SmoothOperator, where it had no effect on 3D lines whose z coordinates are in meters but whose x and y coordinates are not.
Fixed a problem with tactical symbols being drawn with the wrong color in an uncached 2D layer.
Removed a restriction in StandardTool3D that limited how high the ground was allowed to be for the tool to work.
Improved touch tool interaction mode selection for screens that reported a too small touch point interaction area. This also fixes a bug for some screens where it was impossible to select features using touch.
Improved the detection of zoom/rotate versus tilting with the StandardTouchTool3D.
Fix for a problem in the Windows Forms Map Control when releasing the right mouse button on top of the title bar.
Fixed a case where tool pan actions could select features.
Fixed a bug where the camera could move too much when starting a zoom with StandardTouchTool3D.
Improved behavior for PointVisualizer.atCenter = True when the centroid is outside the polygon.
The OpenGL stencil buffer is now being used by default also on systems using Intel HD Graphics. Setting the environment variable CARMENTA_ENGINE_OPENGL_STENCILBUFFER to 0 can be used to turn off stencil buffer usage.
Fixed a case where selection of complex lines did not work as expected.
Fixed an issue where LineVisualizer.OrthogonalOffset could make a line invisible if it was very short measured in screen pixels.
Fixed a problem where visualizers with RenderingPriority = High did not produce any output when used inside a PointVisualizerSet with bitmap caching.
Changed how SVG symbols defined in millimeters are scaled on high DPI screens.
Fixed a bug in the caching of TacticalSymbol where symbol would not always be shown when the geometry was not a point.
Fixed too tight cropping of some SVG symbols when they were cached as bitmaps.
Fixed an issue with incorrectly rendered SVG symbols that used feature attributes.
Fixed a problem which caused BrightnessContrastEffect to not correctly darken very bright areas when lowering the brightness.
Fixed a problem where the animation of a single feature could stop if there were no other features or user input triggering view updates.
Fixed a case where features under RasterizeOperator or LayerRasterizeOperator were not displayed when using RenderingPriority = High.
Tactical symbols where the color is affected by attribute variables will now be cached correctly.
Removed hardcoded selection visualization of plots in PlotLayer which was unintentionally added in version 5.10.
Replaced the red cross which was previously shown when using an evaluation license with a watermark that is shown in the corner of the View. When the evaluation license is near expiration, a text under the watermark will also display the number of remaining days that the evaluation license is valid.
Fixed a bug which could cause text rendering artefacts after doing Add Data File in Carmenta Explorer.
Fixed a case where the view could be centered in the wrong position if the view CRS was changed during zooming.
Fixed a case where texts could be rendered with incorrect size by the DirectX renderer if they were rendered at the same position and with LengthUnit = NominalMeters.
Fixed a problem which could cause View.DisplayStatistics to render its text partially outside the View on high-DPI screens.
Fixed a crash that could occur if effects were used with settings that did not change the visualization.
Fixed a case where features rendered after effects has been applied in DirectX could appear with incorrect color.
Fixed a problem where applications using QtQuickMapControl could visualize layers incorrectly after being resized.
Redesigned the automatic raster merging to decrease the risk of memory fragmentation when using 32-bit Carmenta Engine.
Fixed the problem that reprojection of polygons, using the default setting ProjectParameters.EdgesToSegmentize = ClippedPolygons, failed to recognize clipped polygons if they had been thinned after clipping.
Improved parsing of feature attributes from some OGC WFS servers: Some attributes that were previously skipped are now parsed and returned.
Fixed a bug in OgcWmsLayer with the parsing of capabilities documents that includes the <!DOCTYPE> tag.
Fixed a problem with MapControlUpdateMode.Scheduled that occurred when frames were drawn very slowly, causing an unnecessary long delay before the next frame was drawn.
The S63 Manager command-line tool can now be run on a deployed system with just a runtime license.
Fixed a bug where a View with an Effect in a QtQuick application could result in intermittent black screens.
Fixed a problem selecting features with animated visualization when there were no hover or selection visualizers.
Fixed a problem where some special characters in WFS typenames were incorrectly converted in the URL.
Fixed a case where exceptions during blend modes or effects could result in an unrecoverable state.
The conditions on the visualizers inside an InteractionVisualizer are now used.
Improved the Vertical Profile sample application.
Fixed a bug where UpdateModeOnTimer could cause the WPF Map Control to not resize properly.
5.10 Release Notes
New Functionality and Major Improvements
Views and Layers can now use effects that perform operations ranging from simple color adjustments to glows, halos and ambient occlusion. The effects are computed using GPU acceleration if OpenGL or DirectX rendering is used. Refer to the Effect documentation for more information on the available effects.
The AnimatedAttributeVariable adds support for declarative animations of colors and double values in all Visualizers and some associated classes like Material. Animations can be continuous or appear when the selection or hover status is changed for a feature.
It is now possible to temporarily change the visualization of a feature when the user hovers the mouse cursor over it. The new property VisualizationOperator.hoverVisualizers holds visualizers applied to hovered features. Custom-made tools can tell a View which feature they hover over by setting or clearing View.hoverId.
Dynamic objects in a GlobeView can now be rendered into the ground surface and be continuously updated in every frame, separately from the static surface texture. Refer to the GlobeView.surfaceOverlay documentation for more information.
StandardTool3D and StandardTouchTool3D can now be used to edit features in a GlobeView, and the new tools CreateTool3D and CreateTouchTool3D make it possible to create new 3D features.
LabelOrganizingLayer can now be used to organize text and symbols in a GlobeView.
The two new properties MapControl.updateMode and MapControl.updateInterval implement a frame rate limiter that prevents unnecessary updates but still allows Carmenta Engine to schedule updates when needed, e.g in a GlobeView or if there are animations running. See also Important notices and breaking changes, below.
GlobeView can now cache loaded tiles on disk, to improve loading times when the same tiles are needed at a later time.
The S52Visualizer now supports using either Day, Dusk or Night palette.
System Requirements Changes
Android versions older than Android 4.0.3 are no longer supported.
Removed support for Ubuntu Linux 12.04 LTS.
Ubuntu Linux 16.04 LTS is now a supported operating system.
The CM93 module (C-Map nautical charts) is now available in the 64-bit version of Carmenta Engine on Windows. Note that it still has beta status since the underlying 64-bit SDK and runtime from C-Map are still beta versions.
Important Notices and Breaking Changes
MapControl.updateTimerEnabled has been replaced by MapControl.updateMode.
MapControl.updateTimerInterval has been replaced by MapControl.updateInterval, whose meaning depends on the selected MapControl.UpdateMode.
The semantics of MapControl.UpdateView() has changed to work with the new MapControl update modes.
The semantics of View.Update() has changed for views displayed by a MapControl to work with the new MapControl update modes.
ITool.onTimer and ITouchTool.onTimer have been deprecated: Use either IToolTimerSink/ITouchToolTimerSink or a timer managed by the application.
Configuration of the GlobeView detail level has changed: The resolutionFactor and mostDetailedTileScale properties have been replaced by the new properties elevationResolution, surfaceResolution and extraTileLevels.
The GlobeView now considers the window size and camera angle when it selects which tile resolutions to load. Along with the previous change, this makes it necessary to check existing GlobeView configurations and possibly make adjustments to the detail level.
The previously deprecated class TinGeneratorOperator has been removed.
Trying to access a custom object implementation from C++ or Java that has been implemented using another API will now throw an exception instead of returning null.
The previously deprecated class RasterCacheDataSet has been removed. Applications are encouraged to use the RasterCachePolicy property of the cached datasets instead. Carmenta Studio will try to automatically migrate configuration files containing RasterCacheDataSets, but use of the class via API has to be manually migrated.
The default UpdateMode on the StandardTool has changed from Bitmap to Live.
The behavior of the double click zoom when using the standard tool with a 2D view has changed to align better with the mouse wheel zoom.
SelectEnabled is now default set to True in StandardTool3D and StandardTouchTool3D.
The color properties of the Material have changed and can now be controlled by feature attributes. Existing configuration files can still be read, but application code accessing these properties may have to be updated.
The 'updateSelectionVisualization' update attribute is now only available to visualizers, and can no longer be used in layer conditions, operators, or by code in custom datasets and custom operators.
ScreenLayer now use the same rendering path in 3D as in 2D. This solves a lot rendering artifacts and limitations with screen layers in 3D views. The change may cause some visual differences for existing screen layers in 3D configurations.
Carmenta Engine for Android is now packaged in an Android Archive (AAR) file.
Fixes and Minor Improvements
GlobeView now sends Busy and Idle events, just like a 2D view.
Fixed a problem printing a 3D line-of-sight configuration from Carmenta Explorer.
Fixed a bug where min/max scales of layers under a GlobeTileLayer were ignored.
Geographic margin and pixel margins can now be specified for the surface layers of a GlobeView.
GlobeView will now detect more types of changes in its properties and sublayers, and automatically start reloading affected ground tiles.
The View.FlushLayersContainingObject() method should now work as expected also for a GlobeView.
Fixed a deadlock that could occur if the GlobeView.AuxiliaryGroundInput property was modified.
Fixed a problem rendering meshes with double-sided materials with DirectX in a GlobeView.
Fixed a problem with poor coordinate accuracy for some 3D models in a GlobeView.
Fixed a problem tessellating non-planar polygons in a GlobeView.
Fixed a case where GlobeView ground meshes generated from high resolution integer rasters could exhibit a staircase effect.
Changed tile-loading priority in GlobeView, to avoid flickering tiles when rotating the camera before view has finished loading all tiles.
It is now possible to use 3D maps without enabling the update timer.
Fixed a problem in GlobeView, where selection/picking did not always work when the camera pitch was close to zero.
Improved object picking in GlobeView: presentation objects returned from GlobeView.whatsAt() are now sorted according to distance from the camera.
The colors of a Symbol3D can now be modified, making it possible to apply per-feature tints to a single base model.
Layer.Opacity is now supported for layers under GlobeView.Layers.
A GlobeView can now render lines wider than 1 pixel, with both OpenGL and DirectX renderers.
Fixed an issue where antialiasing were not always used when rendering the ground in a GlobeView when using OpenGL, even if the hardware supported it. It will now be used if the hardware supports multisampling.
Fixed some incorrect normal calculations in GlobeView, sometimes causing a slight miscoloration of the ground at tile edges.
Fixed a bug in the lighting where Material.Color would affect Material.AmbientColor for a non-textured geometry in a GlobeView.
Fixed a bug where a SymbolVisualizer with Repeat set to Interval or Distributed in a GlobeView would not place the symbols along the LineGeometry.
Fixed some problems with a LineOfSightOperator used in GlobeView.Layers.
Some changes to make ScreenLayer rendering always appear in front of custom rendering in View3D.
Fixed a problem with polygon visualization in a GlobeView, where too few points were added when tessellating polygons in dynamically cached layers.
Fixed an issue where an exception was incorrectly thrown when a GlobeTileLayer created from application code was used in a GlobeView.
Fixed a problem with an exception "The Geometry is read-only" that could be thrown if a custom dataset under a GlobeView.AuxiliaryGroundInput generated features in a coordinate reference system other than WGS84 long/lat.
Added new properties Point.Undefined and Point.IsUndefined.
Added a reserve() method to all collection classes in C++, .NET and Java APIs.
The relational operators of the Ptr<T> C++ template type should now work as expected also when T is a Carmenta Engine interface type and does not inherit from EngineObject.
Fixed a problem where the Java API on Android could sometimes wrap kernel objects in Java objects of the wrong type.
Improved the performance when using the Thread Access Verifier in a Java application.
Fixed an issue in the C++ MapControl on Windows that could prevent a touch tool from working correctly.
Carmenta Engine for Android now includes support for 64-bit ARMv8-based CPUs (arm64-v8a) and 64-bit x86 processors (x86_64).
Minimized edge artifacts when Carmenta Explorer exports raster tiles to a Map Package.
Fixed Carmenta Explorer so the same graphics renderer is used for both the main view and the overview.
The High DPI options in Carmenta Explorer now also affects the overview map.
Fixed bug where the tools options form in Carmenta Explorer would keep modified values even if the user pressed Cancel.
Carmenta Explorer now flushes the view when toggling named styles.
Fixed problem in Carmenta Studio with detecting that an open map configuration has been modified by another program.
Fixed the default value for SphereOperator.Radius in Carmenta Studio to match the default value in runtime.
Initialization of Catalog instances from remote CS/W servers have been improved: the services are now checked in parallel, which improves loading time if one or more services do not respond.
User properties of CatalogLayer instances are now properly cloned when the CatalogMap instance is cloned.
The query string of a CatalogQuery can now be changed, and the new value will be used if the CatalogQuery is used in a call to Catalog.GetMaps().
Added new methods CatalogMap.FlushAllDataSets() and CatalogLoadLayerSet.Match(), to improve handling of map services added to or deleted from a running Catalog instance.
Added support for CatalogMetadata.InitialArea area when loading a map from a remote catalog provided by Carmenta Server 4.5 or later.
Added Time and Elevation properties to CatalogMap.
Backslashes in files names are now automatically converted to forward slashes on Linux in a few more places, like references to font files and ISO metadata files for views, layers and data sets.
Corrected the z coordinates of intermediate points in a rhumb line generated by the Crs.Route method so that they vary linearly with true horizontal sea-level distance, instead of with projected Mercator distance.
The method Crs.AzimuthFromLineSegment has got a new overloaded variant.
Added a new element Straight3D to the LineType enumeration used by some Crs methods. The new line type is accepted by the old methods Crs.Route and Crs.AzimuthFromLineSegment, and also by four new Crs methods for 3D lines: Length3D, PitchFromLineSegment, PointAlongRay3D and NearestPointOnLine3D. These new methods can also handle the old line types GreatCircle and RhumbLine.
When a directory containing ADRG, ASRP or USRP data is opened by Carmenta Explorer via Open Data Directory or by an application via DataSetInfo.FromDirectory(), one will now get additional information from metadata in the transmittal header file.
When a directory containing ADRG, ASRP or USRP data is opened by Carmenta Explorer via Open Data Directory, one will now get a separate GdalDataSet for each sub-directory, which is better if the sub-datasets are intended for different scales.
It is now possible to open a TRANSH01.THF file (a transmittal header file that refers to ADRG, ASRP or USRP data) in Carmenta Explorer via Open Data File... or in a similar way in an application via DataSetInfo.FromFile().
Fixed a bug where the result from DataSetInfo.FromFile() could get CanCreateDataSet = True although actually calling CreateDataSet() would return Null. This could occur for files of unusual data formats supported by GdalDataSet but not recognized by DataSetInfo.FromDirectory().
For some data formats with built-in overviews - ECW, JPEG2000, MrSID and RaveGeo - the DataSetInfo.EstimatedMaxScale has been lowered to a more conservative estimate.
Fixed a problem in ArincDataSet locating fix for some holding patterns.
Fixed a problem in ArincDataSet not returning any extended information for holding patterns and runways.
Fixed a crash in ArincDataSet when generating an error message for some bad data.
Fixed a crash in ArincDataSet for certain data files on Linux.
Fixed CoverageDataSet so that the order of the returned coverage polygons is stable.
Changed how DemDataSet calculates extents and raster dimensions from available metadata, to avoid a crash for some files where the raster dimensions were calculated incorrectly.
Some raster datasets have been corrected not to return any raster features during selection updates. Previously, DemDataSet, DtedDataSet, EcwDataSet, HdrDataSet, MrSidDataSet and OgcWcsDataSet in selectable layers could return rasters overdrawing everything else as soon as any feature was selected.
Fixed a bug in DwgDxfDataSet, making it stop returning features when the global cache was filled.
Fixed a memory consumption issue in DwgDxfDataSet.
Added ImageDataSet support for reading external overview files (.ovr files), created by GDAL tool or other software based on GDAL. Previously these could only be read by GdalDataSet.
ImageDataSet can now read RGB and RGBA TIFF files with 16 bits per channel.
ImageDataSet can now read RGB and RGBA TIFF files with interleaved bands, i.e. with TIFF tag PLANARCONFIG = 2.
Fixed an issue in ImageDataSet, which could suddenly stop returning rasters for a certain file if the global cache was filled.
Fixed a crash that could sometimes occur when the first ImageDataSet was accessed after an application starts.
ImageDataSet can now read transparency masks from internal TIFF bands or external .msk and .msk.ovr files.
Added limited support for using undefined values with RGB data, in ImageDataSet and RasterConversionOperator.
Multiband rasters were previously created with a default undefined value of 0, even though this was never used. In this version, no undefined value is set by default.
Improved raster cache overviews for 8 and 16 bit color table rasters with Average downsampling filter.
Improved MapPackageDataSet so operations are retried if the database is busy.
Fixed a problem in MapPackageDataSet that could prevent tables with unusual characters in the name from working properly.
Removed code in MapPackageDataSet that tried to add a gpkg_extensions table to a GeoPackage file if the table did not exist.
In previous versions, MemoryDataSets read from .px files were always initialized, even if the file was loaded with DataSetInitialization = Delayed. Now they are only initialized if they are also populated with features from the .px file.
Fixed a crash in the MemoryDataSet::fromFile() method in the C++ API.
Fixed problem with margin from a SphereOperator, EllipseOperator or BufferZoneOperator not working for features read from a MemoryDataSet in a GlobeView.
Added support for MemoryDataSet.Save to also save texture coordinates of meshes. MemoryDataSet.FromFile will now also read texture coordinates from meshes in files written with MemoryDataSet.Save from a Carmenta Engine version 5.10 and above.
Fixed issue where OgcWfsDataSet could filter too aggressively on feature ids.
Fix in OgcWfsDataSet to include update attributes and additional parameters in requests.
Fixed an issue that prevented an initialized OgcWmtsLayer with a disk cache from being cloned correctly.
Fixed problem when using :attributeList in a DatabaseQuery.SelectStatement with a PostgreSqlDataSet.
Fixed a problem with TileLayer.asynchronous = False that could fail to propagate errors from background threads to the GUI thread.
Fixed a rare deadlock when code in a custom data set called the Feature.Clone() method while the GUI thread was waiting for the configuration lock.
Clarified PostgreSQL client driver requirements in the documentation.
It is now possible to open RaveGeo data in Carmenta Explorer via Open Data Directory or in a similar way in an application via DataSetInfo.FromDirectory().
The RaveGeo extension is now available on Linux, in both 32 and 64 bit versions.
Added code page information to the DataSetInfo.AdditionalInfo that is generated for Shapefile data.
Fixed a case where generation of raster dataset overviews for very small areas could lead to a crash.
Some datasets have got a new property IndexFileName that can be used to explicitly set the file names for file index, raster cache and search index.
Fixed a problem in BorderSnapOperator and BorderMergeOperator with very tiny or very narrow input polygons.
The CameraProjectOperator will now generate a point feature for the center of the georeferenced image.
Added a new property MaxRange to CameraProjectOperator.
The CameraProjectOperator will now assume that the ground elevation is zero wherever elevation data are missing or undefined.
If a CameraProjectOperator reads camera attributes that imply that the upper part of the image depicts the sky, the operator will be able cut away the sky part and project the lower part of the image to the ground.
Improved the way a CameraProjectOperator morphs an image to a quadrilateral specified by corner coordinates.
Fixed a problem with gaps between rasters clipped and merged by a LevelOfDetailOperator.
The LineThinningOperator can now interpret the maximal allowed error as either a 2D or a 3D distance.
Fixed a problem with LineThinningOperator, which could erroneously remove a point in a very acute corner angle.
Fixed a bug in ProjectOperator where it would abort an ongoing query if it received a feature with an invalid geometry. Now it discards the invalid feature and continues with the next.
Fixed an issue where RasterConversionOperator could sometimes drop the UndefinedValue property of a raster, even if ChangeUndefinedValue was false.
The TerrainRouteOperator has a new property that controls the meaning of the z coordinates in the output: the operator can either produce routes whose z coordinates represent ground elevations, or produce routes whose z coordinates represent travel time.
Fixed some UtmGridGenerator issues where MGRS labels could sometimes be displaced too far from their desired positions.
Better performance for a VerticalProfileOperator that reads many 3D vector features along a profile route with many segments.
Fixed VerticalProfileOperator so that it does not create unwanted 3D point duplications caused by a profile route with segments shorter than MaxDistance.
Corrected the VerticalProfileOperator for 3D lines and polygons at the inside of a route turn represented by several nodes, with a turn radius shorter than MaxDistance.
Added TacticalSymbol, which lets a normal SymbolVisualizer display tactical point symbols with support for rotation, offsets and 3D.
Features in a GroupDataSet now always inherit group attributes, not just when they are selected.
Kinetic scrolling is now implemented and enabled by default in the standard mouse and touch tools for 2D views and the globe view.
Zooming by double clicking and double tapping has been implemented in the standard mouse and touch tools for 2D views and the globe view.
Added support for multi-touch when using C++ and Qt on Linux.
Button argument of mouse move events are now passed correctly from Qt and Qt Quick map controls.
Fixed an issue on Windows where the CreateFeature cursor could not be overriden by an application.
Fixed issue that prevented Layer.EnabledDuringQuickUpdate = False from having any effect in an overview map.
Fixed a problem with CreateTouchTool getting into a fail state if using multiple fingers.
Fixed some text rendering issues.
Added an Opacity property to the PointVisualizer class.
New method PointVisualizer.GetImage() method renders a single feature onto a bitmap and returns it.
The new PointVisualizerSet.CacheAsBitmap property can improve rendering performance considerably in some 2D configurations with many symbols.
New properties LineVisualizer.RingOrientation and PointVisualizer.RingOrientation make it possible to control the orientation, clockwise or counterclockwise, of polygon rings and closed lines before they are rendered.
When positioning texts and symbols along lines with Repeat = No, the Z coordinates of the lines are now used correctly in 3D, and ignored in 2D.
Added VisualizationOperator.alwaysApplyVisualizers that can be used to turn off the normal non-selected visualization when the selection visualization or the hover visualization is displayed.
Fill patterns rendering has been improved for PolygonVisualizer, and is now also supported by LineVisualizer. The pattern no longer "sticks to the glass", but follows the rendered feature when the view is panned or zoomed. The pattern can now also be scaled vith the view scale.
Fixed a problem with distorted polygon fill patterns in DirectX.
The RenderingPriority property of some visualizers is now supported in both 2D and 3D. The property has also been added to the CustomVisualizerProxy class.
Fixed an issue where a repeating PointVisualizer was not applied to the last segment of a polygon ring, if the visualizer was part of a LayeredLineStyle.
Fixed problem with last segments of closed lines disappearing after a zoom in/zoom out, using OrdinaryLayer.CacheMode = Dynamic.
Fixed problem with polygons disappearing after zoom in/zoom out, using OrdinaryLayer.CacheMode = Dynamic.
Fixed a bug where PointVisualizer.atCenter:True on polygons in 3D would always get a height of zero. Now the height of the first point in the polygon is used instead.
Fixed a problem in TextVisualizer with FollowLine = True and LengthUnit = NominalMeters or ViewCrs.
Fixed a bug where features not under a TerrainWarningOperator could get colored by the terrain warning.
Fixed a crash in DirectX renderer with some newer Intel HD graphics cards.
Fixed a case where Carmenta Engine would not restore the OpenGL state after rendering during an ExternalUpdate call, causing text rendering in other applications to break.
Fixed a case where features could get rendered with wrong colors when using an external drawable.
Fixed an issue with SvgSymbol sometimes adding an extra offset, and rendering the symbol in the wrong place.
The S52Visualizer now supports using either Day, Dusk or Night palette.
Added support for HighDPI in the map controller for QtQuick.
Fixed a problem with OrdinaryLayer.CacheMode = Dynamic; objects were not cached if no visualization was created for them.
Fixed a thread safety issue when using an SvgSymbol without bitmap caching under a TileLayer.
Fixed a TileLayer selection bug, View.whatsAt() now also returns presentation objects for visualization created by selection visualizers under a TileLayer.
Fixed a problem where update attributes were sometimes not applied correctly in a TileLayer.
Fixed a selection problem where View.WhatsAt() in some cases could return non-selected presentation objects before selected ones.
Fixed an issue in CustomDataSetProxy that caused the Thread Access Verifier to fire if a custom dataset under a TileLayer accessed the Query parameter.
Fixed a thread safety problem in custom datasets, when calling out to IQueryResult.GetVisualizers().
The selectable property has been discarded in TileLayer3D, GroundLayer3D and LegendLayer classes, since it wasn't supported by these classes anyway.
Fixed an issue in all custom proxy objects where accessing the implementation when no implementation existed or had been set could result in an exception instead of returning null.
Fixed a problem when calling the GetImage() method for a legend item that uses a custom visualizer.
Fixed some problems when using custom objects on Android.
Fixed some problems when running on Android 7.
Changed the Operator.GetRasterFeature() implementation to minimize edge artifacts in the returned raster.
Ensured that Operator.GetRasterFeature() or ProjectOperator will not try to convert integer rasters with palette or other visualization into RGBA.
Fixed an unnecessary exception that could occur during automatical merging of rasters that cross the dateline.
Added call to new method MapControl::waitForBackgroundThreadEvents() from all MapControl destructors, to avoid rare crashes during application shutdown.
The bounds calculation for a rotated SvgSymbol with multiple line elements have changed; the rotated bounds may be slightly larger than in previous versions.
Removed hard-coded range limit of 20 kilometers for LineOfSightOverlay.
Fixed a problem which could cause incorrect results when dynamically updating the ranges on observers in a LineOfSightOverlay.
Fixed a problem in DirectX where the LineOfSightOverlay could exhibit missing sectors when the observer was very close to the ground.
Update attributes from the view are now accessible to operators under a TerrainWarningOverlay or a LineOfSightOverlay.
Optimized memory usage for vector data.
Optimized a couple of commonly used collections, most notably PointCollection, EdgeCollection, TriangleCollection, LineGeometryCollection and PolygonGeometryCollection.
Optimized memory usage when rendering textures using DirectX.
Carmenta Engine will now write entries to log files from a background thread to improve performance.
Fixed an issue when using the DirectX renderer so that resources are cleaned up faster when a drawable is destroyed.
Fixed a resource leak when creating a drawable with a DirectX renderer.
Fixed an issue in the DirectX renderer that could leak resources when using blend modes.
LabelOrganizingLayer will now distribute label candidates inside polygons instead of only around the center position.
LabelOrganizingLayer can now avoid placing a polygon label inside another polygon that overlaps the proper one.
When a LabelOrganizingLayer places labels, it can avoid conflicts not only with other labels and symbols, but also with lines and polygons.
LabelOrganizingSettings.RemoveOffScreen = True now has no effect under a TileLayer.
Fixed an issue where a label with LabelOrganizingSettings.removeNonFitting = True was not removed by a LabelOrganizingLayer if the source feature was completely contained inside the bounds of the label.
Fixed issue with LabelOrganizingLayer.buffered = True that could sometimes fail to organize labels and remove duplicates.
Fixed issue in View.DisableThreadAccessVerification() that caused some objects under a View to still be checked.
Setting GlobeView.UpdateEnabled to False should now work as documented, i.e. calling Update() should not update the view.
The Java Runtime Environment is no longer automatically installed by the Carmenta Engine Linux SDK installer.
Added min and max functions to the expression syntax.
Fixed some issues when a PolygonClipOperator clips a mesh feature against a polygon: fixed a problem with mesh coordinates in LongLat, corrected the texture coordinates and the normals in the clipped mesh, and added support for clipping mesh edges and vertical triangles. Also, removed the restriction in the operator that only meshes marked as ground could be clipped.
Fixed a problem with OrdinaryLayer.cacheMode = Dynamic: LongLat features could disappear if the view area crossed the dateline.
Fixed a case where exporting a map package in Carmenta Explorer could lead to a crash.
Custom visualizers and symbols now always dispose temporary objects after calling out to custom code, regardless of whether the custom object implements IMinimizeGarbageCollection or not. Custom data sets and operators work as before.
Fixed a bug where Path-elements in SVG symbols would not be printed correctly with the PrinterDrawable.
5.9.2 Release Notes
Fixes and Minor Improvements
Fixed an issue where a VpfDataSet could generate incorrect coverage rectangles for some VPF data.
Fixed a thread safety problem in the software renderer that could cause a crash on Linux, in a TileLayer with cacheAsBitmaps = true.
Fixed a thread safety problem in the OrdinaryLayer.FlushCache() method.
Fixed a crash in LevelOfDetailOperator with fillArea = true, if immediately followed by an AttributeOperator.
Fixed a crash that could occur if a CompositeLineVisualizer was used under a LabelOrganizingLayer.
Fixed a problem in the software renderer, where rendering transparent polygons with fill patterns could lead to a crash.
Added support for using the WPF MapControl hosted in a WinForms application running over remote desktop.
5.9.1 Release Notes
Fixes and Minor Improvements
Improved the visualization of Appendix B tactical graphics in a 3D surface layer.
Fixed a problem with a GeorefGridGenerator constructed in code: the grid lines were sometimes not rendered.
Corrected the fullValue attribute created by a GeorefGridGenerator: the first two letters of the attribute could sometimes refer to the wrong 15 degree quadrangle.
Fixed a crash in the OpenGL renderer with some Nvidia drivers on Windows 8.1 and Windows 10.
Fixed a crash when reloading surface textures in a GlobeView after surface layers were changed, if the view also had an auxiliary ground input.
Fixed a problem in CatalogMap.Clone() which could cause the application to hang.
Fixed an issue in RpfDataSet that could cause an out of memory error when building a raster cache for data in the southern hemisphere.
Fixed problem with monitoring a remote Catalog for changes when some attributes in the response from the service contains time stamps.
Fixed a crash rendering certain tactical graphics in an OrdinaryLayer with dynamic cache mode.
Line features with Closed property = True are now correctly rendered in globe views.
Improved the WPF MapControl so that the DirectX renderer works over a Remote Desktop connection.
Fixed an issue with RectangleClipOperator where a negative pixelMargin was not applied.
Fixed a problem calling GetFeatures() on an OrdinaryLayer or an operator, when the operator chain contained a SpyOperator.
Fixed a crash in LineOfSightOperator that could occur with elevations of high resolution, a long MaxDistance, and a too low value of FirstResolutionChange.
Fixed a problem creating raster symbols from feature attributes and displaying them in 3D.
Fixed an issue in TacticalVisualizer that could cause an out of memory error when rendering the minefield symbols TACGRP.C2GM.DCPN.DMYMD or TACGRP.MOBSU.OBST.MNEFLD.DYN at very zoomed in scales.
Fixed a deadlock that could occur in a GlobeView with ground relative layers.
Fixed a problem where a GlobeView could continuously load and unload a certain ground tile until the camera position was updated.
Fixed problem with raster symbols defined as hex strings that contained invalid data.
Fixed a problem where white objects could be drawn with the wrong color early in the application lifetime when using a GlobeView.
CameraProjectOperator has been changed so that it now generates no output when the camera is pointing towards the horizon, instead of generating a distorted image with an incorrect position.
Fixed a problem with 3D line of sight not working after DirectX window was resized.
5.9 Release Notes
New Functionality and Major Improvements
The new LineOfSightOverlay makes it possible to perform line of sight calculations on detailed 3D mesh data.
It is now possible to supplement or replace the elevation data ground meshes loaded by a GlobeView. A typical use case is to replace the ground mesh with detailed 3D city models.
The new DensityDataSet calculates the density of point features. This can be used to generate density heatmaps.
Map layers can now be configured to use the multiply blend mode. This improves the clarity of semitransparent overlays such as hillshading or line of sight viewsheds.
Improved parallelism when using Carmenta Engine on multi-core CPUs: TileLayer and other tiling components now default to loading several tiles in parallel. The new property TileLayer.TileLoadingPolicy can be used to control this behavior.
OgcWmtsLayer can now cache the downloaded WMTS tiles on disk.
Carmenta Engine components that connect to OGC web services can now be configured to automatically detect when the services have been updated.
Carmenta Explorer and Carmenta Studio have a new, modern look and feel. The updated applications also work well on high DPI screens.
The new Thread Access Verifier performs runtime checks to ensure applications follow the threading best practices when modifying the configuration at runtime.
The documentation has been updated with many new code snippets that demonstrate how to use common classes, methods and properties from C#, C++ and Java.
The TIFF reader in ImageDataSet has been improved. It can now handle TIFF files with YCbCr and CMYK color spaces and files with JPEG compression. It can also use built-in overviews ("tiff pyramids") without creating an external raster cache. And it can read files tagged as "planar format" if there is only one sample per pixel. These types of TIFF files could previously only be read by the GdalDataSet.
A new method GeometryClipper.ClipMesh() can clip mesh geometries against rectangles.
Added possibility for custom datasets to use the Carmenta Engine global cache mechanism.
The label organizing functionality can now be configured to remove texts that do not fit entirely inside a polygon or along a line.
Important Notices and Breaking Changes
In the C++ API the Collection and AttributeVariable classes were previously implemented as templates, and typedefs were used to map the documented class names to the corresponding template instantiation. These templates and typedefs have been replaced by real classes. C++ source code that uses the template classes directly needs to be updated to use the real classes. As an example, code that uses AttributeVariable<Double> needs to be updated to use DoubleAttributeVariable.
The Samples Geodata distribution which contains data for the Carmenta Engine sample map configurations has been updated. Please install the new version, available from the Carmenta download page, to ensure that the samples work as intended.
S-57 feature index files generated by previous versions of Carmenta Engine may be incorrect and should be regenerated.
Deprecated types and type members now generate warnings when used in Carmenta Studio. The .NET, Java and C++ APIs will now also generate compile warnings for these types and type members (in C++ only with the Visual Studio or Clang compilers).
The TinGeneratorOperator class has been deprecated and may be removed in future versions. Please contact Carmenta support if you are using this operator in your application.
The Raster.Data property now always throws an exception if the raster is read only. The new Raster.ReadOnlyData property can be used to access the data buffer of a read-only raster.
CustomOperatorProxy will now always call ICustomOperator.Clone() to clone the custom operator before it is used.
The new static method MemoryDataSet.FromFile(fileName) should be used to create a MemoryDataSet by reading features and CRS from a file. It replaces the now deprecated non-static method MemoryDataSet.Load(fileName).
The cacheSize property has been removed from LineOfSightOperator, TargetLineOfSightOperator, TerrainAccessOperator and VisibilityIndexOperator. They will instead use the global cache automatically.
PixelSizeAdjustments are now available to custom visualizers, through the supplied drawable. If a custom visualizer calls other visualizers to do the rendering, the adjustments will be applied automatically. If it calls methods directly on the drawable, it can now use the supplied adjustments to scale the rendering on high DPI screens. Custom symbols are always scaled automatically, as before.
Fixes and Minor Improvements
Reduced the API overhead and improved performance for C++ application code that creates and destroys lots of instances of Point, Id, Rectangle and a few other value classes.
Added specularity to lighting computations in View3D.
Fixed excessive memory usage problem when clipping mesh geometries.
The text displayed by View.DisplayStatistics is no longer obscured by the ground in a GlobeView using DirectX.
The resolution is now calculated correctly for application layers under a GlobeTileLayer in a GlobeView.
GeoTextureMapOperator now works as expected in a GlobeView.
Resolved several issues related to ground-relative layers in 3D views.
GlobeView now calculates ground normals correctly for areas where elevation data is missing.
Fixed an issue where a GlobeView reading elevation rasters with nothing but undefined values would generate an incorrect ground mesh.
View.RenderingHint = MovingMap now works for both 2D and 3D views.
Fixed several issues that could result in gaps between tiles in a GlobeView.
A GlobeView created from application code will now get the correct coordinate reference system.
Fixed a problem where features in a GlobeView could be culled even if they should be visible.
Fixed an issue where objects in the lower part of a GlobeView window could disappear in certain camera angles.
Fixed a problem that could occur when displaying application features from MemoryDataSets that use non-Wgs84LongLat coordinate reference systems in GlobeView.
Fixed incorrect offset of meshes from a BoxOperator in ground-relative layers.
Fixed an issue with black visual artifacts in textures in the GlobeView when using Intel HD graphics and DirectX.
Fixed a crash in the GlobeView.Elevation method when called before the first update of the view.
Fixed a problem with the maxScale property of an OrdinaryLayer directly under a GlobeView.
Added the possibility to specify surface normals for MeshGeometry objects.
Improved the lighting of 3D volumes generated by SphereOperator, PipeOperator and BoxOperator.
The new property GlobeView.MostDetailedTileScale makes it possible to control how detailed tiles will be loaded by a GlobeView.
Fixed a problem where visualization of symbols along a line geometry in a GlobeView were placed and rotated incorrectly.
Some 3D symbols that were previously rendered with the wrong material properties in GlobeView/DirectX are now rendered correctly.
Fixed a memory leak in the C++ API that occurred if a custom object implemented the clone() method with the help of a copy constructor.
Fixed a problem using the Windows version of the Carmenta Engine Java API jar-files on 64-bit Linux.
Fixed a case where the "Open Data File" functionality in Carmenta Explorer with OpenGL renderer and the overview window enabled could make the main view empty.
Improved the performance of the background map in Carmenta Explorer.
Fixed a Carmenta Explorer problem where the format of the mouse position in the status bar would not change when a new format was chosen.
Fixed an issue in Carmenta Explorer where the datasets used by the Utility Layers could show up in the DataSets window.
Fixed a problem in Carmenta Studio where a configuration file could be saved with the wrong namespace.
EnvironmentVariable.ifAbsent and RegistryValue.ifAbsent can now be specified as Path objects in Carmenta Studio. This makes it possible to construct more complex path combinations.
Coordinate reference systems: Upgraded to EPSG version 8.9 (published February 2016).
Fixed a problem with generating Well-Known Text for the coordinate reference system SWEREF99 TM.
Minor improvement in Crs.ToWellKnownText(): PROJCS will always refer to a GEOGCS of type Geographic 2D.
Modified the unprojection of a point in the unused sector of a Lambert Conformal Conic projection (beyond a pole), so that the resulting LongLat point will be on the border of the unused sector, at the same distance from the pole as the original point.
Improved tolerance for invalid latitudes: if a point with latitude greater than 90° or less than −90° shall be projected to a map projection, the latitude will first be snapped to 90° or −90°.
Fixed a dateline problem with LongLat rasters that have longitudes in the range 0° to 360°E. At zoomed-out view scales, the raster could sometimes appear on only one side of the dateline.
When constructing the Romanian coordinate reference system Pulkovo 1942(58) / Stereo70 from its EPSG code 3844, Carmenta Engine will now choose a datum shift suitable for Romania, regardless of the datumShiftChoice parameter.
When building a raster cache for a dataset, overlapping rasters with undefined areas are now handled correctly.
Fixed a bug in the built-in raster cache that could cause some operators to modify cached rasters.
Fixed an error when writing file index for a dataset with multiple data files with different coordinate reference systems: file bounds could be incorrect when the index file was used.
Fixed a case where FeatureIndexPath on ArincDataSet returned an empty string regardless of the FeatureIndexPath the dataset was constructed with.
Fixed a problem in CmrgDataSet that could generate a 'bad allocation' exception for some files when used with raster caching.
Fixed a crash in CmrgDataSet if a specific CMRG dataset was specified, but the dataset was not found.
Fixed a bug where DataSet.GetValueAt and related methods could return an incorrect result for datasets that read data in several different coordinate reference systems.
Fixed a bug where DataSetSet.GetValueAt and related methods would not return any value from the subdatasets.
Upgraded the GDAL/OGR library to version 2.0.2 (previous version was 1.9.2).
ImageDataSet now ignores the PlanarConfiguration property for TIFF files with one sample per pixel.
ImageDataSet can now handle multiple image files with different coordinate reference systems.
Extended the file format for MemoryDataSet to support edges and normals of mesh features. (Carmenta Engine versions older than 5.9 cannot read the new file format.)
Fixed a problem parsing the OGC CS/W GetRecords response returned by some servers.
Fixed a crash in OgcWfsDataSet that could occur when a WFS server indicated it delivered 3D data and then returned only (x,y) coordinates. The OgcWfsDataSet will now throw an exception to report the error.
Fixed a problem with OgcWmtsLayer.encoding = Auto selecting the KVP interface even for servers that only supported the REST interface.
OgcWmsLayer and OgcWmtsLayer now inspects the returned image data to determine the image format instead of assuming that the server sets the correct content type in the response. Image responses with incorrect MIME types will also be loaded correctly.
Fixed an issue where an OgrDataSet reading multiple files could return incorrect bounds.
Relaxed the parsing of the cpg file for a Shapefile to allow leading non-digits before the code page integer: for example, ANSI 1252 will now be parsed without errors. Also fixed so that a cpg file containing 88591 or 8859-1 is handled correctly.
RaveGeo libararies upgraded to version 3.1.5, built with Visual Studio 2013. The Visual Studio 2005 C++ Runtime is no longer required and has been removed from the installers.
Fixed a bug in S57DataSet that could cause polygons to disappear when zoomed in.
Improved performance in S57DataSet.
VpfDataSet now supports VMAP2i data with ISO 8859-1 (Latin-1) string attributes.
Greatly improved performance in MapPackageDataSet for some GeoPackage files. When the geometry column name was specified with different casing in different tables, the dataset could previously fail to recognize the spatial index.
Improved the automatic LineWidth of a UtmGridGenerator with user-defined line distances.
Fixed GeorefGridGenerator: with Division = 2, the line attribute greatestRoundDivisor was sometimes wrong.
Improved the accuracy of ShadowOperator, and made it useful also in zoomed-out scales and in a GlobeView.
Fixed TerrainRouteOperator: if there are intermediate waypoints, the operator will now return the subroute features in the natural order from start to goal.
Fixed a bug where Operator.GetRasterFeature could return a raster that was larger than requested.
Fixed a bug in the EllipseOperator clone method that did not clone all attribute variables correctly.
Fixed a bug where attributes added by BoxOperator and CameraProjectOperator would not appear in the Carmenta Studio feature attribute drop-down list.
The operation of clipping a raster by a polygon has been made more conservative: it will now keep all borderline raster cells. Previously, a raster cell was clipped away if more than half of it was on the clip-away side of the border. The new behavior can avoid visible gaps when using LevelOfDetailOperator.fillArea = True, and tends to look better in general.
Fixed a problem where line-of-sight rasters in a layer with cacheMode = Dynamic could sometimes be incorrectly clipped.
Fixed a problem with View.WhatsAt() sometimes not finding features in a layer with cacheMode = Dynamic.
Fixed an issue with LineThinningOperator where straight lines that were longer than half the world could be thinned to go in the opposite direction around the world.
Fixed a case where lines drawn with a ComplexLineStyle could have unnecessary gaps in corners.
Fixed a problem outlining polygons with dashed lines under a TileLayer.
Fixed a problem where several rasters from an ImageDataSet could be merged and drawn with the same color table, even if the color tables were different.
Fixed RectangleClipOperator so pixelMargin is applied under a TileLayer.
Improved rendering of lines with dashed or complex line styles; artifacts due to the line being clipped are now avoided in most cases.
Fixed the horizontal padding for polygon patterns in the PolygonVisualizer. It was previously always set to the value of the vertical padding.
Fixed a memory problem when zooming in very close on a dashed line in a layer with dynamic cache mode.
Fixed a memory allocation problem when adding plots to an inactive PlotLayer.
Fixed a problem where synchronous tile layers could freeze if tiles were located outside the bounds of a dataset.
Fixed a problem in LabelOrganizingLayer that could move selection visualization that did not have a LabelOrganizingSettings.
Tactical Extension: Fixed the visualization of the Date Time Group fields in the MIL-STD-2525B and MIL-STD-2525C "Obstacle free area" and "Obstacle restricted area" symbols.
Tactical Extension: Fixed visualization of the unique designation field in the holding, release and bridgehead lines.
Tactical Extension: Fixed label order on several MIL-STD-2525B and MIL-STD-2525C phase line symbols.
Tactical Extension: Fixed SIDC code of the MIL-STD-2525C Appendix B symbol TACGRP.MOBSU.OBST.AVN.TWR and marked it as not supported.
Tactical Extension: The MIL-STD-2525B and MIL-STD-2525C visualizations now display the Quantity modifier for all Appendix A symbols except ground units and installations.
Tactical Extension: Fixed visualization of Appendix B symbols that use non-standard colors or different statuses in cached layers.
Fixed problem with corrupted metadata files when using the Tactical Extension in Android Studio.
In Carmenta Engine for Android, all the Carmenta Engine data files are now stored in a single file, "assets/carmenta.engine/data/ce.dat".
GCC 4.9 and the GNU Standard C++ Library from the Android NDK r10e are now used for building Carmenta Engine for Android.
Updated sample applications for Android 6.0.
Fixed a problem where Geometry.FromWellKnownText(string) would return an incorrect result when spaces were present before coordinates in geometries.
Fixed a case where Geometry.FromWellKnownText(string) would not allow points with all coordinates zero.
Fixed a problem where Raster.FromFile() could keep the file locked after creating the raster.
Fixed Configuration.Save() so that raster and mesh features are not saved, since these geometry types cannot be saved to a px file. Such features could previously cause the created px files to be corrupt.
Changed several file extension comparisons to be case insensitive, on all platforms.
Fixed some Java related dependency problems when installing the Carmenta Engine SDK package.
Setting the Tool property of a Windows Forms MapControl no longer disconnects the current touch tool.
Fixed StandardTool so the correct mouse cursor is shown when hovering over selectable features and StandardTool.EditEnabled = False.
Improved use of multi-sampling when using OpenGL on Linux.
Fixed incorrect value of Raster.MinValue property for float rasters.
Various performance optimizations.
5.8.3 Release Notes
Fixes and Minor Improvements
Fixed a problem where RaveGeo data could fail to be displayed within the RaveGeo resolution from a tile boundary of a TileLayer.
Fixed a problem monitoring Catalog changes when a single configuration file contains multiple CatalogDatasets.
5.8.2 Release Notes
Fixes and Minor Improvements
Fixed a problem in Carmenta Studio, where additional languages defined in a configuration could be lost if the configuration window was closed while the configuration was modified.
Fixed a problem in RaveGeoDataSet that caused search index files to be re-generated if the absolute path to the RaveGeoDataSet.IndexPath changed.
Upgraded RaveGeo libraries on Windows to version 3.1.4.
Fixed a problem setting the selectable property of catalog maps.
Fixed a problem with ShadowOperator, which could sometimes cause an access violation if the sun rays were parallel with the columns or rows of the elevation raster.
Removed "Building index" log message during dataset initialization from datasets that do not use an index.
Spatial resolutions specified in an ISO 19139 metadata document in a Catalog are now properly parsed, and can be accessed through the CatalogMetadata class, for both catalog maps and catalog datasets.
Added the possibility to specify the minimum required Carmenta Engine version for a CatalogMap.
Fixed a memory leak in OgcWmtsLayer.
CM93DataSet now returns point features with depth values that were previously discarded.
Fixed a crash in the CM93DataSet when reading some CM93 data sets.
Configuration files marked as "Shared" loaded from a catalog are now only shared within that catalog, and not globally.
Fixed a thread safety issue that could result in heap corruption, when creating and releasing a large number of dataset instances during a short time period.
Changed how the QtMapControl detects and rejects synthesized mouse events on Qt 5.3 or newer to fix a problem that could make a Qt application, depending on hardware and OS, lose mouse events after a touch interaction.
Fixed a problem when rendering a 2D terrain warning in a QtQuickMapControl so the warning is generated at the correct location after panning the map.
Fixed a case where a non-existing IndexPath would throw an exception when creating a search index.
Fixed a bug where enabled styles in catalog queries could cause a crash.
Fixed bug that would draw JPEG2000-rasters on top of other layers regardless of layer order. This could only happen if the JPEG2000-layer was selectable.
Layers with CoverageHint = Opaque should now work as expected under tile layers.
Fixed a problem calculating coverage rectangles, that could cause a CoverageDataSet or a LevelOfDetailOperator to crash for certain data.
Fixed a crash in Carmenta Explorer when displaying dataset info for a DataSetSet with sub-datasets that failed initialization but had suppressInitializationErrors = True.
5.8.1 Release Notes
Fixes and Minor Improvements
Fixed a problem where ground-relative objects were sometimes not drawn at all in a 3D view.
Fixed a problem with atmosphere not being drawn correctly if a globe view contained raster symbols or tactical symbols.
Improved rendering of intersecting, semi-transparent volumes i 3D.
View.CrsToPixel() now works as expected in globe views.
Calling FlushCache() on a globe view will now also flush surface layers.
Fixed a crash when trying to render line geometries with no points in a globe view.
Fixed a problem where update attributes were not accessible from surface layers under a globe view.
Fixed a problem when cloning GlobeView and GlobeTileLayer objects.
Fixed a problem printing globe views from Carmenta Explorer.
Parsing of WMTS capabilities documents is now more robust when accessing remote catalogs.
Added CatalogMetadata.OgcServiceType property, to allow applications to distinguish between WMS and WMTS services from a remote catalog, as well as between WCS and WFS dataset services.
Improved Catalog Extension support in Carmenta Explorer; it is now possible to access both WMS and WMTS services directly from a remote catalog.
Cloning a CatalogMap instance now clones child layers.
Layers with CoverageHint = Opaque should now work as expected with CatalogMap layers.
Fixed a problem with reading spatial resolution metadata with Catalog Extension from some WFS services.
Improved progress reporting while generating dataset raster caches.
Fixed exception "vector<T> too long" when generating raster cache for large DTED datasets.
Fixed a thread safety issue in CmrgDataSet.
Fixed a problem reading bounds polygons from datasets using a raster cache.
Terrain warning overlay can now be disabled after having been enabled, by setting MaxDistance to a negative value, or removing the TerraingWarningSettings instance from the view.
Fixed a crash that could occur when viewing the date line and the configuration contained a LevelOfDetailOperator with fillArea = True.
Fixed a problem with VerticalProfileOperator where a route segment going due north or south could sometimes cause the computation to freeze.
Fixed a problem with VerticalProfileOperator: if the first or last route segment was very short compared to the elevation resolution, an erroneous part of the profile could be generated.
Fixed incorrect results from calling PolygonClipOperator.GetFeatures() with a default FeatureQuery.Area.
Fixed an error in the DirectX renderer that could cause visual artifacts in polygons that had a fill pattern.
Fixed a problem with SymbolVisualizer throwing an exception if symbol property was a keyed attribute variable without a default value.
Rendering of video streams on 2D maps using CameraProjectOperator is now affected by the layer opacity setting.
5.8 Release Notes
New Functionality and Major Improvements
Many improvements in the support for 3D maps:
The new GlobeView and GlobeTileLayer components can be used to create globe based maps.
The BoxOperator, SphereOperator and PipeOperator components can generate 3D volumes from 2D vector data.
The VolumeSymbol component makes it easy to use 3D shapes like boxes, spheres, cones and cylinders for 3D symbology.
The new MeshGeometry.Edges property makes it possible to add edges to the mesh which can be visualized with a LineVisualizer. This provides an easy way to emphasize the outline of the 3D volume.
The new RenderingPriority property can be used to indicate that certain visualization should always be visible in 3D, even when it would be obscured by terrain or other objects.
A new update attribute called 'distance3D' makes it possible to filter or modify the 3D presentation based on the distance to the camera.
It is now possible to open geodata files in Carmenta Explorer without first creating a map configuration file in Carmenta Studio. Additionally, a new panel makes it possible to inspect properties about the datasets in the map. It is also possible to display various utility layers like a background map and grids together with the loaded map.
The new View.TerrainWarningSettings property makes it possible to apply a color coded terrain warning visualization to both 2D and 3D globe views. The terrain warning visualization is applied on the graphics card and can therefore be updated and redrawn without reloading any data.
The CameraProjectOperator can be used to project non-georeferenced rasters onto the ground based on camera parameters, e.g. to georeference a video stream with associated camera metadata.
It is now easier to perform text formatting directly in a TextVisualizer. The expression syntax has been extended with text formatting methods and interpolated strings. The new TextVisualizer.wordWrap property can be used to break long texts into multiple lines.
Carmenta Engine now supports GARS, the Global Area Reference System. The GarsGridGenerator can be used to display a GARS grid on the map and utility methods on Crs makes it possible to work with GARS-formatted strings.
The Layer.CoverageHint property can be used to improve performance in applications that display many overlapping layers. When a layer has CoverageHint = Opaque and the layer fully covers the view, Carmenta Engine will disable rendering of all layers which are behind the layer.
The View.Constraints property can be used to limit the geographical extent and zoom level of 2D views as well as the position of the camera in 3D views.
The support for writing custom SQL statements using the DatabaseQuery and the database DataSets has been improved. It is now possible to use bind variables/parameters in the statements to improve performance.
VerticalProfileOperator can now be used to intersect vector features with a top and bottom elevation, e.g. airspace polygons.
It is now possible to load a font directly from a font file on disk without installing the font on the system.
SVG symbols can now be used as patterns in PolygonVisualizers. Polygon patterns can now also be scaled and padded with extra spacing.
The new QtQuickMapControl makes it possible to use Carmenta Engine in a Qt Quick application. A new sample, HelloWorldQtQuick, demonstrates how to use the new MapControl.
The new CoverageDataSet makes it easy to display DataSet extents as polygons in the map.
The Carmenta Engine SDK now includes 'natvis' files which provide debug visualization of objects in the C++ API in Visual Studio 2013 and later.
Carmenta Engine SDK for Android now has full support for Android Studio.
It is now possible to have both Carmenta Studio 5.8 and an earlier version of Carmenta Studio installed on the same computer.
Important Notices and Breaking Changes
The Samples Geodata distribution which provides data for the Carmenta Engine sample applications and map configurations has been updated. Please install the new version (available from the Carmenta download page) to ensure that the samples work as intended.
The 'GDI', 'GDI Software', 'OpenGL Software' and 'DirectX Software' renderers have been removed. Use the 'Software' renderer to render the map without hardware acceleration.
ShapefileDataSet now reads the DBF code page from the .cpg file or the language ID in the .dbf file. If the autodetect fails the code page defaults to 65001 (UTF-8). The old behavior to use the system active code page can be specified by setting code page to -1.
The default code page in ShapefileSchema has been changed to 65001 (UTF-8).
OrdinaryLayer now has a default pixel margin of 100 by 50 pixels. In previous versions the default margin was zero.
Pixel and geographic margins are now ignored under tile layers. If you have BufferZoneOperators in a tile layer, use the new BufferZoneOperator.Margin property instead to make sure the buffer zone is rendered properly in all tiles.
When using the View.WhatsAt() method on OrdinaryLayers with CacheMode = Dynamic, it is now necessary to specify correct pixel margins on the layer, just like when using non-cached layers.
On Linux, the x11Message, setCursor and setCustomCursor methods have been moved from the MapControl class to the new X11MapControl class.
Full-text indexes are now always case and diacritic insensitive. Text index files for existing datasets need to be regenerated in order for searches against those datasets to become case and diacritic insensitive.
Two deprecated methods have been removed in the .NET API: Rectangle.Overlaps and Rectangle.StrictlyOverlaps. Use the Overlap and StrictlyOverlap methods instead.
Public objects in Catalog Extension must now be explicitly tagged with the user property "CatalogPublicObject". Just checking the Public check box will not make an object available as a public object through the Catalog Extension API.
Fixes and Minor Improvements
Windows 10 is now a supported operating system.
Improved tile loading in TileLayer3D; tiles closest to the camera are now always loaded first within each tile level.
The rendering of semi-transparent objects in 3D views has been improved.
Fixed a problem with OrdinaryLayer.GroundRelative and dynamic cache mode.
Various 3D performance improvements.
Referencing .NET custom objects on other platforms than Windows now results in a well-defined error message.
The .NET MapControls now trigger a garbage collection when their View is disconnected to ensure that all resources held by the View are released.
The .NET MapControls now disconnect their Tool references when they are disposed.
Added missing property Rectangle.IsEmpty in the .NET API.
Fixed a problem initializing the Carmenta Engine runtime under a restricted Windows user profile.
Minor optimizations in the Java API.
Fixed Rectangle.getInfinite() in the Java API so the correct rectangle is returned.
Added new X11MapControl class on Linux.
Added a setCustomCursor() method to the QtMapControl.
Improved how hash codes for several classes in the .NET and Java APIs are generated.
Fixed problem when building an application using Carmenta Engine libraries and linking statically with TinyXML on Linux.
Windows paths beginning with single slash or backslash, without a drive letter, are now handled correctly.
Fixed a problem that could trigger a LoaderLock MDA when debugging configurations using ScriptOperator in Visual Studio.
The libc++ library is now used on Linux instead of the systems GNU C++ standard library.
Fixed a problem with PolygonGeometry.ConvexHull() generating invalid polygons with only two points.
A CatalogLoadLayerSet with no queries will now load all maps from the catalog.
Improved load times in Catalog.LoadMap() significantly for large configurations.
The user property CatalogMap must now be set to the value True to mark a view as a catalog service. Previously any value would mark it as a service, even False.
Catalog.LoadDataSet() will now correctly recognize and separate WFS and WCS services received from remote CS/W catalog.
Fixed a problem in CatalogMap.Clone(), previously some properties were not copied.
The new method CatalogMap.GetAllPublicObjects() can be used to find public objects from other maps included through a CatalogLoadLayerSet.
Catalog.MonitorChanges() will now also detect changes to ISO metadata documents linked to the catalog services.
Changing the selectable property of a CatalogMap instance now works as expected.
Fixed a problem which could cause Catalog.GetDataSets() to return duplicate entries for some datasets.
It is now possible to specify the initial selectable state of CatalogMap instances loaded from a Catalog by setting a user property on the View that defines the catalog map.
Fixed three problems with the Crs.FormatMgrs method: An incorrect latitude band letter was generated for a point between 80°N and 84°N. An incorrect 100 km row letter was generated for a point on the south hemisphere and less than 1 meters south of a 100 km square border. An exception was raised if the longitude was outside the half-closed interval [-180°, +180°).
When formatting or parsing MGRS, the "old" or "AL" lettering scheme can now also be used if the geodetic datum is based on the Clarke 1880 (IGN) ellipsoid.
Coordinate Reference Systems: upgraded to support EPSG version 8.7, released April 2015.
Implemented a new method Crs.ParseMgrsAsArea() that returns a PolygonGeometry. This is an alternative to the old Crs.ParseMgrs(), which returns a point.
Implemented a new method Crs.FormatUtmUps(), which formats a LongLat point as UTM or UPS notation.
Added support for generating Well-Known Text for a coordinate reference system based on an EquidistantCylindricalAngularProjection (often used to emulate a Long/Lat system with a longitude range of 0° to 360°, or a Long/Lat system with a user-defined angle unit).
Minor improvements in the Well-Known Text generation for a coordinate reference system that lacks a name or lacks authority and authorityCode.
Fixed three minor issues with the Lambert Conformal Conic projection: The constructor for the 1SP variant would throw an exception in the Python API. The average of the two standard parallels was required to be more than a millidegree away from the equator or a pole; now a microdegree is enough. The Crs.MetersXY method ignored that the Lambert scaleFactor can differ from 1.0.
The ArincDataSet now adds attributes indicating upper and lower limit to airspace features.
Fixed a problem in ArincDataSet that could result in a crash when reading files with invalid airway geometries.
Fixed CustomDataSetProxy so custom datasets that implement ICustomSearchableDataSet are called when making a text search through Layer.GetFeature() or Operator.GetFeature().
Fixed a synchronization problem in CustomDataSetProxy that could result in a crash if the dataset was accessed by multiple threads.
Upgraded the third party Teigha libraries to version 4.1 to allow the DwgDxfDataSet to read files generated by AutoCAD 2015.
Fixed a thread safety problem in GdalDataSet.
ImageDataSet can now read certain TIFF files with inverted height and cell height.
ImageDataSet will now attach a RasterVisualizer with a grayscale color ramp for 16-bit integer TIFF files.
Fixed a problem where ImageDataSet could leave open files handles if an error occurred during initialization.
The Jpeg2000DataSet can now generate a raster cache to allow the data to be used at even more zoomed-out scales than what the built-in JPEG2000 overviews permit.
Improved the parsing of georeferencing information in Jpeg2000DataSet.
Corrected the values of cellWidth and cellHeight computed by MapPackageQuery.boundsPolygons when the map package CRS was not meter based.
Fixed a problem with case-sensitive comparison of geometry column names in GeoPackage databases,
Fixed a problem with specifying bounds for a MemoryDataSet.
Fixed a problem with MemoryDataSet not working properly with a LevelOfDetailOperator with fillArea = True.
Fixed problem with reading string attributes longer than 256 characters with the OracleDataSet.
PostgreSqlDataSet now reads the SRID from the database if the Crs is not explicitly specified.
Fixed a problem in the spatial filtering when using the PostgreSqlDataSet to read a table with the Geography data type.
RaveGeoDataSet.GetFeatures() with an empty query now returns all features in the dataset.
Fixed a problem in RaveGeoDataSet.GetFeature() that could fail to return an existing feature.
The RpfDataSet will now do a case-insensitive search for A.TOC files, on all platforms.
VpfDataSet can now read connected node primitives in addition to entity nodes.
Fixed a problem in VpfDataSet, which could generate invalid geometries and bounds for some data files.
It is now possible to get DataSetInfo from VPF data.
Fixed a bug in the parsing of three-point arcs in the S57DataSet.
Fixed a problem with the S63Cell.DataCoverage property sometimes returning null.
The S63.RegisterExchangeSets method now checks the version number of the imported data and gives a proper error message if the version is not supported.
Fixed a problem when a raster cache was used for a dataset with verifyIndexFiles set, and new data files were added.
The database DataSets now ignore attributes with unsupported types in the attribute list. Information about the unsupported attributes is written to the log.
Fixed a problem with raster cache overviews for some datasets, that could result in unexpected exceptions when the overviews was read.
Optimized raster cache generation for datasets with RasterCacheFilter = Vote.
Fixed a problem that could cause the global cache to temporarily grow past its maximum size while a text search index was being generated.
Fixed a problem which could cause OgcWmtsLayer to throw exceptions even if the ThrowException property was False.
OcgWmsLayer and OgcWcsDataSet now use lenient datum shift choice when constructing CRS instances, like OgcWmtsLayer and OgcWfsDataSet already does.
Fixed a compatibility issue in OgcWmsLayer.GetFeatureInfo() when used with Carmenta Server 4.3.
Improved logging in OgcWmsLayer and OgcWmtsLayer.
OGC components now recognizes and handles capabilities documents with ISO-8859-1 encoding.
Fixed a problem in AggregatingLayer that could cause a crash if a Feature specified a non-existing parent Feature.
The DataSetInfo.CreateDataSet() method could sometimes create an ImageDataSet that failed during initialization since it could not read the data. It will now return a GdalDataSet for such data.
Fixed a problem where DataSetInfo.FromFile() could misinterpret some files, and classifying them as ARINC data erroneously.
Added methods to retrieve DataSetInfo asynchronously.
Made it possible to integrate an ExternalDrawable with more third party GUI frameworks, for example Qt Quick.
Improved text search performance when using ArincDataSet, ShapeDataSet or VpfDataSet.
Made the text search index thread safe so multiple threads can search in the same DataSet at the same time.
Fixed a problem when doing a text search against a RaveGeo file that contains more than one feature class.
Improved the robustness of automatic raster merging.
Fixed issue with LineLegendItem where straight lines were drawn blurry.
Fixed a problem accessing update attributes from the view in SVG symbols using bitmap caching.
Fixed a problem using feature attributes to control visibility of elements in an SvgSymbol.
Fixed an problem generating cube meshes from a VRML model.
Improved the robustness of the substr() method in the expression syntax.
VRML models with internal LOD nodes can now be scaled and rotated.
Improved performance when calling WhatsAt() on a View that contains layers using the dynamic cache mode.
Fixed an issue where line thinning in LineThinningOperator or TileLayer could reset the closed property of line geometries.
When using a BufferZoneOperator, the new property margin should be used instead of OrdinaryLayer.geographicMargin.
Fixed a problem with GridGenerator: for a LongLat grid with a non-zero offsetY, the GridGenerator could try to generate a parallel circle with latitude greater than 90.
Added the new property GridGenerator.rectangles, which allows the generation of rectangular polygons between the grid lines.
Removed a gap, usually along the date line, in the output from an IsolineOperator that got a single LongLat raster covering the entire world.
Corrected the normalized direction of isolines (downhill slope to the right) when IsolineOperator.stopAtUndefined = False and the Undefined value is less than normal values.
Fixed several problems with an IsolineOperator that generates polygons.
Fixed a problem in LayerRasterizeOperator that could cause artifacts along tile edges in GroundLayer3D.
LevelOpDetailOperator.fillArea = True can now be used with DataSets that support polygonal coverages.
Fixed LineOfSightOperator, which could sometimes give absurd results or crash when using heterogeneous elevations.
Fixed a problem with LineOfSightOperator, which could sometimes be much slower than expected for heterogeneous elevations.
Fixed a LineOfSightOperator problem, where a non-integer pictureDirection could sometimes cause a pictureWidth of 360° to be interpreted as 0° and vice versa.
Fixed a problem that some operators, like LineOfSightOperator, could throw an exception saying that a raster width and height must be positive, if the operator was used in an area slightly outside the extent of the raster data.
Fixed the PolygonClipOperator, which did not allow selection of clipped line features or polygon features.
Added support for clipping rasters by polygons, using either a PolygonClipOperator or the GeometryClipper class.
Improved the performance of PolygonClipOperator in an update operation where the extent of the clipping polygons ensures that no output will be generated.
Fixed a problem loading ScriptOperator instances in applications started from a Windows console.
Fixed SlopeOperator so the generated visualization is updated if you modify the outputType at runtime.
Fixed a problem with stripe artifacts from ShadowOperator.
Fixed UtmGridGenerator, which did not always generate the irregular zone boundaries for Svalbard and Norway if the view also displayed the date line.
Fixed a problem when a UtmGridGenerator was created by application code: if the division was set to 1 but the lineDistanceX and lineDistanceY kept their default values of zero, then the mechanism that should calculate sensible line distance values from scale would fail.
Fixed visualization of Alternate operational conditions in transparent MIL-STD-2525C symbols.
Fixed incorrect tessellation of polygons with points with varying z-coordinates in 2D views.
Fixed a bug in ComplexLineStyle that could cause a crash in View.WhatsAt().
Fixed a text rendering issue with the Software renderer and RenderingHint.MovingMap.
Fixed a problem that could cause features in a TileLayer to be incorrectly clipped after the MapControl had been temporarily resized to a very small size.
Improved use of multi-sampling when using OpenGL on Linux.
Fixed an issue rendering symbol fonts on Linux with the Software renderer.
Fixed a problem in the internal font cache that could lead to blurry fonts in configurations with many different font sizes.
PointVisualizers with Repeat = FarthestAtDirection and ClipToViewArea = True now works as expected in a TileLayer.
Fixed a problem that could cause colored borders when reprojecting float rasters without an undefined value.
Fixed problem rendering TIFF files with overviews with solid green color instead of original color table.
Fixed a problem when canceling a CreateTool operation with the Escape key.
Fixed an issue with OverviewTool not synchronizing the overview view with the main view when manipulating the visible area in the main view.
Fixed StandardTouchTool so that layers with EnabledDuringQuickUpdates = False are redrawn when an interaction is finished.
Various improvements to the StandardTouchTool provide smoother multi-touch interactions. The new StandardTouchTool3D and InspectTouchTool3D can be used to provide multi-touch interactions with 3D GlobeView maps.
Added IToolTimerSink interface that tools can implement if they want to get called regularly on a timer.
The Qt samples can now be opened in Qt Creator on Windows.
The Qt samples now work correctly with dynamic OpenGL implementation loading in Qt 5.4 and later.
Carmenta Studio now detects if an open map configuration has been modified by another program.
Some additional special characters can now be used in identifier names in Carmenta Studio.
The Templates folder now has the correct content in Carmenta Studio on Linux.
Carmenta Studio on Linux now correctly displays the Catalog user properties if the SDK license contains the Catalog extension.
Fixed a problem editing objects with localized properties in Carmenta Studio, and pressing Ctrl-S without switching focus first.
Fixed a problem when changing the Selectable property of layers in the overview view in Carmenta Explorer.
Fixed 'Run Performance Test' in Carmenta Explorer on Linux so it measures actual elapsed time and not processor time.
The function for sending key requests via email in the License Key Manager has been fixed to work with 64-bit versions of Outlook.
5.7.2 Release Notes
Fixes and Minor Improvements
Fixed a problem which could cause datasets with VerifyIndexFiles = True to regenerate index files even when the existing index was up to date.
Fixed a problem where ShapeFileDataSet could under certain circumstances fail to return point features lying exactly on the edge of the Shapefile.
Fixed a problem that could occur when using LevelOfDetailOperator.Criteria = Resolution in a TileLayer, and cause the TileLayer to not render all tiles.
Fixed an issue in ShadowOperator that could cause spurious shadows to appear along the View.Area edge (or TileLayer tile edge) that is facing the sun.
Resolved a problem with the Jpeg2000DataSet that could cause excessive memory use when reading many files.
Fixed a problem where the global cache management could be ineffective during extremely large updates, leading to memory exhaustion.
Fixed a problem with DataSet.SuppressInitializationErrors for datasets that read data from non-existent folders.
5.7.1 Release Notes
Important Notices and Breaking Changes
Several changes have been made to fix some problems with the S-63 support introduced in version 5.7. This includes a few minor API changes in the S63 class, plus added API support in the Runtime class for managing the node-locked runtime licenses required to use the Carmenta Engine S-63 component.
Fixes and Minor Improvements
Fixed a problem where MultiFileDataSet instances with VerifyIndexFiles = True could potentially cause a crash, or read some files several times, after data files had been added or removed.
Fixed a problem with OracleDataSet instances sometimes leaving active database connections behind after being destroyed.
Fixed a problem that could cause a dead-lock in selectable TileLayers reading features from SplitOperators.
Fixed an issue where OpenGL rendering could stop working after switching views in a C++ MapControl.
5.7 Release Notes
New Functionality and Major Improvements
The new AggregatingLayer can automatically avoid overlap between objects in a hierarchical structure, e.g. the ORBAT hierarchy of a tactical scenario.
All raster datasets are now able to generate a persistent raster cache to speed up access to the raster data. The cache contains lower-resolution "overviews" to make it possible to use the data in zoomed-out scales. It can optionally also contain the original resolution data, which is useful if the data is slow to read in its native format. Refer to the RasterCachePolicy property of the datasets for more information.
Carmenta Engine can now read and visualize commercial nautical charts stored according to the IHO S-63 Data Protection Scheme. Refer to the S63 class for more information on how to handle these types of charts.
It is now possible to add search indexes to datasets reading vector data. This enables fast lookup of features with an attribute whose value match a search string. Refer to the ISearchable interface and the SearchableAttributes properties of the datasets for more information.
The new VerticalClearanceOperator makes it easy to calculate the clearance of a flight route above terrain and obstacles, and e.g. visualize the result as a color-coded 2D map layer.
The new DataSetInfo API makes it possible to retrieve metadata about Carmenta Engine DataSets. It also makes it possible to determine which files in a folder that Carmenta Engine can read, which is useful when implementing "add map" functionality in an application.
The new OgcWfsDataSet makes it possible to retrieve vector data from OGC WFS (Web Feature Service) map servers.
The Tactical Extension now supports MIL-STD-2525C Appendix B, bringing the support for MIL-STD-2525C up to the same level as the MIL-STD-2525B support.
The new ExpressionAttributeVariable uses an attribute expression to calculate its value. It makes it possible to e.g. directly set the TextVisualizer.Text property to an expression like "Name: " + name.
System Requirements Changes
Windows XP, Windows Vista and Ubuntu Linux 10.04 LTS are no longer supported.
The Carmenta Engine .NET API now requires .NET Framework 4.
The Carmenta Engine Java API now requires Java 7.
The QtMapControl and all Qt samples have been upgraded to use Qt 5.
All C++ and .NET samples on Windows are now created using Visual Studio 2010.
Important Notices and Breaking Changes
The Samples Geodata distribution which provides data for the Carmenta Engine sample applications and map configurations has been updated. Please install the new version (available from the Carmenta download page) to ensure that the samples work as intended.
The DataSet property FileIndexPath has been renamed IndexPath, since this folder is now used for both file indexes, raster caches and text search indexes.
The dataset file indexes have changed. The name of an index file is no longer based on the configuration name. As a consequence, the MultiFileDataSet.IndexFileNameQualifer property is no longer needed, and it has been removed. New file indexes will be generated automatically, existing file indexes will be ignored. The feature indexes supported by some datasets have not changed.
The various CellWidth, CellHeight, CellSize and CellSizeRelative properties that were previously available on some DataSetQuery classes have been replaced by a single ResolutionFactor property on the DataSetQuery base class.
The EcwQuery, MrSidQuery and RasterCacheQuery classes have been removed from the API since the change described above made them obsolete.
The UpdateRegion class and View.Update methods that update part of the View, as well as the View.partialUpdateEnabled property, have been removed.
The parameterless SizeChanged and AdjustSize methods on the C++ MapControl class have been removed.
A spelling mistake in the enum value LocationType.OribitArea has been corrected; it is now correctly spelled LocationType.OrbitArea.
The IndirectLineStyleAttributeVariable, IndirectMaterialAttributeVariable and IndirectTerrainVehicleTypeAttributeVariable classes have been removed from the API since they were not used anywhere.
Fixes and Minor Improvements
The documentation for Runtime.Initialize has been improved to make it easier to understand how to handle runtime license keys in deployed systems.
Added missing ErrorEvent.getMessage() method to the Java API.
Fixed a problem with the Android MapControl when rapidly changing the device orientation.
Made it possible to replace the predefined mouse cursors with a custom cursor in the WPF MapControl.
Added a CE prefix to the included third party GDAL and TBB libraries on Linux to avoid conflicts with other packages.
The Python runtime bundled with the Carmenta Engine Python API has been upgraded to Python 3.4.1.
Upgraded RaveGeo libraries on Windows to version 3.1.1.
Errors that occur when loading the JAWT library for Java custom objects are now ignored, since they are usually caused by the library already being loaded.
Made it possible to return null from the ICustomDataSet.query() method in a Java custom dataset.
Improved the robustness of the PolynomialProjection.
Added additional examples to the CatalogQuery documentation.
Fixed a library loading problem that could sometimes occur when instantiating a Catalog on Android.
Fixed a problem loading shared configuration files with relative paths on Linux.
Fixed a problem with duplication of Catalog metadata for CatalogDatasets defined in a file referenced from other .px files in the catalog.
Fixed an issue where a CatalogLoadLayerSet in a .px file would not load any maps.
Fixed a problem in DwgDxfDataSet that could cause very slow visualization of polygons.
Fixed a memory leak in the DwgDxfDataSet.
Fixed a thread safety problem in the DwgDxfDataSet.
Improved the logging when reading DWG and DXF files with incorrect bounds.
Fixed a problem which could cause the GdalDataSet to sometimes select an overview with too low resolution.
Improved performance when using many GdalDataSet instances in the same configuration.
Improved the parsing of georeferencing information in Jpeg2000DataSet.
The MapPackageDataSet now initializes much faster when reading large sets of vector data.
Fixed a problem when reading raster data from a MapPackageDataSet stored in a different Crs than the view.
Improved the handling of empty (null) attributes when reading OGC GeoPackage files with MapPackageDataSet.
Fixed an initialization problem in MapPackageDataSet that could occur when reading OGC GeoPackage vector data not defined in the Wgs84LongLat CRS.
Fixed a problem using a custom SELECT statement in the OracleDataSet.
The RpfDataSet now correctly reads and georeferences maps in the polar zones.
Fixed a problem in S57DataSet that could cause the dataset to generate incorrect geometries.
Fixed a problem that could cause field values to be truncated when saving floating-point feature attributes to a DBF file with the ShapeFileWriter class.
ShapefileDataSet is now more restrictive when logging information about null shapes in the shapefile, to avoid flooding the log.
Fixed a configuration file loading problem when condition properties had been specified using String instances in Carmenta Studio.
It is now possible to serialize and deserialize Geometry instances to OGC Well-Known Text (WKT).
Fixed a problem which could prevent large rasters from being downsampled automatically.
Fixed a problem using the '-' character in the name part of Font.FontName.
Added GroundLayer3D.asynchronous property.
Fixed a problem in the LegendLayer constructor when supplying an existing Legend object.
Improved the robustness of the LineGeometry.LineIntersections method.
Fixed problem using relative paths in RollingFileLogAppender.
Fixed a problem in the View.Crs setter method which sometimes unnecessarily recentered the View to the map projection origin of the new Crs.
Fixed a problem in View.GetDataBounds() which could cause it to sometimes return an incorrect bounding rectangle.
Improved the robustness of some methods that convert strings between different code pages: Instead of throwing an exception, the offending character is now replaced with a question mark.
Reduced tolerance for scale changes when reusing cached data in an OrdinaryLayer with cacheMode = Static.
Fixed a crash that could occur when calculating buffer zones around lines and polygons with very small sizes compared to the buffer.
Fixed a problem in EllipseOperator, which, for a long and narrow ellipse, could fail to generate nodes along a short part of the perimeter.
The IsolineOperator will no longer generate isolines if the number of levels would need to be more than 200, but will instead log a warning.
Fixed a problem in IsolineOperator which, when generating isopolygons, could sometimes fail to generate the polygon with the highest range of values.
Fixed a crash in IsolineOperator when generating isopolygons for a raster that contained only undefined cell values.
IsolineOperator now interprets the undefined raster value literally instead of as the highest representable value, when producing isolines with stopAtUndefined = False.
Corrected the minValue of some isopolygons generated from a Float raster by an IsolineOperator with a defined fromLevel and levelAttributeFormat = Double.
Fixed a bug where all points passed through a PolygonClipOperator if objectTag was the same as outsideClippersTag even if they were inside one of the clipper polygons.
Fixed a polygon clipping issue that could occur with a very narrow but tall map window.
Fixed some problems when clipping a line by a polygon, which could occur if a line node coincided with a polygon corner, or if an end point of the line was on or very near a polygon edge.
Fixed a problem that could occur when cloning a TerrainRouteOperator or related operators.
Fixed visualization of Pending symbol frames when using App-6B visualization of tactical symbols.
The MIL-STD-2525C visualization now supports the fields AD, AE och AF.
The arrow head in the MIL-STD-2525B symbol TACGRP.C2GM.SPL.LNE.AMB now rotates correctly along the line.
TacticalVisualizer is now more robust when rendering line segments of length 0.
The tactical_map.px sample configuration has been updated to use MIL-STD-2525C symbology.
Added a new sample, Tactical Symbol Sample, that uses the Tactical Extension API.
Fixed a problem where OverviewTool could in some circumstances corrupt the rendering of the overview map.
Corrected the behavior of OverviewTool when the user resizes the overview window for a 3D main view.
Fixed a problem using mouse-wheel zoom in an OverviewTool window when the main view is 3D.
Fixed a problem where objects could disappear if they were moved to the north pole using StandardTool.
StandardTool no longer resets the Z coordinate of line nodes when they are edited.
Fixed an issue with StandardTool3D where changing MouseWheelZoomSpeed did not work as intended.
Fixed StandardTouchTool so the map can be panned if you click and drag on a feature that is selectable but not movable.
Fixed built-in tools so trying to disconnect an already disconnected tool does not crash.
The visualizer setting ClipToViewArea now works correctly also when the View is rotated.
ComplexLineStyle now correctly draws the last segment of a LineGeometry with closed = False but which starts and ends at the same point.
Fixed a problem that could cause erroneous line segments to appear when drawing closed line geometries, extending outside the view area, using a dashed or a complex line style.
Fixed a problem which could cause Drawable.DrawArc() to sometimes draw one or two extra line segments to the center point of the arc.
Fixed a problem which could cause symbols to be drawn with an incorrect depth buffer value in DirectX 3D views.
Fixed a rendering problem with Qt 5 and DirectX on some Intel graphics adapters.
Fixed the rendering of 3D symbols that have meshes with texture coordinates but no textures in the DirectX renderer.
Fixed a problem that could cause gaps in the ground mesh generated by GroundLayer3D when the elevation data has very low resolution.
Improved the FullRange color table lookup to work with color tables with integer keys.
Fixed an issue where the default plot symbol in PlotLayer visualization could change into a circle instead of a square.
Fixed a problem rendering very large text labels with the Software renderer.
Improved the bitmap caching of SVG symbols to reduce the blurring that results from scaling the bitmaps.
Fixed some rendering artifacts in ScreenLayer caused by incorrect usage of the depth buffer.
The Send View Area to Carmenta Studio functionality in Carmenta Explorer is now more robust.
When copying objects i Carmenta Studio, the copies now get the original name plus a "_CopyX" suffix instead of the default named derived from the object type.
Fixed a problem saving files containing FontAttributeVariables in Carmenta Studio.
Fixed a problem that could occur when opening files from the recent file list in Carmenta Explorer.
Fixed a problem in the Export to Map Package functionality in Carmenta Explorer that could cause a crash when the px-file contained TileLayer objects.
Opacity can now be changed in 3D views in Carmenta Explorer for surface layers of a GroundLayer3D and layers in a LayerRasterizeOperator.
Various minor improvements to Carmenta Studio.
Fixed an inaccuracy in the documentation on how to use custom fonts on Android.
The Vertical Profile sample has been updated to also demonstrate how to use the Vertical Clearance functionality.
Various clarifications in the Basic Map Application tutorials for .NET and Java.
Many corrections, additions and other improvements to the documentation.
5.6 Release Notes
New Functionality and Major Improvements
PlotLayer is a new type of layer designed specifically to render large amounts of simple point object like radar plots. While the plot visualization is somewhat limited, the performance compared to maintaining corresponding features in a MemoryDataSet can be better by several orders of magnitude.
The new TerrainRouteOperator can calculate the best route for a terrain vehicle, based on the vehicle type and on the soil strength, roughness, and slope of the terrain. The route can use roads when possible and can avoid forbidden areas like minefields and enemy viewsheds.
The S57DataSet now supports reading S-57 AML (Additional Military Layers) data, versions 2.1 and 3.0.
The Tactical Extension now supports symbols from MIL-STD-2525C, appendix A, D and E.
The MapPackageDataSet has been extended to read databases formatted according to the new OGC GeoPackage 1.0 (12-128r10) specification.
The new PostgreSqlDataSet allows you to read spatial data from PostGIS/PostgreSQL databases.
New methods on the OgcWmsLayer makes it easier to perform GetFeatureInfo requests against the remote OGC WMS service.
The TileLayer component now loads tiles faster than before in many cases, as it no longer loads tile data for layers that are not visible at the current view scale.
TileLayer now fully respects the scale limits of LevelOfDetailOperator, OwcWmsLayer, OgcWmtsLayer, S57DataSet, CmrgDataSet and RpfDataSet by automatically reloading tiles/layers when needed. This makes the level-of-detail functionality in these components work as expected; in the same way as without a TileLayer.
The IsolineOperator has a new property outputType which can be used to make it generate the polygons between the isolines instead of just the lines. This option allows visualizations with polygon fill patterns, and can make map generalization easier.
It is now much easier to set up color ramps for visualizing raster data. In previous versions you had to generate a complete color table with all intermediate values. Now it is enough to only include the start and end colors, and configure RasterVisualizer to automatically do a linear interpolation of all values in between. In addition to this, RasterVisualizer can also dynamically adjust the color table to the range of raster values actually occurring in the raster. The result is that the full color range is always used, maximizing the contrast when the raster is rendered.
The interoperability of the Catalog Extension CS/W functionality has been improved - it is now possible to connect to many more third-party CS/W services.
The LineOfSightOperator has a new property undefinedElevationInterpretation that lets you specify that if a line of sight encounters a terrain cell with undefined elevation, then the output raster shall, in this terrain cell and all beyond it, contain a special value that indicates uncertainty.
The SDK has been extended with several new sample applications. There are now samples that demonstrate how to access the Line of Sight and Vertical Profile functionality, as well as an application which shows you how to handle large numbers of dynamic objects efficiently. The Java samples have also been significantly extended: A new, Java based "Basic Map Application" has been added, as well as Java implementations of all the custom object samples.
Fixes and Minor Improvements
Fixed erroneous depth values when rendering billboard symbols in 3D with DirectX.
Improved DirectX performance when rendering 2D vector graphics.
The QtMapControl class now registers a private custom event ID instead of always using event ID 1000.
The QtMapControl automatically enables mouse tracking on all parent controls.
Fixed an UnsatisfiedLinkError exception when using the IndirectColorAttributeVariable and KeyedColorAttributeVariable classes from the Java API on Android.
Improved the "Export to map package" functionality in Carmenta Explorer to enable export of larger areas.
Added support for controlling named styles on views and layers in Carmenta Explorer.
Improved the presentation of selected features in Carmenta Explorer.
Fixed flickering when resizing the window in the HelloWorldJava sample with some window managers on Linux.
The libraryName property of the custom object proxy classes can now be specified with a Path object in Carmenta Studio.
Fixed a number of broken/missing list editors in Carmenta Studio.
Removing an additional language for a configuration in Carmenta Studio now marks the file as modified.
OpenGL and Software are now automatically used instead of DirectX and GDI on Linux and Android.
Fixed a rare problem where Carmenta Studio could not find the Java JRE.
Fixed a problem with missing named styles if the same CatalogMap was loaded multiple times.
LayerSet.MoveLayer() now works for CatalogLayers which are direct children of a CatalogLoadLayerSet or loaded from a CatalogView service in the pre-5.5 format.
Several fixes for the methods Crs.AngleFromAzimuth() and Crs.AzimuthFromAngle(): The result was wrong near the interrupted meridian of a cylindric projection like Mercator or LongLat (usually the 180° meridian). NaN (not a number) could be returned at a pole, which could cause problems. The accuracy of these methods has also been improved. The result used to be in the interval from -90° to 270°, but is now normalized to the interval from 0° to 360°.
Added support for reading and writing Well-Known Text syntax for the predefined Crs.Wgs84MercatorWeb (EPSG code: 3857, EPSG name: "WGS 84 / Pseudo-Mercator").
Coordinate Reference Systems: Upgraded to support EPSG version 8.4.
Improved support for the ESRI-specific names of some Geodetic Datums.
Fixed a problem when a point feature, not stored in LongLat, is reprojected to an orthographic projection.
Corrected format of some date and time database types with negative time zone information.
Fixed an issue where RasterCacheDataset would access data files even if the cache was already created and VerifyIndexFiles was set to False.
Fixed a bug in MapPackageDataSet that could read data from the wrong zoom level at a very zoomed-out scale.
Fixed a problem with ImageDataSet reading a striped TIFF file: if the last stripe had fewer rows than the others, it would not be read.
The Android version of Carmenta Engine is now built with the Android Native Development Toolkit revision 9c.
The Python interface now uses Python version 3.4 on Linux.
In previous versions, tile layers with bitmap caching to disk only used half the specified disk size; this has now been fixed so it uses the full specified size.
Polygon clipping and related functions have been improved internally. The PolygonClipOperator, BufferZoneOperator and GeometryClipper classes are more robust and slightly faster than before. ConnectPolygonOperator is significantly faster than before in most cases.
Added new property Drawable.PixelSize, to make it possible to render map images for a different DPI than the screen where the application is running.
Added new overload LegendItem.GetImage(), to make it possible to render legend images for a different DPI than the screen where the application is running.
Improved Carmenta Engine asset file copying for Android.
Added option to control the compression level when saving PNG images.
Fixed a crash that could occur if a layer was moved between two different TileLayers.
Added SizeChanged() with width and height parameters to the C++ MapControl class. Added AdjustSize() with width and height parameters to the Drawable class.
Fixed the Export to Map Package functionality in Carmenta Explorer so that areas outside the exported area are made transparent when image data is exported.
The display name and description properties for OgcWmsLayer, OgcWmtsLayer and their child layers are now set automatically from the service capabilities document.
Styles specified in OgcWmsLayer.ExplicitStyles should now work as documented.
Fixed an exception that could sometimes be thrown when Carmenta Engine automatically tried to merge rasters of the same resolution, if they were stored in a cylindrical projection like LongLat or Mercator with rasters on both sides of the dateline. This could occur for low-resolution rasters displayed in a small scale (like in a world map).
Metadata URLs for layers from an OGC WMS service are now read from the service capabilities document and can be retrieved through the OgcWmsLayer.IsoMetadataDocument property.
Removed irrelevant warnings generated by RasterizeOperator.
Added TileLayer.autoDownsample property which can be used to turn off automatic downsampling of rasters.
Fixed a bug in min/max scale calculations for sublayers to OgcWmsLayer.
Fixed a problem with RectangleSet.isCovered when using a RectangleSet as parameter.
Fixed a problem with some unnecessary CPU load caused by the Catalog.MonitorChanges function.
Fixed a problem parsing LoadLayerSet instances from px files; previously some properties like displayName and description were never set.
Fixed a rare case where transparent GIFs saved using Drawable.Save() would become corrupt.
Added new property RasterizeOperator.Background.
Improved the automatic distance between meridians for a GridGenerator creating a graticule in the polar regions.
Fixed a crash in VerticalProfileOperator that could sometimes occur when the horizontal extent of the profile did not intersect the extent of the profile route.
Fixed Operator.GetRasterFeature so that rasters are projected to the requested reference system if required.
Fixed a crash when a ConnectLineOperator was reading input features directly from a PolygonClipOperator.
Fixed TargetLineOfSightOperator, which in some cases interpreted an undefined elevation as its nominal value, instead of as zero.
Improved the performance of UtmGridGenerator in the irregular grid zones for Svalbard and southwest Norway, for map scales more detailed than 1:1000.
Made it possible to use a TerrainSpeedOperator, a TerrainAccessOperator or a TerrainDeployabilityOperator in a layer with CacheMode = Dynamic. Also made it possible to use these operators without any VehicleInput that specifies which areas to analyze, in which case the entire view area will be analyzed.
Improved TacticalVisualizer so that transparency is applied to all elements in transparent point symbols.
Improved the visualization that TacticalVisualizer uses for echelon and task force indicators to more closely match published recommendations.
Fixed visualization of Assumed Friend and Suspect symbol frames when using App6B visualization of tactical symbols.
Improved TacticalVisualizer so that point symbols using different scales can be cached as bitmaps.
Fixed a problem in TacticalVisualizer that could cause an exception if a polygon was marked as read-only.
Fixed a problem in TacticalVisualizer when calculating the rotation of direction indicators or rotated unframed symbols in some reference systems.
Improved TacticalVisualizer so that the color of text fields around point symbols can be overridden.
Fixed CreateTouchTool so the SIDC code is set correctly when military symbols are created.
Fixed a problem in OverviewTool when the main window was panned completely outside the boundary of its own coordinate reference system.
Improved OverviewTool with MaintainScaleRatio = True, by ensuring that the automatic zoom-out for the overview window will stop as soon as the overview shows the whole world.
Fixed a problem in OverviewTool when the main window showed more than half the Earth, which could cause the overview window to apply its FillColor to the outside of its rectangular area, instead of the inside.
OverviewTool now shows more smoothly curved edges for the rectangular area in the overview, when the overview and the main window use different coordinate reference systems.
Fixed StandardTool3D so it restores the internal state correctly when the mouse button is pressed and released while CTRL is held down.
Fixed a discoloration problem when rendering 1-bit raster symbols with antialias, in OpenGL and DirectX.
Fixed rendering of 3D models where the model textures are larger than the maximum texture size supported by the OpenGL or DirectX graphics driver.
Fixed some rendering problems and also potential memory allocation issues when rendering polygons and lines with some line styles at very large scales.
A LineVisualizer is now always applied to polygon holes, even when used with ComplexLineStyle or LayeredLineStyle. Likewise, A CompositeLineVisualizer is also applied to polygon holes.
Fixed a text rendering bug on some AMD/ATI graphics adapters.
Fixed a problem rendering polygons many times larger than the view.
Fixed a problem rendering rasters larger than the maximum texture size supported by the OpenGL and DirectX drivers.
Fixed a bug in ComplexLineStyle which could cause some lines to not to be rendered.
Fixed a bug that could cause outlines of polygons clipped by a TileLayer to be rendered multiple times.
Improved performance when using a fully transparent padding to add separation between labels in a LabelOrganizingLayer.
Fixed a problem in TacticalVisualizer that could result in unnecessary warnings in the log.
Improved performance of symbols using azimuth rotation in a layer that caches the presentation, for example a TileLayer or OrdinaryLayer with OrdinaryLayer.cacheMode = Dynamic.
Some performance improvements in View.WhatsIn() and View.WhatsAt() calls, particularly with OrdinaryLayer with OrdinaryLayer.cacheMode = Dynamic.
Fixed a problem during the Java API initialization if the Java AWT library already has been loaded.
Many corrections, additions and other improvements to the Carmenta Engine CHM and Javadoc documentation.
5.5.1 Release Notes
Important Notices and Breaking Changes
The property StandardTouchTool.DefaultTouchRadius has been replaced with two new properties, TouchRadius and TouchRadiusScaleFactor. The new properties allow an application to adjust the size of touch points before they are handled by the StandardTouchTool.
Fixes and Minor Improvements
Fixed incorrect equality test for collection types in Python API.
Fixed Carmenta Explorer so that map packages can be exported using a lower JPEG quality setting.
The printer DPI field in the Carmenta Explorer Options dialog is now enabled when bitmap printing is selected.
Fixed a problem where Carmenta Studio sometimes incorrectly changed the type of an attribute variable key to Int.
Fixed an issue where Carmenta Studio failed to launch if help file was missing.
Fixed a problem with cloning of CatalogMap instances.
Changed interpretation of user property 'CatalogLayer' in Catalog Extension; string values "False", "false" and "" are now treated as if the user property is not set.
Catalog.MonitorChanges() now correctly detects when new languages are added to or removed from an existing .px file, and updates the Catalog instance accordingly.
Fixed problem in GridFileDatumShift mixing up path to grid file with its own object name.
Added support for the ECW image format on Android.
Fixed broken reconnect function in OracleDataSet.
Fixed a problem in OgrDataSet, causing an exception to be thrown when reading Shapefile data.
Improved WcsDataSet interoperability with newer versions of Carmenta Server.
Fixed a problem in RpfDataSet that caused a crash if it was asked for the bounds polygons of all data files.
Some attributes of the bounds polygons returned from a RpfDataSet were not correctly set.
Fixed an incorrect path in the Catalog Extension sample on Linux.
Minor update of the HelloWorld-sample for Android.
Various minor documentation improvements.
Double values can now be converted to 64 bit integers in an attribute expression; previously the values were truncated to 32 bits.
Fixed a memory allocation problem that could occur when rendering very large polygons with OpenGL or DirectX.
The moveOnly parameter to MemoryDataSet.RefreshFeaturePresentation() is now ignored in 3D.
Fixed a problem in Layer.clone(); a SplitOperator could be duplicated if the layer contained several references to it.
Fixed a problem with custom visualizers not being applied to raster features.
Fixed a problem in the Software renderer with lines that could appear between raster data tiles, if the raster visualization used semi-transparency and the nearest-neighbor filter, and the View used the same Crs as the raster data.
Fixed a problem specifying dataset path properties with Windows UNC paths like '\\server\share\...'.
Operators that automatically merge their input rasters can now merge rasters of different numeric formats (instead of throwing an exception).
Fixed a problem with automatic merging of rasters tagged as continuous and lacking a specified undefined value; the problem caused originally well-defined raster cells to become undefined in the merged raster.
Fixed incorrect handling of undefined values for some raster types in RasterMergeOperator.
Fixed a rare crash when a WPF MapControl was used with a StandardTool with QuickUpdateEnabled = True.
Fixed a multi-threading problem when converting strings between different code pages on Linux.
Fixed an OpenGL rendering problem when an OverviewTool was used for a 3D main view, and the 3D camera sector was rotated in the overview.
Fixed a rendering problem in OpenGL and DirectX, where individual characters of a text label could be offset vertically one pixel from the others.
Fixed a rendering problem in OpenGL and DirectX, where raster symbols sometimes could get slightly distorted.
Fixed a rendering problem in OpenGL and DirectX, where the selection visualization of some tactical symbols from MIL-STD-2525B Appendix B could get slightly distorted at large scales (zoomed in).
Fixed a text rendering problem with the GDI renderer with TextVisualizer.followLine = True.
An ExternalDrawable using OpenGL now properly reloads transformation matrices in each frame.
Fixed a problem with setting a new view in the Java MapControl.
5.5 Release Notes
New Functionality and Major Improvements
The way Catalog Extension maps are defined has been greatly simplified. The Catalog Extension-specific properties are now defined inside the map configuration file, and some properties that were previously specific to the Catalog Extension classes have been moved to the core objects.
It is now much easier to connect to raster data sources, since Carmenta Engine will automatically connect, merge and resample the raster data when it is needed. As a result of this change, the DataSet.ConnectRasters property has been removed.
It is now much easier to create basic 3D configurations. The new GroundLayer3D class greatly simplifies the common use case of draping 2D map layers on top of a mesh generated from elevation data.
The new SlopeOperator can calculate and visualize slope and aspect from elevation data.
The UtmGridGenerator class now automatically creates a suitable visualization for the MGRS and UTM grids it generates. The visual appearance of the grids has also been improved.
Carmenta Studio now supports editing properties such as Layer.DisplayName in multiple languages. A new API makes it easy to retrieve the localized strings in the application.
Carmenta Engine for Linux is now available in a 64-bit version.
Added 3D support in the DirectX renderer, which e.g. makes it possible to display 3D map configurations in the WPF MapControl.
Data sets that can read multiple files no longer require all files to be stored in the same coordinate reference system.
The CmrgDataSet and RpfDataSet data sets can now save index files on disk to improve startup times. They now also take advantage of the global cache mechanism used by other datasets.
The OracleDataSet now requests data using the native Oracle SDO_GEOMETRY format instead of using WKB formatting, which greatly improves performance.
Custom native visualizers and symbols can now be written in Java. This can be used for doing custom rendering with OpenGL, using a third-party library such as JOGL.
Built-in support for common touchscreen interactions. The new MapControl.TouchTool property allows you to attach an object which controls what happens when the user touches the display. The StandardTouchTool class provides support for navigating and editing objects using multi-touch gestures, while the CreateTouchToool can be used to let your users create new objects.
Carmenta Engine Views can now easily be adapted for use on displays with very high pixel density using the new PixelSizeAdjustments class.
Important Notices and Breaking Changes
The interface to the CatalogMap and CatalogMetadata classes have been simplified. The concept of a "virtual layer hierarchy" (and all associated methods) has been removed. Instead, the CatalogMap class now inherits from LayerSet, and the layer hierarchy is represented by CatalogLayer child layers. These child layers can be used as any other Carmenta Engine layers, and all functionality that was removed from the CatalogMap and CatalogMetadata classes is available directly through these child layers.
The separate CatalogView class has been removed, along with the corresponding methods in the Catalog class to load catalog views. Applications can now differentiate between catalog views and catalog maps using the isView property of the CatalogMetadata class.
Named styles support was previously available for OgcWmsLayer, OgcWmtsLayer and Catalog extension objects, all three with slightly different interfaces. This support has now been moved to the core View and Layer classes, and removed from the OgcWmsLayer, OgcWmtsLayer and Catalog Extension classes.
Carmenta Engine no longer changes the current directory of the process while a map configuration is being loaded. Custom objects that previously assumed that the current directory during InitNew() was the same as the directory with the .px file containing the custom object, for example to load resources using relative paths, must now instead use the ConfigurationPath property of the context object passed to InitNew() to find the resources.
The signature of all StandardTool and CreateTool events have changed. The sender is now an EngineObject and event handlers that used the sender parameter must now cast it to the correct tool type.
The WPF MapControl now requires .NET Framework version 4 or later. It is no longer possible to use it with .NET Framework version 3.5 Service Pack 1.
Fixes and Minor Improvements
Raster data sets have a new RasterFilter property that makes it much easier to change the filter that will be used to resample raster data.
Added workaround for a bug in the CLR for .NET versions 3.5 and older, that could make the process unstable after an exception was thrown from DataSet.Initialize().
Asynchronous TileLayers now initialize child OgcWmsLayers on their background threads instead of on the UI thread.
Fixed a problem in TileLayer that could cause a crash if the view area was outside the bounds of the Crs.
Improved the precision of LineVisualizer.OrthogonalOffset when used inside a TileLayer.
Fixed a problem in the dynamic cache mode of OrdinaryLayer that could cause cached visualizations to be drawn in the wrong location.
Fixed a problem with selection of features in an OrdinaryLayer using the dynamic cache mode.
Changed DataSet.GetFeature() so datasets that do not support retrieving features by ID return null instead of throwing an exception.
Exceptions thrown when loading a map configuration now include information about which file caused the error.
Upgraded the third party Teigha libraries to version 3.9 to allow the DwgDxfDataSet to read files generated by AutoCAD 2013.
Fixed LineGeometry.Length so that it returns zero when the line does not contain any points.
Configuration.Save() now automatically generates names for all unnamed objects that must have a name in the px file.
Fixed a problem in Carmenta Studio that sometimes prevented objects with a comment from being copied and pasted correctly.
Fixed the undo functionality in Carmenta Studio so that the Public flag is not modified incorrectly.
Improved RasterMergeOperator so it handles undefined values correctly.
Made SvgSymbol more compatible with files generated by the third party SVG editor Inkscape.
Improved EcwDataSet so that four channel images are interpreted as RGB images (the alpha channel is discarded).
Improved memory usage when a RasterCacheDataSet populates the cache.
Improved DtedDataSet so DTED files with incorrect bounds can be read.
Improved OracleDataSet to handle invalid geometries.
Fixed a problem with file permissions on index files generated on Linux.
Fixed a problem with some map projections when handling clipped polygons touching the north pole or the south pole.
The accuracy of bounds calculations for CMRG files has been slightly improved.
A problem where CmrgDataSet in some cases would return rasters that didn't fully cover the view area has been fixed.
Fixed RpfDataSet so that data crossing the international date line is read correctly.
Added support for floating point rasters in ImageDataSet and OgcWcsDataSet.
ImageDataSet and OgcWcsDataSet now handle undefined values in the raster data correctly.
Improved EcwDataSet to minimize visual artifacts when the view is composed of images from more than one file.
Fixed a memory leak in the Jpeg2000DataSet.
Changed the default value of mininumTileWidth and minimumTileHeight of GdalDataSet from 0 to 128.
Fixed an exception in MifDataSet.GetDataCoverage().
Fixed the MifDataSet index file generation so the Crs information is written correctly.
Improved the VpfDataSet so that tiles with undefined bounds are ignored.
Removed the RaveGeoDataSet and associated libraries from all Linux versions of Carmenta Engine.
Upgraded RaveGeo libraries on Windows to version 3.1.0.
Implemented the RaveGeoDataSet.GetFeature() and RaveGeoDataSet.GetFeatures() methods.
RasterCacheDataSet now caches the requested area exactly. In previous versions the area was extended east and north to create equal-sized tiles, which could sometimes generate black or white areas at the edges.
Fixed a problem with the ShapeWriter class writing the .prj file twice.
The ShapeWriter class now skips numeric attribute values that do not fit into the specified field widths in the .dbf file.
Fixed a problem in GeometryConversionOperator that prevented generated meshes from being cached correctly in an OrdinaryLayer.
Fixed a problem in LayerRasterizeOperator that could cause a SplitOperator under one of its inputs to behave incorrectly.
Fixed RasterizeOperator so it works in Linux.
Improved the handling of invalid input geometries in VerticalProfileOperator.
Fixed a problem with TargetLineOfSightOperator when a target was straight above or directly below the observer.
Improved a problem with LineOfSightOperator when the observer is in a location where only low resolution data, like DTED level 0, is available.
When line of sight is computed from pyramidal elevation overviews (see LineOfSightOperator.firstResolutionChange), the operator will automatically re-sample incoming elevation rasters, if the elevation dataset does not provide overviews or provides them with an unsuitable overviewDivisionFactor.
The Name property of UtmGridGenerator and GeorefGridGenerator is now initialized correctly when a map configuration is loaded.
Improved how VerticalProfileOperator uses low resolution elevation data.
Improved VerticalProfileOperator with long maxDistance to prevent spikes in the output at route waypoints without course change.
Improved the precision of the grid generated by a UtmGridGenerator, in some irregular grid zones.
Improved the performance of a UtmGridGenerator when zoomed in.
Fixed a problem with PolygonClipOperator when clipping meshes.
Fixed a problem with ElevationOperator when the view area intersects the international date line.
Improved OgcWmsLayer so that a connection timeout is reported faster.
OgcWmtsLayer can now be used to connect to Esri ArcGIS Server WMTS services.
Added property OgcWmtsLayer.Encoding, which can force the layer to use a specific encoding if the automatic detection fails.
Fixed problems in OgcWmsLayer and OgcWmtsLayer that could cause these classes to throw exceptions even when the throwExceptions property was set to False.
Fixed a problem in OgcWmtsLayer that could cause it to request images in the wrong Crs.
Fixed how OgcWmsLayer interprets ScaleHint values in a GetCapabilities response.
Improved LabelOrganizingLayer so that labels are correctly organized also in rotated views.
Fixed a problem in LabelOranizingLayer that caused a crash when organizing empty labels.
Fixed TacticalVisualizer so that direction indicators are rotated correctly in a rotated View.
Fixed a problem in TacticalVisualizer that prevented editing of polylines in an OrdinaryLayer with CacheMode.Dynamic.
Fixed TacticalVisualizer so selection rectangles around point symbols are centered around the symbols.
Fixed a threading problem when using a custom visualizer or custom symbol in Carmenta Server.
Improved the alignment of texts to screen pixels when View.Rotation is close to zero.
Fixed PointVisualizer so that setting the scale to zero removes the visualization.
Fixed problem with TextVisualizer.followLine combined with the GDI renderer.
Fixed problem with how the Software renderer fills polygons.
Fixed the DirectX renderer so line widths are applied correctly when drawing arcs.
Fixed a problem when loading 1-bit transparent GIFs that could invert which pixels were transparent.
Fixed an issue that could cause corrupt textures to be displayed when using a BitmapLayer together with the OpenGL renderer.
Fixed a problem rendering very large rasters with undefined values with the OpenGL renderer.
Improved how height rasters with undefined values are converted into 3D meshes.
Improved how the start position in a 3D view is calculated when it has been set to CenterOfData or ExtentOfData.
Reduced memory usage in a 3D view.
Improved StandardTool so that rectangle selection works with the ExternalDrawable component.
Fixed a problem in StandardTool3D that prevented the mouse wheel zoom from working if the view had not been panned first.
Improved Qt samples so they work with Qt 5.
Various minor improvements and bug fixes to Carmenta Explorer.
Various minor improvements and bug fixes to Carmenta Studio.
Many corrections, additions and other improvements to the Carmenta Engine CHM and Javadoc documentation.
5.4 Release Notes
New Functionality and Major Improvements
Starting with this release, Carmenta Engine is available on Android. For more information, refer to the separate document Introducing Carmenta Engine for Android.
The new Map Package Extension makes it possible to package a mix of images, raster data (for example DEM models) and vector data in a single file. Pregenerated spatial indexes ensure very efficient access to the data. This is especially important for mobile devices where it is essential to minimize the amount of processing necessary to read and display data, but map packages work equally well in desktop and server installations. Since they are single, self-contained files, map packages are easy to distribute and install. Packages can be generated from regular Carmenta Engine map configuration files using Carmenta Explorer, and are accessed using the new MapPackageDataSet class.
Added a new OrdinaryLayer.cacheMode property to support efficient, hardware accelerated caching of dynamic features stored in a MemoryDataSet. This feature can drastically improve performance for map layers which contain large numbers of moving objects. Applications can notify Carmenta Engine about changes to the moving objects using the new MemoryDataSet.refreshFeaturePresentation method.
Major improvements to the visualization of raster data using the hardware accelerated DirectX and OpenGL renderers resulting in significantly sharper maps.
Fixes and Minor Improvements
Added Windows 8 as a supported operating system.
Added support for spherical ellipsoids which are often used for meteorology data.
The new View.renderingHint property can be used to improve the rendering of texts and symbols in a rotated (e.g "heads-up") View.
Improved the performance of the .NET API, especially for AttributeSet methods.
Added batch scripts which make it easy to create XCOPY installations on Windows.
Fixed a problem in TileLayer that caused a delay between when a tile was loaded and when it was rendered after a fast zoom in operation.
Fixed a problem in TileLayer that could cause child layers with enabledDuringQuickUpdates set to False to be rendered incorrectly.
Fixed a crash that could occur when drawing cached custom symbols in a 3D view.
Added all cursors used by the built-in tools to the Carmenta Engine SDK installation.
Added a new CustomDataSetContext.id property that returns the id of the associated CustomDataSetProxy.
Added an IMinimizeGarbageCollection interface that .NET and Java custom object implementations can implement to automatically clean up temporary object instances.
Improved .NET and Java APIs to allow the ICustomDataSet.query and CustomDataSetAdapter.onQuery methods to return null when the result is empty.
Fixed validation of reference parameters in the Java API so a NullPointerException is thrown if a required argument is missing.
Fixed a small memory leak in the Java API.
Fixed a problem during the Java API initialization that could prevent the jawt library from being loaded.
Added missing MapControl.setCustomCursor overload to the Java API.
Fixed the Java MapControl so it propagates the correct key and mouse button values to custom tool implementations.
Added getValue and fromValue methods to the Java API enum types to make it possible to convert between an enum value and its integer representation.
Fixed a problem in the Java API MapControl that prevented the update timer from being restarted.
Fixed the Java version of the StandardTool class so it can be used as a base class.
Fixed the Feature constructor in the Python API so that the feature id is set correctly.
Fixed a bug in the WPF MapControl to prevent an exception that could occur in some situations when the back buffer had been lost.
Carmenta Explorer now opens the Carmenta Studio help file instead of the Carmenta Engine SDK help file.
Carmenta Explorer can now open views and maps using Catalog Extension.
Fixed Carmenta Explorer so the Maximum frames per second setting has effect.
Modified the Carmenta Studio launcher so it works correctly in a Java 7 environment.
Fixed a problem in Carmenta Studio that prevented some edit operations from marking the configuration file as having been modified.
Added the Carmenta Studio Documentation to the Linux application menus.
Added a button that opens a folder selection dialog to several path properties in Carmenta Studio.
Fixed a problem in Carmenta Studio that prevented configuration files older than version 5.3 and using the undefinedValue property from being loaded.
Fixed the color ramp generation in Carmenta Studio so start values between zero and one are not rounded to zero.
Fixed the migration of the Carmenta Engine 4 p-files in Carmenta Studio so the MercatorProjection.shape property is migrated correctly.
Fixed Carmenta Studio so it warns when a configuration uses objects not included in the license.
Modified the tactical_map.px sample so it works without the JPEG 2000 Extension.
Modified the 3D sample application to prevent an exception when the user tries to create or track an object outside the area that is covered by data.
Added missing map configuration to the custom tool sample application.
Added support for EPSG version 8.2.
Fixed the Crs.fromWellKnownText and Crs.toWellKnownText methods so they can read and write a US Stereographic projection.
Fixed Crs.toWellKnownText to include EPSG codes for the Crs, geodetic datum and GeogCS component.
Fixed the Crs.fromAuthorityAndCode method so the Crs.datumShiftChoice property is set correctly on the returned Crs instance.
Fixed S57DataSet.featureIndexPath so it is interpreted relative the containing .px file and not the current directory.
Fixed a problem in Jpeg2000DataSet that could cause small gaps in a 3D view.
Fixed a problem in Jpeg2000DataSet so the crsSource and crs properties are initialized correctly.
Fixed a problem in GdalDataSet that could cause an error when reading data, not using overviews, in a very low resolution.
Upgraded RaveGeo libraries to version 3.0.4.
Fixed a problem in ImageDataSet that caused the getValueAt and getValuesAt methods to return incorrect values.
Improved the MapControl update timer so it handles unexpected changes to the system clock.
Fixed a rendering problem when using a BitmapLayer and the Software renderer.
Fixed the View.selectionChanged and MapControl.selectionChanged events so they only fire when the set of selected features is changed.
Fixed a problem that could make Carmenta Engine hang when a bitmap cached SvgSymbol was drawn and SymbolVisualizer.scale was set to zero.
Made it possible to create map configurations using the CM93RasterDataSet and CM93VectorDataSet using the 64-bit Carmenta Engine SDK and Carmenta Studio installations (they are still not supported at runtime in a 64-bit process).
Improved the DirectX renderer so it delays initializing DirectX until something is actually rendered.
Fixed a problem in the DirectX renderer that could cause an initialization failure on Windows XP.
Fixed a problem in View.clone that could make unnecessary copies of objects behind a SplitOperator.
Fixed Carmenta Studio so it can open a .px file where a Crs.authority is the empty string.
Improved the Legend layout for a long or line-broken caption, and line-broken item descriptions.
Fixed the implementation of Point.rotate in the C++, Java and Python APIs so it matches the documentation.
Fixed occasional problems in ReadOperator when view area crosses the dateline.
Fixed a problem in all grid generators so they can be used in a TileLayer.
Fixed a problem in ShadeOperator that made the result look too dark when the sun was in certain positions.
Fixed TacticalVisualizer so a direction indicator can be drawn with a halo.
Fixed TacticalVisualizer so symbol parts and halos can be drawn with transparent colors.
Fixed issue with tactical symbol for moving convoy, when zoomed out.
Fixed a number of small errors in the MIL-STD-2525B metadata.
Removed MIL-STD-2525B specific properties from the App6BAttributes, App6BParameters, App6CDraft1Attributes and App6CDraft1Attribute classes in Carmenta Studio.
Fixed TacticalVisualizer so polygon holes are not rendered for MIL-STD-2525B Appendix B symbols.
Fixed a problem in Configuration.save that caused empty string properties from being saved correctly.
Changed Configuration.save so it writes the bounds property of datasets only if it was explicity set.
Fixed a problem in Carmenta Studio so map configurations containing LevelOfDetail objects and created by Configuration.save can be loaded and edited.
Fixed MultiFileDataSet so the indexFileNameQualifier property is not serialized by Configuration.save.
Improved StandardTool3D so you can move the camera even when there is no ground visible.
Fixed how the OverviewTool works when the overview map is rotated.
Fixed the initialization of the SvgSymbol.name property for all built-in SVG symbols.
Fixed a problem in the PresentationObject.hit method that could make it fail to detect hits for sub objects generated by a PointVisualizerSet.
Fixed a problem in the DirectX renderer that caused it to render 1-bit rasters with palettes incorrectly.
Fixed a problem in DashedLineStyle that could cause a crash if the CRS of the view did not have meter as its length unit.
Improved LabelOrganizingLayer.removeDuplicates so single symbols generated from a symbol font are not considered as duplicates.
Many minor optimizations throughout Carmenta Engine.
Many corrections, additions and other improvements to the Carmenta Engine SDK documentation.
5.3.1 Release Notes
Fixes and Minor Improvements
Fixed a problem in TileLayer3D so ground stays visible while a user pans or zooms the view.
Fixed a problem in TileLayer3D where the last loaded tile was not always being rendered.
Changing the View3D camera angle now fires the View.AreaChanged event.
Added missing hashCode() method to several types in the Java API.
Fixed the dispose() method in the Java API so it can be called more than once without problems.
Fixed a problem in the Java API Guard class so explicitly disposing it does not cause a hang on Windows XP.
Fixed a problem in the Java API where methods returning java.lang.Double instances could cause the JVM to crash.
Improved performance throughout the Java API.
Fixed the WPF MapControl so the view scale can be set before the control is displayed.
Fixed a problem reprojecting the view rectangle between some CRSs when one of the poles were visible in the view, which could cause datasets to exclude features that should have been visible in the view.
Fixed CM93RasterDataSet so it can display a low resolution background map in areas without high resolution data.
Added option to make the CM93RasterDataSet use the nominal scale when it reads data.
Added option to CM93RasterDataSet to enable or disable supplementary data sections in the CM93 database.
The DwgDxfDataSet now positions hatch objects correctly.
Fixed a problem in the ShapefileDataSet and ShapefileWriter so that the generated files can be opened in ArcMap.
Fixed a case where the ShapefileDataSet could generate an end-of-file exception during a whatsAt() call.
Fixed error handling in ShapefileDataSet when a truncated DBF file was encountered.
Fixed a problem in the VpfDataSet index file generation that could make the dataset skip some polygon features during a query. If you have had this problem, you will need to remove existing feature index files for this fix to take effect.
VpfDataSet can now read untiled coverages in otherwise tiled libraries, like the World Vector Shoreline Gazette coverage.
Improved validation of geometries in VpfDataSet. It now recognizes some more corrupt polygon geometries and skips them, instead of throwing an exception.
Improved VpfDataSet.GetDataCoverage() so the result is more exact.
Fixed a problem reading some VPF tables with null-terminated string fields.
Added option to specify a timeout value for SqlServerDataSet.
Carmenta Engine will now fire the Runtime.StatusChanged event while index files are being verified as well as when they are being generated.
Fixed a problem when displaying very large or very small floating point values.
Corrected an error in Configuration.Save() that could cause references to shared resource objects to be removed.
Improved the SvgSymbol SVG parser so it can handle some uncommon, but valid, SVG constructs.
Fixed LineThinningOpearator and TileLayer.autoThin so lines with two or fewer points are ignored.
Fixed TileLayer so conditions on child layers are taken into consideration and can be used to turn a layer on or off.
Improved the license system on Windows so Carmenta Engine can be initialized if the user has a read only profile.
Fixed a problem in StandardTool so the mouse pointer is released at the end of an edit operation.
Fixed QtMapControl so the correct mouse button state is passed on to the event handlers.
Fixed OgcWmsLayer so it does not use deprecated parameter names when communicating with 1.1.1 servers.
Improved OgcWmsLayer so it can work around some common server misconfiguration errors.
Improved the performance when a View is updated after several features have been deselected.
Fixed a possible crash if a PointVisualizer was applied to a polygon feature with invalid geometry.
Fixed a problem when nesting a BitmapLayer inside another BitmapLayer.
Fixed Catalog Extension and OgcWmsLayer so that a remote map gets the correct recommended crs.
Fixed a problem in GreatCircleLineOperator that could make a line disappear if the end points were outside the view area.
Fixed a problem in LevelOfDetailOperator that could cause low resolution data to not be clipped where high resolution data was available.
Fixed a problem in RectangleClipOperator so that float rasters are clipped correctly when RectangleClipOperator.realignRasters is True.
Fixed a problem in TileLayer that could make small line features that start and end in the same position disappear if auto thinning was enabled.
Fixed LineOfSightOperator so an observer can be located where no elevation data is available.
Improved TacticalVisualizer so point symbols from MIL-STD-2525B Appendix B can be displayed in a 3D view.
Improved how StandardTool3D behaves when an interaction moves into or out of an area with data.
Fixed a problem in View.WhatsAt() that could cause OpenGL resources to be accessed at the wrong time.
Fixed a problem in ComplexLineStyle that could cause thinned lines in a TileLayer to disappear.
Corrected rendering of some Arabic ligatures.
Fixed a problem that could draw an erroneous glyph at the end of a mixed Western and Arabic text.
Fixed a problem in SvgSymbol that could make certain SVG elements disappear if the symbol was not cached as a bitmap.
Improved LabelOrganizingLayer so that symbol candidates are aligned the same way text candidates are.
Improved how rasters are aligned with pixels when they rendered by the GDI renderer
Fixed issue with 1-bit raster symbols somtimes being rendered upside down by the GDI renderer.
Fixed a performance issue when rendering text in a GDI bitmap drawable with transparent background, and the specified font was missing.
Fixed a problem with the DirectX renderer sometimes allocating too much memory when rendering lines in a TileLayer.
Fixed a problem when rendering transparent rasters with the GDI renderer on Windows 8.
Fixed the Carmenta Explorer About dialog so it correctly identifies whether it is a 32 or 64 bit process.
Fixed the visual style used by Carmenta Explorer on Windows 8.
Fixed a problem retrieving feature attribute names and values in Carmenta Studio, due to a change in Java 7, update 21.
5.3 Release Notes
New Functionality and Major Improvements
The OgcWmsLayer is now much easier to configure and often it will be enough to specify the URL of a OGC WMS service. In addition, OgcWmsLayer now inherits from LayerSet and the layers provided by an OGC WMS service can be accessed through the LayerSet.Layers property.
OgcWmtsLayer is a completely new class, which reads images from a web server using the OGC WMTS (Web Map Tile Service) standard. WMTS access is also possible in Catalog Extension.
Carmenta Studio will now automatically show all possible attributes names and types of the features that may pass through an operator chain. The attributes are easily available in many dropdown menus, for instance when configuring visualizer properties and conditions. Previously this required entering the attribute names manually. In addition, when configuring properties using lookup tables, the tables can be automatically populated with actual values of the selected attribute.
A new set of documentation pages specifically aimed at Carmenta Studio users. It shares some of the contents with the regular SDK documentation, but elaborates more on Carmenta Studio details, while hiding information relevant only for developers.
New predefined symbols, line styles and fill patterns available in Carmenta Studio and in the Carmenta Engine API.
The new LayeredLineStyle class renders lines in separate passes, to enable easy set up of rendering of multi-colored linestyles such as line styles used for roads and highways.
Added support for rendering text that are written right-to-left. One example is Arabic, that use a cursive style and where individual glyphs are replaced depending on the previous or next glyph. Other examples of languages we now can display are Hebrew, Persian, Urdu and Pashtu. Our implementation also allows bidirectional text, which is text that mix right-to-left text with western left-to-right words or characters. The bidirectional support is based on the Unicode Bidirectional Algorithm.
A complete makeover of the label and symbol organizing functionality has been made. The new improved LabelOrganizingLayer is now much easier to get started with, produces better results, is faster and have a couple of new exciting features such as that it supports removing duplicate labels.
The performance of the VpfDataSet has been greatly improved. This is achieved by indexing the VPF data the first time the dataset is loaded, similar to how the ShapefileDataSet works. Error handling has been improved, and support for the VVOD (Vector Vertical Obstruction Data) database has been added.
TileLayer3D has been improved. Individual layers can be turned on or off without flushing the entire TileLayer3D. Fading of ground tiles as they are loaded and unloaded is now much smoother.
New events MapControl.Busy, MapControl.Idle, View.Busy and View.Idle indicates if the foreground thread or any TileLayer background thread is busy loading or rendering data. These events can be used to show a "loading data" indicator for data that is loaded in the background.
The DwgDxfDataSet has been improved. Several new object types are supported, and new attributes for text label alignment have been added.
The new GreatCircleOperator traces the great-circle route for a line containing waypoints.
Lots of improvements to StandardTool, including new Interacting and Interacted events, and a new "rectangle zoom".
New Custom Tool sample that demonstrates how you can implement your own tools.
Zoom to feature: new View methods can suggest a suitable view area for displaying one or more given features.
Improved handling of Coordinate Reference Systems:
When the geodetic datum of a CRS lacks a datum shift to WGS84, and Carmenta Engine does not know a good default, you can allow a default datum shift with poor accuracy by letting DatumShiftChoice = Lenient. You can then use the CRS, but knowing you ought to look for a better datum shift.
New methods can suggest alternative datum shifts (perhaps tailor-made for a smaller geographic area or using grid shift files).
A new property on datum shifts gives metadata like accuracy and area of use.
EPSG codes can be recognized also for three-dimensional Coordinate Reference Systems.
New methods give the EPSG code for the area of use for a CRS, geodetic datum or datum shift, so that area polygons can be retrieved easier.
A new more dynamic caching mechanism is now used by most datasets. Available cache space is continuously reassigned to the datasets that need it most. In many cases this will result in better dataset performance, using the same amount of memory. Another benefit is that it is no longer needed to manually configure the dataset cache sizes; all dataset cache size properties have been removed.
TileLayer will now automatically thin line and polygon geometries. This can greatly improve the performance when drawing layers containing large and complex data.
Catalog Extension improvements include support for preferred languages, catalog view keywords, and a possibility to set properties on CatalogMaps loaded from a catalog view, such as scale limits and layer opacity.
Important Notices and Breaking Changes
There is a new sample geodata package. Users must uninstall the old sample geodata package and download and install the new one to be able to run all map configuration and application samples in Carmenta Engine 5.3.
If you are experiencing long delays every time your application is started (after installing Carmenta Engine 5.3), please see this important notice regarding VMAP and other VPF-format based maps: There is a new indexing method in the VpfDataSet. Even though your old map configurations will work without change, it may be worth to do some adjustments to the VpfDataSet configuration to speed up the initialization of your application. Specifically you need to set the new fileIndex and featureIndex paths on your VpfDataSet objects so that the index is saved. The saved index files enable your application to start up faster.
OgcWmsLayer has undergone major changes since version 5.2.2 to make it easier to configure and use at runtime. The inheritance hierarchy has been modified so that OgcWmsLayer inherits from LayerSet and the layers available from the OGC WMS service can be enabled or disabled like any other Carmenta Engine layer by accessing them through the LayerSet.Layers property. This change necessitated renaming the old OgcWmsLayer.Layers and OgcWmsLayer.Styles properties to ExplicitLayers and ExplicitStyles respectively. In addition OgcWmsLayer no longer supports version 1.0.0 or version 1.1.0 of the OGC WMS service specification.
The LabelOrganizingLayer and LabelOrganizingSettings classes have been changed to support the new label organizing features. Old configuration files will be migrated automatically when loaded by Carmenta Studio or an application, and you should get a functional label oganizing. However, the result may not be exactly as before, so you may need to adjust some parameters afterwards. You may also have to adjust application code accessing the properties of these classes.
Initialization of custom datasets has been modified. They are now initialized the same way all other datasets are, and respect the DatasetInitialization flag passed by the application when loading configuration files. As a side effect, the current directory of the process during the InitNew() call may no longer be the directory where the configuration file is loaded from. If you have custom datasets using relative paths in their InitNew() implementation, you may need to change those paths, possibly using the new property CustomDataSetContext.ConfigurationPath.
Since the new cache mechanism automatically assigns cache memory to the datasets, the cache size properties previously found on many datasets have now been removed. Cache sizes specified in existing configuration files will be silently ignored, but application code accessing these properties will have to be updated.
Fixes and Minor Improvements
Improved rendering of semi-transparent objects in 3D.
Fixed problem reading some 3D models with incorrect texture mappings.
Added new method ImageTextureMap.FromRaster() for creating textures from rasters in memory.
Fixed a problem with dynamic_cast<> operator in C++ API.
Error handling in custom objects now works the same way in all APIs. Exceptions thrown by custom code are now caught, logged, and retrown as EngineExceptions.
Fixed some string conversion problems during exception handling in C++, .NET and Python APIs; possibly generating new exceptions hiding the original errors.
Layer.FlushCache() and Operator.FlushCache() have been made thread-safe; the application no longer needs to take the configuration lock.
The utility class CustomDataSetResult can now be used to return features from any custom dataset, not only those deriving from CustomDataSetAdapter as before.
Fixed problem accessing the Projection.LongLat predefined instance from Python.
Added workaround for setting static property Runtime.GlobalCacheSize from Python.
Fixed incorrect error handling in EngineObject.Clone() method in Python.
Fixed a StackOverflowException when accessing the Carmenta.Engine.Controls.ErrorEventArgs.Exception member from the .NET API.
The WPF MapControl can use the software renderer which works over a Remote Desktop connection.
A new class QtMapControl is now a part of the C++ API, to simplify integration with the Qt GUI toolkit.
Status events sent during dataset indexing are now always completed with a final event indicating that the operation is completed, even in case of errors.
The new property ThrowExceptions on the DatabaseDataSets and the OgcWcsDataSet can be used to enable throwing of exceptions when errors occur for easier debugging.
Errors in the DatabaseDataSets are now logged correctly.
Context classes passed to custom objects now have new properties indicating where the custom object was loaded from.
Fixed a problem with sending error events from the Runtime class in the Java API.
Some issues with mouse cursors in Carmenta Explorer have been fixed.
Carmenta Explorer layer control now displays SwitchOperator and layers under a LayerRasterizeOperator.
Added support to easily test different renderers in Carmenta Explorer, without reloading the configuration.
MovingMapTool in Carmenta Explorer now updates mouse position in status bar even if mouse is not moved.
The scale in the status bar in Carmenta Explorer is now updated continuously during zoom operations with StandardTool with bitmap update mode.
Fixed problem opening configuration files with non-ascii characters in filename in Carmenta Explorer on Linux.
Selected features are now displayed expanded by default in the Features tab in Carmenta Explorer.
Layer names that do not fit in the Carmenta Explorer layer control now display a tooltip with the full name.
Performance report files, with a .pf file extensions, are now associated with the Carmenta Explorer executable, so they can be opened by double-clicking the file.
Fixed some issues in Carmenta Explorer not erasing the background property when no map is shown.
Fixed problem with initial scale when a configuration specifying an explicit view scale was loaded by Carmenta Explorer.
Texts following lines are now correctly printed.
Fixed exception that could occur in the Java API if a return type was defined in a Carmenta Engine JAR file not included in the class path.
New custom editors in Carmenta Studio for types like bools, integers and doubles. Improved layout of some other custom editors.
Easier to add references to objects in other files, in Carmenta Studio. Many dropdown menus are now automatically populated with matching objects from all open files, not just the current file.
Several bugs related to changes not taking effect when focus is changed between GUI controls in Carmenta Studio have been fixed.
Carmenta Studio now opens only one instance by default. If Carmenta Studio is already running, and new files are opened from the file manager in the operating system or from Carmenta Explorer, the files will be opened in the already running Carmenta Studio.
An issue with the copy/paste function in Carmenta Studio and strings with backslashes has been corrected.
If Carmenta Studio is started and an incorrect SDK license is found, it now displays a proper error message.
Configurations containing UndefinedValue instances can now be correctly opened in Carmenta Studio.
External references to objects in other .px files with explicit namespaces now work as expected.
Some of the ScriptOperator templates available in Carmenta Studio have been updated, and a new one, TextWrapScriptOperator, has been added.
AttributeSets can now be referenced from several places in the same configuration file, without causing sharing violation exceptions when loaded in Carmenta Explorer or an application.
Configuration parameters can now be specified when loading maps, views and datasets from a Catalog.
Fixed a problem in Catalog Extension with legends not being updated, even if the catalog detected that the .px file had been changed.
The selectable flag on CatalogMap instances loaded from a catalog is now set if the underlying layer is selectable.
Improved parsing of the unit-of-measure field when parsing spatial resolution values from ISO metadata files in a catalog.
It is now possible to specify keyword in the XML files for catalog views. The application can access them from a new property CatalogView.Keywords.
A query in a catalog view XML file can now specify scale limits, layer opacity and style. These properties will be applied to the CatalogMap instances created from the query.
A new utility method have been added to the Catalog class, to flush all caches used by datasets loaded from the catalog.
Coordinate Reference Systems: upgraded to support EPSG version 8.0 (August 2012).
Coordinate Reference Systems: new default datum shifts - found or derived by Carmenta - have been added to many geodetic datums that lacked defaults.
Fixed a problem reading a Shapefile CRS using a Mercator with a non-zero standard_parallel_1, or using an International (Double) Stereographic.
Fixed a problem reading a Jpeg2000 CRS that was represented as GeoJP2 but without EPSG code.
Fixed problems in LineOfSightOperator when reading elevations from a GdalDataSet without overviews, or from an OgcWcsDataSet.
Fixed problem reading some GIF files with ImageDataSet.
Fixed the problem that a dateline-crossing feature stored in LongLat could be retrieved twice from its dataset.
If two threads, or even two different processes, tries to index the same dataset at the same time, only one of the will perform the indexing; the other thread will be blocked until the operation is complete. Before, this situation usually ended with errors, as both threads tried to write to the same files.
Fixed problem with RasterCache throwing an exception in some cases with very high-resolution raster data.
Trying to render an indexed raster without specifying a color table now returns a proper error message.
DtedDataSet now accepts DTED files with eastern bounds specified both as 180E and 180W.
Some improved error messages when errors occurs in GdalDataSet.
New methods DataSet.TryGetValueAt() and DataSet.TryGetFloatValueAt() added in C++ and .NET APIs, which won't throw exceptions if no data is available.
Fixed a problem with Jpeg2000DataSet and non-ascii filenames on Linux.
Several error corrections and improved error handling in OgcWcsDataSet.
Fixed problem with path/filename parameters to constructors of subclasses of MultiFileDataSet.
ShapefileDataSet now reads features in the order they are defined in the file, reducing I/O and improving read performance.
ShapefileSchema.FromFile can now read schemas from files even if the geometry type is not supported for writing.
ShapefileDataSet.Save() can now write an additional .prj file to specify the CRS used in the shapefile.
ImageDataSet now closes all internal file handles when destructed.
GdalDataSet can now read raster files containing 64-bit floating-point values. The cell values will be converted to 32-bit float and returned as 32-bit float rasters.
CmrgDataSet now correctly sets the undefined value of elevation rasters as specified in the data, instead of hardcoding it to 8192.
Fixed a problem when the DatabaseDataSet.Attributes property was modified before the dataset had connected to the database.
Fixed an access violation in DataSetSet, when one of the sub-datasets returned no features from a query.
Fixed a problem in DemDataSet with some non-standard DEM files.
CM93RasterDataSet can now be used inside a TileLayer.
Initialization of custom datasets now works as for all other dataset. If a configuration is loaded with DataSetInitialization = Delayed, the custom class will not be loaded and initialized until the dataset is initialized, typically when the view is first updated.
Fixed incorrect writing of TIFF tags ResolutionUnit, XResolution and YResolution when saving rasters as TIFF files.
Lots of corrections, additions and other improvements to the Carmenta Engine SDK documention.
Several corrections and other improvements to the Carmenta Engine sample configurations and applications.
Added ZIP archive with Javadoc documentation to the Windows version of the Carmenta Engine SDK.
Predefined transparent Pen and Brush instances.
Automatic creation of Symbol instances from string attributes.
Fixed a problem where LineGeometry.SegmentNearPoint2D could return a segment beyond the end of the line.
Configurations marked as Shared can now be reloaded a second time by an application without errors.
Some data directories needed by Tactical Extension and Nautical Chart Extension are now installed as zip files, reducing the number of files in an SDK installation or runtime deployment.
Fixed problem with tactical symbol sometimes not being shown in 3D views.
Fixed an infinite loop in TileLayer if view area was set outside the bounds of the CRS.
Changed how TileLayer generates directory names for its disk cache to avoid too long paths.
Picking objects in a view with View.WhatsAt() now works as expected for SvgSymbols.
The Runtime.Error event now passes the origin of the event, for instance an OgcWmsLayer losing its connection to its server.
The ConfigurationParameters class and the ConfigurationParameter utility object in Carmenta Studio have been extended to support bools, integers, doubles, strings and atoms.
The new method Layer.GetFeatureAttributes() can be used to get a list of attribute names and types that may be set on features in the layer.
The CustomDataSetProxy.Crs property has beed removed from Carmenta Studio, since the value was never used. Instead, the new CustomDataSetProxy.SuggestedCrs property can be used to indicate which coordinate reference system a custom dataset implementation should use.
Fixed a possible deadlock in TileLayer during shutdown, if the TileLayer was using bitmap disk caching.
Fixed a problem in TileLayer during startup if sub-layers were modified before background thread had started reading its first tile.
Drawable.Save() or Drawable.GetImage() can now save images in 8-bit indexed PNG format. Before, only RGB and RGBA were supported when saving PNG images. Additionally, both the OgcWmsLayer and the new OgcWmtsLayer can use the 8-bit PNG format when retrieving images from a server.
Fixed possible deadlock in View or MapControl event handler that takes the global configuration lock.
Fixed problem with hit-testing filled circles and ellipses rendered by SvgSymbol.
Fixed a potential stack overflow in SmoothOperator.
ResampleOperator now supports a mode where rasters are resampled to a lower resolution if needed, but never resampled to a higher resolution.
ResampleOperator now respects undefined values in the source raster.
Fixed potential stack overflow errors in grid generator classes.
LineThinningOperator can now use an automatic, scale-dependent max error.
Improved performance in OrdinaryLayer instances that are both buffered and selectable.
GroupDataSet now correctly set group attributes on features, even for selection attributes.
Built-in tools now updates mouse cursor directly when modifier keys or mouse buttons are pressed instead of only on mouse-move events, providing better visual feedback to the user.
StandardTool now supports both Alt + click and Ctrl + Alt + click to add or remove nodes from a feature, making the function available even when the window manages steals the Alt + click events.
StandardTool now supports editing of polygon holes.
Some built-in tools now uses the Escape key to abort ongoing operation.
Fixed problem with StandardTool sometimes not firing Selecting event.
Rectangle select function in StandardTool now only selects the first feature if MutliSelectEnabled is False.
Mouse wheel zoom with StandardTool now zooms around the mouse position instead of the center of the view.
CreateTool.IsActive property now returns False if called from the FeatureCreated event, after the operation is completed.
All renderers now support using multi-color raster symbols as polygon fill patterns. Previously only 1-bit patterns were supported by most renderers.
All renderers now support multi-line text labels. If the text contains newline characters, it will be split into several lines.
Opacity is now handled correctly for OgcWmsLayers rendered with DirectX.
All renderers now support the different fill modes that can be specified for self-intersecting polygons in SVG symbols.
Improved DirectX performance.
Fixed a problem with font textures being corrupted when rendering texts with OpenGL.
All renderers now disable filtering when rendering rasters exactly matching the screen resolution, even if the RasterVisualizer specifies filtering.
5.2.2 Release Notes
Fixes and Minor Improvements
Fixed issue with paint events in Java MapControl sometimes not being fired.
Fixed problem calling methods on event argument classes in Java API.
WPF MapControl now properly removes event handlers when destroyed.
Fixed possible memory leak in Raster.Data property in .NET API.
Added missing implementation of ITool::isActive() in Engine4ToolAdapter in C++.
Added missing implementations of setCustomCursor() and paint() in C++ MapControl class.
Fixed possible crash when RasterCacheDataSet was used, and global cache size was set to 0.
Fixed problem in Carmenta Studio saving ScriptOperator code strings incorrectly.
Fixed handling of named objects of enumeration types in Carmenta Studio.
Fixed problem in Carmenta Studio reading some .px files created with version 5.2 or earlier.
Fixed problem in Carmenta Studio saving some objects with multi-line comments.
Improved LargestValueFilterScriptOperator template in Carmenta Studio.
Improved error handling when a Catalog instance locates WMS and WCS services via a CS/W service.
OgcWmsLayer created for a CatalogMap now always requests map images with transparent = True.
Catalog constructor now throws an exception if local catalog directory does not exist.
Catalog.LoadMap() now initializes datasets if requested, even if datasets previously loaded without being initialized.
Fixed problem enabling and disable styles for CatalogMaps.
CatalogMetadata now removes duplicate keywords, topics and spatial resolutions.
Fixed issue with Crs.AuthoritativeName when used with "CRS" as authority.
GridFileDatumShift instances can now be created in Carmenta Studio.
WcsDataSet improved to work better with Carmenta Server 4.
Fixed leak of open file handles if GdalDataSet initialization fails.
Added support for RGB images in CmrgDataSet.
New properties on the S57DataSet can be used to set the scale levels when to switch chart levels.
Jpeg2000DataSet now supports reading both CRS and bounds information from embedded GML tags.
Minor improvements and bug fixes to DwgDxfDataSet.
ShapefileDataSet now supports reading files up to 4 GB in size.
Improved error handling in ShapefileDataSet and VpfDataSet when reading from failing network disks.
Added fix for reading VPF data with missing tile index files.
The VpfQuery properties typeColumn, keepList and skipList properties have been replaced by a more flexible condition property.
Fixed threading issues in some datasets when the same instance was used concurrently from different threads.
Fixed problem in DemDataSet on Linux, releated to current locale.
OgcWmsLayer now uses bicubic filtering to improve rendering quality.
Fixed possible deadlock if application called View.WhatsAt() while holding the configuration lock.
Fixed a problem in TileLayer when View.FlushCache() was called.
Fixed clipping issue with some images created with a PolynomialProjection.
Layer.MinScale and Layer.MaxScale now handled correctly for layers inside a TileLayer.
Fixed a problem with selection in LabelOrganizingLayer used together with TileLayer.
Fixed issue in C++ MapControl, it now calls onCustomDrawBackground() as documented.
Fixed problem in Configuration.Save(), properties of Atom type are now correctly serialized to XML.
RectangleClipOperator now interpolates Z coordinates from clipped features, instead of setting them to 0.
Screen layers in 3D now uses OpenGL depth buffer better, so that OpenGL rendering done by application in View.CustomDraw does not appear in front of screen layers.
Minor improvements to S-52 visualization.
Fixed issue with tactical point symbols sometimes drawn in the wrong color inside a LabelOrganizingLayer.
Rendering of rasters with OpenGL and filter NearestNeighbor now disables all filtering.
Fixed issue with RasterLegendItems being drawn incorrectly if raster visualizer used filtering.
Fixed problem with LineVisualizer.OrthogonalOffset, when used inside a TileLayer.
S-52 symbols are now correctly drawn in legends.
Layer.Opacity now works as expected when used with the DirectX renderer.
CustomSymbolProxy and CustomVisualizerProxy now respect cache hint "never", making it possibly to implement time-dependent visualization, like blinking symbols.
View3D.AreaChanged event was sometimes fired even if area not changed.
Fixed issues that could lead to gaps between tiles in 3D.
Semi-transparent polygons in 3D are now drawn last, together with other semi-transparent objects.
Vertical polygons in 3D (i.e. with zero area when projected onto the XY plane) are now properly rendered.
Fixed problem drawing polygons with patterns with Software renderer.
Many corrections, additions and other improvements to the Carmenta Engine SDK documentation.
5.2.1 Release Notes
New Functionality and Major Improvements
Several fixes and improvements in Carmenta Studio.
Improved text rendering, text labels are now in many cases clearer and easier to read.
Support for legends in Catalog Extension.
Added support for monitoring data changes in Catalog Extension.
Catalog Extension now supports keeping its own metadata in files separate from the standard ISO documents.
CatalogView now has metadata for resource and language.
Upgraded RaveGeo libraries to version 3.0.3.
Fixes and Minor Improvements
Carmenta Explorer can transfer area and camera parameters to configuration.
Fixed problems with non Latin-1 paths in Carmenta Explorer and License Key Manager.
Support for Byte Order Mark (BOM) in UTF-8 configuration files.
Fixed bounding box issue for WMS capabilities in Catalog Extension.
Fixed drawing order problem for CatalogMap in TileLayer.
Improved error handling when two CatalogExtension metadata documents have the same id.
Fixed problem in XML serialization for CRS.
Jpeg2000DataSet now supports reading JPEG 2000 files with other bit depths than 8.
Improved cloning of database datasets.
Improved support for creating GdalDataSet from application code.
Fixed issue in bounds calculation for DWG data.
Fixed a problem with TileLayers inside LabelOrganizingLayer, that could cause other layers to be disabled and not rendered.
Fixed ErrorEvent from Java MapControl.
Fixed problem causing RegistryValue to leak Windows handles.
Removed calls to X11 libraries on Linux for BitmapDrawables with the Software renderer.
Fixed thread safety issue when reading TIFF files.
Improved handling of transparancy for GIF writing.
Fixed termination issue for the HelloWorldX11 sample application.
Fixed an error in offsets for GridGenerator.
Fixed problem disabling mouse panning for StandardTool.
Fixed rotation issue for S52 Lights.
Fixed problem with path for SvgSymbol.
Fixed rendering problems when an SvgSymbol was used in two different drawables with different renderers.
Fixed a problem with disappearing text labels when PointVisualizer.clipToViewArea was used.
Fixed a problem calling Drawable.DrawLine() from a custom visualizer, with a pen with an empty dash list.
SqlServerDataSet now works without installing SQL Server Native Client driver on Windows 7.
Fixed a problem setting some properties to null in .NET API.
Fixed a problem in .NET API to prevent the garbage collector from collecting objects returned by custom object implementations.
Fixed some issues with selection in TileLayer.
Fixed problem with disappearing features in OgrDataSet.
5.2 Release Notes
New Functionality and Major Improvements
Carmenta Engine now supports making true 64-bit applications. The 64-bit version of Carmenta Engine SDK is available as a separate installation package and can be installed on the same machine, and at the same time, as the 32-bit Carmenta Engine SDK.
Nautical Chart Extension is a new Carmenta Engine extension for reading and rendering Nautical Charts according to IHO S57 and S52 standards. The S57DataSet reads S57 data and the S52Visualizer renders the data according to the S52 visualization standard.
Tactical Extension now has support for drawing point symbols according to the App6B standard, and partial support for symbols form the App6C Draft 1 standard.
Major additions to Catalog Extension include support for catalog datasets and catalog views.
Added utility methods on Crs class for formatting and parsing coordinate strings on various formats such as longitude/latitude, decimal degrees/minutes/seconds and MGRS (Military Grid Reference System).
Added Jpeg2000DataSet for reading geographic data in JPEG 2000 format.
Added OgcWcsDataSet for reading raster data from map web servers that complies with OGC WCS standard.
Organizing texts and symbols to prevent overlapping has been significantly improved since LabelOrganizingLayer now can organize texts and symbols that are cached inside a TileLayer. This greatly improves the label organizing speed and enables real-time panning of label organized texts and symbols.
Drawing outline on polygon features using LineVisualizer, and placement of repeated symbols and labels in TileLayer has been greatly improved.
Optimizations in TileLayer: It is now several times faster to pick a Feature in TileLayer using the StandardTool or the whatsIn or whatAt methods.
Added a new PointVisualizer property, ClipToViewArea, to enable placement of symbols and labels relative to the currently visible part of the feature instead of relative to the source geometry.
Added a new sample application called Height Calculator that shows how to transform height above WGS84 ellipsoid to/from height above some geoids (EGM2008, RH2000 and RH70).
Drawable.Save() now supports writing of tiled GeoTIFF images.
Breaking Changes
The Catalog Extension has undergone major changes since version 5.1. New features like catalog datasets and catalog views have been added, while a few other features have been removed or redesigned. These changes are likely to require modification to applications using Catalog Extension from version 5.1.
The Catalog.GetRecord() method has been renamed to Catalog.GetMaps(), for consistency with new methods Catalog.GetDataSets() and Catalog.GetViews().
The CatalogMap.Layer property has been removed. Instead, the CatalogMap class itself inherits from the Layer class and can be inserted directly into a view.
Configuration file support for Catalog Extension has been removed. This includes the classes CatalogLayer, CatalogDataSet, CatalogOperator and CatalogVisualizer. Catalog Extension can only be used through application code.
Improved runtime checking to validate that layers and operators are not shared in a configuration. A detected sharing violation will cause an exception to be thrown.
The version numbers of all shared libraries in the Linux version have been increased.
Fixes and Minor Improvements
Support for initializing ShapefileSchema directly from existing files.
Added support for reading TIFF using Raster.FromStream().
Added support for handling undefined raster values in ShadeOperator.
Added support for constructing a Crs from explicit projection, datum, authority and code (previously, the authority and code could not be assigned if the projection and datum were given explicitly).
Added reading of some more metadata from RPF files, accessible through the bounds polygons.
Added option to set the timer interval for 3D interaction tools in Carmenta Explorer.
GDAL third party library upgraded to version 1.8.1.
GdalDataSet supports reading metadata for Offset and Scale.
SqlServerDataSet now supports the GUID type and can handle non-integer ID columns.
Crs.metersXY now gives a sensible result outside the valid bounds of the Crs, instead of throwing the exception "cannot calculate scale error".
Documentation improved with more details on thread safety and the Carmenta Engine threading model.
View.SunPosition can be set without taking the configuration lock.
Added support for the Date data type in all database datasets.
Added IsRequired for DatabaseColumn to specify mandatory fields.
Time zone is included for DateTime columns converted to strings.
Fixed problem when editing tactical graphics drawn with OpenGL or DirectX.
Fixed problem in PresentationObject.CalculateBounds when using OpenGL or DirectX.
Added workaround for crash in some Intel HD Graphics OpenGL drivers.
Added workaround for divide by zero crash in some ATI OpenGL drivers.
Fixed problem in C++ MapControl that caused a mouse wheel event to also trigger a key down event.
Fixed problem in C++ MapControl destructor so it releases resources correctly.
Fixed problem when drawing an SvgSymbol in a custom visualizer shared by more than one View.
Fixed problem in CmrgDataSet bounds calculation.
Fixed problems in RpfDataSet.flushCache and CmrgDataSet.flushCache that could cause a stack overflow.
Fixed problem in RpfDataSet that caused an access violation when reading certain data files.
Improved StandardTool when editing tactical symbols.
Improved OverviewTool when overview and main view use different coordinate reference systems: the bounds of the main view can appear as non-rectangular in the overview.
Fixed visualization of an HQ symbol with a direction indicator by a TacticalVisualizer.
Fixed visualization of WAR.AIRTRK.WPN symbols.
Fixed problem with loading metadata for enumeration attributes in a SymbolStandardMetadata.
Fixed problem when calling GroupDataSet.Clear without taking the dataset lock.
Added support to find the SymbolMetadata associated with an unframed SIDC code (the metadata of the corresponding framed symbol is returned).
Location type of the tactical symbol TACGRP.TSK.SZE has been changed from line to orbit.
Location type of the tactical symbol TACGRP.MOBSU.OBST.MNEFLD.STC has been changed from corridor area to point.
Location type of the tactical symbol TACGRP.C2GM.AVN.PNT.ACP has been changed from fan area to point.
Location type of the tactical symbol TACGRP.C2GM.AVN.PNT.ACP.COMMCP has been changed from fan area to point.
Fixed rendering problem with GDI+ and transparent rasters on Windows 7.
Improved VPF dataset to discard invalid geometries that resulted in infinite loops.
Fixed TileLayer disk cache problem related to re-centered CRS.
Fixed problem with loading .NET 4 custom objects in Carmenta Explorer.
Improved layer tree control in Carmenta Explorer.
Fixed raster cell offset issue in line of sight calculations.
Basic authentication is now fully supported for OGC WMS layer.
Fixed minor issue in View.GetDataBounds.
Fixed incorrect setting of view scale, when the scale is specified in the configuration file.
Fixed problem with incorrect initial scale i Carmenta Explorer when loading view with StartPosition = ExtentOfData.
Modified .NET API to make garbage collection run more frequently.
Fixed bug triggered by View.WhatsAt in empty selectable TileLayer.
Fixed issue in bounds calculation for RasterGeometry.
Fixed memory allocation issue in ScriptOperator.
Fixed two problems with orthographic projection.
Fixed handling of empty lines in Crs.Route to avoid divide-by-zero.
Fixed OnSelectingEvent for rectangle selection in StandardTool.
Fixed issue with UpdateAttributes for custom visualizers.
Fixed MaxValue for multi-band rasters.
Fixed problem with loading 3D point data from shapefiles.
Fixed memory management issue in View3D.
Improved error reporting for Python syntax errors in ScriptOperator.
Improved I/O error handling for VpfDataSet.
Fixed issue with StartPosition for cloned views.
Fixed problem with cursors encountered when sub-classing Carmenta.Engine.Forms.MapControl.
Fixed problem with setting camera parameters in the View.Updating event.
Fixed InspectTool3D to return correctly updated values.
Fixed memory consumption problem when creating many instances of MapControl.
Improved accuracy for DataSet.GetDataCoverage for some datasets.
Fixed issue with creating UtmGridGenerator from code.
Fixed problem with re-initializing DirectX after unlocking screen in Windows.
Coordinate reference systems, projections and geodetic data have been upgraded to support EPSG version 7.9 (from August 2011).
Added support for EPSG codes 31491 - 31495, which are so old that they have been both deprecated and deleted from the EPSG database, since they are still in use.
Fixed problem causing the coordinate systems CRS:83 and CRS:84 to be replaced by EPSG:4326 (their authoritative axis order is different, so this matters in an OgcWmsLayer).
Fixed problem in ShadowOperator causing rasters with zero width or height, if input elevations were not connected.
Fixed Carmenta Explorer shutdown problem when profiler windows was open.
Fixed issue with selected features in Carmenta Explorer.
Fixed issue with distorted reprojection of a large raster from LongLat to Mercator, if the raster center was on the equator.
Fixed problem in Point.Rotate.
Fixed Python API problem with collection parameters in overloaded methods.
Fixed problem in Complex LineStyle that could result in access violation.
Fixed problem in SpyOperator for selectable layers.
Improved thread safety for Crs.
Fixed null pointer reference in Crs::toWellKnownText.
Fixed RasterConversionOperator problem when changing Int to Float or vice versa, causing Continuous to always be set to False on the new raster.
Fixed version 4 migration problems for Crs/GdalDataSet.crs and Visualizer.worldCoords/lengthUnit.
RasterMergeOperator now uses a bilinear filter for Add (instead of NearestNeighbor), if the 2nd raster is continuous and has a different resolution.
Fixed problem in ShadeOperator for Float rasters with tiny height variations.
Added sourceGeoType property for multi-geometry features from database datasets.
Fixed swapped order of fileName and path parameters in ImageLegendItem constructor.
Fixed problem in buffered OrdinaryLayer when the view uses a cylindrical projection and is zoomed out to be wider than the world.
Fixed problem with combination of TextVis.followLine and clipToViewArea.
Fixed problem with changing scale during smart reload in Carmenta Explorer.
Fixed error in Carmenta Studio px migration (from 5.0 configurations) of external ResourceReference.
Fixed bug in StandardTool, mouse panning can now be disabled using the enableMousePan() property.
Fixed problem in VerticalProfileOperator when the first two points of the route were inside the same raster cell; the first one did not generate a point in the output profile.
Fixed the installer program so that any previous Carmenta Engine 5 version is uninstalled automatically.
Fixed some problems in LevelOfDetailOperator with FillArea = True: when combined with a custom dataset, and when panning across the international date line, and when used in the most distorted parts of the view projection.
Fixed a problem with the GetFeatures method, when the FeatureQuery had a Crs based on degrees, and the result should depend on the scale or resolution of the query.
Relaxed locking of the GDAL library, to improve concurrency when multiple GdalDataSet and RasterCacheDataSet instances are accessed by different threads.
Fixed problem in RasterCacheDataSet that could create small displacements of the data.
Fixed data coverage issue for RasterCacheDataSet.
Fixed a problem in OgcWmsLayer, when used with version later than 1.3.0, and a right-handed coordinate reference system.
Fixed a problem with TargetLineOfSightOperator used with CarrierType = Airborne and ObserverHeightType = AboveSeaLevel.
Fixed some problems with TargetLineOfSightOperator when a target is outside the elevation data coverage, or when the elevation data have not been connected.
Fixed a problem in TinGeneratorOperator.
Fixed a problem with the symbol cache used by CustomSymbolProxy.
Carmenta Studio: corrected the default value of HdrDataSet.continuous to be True.
Improved garbage collection in WPF MapControl, to avoid running out of video memory when control is resized.
Fixed a problem in EcwDataSet, when instances that have never been initialized or used are destroyed.
5.1 Release Notes
New Functionality
Starting with this release, the Linux and Windows versions of Carmenta Engine will use the same code base and release schedules. With this version our Linux users also have access to the powerful new features that was introduced with Carmenta Engine 5.0.
Carmenta Engine now includes a complete Java API, with the same powerful properties as the .NET and C++ APIs.
Added support for the remaining 113 tactical symbols and graphics in Mil-Std-2525B Appendix B.
It is now possible to extend the Carmenta Engine's 2525B tactical library with custom tactical symbols with metadata that is consistent with the 2525B standard.
The ExternalDrawable is a new type of drawable that enables rendering to an OpenGL context that has been set up externally. This can be used to implement "render to texture" using OpenGL Frame Buffer Objects, or to integrate Carmenta Engine views at a lower level into other frameworks such as Qt.
Added support for hardware accelerated Qt and QML UI elements on top of hardware accelerated Carmenta Engine maps. With this new support, Carmenta Engine is ready to be used with touch based animated user interfaces in mobile applications on Windows or Linux PCs or tablets.
With the new Layer.Opacity property, the transparency of a layer or a set of layers can be adjusted in real-time.
Added support to use OGC CS/W web services as remote catalogs in Catalog Extension.
Added support for reading Nautical Charts in S57 format via the OgrDataSet.
Added ColorRampLegendItem, a new LegendItem for presenting color ramps in legends.
Added a new method TileLayer.FlushBitmapCache that clears the TileLayer bitmap disk cache.
Tactical corridor areas are now visualized with width controls at the center of the corridor instead of at the beginning, to avoid confusing behavior when new point are added.
Carmenta Explorer has been made cross-platform using the Qt GUI framework and is thus the same on Linux and Windows.
Carmenta Explorer now shows camera coordinates in 3D.
Carmenta Explorer now has a color adjustment tool for changing the amount of transparency on layers.
Feature attributes may now be used to control presentation parameters inside SVG symbols.
New classes CustomOperatorAdapter and CustomDataSetAdapter make it easier to implement custom operators and data sets.
Installation of Python API and Python runtime libraries is now separate from the Carmenta Engine SDK installation. This gives SDK users an active choice whether to include scripting capabilities or not.
SpyOperator has been improved to provide more useful information when debugging a configuration.
Added support for reading keyword thesauri from Catalog Extension metadata documents.
Improved query expressions in CatalogQuery.
A new property DataSet.SuppressInitializationErrors makes is possible to configure datasets with optional geodata. If no geodata is found, the dataset will not generate any errors, but will continue to function like an empty dataset. In previous version, this behavior was only possible to specify for the whole configuration when it was loaded.
Improved the way tiles are read by TileLayer in synchronous mode. Tiles on screen are loaded syncronously, but the tiles (in the view area extension buffer) outside the screen are read asynchronously.
The documentation has been extended with several new sample map configurations, sample applications and tutorials.
Breaking Changes
The following changes are not 100% backwards compatible with the previous release, and may require minor changes to configuration files or application code.
C++ collection iterators are now tagged as bidirectional, instead of random access. In the previous release, the iterators claimed to support random access, but this was not correct. This only affects C++ applications using the iterators with algorithms that require random access, like std::sort.
The implementation of the OrdinaryLayer.PixelMarginUp and OrdinaryLayer.PixelMarginDown properties have been corrected, these values were previously swapped. This will be adjusted automatically when reading configuration files from previous versions. However, applications setting these properties from code may have to be adjusted.
The attribute variable lookup mechanism have been changed, for keyed attribute variables with string, atom or bool keys. If the attribute is found, but no exact match is found in the table, the behavior is now the same as if the attribute wasn't found, i.e. the default value will be returned. Previously, the value of the last entry in the table was returned. Direct or indirect attribute variables are not affected by this change, nor are keyed attribute variables with numeric (int or double) keys. (Note that in Carmenta Studio, attribute variables are called 'maps', e.g. ColorMap.)
Other Fixes and Improvements
Documentation has been improved with new a layout and new indices of classes and other contents. It also includes several new topics, extended information and more samples.
Coordinate reference systems, projections and geodetic data have been upgraded to support EPSG version 7.6.3 (from December 2010).
Fixed problem when removing and then adding values in an AttributeSet.
Fixed the implementation of LevelOfDetailOperator.Clone.
Fixed problem when visualizing polygon outlines.
Improved visualization of polygons with rings that have not been closed correctly.
Tactical symbol TACGRP.MOBSU.OBST.MNEFLD.STC is now a point symbol according to MilStd 2525B.
Fixed the visualization of some point symbols in Mil-Std-2525B.
Fixed problem when using a TacticalVisualizer in a TileLayer or TileLayer3D.
Fixed problem when a LegendItem has a TacticalVisualizer using a metric attribute.
Fixed problem when drawing a text using a TextVisualizer in a custom visualizer.
Fixed problem when drawing an SvgSymbol using a SymbolVisualizer in a custom visualizer.
Improved support for the geography data type in Microsoft SQL Server.
Improved thread safety for TileLayer.
Improved thread safety for CustomDataSet.
Fixed problem with flashing billboard texts in 3D.
Fixed problem with view box coordinates in the SvgSymbol SVG parser.
Fixed performance issue for label organizing in transparent bitmaps.
Fixed font setting problem in the DirectX drawable.
Fixed problems in Carmenta Studio related to map objects (attribute variables).
LoadableLayer objects are now always marked as Public in Carmenta Studio.
Improved performance for LayerRasterizeOperator in OpenGL.
Fixed problem with spaces in font names used in SvgSymbols.
Fixed problem with using SizeOperator directly after a SplitOperator.
Improved handling of undefined values in DataSet.GetValueAt() and DataSet.GetFloatValueAt().
Fixed problem with dynamic_cast<> in C++ sometimes failing.
Fixed problem in software renderer with text halo.
Fixed problem with some map projections: Albers, Hotine, Krovak, Laborde and New Zealand.
Fixed repaint problem in the MapControl for C++.
Fixed problem in LineOfSightOperator with multiple line segments as observers.
Fixed problem when elevation data in LongLat passed through a RasterMergeOperator on its way to a LineOfSightOperator, and the View used a projected Crs.
Fixed tiff output problem.
Fixed problem in ImageDataSet when reading 1-bit, 2-bit or 4-bit tiff files.
Fixed problem with visualization of selections in OpenGL.
Fixed clean-up issue in MapControl.
Improved handling of coordinate reference systems in ElevationOperator.
Fixed problem in LoadableLayer constructor.
Fixed problem with user-defined Ellipsoid instances in Carmenta Studio.
Fixed handling of tactical symbol attributes in meters for ScreenCoordinateSystem.
Fixed problem with visible tile edges in TileLayer with DirectX.
Fixed problem when using followLine and nominalMeters in TextVisualizer.
Doubles can be assigned int values without adding .0 in Carmenta Studio.
Fixed issue with text halo used in conjunction with followLine.
Fixed issue with extraneous CRS references when saving MemoryDataSet and features to XML.
Improved automatic migration of Carmenta Engine 4 configuration files.
Fixed an issue in VpfDataSet, failing to read certain files from the World Vector Shoreline dataset.
Fixed problem in RpfDataSet.
Fixed problem with RasterizeOperator sometimes trying to create rasters with zero width or height.
Fixed issue in TileLayer in combination with invalid polygon geometries.
Fixed a problem with selection after TileLayer.FlushCache() was called.
Fixed a problem with selection in TileLayers with bitmap caching.
5.0.1 Release Notes
Changes and New Functionality
Added support to create raster symbols from rasters.
Added support to serialize Carmenta Engine objects to a string.
View.StartPosition changed to read/write.
Improved support for retrieving bounds polygons and other information from sub-datasets.
Added new Printer class with improved print functions. New functions include printing to a part of a page, and that the Printer returns the exact printed area which simplifies printing a map over multiple pages. Used in Carmenta Explorer.
Added methods (Raster.fromStream, ImageTextureMap.fromStream and MeshGeometry.textureCoordinates) to be able to efficiently create 3D mesh features in CustomDataSets.
Added support (extended API) for OGC WMS Layers in Catalog Extension.
Added method Runtime.FireStatusChanged. Use it to fire your own Carmenta Engine status events to inform your application (or the Carmenta Explorer progress bar) that your CustomDataset or CustomOperator is busy working.
Improved 3D map configuration sample that runs smoother.
Fixes and Improvements
Improved documentation.
Fixed some scale issues in Carmenta Explorer and tools.
Fixed mouse wheel support and negative coordinate issue in Engine4ToolAdapter.
Fixed some issues with enumeration values.
Improved performance for WPF MapControl.
Fixed relative paths issue in dataset initialization.
Fixed Z value for PointAlongRay2d.
Fixed LoadLayerSet constructor issue.
Fixed issue in View3D.Clone.
Fixed issue in TextVisualizer with FollowLine = True for texts with spaces and halo.
Added missing keys property for KeyValueTable in C++ API.
Improved GdalDataSet to support ADRG with sub-datasets.
Fixed issues in text drawing with CustomSymbol.
Improved memory management for ShapefileDataSet.Save.
Fixed issue with tile edge pixels rendered in TileLayer with bitmap caching.
Fixed LevelOfDetailOperator fill area problem.
Fixed negative times issue in Performance Report.
Fixed thread related issues in OpenGL and DirectX renderers, and the Hdr and DtedDataSets.
Fixed issues that ScriptOperator could not be used in a TileLayer.
Fixed issue in serialization of user properties.
Fixed dashed line problem for CustomSymbols in OpenGL.
Fixed problem in ConnectPolygon with ConnectCondition.
Fixed problem with conditions on layers.
Fixed AttributeValue.Type property in .NET API.
Fixed problem with TileLayer and enabledDuringQuickUpdates.
Fixed return value for DataSet.GetRasterValues when no data is found.
Fixed selection of features in GroupDataSet.
Fixed problem in 3D for tactical graphics.
Fixed issues regarding 2525B symbols.
Fixed CompositeLineVisualizer performance problem with point symbols along the outline.
Fixed issue with datasets not returning any data when used together with custom operators.
Updated Catalog Extension metadata templates.
Updated Carmenta Explorer so it uses the CLR of .NET Framework 4 if available and otherwise the CLR of .NET Framework 2. This allows Carmenta Explorer to load custom objects targeting .NET Framework 4.
The Query class now inherits from ResourceObject. It already had all the semantics of a ResourceObject, this is now better properly reflected in the class definition.