Releases: USNavalResearchLaboratory/simdissdk
Releases · USNavalResearchLaboratory/simdissdk
SIMDIS SDK 1.24
SIMDIS SDK changes since version 1.23
New Features
- Build scripts for vcpkg have been added to the SIMDIS SDK, including a bootstrap script for Windows developers.
- Dear ImGui included with examples upgraded to 1.92.4.
- Methods and functionality related to osgEarth::Controls have all been deprecated, and will be removed in the future.
- Microsoft Visual Studio 2026 x64 (win64_vc-14.5) is now a supported compiler.
- simCore/Formats/DisModels.h includes a new helper class for reading SIMDIS models.dis files and mapping DIS IDs to SIMDIS models.
- simCore::DisModels class has new function getFromGenericMap() and newly exposed fuction entityTypeString() to allow direct access to DIS matching logic.
- simCore::ElectroMagRange::maximumUnambiguousDetectionRange() is a new function to compute the maximum unambiguous detection range for an ESM receiver.
- simCore::FileInfo::fileNameStem() is a new function that returns the file name portion of the given path, without the extension. This is similar to, and a replacement for, FXPath::title().
- simCore::MultiFrameCoordinate::synchronizeCoordinates() is a new method used to synchronize an ECEF and LLA coordinate.
- simData::AntennaPattern::VolumeType is a new setting enumeration to select between GAIN_AS_RANGE_SCALAR (default) and ONE_WAY_PWR_FREE_SPACE for antenna volume rendering types.
- simData::DataStore::FLUSH_ALL_EXCLUDE_MINUS_ONE is a new FlushFields value that combines FLUSH_ALL and FLUSH_EXCLUDE_MINUS_ONE.
- simData::Datastore::flush(ObjectId, FlushType) is now deprecated in favor of the more explicit flush() routines.
- simQt::FileSelectorWidget adds an optional clear button.
- simQt::QtUtils::hasAccentColorProblems() can be used to determine if the configured Windows 11 accent color might make text hard to read.
- simQt::TabDropDownButton is a new class that installs a drop-down button to select a tab in a QTabWidget.
- simVis::AnimatedLine no longer uses custom behavior for LineDrawable, and SIMDIS SDK now relies on the default implementation of osgEarth's LineDrawable.
- simVis::DevicePixelRatioUtils is new class with various utility methods for interacting with a DPI-aware application.
- simVis::Text is now deprecated in favor of osgText::Text.
- simVis::findAnimationManager() is now available in simVis/Utils.h to search a node for the first BasicAnimationManager. Initial animation manager support added to simVis::ModelCache.
Bug Fixes
- GLSL built-in define GLSL_VERSION_STR from osgEarth is no longer used, fixing a compatibility bug with latest osgEarth.
- simCore::GOG::Parser handles missing minoraxis correctly.
- simQt-created QDialogs that are non-modal now use QMainWindow as parent to behave properly.
- simQt::DockWidget handles restoring geometry better when no settings exists.
- simQt::ResourceInitializer now correctly registers custom Qt6 meta types.
- simQt::SettingsModel now correctly emits dataChanged() signal for both signatures of resetDefaults().
- simVis::ModelCache no longer runs OSG Optimization for combining adjacent LOD nodes. This prevents node reordering, which breaks models where render order is important such as those with transparent textures like railings.
- simVis::Registry now adds an alias between glb and gltf, to ensure that .glb files correctly load from the osgEarth gltf module.
SIMDIS SDK 1.23
SIMDIS SDK changes since version 1.22
New Features
- Example Qt View Manager Data Model updated to use simQt::ViewerWidgetAdapter, with osgQOpenGL.
- Example example_qtdraganddrop is a new executable example that demonstrates using actions and drag and drop with the newer osgQOpenGL-based ViewerWidgetAdapter.
- GLEW third party dependency removed with a Dear ImGui version update.
- simCore::FileInfo::filePath() is a new convenience method to return the entire path and filename at once.
- simCore::FileInfo::makeAbsolute() is a new method to expand any relative portions of a file path.
- simCore::MemoryInfo is a new class in simCore/System that provides total, used, and free RAM in a cross platform way.
- simCore::Optional and its file simCore/Common/Optional.h have been removed after being deprecated in favor of std::optional.
- simCore::doesLineIntersectSphere() determines if a line segment intersects a sphere.
- simCore::initializeSimdisEnvironmentVariables() gets a new convenience signature that takes no arguments, that initializes the environment using the default configuration.
- simCore::normalizeFilepath() is a new method to lexically normalize a given path, removing unnecessary redirections.
- simCore::parseFreeFormTimeStr() is a new method that attempts to parse a free form time string into hours, minutes, and seconds values. See testFreeformTimeStr() in Testing/SimCore/TimeStringTest.cpp for info on what the method can parse.
- simData library no longer uses Google Protobuf. Preferences, commands and properties are now defined with CXX classes. The new classes are similar to the Protobuf classes, but not backwards compatible. Reflection is done with a new class. See simData::Reflection for details. simData.proto, no longer directly used by the SIMDIS SDK, has been removed.
- simData::CategoryFilter removeName() and removeValue() now include string overloads for convenience, and removeName() now returns an error value.
- simData::CategoryNameManager now provides several new convenience wrappers that directly return vectors for category names, category name ints, all values in category, and all value ints in category.
- simData::Reflection::makePreferences() and simData::DataStoreHelpers::mutable_preferences() are new helper methods for data store preferences.
- simQt::AutoRepeatFilter has moved from simQt/ViewWidget.h to simQt/AutoRepeatFilter.h, to enhance reusability.
- simQt::BindCenterEntityToEntityTreeComposite now supports a mode to zoom on entity being centered, on by default. A convenience binder simQt::bindCenterZoomSetting() gives a one-line binding to a Settings value.
- simQt::DragDropEventFilter (in QtUtils.h) is a convenience class to forward Qt drag and drop events to a given lambda, useful for implementing drag and drop on QWindow container widgets.
- simQt::EntityDrawFilter is a new class that implements an EntityFilter based on the CommonPrefs draw flag.
- simQt::EntityTreeComposite now defines explicit values for weights for the right-click menu, to help with sorting when augmenting the menu with your own values.
- simQt::EntityTreeComposite now has a simplified Entity Filters dialog.
- simQt::EntityTreeComposite now includes a Center-and-Zoom feature, supported by updates to simQt::CenterEntity.
- simQt::Gl3FormatGuesser now includes various methods to support a QSurfaceFormat.
- simQt::HudTextBinManager is a new OSG node that can render multiple independent text strings into one of nine screen bins (upper left, upper center, etc.). New example Qt HUD Label Bins demonstrates the behavior.
- simQt::QWidgetNode provides a method to create an OSG node of a Qt widget. QImageNode and QLabelDropShadowNode provide similar functionality for QImage and QLabel, adding a drop-shadow to labels to improve readability. Demonstrated in the new Qt Widget Nodes example.
- simQt::ViewerWidgetAdapter is a new widget based on osgQOpenGL's osgQOpenGLWindow class, which is based on QOpenGLWindow instead of QGLWidget.
- simUtil::Capabilities now includes checks for RAM and CPU count.
- simVis::ViewManager now can create a separate osgViewer::CompositeViewer for each top level main view it receives. Off by default, this feature allows it to cleanly support osgQOpenGL in some cases with multiple contexts. See examples QtDragAndDrop and QtDockableViews for cases where this can be useful.
- simVis::Viewer now supports an EMBEDDED flag when initializing, to avoid creating an internal graphics context.
Bug Fixes
- CMake minimum version corrected to 3.21 from 3.20, for MSVC 2022 support.
- Colors now have their alpha values saved to INI format correctly when saving simQt::Settings.
- Image Icons with Icon Fast Draw mode enabled now return the correct bounds in
Platform::getActualSize()andPlatformModel::getUnscaledIconBounds(). - Layer File Patterns now correctly includes GPKG (*.gpkg) in the list of GDAL-supported file extensions.
- MESA_GL_VERSION_OVERRIDE is now consistently set on Linux. This should prevent Mesa drivers from sometimes creating a 4.3 context.
- simCore::GOG and simVis::GOG shapes now apply rotation correctly.
- simCore::Units::BAM now uses the correct toBase scalar.
- simData::CategoryFilter now better handles removing a "No Value" item in an "Unlisted Items" (exclude) filter by toggling it on. This counterintuitive behavior is due to the implicit/explicit relationship between these two items in category filter pages and breadcrumbs.
- simQt::CategoryTreeModel now correctly emits the dataChanged signal when filters are externally changed, fixing a minor display glitch.
- simQt::DockWidget now always restores tab icon for re-opened tabbed widgets.
- simQt::Settings::convertToInternalFormat() typo in method name corrected.
- simVis::FilteringOsgNotifyDecorator is a new decorator wrapper around an osg::NotifyHandler, allowing messages to be filtered by terms. A related utility simVis::installFilterOsgNotifyDecorator() with a default configuration to drop spam warnings from NVIDIA 571 drivers.
SIMDIS SDK 1.22
SIMDIS SDK changes since version 1.21
New Features
- Example resource search path was updated to include new SIMDIS model heirarchy layout.
- Third party dependencies in CMake now use find_package(), and installed SDK imports now use find_dependency(). To use custom third party libraries set the CMake standard variable CMAKE_PREFIX_PATH before configuring.
- simCore adds a new DCM (direction cosine matrix) class.
- simCore::LUT2 (2-d lookup table) adds support for interpolating with no-data value.
- simCore::MagneticVariance calculations updated for the 2025 World Magnetic Model.
- simData::DataStore::enableInterpolation is a new method that enables control over if, and how, data will be interpolated.
- simData::DataStore::installSliceTimeRangeMonitor is a new method that stores a function to be called when a specified platform's time range changes.
- simQt::ActionRegistry records the default hot keys associated with actions when they are registered. ActionRegistry::resetToDefaultHotkeys() restores all actions to those default hot keys.
- simQt::ActionRegistry::removeAllHotKeys() is a new method that removes all registered hotkeys.
- simQt::ArticulationsEditorWidget is a new widget class to display and edit model articulation information.
- simQt::ArticulationsVisitor is a new class that inherits from osg::NodeVisitor to fill out a simQt::ArticulationMap by traversing an osg::Node and its children.
- simQt::DockWidget supports setWindowFilePath(), adding the elided filename and path to the title bar.
- simQt::EntityLineEdit now provides more visual feedback on the filter or selection status.
- simQt::ResourceInitializer::registerMetaTypes() is now exposed publicly to allow callers to forcibly overwrite registrations of metatypes.
- simQt::Settings now saves color settings in a hexadecimal ARGB format.
- simVis::PlatformNode caches the start and end times of the active data slice, to reduce unnecessary fetching and improve performance when there are many platforms in the scenario.
Bug Fixes
- simData::MemoryDataStore now correctly applies target gate size in more cases.
- simQt::EntityLineEdit properly deletes all members in deconstructor.
- simQt::MapDataModel::MapListener::onLayerRemoved() now correctly erases the visibility callbacks from the model layer, rather than erasing from the velocity layer twice.
- simQt::SegmentedTexts no longer fails to update its reference year value when display is in a format that does not show the year.
- simQt::TimeWidget more correctly synchronizes with its TimeFormatContainer.
- simVis::VelocityVector now properly applies color changes to its Drawable component.
- simVis::View::setViewpoint() now correctly respects specified view transition duration.
SIMDIS SDK 1.21
SIMDIS SDK changes since version 1.20
New Features
- CXX20 support is now the minimum required for building the SIMDIS SDK.
- Gates now have a centroid color preference.
- SDK_DISABLE_COPY, SDK_DISABLE_MOVE, and SDK_DISABLE_COPY_MOVE are new macros available in simCore/Common/Common.h for conveniently disabling copy and move constructors and assignment operators.
- simCore::CsvReader can now be set to ignore comment characters encountered in the middle of a line, using setAllowMidlineComments().
- simCore::CsvReader revamped to process quotes more consistently.
- simCore::CsvWriter is a new class for writing CSV files in an Excel-compatible format.
- simCore::FileInfo::fileName() and path() have been added.
- simCore::GOG::Annotation now serializes out the 3d name property.
- simCore::GeoFence is now in its own header, simCore/Calc/GeoFence.h.
- simCore::GeoFence now supports concave shapes. simCore::GeoFence::valid() now returns true if the shape contains the minimum number of points, and no longer tests concavity.
- simCore::Optional has been deprecated in favor of std::optional. simCore::Optional will be removed in a future release of SIMDIS SDK.
- simCore::Plane enhanced to provide alternate specifications for planes, and ability to retrieve values from the plane formula.
- simCore::ShellWindow provides convenience functions for Windows applications that are configured with the console subsystem to manage the container shell window.
- simCore::calculateBearingAspectAngle() and simCore::formatBearingAspectAngle() available for calculating and displaying bearing aspect angle.
- simCore::rayIntersectsTriangle() is a new function that performs ray-to-triangle intersection in XYZ space.
- simCore::skipUtf8ByteOrderMark() is a new function for detecting and skipping over the UTF8 BOM.
- simData::DataStore::setNewUpdatesListener() replaced with addNewUpdatesListener() and removeNewUpdatesListener().
- simData::DataStoreHelpers::getFileModePlatformTimeBounds() is a new method to retrieve the expected time bounds for a platform in file mode, respecting lifespan preferences.
- simData::PlatformPrefs::LifespanMode is a new preference that controls how platform lifespan (is-active) is determined in file mode.
- simQt::DockWidget adds restoreDefaultLayout() method to reset window layout to factory defaults.
- simQt::EntityTreeComposite custom filters add pin option to maintain filter across restart.
- simQt::ScopedSignalBlocker deprecated, use QSignalBlocker instead. simQt::ScopedSignalBlocker will be removed in a future release of SIMDIS SDK.
- simQt::SettingsModel includes a new option to save only activated settings.
- simQt::TimeWidget now supports ISO-8601 format.
- simUtil::ShapeFileLayerFactory::setSimplifyTolerance() is a new method that provides access to the osgEarth Simplify filter when loading new shape files.
- simVis::SphericalVolume updated to support new LINE beam draw type.
Bug Fixes
- simCore::CsvReader::lineNumber() fixed to handle multiple lines parsed within quotes.
- simCore::HoursTimeFormatter::fromString() typo fixed.
- simData::CategoryFilter correctly adjusts check state when auto-updating while deserializing.
- simQt::DataTableModel now fetches rows with timestamp of -1 from the source DataTable in setDataTable().
- simVis::PlatformIconFactory::getOrCreate() now correctly returns null in cases where the requested model is clearly not an image, fixing an issue where asynchronous loading of 3D models was broken with the fast-draw capability enabled.
SIMDIS SDK 1.20
SIMDIS SDK changes since version 1.19
New Features
- GOGs that reference image files will attempt to create a new image file if necessary when serializing.
- Linux support for the abi-cxx11 added. This is controlled by the ENABLE_CXX11_ABI CMake variable. It is on by default on systems that support it. This is a binary ABI change.
- Navigation Modes now explicitly default Zoom to Mouse on, matching new osgEarth defaults.
- Qt 5.15 is now the default version for Qt in ImportQt5.cmake.
- simCore/System/File.h is a new part of simCore and contains new file-related routines and classes.
- simCore::Vec3-related functions v3Length, v3Scale, v3Norm, v3Add, v3Subtract, v3Dot, v3Cross, and v3Negate have been deprecated. Use the corresponding functions in Vec3 instead of these older legacy standalone functions.
- simCore::filesMissingFromPath() is a new function that tests relative paths under a parent and returns a vector of files that are missing.
- simCore::initializeRandomSeedWithTime() is a new method that initializes srand() with the system time in microseconds for improved randomness.
- simCore::isDirectoryWritable() replaces the now-deprecated simQt::FileUtils::isPathWritable().
- simCore::userApplicationDataDirectory() is a new function that returns the expected absolute path for a home directory cross-platform.
- simData::DataStore::Listener::weight() method added. The weight controls the execution order of the callbacks. The default behavior matches the previous behavior. The developer has to opt-in to the new behavior.
- simQt::DockWidget adds setDefaultSize() method.
- simQt::DockWidget will now show on top of parent window if position initialization from settings fails.
- simVis::GOG defines GOG_PRECISION to specify recommended precision when serializing GOGs to stream.
- simVis::OverrideColor and associated platform preference overrideColorCombineMode support a new mode for an intensity gradient. This applies post-lighting and may provide a more consistent result than the Color Replace mode.
- simVis::Picker supports picking multiple entities at once.
Bug Fixes
- simQt::DockWidget now recenters over parent widget on display, if the dock widget is not visible on any screen.
- simQt::FileUtils simQt::FileUtils::isPathWritable() no longer creates the path automatically. To continue this behavior, call simCore::mkdir() first.
- simQt::SearchLineEdit::pixmap() has been removed, with no replacement, due to deprecation of capability in newer versions of Qt.
- simUtil::ElevationQueryProxy (and therefore also simUtil::MousePositionManipulator::getElevation()) returns no-data correctly when querying elevation data over a region without elevation data loaded.
- simVis unit tests no longer fail to build if GDAL header is not found on the system.
SIMDIS SDK 1.19
SIMDIS SDK changes since version 1.18
New Features
- CMake minimum version bumped to 3.20 to fully support MSVC 2022, in conjunction with upcoming CMake deprecating older versions.
- simCore::ScopeGuard is a new class that executes a function on destruction.
- simCore::TimeStamp methods strptime() and strftime() are deprecated. Replace with simCore::TimeStampStr class.
- simCore::TimeStampStr is a new class with better performance to replace simCore::TimeStamp::strptime() and strftime().
- simData::CategoryData now treats empty values or reserved word "No Value" as unsetting the category
- simData::DataTable now has a maxSubTableRow() method that returns the number of rows in the largest sub-table.
- simData::ProjectorPrefs includes an override horizontal FOV angle and Boolean to allow for preference-driven overrides of horizontal and vertical FOV.
- simQt::DirectorySelectorWidget now has an optional button to open the directory in a file explorer.
- simQt::EntityModelTree and simQt::EntityModelWidget updated to significantly improve performance when the data store has tens of thousands of entities.
- simQt::FileSelectorWidget has a new property
readOnlyLineEditto control whether the line edit presents as read-only to users. By default this is on for release mode. - simQt::KeySequenceEdit was moved from simQt/ActionItemModel.h/cpp to simQt/KeySequenceEdit.h/cpp. A Qt Designer plug-in was also added for it.
- simQt::MruList gets new functions setEnabled() and isEnabled(), affecting the enable state of the load-file actions.
- simQt::UnitContext's default time format is now month-day, with a precision of 1.
- simQt::createHomePath() now supports subdirectories in the relative file path parameter.
- simVis::AreaHighlight now supports new simData::CH_COFFIN coffin shape, useful for kill/rebirth highlighting.
- simVis::FragmentEffects is a new class for applying enumerated fragment shader values from platform preferences to a platform's state set. Added a Fragment Effects example application.
Bug Fixes
- Depth Test Boolean field was added to the Custom Rendering preferences to toggle the depth test.
- RCS (2D and 3D) draw settings now preclude 2-D images from the "Icon Fast Draw" path
- simCore/Common/Common.h no longer includes Windows.h. simCore/Common/Common.h now includes system
stdint.hinstead of custom MS-specific inttypes headers; these are now removed. - simNotify macros SIM_WARN, SIM_FATAL, etc. no longer directly return the notification handle. Instead it returns a new class for single-use that will combine inputs into a single stream, sending to the notify on destruction. This eliminates an edge case for syntax errors introduced by using the macro previously.
- simQt::isPathWritable() now creates parent directories if necessary, before it creates the final requested path.
- simVis::View::setNavigationMode() now correctly retains terrain avoidance minimum distance settings.
SIMDIS SDK 1.18
Note that future releases past 1.18 will require a C++17-compatible compiler.
SIMDIS SDK changes since version 1.17
New Features
- CMake variables BUILD_SIMDATA, BUILD_SIMVIS, BUILD_SIMUTIL, and BUILD_SIMQT have been added, to optionally disable the build of these modules.
- Platform Preference overrideColorCombineMode lets users choose how override color contributes to model color. Choose between multiply (the default) and replace.
- Platforms with no orientation and/or no velocity are now supported.
- Wbp OSG Plugin added, to read .wbp extensions as WebP files. Depends at runtime on the osgEarth .webp OSG plugin.
- simCore::RowReader is a new class built on simCore::CsvReader to read and refer to CSV content by column title.
- simCore::Units various family constants deprecated, in favor of identically named constants in simCore namespace.
- simQt::MultiTouchEventFilter is a Qt event filter that forwards raw touch events to the OSG GraphicsWindow's event queue, intending to circumvent osgQt's touch behavior.
- simQt::StartupLayoutManager::unregisterTask() added so that a task can be unregistered.
- simUtil::GestureProcessor is a new class that reads multi-touch events and generates gesture analysis per touch update.
- simUtil::MouseDispatcher base class now includes methods for receiving and processing touch events, touchBegan, touchMoved, and touchEnded. MouseManipulatorAdapter by default will repackage touch events as mouse click events.
- simVis::LambdaOsgCallback replaces simVis::NodeUpdateCallback as a more generic method for adding callbacks to nodes.
Bug Fixes
- simData::DataTable::TableObserver no longer causes a crash, if the table observer removes itself mid-callback.
- simData::TableManager::ManagerObserver no longer causes a crash, if the manager observer removes itself mid-callback.
- simQt::BoundBooleanSetting::setValue() no longer causes bound QActions to incorrectly emit
triggered()signals.
SIMDIS SDK 1.17
SIMDIS SDK changes since version 1.16
New Features
- Planetarium dome can now be textured. Up to four simultaneous and independent textures can be rendered on the sphere.
- Platform highlight size can now be set. The default value of zero uses the icon size.
- simCore::TimeStamp::strftime() is a new function that prints the time stamp using strftime() format string syntax.
- simCore::TimeStamp::strptime() is a new function that generically parses a string into a time stamp, similar to the C strptime() function.
- simCore::isAngleBetween() is a new method that determines whether an angle falls between a specified angle and sweep.
- simCore::replaceExtension() is a new function that replaces the extension on an input filename.
- simData:: DataStoreHelpers::setName() is a new function to set the name of an entity.
- simNotify::CaptureHandler saves notify messages in a vector for republishing to other handlers in the future.
- simNotify::CompositeHandler is a new NotifyHandler that lets you divert messages to multiple handlers at once.
- simQt::TimeEditor has new property to control whether a single button is used for play/stop.
- simUtil::MapScale now supports a condensed mode that displays less text and few rows.
- simVis::PlanetariumViewTool now includes a texture-only mode that discards untextured sphere pixels when enabled.
Bug Fixes
- simCore::TimeStamp::setTime_() now includes additional checks to avoid being set to simCore::INFINITE_TIME_STAMP.
- simCore::getAngleString() (including printLatitude() and printLongitude()) now correctly output preceding - sign for negative values > -1, e.g., -0.22 degrees.
- simData::MemoryCommandSlice::update() now correctly handles commands inserted before the current time.
- simQt::ColorGradient rewritten with a new API that focuses on setting control colors that generate a gradient, rather than setting the gradient itself.
- simVis::PlanetariumViewTool::useGradient() renamed getUseGradient() to match code style in other functions in file.
SIMDIS SDK 1.16
SIMDIS SDK changes since version 1.15
New Features
- CommonPrefs.acceptsProjectors is now a repeated field. Previous scalar acceptsProjector field removed.
- Examples now all start in windowed mode instead of full-screen.
- Projector preference shadowMapping prevents a projection from propagating beyond terrain.
- simCore::String::XmlWriter is a new class that provides utilities for writing data in a nested XML format.
- simData::CategoryDataPair::time() is a new function returning the time value of the name/value pair.
- simData::PlatformPrefs dynamic scale algorithm now defaults to DSA_METERS_TO_PIXELS, changing the default size of several icons to scale based on the dimensions of the source image.
- simQt::ColorWidget provides access to the QLabel.
- simQt::MergeValues and its derived classes are new classes that provide scope-controlled value merging in various Qt and simQt widgets.
- simQt::TimeWidget supports copying time string to the global clipboard via a right mouse click menu option.
- simUtil::DynamicSelectionPicker can now correctly pick laser nodes.
- simUtil::DynamicSelectionPicker::pickToVector() is a new public method for picking entities on demand.
- simVis::GOG BSTUR constant has moved to simCore::GOG.
- simVis::GOG::AnnotationNodeInterface has been deprecated. Use simVis::GOG::GogNodeInterface instead.
- simVis::GOG::Parser and simCore::GOG::Parser use new commands imageoverlay and imagefile to replicate KML GroundOverlay functionality. Annotations GOGShapes now also use the imagefile command instead of kml_icon comments.
- simVis::GOG::Utils::decodeAnnotation() is deprecated in favor of new simCore::GOG::GogUtils::decodeAnnotation().
- simVis::PickHighlightShader adds options for use with other pickers.
- simVis::ViewManager::getViewByMouseXy() is a new public method for choosing a visible inset under the mouse.
Bug Fixes
- Image Overlays with a file protocol prefix now correctly find image files on disk.
- Image icons no longer sometimes disappear in the image icon example, by adjusting data variance for the 2D image.
- Override color on Platform 2D icons now works properly when set to 0 alpha, when the icon fast path feature is enabled.
- Picking Example now turns off the simVis::PlatformIconFactory when RTT picking is chosen, fixing render-to-texture (RTT) picking.
- simCore::CoordinateConverter now uses two-iteration ECEF to LLA conversion for certain cases near center-of-earth.
- simQt::FontWidget::setFontFile() now handles font files with full paths.
- simUtil::DynamicSelectionPicker's platform advantage reworked. Mouse being closer to the platform makes it more likely to be selected than colocated items. Platforms that are colocated no longer get an applied advantage, fixing problems where some non-platform entities were very difficult to pick.
- simUtils::DataStoreIdMapper now supports host-less Custom Rendering entities
- simVis::AnimatedLineNode no longer animates incorrectly in the reverse direction when drawing a straight (non-bending) line.
- simVis::GOG::Orbit with absolute coordinates no longer renders at 2x altitude.
- simVis::SphericalVolume no longer renders the seam on footprint gates and planetarium sectors with horizontal field of view values of 360 degrees.
SIMDIS SDK 1.15
SIMDIS SDK changes since version 1.14
New Features
- C++17 is now enabled by default if your compiler supports it.
- GOG commands StartTime and EndTime are added, allowing GOGs to be automatically shown and hidden based on scenario time.
- Platform icons using 2D images (e.g. PNG) and meters-to-pixels dynamic scale algorithm now have a fast-path for rendering. This approach minimizes GL state changes and can dramatically improve performance of large data sets.
- Time Ticks Label Color is a new platform preference for track history time ticks.
- simCore utility functions isBetween() and clamp() have been added.
- simCore::GOG::GogShape adds method to clear reference position.
- simCore::TimeFormatterRegistry now has an optional argument that controls whether built-in time formats are added automatically.
- simData::DataStore::Listener updated with a callback for property changes.
- simData::LobGroupPrefs has a new entry for line bending mode.
- simQt::CategoryFilterCounter::setObjectTypes() now allows the entity counter to be limited to only certain entity types. Also applied to simQt::AsyncCategoryCounter.
- simQt::CategoryFilterWidget was moved from simQt/CategoryTreeModel.h/cpp to simQt/CategoryFilterWidget.h/cpp.
- simQt::CategoryFilterWidget::setEntityCountObjectTypes() added to force the entity counter to be limited to only certain entity types.
- simQt::EntityTreeModel and simQt::EntityTreeWidget now provide count for entity type.
- simQt::FileSelectorWidget::fileSelected() is a new signal that is only emitted when the user manually selects a new file. It is not emitted for programmatic changes.
- simVis::AnimatedLineNode can now be configured with a line bending mode.
- simVis::GOG::Parser and associated classes have been deprecated, as the functionality has been split into a reusable parser in simCore. simCore::GOG::Parser is now preferred, using simVis::GOG::Loader to generate graphics for the scene.
- simVis::GogNodeInterface now applies orientation offset changes dynamically to the local rotation of the LocalGeometryNode for relative shapes.
- simVis::NgtsNavigationMode is a new navigation mode that changes the default behavior of the SIMDIS left and right mouse buttons to more closely match the NAVAIR NGTS interface.
- simVis::PopupHandler and simVis::EntityPopup have been rewritten to remove usage of unsupported osgEarth::Controls.
Bug Fixes
- DB image driver now guarantees output of RGBA-8, matching expectation of osgEarth.
- Dynamic Scale's cached scale is no longer applied is the node visitor is not defined. This fixes a problem where computeBound() would incorrectly use a potentially-stale scale value, causing icons to be incorrectly culled in multi-inset situations where the model's bounding sphere did not include (0,0,0).
- Horizon values now set higher in node tree, fixing horizon culling for GOG annotations and some other scene elements that attach to the Scene Manager.
- Windows MSVC 2015 is no longer an officially supported compiler.
- simData::DataStore::mutable_*Properties routines now require a commit or transaction complete for changes to take effect.
- simQt::DataTableModel now accepts a simUtil::UnitTypeConverter provider to show units in the column header.
- simQt::FileSelectorWidget::filename() no longer returns edited but not-yet-accepted filenames.
- simQt::FileSelectorWidget::filenameChanged() is now emitted only when the filename actually changes.
- simQt::GanttChartView no longer will hang when zooming in on a large swath of time ranges.
- simVis::LocalGrid SpeedRing labels now correctly count down the time when set to use fixed time.
- simVis::PlatformIconFactory::getOrCreate() now includes an output parameter for returning whether the loaded icon is a 2-D image or not.
- simVis::TimeTicks is no longer affected by platform preferences value trackoverridecolor() and usetrackoverridecolor().