2023.0

2023.0.04

New featureLuciadCPillar

You can now add a LonLat grid to a map. This new feature is demonstrated in the samples. For more information, read the LonLatGridLonLatGridLonLatGrid API documentation and see the LonLat Grid article.

New featureLuciadCPillar

You can now add a MGRS grid to a map. This new feature is demonstrated in the "Symbology" sample. For more information, read the MgrsGridMgrsGridMgrsGrid API documentation and see the MGRS Grid article.

New featureLuciadCPillar

ComplexStrokeLineStyleComplexStrokeLineStyleComplexStrokeLineStyle API has been added and FeatureCanvas::GeometryDrawCommandFeatureCanvas::GeometryDrawCommandFeatureCanvas::GeometryDrawCommand has been extended to accept it. Using this, you can stroke a line with repeated patterns and decorations. They can also be used for editor lines and RasterLayerRasterLayerRasterLayer outlines. See ComplexStrokePatternFactoryComplexStrokePatternFactoryComplexStrokePatternFactory for an overview of available patterns. See the complex stroke tutorial for a step-by-step guide.

New featureLuciadCPillar

MgrsFormatMgrsFormatMgrsFormat has been added which allows to format geodetic points to MGRS UTM/UPS coordinates. It can also be used to parse MGRS UTM/UPS coordinates to a geodetic point. See the MGRS Grid article for more information.

New featureLuciadCPillar

It is now possible to create 3D icons from glTF files in LuciadCPillar by using the FeatureCanvas::drawIcon3DFeatureCanvas::drawIcon3DFeatureCanvas::drawIcon3D method. FeatureCanvas::Icon3DDrawCommandFeatureCanvas::Icon3DDrawCommandFeatureCanvas::Icon3DDrawCommand allows you to set the glTF source file to load as well as other properties such as transformations: scale, rotation, orientation and translation. As well as color modulation, mesh position, query-ability of the mesh and a setting to tell if the mesh contains transparent surfaces.

The camera sample demonstrates how to import a glTF file. This information can also be found in the article Learn how to load and visualize your glTF data.
For information about the limitation of our glTF support in LuciadCPillar please refer to the article Which glTF version is supported and what are the limitations?.

New featureLuciadCPillar

Decoded GeoPackages can now be edited. To get an editable GeoPackage from the GeoPackageModelDecoderGeoPackageModelDecoderGeoPackageModelDecoder the isEditable flag in the GeoPackageModelDecoderOptionsGeoPackageModelDecoderOptionsGeoPackageModelDecoderOptions needs to be set to true. To save the changes made to an edited GeoPackage, the IFeatureModelIFeatureModelIFeatureModel's FeatureModelPersistenceManagerFeatureModelPersistenceManagerFeatureModelPersistenceManager needs to be used. See the GeoPackage feature editing article for more information.

New featureLuciadCPillar

It is now possible to customize the style of raster data by means of the new RasterStyleRasterStyleRasterStyle class. Specifically, you can now set: The style of the raster layer can be either set at layer construction time or at runtime. For more information please refer to the article Learn how to style your raster data. and the API documentation of RasterStyleRasterStyleRasterStyle.

New featureLuciadCPillar

LuciadCPillar now allows you to create an IIconIIconIIcon from a MilitarySymbolMilitarySymbolMilitarySymbol. This is particularly useful if you want to get the military symbol as an ImageImageImage. Please refer to the API documentation of MilitarySymbol::toIconMilitarySymbol::toIconMilitarySymbol::toIcon for more information.

New featureLuciadCPillar

LCP-384
It is now possible to get a Map::HeightProviderMap::HeightProviderMap::HeightProvider directly from the map to query elevation across all the visible elevation layers for a given pixel. See related article on the map height provider for more information.

New featureLuciadCPillar

The GdalModelDecoderGdalModelDecoderGdalModelDecoder now supports decoding single band GeoTIFF files using either 32-bit floats or signed integers. Such GeoTIFF data files are interpreted as elevation data.

New featureLuciadCPillar

LuciadCPillar now allows you to retrieve height data from an elevation raster model using the new RasterModelHeightProviderRasterModelHeightProviderRasterModelHeightProvider class. See related article on how to get height data from a raster model for more information.

New featureLuciadCPillar

LCP-35
LuciadCPillar's support for visualizing elevation data has improved significantly:
  • The Map can now correctly visualize non-world covering elevation data sets correctly. In previous versions it clips away all other data outside the extents of the elevation data set. This is not the case anymore: all data outside the elevation data's extent is now painted at elevation 0.
  • The map can now visualize multiple elevation data sets at the same time. In previous versions only the top-most elevation layer is used to generate terrain. Now all layers that contain elevation data are used to generate terrain.
See related article on elevation data for more information.

New featureLuciadCPillar

LuciadCPillar now supports the DTED (Digital Terrain Elevation Data) format. This enables users to decode DTED / DMED (Digital Mean Elevation Data) files and DTED folders and display them efficiently in a LuciadCPillar map. For more details, see:

New featureLuciadCPillar

LuciadCPillar now provides high-level client interfaces to HTTP. The main classes defined are: You can now adapt the HTTP requests sent when fetching resources from web services according to your needs. This is possible either by creating a custom IHttpClientIHttpClientIHttpClient and plugging it into the model decoder options, or by directly using the HttpClientHttpClientHttpClient class after having properly configured it. More information can be found in the article how to customize HTTP requests when loading data. Custom HTTP data loading is supported by the following decoders:

New featureLuciadCPillar

LuciadCPillar for Android allows you to develop GPU accelerated geospatial situational awareness applications targeted to run on Android mobile devices. LuciadCPillar for Android is an SDK that supports both Kotlin and Java development. It is feature equivalent with LuciadCPillar for desktop.

To get started, consult the product documentation and select the Android profile at the top right of the page. The product documentation includes installation guides, a Java API reference and a set of ready-to-run kotlin samples that can be installed on your mobile device from Android studio.

New featureLuciadCPillar

You can now enable GPU texture compression on TileSet3DLayerTileSet3DLayerTileSet3DLayer for OGC 3D Tiles mesh data. This can greatly reduce the amount of GPU memory needed, improve performance and stability.

Enable when displaying meshes with large textures, such as reality capture reconstructions. By default, texture compression is enabled.
Disable when displaying meshes with lookup textures, such as CAD models.

If your environment does not support GPU texture compression, setting the flag has no effect.

New featureLuciadCPillar

LuciadCPillar now offers ambient occlusion and eye-dome lighting graphical effects on 3D maps. See GraphicsEffectsGraphicsEffectsGraphicsEffects, AmbientOcclusionEffectAmbientOcclusionEffectAmbientOcclusionEffect and EyeDomeLightingEffectEyeDomeLightingEffectEyeDomeLightingEffect for details. When enabled, they are applied on all the data on the map.

New featureLuciadCPillar

The GdalModelDecoderGdalModelDecoderGdalModelDecoder now supports decoding of 8 bit indexed color GeoTIFF data.

New featureLuciadCPillar

It is now possible to provide custom raster data and visualize it on the map. This can be accomplished using the new MultilevelTiledRasterModelBuilderMultilevelTiledRasterModelBuilderMultilevelTiledRasterModelBuilder and QuadTreeRasterModelBuilderQuadTreeRasterModelBuilderQuadTreeRasterModelBuilder classes. This for example allows you to implement your own raster format, or position a single image on the map. The article introduction to raster models provides more information on these classes.

You can indicate that your custom raster data may change. To enable this you need to call MultilevelTiledRasterModelBuilder::enableInvalidationMultilevelTiledRasterModelBuilder::enableInvalidationMultilevelTiledRasterModelBuilder::enableInvalidation or QuadTreeRasterModelBuilder::enableInvalidationQuadTreeRasterModelBuilder::enableInvalidationQuadTreeRasterModelBuilder::enableInvalidation. This results in the creation of an IRasterModelIRasterModelIRasterModel which returns true for the method IRasterModel::canInvalidateIRasterModel::canInvalidateIRasterModel::canInvalidate and on which you can call IRasterModel::invalidateIRasterModel::invalidateIRasterModel::invalidate. Invalidating the raster instructs LuciadCPillar to reload the data from the model and update the view accordingly.

New featureLuciadCPillar

It is now possible to use touch controls to navigate the map, and create and edit features. For more details, see:

New featureLuciadCPillar

LuciadCPillar now supports the OGC 3D Tiles and HSPC formats. This enables users to decode large 3D mesh or point cloud data sets and display them efficiently in a LuciadCPillar map. For more details, see:

New featureLuciadCPillar

The CPillar map now supports high DPI rendering. This means that fonts, icons and other map elements are automatically resized in proportion to the display scale configured in the operating system. This also means that map scale calculations use the configured DPI to get a correct interpretation.

When integrating the CPillar map in a UI framework the DPI and the display scale must be configured on the Map::RendererMap::RendererMap::Renderer. You can read more on this in the article on support for high DPI displays. The article on integration within Qt provides details on how this is done for the Qt UI toolkit.

The API allows to provide icons for multiple resolutions such that the CPillar map can use the best applicable for your screen setup. For this purpose, the IIconIIconIIcon class was modified to allow painting an icon in different resolutions.

New featureLuciadCPillar

You can use the new Camera API to manipulate the map's camera. Consult the documentation of the CameraCameraCamera class, and Map::setCameraMap::setCameraMap::setCamera for more information.

New featureLuciadCPillar

Added the possibility to place labels on a path at a given location. These labels can be placed by invoking FeatureCanvas::LabelDrawCommand::onPathFeatureCanvas::LabelDrawCommand::onPathFeatureCanvas::LabelDrawCommand::onPath using an OnPathLabelStyleOnPathLabelStyleOnPathLabelStyle argument.

New featureLuciadCPillar

LuciadCPillar now provides support for using WMS services. The use of the main classes WmsCapabilitiesWmsCapabilitiesWmsCapabilities and WmsModelDecoderWmsModelDecoderWmsModelDecoderis explained in the article on connecting to a WMS service. You can use the data formats sample to connect to Web Map Services.

New featureLuciadCPillar

LuciadCPillar now provides support for labels. You can:
  • add labels that are attached a point
  • add labels that use the same orientation as the line they are attached to
  • add labels inside an area
Additionally
  • labels are decluttered to avoid overlap
  • labels are always painted above all the other content on the map
  • a pin can be drawn to show where the label is attached to its feature
See FeatureCanvas::LabelDrawCommandFeatureCanvas::LabelDrawCommandFeatureCanvas::LabelDrawCommand for more details. The labeling functionality is demonstrated in the label sample.

New featureLuciadCPillar

LuciadCPillar now provides support for decoding SHP files. You can find more details on how to use the GdalModelDecoderGdalModelDecoderGdalModelDecoder in this article. Decoding of SHP data files is available in the data formats sample.

New featureLuciadCPillar

Interactive creation and editing of military symbols is now supported for all symbologies. For more details, see the how-to article on creating and editing military symbols on the map.

New featureLuciadCPillar

LuciadCPillar now provides creation and editing capabilities for the geometry of features on the map. See EditorEditorEditor, CreatorCreatorCreator for more details. There is default creation and editing support for point, polyline, and polygon.

New featureLuciadCPillar

LuciadCPillar now has a controller API to facilitate interaction with the map. Please refer to the IControllerIControllerIController class documentation for more information. A user can now create its own implementation of a controller and can interact with the map in a UI toolkit-independent way. These interactions are for example:
  • Map navigation
  • Selection

New featureLuciadCPillar

Support for reading GeoTIFF files with RGB(A) data has been added. The format is supported via the GdalModelDecoderGdalModelDecoderGdalModelDecoder which uses the GDAL library.

New featureLuciadCPillar

The GeoPackageModelDecoderGeoPackageModelDecoderGeoPackageModelDecoder now supports the GeoPackage 1.0.1, 1.1.0, 1.2.1, and the 1.3.0 specifications.

New featureLuciadCPillar

Visualization of tactical graphics is now supported for all symbologies. Refer to the documentation for more details.

ImprovementLuciadCPillar

It is now possible to make a FeatureLayerFeatureLayerFeatureLayer not queryable, see FeatureLayer::setQueryableFeatureLayer::setQueryableFeatureLayer::setQueryable. When a layer doesn't have features that can be selected, this method prevents it from happening for the entire layer. I then also reduces the performance overhead for that layer in the Map::queryFeaturesMap::queryFeaturesMap::queryFeatures method.

ImprovementLuciadCPillar

LCP-687
LuciadCPillar now offers configuring enabling/disabling atmosphere effects on 3D maps and the colors used by this effect. See GraphicsEffectsGraphicsEffectsGraphicsEffects, AtmosphereEffectAtmosphereEffectAtmosphereEffect for details.

ImprovementLuciadCPillar

LCP-665
It is now possible to call Feature::getValueFeature::getValueFeature::getValue with a more specific geometry type as type parameter.

ImprovementLuciadCPillar

It is now possible to observe changes to the MapMapMap, see Map::addObserverMap::addObserverMap::addObserver.

ImprovementLuciadCPillar

LuciadCPillar has been upgraded to support .NET standard 2.0. It is now much easier to use the LuciadCPillar C# binary on newer .NET implementations. LuciadCPillar already supported .NET Framework 4.7.2 (or later). It now also supports all .NET Core and .NET versions (5 or later).

Note that building and running the LuciadCPillar C# samples still requires .NET Framework 4.7.2.

ImprovementLuciadCPillar

LCP-659
GdalModelDecoderGdalModelDecoderGdalModelDecoder now supports GeoTIFF elevation data using unsigned 16-bit integers. For more information, please read the GdalModelDecoderGdalModelDecoderGdalModelDecoder API documentation and see the updated How to load elevation data article.

ImprovementLuciadCPillar

Feature ids can now be removed in the builder using Feature::Builder::resetIdFeature::Builder::resetIdFeature::Builder::resetId. This can be useful when needing to remove the id of an existing feature. For example, to let an IFeatureModelUpdaterIFeatureModelUpdaterIFeatureModelUpdater assign a new id to it.

ImprovementLuciadCPillar

LCP-652

ImprovementLuciadCPillar

LCP-649

It is now possible to replace the IFeaturePainterIFeaturePainterIFeaturePainter of a FeatureLayerFeatureLayerFeatureLayer by a new feature painter instance. This allows you to change the styling for all features in the layer.

Note: There is currently the limitation that the detail levels of the new IFeaturePainterIFeaturePainterIFeaturePainter must be the same as those of the previous feature painter.

ImprovementLuciadCPillar

LCP-614
The GdalModelDecoderGdalModelDecoderGdalModelDecoder now can read single band GeoTIFF floats or signed integers files for which a mask image is used to indicate the 'no data' values.

ImprovementLuciadCPillar

LCP-583
The constructors and factory methods of some classes now throw an exception when a NaN or infinity value is passed as argument. This will avoid problems later on when LuciadCPillar uses these classes.

ImprovementLuciadCPillar

Improved support for Adaptive Point Size for HSPC point clouds (see PointCloudStyle::Builder::pointSizeAdaptivePointCloudStyle::Builder::pointSizeAdaptivePointCloudStyle::Builder::pointSizeAdaptive). Adaptive point size is now the recommended setting for all point clouds.

ImprovementLuciadCPillar

LCP-551
The installation instructions for windows have been updated for using Visual Studio 2022.

ImprovementLuciadCPillar

LCP-258
Added documentation to method Map::ViewMapTransformation::mapToViewMap::ViewMapTransformation::mapToViewMap::ViewMapTransformation::mapToView on when an exception can be thrown by the method.

ImprovementLuciadCPillar

The MultilevelTiledRasterModelBuilderMultilevelTiledRasterModelBuilderMultilevelTiledRasterModelBuilder now allows to create levels for which the top-left corner to the level bounds is not the same for all levels.

ImprovementLuciadCPillar

The OGC WMTS implementation now accepts Tile Matrix Sets for which the top-left corner is not the same for every Tile Matrix.

ImprovementLuciadCPillar

LCP-386
GeoPackageModelDecoderGeoPackageModelDecoderGeoPackageModelDecoder now correctly sets a no-data value for elevation models, allowing the Map to detect locations where no elevation is available.

ImprovementLuciadCPillar

It is now possible to specify a no-data elevation value in MultilevelTiledRasterModelBuilderMultilevelTiledRasterModelBuilderMultilevelTiledRasterModelBuilder and QuadTreeRasterModelBuilderQuadTreeRasterModelBuilderQuadTreeRasterModelBuilder. This no-data value can be used to specify that no elevation data is available at certain sample locations.

ImprovementLuciadCPillar

LCP-673
The TextStyleTextStyleTextStyle class now correctly documents that Kanji characters are supported.

ImprovementLuciadCPillar

LCP-686
CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider now also documents the list of EPSG codes that are not supported.

ImprovementLuciadCPillar

When parsing WKT strings, CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider now supports compound references with an ellipsoidal vertical datum: VERT_DATUM tag with value 2002 (ellipsoid).

ImprovementLuciadCPillar

When parsing WKT strings, CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider now recognizes "North American 1983 CSRS", "North American Datum 1983 CSRS" and variants as aliases for the "NAD83 Canadian Spatial Reference System" geodetic datum name.

ImprovementLuciadCPillar

CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider now additionally supported the following datums, and coordinate references that make use of it:
  • Korean Datum 1985
  • Macao 1920

ImprovementLuciadCPillar

The EPSG database has been updated to the latest version: 10.088.

ImprovementLuciadCPillar

LCP-574
When drawing an IIconIIconIIcon on the Map, the ImageImageImage instances painted by the icon do not have to be alpha-premultiplied anymore. This applies to the following calls: Previously, using a non alpha-premultiplied ImageImageImage resulted in an exception while rendering. Now the feature is painted correctly.

ImprovementLuciadCPillar

LCP-541
It is now possible to drape text that is drawn using FeatureCanvas::drawTextFeatureCanvas::drawTextFeatureCanvas::drawText.

ImprovementLuciadCPillar

LCP-552
The MapNavigator::PanAction::fromViewLocationMapNavigator::PanAction::fromViewLocationMapNavigator::PanAction::fromViewLocation method was added. This method accepts view coordinates, so it is targeted towards event-based panning. Additionally, when using this method panning will be more limited when using a point near the horizon. This is done to prevent the camera from making very large changes. When using the MapNavigator::PanAction::fromMapNavigator::PanAction::fromMapNavigator::PanAction::from method, panning is not limited.

ImprovementLuciadCPillar

LCP-512
It is now possible to convert between a Luciad.Drawing.Image and a System.Drawing.Bitmap.

ImprovementLuciadCPillar

LCP-437
Retrieving an OGC 3D tiles or HSPC dataset in C# data format sample is no longer blocking the UI.

ImprovementLuciadCPillar

GeometryFactoryGeometryFactoryGeometryFactory now also has a createPoint method that takes a CoordinateCoordinateCoordinate as input.

ImprovementLuciadCPillar

Searching for symbols is now supported in the C# military symbology sample.

ImprovementLuciadCPillar

CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider can now parse more WKT strings that do not contain a TOWGS84 in its datum.

ImprovementLuciadCPillar

The RasterLayerRasterLayerRasterLayer now respects the display scale, which results in better performance on HiDPI screens.

ImprovementLuciadCPillar

LCP-19, LCP-21, LCP-22, LCP-25, LCP-65, LCP-290, LCP-290, LCP-343
Vector loading performance has been improved for larger vector data sets.
  • Data starts appearing on the screen up to 10 times faster right after adding a vector layer or after zooming in to a different detail level.
  • Data loading throughput is up to 2 times larger.
  • Data appears and disappears up to 5-10 times faster while navigating.
  • The map's frame rate is higher while vector data is loaded. Navigation now remains smooth at all times during loading.

ImprovementLuciadCPillar

TouchGestureRecognizerTouchGestureRecognizerTouchGestureRecognizer now more reliably makes the distinction between two-finger touch drag evens and pinch-rotate touch events.

ImprovementLuciadCPillar

Ogc3DTilesModelDecoder::decodeOgc3DTilesModelDecoder::decodeOgc3DTilesModelDecoder::decode has been overloaded so that you can now configure Ogc3DTilesModelDecoder::OptionsOgc3DTilesModelDecoder::OptionsOgc3DTilesModelDecoder::Options for the decoding of OGC 3D tiles data. These options allow you to configure a custom IDataLoaderIDataLoaderIDataLoader to fetch the OGC 3D Tiles resources, in case the default data loading from a server or the file system is not adequate for your use case. HspcModelDecoder::decodeHspcModelDecoder::decodeHspcModelDecoder::decode also supports this.

ImprovementLuciadCPillar

LCP-415
LuciadCPillar now supports HSPC datasets with a reference expressed in WKT (projection-wkt property). Before, only HSPC references expressed with an EPSG code (projection-epsg property) were supported.

ImprovementLuciadCPillar

LCP-19, LCP-21, LCP-22, LCP-25, LCP-343
The performance of the discretizer (which converts vector data to the map's reference) has been improved with a factor 2 to 5. This has a positive impact on overall vector loading times.

ImprovementLuciadCPillar

LCP-392
When using the First person controller in the C++ camera sample, the invisible mouse cursor now stays in the window until the user clicks again or uses the Escape key.

ImprovementLuciadCPillar

LCP-90
The WM(T)S implementations make better use of networking API by re-using server connections. This results in faster loading times.

ImprovementLuciadCPillar

The None MouseCursorMouseCursorMouseCursor was added to allow hiding the map cursor.

ImprovementLuciadCPillar

Draping of vector data has been improved in various ways. Many cases where draped vector data appeared blurry have been fixed.

ImprovementLuciadCPillar

LCP-214, LCP-216
You can override the color of a symbol by using overrideColor in MilitarySymbolStyle::BuilderMilitarySymbolStyle::BuilderMilitarySymbolStyle::Builder. This can be used to highlight a symbol. The symbology sample now shows how to do this when selecting tactical symbols.

ImprovementLuciadCPillar

Map::queryFeatures can now be called from the UI thread and passes its result to its callback synchronously.

ImprovementLuciadCPillar

LuciadCPillar now has API to allow providing user credentials for protected network resources. The API also allows to configure use of a proxy for network resources. This is available for WMS, WMTS, OGC 3D Tiles, and HSPC. For more details, see:

ImprovementLuciadCPillar

Event handlers like PanEventHandlerPanEventHandlerPanEventHandler or RotateEventHandlerRotateEventHandlerRotateEventHandler are now returning an EventStatusEventStatusEventStatus indicating if they consumed the event or not.

ImprovementLuciadCPillar

LCP-55
The solution generated by CMake for Visual Studio is now multi configuration compatible (C++ and C#). You don't need to specify the build type anymore at the solution creation time.

ImprovementLuciadCPillar

It is now possible to check if two CoordinateReferenceCoordinateReferenceCoordinateReference instances are equal with respect to transforming using Transformation::isIdentityTransformation::isIdentityTransformation::isIdentity. The result of this check is different from the regular equality operator that can be found on CoordinateReferenceCoordinateReferenceCoordinateReference: it only uses the data that is used during transformations, and not at the references metadata.

ImprovementLuciadCPillar

LCP-176
The GeoPackageModelDecoderGeoPackageModelDecoderGeoPackageModelDecoder now supports elevation data encoded as TIFF.

ImprovementLuciadCPillar

LCP-306
Improved the consistency of the string representation for MapScaleMapScaleMapScale for C++ (Windows and Linux), C#, and Android.

ImprovementLuciadCPillar

LCP-586
Improved the WPF map control integration code by avoiding multiple initialisations in the Loaded method. This could for example happen when integrating the WPF map control within a TabControl and switching between the tabs.

ImprovementLuciadCPillar

LCP-437
Connecting to a WMS or WMTS server in C# data format sample is no longer blocking the UI.

ImprovementLuciadCPillar

CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider now supports EPSG references based on the IG05/12 Intermediate datum:
  • EPSG:6988
  • EPSG:6989
  • EPSG:6990
  • EPSG:6991

ImprovementLuciadCPillar

LCP-75
GeoPackageModelDecoderGeoPackageModelDecoderGeoPackageModelDecoder: the decoder now supports decoding geometries with an optional elevation (Z) value.

ImprovementLuciadCPillar

LCP-338
The bounds of a GeoPackage raster model is now based on the information advertised in the GeoPackage contents table instead of the extent of the tile matrix set.

ImprovementLuciadCPillar

The EPSG database was updated to the latest version: 10.072.

ImprovementLuciadCPillar

LCP-343
Discretizing lines is now faster. This means that data that is visualized using FeatureLayerFeatureLayerFeatureLayer now requires less processing time, and that it appears faster on the screen.

ImprovementLuciadCPillar

LCP-333
The WMTS handling of responses has become more robust to work with WMTS servers that return incorrect response information. For example when a server claims to support PNG and returns the mime-type image/png but in fact returns a JPEG image this is detected. A warning is logged about the inconsistency but the image is loaded for visualization.

ImprovementLuciadCPillar

LCP-323
The doxygen documentation for the C++ API now shows the header that is needed to include a type.

ImprovementLuciadCPillar

LCP-314
The Map::setBackgroundColorMap::setBackgroundColorMap::setBackgroundColor method was added. The background color is used if no imagery layers are present (3D and 2D). In 3D, the background color is also used for the space.

ImprovementLuciadCPillar

LCP-317
MapNavigator::RotateActionMapNavigator::RotateActionMapNavigator::RotateAction only had methods to set delta values for the camera rotation. It is now also possible to set target values for the camera rotation. This means that you can now specify the rotations the camera will have at the end of the rotate action.

ImprovementLuciadCPillar

LCP-200
All C++ samples, based on Qt Quick, have a mouse location component at the bottom of the map. The C# data formats sample has a panel showing this information at the bottom of the map.

ImprovementLuciadCPillar

The Map::Renderer::projectPointOnTerrainMap::Renderer::projectPointOnTerrainMap::Renderer::projectPointOnTerrain method was added. This method calculates a point on the terrain or ellipsoid, perpendicular to a given coordinate. It can for example be used to implement your own above terrain camera constraint.

ImprovementLuciadCPillar

MapNavigatorMapNavigatorMapNavigator now has methods to enable, disable or configure map navigation constraints:
  • Above constraint: to keep the camera above the terrain in 3D
  • Pitch constraint: to limit the camera tilt in 3D
  • Bounds constraint: to keep the camera inside a defined bounds in 2D
  • Scale constraint: to prevent the camera from zooming in or out too far in 2D

ImprovementLuciadCPillar

Added support for the fixed width font Inconsolata. None of the already supported fonts has the property to be fixed width. The font is used for the mouse location read-out.

ImprovementLuciadCPillar

It is now possible to re-initialize the EnvironmentEnvironmentEnvironment after it has been cleaned up.

ImprovementLuciadCPillar

LCP-282
It is now possible to create labels with multiple bits of texts with different styles. You can create a TextBlockTextBlockTextBlock with a TextBlock::BuilderTextBlock::BuilderTextBlock::Builder and forward it to FeatureCanvas::LabelDrawCommand::textFeatureCanvas::LabelDrawCommand::textFeatureCanvas::LabelDrawCommand::text.

ImprovementLuciadCPillar

LCP-301
Performance improvement in C# for creation of Features: Feature.Builder.Value is now faster.

ImprovementLuciadCPillar

LCP-301
Performance improvement for FeatureLayerFeatureLayerFeatureLayer instances without any labels.

ImprovementLuciadCPillar

You can now make sure that labels are never removed, even when they overlap with other labels. This can be done by calling FeatureCanvas::LabelDrawCommand::labelGroupFeatureCanvas::LabelDrawCommand::labelGroupFeatureCanvas::LabelDrawCommand::labelGroup with LabelGroup::NoDeclutterLabelGroup::NoDeclutterLabelGroup::NoDeclutter as value.

ImprovementLuciadCPillar

LCP-295
The support for WMTS is extended to tile matrix sets that are not a quad-tree structure. So, there is no longer the requirement that the extent of the tile matrices is the same over all levels and that the number of rows/columns is a ratio of two for adjacent levels.

ImprovementLuciadCPillar

LCP-145
Files can now be opened using drag and drop in the data formats samples.

ImprovementLuciadCPillar

LCD-12276
CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider now supports WKT strings that contain a "Local" projection parameter, which corresponds to an orthographic projection.

ImprovementLuciadCPillar

Improved support for non-latin alphabets. Both right-to-left and left-to-right alphabets are supported. A subset of the Noto font family from google is now available from CPillar (see https://www.google.com/get/noto/ ). Supported alphabets are: Arabic, Armenian, Bengali, Cyrillic, Devanagari, Georgian, Greek, Gujarati, Gurmukhi, Hangul, Han, Hebrew, Hiragana, Kannada, Katakana, Lao, Latin, Malayalam, Oriya, Tamil, Telugu, Thai. You can set the font in TextStyle::Builder::fontNameTextStyle::Builder::fontNameTextStyle::Builder::fontName. TextStyles can be forwarded to FeatureCanvas::TextDrawCommandFeatureCanvas::TextDrawCommandFeatureCanvas::TextDrawCommand and FeatureCanvas::LabelDrawCommandFeatureCanvas::LabelDrawCommandFeatureCanvas::LabelDrawCommand.

ImprovementLuciadCPillar

LCP-267
Destroying the Map while loading a large file with vector data could take a long time.

ImprovementLuciadCPillar

LCD-11798
The EPSG database was updated to version 10.018.

ImprovementLuciadCPillar

LCP-264
CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider now uses more precise parameters to transform from S-JTSK to WGS 84. This affects the following codes:
  • EPSG:2065
  • EPSG:4156
  • EPSG:4818
  • EPSG:5221
  • EPSG:5513
  • EPSG:5514

ImprovementLuciadCPillar

LCP-257
CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider now supports "Australian 1984" (and variants) as alias for AGD84 for WKT strings.

ImprovementLuciadCPillar

LCP-159
The samples were restructured to further emphasize what is demonstrated in each of them.

ImprovementLuciadCPillar

ImprovementLuciadCPillar

LCP-204
CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider now has support for WKT and EPSG references that use the Krovak projection. The following EPSG codes that use this projection are now supported:
  • EPSG:2065
  • EPSG:5221
  • EPSG:5513
  • EPSG:5514
  • EPSG:8352
  • EPSG:8353

ImprovementLuciadCPillar

Military icons are now shown as billboards in 3D by default, in line with the recommendations of the military standards. You can adjust this in the MilitarySymbologyCanvas::DrawCommand.

ImprovementLuciadCPillar

The Feature::asBuilderFeature::asBuilderFeature::asBuilder method was added. This method allows to copy and modify an existing FeatureFeatureFeature.

ImprovementLuciadCPillar

LCD-11339
CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider now also has support for http://www.opengis.net/def/crs/OGC/1.3/CRS84 and http://www.opengis.net/def/crs/OGC/0/CRS84h.

ImprovementLuciadCPillar

Fixed minor flickering issues while raster data was being loaded.

ImprovementLuciadCPillar

You can now directly query ArcBandArcBandArcBand for its constituting arcs and lines.

ImprovementLuciadCPillar

ImprovementLuciadCPillar

LCP-109
The feature removal performance of FeatureLayerFeatureLayerFeatureLayer has been improved in the case of many small features, like roads.

ImprovementLuciadCPillar

LCP-127
Calling luciad::Exception::getStackTraceluciad::Exception::getStackTraceluciad::Exception::getStackTrace was very slow on Windows. Generating a single stack trace could take more than 30 seconds. This is now reduced to less than a second.

Bug fixLuciadCPillar

LCP-694
Fixed a rare crash that could occur while navigating on a 3D map.

Bug fixLuciadCPillar

LCP-670
When zooming close to the earth surface and tilting the camera, labels of features behind the horizon were often still painted.

Bug fixLuciadCPillar

LCP-630
A bug in the Android samples where the BottomSheet swipe gesture would break after changing the screen orientation has been fixed.

Bug fixLuciadCPillar

LCP-644
Fix a rare crash that could occur in a background thread when painting a feature layer using labels.

Bug fixLuciadCPillar

Draping of vector and raster data has been improved. Cases where vector or raster data could be blurry, or would be clipped at the side of the view have been fixed.

Bug fixLuciadCPillar

LCP-636
Fix for possible crash when many icons are shown for the first time simultaneously.

Bug fixLuciadCPillar

LCP-342
The IIcon::createPainterIIcon::createPainterIIcon::createPainter method is now called less often by the MapMapMap. This is especially beneficial when using the LabelDrawCommand::text method. When used for features that change very often, this could result in degraded update performance.

Bug fixLuciadCPillar

LCP-689
Fitting on a bounds with elevation and a width and height of (almost) zero ignored the elevation.

Bug fixLuciadCPillar

LCP-685
Map::queryFeaturesMap::queryFeaturesMap::queryFeatures could temporarily return features of a layer that was already removed from the Map's LayerListLayerListLayerList.

Bug fixLuciadCPillar

LCP-674
Using an IFeatureModelIFeatureModelIFeatureModel with a slow queryBounds implementation now doesn't impact the framerate of the MapMapMap anymore.

Bug fixLuciadCPillar

LCP-677
Fixed a library packaging issue on Linux. Symbols for statically linked libraries are now included within the LuciadCPillar library and their visibility is hidden.

Bug fixLuciadCPillar

LCP-667
Display of text could be incorrectly rendered on the map when it contained non-ascii characters.

Bug fixLuciadCPillar

LCP-669
The robustness of FeatureLayerFeatureLayerFeatureLayer's spatial loading strategy was improved. Previously, certain conditions could cause excessive memory usage. These conditions include: This is now fixed.

Bug fixLuciadCPillar

LCP-668
Removing and re-adding the same layer instance could cause a crash.

Bug fixLuciadCPillar

LCP-672
Setting and getting a MapScaleMapScaleMapScale instance on an object could result in different denominator values.

Bug fixLuciadCPillar

LCP-656
The methods in GeodesyCalculationsGeodesyCalculationsGeodesyCalculations could return incorrect results when passing a geodesic coordinate with a latitude outside the [-90.0, 90.0] interval. This also affected how geometries with latitudes outside the [-90.0, 90.0] interval were painted. This is now fixed.

Bug fixLuciadCPillar

LCP-642
Fixed a very rare crash that could occur in the rendering pipeline when adding features to a model.

Bug fixLuciadCPillar

LCP-593

Since the 2022.0 release, QQuickMapObject and QQuickMapRenderer didn't allow creating multiple maps anymore. This is now possible again.

When you have copies of these classes, you can fix this issue by copying the new versions of these classes from the LuciadCPillar sample code to your application.

Bug fixLuciadCPillar

Some of the EPSG references parsed by CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider had incorrect projection parameters. This affected references where the EPSG database defines parameters in a different unit than meters or degrees:
  • EPSG:3359
  • EPSG:22391 and EPSG:22392
  • EPSG:22780
  • EPSG:26191 to EPSG:26195
  • EPSG:26814 and EPSG:26815
  • EPSG:26819 to EPSG:26822
  • EPSG:26825 and EPSG:26826
  • EPSG:26830 to EPSG:26833
  • EPSG:26836 and EPSG:26837
  • EPSG:26841 to EPSG:26844
  • EPSG:30491 and EPSG:30492
  • EPSG:30791 and EPSG:30792

Bug fixLuciadCPillar

LCP-612
Surfaces that are often updated sometimes disappear or change styling for a couple of frames.

Bug fixLuciadCPillar

LCP-615
When painting a feature with multiple sub-parts by using multiple FeatureCanvasFeatureCanvasFeatureCanvas draw methods, the Map::queryFeaturesMap::queryFeaturesMap::queryFeatures method would not always return the top-most feature.

Bug fixLuciadCPillar

LCP-609
AmbientOcclusionEffectAmbientOcclusionEffectAmbientOcclusionEffect: The ambient occlusion effect was sometimes incorrectly applied on icons.

Bug fixLuciadCPillar

Fixed a rare exception that could happen while editing a polyline or polyline ring and removing a point from it.

Bug fixLuciadCPillar

LCP-172, LCP-607
While inserting a new point in a polyline or polyline ring, one of the new segments didn't immediately show a new insert handle. This was fixed in:
  • PolylineHandlesProvider
  • PolylineRingHandlesProvider

Bug fixLuciadCPillar

LCP-606
Large geocentric polygons were not flat, but followed the ellipsoid's curvature in 3D.

Bug fixLuciadCPillar

LCP-588
Draped geometries that are defined in a reference with a geodetic datum different from WGS84 were not painted at the correct location or altitude.

Bug fixLuciadCPillar

LCP-594
Fixed a crash in debug mode when adding an on path label to a line segment that only contains the same points, or that falls completely outside the map's projection boundary.

Bug fixLuciadCPillar

LCP-587
Fixed a potential crash when destroying the Map while interacting with it (panning/rotating). This issue could occur on all platforms, but it was easiest to trigger in C# or Java (Android).

Bug fixLuciadCPillar

LCP-573
When using a debug build of LuciadCPillar, a rare crash could occur for feature data that is often updated, added and removed while navigating.

Bug fixLuciadCPillar

LCP-573, LCP-312
When using a debug build of LuciadCPillar, a rare crash could occur for feature data that is often updated, added and removed and that is displayed using a label.

Bug fixLuciadCPillar

LCP-576
Fix a bug in the data formats sample where an error dialog was displayed when trying to access a web service which requires authentication.

Bug fixLuciadCPillar

LCP-575
Decoding of GeoTIFF files with a single band, not representing a PaletteIndex, could result in a crash. Now the decoder returns a proper error message.

Bug fixLuciadCPillar

LCP-569
Parts of a polygon (or another type of surface) were not always filled correctly when visualized on a 3D map. This was a regression in the previous patch release.

Bug fixLuciadCPillar

LCP-567
When using a map with a reference that uses an equidistant cylindrical or miller projection, bounds with an upper or lower edge on the pole were not visualized correctly .

Bug fixLuciadCPillar

Fixed an issue where closed shapes that have a geocentric reference and are defined parallel to the Y/Z plane were not correctly tessellated. As a consequence, they were not rendered properly with a fill style.

Bug fixLuciadCPillar

LCP-488, LCP-562
A memory leak was fixed in the C# API. This memory leak was triggered, among others, by MouseGestureRecognizerMouseGestureRecognizerMouseGestureRecognizer sending IInputEventIInputEventIInputEvent instances to its IInputEventCallbackIInputEventCallbackIInputEventCallback.

Bug fixLuciadCPillar

LCP-542
FeatureCanvasFeatureCanvasFeatureCanvas: when painting an icon with an orientation and a RelativePositionRelativePositionRelativePosition, the position's offsets were not correctly rotated along when rotating the map.

Bug fixLuciadCPillar

LCP-552
MapNavigator::newPanActionMapNavigator::newPanActionMapNavigator::newPanAction: When panning to a location at a far away distance, the camera would end up somewhere in between the start and destination of the pan operation instead of on the destination.

Bug fixLuciadCPillar

LCP-549

Bug fixLuciadCPillar

LCP-531, LCP-533
RasterLayerRasterLayerRasterLayer: part of the imagery could be clipped for certain camera positions when elevation data was loaded.

Bug fixLuciadCPillar

LCP-536
Fix crash in debug mode when resizing a Map with a large amount.

Bug fixLuciadCPillar

LCP-530
ZoomEventHandlerZoomEventHandlerZoomEventHandler would throw an exception when trying to zoom before the map has been painted.

Bug fixLuciadCPillar

LCP-527
When creating a feature using CreatorCreatorCreator for a layer that is configured with an IFeaturePainterIFeaturePainterIFeaturePainter that configures detail level scales, a crash would occur when calling FeaturePainterContext::getDetailLevelFeaturePainterContext::getDetailLevelFeaturePainterContext::getDetailLevel. This is now fixed.

Bug fixLuciadCPillar

LCP-521
The method IMultilevelTiledRasterDataRetrieverCallback::onImageAvailableIMultilevelTiledRasterDataRetrieverCallback::onImageAvailableIMultilevelTiledRasterDataRetrieverCallback::onImageAvailable did not correctly take the alpha pre-multiplication into account. This resulted in the color to be treated as an opaque color.

Bug fixLuciadCPillar

LCP-89
The GeodesyCalculations::distance3DGeodesyCalculations::distance3DGeodesyCalculations::distance3D method didn't return correct results when using a geodetic reference.

Bug fixLuciadCPillar

GdalModelDecoderGdalModelDecoderGdalModelDecoder: some files would cause a crash while a feature query is performed when no geometry could be found for a feature. A warning is logged now instead.

Bug fixLuciadCPillar

Performing a query by id on GeoPackage vector data or SHP data with a very large amount of features (around 32768) would result in no features being returned by the query.

Bug fixLuciadCPillar

When selecting a feature from a layer that was not yet painted for the first time, the feature was not painted as selected.

Bug fixLuciadCPillar

The classes Luciad.Symbology.Military.Standards and Luciad.Symbology.MilitarySymbologyNode.SymbolTypes have been removed from the C# API. In C#, methods to obtain a list of possible values and a string representation are by convention available on the enumeration type itself.

Bug fixLuciadCPillar

When an exception was thrown during feature loading, it would sometimes not be propagated correctly. This could potentially lead to no information being shown about what went wrong, or to feature loading being broke completely in rare cases.

Bug fixLuciadCPillar

LCP-403, LCP-404
Fix for crash in C# when passing an interface implementation to the LuciadCPillar API in a multithreaded context

Bug fixLuciadCPillar

LCP-431
The C# samples could get stuck when using them for a couple of minutes. The problem was caused by the C# sample class ScreenInfo, which created a device context without deleting it afterwards. If you are using this class in your own application, you will need to copy the new version of this class into your application as well.

Bug fixLuciadCPillar

LCP-434
Fixed a possible memory leak when loading OGC 3D Tiles containing physically based rendering (PBR) data.

Bug fixLuciadCPillar

LCP-408
Fixed a bug where RGB color information from point clouds encoded in OGC 3D Tiles was not visualized. Before the fix, points were colored white.

Bug fixLuciadCPillar

Removing a raster layer or closing the map while raster data is being loaded could rarely lead to a crash.

Bug fixLuciadCPillar

A crash could occur when resizing the map while labels are displayed.

Bug fixLuciadCPillar

LCP-400
When displaying a map on a screen with a display scale different from 100%, the application could crash when resizing the map during a camera animation.

Bug fixLuciadCPillar

LCP-399
When a feature is being edited using touch, a 2-finger drag event would translate the feature or one of its handles instead of tilting the map.

Bug fixLuciadCPillar

The CoordinateReferenceCoordinateReferenceCoordinateReference equality and hash implementations are now implemented more strictly. Previously these methods used the identifier equality and hash, which could lead to incorrect false positives.

Bug fixLuciadCPillar

LCP-577
Fix for an issue where GeoPackage raster files with tile matrix sets starting with a zoom level greater than zero were not visualized correctly.

Bug fixLuciadCPillar

LCP-538
Fix for spelling mistake in the "Date/Time group" modifier description in all military symbologies.

Bug fixLuciadCPillar

LCP-349, LCP-436
Editing a point height while the camera is facing down directly above it could trigger an exception.

Bug fixLuciadCPillar

LCP-442
Panning near the horizon with a tilted camera made the map jump to a new location.

Bug fixLuciadCPillar

LCP-416
RasterLayerRasterLayerRasterLayer: For some specific camera positions it was possible that parts of the terrain were missing. This resulted in gaps in the visualization of the terrain and possibly large camera movements when navigating.

Bug fixLuciadCPillar

Fix for a thread safety issue when using Map::getAnimationManagerMap::getAnimationManagerMap::getAnimationManager. This could for example lead to the camera jumping to an incorrect location when zooming in and out in quick succession using MapNavigator::ZoomActionMapNavigator::ZoomActionMapNavigator::ZoomAction.

Bug fixLuciadCPillar

LCP-418
Fixed a potential crash when removing and then re-adding a layer with a selected feature.

Bug fixLuciadCPillar

In rare cases, while navigating around the Map, blocks of features were not correctly loaded.

Bug fixLuciadCPillar

Fixed an issue in MapNavigatorMapNavigatorMapNavigator that could potentially interrupt ongoing animations, and in rare cases could lead to a crash.

Bug fixLuciadCPillar

LCP-433
Fix for vertical stretched artefacts on some 2D projections.

Bug fixLuciadCPillar

LCP-374
On a 3D map with elevation data present, parts of the terrain were missing when the terrain data used a reference other than a geodetic (WGS84) reference.

Bug fixLuciadCPillar

LCP-371, LCP-372
Fixed a potential bug where the system locale could cause text to be parsed incorrectly. This could happen for:
  • Well Known Text (WKT) reference
  • WMS capabilities
  • GeoTIFF

Bug fixLuciadCPillar

LCP-365
Feature models with points that are defined in a projected (grid) coordinate reference system are now correctly displayed.

Bug fixLuciadCPillar

LCP-352
Toggling the visibility of a layer in the C++ sample's layer control in quick succession inverted the checkbox' behavior.

Bug fixLuciadCPillar

LCP-347
Labels of points with a draped icon could become detached from the icon when zooming in close to the terrain surface.

Bug fixLuciadCPillar

LCP-358
Fixed a crash when continuously toggling on and off some elevation layers.

Bug fixLuciadCPillar

LCP-357
Fixed a potential GUI freezing when using Map::IRendererCallbackMap::IRendererCallbackMap::IRendererCallback in a WinForms application.

Bug fixLuciadCPillar

LCP-350
Fixed a potential crash for certain military symbols during editing, when they have a label.

Bug fixLuciadCPillar

LCP-346
Fixed a potential crash when using labels with a draped anchor.

Bug fixLuciadCPillar

LCP-308
Fixed an issue which could lead to Features being removed from the map when updated. The issue only occurred when the model's query configuration had the FeatureQueryConfiguration::Builder::loadNothingForNonDefinedScales flag set in addition to at least one map scale condition.

Bug fixLuciadCPillar

LCP-345
Fixed an issue which could lead to a KeyNotFoundException when using the default logging.

Bug fixLuciadCPillar

LCP-329
Fixed an issue which could lead to the MapMapMap getting stuck at destruction time.

Bug fixLuciadCPillar

When replacing a label with a label of a different type, the first label would never be deleted. This would for example happen when painting a point label first, and later replace it by an onPath label.

Bug fixLuciadCPillar

When using a 2D map, Map::ViewMapTransformation::mapToViewMap::ViewMapTransformation::mapToViewMap::ViewMapTransformation::mapToView could return a nullopt result when transforming map points with a z-value different from 0. The fix for this bug also fixes a problem during PolylinePolylinePolyline editing: when trying to add a point to the start or end of the polyline, PolylineHandlesProviderPolylineHandlesProviderPolylineHandlesProvider always chose to add it to the end.

Bug fixLuciadCPillar

LCP-325
When an observer removes another observer of the same type, the removed instance could still be called. Depending on the observer implementation, this can potentially lead to crashes.

Bug fixLuciadCPillar

LCP-315
Fixed a crash when a MapNavigator::ZoomActionMapNavigator::ZoomActionMapNavigator::ZoomAction is used on some WMS/WMTS layers in 2D.

Bug fixLuciadCPillar

LCP-402
Encirclement and Strong Point symbols are now painted with a dashed stroke when set to the Planned/Anticipated state.

Bug fixLuciadCPillar

LCP-324
There was a regression in the WMS support in case the GetMap request needed to use the CRS EPSG:4326. The visualization of the WMS layer was wrong.

Bug fixLuciadCPillar

LCP-303
Labels along a path are now oriented correctly on very small curves.

Bug fixLuciadCPillar

LCP-302
Labels attached to point geometries with FeatureCanvas::LabelDrawCommand::anchorDrapedFeatureCanvas::LabelDrawCommand::anchorDrapedFeatureCanvas::LabelDrawCommand::anchorDraped as true are now displayed correctly on elevated terrain.

Bug fixLuciadCPillar

LCP-299

Bug fixLuciadCPillar

LCP-297
Fix for non-draped icons that were not shown correctly on elevated terrain.

Bug fixLuciadCPillar

LCP-283
Fix for a race condition occurring in some QtQuick samples, where the render thread would access a map before initialization.

Bug fixLuciadCPillar

LCP-207
Fix for flipped images that would appear in complex strokes that were part of a style shared among multiple curves.

Bug fixLuciadCPillar

LCP-423
Fix for possible erroneous icons shown when similar military icon symbols from different standards are present on the same map.

Bug fixLuciadCPillar

LCP-57
Non-draped icons sometimes disappeared partially in the terrain on a 3D map. They are now automatically placed above the ground when the view is tilted. This also applies to labels that are attached to these icons.

Bug fixLuciadCPillar

LCP-274
Samples can now be built if CPillar is installed in a path containing spaces.

Bug fixLuciadCPillar

LCP-260
Some actions linked to the MapNavigatorMapNavigatorMapNavigator now check the validity of their parameters:

Bug fixLuciadCPillar

LCP-259
Fixed a crash when a MapNavigator::ZoomActionMapNavigator::ZoomActionMapNavigator::ZoomAction is used with a target scale and without animation.

Bug fixLuciadCPillar

LCP-269
Editing of a non-military feature when a symbology layer is present on the map was leading to an uncaught exception. Symbology layers now handle this case gracefully.

Bug fixLuciadCPillar

LCP-151
Datasets containing feature data and using a projected coordinate reference are now correctly loaded.

Bug fixLuciadCPillar

LCP-263
In rare cases, a feature could disappear for a split second when both its geometry and its style have changed at the same time.

Bug fixLuciadCPillar

Points with a large elevation were not painted on a map with a 2D reference.

Bug fixLuciadCPillar

LCP-252, LCP-253
The performance and overall memory usage related to text and icons has been improved. It fixes a memory leak in the sample as well as slowdowns when text appears on the map.

Bug fixLuciadCPillar

Fix a crash that could occur when very quickly toggling the visibility of a layer multiple times.

Bug fixLuciadCPillar

LCD-12108
The bounds calculations for geodetic circle and circular arc implementations, like CircleByCenterPointCircleByCenterPointCircleByCenterPoint and CircularArcByCenterPointCircularArcByCenterPointCircularArcByCenterPoint are now more accurate. Before, the bounds were too small in some cases.

Bug fixLuciadCPillar

LCP-254
When using dynamic data with different representations on different map scales the performance of processing the feature changes could become slow when zooming into a detailed representation and then zooming out again to a less detailed representation. The processing has been fixed to handle such case.

Bug fixLuciadCPillar

LCD-12169
A few EPSG reference are defined using axes that point west and south, instead of the usual east and north:
  • EPSG:2065
  • EPSG:5513
  • EPSG:8352
The coordinates of these references are now correctly interpreted and transformed.

Bug fixLuciadCPillar

LCP-278
CoordinateReferenceParser didn't always correctly take a non-zero prime meridian and a different angular unit into account for WKT and EPSG strings. This could result in:
  • an incorrect prime meridian shift
  • a prime meridian shift that was applied twice
  • incorrect projection parameters

Bug fixLuciadCPillar

LCP-257
CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider: WKT strings using the NAD83 (National Spatial Reference System 2011) datum and without TOWGS84 parameter were incorrectly formatted as an EPSG code using an other NAD83 version.

Bug fixLuciadCPillar

LCP-169
The prepend/append handles when editing a PolylinePolylinePolyline are now always chosen correctly.

Bug fixLuciadCPillar

The method ExpressionValue::getFloatValueExpressionValue::getFloatValueExpressionValue::getFloatValue now correctly returns a float instead of a a double.

Bug fixLuciadCPillar

LCP-148
Layers can now be shared between several maps.

Bug fixLuciadCPillar

LCP-167
Fixed an issue with the layer order being incorrect in some samples.

Bug fixLuciadCPillar

Curves with a non-zero elevation were not painted correctly, or not painted at all, on a 2D map.

Bug fixLuciadCPillar

LCP-46
Fixed an issue with the camera when the map is resized while an animation is running. The result was that the camera width and height were not correctly set.

Bug fixLuciadCPillar

LCP-45
Fitting on a model having a data extent spanning almost the entire world didn't show the entire globe for a map with a 3D reference.

Bug fixLuciadCPillar

LCP-154
A crash could occur when first removing a feature from an IFeatureModelIFeatureModelIFeatureModel, and then removing its layer from the map.

Bug fixLuciadCPillar

LCP-108
Fixed a performance issue in C#. The case where multiple points are painted using the same IIcon instance was not optimally handled.

Bug fixLuciadCPillar

LCP-256
A crash could occur when closing the application if the map's controller uses HoverEventHandlerHoverEventHandlerHoverEventHandler or SelectEventHandlerSelectEventHandlerSelectEventHandler.

Bug fixLuciadCPillar

LCP-255
A crash could occur when a layer editable status is toggled several times.

Bug fixLuciadCPillar

LCP-251
C# WPF samples were having warnings related to file dependency between the .xaml and the .xaml.cs files.

Bug fixLuciadCPillar

LCP-133
The following APP6-D symbols did not display a (correct) dimension icon:
Set Code Symbol Code Name
10 111001 LAND UNIT - Command and Control - Signal – Radio
10 111002 LAND UNIT - Command and Control - Signal - Radio Relay
10 111003 LAND UNIT - Command and Control - Signal – Teletype
10 111004 LAND UNIT - Command and Control - Signal - Tactical Satellite
10 111005 LAND UNIT - Command and Control - Signal - Video Imagery (Combat Camera)

Upgrade considerationLuciadCPillar

The class ImageIconImageIconImageIcon has been moved. In case you are using this class you need to change the following in your code:
  • C++: include <luciad/drawing/ImageIcon.h>
  • C#: using Luciad.Drawing
  • Android: import com.luciad.drawing.ImageIcon

Upgrade considerationLuciadCPillar

The GDAL library and its dependencies have been updated.
  • GDAL: updated to version 3.7.0
  • PROJ: updated to version 9.1.1
  • json-c: version 0.17, used by GDAL
  • libtiff: version 4.5.1, used by GDAL
  • nlohmann_json: version 3.11.2, used by PROJ

Upgrade considerationLuciadCPillar

It's now possible to get notifications when the EditState of an IEditHandleIEditHandleIEditHandle has changed. For this purpose, the IEditHandleIEditHandleIEditHandle interface has been extended with the IEditHandle::addEditStateObserverIEditHandle::addEditStateObserverIEditHandle::addEditStateObserver and the IEditHandle::removeEditStateObserverIEditHandle::removeEditStateObserverIEditHandle::removeEditStateObserver methods, which must be implemented now.

Upgrade considerationLuciadCPillar

LCP-683
The ExpressionFactoryExpressionFactoryExpressionFactory now supports an expression representing a LIKE operation. You can find it as ExpressionFactory::likeExpressionFactory::likeExpressionFactory::like.
As a consequence the IExpressionVisitorIExpressionVisitorIExpressionVisitor interface has been extended with the method IExpressionVisitor::visitLikeIExpressionVisitor::visitLikeIExpressionVisitor::visitLike which must be implemented now.

Upgrade considerationLuciadCPillar

Upgrade considerationLuciadCPillar

LCP-619
The minimum required version of Visual Studio has been raised from Visual Studio 2017 (v15.7) to Visual Studio 2019 (v16).

Upgrade considerationLuciadCPillar

LCP-557
The OpenSSL library has been updated to version 3.0.11.

Upgrade considerationLuciadCPillar

The boost library has been updated to version 1.83.0.

Upgrade considerationLuciadCPillar

IFeatureModelIFeatureModelIFeatureModel now has API that allows to save changes to the model using the getPersistenceManager() method. See FeatureModelPersistenceManagerFeatureModelPersistenceManagerFeatureModelPersistenceManager. This change breaks existing IFeatureModelIFeatureModelIFeatureModel implementations. These can be fixed by implementing the new method, and returning null.

Upgrade considerationLuciadCPillar

The AsBitmap and the FromBitmap methods on Luciad.Drawing.Image were removed from the API to improve compatibility with multiple .NET versions. A class containing these utility methods was added to the sample code instead: Common.Drawing.ImageUtils.

Upgrade considerationLuciadCPillar

The versions of the Android Jetpack libraries the LuciadCPilar Android samples depend on have been updated. This has no effect on the use of the LuciadCPillar API.

Upgrade considerationLuciadCPillar

The minimum supported Android API level by LuciadCPillar is now 29. For more information about evolution in supported API Level, please refer to the System Requirements documentation.

Upgrade considerationLuciadCPillar

Linux distributions using the old ABI are no longer supported by LuciadCPillar. This means that you can no longer develop and deploy LuciadCPillar on RHEL 7 or CentOS 7. Note that RHEL 8 and up use the new ABI and are supported.

Upgrade considerationLuciadCPillar

The MouseCursor::Default and Priority::Default constants were renamed to MouseCursor::DefaultCursor and Priority::Normal.

Upgrade considerationLuciadCPillar

MapNavigator::getAnimationKey was removed. In order to cancel navigate actions that were initiated by MapNavigatorMapNavigatorMapNavigator, you can now use the MapNavigator::cancelMapNavigator::cancelMapNavigator::cancel method instead. This method does not only cancel animations, but also other non-animated MapNavigatorMapNavigatorMapNavigator actions.

Upgrade considerationLuciadCPillar

PanAction::to and ZoomAction::to have been renamed to PanAction::toLocation and ZoomAction::toLocation respectively.
This prevents a naming clash with the Kotlin to infix.

Upgrade considerationLuciadCPillar

The following third party libraries have been updated:
  • libcurl: updated to version 7.86.0
  • openssl: updated to version 1.1.1s
  • zlib: updated to version 1.2.13

Upgrade considerationLuciadCPillar

TileSet3DLayerTileSet3DLayerTileSet3DLayer uses texture compression by default. This has the advantage that less GPU memory is used. In case artifacts would be noticeable in textures on a OGC 3D tiles mesh, you can disable texture compression via TileSet3DLayer::Builder::textureCompressionEnabledTileSet3DLayer::Builder::textureCompressionEnabledTileSet3DLayer::Builder::textureCompressionEnabled.

Upgrade considerationLuciadCPillar

The LuciadCPillar for Android samples depend on Android Jetpack libraries (androidx namespace).

Upgrade considerationLuciadCPillar

LuciadCPillar depends on the JetBrains Java Annotations library. This library is used to add @NotNull and @Nullable annotations to the LuciadCPillar for Android API, so that it is more convenient to use when working in Kotlin.

Upgrade considerationLuciadCPillar

LuciadCPillar now depends on the stb and goofy libraries in order to support OGC 3D Tiles texture compression.

Upgrade considerationLuciadCPillar

The map AnimationManager and FeatureStateManager are now returned by reference instead of shared_ptr.

Upgrade considerationLuciadCPillar

The GDAL library and its dependencies have been updated.
  • GDAL: updated to version 3.4.3
  • PROJ: updated to version 9.0.1
  • SQLite3: updated to version 3.38.5
  • nlohmann_json: version 3.10.5, used by PROJ
  • libgeotiff: version 1.7.1, used by GDAL
  • json-c: version 0.15, used by GDAL

Upgrade considerationLuciadCPillar

The Image.Create factory method taking a byte[] was removed from the C# API. The factory method taking a ByteBufferByteBufferByteBuffer should be used instead.

Upgrade considerationLuciadCPillar

The MemoryBuffer class was removed from the API. Use cases that used to be covered by MemoryBuffer are now covered by the new ByteBufferByteBufferByteBuffer class.

Upgrade considerationLuciadCPillar

A dependency to the fast_float library version 3.4.0 has been added. This library is used to parse floating point values from strings.

Upgrade considerationLuciadCPillar

LCP-361
The zlib library has been updated to v2.1.12.

Upgrade considerationLuciadCPillar

LuciadCPillar now requires OpenGL 4.2 instead of OpenGL 4.1.

Upgrade considerationLuciadCPillar

LuciadCPillar supports compressed mesh and point cloud data by leveraging the draco library.

Upgrade considerationLuciadCPillar

LuciadCPillar now depends on the libraries myVRPointCloud, jcsoncpp, pdqsort, and zstd to support the Hexagon Smart Point Cloud (HSPC) format.

Upgrade considerationLuciadCPillar

The IIconIIconIIcon interface was modified to add support for painting the icon in different resolutions, depending on the display scale of your screen. To this purpose, a new interface was added: IIconPainterIIconPainterIIconPainter. The IIcon::toImage method was replaced by the new IIcon::createPainterIIcon::createPainterIIcon::createPainter method. The getWidth, getHeight, getAnchorX and getAnchorY methods were moved to this new IIconPainterIIconPainterIIconPainter interface.

Upgrade considerationLuciadCPillar

In the C# API, the ObservableXxx Value property has been replaced by a getter and a setter.

Upgrade considerationLuciadCPillar

The editing API now uses Observable<Xxx> everywhere instead of ObservableXxx. This can cause compile errors that can be resolved by referring to Observable<Xxx> in the code instead.

Upgrade considerationLuciadCPillar

IInputEventIInputEventIInputEvents and in particular, gesture recognition, have been refactored. See the updated articles regarding interacting with the Map through a controller and integration within Qt for more information.

Upgrade considerationLuciadCPillar

The TextBlockTextBlockTextBlock class and its builders are now returned by value.

Upgrade considerationLuciadCPillar

LuciadCPillar now depends on library ms-gsl.

Upgrade considerationLuciadCPillar

The concurrentqueue library has been updated to v1.0.3.

Upgrade considerationLuciadCPillar

LuciadCPillar now depends on library libtiff to support GeoPackage files containing TIFF encoded elevation data.

Upgrade considerationLuciadCPillar

The minimum version of the .net framework has been changed from v4.6 to v4.7.2.

Upgrade considerationLuciadCPillar

Upgrade considerationLuciadCPillar

The C++ samples now use Qt5.15.2.

Upgrade considerationLuciadCPillar

MapNavigator::RotateAction::deltaPitchMapNavigator::RotateAction::deltaPitchMapNavigator::RotateAction::deltaPitch now accepts a double value instead of an AngleAngleAngle. This is more consistent with the rest of the API, and it avoids incorrect normalization of the passed pitch value.

Upgrade considerationLuciadCPillar

The glu library has been updated to version 1.3+2.

Upgrade considerationLuciadCPillar

The freetype library has been updated to version 2.10.4.

Upgrade considerationLuciadCPillar

The libpng library has been updated to version 1.6.37.

Upgrade considerationLuciadCPillar

The curl library has been updated to version 7.77.0. The openssl library has been updated to version 1.1.1k.

Upgrade considerationLuciadCPillar

The MapNavigator::create factory method was removed, and replaced by the new Map::getMapNavigatorMap::getMapNavigatorMap::getMapNavigator method. The advantage of using a single MapNavigator instance, is that it can now store configuration, like constraint settings.

Upgrade considerationLuciadCPillar

The spdlog library, used in the samples, has been updated to version 1.9.2. The fmt library, used by spdlog has been updated to version 8.0.1.

Upgrade considerationLuciadCPillar

The libjpeg library has been updated to version 9d.

Upgrade considerationLuciadCPillar

The expected-lite library has been updated to version 0.5.0.

Upgrade considerationLuciadCPillar

The TextStyleTextStyleTextStyle class now doesn't contain verticalSpacing and horizontalAlignment properties anymore. You can now specify these properties in an alternative way:

Upgrade considerationLuciadCPillar

The TextStyleTextStyleTextStyle header file was moved from the luciad/layers/styles folder to the luciad/text folder. In the C# API, the namespace was changed from from Luciad.Layers.Styles to Luciad.Text.

Upgrade considerationLuciadCPillar

The PathLabelPositionPathLabelPositionPathLabelPosition header file was moved from the luciad/layers/features folder to the luciad/layers/styles folder. In the C# API, the namespace was changed from from Luciad.Layers.Features to Luciad.Layers.Styles.

Upgrade considerationLuciadCPillar

The WmtsModelDecoderWmtsModelDecoderWmtsModelDecoder now returns the more specific IRasterModelIRasterModelIRasterModel instead of the more generic ModelModelModel.

Upgrade considerationLuciadCPillar

LCP-273

Upgrade considerationLuciadCPillar

LCP-102
FeatureStyle was removed, and replaced by concrete style classes: LineStyleLineStyleLineStyle and FillStyleFillStyleFillStyle. Usages in the rest of the API were adjusted as well. The following classes are affected:

Upgrade considerationLuciadCPillar

LuciadCPillar depends on the library harfbuzz to support rendering fonts using non-latin alphabets.

Upgrade considerationLuciadCPillar

The to_string methods for SortProperty, SortOperator and SortOrder types in the FeatureQueryFeatureQueryFeatureQuery class were removed.

Upgrade considerationLuciadCPillar

The FeatureQueryConfigurationFeatureQueryConfigurationFeatureQueryConfiguration class now returns the scale level count and an indexed accessor instead of returning the whole vector of conditions. The FeatureQueryConfiguration::getConditionFeatureQueryConfiguration::getConditionFeatureQueryConfiguration::getCondition method can return an optional when all features must be considered for a query.

Upgrade considerationLuciadCPillar

The method signature of GeometryFactory::createArcBandGeometryFactory::createArcBandGeometryFactory::createArcBand now takes the center of the arc band as 2nd parameter. This aligns the signature with other geometry creation methods.

Upgrade considerationLuciadCPillar

WmtsLayerWmtsLayerWmtsLayer now returns its styles and bounds as std::shared_ptr instances.

Upgrade considerationLuciadCPillar

LCP-179
Map::ViewMapTransformation::viewToMapMap::ViewMapTransformation::viewToMapMap::ViewMapTransformation::viewToMap is now a synchronous call, and doesn't require the use of a callback anymore. Due to this change, the IPointCallback class is not needed anymore in the API, so it was removed. An additional change is that Map::getViewMapTransformationMap::getViewMapTransformationMap::getViewMapTransformation is now a const method, and that it now returns a const ref as a result.

Upgrade considerationLuciadCPillar

LCP-170
Map::queryFeaturesMap::queryFeaturesMap::queryFeatures: It is now possible that the same feature appears multiple times in the result list. A new overlay flag has been added to MapQueryFeaturesResultMapQueryFeaturesResultMapQueryFeaturesResult for features that have been hit by their overlay component drawn in view space. MapQueryFeaturesResult::mapTouchPointMapQueryFeaturesResult::mapTouchPointMapQueryFeaturesResult::mapTouchPoint is now optional and does not have a value for overlay items.

Upgrade considerationLuciadCPillar

Upgrade considerationLuciadCPillar

VerticalAlignment::Above and VerticalAlignment::Below have been renamed to VerticalAlignment::TopVerticalAlignment::TopVerticalAlignment::Top and VerticalAlignment::BottomVerticalAlignment::BottomVerticalAlignment::Bottom respectively.

Upgrade considerationLuciadCPillar

The AngleAngleAngle and AzimuthAzimuthAzimuth methods degrees and radians have been renamed to getDegrees and getRadians.

Upgrade considerationLuciadCPillar

The ExpressionValueExpressionValueExpressionValue methods boolValue, doubleValue, ... have been renamed to getBoolValue, getDoubleValue, etc.

Upgrade considerationLuciadCPillar

The MapScaleMapScaleMapScale methods value and denominator have been renamed to getValue and getDenominator.

Upgrade considerationLuciadCPillar

LCP-156
The construction order of LayerFeatureIdLayerFeatureIdLayerFeatureId has been changed. It is now consistent with the type name.

Upgrade considerationLuciadCPillar

The consistency of the C# API with the C++ API has improved. As a consequence several methods and properties have changed which may result in compilation errors which are easy to fix.

Upgrade considerationLuciadCPillar

MilitarySymbol::copyToFeatureMilitarySymbol::copyToFeatureMilitarySymbol::copyToFeature now takes a FeatureFeatureFeature instead of a FeatureIdFeatureIdFeatureId. If you used to call this method, simply replace the FeatureIdFeatureIdFeatureId argument with Feature::newBuilder().id(id).dataType(MilitaryDataModel::getSymbolType()).build()

Upgrade considerationLuciadCPillar

Certain create methods which returned std::unique_ptr<> now return std::shared_ptr<>. The affected methods are:

Upgrade considerationLuciadCPillar

Methods which returned std::optional<std::shared_ptr<>> now return std::shared_ptr<>. In your implementation you should now return nullptr iso std::nullopt.

Upgrade considerationLuciadCPillar

The factory method luciad::GeometryFactory::createArcBandluciad::GeometryFactory::createArcBandluciad::GeometryFactory::createArcBand had default parameter values which would lead to a degenerate case. The default values have been made mandatory.

Upgrade considerationLuciadCPillar

IMapInvalidationCallback was renamed to IInvalidationCallbackIInvalidationCallbackIInvalidationCallback.

Upgrade considerationLuciadCPillar

Map::queryFeaturesMap::queryFeaturesMap::queryFeatures now uses a Map::FeatureQueryMap::FeatureQueryMap::FeatureQuery to select the features. This query object now also provides additional filtering options, among others the ability to filter on specific features.
The resulting features are sorted using the following criteria:
3D:
  • Top Most feature (unless draped)
  • Layer order
  • Feature Z order
  • Unspecified Order
2D:
  • Layer order
  • Feature Z order
  • Unspecified Order

The callback used in the Map::queryFeaturesMap::queryFeaturesMap::queryFeatures is renamed to IMapQueryFeaturesCallbackIMapQueryFeaturesCallbackIMapQueryFeaturesCallback and it now returns a list of MapQueryFeaturesResultMapQueryFeaturesResultMapQueryFeaturesResult instances.

Upgrade considerationLuciadCPillar

FeatureState::getValuesFeatureState::getValuesFeatureState::getValues now returns a vector of value objects instead of a vector of pointers.

Upgrade considerationLuciadCPillar

LuciadCPillar depends on the library eigen to support the GeoTIFF format.

Upgrade considerationLuciadCPillar

IFeatureModelIFeatureModelIFeatureModel now has API that allows to change the model using the getUpdater method. See IFeatureModelUpdaterIFeatureModelUpdaterIFeatureModelUpdater. This change will break existing IFeatureModelIFeatureModelIFeatureModel implementations. These can be fixed by implementing the new method, and returning std::nullopt.

Upgrade considerationLuciadCPillar

The GeoPackageTableMetadataGeoPackageTableMetadataGeoPackageTableMetadatatype field has become a string and the enumeration GeoPackageTableMetadata::TableType has been removed. The method GeoPackageModelDecoder::discoverTablesGeoPackageModelDecoder::discoverTablesGeoPackageModelDecoder::discoverTables has an additional parameter which allows to filter on supported table data types only or to return all tables available within the GeoPackage file. Use the value false to get the filtering behavior as before.
These changes allow to discover all content provided by a GeoPackage file, even when not all of it is supported.

Upgrade considerationLuciadCPillar

LuciadCPillar depends on the libraries GDAL and proj to support the GeoTIFF format.

Upgrade considerationLuciadCPillar

The SQLite library has been updated to version 3.31.1.

Upgrade considerationLuciadCPillar

The library libgpkg has been updated to version 1.0.1 to support newer versions of the GeoPackage specification.

2020.0

2020.0.03

Bug fixLuciadCPillar

LCP-138
Exception thrown by CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider when trying to parse a WKT string containing an EPSG authority code.

Bug fixLuciadCPillar

LCP-137
CoordinateReferenceProviderCoordinateReferenceProviderCoordinateReferenceProvider didn't correctly parse Web Mercator (EPSG:3857) WKT strings from gdal. The geodetic datum was spherical instead of flattened.

2020.0.02

ImprovementLuciadCPillar

LCP-69
The LuciadCPillar distribution now contains also a Debug library version.

ImprovementLuciadCPillar

LCP-126
The WMTS model is now more tolerant for WMTS services that return an incorrect mime-type for image tiles. Even in the case of incorrect mime-type the tile data is checked to be of a supported image type. A warning is logged for such image tiles.

ImprovementLuciadCPillar

LCP-122
The stacktrace is not parsed in release build.

ImprovementLuciadCPillar

The EPSG resources are updated to EPSG database v9.8.6.

ImprovementLuciadCPillar

LCP-95
On Linux the library symbols from statically linked 3rd party libraries have been made private. This prevents potential linking issues with users using another version of such a library.

ImprovementLuciadCPillar

It is now possible to retrieve the Color value from an Image at a given pixel coordinate.

Upgrade considerationLuciadCPillar

LCP-125
The casing of the Luciad.Drawing.Image.Create() function was incorrect in the C# API. Also, an unneeded variant of this create function was removed.

2020.0.01

ImprovementLuciadCPillar

LCP-4
It is now possible to select a style when loading a WMTS layer in the data format samples (C++ and C#)

Bug fixLuciadCPillar

LCP-1
The C# data formats sample is now aligned with the C++ data format sample. One can now open GeoPackage files, connect to a WMTS service, add a basic vector model showing several supported geometries and add a layer containing dynamic data. A layer list is added to manage the visibility and the orders of the layers.

Bug fixLuciadCPillar

LCP-6
Fixed a performance issue when connecting to a WMTS layer whose Tile Matrix Set has many tiles at the top-level Tile Matrix (e.g. more than 1024x1024).

Bug fixLuciadCPillar

LCP-2
Fixed a performance/memory problem in the LuciadCPillar C# API when using a same IIconIIconIIcon instance in an IFeaturePainterIFeaturePainterIFeaturePainter implementation. Same IIconIIconIIcon instances are now internally re-used, which leads to less memory usage and a higher painting performance.

Upgrade considerationLuciadCPillar

LCP-5
The minimum version of the .net framework has been corrected from v4.0 to v4.6.

2020.0

New featureLuciadCPillar

LuciadCPillar is a new Luciad product providing an easy-to-use C++ and C# API designed to build geospatial situational awareness applications targeted to run on a desktop.