Releases: USNavalResearchLaboratory/simdissdk
Releases · USNavalResearchLaboratory/simdissdk
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
readOnlyLineEdit
to 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.h
instead 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().
SIMDIS SDK 1.14
SIMDIS SDK changes since version 1.13
New Features
- Example Velocity Particle Layer added to demonstrate the particle layer with wind data from NWS.
- GOG Parser is more forgiving of color input strings, now accepting hexadecimal and unsigned integer values.
- GOG Points shape no longer supports extrude.
- Platform Dynamic Scale Algorithm can now be changed per-platform. See PlatformPrefs.dynamicScaleAlgorithm. A new algorithm has been added to scale a platform directly from meters to pixels. This creates a consistently sized platform and is particularly useful for showing image icons at the source image size.
- simCore::GOG::Parser parses the GOG shape format into GogShape objects.
- simCore::GogShape class defines shapes for display with all their supported attributes.
- simCore::Optional is a new templated class that represents a value that may or may not be set.
- simCore::buildString() performance improved by making the stringstream a thread_local variable. Due to bugs in the GCC runtime on older RHEL6, this optimization is only available on Windows.
- simCore::streamFixUtf8() is a new function that can be applied to UTF-8 std::string filenames, allowing filenames with UTF-8 multi-byte characters to be opened correctly on Windows systems.
- simData::Datastore flush updated with new, more flexible routines.
- simQt::BindCenterEntityToEntityTreeComposite now calculates the nearest time for Beams, Gates, Lasers, Lob Group and Projectors.
- simQt::ColorGradient can now be set as discrete, causing colors to be returned without interpolation.
- simQt::ColorGradientWidget now includes several new properties to allow for the customization of display to units other than percentage. This impacts only the text displays to the user, and not the underlying color gradient, which is still defined in percentages.
- simQt::EntityTreeModel now uses a std::map to improve performance.
- simQt::MapDataModel now natively supports simUtil::VelocityParticleLayer.
- simQt::PersistentFileLogger now has new features setSubdirectory(), setExtension(), and setBinary(). Binary data can now be written using the new write() method.
- simQt::Settings::DataTypes and simQt::SettingsItemDelegate now support QFont.
- simVis::ElevationQueryProxy now works with osgEarth Future/Promise API.
- simVis::GogNodeInterface add methods to set the Follow components.
- simVis::GradientShader is a new class that can generate a shader that returns a color from a gradient map.
- simVis::ViewManager::LambdaCallback is a new class that lets you use a lambda to define the callback operation where a simVis::ViewManager::Callback is required.
- simVis::ViewportSizeCallback is a new class that accepts a lambda function and executes the function when the associated viewport size changes.
Bug Fixes
- Beams with horizontal beam greater than 180 degrees are now drawn correctly.
- Example QtDockableViews now turns off image unref to fix display error, fixing issue 68.
- simCore constants SECONDS_STRING and ORDINAL_STRING were unused and have been removed.
- simQt::ColorGradient, like simQt::ColorGradientWidget, now properly works with a single color stop and no longer requires two color stops.
- simQt::ColorGradientWidget no longer expands the gradient at the same rate as the list.
- simVis::AnimatedLines now use osg::Groups to hold their components rather than osgEarth::LineGroups, allowing proper intersection testing for all components.
- simVis::ProjectorNode::addProjectionToNode() now correctly fails early if attempting to assign more than one projector to an entity, avoiding an infinite loop crash.
SIMDIS SDK 1.13
SIMDIS SDK changes since version 1.12
New Features
- Headers simNotify.h, simCore.h, simData.h, simVis.h, simUtil.h, and simQt.h are now deprecated. They will be removed in a future release.
- showLighted added to simData::CustomRenderingPrefs to toggle the light shading of custom rendering objects.
- simCore DatumConvert convertVerticalDatum() throws an exception when passed the unsupported MSL format.
- simCore::CsvReader new option parseQuotes tells the Reader to account for quote characters, preventing it from splitting a quoted string into multiple tokens.
- simCore::VisualizationClockObserver added to provide a callback for the lock state of the Visualization clock.
- simCore::angleDifference() and angleDifferenceDeg() are new methods providing the smallest difference between two angles.
- simCore::escapeTokenize() new parameters allow greater control over behavior.
- simCore::getExtension() now allows an optional flag to omit the lowercase operation on the return value.
- simData::DataStore::Listener::onPostRemoveEntity() added to provide a callback after an entity has been deleted.
- simQt::AutoRepeatFilter is a new QObject filter that can reject auto-repeat key presses. simQt::ViewWidget automatically uses the filter to fix a jitter problem with keyboard navigation in Qt applications.
- simQt::BoundStringSetting bind method added for simQt::FileSelectorWidget.
- simQt::ColorGradient now wraps an osg::TransferFunction1D for easier usage in OpenSceneGraph applications.
- simQt::ColorGradientWidget has a more GUI-focused implementation, including an optional, editable list of color stops.
- simQt::ColorWidgetDelegate is a QStyledItemDelegate that displays a QColor value as an editable simQt::ColorWidget.
- simQt::EntityNameFilter now supports getting the Regular Expression.
- simQt::GraphicsWindowQt is a new class that can be used to avoid swapping GL contexts when not exposed, and can be used to avoid Qt 5.14 crash issues with calling makeContextCurrent() on destruction.
- simQt::MonospaceItemDelegate gets new methods setPointSizeOffset() and pointSizeOffset() to allow caller to adjust font size slightly.
- simQt::SettingsModel::isReadOnly() is a new feature that prevents (when true) SettingsModel from calling save() on destruction, allowing for a copy of settings that does not get saved.
- simUtil::DbConfigurationFile::appendEarthFile() is a new method that loads a .earth configuration file and transfers the layers to an existing map.
- simVis/Headless.h is no longer header-only.
- simVis::CustomRenderingNode adds a flag to identify line shapes, and DynamicSelectionPicker respects the new flag
- simVis::GOG::GOGNodeInterface now provides an accessor for shape opacity. This value is not saved to or read from GOG files.
- simVis::GOG::GogNodeInterface adds methods getDeclutterPriority() and setDeclutterPriority() for access to label declutter priority settings.
- simVis::GOG::LatLonAltBoxInterface implements specialization required for the shape.
- simVis::GOG::Orbit shape support added.
- simVis::GateNode now supports the FOOTPRINT draw mode, in which only the far-face of the gate is drawn.
- simVis::GlDebugMessage is a utility class that can help manage the OpenGL debug message output. This can be useful for tracking down OSG-reported warnings down to the line by providing a full callstack when errors occur.
- simVis::View::getModelNodeForTether() now works for all entity types.
Bug Fixes
- Category Data simplification no longer removes categories too aggressively.
- DataStore::Listener::onTimeChange() has been renamed to DataStore::Listener::onChange() to more accurately convey the scope of the callback.
- Preference rules are force-applied when added.
- Track History nodes now correctly set their render bin.
- simCore::ALL_DATA_FILE_PATTERNS expanded to include the .svml extension.
- simQt::SettingsModel includes new constructor that does not take a QSettings. This turns on isReadOnly mode by default.
- simQt::SettingsModel's memento now stores and restores metadata, allowing one SettingsModel's memento to fill the contents of an empty SettingsModel.
- simQt::SettingsModel::save() now refuses if SettingsModel::fileName() is empty.
SIMDIS SDK 1.12
SIMDIS SDK changes since version 1.11
New Features
- DB Driver osgEarth Plug-in is no longer built. Instead, DB support is built directly into simVis, matching new osgEarth 3.0 style.
- Data Tables can now flush individual columns.
- Earth File Map layers now automatically refresh if they contain a 'refresh' key set to a numeric value representing the minutes between refresh. This is particularly useful for live weather image layers.
- Platforms now support more highlight styles with various line modes, using the new simVis::CompositeHighlightNode and simVis::LineDrawableHighlightNode.
- SDK is now compatible with osgEarth 3.0 API. Old osgEarth 2.x API is no longer compatible.
- simCore::CsvReader is generic CSV reader class that is intended to loosely mirror Python's csv module.
- simCore::coordinateSystemToString() and simCore::coordinateSystemFromString() provide to- and from-string functionality for simCore::CoordinateSystem.
- simData.proto to include a preference for a Custom Renderer center axis.
- simData::DataStore::FlushType updated with NON_RECURSIVE_DATA to flush points and commands. Does not flush category data, generic data, or data tables. simData::flushEntityData()'s signature was updated to handle the new flush type.
- simData::PlatformPrefs field velVecColor added to control the color of a velocity vector.
- simData::TableColumn can now report its owning Table's ID.
- simData::TimeTickPrefs added to control simVis::TimeTicks for drawing a time ticks trail on a platform.
- simQt::BindCenterEntityToEntityTreeComposite supports centering on an inactive entity by changing the scenario time to the closest time when the entity is active.
- simQt::DndTreeView added to circumvent a Drag and Drop bug with QTreeView.
- simQt::EntityTreeComposite's rightClickMenuRequested() signal now includes the QMenu pointer to populate. addExternalAction() and removeExternalAction() are now deprecated.
- simQt::EntityTreeModel now has a non-const version of index() method, which processes the delayed entity if the initial search did not find the entity.
- simUtil::DynamicSelectionPicker now gives preferential advantage to platforms over other entity types. This can be configured with setPlatformAdvantagePct().
- simUtil::HudPositionEditor now exposes more methods that wrap the HudPositionManager and HudEditorGui correctly, allowing for easier use.
- simUtil::HudPositionManager::getAllWindows() now includes a parameter that lets you specify whether you only want active (non-removed) windows.
- simUtil::MapScale now has a method to toggle the units.
- simUtil::MapScale now includes an optional background box and padding values.
- simVis::GOG::Cone is a new GOG shape representing a cone.
- simVis::GOG::Parser methods expanded to allow easier caching of parsed GOG information.
- simVis::GogNodeInterface now stores the starting line number of the shape from the GOG source file.
- simVis::LineDrawable and associated files have been removed. Use osgEarth/LineDrawable directly instead.
- simVis::Projector now supports override color preferences.
- simVis::Registry::setPseudoLoaderExtensions() and getPseudoLoaderExtensions() is used for specifying the extensions of known OSG pseudo-loaders. Filenames with these extensions do not go through the file search routines.
Bug Fixes
- SIMDIS-3363: GOG Annotations using xy and xyz now project using X-East instead of ENU (curved/warped flat earth), matching line projections.
- Custom Render entities without a host can now display a Local Grid.
- Speed Lines and Speed Rings now dynamically resize correctly.
- WorldMagneticModel::GeoMag::calculateVariance() now clamps input date to (latest WMM year 5) before calculating variance, rather than returning a variance of 0.0 when date was past that limit.
- simCore::Mgrs::convertMgrstoUtm() is renamed convertMgrsToUtm() to match SDK style.
- simCore::calculateRelAng() updated to more correctly calculate composite angle.
- simCore::getAngleString() now shows 0 degrees for 360 degrees.
- simData::MemoryDataStore::removeEntity() now correctly deletes projectors owned by a deleted beam.
- simData::MemoryDataStore::timeBounds() for scenario times now account for deletes and flushes, but are now limited to platform TSPI points.
- simData::MemoryTable::DoubleBufferTimeContainer::getTimeRange() now returns correct values in all cases.
- simQt::MapDataModel lost signals imageLayerColorFilterChanged(), imageLayerVisibleRangeChanged(), and imageLayerAltitudeChanged(), based on updates to osgEarth 3.0 API.
- simQt::SettingsProxyModel correctly invalidates and resets its filters when the source model adds/removes settings.
- simQt::TimeWidget now always generates a valueEdited() signal when the user finishes editing the time.
- simUtil::HudManager now accepts UTF-8 encoded text properly.