What's New? |
Beginning with the next release, an updated license file will be required to use DME Component Libraries. An updated license file can be requested ahead of time by contacting AGI support to make your eventual upgrade easier.
COLLADA model support will be removed from Insight3D in a future release. This format has been deprecated in STK Desktop 12.9. COLLADA models should be converted to the gLTF model format, using any of the readily available 3D modeling content creation tools, such as Blender, Maya, or Modo.
Added CircularEquatorialOrbitGrazingAngleConstraint which constrains access based on the angle between the directed line segment of the link to the closest point on the visible (unobstructed) arc of the circular equatorial orbit. Typically, only the minimum value would be set, to define a band of avoidance about the circular equatorial orbit.
Added AtmosphericAttenuationModelItuRP676Version10, a new version of the ITU-R P.676 signal propagation model, which computes attenuation by atmospheric gases and related effects.
The IAU 2006 XYS data used to compute the International Celestial Reference Frame (ICRF) has been extended to include data until 2150. This matches data file updates made in STK Desktop 12.8.
An example using a glTF model with PBR materials has been added to the HowTo, replacing the ColladaFX example.
Corrected an issue that could cause licensing checks to execute earlier than expected in unusual situations, when using LicensingActivateLicense, leading to a licensing exception being thrown before the license could be activated.
Fixed several issues in CcsdsOrbitEphemerisMessageSegment that caused exceptions when writing files if data collections were not set after construction, and caused inferred values to not be recomputed when dependent data changed.
Removed the following items, which were marked obsolete in a previous release:
SphericalHarmonicsTideType and related constructors in SphericalHarmonicGravityField
Obsolete protected constructor for SinglePointStoppablePropagator
Added InternationalTerrestrialReferenceFrameTransformer which converts data between ITRF frames. See the Reference Frames and Transformations topic for more details.
Added NPlateAtmosphericDragForce and NPlateSolarRadiationForce, which compute atmospheric drag and solar radiation pressure forces by modeling a spacecraft body as a collection of individual plates, each with surface areas, body-fixed directions, and drag or reflectivity coefficients. See the Force Models topic for more information on these new force models.
Added ScalarVariableAreaJulianDate and ScalarVariableAreaArgumentLatitude, which model the area of a spacecraft as varying with time or argument of latitude, for use with force models. These scalars can also be loaded from STK Desktop data files.
The following types of coverage grids now create their grid points using multiple threads:
The computation which creates AzimuthElevationMasks from terrain data performed by TerrainAzimuthElevationMaskCompute has been improved to better sample along each azimuth. This reflects similar changes made in STK Desktop 12.7.
The third-party library libwebp, included as part of Insight3D, has been updated to a newer version. Additionally, the Insight3D implementation for loading TGA files has been updated.
The rate properties of LifetimeElements computed by LifetimeOrbitPropagator have been corrected to be in units per second, consistent with the documentation for these properties. Previously, these values were in units per orbit revolution.
Subclasses of TerrainPosts no longer directly expose their storage arrays. Post heights can be accessed through the indexer instead.
QuantizedMeshTerrainTile has been rewritten to reduce memory usage and to be immutable. Data not necessary for QuantizedMeshTerrainProvider calculations have been removed, and internal storage arrays are no longer directly accessible.
DilutionOfPrecision.GetCovariance() and DilutionOfPrecision.GetGeometryMatrix() have been deprecated. Use CovarianceMatrix and GeometryMatrix instead.
Added CentralBody implementations for the following planets, dwarf planets, and planetary moons:
Added the ability to read JPL SPICE .bsp files and use them to provide center of mass locations for these new CentralBodies. See the External Data topic for more details on loading this data.
Added CelestrakGeneralPerturbationElements and UsafGeneralPerturbationElements which can read general perturbation elements in comma-separated value (CSV) formats, which can then be propagated by Sgp4Propagator.
Added CcsdsOrbitEphemerisMessageFile which enables reading and writing of CCSDS Orbit Ephemeris Message (OEM) files.
Added Covariance6By6TwoBodyBlender which interpolates position and velocity covariance matrices in orbital regimes where the two-body orbit approximation is reasonably valid.
GeospatialContentServerTerrain now supports using GCS application tokens to access terrain data, by passing in a GeospatialContentServerAuthorizationProvider containing an application token issued in the GCS interface.
Added SceneClouds, which can be used to display a cloud layer on the globe at a specified altitude. This feature supports static image files (png, jpg, etc.) or a .cld file that associates images to timestamps.
Added SceneVisualEffects, which controls various post processing effects that can be applied to the scene such as lens flare and vignette.
QuantizedMeshTerrainProvider height calculations are now significantly faster, and QuantizedMeshTerrainTile instances are significantly smaller in memory, allowing more tiles to fit in the cache.
Added an example demonstrating how to design and target both cislunar and circumlunar free return trajectories. See the Lunar Free Return Code Sample topic.
Added TiremPropagationModelTerrainProfileComputation, which is an optional delegate that can be configured in order to take full control over the terrain profile information used by the TIREM propagation model.
Added constructors to NgaDigitalTerrainElevationData to allow creating an instance without a DMED file, by instead passing in the required directory and extent information.
Several third-party libraries included as part of Insight3D have been updated to newer versions.
DME Component Libraries for .NET now targets .NET Standard 2.0 for analysis libraries, and .NET Framework 4.6.2 for Insight3D and related libraries. See the System Requirements topic for more information. Example applications have been changed to target .NET Framework 4.7.2.
Insight3D now depends on the Microsoft Visual C++ Redistributable for Visual Studio 2022, which should be installed on any system running an application using Insight3D. The installer for the current version of the redistributable is included in the install for ease of deployment.
SphericalHarmonicGravityCoefficients has been renamed to SphericalHarmonicCoefficients to reflect the fact that this class is now also used to describe spherical harmonic magnetic field coefficients. It has also been moved from the Orbit Propagation Library to the Models Library.
Several result classes have been renamed and converted to generic classes to allow them to contain different result types. DifferentialCorrectorStepResult has been renamed to MultivariableFunctionSolverStepResult. SolvableMultivariableFunctionEvaluationAndDerivativeResults has been renamed to MultivariableFunctionEvaluationAndDerivativeResults. MultivariableFunctionSolverResults is now a generic class and can contain various types of iteration results.
TropoScintAttenuationModelItuRP618Version12.DeepFadeOption has been removed, which reflects changes made in STK Desktop 12.6. The algorithm now selects the scintillation mode internally.
The protected constructor for SinglePointStoppablePropagator has been marked obsolete, and replaced by a new constructor which takes the parameters in a corrected order.
The classes containing version information for each library have been renamed as a result of the product name change. For example, StkComponentsCore is now CoreLibraryVersion.
Added ActiveSetSequentialQuadraticProgrammingOptimizer, an implementation of ParameterOptimizer which optimizes a cost function by iteration towards a solution, using an active set method for handling inequality constraints and a quasi-Newton method for solving quadratic subproblems. Also added TargetedSegmentListParameterOptimizer, which uses these capabilities for trajectory optimization in the Segment Propagation Library. See the Trajectory Optimization Example topic for example code using these new optimization capabilities.
Added MagneticFieldVector which represents the magnetic field vector at a point in space. Two derived classes provide functionality for the two primary Earth-centered magnetic field models: InternationalGeomagneticReferenceFieldVector and WorldMagneticModelVector.
STK Components has been renamed to DME Component Libraries.
Insight3D has been updated with internal code changes.
Added MagneticCoilTorque, which models the effects of a magnetic field vector on a spacecraft equipped with a magnetic coil.
Added JplDE440, which loads JPL DE440 ephemeris data.
Added GoldenSectionFindExtremum, which locates a local extremum of a function using the Golden section algorithm.
The data required by EarthGravityModel96MeanSeaLevel is now included within the library, removing the need to separately download the external data file WW15MGH.DAC.
Improved the stability of QuarticRealPolynomialRealRoots for certain cases.
Fixed documentation for AxesVelocityOrbitNormal to correctly indicate the alignment of the orbit normal with the Y axis of the resulting axes.
In the previous release, the Python example described in the Using DME Component Libraries with Python topic was not included in the install. This has been corrected.
In a future release, the target framework for STK Components for .NET will change. Analysis libraries will change to target .NET Standard 2.0, and Insight3D and related libraries will change to target .NET Framework 4.6.2.
Support for the current target framework (.NET Framework 4.5) was ended by Microsoft in 2016. Targeting .NET Standard 2.0 will improve the experience when building applications targeting .NET Core or .NET 5+. Applications targeting .NET Framework 4.6.2 or newer will continue to be supported. However, as before, using the most recent .NET Framework version is strongly recommended.
Check the Microsoft documentation for more details about the .NET implementations that support .NET Standard 2.0. If you have any questions about this change, contact AGI support.
ScatteringCoefficientApplyScatteringCoefficient now requires an additional parameter which represents the rotation from the source axes to the sink axes.
Subclasses of IntendedSignalStrategy must now implement GetAllIntendedSignalsEvaluator.
PrimitiveManagerPrecisionExponent has been marked obsolete, and will be removed in a future release.
The Communications Library and Radar Library now support dual polarized signals. In support of this functionality, the following types have been added:
Transmitter and receiver antenna extensions: DualPolarizedRadioFrequencyTransmittingAntennaExtension, DualPolarizedRadioFrequencyReceivingAntennaExtension, DualPolarizedRadarTransmittingAntennaExtension, and DualPolarizedRadarReceivingAntennaExtension.
Signal identifiers: PrimaryPolarizationChannelIdentifier and OrthogonalPolarizationChannelIdentifier.
Intended signal strategies: IntendedSignalByPrimaryPolarization and IntendedSignalByOrthogonalPolarization.
OrthogonalPolarizationSource which produces a polarization source which is orthogonal to the polarization obtained from the given primary polarization source, regardless of the link geometry.
IntendedSignalStrategy objects can now filter an input SignalCollection to produce an output SignalCollection of multiple intended Signals, rather than only being able to match one Signal. This enables a new CompositeIntendedSignalStrategy, which applies a sequence of IntendedSignalStrategies to build a filter out of existing filters.
Added AnsysHfssCrossSectionScatteringCoefficient which loads complex scattering data produced as output from Ansys HFSS.
Added ComplexCrossSectionScatteringCoefficient which represents a complex 2x2 scattering coefficient matrix.
Added an optional CostateVector to ImpulsiveManeuverInformation that can be used to change the orientation of an ImpulsiveManeuverSegment at run time. See the Lambert and Primer Vector Example topic for an example that demonstrates how to use this capability, as well as illustrating the use of the LambertOrbitSolver.
SphericalHarmonicGravityModel now supports secular variations in gravity field coefficients using SphericalHarmonicGravitySecularVariations. Secular variations are now automatically loaded from .grv files, if present. To disable this, set SecularVariations to null after loading the model from the file.
Added RungeKuttaVerner89Integrator.
Added PropagationEulerianAxes, which is a PropagationStateElement that models the rotational kinematics and dynamics of a rigid body.
Added TorqueModel classes that model the torque effects of reaction wheels, gravity gradients, and thrust misalignments upon a rigid body. See the Torque Models topic for more information.
Added methods to LambertOrbitSolver which solve for parabolic orbits between two position vectors and solving for minimum-duration, multiple-revolution transfers between two position vectors.
Added a Using DME Component Libraries with Python topic to the Programmer's Guide, explaining how to use STK Components from Python.
All methods which download data over the internet from AGI servers now connect using HTTPS instead of FTP.
SignalProcessors may now be directly used anywhere an IServiceProvider which provides the ISignalOutputService service is required, such as with various CommunicationObjectScalar objects.
Insight3D now supports the EXT_mesh_gpu_instancing glTF extension, which allows for instanced geometry in models, and the KHR_texture_basisu glTF extension, which enables the use of KTX2 compressed textures in glTF models.
SignalToNoiseRatioScalar may now be configured with a RadarWaveformProcessor, as an alternative to requiring the radar receiver to be configured with one.
Improved the performance of TerrainAlongLine computations when using a TerrainProvider that has a minimum sample spacing that varies over its extent.
Added properties to CssiSolarGeophysicalData to get the time intervals of the observed, daily predicted, monthly predicted, and monthly fit data sets.
Added TerrainProviderGetLocalMinimumSampleSpacing to determine the minimum sample spacing at a specific location.
Added a new interface IEquatableEpsilon<T> to all types which can be compared for equality within a specified tolerance.
Added SignalCollectionSelectSignals to select Signals from a collection based on whether they match a given predicate.
TropoScintAttenuationModelItuRP618Version12 has been updated to match STK Desktop 12.5, which corrects an issue with results at very low angles.
Fixed an issue where TerrainAlongLineComputeElevationAngleAboveTerrain would return NaN instead of a valid value in rare circumstances.
SphericalHarmonicsTideType has been marked obsolete, and will be removed in a future release. Instead, use SphericalHarmonicGravityModelWithoutEarthPermanentTides or SphericalHarmonicGravityModelWithoutPermanentTides to remove permanent tide contributions from a SphericalHarmonicGravityModel if needed.
Added GeospatialContentServerTerrain which reads terrain data from a Geospatial Content Server (GCS) instance.
Added SolidTideModel which models permanent or time-varying solid tides for use with SphericalHarmonicGravityField. The following implementations are available:
Iers2003SolidTideModel - A high-fidelity, time-varying Earth model that is based on the IERS Conventions (2003) technical report 32.
SimpleSolidTideModel - A simplified model which uses k2 and k3 Love numbers to model time-varying solid tides for other celestial bodies.
PermanentSolidTideModel - A model that can add permanent tides to a tide-free model to form a zero-tide model.
Added ElevationMaskFromTerrain methods which compute elevation masks from the specified terrain provider along the provided azimuths.
Added TerrainAlongLineComputeObstructionMetric methods which avoid performing an inverse sine, which can be problematic numerically and add unnecessary operations when trending obstruction by terrain.
Several third-party libraries included as part of Insight3D have been updated to newer versions.
Fixed an issue where TerrainAlongLineComputeElevationAngleAboveTerrain could return NaN instead of a valid result.
Insight3D now depends on the Microsoft Visual C++ Redistributable for Visual Studio 2019, which should be installed on any system running an application using Insight3D. The installer for the current version of the redistributable is included in the install for ease of deployment.
Removed the following items:
GlobeOverlaySettings.UsePerPixelLighting
CameraSnapshotFileFormat.Ras
RenderPass.TranslucentLowRes
Removed the property NetworkContext.WebClient. Requests made by Insight3D are now always made using .NET APIs. To configure these network requests, either use the standard .NET APIs or application config file, or for fine-grained control, set NetworkContextConfigureRequestCallback, which will be called with each request before it is sent.
Sgp4Propagator now throws an exception when propagating a TwoLineElementSet with an EphemerisType of 4. Previously, EphemerisType was ignored, but recent changes to the TLE standards cause some of the other fields to refer to different parameters than the standard ephemeris type 0 TLEs. Also, TLEs with ephemeris type 4 require a special version of SGP4 called SGP4-XP to propagate correctly, which is not supported by STK Components.
Added WalkerConstellation which allows the construction of Walker satellite constellations.
Added SpecializedOrbitSolver which creates propagators that model the following specialized orbit types:
Circular orbits.
Critically-inclined orbits.
Molniya orbits.
Stationary orbits.
Repeat Ground Trace orbits.
Sun-synchronous orbits.
Added PolylinePrimitiveOptionalParameters which allows polyline parameters to be defined for each segment of the polyline. Associated overloads were also added for the methods Set, SetCartographic, SetPartial, and SetPartialCartographic.
Added new helper methods to TwoLineElementSet to convert between Alpha-5 and integer representations of the SatelliteNumber property. See the space-track.org documentation for details about the Alpha-5 representation.
Added SimpleDigitalTransmitterModulation to configure the DigitalModulation of the signal transmitted by a SimpleDigitalTransmitter.
Added CameraVideoFormat and associated overload StartRecording.
When using Insight3D, if a required external DLL is not found at runtime, a more informative exception will be thrown indicating the name of the DLL and the path where it was expected to be found.
GTOPO30Terrain now correctly locates the corresponding DEM file regardless of filename case when used with a case-sensitive filesystem.
Fixed an issue where an unbounded ComplexConic would throw an InvalidOperationException when evaluated.
In a future release, support for partial-trust applications will be removed. Microsoft no longer supports partially trusted code and recommends against its use. If you have a use case that requires partial-trust use of STK Components, contact AGI support.
TiremPropagationModel3_18, TiremPropagationData, and TiremPropagationMode have been moved from AGI.Foundation.Communications.dll to the new AGI.Foundation.Tirem.dll. This new library replaces the previous additional library which was required at runtime to use TIREM.
PolarizationSourceGetPolarizationEvaluator now returns SignalPolarizationEvaluator, which is a new evaluator type that computes Polarization for a given time and Signal. This allows polarization to vary based on the properties of the signal being propagated.
Removed the following items, which were marked obsolete in a previous release:
CommunicationLinkScalar.IntendedSignalIdentifier and CommunicationObjectScalar.IntendedSignalIdentifier
AtmosphericAttenuationModelItuRP676Version3, AtmosphericAttenuationModelItuRP676Version5, CloudFogAttenuationModelItuRP840Version3, RainAttenuationModelItuRP618Version9
Constants.SolarLuminosity
NavigationSignalCharacteristics.MCodeSubCarrierFrequency
Zero-argument and one-argument constructors in PropertyInvalidException
TiremPropagationModel implements the most recent available version of TIREM using a native library on 64-bit Windows and Linux platforms. TiremPropagationModel3_18 is still available without any native runtime dependencies. See the TIREM topic for more information.
Added AnsysHfssFarFieldDataGainPattern and AnsysHfssFarFieldDataPolarizationSource. These classes import data from an Ansys HFSS far field data formatted file (*.ffd) to be used as a RadioFrequencyGainPattern or PolarizationSource, respectively. The far field data exported by Ansys HFSS is based on vertical and horizontal electric field vector components arranged in a spherical coordinate system.
Added support to the Cesium library for the following CZML features:
Added new helper methods to ServiceHelper and LinkHelper for common operations, and also added AxesHelper, PointHelper, and GpsReceiverHelper which provide similar functionality for common operations on the corresponding types Point, Axes, and GpsReceiver.
Corrected the value returned by QuantizedMeshTerrainProviderMinimumSampleSpacing (as well as the derived class StkTerrainServer) to use the ZoomLevel in the calculation. Note that because quantized-mesh tiles are not a regular grid-based format, this value is still an estimate.
Corrected an issue where an invalid entry in a satellite database could throw an exception when read by StkSatelliteDatabase, which would prevent use of other valid entries. Invalid data columns are now left with their default value.
Removed WeakReference<T>, which was a helper class that was only useful in old versions of .NET.
Similar to AccessQueryAnyPath, LinkGraphFindAllPaths now returns null if either object does not exist in the link graph.
Clarified the documentation for SimpleReceiverGain to indicate that the value pertains to the gain of the amplifier.
Fixed an issue in AccessQueryAnd which would cause an erroneous delay evaluation to be created and lead to an exception.
Removed the following items, which were marked obsolete in a previous release:
Static creation methods in EllipsoidSurfaceRegion.
Methods in TerrainAlongLine which only take a maximum terrain height parameter.
StkCityDatabase.GetCentralBody, StkCityDatabase.GetCityType, and StkCityDatabase.GetCountry.
StkFacilityDatabase.GetCentralBody and StkFacilityDatabase.GetNetwork.
SegmentPropagatorConstraint.Scaling and SegmentPropagatorConstraint.Tolerance.
SegmentPropagatorVariable.MaximumStep, SegmentPropagatorVariable.VariableTolerance, and SegmentPropagatorVariable.Scaling.
Constructors in AccessEntityFilter<TEntity>, EntityDynamicSensorFieldOfView<TEntity>, EntityPoint<TEntity>, and EntityAxes<TEntity> which do not take EntityParameter<TEntity> and TransactionParameter parameters.
TransactionParameter.Instance and EntityParameter.Instance.
PhasedArrayGainPattern.BacklobeSuppression
EvaluatorHelper.TimeIntervalCollectionIsTimeVarying, EvaluatorHelper.EvaluatorCollectionIsThreadSafe, and EvaluatorHelper.AvailabilityIntervals.
Added CentralBodyIntersection, a utility that can check for orbit intersection with a planet given two-body dynamics.
Insight3D has been updated with internal code changes, including changes to glTF loading.
CartographicExtent can now be constructed with the value of π in native units of the extent. In addition, it now supports longitude wrapping and extents which cross the antimeridian.
An issue has been corrected in TropoScintAttenuationModelItuRP618Version12 which caused the model to compute the deep fade loss even when DeepFadeOption was set to false.
TiremPropagationData is now immutable, and its methods have been renamed and their documentation has been corrected.
IFigureOfMeritDefinitionGetScalarFigureOfMerit now takes a ValueDefinition<CoverageData> instead of a CoverageData.
CommunicationLinkScalar.IntendedSignalIdentifier and CommunicationObjectScalar.IntendedSignalIdentifier have been marked obsolete. Use CommunicationLinkScalarIntendedSignalStrategy and CommunicationObjectScalarIntendedSignalStrategy instead.
Added CzmlUpdateDocumentPacketCount to get the number of packets that will be written by a CzmlUpdateDocument. This property can be used to determine if an update is required.
Added CommunicationLinkSignalData<T> which can be used to retrieve data from a Signal after propagating across a link.
Added PointInRegionNearestToReferencePoint. This new point is defined as the closest point within the interior of a specified EllipsoidSurfaceRegion relative to another reference point. The reference point may be on, in, or around the region.
Added regularized boolean operations to EllipsoidSurfaceRegions. These operations include: add (union), subtract (difference), intersect, and complement. A method for combining overlapping regions, Reduce was also added. In order to support these options, EllipsoidSurfaceRegions may now be compared for equality.
Added several new methods to EllipsoidSurfaceCurve, including: ComputeIntersection, for finding the location of curve-curve intersection, and FindClosestPointOnCurve, for finding the location of the point on a curve nearest a given point. EllipsoidSurfaceCurves may now be compared for equality.
Added Iau2015Orientation, which provides central body orientation parameters based on the 2015 IAU report.
Added NavigationBlockType.GpsBlockIII and NavigationSignalType.GPSL1C for processing GPS Block III spacecraft and associated signals.
Added values for STK 12 to StkAttitudeFileVersion and StkEphemerisFileVersion.
StkAttitudeFile, StkEphemerisFile, and StkPatternFile can now round-trip files created by future versions of STK, by preserving the version information read from the file.
TiremPropagationModel3_18 now adds TiremPropagationData as data to Signals as they are propagated. This data includes all available information from the TIREM calculation.
The performance and memory use of GridTimeSampledValues have been greatly improved when using parameterized grid types.
Calculations in the following gain patterns have been updated to match changes made in STK Desktop 12: BesselCircularApertureGainPattern, CosineCircularApertureGainPattern, CosinePedestalCircularApertureGainPattern, CosinePedestalRectangularApertureGainPattern, CosineRectangularApertureGainPattern, CosineSquaredCircularApertureGainPattern, CosineSquaredPedestalCircularApertureGainPattern, CosineSquaredPedestalRectangularApertureGainPattern, CosineSquaredRectangularApertureGainPattern, SincExponentRectangularApertureGainPattern, and UniformCircularApertureGainPattern.
Coverage calculations based on time sampling at discrete time steps (ParameterizedTemporallyPartitionedCoverageDefinition and MaterializedTemporallyPartitionedCoverageDefinition) produce more consistent results when computed with different threading settings.
Added a clarifying message to the exception thrown when calling Invert on a non-invertible Matrix3By3.
Fixed an issue where a TwoBodyStoppablePropagator would create a duplicate ReferenceFrameAdapter, causing states to be transformed twice.
Intervals of consideration in temporally partitioned coverage calculations (ParameterizedTemporallyPartitionedCoverageDefinition and MaterializedTemporallyPartitionedCoverageDefinition) now correctly honor IsStartIncluded and IsStopIncluded.
Fixed an issue where TranslationalMotionInterpolator would return the second data node instead of the last when evaluated without specifying an order and the date to be evaluated is a segment boundary time.
Fixed a very rare issue where EllipsoidSurfaceRegionCheckPointInsideRegion could throw an exception.
ParameterizedEvaluator<TResult> and other similar types are now abstract base classes that can be used to more easily implement a specific parameterized evaluator.
As a result of changes made to RainAttenuationModelItuRP838Version3 and CloudFogAttenuationModelItuRP840Version6, the boolean to evaluate on the transmit clock is no longer supported for these models.
The following SignalPropagationModels have been marked obsolete, and will be removed in a future release, because they have been removed from STK Desktop 12. All of these models have been superseded by newer versions more than 10 years ago.
AtmosphericAttenuationModelItuRP676Version3, AtmosphericAttenuationModelItuRP676Version5 - Use AtmosphericAttenuationModelItuRP676Version9 instead.
RainAttenuationModelItuRP618Version9 - Use RainAttenuationModelItuRP618Version12 instead.
CloudFogAttenuationModelItuRP840Version3 - Use CloudFogAttenuationModelItuRP840Version6 instead.
StkTerrainServer now extends from a new abstract base class, QuantizedMeshTerrainProvider, and most functionality has been moved up to the new base class, which can be used to implement a TerrainProvider based on quantized-mesh tiles without using the STK Terrain Server REST API. As a result, StkTerrainServerTerrainCache has been removed and replaced by QuantizedMeshTerrainCache.
Two constructors in PropertyInvalidException have been marked obsolete. Use the constructor taking both propertyName and message parameters, or the static Validate methods.
Added support to the Cesium library for the following CZML features:
Added LambertOrbitSolver, a tool for initial orbit determination and orbit transfer targeting.
RainAttenuationModelItuRP838Version3 and CloudFogAttenuationModelItuRP840Version6 can now optionally be configured with new objects that provide more control over the atmospheric data used by these signal propagation models to compute signal attenuation. Configuring a custom LinkSubdivision specifies how to subdivide the link into sub-segments, where atmospheric conditions will be considered constant over each sub-segment. Configuring a custom ItuRP838AtmosphericModel or ItuRP840AtmosphericModel, respectively, allow atmospheric data to be provided to the calculation at the midpoint of each sub-segment as the signal travels along the link path. These objects allow detailed weather information to be provided to the model, and enables geometries where the link is primarily horizontal and the signal might pass through multiple distinct weather cells.
Calculations in the following gain patterns have been updated to match changes made in STK Desktop 11.7.1: CosineRectangularApertureGainPattern, CosineSquaredPedestalRectangularApertureGainPattern, CosineSquaredRectangularApertureGainPattern, SincExponentRectangularApertureGainPattern, and UniformRectangularApertureGainPattern. Calculations are now based on the Cartesian coordinate frame instead of the rectangular antenna coordinate frame, which eliminates anomalies observed at higher elevation angles.
Improved the performance of calculations in OrbitalElements.
Added a section to the Frequently Asked Questions topic demonstrating whiskbroom and pushbroom sensor design in STK Components.
TwoBodyPropagator produces more reliable results for certain edge-case inputs.
Added several calculation methods to the Complex class.
Clarified the documentation for the time-of-flight methods in OrbitalElements to indicate that a negative true anomaly indicates a time before periapsis (negative time) and a positive sign indicates a time after periapsis (positive time).
Fixed a bug where segment boundaries were not passed on to Covariance3By3SizeAndOrientationInterpolators produced by StkEphemerisFile.
Removed the following items, which were marked obsolete in a previous release: GpsCommunicationsConstellation.Create (overload without rolloverCount), LinkGraphics.FollowSurface, TargetedSegmentListOperatorResults.SegmentsForNextOperator, and items related to multiple maneuvers for an ImpulsiveManeuverSegment.
The following methods have been marked obsolete and replaced by better named methods:
In StkCityDatabase, GetCentralBody is replaced by GetCentralBodies, GetCityType is replaced by GetCityTypes, and GetCountry is replaced by GetCountries.
In StkFacilityDatabase, GetCentralBody is replaced by GetCentralBodies, and GetNetwork is replaced by GetNetworks.
The ComputeElevationAngleAboveTerrain and ComputeTerrainIntersection methods in TerrainAlongLine specifying only a maximum terrain height parameter have been marked obsolete. Use the overloaded methods specifying both minimum and maximum terrain heights instead.
In AtmosphericAttenuationModelItuRP676Version3, AtmosphericAttenuationModelItuRP676Version5, and AtmosphericAttenuationModelItuRP676Version9, the API for providing custom atmospheric data from external sources has changed. The ITU-R P.676 model requires the atmospheric conditions for locations along the link path as it crosses multiple horizontal layers. The previous interface did not provide the needed values, and so the following properties have been removed: CustomPressure, CustomTemperature, and CustomWaterVaporPressure, and replaced with a new property CustomAtmosphericModel. This new property allows installation of a new definitional object, ItuRP676AtmosphericModel, which must provide an evaluator which can compute ItuRP676AtmosphericValues for a given JulianDate and Cartographic location. The evaluator will be evaluated at multiple locations along the link during signal propagation, depending on the link geometry and the model-defined atmospheric layers. Note that by default, the model uses values from the standard atmospheres from ITU-R P.835, which is the same as the previous default behavior.
Changed the default for TargetedSegmentListDifferentialCorrectorOnlyStoreFinalResults to true.
ScalarAngleInRange now throws PropertyInvalidException instead of ArithmeticException when the minimum or maximum angle range values are invalid.
Added new StkSatelliteDatabaseDownload methods to load a StkSatelliteDatabase directly from a ZIP file, or download the current database over the internet from an AGI server.
Added CzmlUpdateDocumentCreateStreamingDocument, which creates a CzmlUpdateDocumentPacketizer that can write individual packets contained by a CzmlUpdateDocument.
Added InitialOrbitSolver, which can determine an orbit based on three positions and (optionally) three times, under two-body conditions.
Added TerrainAlongLineComputePositionWithMaximumElevationAngle, which returns the point on terrain with the highest elevation angle between two positions.
Insight3D has been updated to a new underlying code baseline, with behind-the-scenes improvements, including better glTF support.
Improved the TerrainAlongLineComputeElevationAngleAboveTerrain algorithm, which now attempts to locate extremal values of terrain when sampling of the terrain indicates a sign change in the slope among three adjacent samples. This corresponds to changes made in STK Desktop 11.7.
TerrainLineOfSightConstraint now has a MinimumTerrainHeight property, which can be used to specify the minimum height relative to the Shape. This property defaults to TerrainAlongLineDefaultMinimumTerrainHeight.
ScalarDensityMsis86, ScalarDensityMsis90, and ScalarDensityMsis2000 no longer truncate the altitude values used in their computations, to match changes made in STK Desktop 11.7.
Improved the performance of calculations in OrbitalElements.
Improved the correspondence between the bounding extent representations in radians and native units for UsgsDigitalElevationModel and RasterTerrainProvider.
Improved the exception thrown by ScalarAtEndOfSegmentConstraint and ScalarAtEndOfNumericalSegmentConstraint when the segment it is associated with cannot be found. The exception message will now contain the name of the segment that it was looking for.
Improved documentation clarity in the Multivariable Function Solvers topic.
Added a remark indicating the requirement that the inertial and fixed frames correspond when using Cartesian input with KozaiIzsakMeanElements.
Corrected errors in the calculation of the following signal propagation models, where they did not match the equations in the ITU specifications: AtmosphereModelItuRP835, CloudFogAttenuationModelItuRP840Version6, AtmosphericAttenuationModelItuRP676Version3, AtmosphericAttenuationModelItuRP676Version5, RainAttenuationModelItuRP618Version10, RainAttenuationModelItuRP618Version12, and RainAttenuationModelItuRP838Version3.
Fixed a bug where the final position for a CZML polyline would be omitted if it was equal to the first position. This should only be done for CZML polygons and holes, which are closed curves by definition.
Decreased the likelihood of crashes when using TargetedSegmentListDifferentialCorrector. MultivariableFunctionSolverResults.FinalIteration now returns null if there are no results.
Fixed incorrect exception documentation on ModifiedKeplerianElementsComputePeriod.
Removed the following items, which were marked obsolete in a previous release: AtmosphericAttenuationModelItuRP676, CloudFogAttenuationModelItuRP840, RainAttenuationModelItuRP618, RainAttenuationModelItuRP838, TropoScintAttenuationModelItuRP618, ItuRP618RainAttenVersion, ItuRP618TropoScintVersion, ItuRP676Version, ItuRP838Version, ItuRP840Version. Also, IPropagateCollectionFromOnePoint was unused and has been removed.
InterpolationAlgorithm now derives from DefinitionalObject, and interpolation has been moved to a new Interpolator type, which can be obtained from an InterpolationAlgorithm by calling GetInterpolator. The purpose of this reorganization is to make these types more closely match the rest of STK Components, where a definitional object (InterpolationAlgorithm) represents the configuration for a calculation and produces an evaluator (Interpolator) which performs the calculations using a snapshot of the configuration, and also allows a consistent approach to thread safety. Note that some Interpolators are not safe for use from multiple threads simultaneously, and so must be handled using the techniques described in the Multithreading topic.
The following static properties have been marked obsolete: TransactionParameter.Instance and EntityParameter.Instance. Rather than using these global singleton parameters, construct instances of the appropriate parameter type where needed, and use those parameters in your problem definitions.
AccessEntityFilter<TEntity>, EntityDynamicSensorFieldOfView<TEntity>, EntityPoint<TEntity>, and EntityAxes<TEntity> now must be constructed with instances of EntityParameter<TEntity> and TransactionParameter. The other constructors have been marked obsolete.
The following helper methods in EvaluatorHelper have been marked obsolete: TimeIntervalCollectionIsTimeVarying, EvaluatorCollectionIsThreadSafe, AvailabilityIntervals. Use the other helper methods with more consistent names.
SolverConstraintSettings and SolverVariableSettings now derive from DefinitionalObject.
The following properties in SegmentPropagatorConstraint have been marked obsolete, as the properties may be directly set on the underlying SolverConstraintSettings: SegmentPropagatorConstraint.Scaling and SegmentPropagatorConstraint.Tolerance.
The following properties in SegmentPropagatorVariable have been marked obsolete, as the properties may be directly set on the underlying SolverVariableSettings: SegmentPropagatorVariable.MaximumStep, SegmentPropagatorVariable.VariableTolerance, and SegmentPropagatorVariable.Scaling.
Added CzmlClientEntitySet, which can be used to create a CzmlUpdateDocument containing only the differences between a CzmlDocument and the previous state of a particular CZML client application. This provides a mechanism to efficiently send updates without retransmitting the entire CZML state repeatedly.
Added new CZML-related extensions which allow writing CZML delete packets for properties which are not specified using CesiumProperty<T>, which precludes use of the existing DeleteCesiumProperty<T>.
Added support to the Cesium library for the following CZML features:
AGIProcessedDataTerrain now supports reading PDTT version 2 files.
Added ScalarGrazingAltitudeBetweenTwoPoints, a new scalar that can compute the dynamic grazing altitude on the line-of-sight between two points in space.
Added ScalarSquintAngle, which can compute the angle between the projected velocity vector of a moving object and a projected displacement vector between the object and an arbitrary target. This is commonly used to measure or constrain the cross-track ground angle between two objects.
Added ScalarAngleInRange, a scalar that takes an input angle and outputs the angle in a new range. An example of this operation would be to take an angle produced in the range -π, π and output the same angle in the range 0, 2π.
Added ScalarAngleSmallSpan, a scalar that returns the small span between two scalars that produce an angle.
Added ScalarMaximumValue and ScalarMinimumValue. These scalars each take two scalars as input, and will return either the minimum or maximum when compared at the specified order.
Added ScalarDopplerConeAngle, a simple geometric scalar that returns the symmetric angle between the link displacement about the velocity vector at the specified end of the link.
Added SphericalDescriptiveStatistics for computing descriptive statistics of data that is spherical in nature.
Added several new method overloads to compute grazing altitude in Ellipsoid.
Improved the behavior of the grazing point and grazing altitude methods on Ellipsoid for nearly coincident points.
It is now possible to access the CoordinateAxes of covariance data contained in StkEphemerisFile.
It is now possible to subclass the underlying solver variable settings in SegmentPropagatorVariable and the underlying solver constraint settings in SegmentPropagatorConstraint.
Calculations are now validated against the latest version of the Standards of Fundamental Astronomy (SOFA) Libraries, Issue 2019-07-22.
Added a documentation topic, Ellipsoid Surface Regions, describing EllipsoidSurfaceRegions and how to create them using EllipsoidSurfaceRegionBuilders.
Fixed an issue where EllipsoidGeodesic would not report final longitude and final heading consistent with the rest of the points on the geodesic curve in the case where the final point happened to lie at a pole of the ellipsoid.
Fixed an issue where GregorianDate was not able to parse the output of ToIso8601String for certain dates when formatted with Iso8601Format.Compact.
Fixed an issue where SolverConstraintScaling would not be applied when using the TargetedSegmentListDifferentialCorrector.
No changes in this release. This release only contains changes that affect STK Components for Java.
All of the static creation methods in EllipsoidSurfaceRegion are now obsolete. These creation methods have been replaced with new EllipsoidSurfaceRegionBuilder types, which can create EllipsoidSurfaceRegions in all previous ways, plus several new ones. For more information, see each builder type: ConvexBoundaryEllipsoidSurfaceRegionBuilder, SpecifiedCurveEllipsoidSurfaceRegionBuilder, SpecifiedNodesEllipsoidSurfaceRegionBuilder, and SpecifiedExtentEllipsoidSurfaceRegionBuilder.
PhasedArrayGainPattern.BacklobeSuppression has been marked obsolete and renamed to BackLobeSuppression.
InterpolationAlgorithm now requires subclasses to implement DegreeRequired.
EllipsoidSurfaceRegion now supports Holes.
EllipsoidSurfaceRegion objects can now be created via unstructured surface point input using ConvexBoundaryEllipsoidSurfaceRegionBuilder.
Added TwoDimensionalConvexHull, which can create a 2D convex hull from input Rectangular points.
Added support to the Cesium library for the following CZML features:
Added DeleteCesiumProperty<T> to generate CZML which indicates that existing data (samples or interval values) should be deleted from the client for a particular property.
Added VectorCesiumProperty, UnitVectorCesiumProperty, and PointCesiumProperty, to allow any time-varying Vector or Point to be used to generate CZML values of type Cartesian or UnitCartesian.
Added the following new antenna gain patterns:
Added DynamicDelaunayElements, DynamicEquinoctialElements, and DynamicKozaiIzsakMeanElements, which compute time-varying orbital elements from a Point. Added ScalarDelaunayElement, ScalarEquinoctialElement, and ScalarKozaiIzsakMeanElement, which provide individual orbital elements as a time-varying Scalar.
Added a documentation page for numerical integrators, including examples on how to use them and guidelines on how to proceed for various types of problems.
Fixed an exception when using TranslationalMotionInterpolator with zeroth degree Lagrange interpolation.
Removed the following items, which were marked obsolete in a previous release: ScopedEvaluatorGroup, KeplerianElements.PerifocalToCartesianMatrix, KeplerianElements.TrueAnomalyToMeanAnomaly, KeplerianElements.TrueAnomalyToEccentricAnomaly, KeplerianElements.MeanAnomalyToTrueAnomaly, KeplerianElements.MeanAnomalyToEccentricAnomaly, KeplerianElements.EccentricAnomalyToTrueAnomaly, KeplerianElements.EccentricAnomalyToMeanAnomaly, KeplerianElements.ComputeEccentricity, KeplerianElements.ComputeRadiusOfPeriapsis, KeplerianElements.ComputeRadiusOfApoapsis, KeplerianElements.ComputeTimeOfFlight, KeplerianElements.ComputeTimePastPeriapsis, KeplerianElements.ComputeTimePastPeriapsis, KeplerianElements.TimePastPeriapsisToTrueAnomaly, KeplerianElements.TimePastPeriapsisToMeanAnomaly, KeplerianElements.TimePastPeriapsisToEccentricAnomaly, KeplerianElements.SemimajorAxisToPeriod, ChildrenExtension.FindDescendents, EvaluatorHelper.IsAvailable, EvaluatorHelper.EvaluatorCollectionIsThreadSafe, EvaluatorHelper.EvaluatorCollectionIsTimeVarying, EvaluatorHelper.AvailabilityIntervals, TimeConstants.PicoSecond, Stereoscopic.AutomaticallyComputeProjectionDistance, CoverageDefinitionOnCentralBody, CoverageGridPoint, CoverageGridResult, CreateCoverageGridPointForAccess, DiscreteCoverageDefinitionOnCentralBody, GridStatistics, EllipsoidGrid, EllipsoidGridGlobal, EllipsoidGridIntersection, EllipsoidGridLatitudeBounds, EllipsoidGridLatitudeLine, EllipsoidGridLongitudeLine, EllipsoidGridPoint, EllipsoidGridRegions, EllipsoidGridSpecified.
ImpulsiveManeuverSegment now only works with a single maneuver. For multiple impulsive maneuvers, use multiple segments.
TargetedSegmentListOperatorResults.SegmentsForNextOperator is now obsolete. Obtain the segment propagators from the ParentConfiguration instead.
LinkGraphics.FollowSurface is now obsolete, replaced by the new ArcType property. Note that in most situations, this will not need to be configured, since the new default (CesiumArcType.None) is appropriate for drawing links.
Added new methods to IPropagatedSignalService to return the propagated signal before or after a specific propagation model.
The overload of GpsCommunicationsConstellation.Create taking a SEM almanac filename had a hard-coded value of 1 for rolloverCount, which is no longer correct for almanacs after April 7, 2019. A new overload has been added taking rolloverCount as a parameter.
Removed PolylinePrimitive.RenderInScreenSpace which was unintentionally made public in a previous release.
Added the capability to model atmospheric refraction. VectorRefractedDisplacement represents a refracted displacement vector, using a configurable AtmosphericRefractionModel, and LinkRefracted wraps another link and provides the refracted path. Also, CommunicationLinkCollection now has additional methods to add links using a refraction model. Several refraction models are available:
Added the ability to distinguish the propagation loss for a specific propagation model, or subset of models, in the propagation chain. Use ScalarPropagationLossSelectedModels to specify the propagation models for which to compute loss, or use the new "Detailed" methods on CommunicationSystem to create LinkBudgetScalars with detailed propagation loss scalars for each propagation model, or to evaluate a LinkBudget containing the loss for each model.
Added CentralBodySurfaceCurveGraphicsArcType and CentralBodySurfaceRegionGraphicsArcType to specify how Cesium should connect the positions of a surface curve, or the boundary curve of a surface region. By default, this will be automatically detected from the type of EllipsoidSurfaceCurve. Also added LinkGraphicsArcType, however, the default of CesiumArcType.None is appropriate for drawing links in most cases.
Added AccessStoppingCondition, which is a stopping condition that can stop propagation or report events when the AccessClassification of a AccessQuery has a specified state.
Added RunSegmentListOperator. This operator will propagate the segments in a TargetedSegmentList once.
Added FiniteManeuverSegment and associated functionality to propagate spacecraft requiring modeling of non-instantaneous burns. This new functionality includes the ability to target a finite maneuver's properties based upon seed dynamics generated by a simple impulsive maneuver. Continuous thrust force modeling is included via ContinuousThrustForceModel. Generic propagation segment switching functionality is also included in the form of SwitchableSegment.
Various helper geometry types were also added to enable fixing thruster orientation, fixing spacecraft properties at a parameterized state, and more. These helper types include: PointFixedAtJulianDate, ScalarFixedAtJulianDate, VectorFixedAtJulianDate, DelegateOnStateValueDefinition<T>, TimeFromStateValueDefinition, etc.
Added AxesCesiumProperty, which can be used to write sampled rotation values in CZML expressed as an Axes.
Added extension methods to StkCityDatabaseEntry, StkCityDatabase, StkFacilityDatabaseEntry, StkFacilityDatabase, StkSatelliteDatabaseEntry, and StkSatelliteDatabase. Each method creates Platforms from a STK database entry, or the result of a database query.
Added the following additional features to Insight3D:
ModelPrimitive supports industry standard glTF 2.0 3D models
Additional AntiAliasing options
STK Components is now tested against .NET Core. See the System Requirements topic for more information on supported platforms.
HufnagelValleyRefractiveIndexStructureParameterModel now uses the grazing altitude instead of the transmitter's altitude for its calculation.
Modified approach to computing numerical partial derivatives of density to match STK Desktop 11.6 implementation.
Improved Earth fixed transformations when EarthOrientationParameters are not configured.
Added FollowSegmentStartsWithStoppingConditionsUseWrappedStoppingConditions, which allows the user to toggle the use of the stopping conditions set on the underlying propagator of the FollowSegmentStartsWithStoppingConditions when finding the initial state for the follow segment.
The CesiumDemo example application has been expanded to demonstrate more capabilities, and is now a web application rather than a command-line program. See the Cesium Demo topic for more information on how to build and run the example.
Fixed a crash in Insight3D when used in an WPF application when animating.
Fixed issues preventing cloning from working correctly for AxesInAxes, AxesLinearRate, EntityAxes<TEntity>, and GpsCommunicationsFrontEnd. Fixed errors in definitional equality for AxesAlignedConstrained and EntityDescriptor<TEntity>.
The following signal propagation models have been marked obsolete, and replaced with new classes which specify the version in the name. Having separate implementations per version of the model allows more flexibility in cases where different versions of the model have different configurable parameters. The following list specifies the replacement classes which match the same version of the model as the obsolete implementations. Note that some models now have additional versions available, including newer versions, which are listed in the New Features section below.
AtmosphericAttenuationModelItuRP676 is replaced by AtmosphericAttenuationModelItuRP676Version5.
CloudFogAttenuationModelItuRP840 is replaced by CloudFogAttenuationModelItuRP840Version3.
RainAttenuationModelItuRP618 is replaced by RainAttenuationModelItuRP618Version9.
RainAttenuationModelItuRP838 is replaced by RainAttenuationModelItuRP838Version3.
TropoScintAttenuationModelItuRP618 is replaced by TropoScintAttenuationModelItuRP618Version9.
Added the following new versions of existing signal propagation models:
Added AccessQueryStartAndMaintain. This new constraint encompasses two underlying queries, a start query and a maintain query. This query will be considered satisfied after the start query is satisfied, and for as long as the maintain query is satisfied.
Added SP3dEphemeris to read data from SP3-d precise ephemeris files.
Added CircularDescriptiveStatistics for computing descriptive statistics of data that is circular in nature. Also added DescriptiveStatisticsMedian.
Added BurdenFairesAdaptiveQuadrature numerical integration utility to integrate to an arbitrary tolerance.
Improved the accuracy and performance of RangeConstraint and CovarianceSeparationConstraint.
Improved the performance of AzimuthElevationMaskGetMaximumObscuredElevation for masks with evenly spaced points in azimuth.
Fixed an issue where EllipsoidRhumbLine would compute incorrect values related to the distance along the curve for the case of a sphere.
Fixed several issues in TranslationalMotionInterpolator related to multiple data elements at segment boundaries. The interpolator will now choose either the first or last datum depending upon whether or not interpolation is to the boundary or from (inclusive) the boundary.
Fixed an issue where the interpolator for the ICRF/ITRF transformation could throw an exception near the boundary of the valid dates for IAU 2006 data.
Added JulianDateAddClamped which clamps the result to the valid range of a JulianDate.
The example applications have been updated to fix errors when opening controls in the Visual Studio designer. Note that the errors in the designer did not affect building or running the applications. Because Visual Studio is still 32-bit, the designer cannot directly load the Insight3D control, which is 64-bit. Instead, we include a placeholder blank panel in the location where Insight3D should go, then create and add the Insight3D control to that panel in non-designer code.
Fixed a bug where the CentralBody would not be passed on to the generated grid points when ExtrudedCentralBodyCoverageGrid was used.
Fixed an issue where certain access constraints could throw an exception while evaluating in rare cases, when a very small, non-zero rate of change in the constrained value could cause a step size to be calculated which exceeds the valid range of a JulianDate.
Fixed a bug in RainAttenuationModelItuRP838 and CloudFogAttenuationModelItuRP840 that could cause an exception during propagation when the model's SignalPropagator was cloned, or used from multiple threads simultaneously.
STK Components for .NET now requires .NET 4.5 or above.
Insight3D is now 64-bit only. Note that all other analysis libraries continue to be independent of system architecture.
Insight3D now depends on the Microsoft Visual C++ Redistributable for Visual Studio 2017, which should be installed on any system running an application using Insight3D. The installer for the current version of the redistributable is included in the install for ease of deployment. The previous ability to load the required dependencies from the application directory ("app-local") is still technically possible, but due to the complexity is not described here. Contact AGI support if you have a need to deploy Insight3D applications without an installer on systems that cannot install the redistributable.
The Auto-Routing Library has been discontinued and is no longer included with STK Components. For questions or concerns, please contact support@agi.com.
Removed WebMapServiceCachedImageGlobeOverlay.
The coverage system has markedly changed. See the following list for a migration path to the new system:
Use ParameterizedSpatiallyPartitionedCoverageDefinition in place of CoverageDefinitionOnCentralBody.
Use ParameterizedTemporallyPartitionedCoverageDefinition in place of DiscreteCoverageDefinitionOnCentralBody.
Use CoverageGridPointWithResults in place of CoverageGridPoint.
Use CoverageResults in place of CoverageGridResult.
Use CoverageGridPointCreationCallback in place of CreateCoverageGridPointForAccess.
Use GridDescriptiveStatistics in place of GridStatistics.
New overloads of the available methods in GridTimeSampledValues have been created to support the new types.
Use CentralBodyCoverageGrid in place of EllipsoidGrid.
Use GlobalCoverageGrid in place of EllipsoidGridGlobal.
Use IntersectionWithSurfaceRegionsCoverageGrid in place of EllipsoidGridIntersection.
Use LatitudeBoundsCoverageGrid in place of EllipsoidGridLatitudeBounds.
Use LatitudeLineCoverageGrid in place of EllipsoidGridLatitudeLine.
Use LongitudeLineCoverageGrid in place of EllipsoidGridLongitudeLine.
Use CoverageGridPoint in place of EllipsoidGridPoint.
Use SurfaceRegionsCoverageGrid in place of EllipsoidGridRegions.
Use SpecifiedCentralBodyCoverageGrid in place of EllipsoidGridSpecified.
GraphicsParameterTransform<TInput,TOutput>.TransformationCallback now uses the Converter delegate type instead of a custom TransformCallback delegate type.
EntityVisualizer<TEntity> now implements IDisposable. In practice, all subclasses already were disposable.
IEvaluator now has a Group property, which gets the EvaluatorGroup that contains an evaluator. In general, this means that all evaluators throughout the system now require a group to be passed to their constructor. In practice, this only affects custom evaluator subclasses, because normally evaluators are obtained by calling a GetEvaluator (or similar) method, which is unaffected.
ScopedEvaluatorGroup is now marked obsolete. This type used the dispose pattern in a misleading manner, especially now that EvaluatorGroup is disposable. The purpose of the ScopedEvaluatorGroup was as a shortcut to obtain an evaluator and then optimize, which can now be accomplished by calling the static method EvaluatorGroup.GetOptimized and passing a delegate which obtains the desired evaluator.
Several helper methods in EvaluatorHelper have been marked obsolete and replaced by new methods which provide better syntax. These helper methods are mainly useful for implementing custom evaluator subclasses.
SignalPropagationModel now extends from DefinitionalObject.
AccessEntityFilter<TEntity> now requires an EvaluatorGroup to be given either to the constructor or to the ApplyChanges method. The provided group will be used to obtain an AccessEvaluator from the configured query when needed.
EllipsoidGraphicsSubdivisions has changed from CesiumProperty<double> to CesiumProperty<int>. This property always required integer values in order to render correctly, and the new type makes this more clear.
Removed the following items, which were marked obsolete in a previous release: BingMapsStyle.Hybrid, SegmentPropagatorVariable.CreateSettings, Sgp4EstimationInput.OutputEpoch, GpsSatelliteInformation.PRN, GpsSatelliteInformation.SVN, GpsSatelliteInformation.SatNum, GpsSatelliteInformation.SVBeginsAsPrn, GpsSatelliteInformation.SVEndsAsPRN, SemAlmanacRecord.SpaceVehicleNumber.
Several uncommonly used constructor overloads of FileStreamFactory have been removed. For unusual situations, use the new constructor overload which takes a delegate, or extend FileStreamFactory and override OpenFileStream.
StoppablePropagatorDefinition.AnyConditionSatisfiedEvent has been renamed to StoppablePropagatorDefinitionAnyConditionSatisfied and is now a proper event.
Added StkTerrainServerTerrainOverlay which loads visual terrain data in Insight3D from STK Terrain Server, either over the internet or from your own local server.
Added BasicLaunchSegment and SimpleAscentPropagator. The new propagator can propagate a launch vehicle from a specified position in a central body's fixed frame, to a specified burnout position and velocity. The underlying technique used for this new propagator is fitting an ellipse to the input, thus it is intended to act as a reasonable initial segment for the purposes of visualization and basic ephemeris output. The BasicLaunchSegment encapsulates this new propagator so that it may be used in the Segment Propagation Library.
Added 3D coverage and Volumetric analysis capabilities to the Spatial Analysis Library. The new features include the ability to extrude 2D coverage grids to 3D, new geometric primitive grid types (cuboid, spheroid, etc.), new gridding algorithms, grids with motion, and the ability to easily modify and combine grids. The ability to specify grids attached to any reference frame is also included. The following list specifies some of the new grid types:
ConeCoverageGrid - This grid can be easily manipulated to be a disc, a part of a cone, a shell, etc.
CuboidCoverageGrid - This grid can be easily manipulated to be a plane or a box.
CylinderCoverageGrid - This grid can be easily manipulated to be a disc, a shell, etc.
RectangularPyramidCoverageGrid - This grid can be easily manipulated to be a frustum.
SpheroidCoverageGrid - This grid can be easily manipulated to be a shell, a hemisphere, etc.
TorusCoverageGrid - This grid can be easily manipulated to be a shell, a half torus, etc.
The new coverage system now allows use of parameterized calculations in both continuous and discrete partitioning modes. Previously, parameterized calculations could only be used with discrete mode. See the Coverage topic for more information.
Added the following additional features to Insight3D:
Added support to the Cesium library for the following CZML features:
Added TimeIntervalInfinite.
EvaluatorGroup now implements IDisposable. Disposing a group will dispose all evaluators created in that group. Disposing the group when you are done working with a set of evaluators is now the recommended style, rather than disposing individual evaluators.
CzmlDocument now has a EvaluatorGroup property, which can be used to improve sharing of evaluators when writing multiple documents. By default, each document creates a new group.
ScalarOccultation, ScalarOccultationCylindrical, and ScalarOccultationDualCone have been moved to the Models library, to allow them to be used in general access problems. The Frequently Asked Questions topic demonstrates an example of using these scalars to perform a more advanced sun lighting access constraint.
Added several helper methods to download the contents of data files as a string, without parsing the data into objects.
Documentation has been added to the Cesium library to indicate what the default behavior is if each property is left unspecified.
The default values for GlobeOverlaySettingsImageryCacheSize and GlobeOverlaySettingsTerrainCacheSize have been increased to 64MB.
Fixed an issue where the initial and final points reported by EllipsoidGeodesic and EllipsoidRhumbLine did not conform to the surface of the ellipsoid.
Fixed an issue where Dilution of Precision and GPS satellite tracking evaluators required a IGpsPrnService service on the satellite objects. This prevented these evaluators from using other sources of orbit data than GPS almanacs.
Fixed an issue when specifying CzmlDocumentMaximumDataPointsPerPacket that could cause an exception to be thrown when writing CZML.
Fixed an issue where changing CzmlDocumentEnableAutomaticReferencing to false had no effect.
Fixed a bug that caused generating CZML to fail if the last sample date was a segment boundary time.
Fixed an issue where Insight3D could crash on certain systems when loading images on 64-bit.
Fixed an issue where HistoryGenerator<TEntity> could fail to cull history in rare cases.
Fixed an issue in JulianDate that could cause exceptions in methods such as SecondsDifference or EqualsEpsilon when operating on MinValue or MaxValue, or intervals containing those value as endpoints.
Fixed a bug relating to occultation percentages when the illuminating body is closer than the occluding body.
Added IersTechnicalNote36RelativisticCorrectionForce, which models the first order general relativity correction force for space object motion, according to the recommendation in IERS Technical Note 36 (2010).
Added EarthGravitationalModel2008.
ScalarAtmosphericDensity and derived classes now have a configurable UpperHeightLimit property, above which the density model will return a value of zero. The default value for each model has been set to match the behavior of STK Desktop 11.3.
Calculations are now validated against the latest version of the Standards of Fundamental Astronomy (SOFA) Libraries, Issue 2018-01-30.
Fixed a performance regression in the 2017 r4 release when performing date arithmetic, such as adding a Duration to a JulianDate.
An issue was introduced in the 2017 r4 release that could cause the CentralBodySurfaceRegionSensorVolumeConstraint to produce incorrect access results. The issue has been fixed in this release.
Several points and axes, such as SolarSystemBarycenterCenterOfMassPoint, SolarSystemBarycenterInertialFrame, and EarthCentralBodyInertialFrame, can now be directly evaluated. Previously, they would throw an exception. Observing points and axes using GeometryTransformer remains the preferred technique in nearly all cases.
Changed SphericalHarmonicGravityModel file parsing to be case-insensitive with respect to labels.
Corrected documentation for AxesVehicleVelocityLocalHorizontal which incorrectly stated that the axes directions were defined relative to the inertial frame.
Fixed an issue that could cause an infinite loop when freezing ForceModel objects.
The documentation for PointCentralBodyProjection now uses the term "direction" instead of "heading".
Documentation for ScalarAtmosphericDensitySetApparentSunPosition and ScalarAtmosphericDensitySetTrueSunPosition now state that the vector position of the Sun originates at the CentralBody and not at the Earth.
Fixed a bug that caused GregorianDateToIso8601String to produce incorrect ISO8601 date strings in Iso8601Format.Compact format (which is used by default when generating CZML) in the case where the number of minutes was zero, and the number of seconds was non-zero.
Removed the following items, which were marked obsolete in a previous release: SignalPolarization, AccessConstraintCollection.ConstraintAdded, AccessConstraintCollection.ConstraintRemoved, PlatformCollection.PlatformAdded, PlatformCollection.PlatformRemoved, StkEphemerisFile.CreateCovarianceIntepolator.
The following methods on KeplerianElements have been marked obsolete:
PerifocalToCartesianMatrix
TrueAnomalyToMeanAnomaly
TrueAnomalyToEccentricAnomaly
MeanAnomalyToTrueAnomaly
MeanAnomalyToEccentricAnomaly
EccentricAnomalyToTrueAnomaly
EccentricAnomalyToMeanAnomaly
ComputeEccentricity
ComputeRadiusOfPeriapsis
ComputeRadiusOfApoapsis
ComputeTimeOfFlight
ComputeTimePastPeriapsis
ComputeTimePastPeriapsis
TimePastPeriapsisToTrueAnomaly
TimePastPeriapsisToMeanAnomaly
TimePastPeriapsisToEccentricAnomaly
SemimajorAxisToPeriod
Use the methods on OrbitalElements instead.
TimeConstants.PicoSecond has been marked obsolete and will be removed in a future release.
ChildrenExtension.FindDescendents was misspelled and has been marked obsolete. Use ChildrenExtensionFindDescendants instead.
Added CentralBodyLayeredProjectedVolumeAccessConstraint, which creates a layered volume from unorganized input points about a central body when supplied with altitude layers. In each layer, a 2D convex hull is created from the points that fall within that layer, and extruded from the bottom to the top of the altitude layer. This layered volume can then be used as an access constraint.
Added support to the Cesium library for the following CZML features:
JulianDate, GregorianDate, and Duration now ensure that their values do not overflow when being constructed, or when performing arithmetic, and throw an exception as soon as a value is detected that is outside the valid range of values that can be stored.
The performance of CentralBodySurfaceRegionSensorVolumeConstraint has been improved for most use cases.
The fidelity of the range calculations in CloudFogAttenuationModelItuRP840 have been improved to match current versions of STK Desktop.
Corrected several issues with TiremPropagationModel3_18:
The height above terrain of the transmitter and receiver were not correctly calculated, which could lead to negative height values and cause incorrect results or exceptions.
The default parameters for the model have been adjusted to be in line with current versions of STK Desktop. Specifically, SurfaceConductivity, SurfaceHumidity, SurfaceRefractivity, and SurfaceRelativePermittivity now default to more realistic real-world values.
TerrainSamplingStep now defaults to null, and the sampling value will be calculated dynamically based on the resolution of the configured TerrainProvider. The property can be set to override this behavior.
Additional validation is done at propagation time to ensure that the inputs to the TIREM algorithm are produced correctly. The transmitter and receiver height above terrain must be above 0.6 meters and below 30,000 meters. The terrain sampling must produce at least one additional terrain height sample between the transmitter and receiver. If the transmitter and receiver are extremely close, this may require reducing the TerrainSamplingStep.
Fixed an issue where GregorianDateToIso8601String incorrectly rounded the date to the specified number of decimal digits before writing the string.
Fixed an issue where incorrect units were used when calculating the derivatives for the following IAU orientation axes. The orientations were correct, but the rotation rates were not.
The following types contained code which created and then disposed a temporary evaluator while creating another evaluator:
In rare situations, this could result in that disposed evaluator being reused in unrelated calculations within the same EvaluatorGroup. These temporary evaluators are no longer disposed.
Fixed an issue where converting a JulianDate or GregorianDate to DateTime could produce an incorrect number of milliseconds in rare situations.
Fixed an issue where a configuration exception could be masked by a spurious NullReferenceException in CoverageDefinitionOnCentralBody.
In the previous release, several changes included in the release were inadvertently omitted from the What's New. These items have been added to the section for the previous release.
CesiumGenerator and related classes now operate on IServiceProvider items. Previously, this system accepted items of type Object, but in practice, CZML generation always required IServiceProvider items.
BingMapsStyle.Hybrid has been marked obsolete. Microsoft now calls this map style BingMapsStyle.AerialWithLabels.
Removed the following types, methods, and properties, which were marked obsolete in a previous release: ScalarDependentOnLink, SignalParameter.Instance, CartesianParameter.Instance, DoubleParameter.Instance, Curve.ArcLength, Curve.InterpolateUsingArcLength, EvaluatorHelper.CollectionsAreSameEvaluatorHelper.Dispose overload taking a boolean, SegmentResults.AddEphemerid, RinexObservationHeader.TimeOfLastObservaton, and PropagateSegmentResults.AddStoppingConditionBackwardsAdapters overload taking a StoppingCondition.
Added StkTerrainServer which can read terrain data from STK Terrain Server, either over the internet or from your own local server.
Added PhasedArrayGainPattern for modeling planar phased array antennas. This gain pattern is configured using a list of PhasedArrayElement objects. Forming antenna beams and nulls is handled by a PhasedArrayBeamformer, such as MinimumVarianceDistortionlessResponseBeamformer (MVDR), which is responsible for computing each element's complex weights.
Added ICesiumFixedStepService and CesiumFixedStepExtension which can be used to override the sampling step size specified by CzmlDocument on a per-object basis.
Added a new access constraint, CentralBodySurfaceRegionConstraint, which can be used to determine if an object is within a given surface region.
Added StkPatternFile, which can be used to read and write STK custom sensor pattern (.pattern) files, and can create a CustomSensorPattern.
The demo applications included with STK Components have been refactored and improved to load data online by default, and fall back on offline data files when run in an offline environment.
Added DurationFromHours and DurationFromMinutes methods.
Added new convenience methods and properties to JulianDate and GregorianDate:
AzimuthElevationMask no longer requires the first and last ElevationMask values to have azimuths of 0 and 2π, respectively. The values must still be sorted by azimuth in increasing order, and azimuths must not wind.
Added new map styles to BingMapsStyle: BingMapsStyle.CanvasDark, BingMapsStyle.CanvasGray, and BingMapsStyle.CanvasLight.
Fixed an issue with RectangularFilter where an exception was thrown if the input signal's lower bandwidth limit was equal to the filter's upper bandwidth limit, or if the input signal's upper bandwidth limit was equal to the filter's lower bandwidth limit.
BingMapsForEnterpriseImageGlobeOverlay previously used a web service which has been discontinued by Microsoft, preventing the globe overlay from working. It has been updated to use the currently supported web service to retrieve imagery metadata.
ScalarPolarizationEfficiency has been moved to the AGI.Foundation.Geometry namespace.
Several properties have changed from CesiumProperty<double> to CesiumProperty<int>. These properties always required integer values in order to render without error, and the new type makes this more clear.
Several of the properties on GpsSatelliteInformation have been replaced by better-named properties.
SemAlmanacRecord.SpaceVehicleNumber has been marked obsolete. Use SatelliteVehicleNumber instead.
Sgp4EstimationInput.OutputEpoch has been marked obsolete. Use RequestedEstimationEpoch which makes it more clear that the resulting epoch may be different if it occurs during a leap second.
SegmentPropagatorVariable.CreateSettings is now obsolete. Use SegmentPropagatorVariableEvaluatorCreateSettings instead.
The LeapSecond constructor taking a JulianDate previously reinterpreted the numeric day count in the UTC TimeStandard, regardless of the TimeStandard of the JulianDate, which could lead to unexpected results. Now, it requires that the given date is in UTC, and throws if it is not.
Sgp4Elements now implements ICloneWithContext instead of ICloneable.
Added RainAttenuationModelItuRP838, which implements the ITU-R P.838 rain attenuation model.
Added independent and dependent variable scaling to NewtonRaphsonMultivariableFunctionSolver, configured using the new SolverVariableSettingsScaling and SolverConstraintSettingsScaling properties, as well as to the differential corrector in the Segment Propagation Library, using the new SegmentPropagatorVariable.Scaling and SegmentPropagatorConstraint.Scaling properties.
Added new functions to automatically download data over the internet from AGI servers. See:
Added custom CZML properties. A set of custom properties can be defined using CesiumCustomProperties and associated with a CZML object by adding a CesiumCustomPropertiesExtension.
Added support to the Cesium library for the following CZML features:
Platforms created by GpsCommunicationsConstellation now provide a new service: IGpsSatelliteInformationService
API methods use JetBrains ReSharper Annotations to indicate information useful for static code analysis, such as whether a parameter or return value can be null or not, whether a method is pure (has no side effects), and other information. These attributes were originally added in 2016r2. Not all API methods have been marked with this information yet. Coverage will increase over time in future releases. To be clear, ReSharper is not required to use STK Components. If you do not, then these attributes have no effect.
StkEphemerisFile can now load ephemeris files containing time information expressed in the time formats GPSG, UTCG, TAIG, and TDTG.
The algorithm used to compute geodesic curves on an ellipsoid has been improved. See the documentation for EllipsoidGeodesic for details.
Sgp4PropagatorEstimateElements now adds 1 second to a requested epoch that falls during a leap second. This avoids issues with creating a TwoLineElementSet because the TLE format cannot represent an epoch that is during a leap second. This behavior can be configured using the Sgp4PropagatorSgp4EstimationInputAllowEstimationEpochDuringLeapSecond property.
Added new static helper methods to CesiumResource to create an instance from an image or from a stream.
The look and feel of the documentation has been improved, and the content has been revised throughout.
Added a new Axes, Points, and Vectors topic to the Programmer's Guide, explaining these types in more detail.
Fixed an issue with EllipsoidGeodesic that prevented computing the distance between two points that did not have a unique geodesic solution connecting them.
Fixed an issue with RainAttenuationModelItuRP618 with a configured CustomRainRate. The custom rain rate is now correctly expected to be in meters per second, and is documented as such. Previously, the value was treated as millimeters per hour.
Fixed an issue when writing TwoLineElementSets with values for BStar or MeanMotionDotDot that require leading zeros in the mantissa in place of digits greater than the maximum allowable in the exponent.
The set of LeapSeconds parsed from an EarthOrientationParametersFile and available from the EarthOrientationParametersLeapSeconds property were incorrect, and have been corrected. These leap seconds are for informational use, and are not used for analysis by STK Components.
Writing a LeapSecondFile previously produced unexpected output for the epoch of the rate at which the UTC time scale is slowing with respect to TAI. This data is not used, but by definition this value should always be 41317.
Added Iau2009Orientation, which provides central body orientation parameters using data from the 2009 IAU report.
Added support to the Cesium library for the following CZML features:
Added implicit conversions for the following types: string to SignalIdentifier, and double to ScatteringCoefficient. The existing implicit conversion operators were: from string to StringSignalIdentifier, and from double to ConstantCrossSectionScatteringCoefficient. The conversions to the base type are generally more useful, because the situations where you typically use them involve the base types (such as assigning a value to a property).
Fixed a bug when writing CZML that produced incorrect output when using a CompositePoint or CompositeAxes with the same point or axes contained in multiple intervals.
Fixed a bug when writing CZML with a CompositePoint or CompositeAxes where the axes or points contained by the composite could be evaluated outside of the interval over which the composite contains them, which could cause an exception while sampling.
Fixed an issue where DenseMatrix computed its hash code incorrectly.
NumericalPropagator now wraps exceptions caught during propagation in a NumericalPropagationException, and throws if there are no registered handlers for the ExceptionDuringPropagation event. If you want to ignore exceptions during propagation, register a handler for this event that does nothing.
PointAtAltitude now defines Altitude using a Scalar which allows the altitude of the point to vary with time.
The following events have been marked obsolete and will be removed in a future release: AccessConstraintCollection.ConstraintAdded, AccessConstraintCollection.ConstraintRemoved, PlatformCollection.PlatformAdded, and PlatformCollection.PlatformRemoved.
StkEphemerisFile.CreateCovarianceIntepolator was misspelled and has been replaced by CreateCovarianceInterpolator.
StateElementAdapter objects now must implement IEvaluator.
The Polarization and AntennaPolarizationLoss properties have been removed from FrpaGainPattern, and the AntennaPolarization and AntennaPolarizationLoss properties have been removed from GpsCommunicationsFrontEnd and IGpsCommunicationsReceiverConfiguration. Polarization efficiency loss is now modeled using the new Polarization classes.
Added CentralBodyEllipticCylindricalAccessConstraint, which determines access based on whether the constrained object is within a cylinder (elliptic or circular). This new constraint can be combined with the existing AltitudeConstraint to model an airspace constraint.
Added the ability to dynamically model polarization efficiency loss based on the communications link geometry. Polarization efficiency loss is now enabled by configuring a RadioFrequencyTransmittingAntennaExtension and RadioFrequencyReceivingAntennaExtension with the appropriate PolarizationSource.
Added JplDE430, which loads JPL DE430 ephemeris data.
ImpulsiveManeuverSegment will now honor the Orientation of the ImpulsiveManeuverInformation, and the StateElementAdapter for the propagated point, when run as a single segment, or when it is the first segment in a sequence producing ephemeris. This requires a StateElementAdapter to be set for the propagated point in those cases. If an adapter for the point is specified on an ImpulsiveManeuverSegment and it is not the first segment producing ephemeris, that adapter will be used at propagation time when producing the ephemeris.
Improved the exception message thrown by Sgp4Propagator when estimation of orbital elements fails.
LifetimeOrbitPropagator has been changed to match recent changes in STK. Specifically, a correction has been made to the J2^2 effects to eliminate unexpected eccentricity growth which could result in prediction of orbital lifetimes that were too short.
Fixed a bug when writing CZML that caused auxiliary properties, such as reference frame, interpolation settings, etc., to be incorrectly omitted from subsequent intervals after the first when using an interpolator with segment boundary times. These auxiliary properties are scoped in CZML at the interval level, so they must be included in all intervals in order to be loaded correctly.
Fixed an issue where an AxesAlignedConstrained would produce the incorrect orientation when configured with the principal axes as the AxisIndicator.Second and the reference axes as the AxisIndicator.First.
Fixed a bug in MultivariableFunctionDifferentialSolver where the maximum step of variables was misapplied. This fix will improve the numerical stability of the differential corrector.
Fixed an issue where EllipsoidSurfaceRegionIsPointInsideRegion could return incorrect results in cases where the region under consideration is very large relative to the size of the central body.
Fixed incorrect coefficients in finite differencing in the Route Design Library that affected derivatives in certain edge cases.
Subclasses of InterpolationAlgorithm must now implement IEquatableDefinition by implementing CheckForSameDefinition and ComputeCurrentDefinitionHashCode. Typically, most algorithms have no state, so definitional equality is solely determined by the type.
BoundingRectangle has been moved from Insight3D to the AGI.Foundation.Coordinates namespace in the Core library. Additionally, the Width and Height properties previously returned incorrect results and have been corrected.
In the Cesium library, BillboardGraphicsAlignedAxis has been changed to a CesiumProperty<UnitCartesian>. The value was always required to be unit magnitude in order to work correctly in Cesium, but the new type enforces this constraint.
SegmentResultsStateForNextSegment is no longer settable.
In the Curve class and all subclasses, ArcLength was inappropriately named and has been marked obsolete. Use the more accurately named AngleSubtended property instead. Similarly, InterpolateUsingArcLength is obsolete and replaced by InterpolateUsingAngleSubtended.
The approach for cloning functions used with SolvableMultivariableFunction has changed. As such, the CreateClonesOfFunctionForParallelEvaluation methods are now obsolete, and SolvableMultivariableFunctionOperationsComputeJacobianNumerically no longer takes an array of cloned functions.
The overload of PropagateSegmentResultsAddStoppingConditionBackwardsAdapters taking a StoppingCondition has been marked obsolete. Use the overload taking a SegmentDefinition.
In SegmentResults, AddEphemerid was misnamed and has been marked obsolete. Use AddEphemerisPoint instead.
In RinexObservationHeader, Runby has been replaced by RunBy, and TimeOfLastObservaton has been marked obsolete and replaced by TimeOfLastObservation.
In EvaluatorHelper, CollectionsAreSame has been marked obsolete and will be removed in a future release. Also, the overload of Dispose taking a boolean flag has been marked obsolete. Instead, use the overload that does not take a boolean flag.
Removed the following types and properties, which were marked obsolete in a previous release: GainPattern, ReceivingAntennaExtension, TransmittingAntennaExtension, CraneRainAttenuationModel.UseRainRateOverride, CraneRainAttenuationModel.RainRateOverride, CraneRainAttenuationModel.UseRainHeightOverride, CraneRainAttenuationModel.RainHeightOverride, RainAttenuationModelItuRP618.UseRainRateOverride, RainAttenuationModelItuRP618.RainRateOverride, RainAttenuationModelItuRP618.UseRainHeightOverride, RainAttenuationModelItuRP618.RainHeightOverride, InvalidFuelStateException.PropagationElementThanRanOut.
Introducing the Radar Library, which allows for modeling radar signal propagation, processing, and data products.
Added the ability to model communications signal point scattering using the new PointScattererExtension and associated ScatteringCoefficient types. TargetRadarCrossSectionExtension derives from PointScattererExtension and is used to model radar signal reflection from target objects.
Added PulsedSignalSource and PulsedSignalModulator for modeling pulsed signal waveforms.
Added CesiumPositionExtension and CesiumOrientationExtension. These new extensions can be used to configure details about how position and orientation information is written to CZML, such as interpolation and extrapolation settings.
Added support to the Cesium library for the following CZML features:
GraphicalVector now provides ICesiumDirectionService and can be configured with interpolation and extrapolation settings.
Added a new ScalarCesiumProperty type, which can be used to directly write sampled values from a Scalar in CZML.
Added VelocityVectorDirectionCesiumProperty, which is a CesiumProperty<UnitCartesian> which specifies that the value will be computed on the client to be the direction of the velocity vector of a given object.
Added LeapSecondFileDownloadLeapSeconds to automatically download the latest leap second data file over the internet from AGI servers.
Added the December 2016 leap second to the default LeapSecondsFacet.
Added a topic to the documentation explaining external data files used in Components. See the External Data topic.
DurationStoppingCondition now uses the absolute value of the threshold by default.
New properties have been added to SegmentResults, such as TimeIntervalOfEphemerisForOverallTrajectory and FirstPropagatedState.
Added StateElementAdapterHelpers with static methods to help in creating adapters to and from segments.
SegmentPropagator, SolvableMultivariableFunction, and related classes now have an ApplyResults method to assist in setting state on the object that normally gets set during evaluation or propagation. This method allows those objects to continue from where another run left off, which can reduce run times.
When a PropagateSegment is propagated, it now returns a SinglePropagateSegmentResults which includes information about the stoppable propagators run.
The Cesium library now properly uses SegmentBoundaryTimes from interpolators when writing CZML, to automatically separate samples into multiple intervals. SampledCesiumProperty<T> now has a list of SegmentBoundaryTimes.
In the Cesium library, CompositePoint and CompositeAxes are now always written as intervals. These types can be used to produce discontinuous interval-based position and orientation in CZML.
When writing CZML for a GraphicalVector using a VectorInterpolator, the exact samples from the interpolator are now written, rather than resampling the vector.
EarthOrientationParameters loaded from a file now indicate the intervals of time over which data is observed or predicted. It also now provides a list of leap seconds specified in the file.
CssiSolarGeophysicalData and EarthOrientationParametersFile now throw if no data was parsed from the given data file, which may indicate that it is the wrong format.
Reference frame transformations are now validated against the latest version of the Standards of Fundamental Astronomy (SOFA) Libraries, Issue 2016-05-03.
Previously, ephemeris would not be constructed properly for SegmentLists whose child segments were going in different directions in time, or if there were time discontinuities in the segments. This has been corrected.
ReturnSegment will no longer change the adapters for the segment list it is returning from, and now honors the PassAllElementsToNextSegment flag.
Auto-sequences in a PropagateSegment are now reported in the original propagate segment's defined-in axes and frame.
SegmentListResults that are completely eclipsed by later overlapping segments now have no ephemeris in its ephemeris lists.
RasterStream now correctly honors the orientation specified by RasterAttributesOrientation.
Fixed an issue where Covariance3By3SizeAndOrientationInterpolator modified CovarianceData while getting an evaluator, causing evaluator caching to fail. Getting an evaluator now correctly leaves the definitional object unmodified.
Corrected a race condition that could cause the number of worker threads used to parallelize calculations to be incorrectly determined to be zero, leading to a crash.
Fixed an exception in SolarRadiationBoundaryMitigation when propagating with a PropagationNewtonianPoint configured with IncludeHighestDerivativeInOutput set to true.
Fixed an issue in Ellipsoid that could cause tangent points to be returned that were slightly off the ellipsoid.
Fixed an issue where PointAtAltitude would throw an exception if requested to evaluate at an order higher than it was capable of.
Corrected documentation for Sgp4PropagatorReferenceFrame which incorrectly stated that the frame was TEME of Epoch.
Significant refactoring was done to the Segment Propagation Library that in many cases were not able to be made in a backwards compatible way. Please contact AGI support if you need assistance in upgrading to this new version.
IGeneralState and IMotionState have been removed; all of their responsibilities are now on ITimeBasedState. The Segment Propagation Library now only propagates ITimeBasedStates as opposed to IMotionStates. All operations with stopping conditions that use a state, and methods in StoppingConditionEvaluators, now operate on ITimeBasedStates.
The SegmentPropagatorPropagateTo method now takes a JulianDate instead of a state to define when it should be propagated to.
As the SolvableMultivariableFunction has a default implementation of computing the Jacobian numerically, the events for a normal function evaluation and a function evaluation done as part of computing a perturbation have been moved to the base type and off of the TargetedSegmentListFunction.
StateElementAdapterFactory has been renamed to StateElementAdapterDefinition and all adapters have been redesigned to now follow the normal create-set-call pattern of Components.
The base StoppingCondition no longer has a Threshold property, but instead has a method that creates the threshold when needed. The derived stopping condition types all have their own Threshold property.
The thresholds on StoppingConditions and the DesiredValue of SegmentPropagatorConstraints are now both ValueDefinition<T> objects instead of doubles. This allows them to be varied by a higher level computation (such as a TargetedSegmentList and TargetedSegmentListDifferentialCorrector) using a ParameterizedValueDefinition<T>. This also led to the removal of IKnownDateStoppingCondition, IKnownDateStoppingConditionWithMutableThreshold, StoppingConditionWithMutableThreshold, StoppingConditionWithMutableThresholdEvaluator, and all TargetedSegmentListOperatorConfiguration types.
StoppingConditions no longer have an IndependentVariableTolerance property. It has been moved to StoppablePropagator.
The segment configuration parameter passed to SegmentPropagatorPropagate is now a SegmentConfiguration type as opposed to a ICloneWithContext. This new configuration type has a property letting you know if the segments are being run nominally or not.
The signature for many of the Propagate methods on SegmentPropagator and SegmentListPropagator have been changed to not take an initial state. The initial state is now a property on the SegmentConfiguration.
A ITimeBasedState can no longer be the configuration object for an InitialStateSegment<T>. There is a InitialStateSegmentConfiguration that wraps the state.
The CreateSettings method on SegmentPropagatorConstraint was moved to SegmentPropagatorConstraintEvaluator.
All SegmentResults and SolvableMultivariableFunctionResults now must implement ICloneWithContext.
The following StateElementAdapterDefinitions were removed:
AuxiliaryScalarAdapter
AuxiliaryStateVectorAdapter
PropagationPointElementAdapter
PropagationScalarAdapter
PropagationVectorAdapter
StoppableNumericalPropagatorResponse was removed.
The OriginalConfiguration property on SegmentPropagator was removed.
The existing TargetedSegmentListOperatorConvergenceBehavior values have been replaced with better named values.
NumericalPropagatorSegmentResults was removed and replaced with PropagateSegmentResults.
NumericalPropagatorSegmentConfiguration was removed and replaced with PropagateSegmentConfiguration.
ImpulsiveManeuverSegment and ImpulsiveManeuverInformation no longer work only with segments that use a NumericalPropagator. This resulted in the following changes:
ImpulsiveManeuverInformation now has a ParameterizedPoint that represents the position and velocity of the space object being propagated. This point must be used in defining geometry types that rely on the spacecraft's motion, including the ImpulsiveManeuverInformationOrientation.
The InnerParameterEvaluator of the ImpulsiveManeuverInformation has been removed.
The following static properties have been marked obsolete: SignalParameter.Instance, CartesianParameter.Instance, and DoubleParameter.Instance. Rather than using these global singleton parameters, construct instances of the appropriate parameter type where needed, and use those parameters in your problem definitions.
ScalarDependentOnLink has been marked obsolete. Use the new ScalarDependentOnServiceProvider class instead. The properties on various Communications Library types have been changed to the new type.
The TargetedSegmentListOperatorGetOperatorEvaluator method no longer takes the parent propagator as an argument.
In the Cesium library, ImageMaterialGraphics.Alpha has been removed and replaced with new Color and Transparent properties. This reflects CZML changes made in Cesium 1.20.
Removed the following types, methods, and properties, which were marked obsolete in a previous release: HashCode.FinalizeHash, Signal.LowerNoiseBandwdithFrequency, TransmitterIdentifier. Removed a MultivariableFunctionSolverIterationResults constructor taking an array of function evaluations.
Introducing the Aircraft Propagation Library, which provides several maneuver definitions and performance models that can be used to propagate an aircraft.
Covariance3By3DynamicMatrix will convert a DynamicCovariance3By3 to a Motion<Matrix>.
Added BasicState which is a IAdjustableState that can store any data or Motion<T>.
DynamicState<T> and its evaluator StateEvaluator<T> allow for time varying states.
Added GeometryDynamicState that aggregates Points, Scalars, Vectors, and DynamicMatrices and evaluates them as a single ITimeBasedState.
IAdjustableState allow for new elements to be added or removed from states that implements this interface.
Points, Scalars, and Vectors can be parameterized on states now with the ParameterizedOnStatePoint, ParameterizedOnStateScalar, ParameterizedOnStateVector types. The new parameter type for these geometry types is TimeBasedStateParameter.
ScalarAbsoluteValue will evaluate the absolute value of another Scalar.
The Semi-major axis can now be specified as a KeplerianElement.
The ability to propagate a NumericalPropagator until a StoppingCondition was satisfied has been broken out into an abstract StoppablePropagator class. These propagators create a StoppablePropagatorResults. The following derived types were added:
As part of this refactoring, many bugs were addressed.
StoppingConditions now have a Enabled property.
ChangeStoppingConditionEnabledOperator can enable or disable a StoppingCondition when the operator runs in a TargetedSegmentList.
ChangeStoppingConditionThresholdOperator<T> allows a callback to be defined to change the Threshold of a StoppingCondition when run in a TargetedSegmentList. This can be used, for example, to round a value derived by a differential corrector that ran before this operator.
Segments can now be designed to not define the elements getting propagated, but instead, just pass all of the elements and their StateElementAdapters from the previous segment to the next.
SegmentDefinition now has virtual methods that let you set, get, check, and remove the elements getting propagated and their adapters and defined-in objects. These methods can be overridden as needed and many segments will call them automatically.
ImpulsiveManeuverSegment can now be run as a single segment independent of any other segments.
ReturnSegment will end propagation for a specified SegmentDefinition that the ReturnSegment is a part of, with options to be enabled or disabled if the wrapping segment is being run in a TargetedSegmentListOperator. All SegmentResults now have a StopPropagationForCurrentSegmentList property.
ChangeReturnSegmentOperator will let a TargetedSegmentList change whether a ReturnSegment is enabled or not.
StopSegment will stop all propagation if enabled and encountered.
ChangeStopSegmentOperator will let a TargetedSegmentList change whether a StopSegment is enabled or not.
UpdateSegment allows you to define discrete changes to specific elements in the previous segment.
PropagateSegment is now the base class of the existing NumericalPropagatorSegment. PropagateSegment can work with any StoppablePropagator. New propagate segments have been added deriving from this type.
HoldSegment is a PropagateSegment that will hold all of the initial transformed elements constant until a StoppingCondition is satisfied.
FollowSegment is a PropagateSegment that will start and stop propagation based on other criteria than just the start of the previous segment and StoppingConditions at the end of the segment.
ChangePropagateSegmentsPropagatorOperator will change the StoppablePropagator of a PropagateSegment when the operator runs in a TargetedSegmentList. Note that this will change the StoppablePropagator for any type of PropagateSegment even if the segment used could not have been initially configured with the type of StoppablePropagator that it is getting changed to.
The following SegmentPropagatorConstraints have been added or expanded:
ScalarAtEndOfNumericalSegmentConstraint now has an EndOfSegment property defining whether the initial or final point of propagation should be used to evaluate the Scalar.
ExtremeValueOfSegmentConstraint will return the minimum or maximum value evaluated for a Scalar during propagation.
ScalarAtEndOfSegmentConstraint behaves just like ScalarAtEndOfNumericalSegmentConstraint, but works for any type of segment, not just ones that are based on numerical propagation.
ScalarDifferenceOfSegmentConstraint which will return the difference of a value between the start and end points of a segment.
Added the following geometry types:
Added WindModel and ConstantWindModel for representing local atmospheric wind conditions.
Added USStandardAtmosphere1976 which provides Scalar objects for computing atmospheric density, temperature, pressure, speed of sound and density ratio using the U.S. Standard Atmosphere model, 1976 version.
Added overloads of StkEphemerisFileWriteTo(TextWriter, Boolean) and StkAttitudeFileWriteTo(TextWriter, Boolean) that pretty-format the files with aligned columns. Properties are now written to the file in a consistent order, and added support for writing files version-tagged as STK 11.
Added DurationZero.
All StateElementAdapters have been moved to the Models library.
SolvableMultivariableFunction now has a helper method to create clones of itself suitable for the default numerical computation of the Jacobian matrix.
StoppingConditions will now obey their FunctionTolerance. Before, the stopping condition could be satisfied even if the root finding did not converge within the specified tolerance. The RequireFunctionTolerance property was added to allow the condition to be satisfied even if it does not converge to within the tolerance.
SegmentListResults now has a helper method to get the final SegmentResults that is not itself a SegmentListResults.
SegmentResults now has a GetAdapter method to get the adapter for the specified element.
InitialStateSegment<T> is no longer abstract.
Fixed an issue where IFigureOfMeritDefinition calculations produced incorrect results when used with coverage results computed by DiscreteCoverageDefinitionOnCentralBody.
In the refactoring of StoppingConditions and SegmentPropagators, many bugs were discovered and fixed.
ICesiumUriResolverResolveUri now takes a string instead of a Uri. This avoids problems with URIs that can be too long for the Uri type (e.g. data URIs). Similarly, CesiumResourceUri is now a string.
Added support for model node transformations (also known as articulations) in the Cesium library. See ModelGraphicsNodeTransformations.
Added support to the Cesium library for drawing polylines on the surface of a central body. See CentralBodySurfaceCurveGraphics.
Added the following properties to the Cesium library:
Added ImageMaterialGraphics. StripeMaterialGraphics and GridMaterialGraphics are now also usable as polyline materials.
Added support for sending CZML delete packets. See CesiumDeleteExtension.
Added new functions to automatically download data over the internet from AGI servers. See:
NumericalPropagator now catches exceptions thrown during propagation and raises a new ExceptionDuringPropagation event.
Fixed an issue where a non-thread-safe AccessConstraintEvaluator was not always copied before being used from another thread, specifically when evaluating access with an interval collection with more than one interval, and when one of those intervals is zero-duration.
Fixed an issue where ScalarOccultation could throw an exception in rare cases where a platform is very far away from a central body.
Corrected an issue where CZML name and parent properties would only be written if the item also had other CZML graphical properties defined. These properties are now written by new NameCesiumSource and ParentCesiumSource objects.
The following properties have changed from double to ScalarDependentOnLink, allowing the values used by the models to vary based on time, or the positions of transmitter or receiver. A constant double value can be implicitly converted to a ScalarDependentOnLink.
CloudFogAttenuationModelItuRP840.CloudCeiling
CloudFogAttenuationModelItuRP840.CloudLayerThickness
CloudFogAttenuationModelItuRP840.CloudLiquidWaterDensity
CloudFogAttenuationModelItuRP840.CloudTemperature
SimpleSatcomAtmosphericAttenuationModelWaterVaporConcentration
Several types that were specific to RF communications have been renamed, and the previous version are now obsolete. Specifically, GainPattern is replaced by RadioFrequencyGainPattern, ReceivingAntennaExtension is replaced by RadioFrequencyReceivingAntennaExtension, and TransmittingAntennaExtension is replaced by RadioFrequencyTransmittingAntennaExtension.
The following properties are now obsolete:
CraneRainAttenuationModel.RainHeightOverride
CraneRainAttenuationModel.RainRateOverride
CraneRainAttenuationModel.UseRainHeightOverride
CraneRainAttenuationModel.UseRainRateOverride
RainAttenuationModelItuRP618.RainHeightOverride
RainAttenuationModelItuRP618.RainRateOverride
RainAttenuationModelItuRP618.UseRainHeightOverride
RainAttenuationModelItuRP618.UseRainRateOverride
Instead, customize the models using these new properties:
RainAttenuationModelItuRP618.CustomRainHeight
RainAttenuationModelItuRP618.CustomRainRate
InvalidFuelStateException.PropagationElementThanRanOut was misspelled and has been marked obsolete. Use InvalidFuelStateExceptionPropagationElementThatRanOut instead.
You can now specify custom weather-related values that vary with time or position when using signal propagation models in the Communications Library, by providing a ScalarDependentOnLink instance. Previously, these values had to be constant values.
Added new high level communications objects for modeling digital communications at optical wavelengths: OpticalTransmitter and OpticalReceiver.
Added photodiode photodetector objects to model the detector output signal-to-noise ratio, including both sky and sun background light noise: AvalanchePhotodiode and PinPhotodiode.
Added an optical antenna gain pattern, GaussianOpticalGainPattern, for modeling the beam profile of the transmit or receive optics. The model takes the aperture diameter and divergence angle as input and also includes the ability to provide a fixed pointing offset from the link line-of-sight vector.
Added TropoScintAttenuationModelItuRP1814, which implements the ITU-R P.1814 (Section 5 Scintillation effects) tropospheric scintillation propagation loss model for modeling scintillation loss in the optical frequency band. The model can use a custom RefractiveIndexStructureParameterModel, or by default uses the new HufnagelValleyRefractiveIndexStructureParameterModel, which implements the Hufnagel-Valley (H-V) model.
Added BeerLambertLawAtmosphericAttenuationModel, which implements the Beer-Lambert Law atmospheric absorption model for modeling atmospheric absorption/scattering in the optical frequency band.
Added ModulationOok, which implements the On-off Keying (OOK) modulation scheme, typically used in digital optical communications, for modeling Bit-Error-Rate vs Eb/No.
Added PointAtAltitude which projects a reference point's motion onto a surface of constant altitude.
Added UnitQuaternionIsEquivalent which determines if one UnitQuaternion is mathematically equivalent to another.
Added overloads of TimeIntervalCollection<T>.Remove and TimeIntervalCollection<T>.RemoveLeavingEndpoints that take a TimeInterval. Previously, a TimeInterval<T> was required, even though the data was ignored.
Several classes now implement the IServiceProvider interface, allowing them to be used in more places. For example, Point can now be used as an IServiceProvider providing ILocationPointService.
GregorianDate can now parse Iso8601Format.Basic formatted strings.
Added Center, Width, and Length properties to CartographicExtent.
An optimization has been added to improve function trending when exploring extrema to find potential threshold crossings but not requiring that the extrema be found precisely.
AccessQuery now honors the ExtremaCrossingUncertaintyFactor of the AccessConstraintSampling. The default value for the uncertainty factor has been changed to a conservative value, in order to prevent false negative results from access (missed satisfaction intervals).
Fixed an issue that caused an exception to be thrown, incorrectly indicating that data is not available, when computing access with a CommunicationObjectConstraint over an interval that exactly matches the availability of the transmitter.
All EqualsEpsilon methods (for example, CartesianEqualsEpsilon) now return true when the difference in value is exactly equal to the epsilon value. Previously, it only returned true if the difference was less than epsilon.
Fixed an issue with the default constructor for ComplexDigitalTransmitter which switched the default power and frequency values, causing it to incorrectly use a transmit power of 14.5e9 Watts and a frequency of 1000.0 Hz, rather than the documented power of 1000 Watts and frequency of 14.5e9 Hz.
The pattern for implementing definitional objects has changed. In general, classes that derive from DefinitionalObject must override protected methods from their base class and call the base implementation, augmenting the process of checking if two objects have the same definition. See the documentation for DefinitionalObject for more information on implementing the pattern correctly.
PerturbationValue has been removed from SolverVariableSettings. PerturbationValues has been added to SolvableMultivariableFunction.
NormalFunctionEvaluationEvent and PerturbedFunctionEvaluationEvent have been moved from MultivariableFunctionSolver to TargetedSegmentListDifferentialCorrector and TargetedSegmentListFunction.
The MultivariableFunctionSolverIterationResults constructor that takes an array of function evaluations is obsolete. Use the constructor that takes a SolvableMultivariableFunctionDerivativeResults.
TransmitterIdentifier is now obsolete. See below for related changes to how IntendedSignalByTransmitter identifies signals.
ClassicalEquationOfEquinoxes and EntityParameter<TEntity> are now sealed.
Removed the following types, methods, and properties, which were marked obsolete in a previous release: CentralBodyObstructionConstraint.GetDegreeOfObstruction, ScalarDensityJacchiaRoberts.UseApparentSunPosition, MarkerBatchPrimitive.AlignToPixel, ProjectedRasterOverlay.
HashCode.FinalizeHash is now obsolete. Hash codes are finalized automatically when calling the Combine methods.
Signal.LowerNoiseBandwdithFrequency was misspelled and has been marked obsolete. Use LowerNoiseBandwidthFrequency instead.
Access Queries can now optionally log debugging information about constraint satisfaction. See AccessQueryDebuggingLogger.
All assemblies are now digitally signed by Analytical Graphics, Inc.
IntendedSignalByTransmitter now identifies transmitters of a signal by checking for a specified SignalIdentifier, rather than using a direct reference to the transmitter itself. A new service, IIdentifiableTransmitterService, has been added to existing transmitter types to configure the identifier for that transmitter's signal.
SolvableMultivariableFunction now computes its derivatives. By default, the first derivative will be computed numerically. Derived types can override the method if the derivative can be computed analytically. A related helper method, SolvableMultivariableFunctionOperationsComputeJacobianNumerically has been added.
The numerical derivative computed by SolvableMultivariableFunction and TargetedSegmentListDifferentialCorrector can now be computed with a forward, backwards, central or signed difference method. See FiniteDifferenceMethod.
Perturbation values for SolvableMultivariableFunction and SegmentPropagatorVariable can now be negative. The correct sign will be used when the difference method is forward, backward, or central.
Improved LifetimeOrbitPropagator implementation to better predict decay of eccentric orbits.
GraphicsParameter<T>, SurfaceSegment, ProfileSegment, and their derived classes are now definitional objects.
The hash algorithm used by HashCodeCombine has been replaced with the MurmurHash3 algorithm.
Fixed an issue in EllipsoidEllipsoidSeparationDistance which would cause incorrect results for greatly distorted ellipsoidal shapes.
Fixed an issue in ComplexReceiver that prevented successful cloning.
Fixed an issue in ScalarDensityJacchia1970 which was reporting incorrect densities below the minimum altitude height of 90 km. It now returns the density at 90 km when evaluated below 90 km.
Fixed an issue in ScalarDensityMsis90 where daily and average F10.7 solar flux index values were incorrectly passed to the computational algorithm causing the values to be swapped.
Restored documentation of a number of Insight3D types, which was omitted in previous releases.
Fixed documentation of UnitSpherical directions when creating a CustomSensorPattern.
Ellipsoid now has an EastNorthUpTransformation method in addition to NorthEastDownTransformation and UpEastNorthTransformation.
Improved the behavior of writing out a TwoLineElementSet with a satellite number that is less than 5 digits.
Added the June 2015 leap second to the default LeapSecondsFacet.
In rare cases with overlapping ellipsoids EllipsoidEllipsoidSeparationDistance would throw an exception rather than successfully calculating the answer.
This release includes an updated Software License Agreement.
Platforms created by SemAlmanacRecordCreateSatellite now have a default Name.
Added UseFreeSpaceLossModel and UseAtmosphericAbsorptionModel properties to TiremPropagationModel3_18 to allow those effects to be turned on and off when performing signal propagation.
In some cases terrain height could be calculated incorrectly when performing signal propagation with TiremPropagationModel3_18.
In rare cases EllipsoidGeodesicHeading could calculate the wrong heading when very close to an equatorial crossing.
In some cases the last point of a LocationPointCesiumSource, OrientationAxesCesiumSource, or VectorCesiumSource would be left off when writing out CZML.
64-bit binaries of the Insight3D library are now available.
Fixed a crash which could occur when trying to generate CZML for an object whose ephemeris had segment boundary times.
SolarGeophysicalData now implements IThreadAware.
Updated EarthCentralBodyPseudoFixedFrame to be more consistent with previous conventions so that it does not include the s-prime correction from the International Celestial Reference System.
All example solutions previously targeted to VS 2005 are now targeted to VS 2008.
CssiSolarGeophysicalData was not thread safe.
Added support for propagating multiple TLEs in an Sgp4Propagator, using ElementSets and SwitchingMethod.
Improved performance when using a NewtonRaphsonMultivariableFunctionSolver in multiple threads.
Fixed a possible race condition in NewtonRaphsonMultivariableFunctionSolver.
Fixed a possible race condition when using TargetedSegmentListDifferentialCorrector in certain configurations.
Fixed possible race conditions in the ScalarDensityMsis86, ScalarDensityMsis90, and ScalarDensityMsis2000 density models.
Fixed a possible race condition when calling DefinitionalObjectGetDefinitionHashCode in certain cases.
Fixed a bug that could lead to an exception when visualizing a thin ComplexConic sensor cone that crosses the horizon of a CentralBody.
TargetedSegmentList.ResetNestedTargetedSegments was replaced with TargetedSegmentListResetBetweenRuns. It is now the responsibility of a TargetedSegmentList to reset itself between runs if necessary, rather than determine whether its children must be reset.
Removed the unused ParentSegment property from TargetedSegmentListOperator.
Moved ImpulsiveManeuverSegment and related types from AGI.Foundation.OrbitPropagation.dll to AGI.Foundation.SegmentPropagation.dll. In addition, many abstract types were moved from AGI.Foundation.SegmentPropagation.dll to AGI.Foundation.Models.dll.
Added PrescribedAccelerationTransitionProfile, which allows users to specify a route profile which will apply a given thrust acceleration or deceleration over the inclined or level traversal between two waypoints.
Fixed a bug where constructing an EllipsoidSurfaceRegion larger than half of the ellipsoid's surface would result in the Centroid property representing the centroid of the area outside of the region rather than the inside of the region.
Fixed improper formatting with some of the exception messages thrown by KozaiIzsakMeanElements.
The abstract UseDailyFlux property has been removed from the abstract base class SolarGeophysicalData, as not all derived types need to handle this behavior.
Deprecated the UseApparentSunPosition property on ScalarDensityJacchiaRoberts. Instead, use the new VectorToSun property on the ScalarAtmosphericDensity base class to set the Vector directly. The new helper methods SetApparentSunPosition and SetTrueSunPosition can be used to easily set the most common cases.
A single CentralBodiesFacet and a single LeapSecondsFacet instance are now consistently shared among all threads by default. To explicitly give a thread its own separate instance, construct a new instance and call CentralBodiesFacetUseInCurrentContext or LeapSecondsFacetUseInCurrentContext in that thread.
Several DLLs related to decoding videos are no longer statically linked in AGI.Foundation.Graphics.dll. They must now be copied into the bin directory when a graphics project is built. For more information see the Getting Started topic or the HowTo.
Introducing the Segment Propagation Library, which allows for the modeling and targeting of trajectories or other states where the propagation changes over time.
Added CssiSolarGeophysicalData, allowing CSSI space weather files to be read in and used with supporting density models.
Added many types to easily represent components of multi-dimensional entities as Scalars. These include: ScalarPointElement, ScalarVectorElement, ScalarSphericalElement, ScalarCartographicElement, and ScalarModifiedKeplerianElement.
Added DynamicModifiedKeplerianElements to represent a time varying set of ModifiedKeplerianElements.
Added AxesVelocityOrbitNormal to represent the Vector Normal Co-normal axes.
Added AxesBPlane to represent the axes aligned to the B-Plane.
Added VectorBPlane to represent the B-Plane vector of a hyperbolic trajectory approaching a central body. You can also use this type to calculate 'B dot R' and 'B dot T' as Scalars.
Added ScalarDeltaSphericalElement to represent the delta-declination and delta-right ascension between two points and their common 'center'.
Added LifetimeOrbitPropagator to calculate long-term mean orbital elements and expected reentry time.
Added ScalarDensityJacchia1970 which calculates atmospheric density according to the Jacchia 1970 model.
Added MultivariableFunctionSolver as an abstract base type and a concrete NewtonRaphsonMultivariableFunctionSolver to allow for the multi-threaded solving of systems of equations.
Added StoppingCondition and StoppingConditionConstraint to allow for more robust interruption of a NumericalPropagator.
Axes, Point, and Vector can now return Scalar representations of their components.
Added CompositeAxes. This new Axes is defined by different axes over different intervals of time.
Added overloads to the EllipsoidSurfaceRegion static construction methods to allow the user to manually specify a reference point as being inside or outside of the region. This allows for the definition of regions larger than half of an Ellipsoid.
Fixed a bug where a ProjectedRaster would not update correctly when it was not being rendered. In addition, artifacts that could be displayed beneath the surface of the CentralBody when using a ProjectedRaster were removed.
ProjectedRasterOverlay has been deprecated and replaced with the new primitive ProjectedRaster, which projects images and video onto terrain or the central body surface and contains the same functionality as the old ProjectedRasterOverlay class, but with some performance and visualization enhancements.
MathPlayer is no longer used in our documentation and has been removed from the install.
Added BallisticPropagator which allows for the easy calculation of two-body trajectories from and to fixed locations on a CentralBody. Solutions for minimum energy, minimum eccentricity, or matching specified values of delta-V, flight duration, or apogee altitude can be found.
Added new geometry types ScalarSine and ScalarCosine
Texture2DFactory can now create mipmap compatible textures.
Further significant improvements to the performance of CentralBodySurfaceRegionSensorVolumeConstraint.
TimeIntervalCollectionContains no longer throws an exception if called on an empty collection.
In rare cases ScalarOccultationDualCone could return NaN instead of a valid result.
CentralBodySurfaceRegionSensorVolumeConstraint could return false positives when wide sensors were used.
MarkerBatchPrimitive could use the wrong cached shader when using per batch distance display conditions, causing the markers to be visible even when they did not meet the display conditions.
We now use the same user agent for requesting both Bing map tiles and Bing metadata.
Function explorers (DoubleFunctionExplorer, DurationFunctionExplorer, and JulianDateFunctionExplorer) used to precisely find all extrema that may potentially result in threshold crossings if the ExploreExtremaToFindCrossings property was set to true. Now they exit out of those calculations early if it is very unlikely that the current extrema will result in a threshold crossing, based on the value of their ExtremaCrossingUncertaintyFactor property. Setting this property to DoublePositiveInfinity will retain the old functionality. AccessConstraints do not expose their function explorers, but JulianDateFunctionSampling has an ExtremaCrossingUncertaintyFactor property.
NumericalPropagator now implements IDisposable.
When determining Sgp4Elements from the mean state of a Sgp4Propagator, you can now specify the Bstar value manually. Also improved the overall documentation for Sgp4Propagator.
Optimized CentralBodySurfaceRegionSensorVolumeConstraint. Users should see a dramatic performance improvement, from 8 to 20 times faster computation times.
JulianDateFunctionExplorer was modified to stop calculating the precise location of extrema when it is evident that they will not lead to a threshold crossing, which provides a performance boost to many functions, especially Access and Coverage calculations.
SurfaceMeshPrimitive and TriangleMeshPrimitive now support blending between their vertices.
GeospatialImageGlobeOverlay can now load a much larger variety of image file types.
Some CachingMotionEvaluators would not properly dispose the evaluator they were caching when they themselves were being disposed.
The SatelliteOutage class was reading times in UTC but marking them as being written in the GPS time standard.
RoutePropagator was masking some instances of HeightConfigurationStatus.ViolatesProfileDynamics when profile connections produced accelerations in excess of the maximum ThrustAcceleration.
Several bug fixes should make viewing KMLs much more stable.
Fixed a memory leak from displaying a Balloon.
NavigationAccuracyPredictedFigureOfMerit and NavigationAccuracyAssessedFigureOfMerit can now return data structures when DOP is undefined, rather than throwing exceptions.
Added an example to the HowTo demonstrating model articulation and pointing using ModelGraphicsExtension.
A large number of types and members have been removed in this release. These items were all marked obsolete in previous releases. Please contact AGI support if you have difficulty adjusting your code to work with this release.
CentralBodyObstructionConstraint.GetDegreeOfObstruction is now obsolete. Please use EllipsoidGetDegreeOfObstruction instead.
NumericalPropagationStateHistory.Insert has been removed.
The result of NumericalPropagationStateHistoryGetDateMotionCollectionT is now ordered chronologically, regardless of the sorting of the history itself. This allows the returned collection to be used correctly with other objects, such as interpolators, without manipulation. However, this means that if you were previously reversing a collection manually for this purpose, you will need to change that. If a chronologically reversed collection is desired after propagating backwards in time and creating a reversed history, one can still be created by manually calling PropagationStateConverterGetDateMotionCollectionT and passing the reversed time and state lists as parameters.
Added NewtonFindRoot. This new class uses the Newton-Raphson method to solve for the roots of a function.
Insight3D now displays the end-cap (or dome) of a sensor when the FieldOfViewCentralBodyProjectionGraphicsExtensionDisplayEndCap property evaluates to true.
Added a CentralBodyClipped property to MarkerBatchPrimitive, PointBatchPrimitive, PolylinePrimitive, and TriangleMeshPrimitive to control whether or not the primitive is clipped by the Earth or other central body.
NumericalPropagationStateHistory now enforces ordering so that its entries will all exist in either forward- or reverse-chronological order, specified by its SortingFormat. The Add methods have been reworked so that they will now add a new entry to the correct index.
Using an AdaptiveNumericalIntegrator to integrate backwards, while that integrator is choosing adaptive steps, and while that integrator is truncating those adaptive steps, will no longer cause an erroneous exception to be thrown.
Fixed several memory leaks in Insight3D.
Fixed a bug that caused a CompositePrimitive nested inside an OrderedCompositePrimitive to not be rendered.
Added the Navigation Advanced Library, which builds on the Navigation Accuracy Library and the Communications Library by considering how communication links contribute to GPS errors. GPS transmitters, signals, and a GPS receiver communications front end are modeled, allowing for GPS link budgets to be used in analysis, and to determine tracking using Carrier to Noise thresholds.
Added CentralBodySurfaceRegionSensorVolumeConstraint to constrain access based on whether a sensor can see part of a surface region (or area target) on the ground.
Added CompositePoint. This new Point is defined by different points over different intervals of time.
Added ModulationFsk to support Frequency Shift Keying (FSK) modulation.
Fixed a bug that could lead to generating coverage grids with missing grid points.
Fixed a bug where TerrainAzimuthElevationMask would throw an exception for some requested numbers of azimuth steps.
Fixed a bug in EllipsoidSurfaceCurveGetDiscretePoints which would, in rare cases, cause instances of the inherited classes to provide points which were not dense enough to fulfill the requested granularity.
Fixed a bug where NumericalPropagatorRestep would report the wrong previous time and state when raising the StepTaken event.
Fixed a bug that could lead to an infinite loop when estimating the BStar term during Sgp4PropagatorEstimateElements.
Fixed a bug that could lead to an exception when computing sensor projections.
Fixed a bug where EllipsoidSurfaceDistance could return NaN if one of the points was very, very close to (but not on) the equator.
Fixed a bug in EllipsoidSurfaceRegionCheckPointInsideRegion that could lead to false results in rare edge cases. This usually manifested as tiny gaps in access intervals calculated by CentralBodySurfaceRegionElevationAngleConstraint.
Fixed a bug in TimeIntervalCollectionToDuration that caused it to throw an exception when the collection contained intervals expressed using different time standards. Now, the returned duration will be expressed using the time standard of the first interval in the collection.
Added WaypointPropagatorConstructConstantVelocityWaypointPropagator which provides a method to easily construct a WaypointPropagator that hits the desired waypoints at the desired times.
Added StkAttitudeFileAttitudeTimeQuaternionsConvertToStkAttitudeConvention and StkAttitudeFileAttitudeTimeQuaternionsConvertFromStkAttitudeConvention methods to transform between the attitude convention used in STK Components and the one used in STK attitude files.
Fixed a bug that could cause GregorianDate to incorrectly interpret invalid dates (such as the 30th day of February) as a year plus a day of the year.
Fixed a bug in StkAttitudeFileConfigureFromAxes that caused incorrect results when using an Axes not supported by the STK Attitude file format. StkAttitudeFileConfigureFromAxes now correctly transforms the input data to a supported Axes.
Fixed a bug where StkAttitudeFileAttitudeTimeQuaternionsAttitudeData was not consistently represented using STK Desktop's attitude convention.
Fixed a bug in Insight3D that could cause imagery overlay tiles to be shown before they were done loading.
Added ServiceProviderPoint and ServiceProviderAxes classes. These are similar to PlatformLocationPoint and PlatformOrientationAxes except they work with IServiceProvider instead of Platform.
Added ChildrenExtension and ParentExtension for capturing parent/child relationships between ExtensibleObjects.
Added IdentifierExtension for capturing an identifier associated with an ExtensibleObject.
The raw IAU 2006 XYS data used to compute the International Celestial Reference Frame (ICRF) is now exposed via the Iau2006XysData class.
GregorianDateParseExact now optionally takes an array of acceptable formats.
CollectionAlgorithmsBinarySearch now supports searching a subset of the collection.
StkEphemerisFile and StkAttitudeFile will now correctly interpret the version of STK 10 ephemeris and attitude files.
JulianDateToString now also returns a standard Gregorian representation of the date and time represented by the instance.
The difference between TAI and UTC specified in Earth Orientation Parameters (EOP) files is now honored when converting sample times to TAI. Previously, the difference according to the LeapSecondsFacet was used, which could be different in rare circumstances. If the previous behavior is desired, it can be restored by setting EarthOrientationParametersReadOptionsInterpretTimesUsingLeapSecondsFacet to true on the options passed to ReadData.
ScalarExponent now produces correct partial derivatives when the exponent varies with respect to the independent variables.
Fixed a bug in GregorianDateToString that could cause it to report incorrect fractional seconds with seconds close to but not equal to zero.
DefinitionObject is now obsolete. Use DefinitionalObject instead.
All definitional objects in the libraries now derive from DefinitionalObject. This gives them all a core set of capabilities, including the ability to be copied and frozen. However, it also means that existing definitional objects in user code must implement some new abstract methods. See the DefinitionalObject reference documentation for more information.
The copy constructor of JulianDateFunctionSampling is now obsolete. Instead, use the one that takes a CopyContext as well.
Covariance3By3SizeAndOrientationInterpolatorGetEvaluator now returns a Covariance3By3Evaluator instead of a MotionEvaluator<Covariance3By3SizeAndOrientation>.
TimeIntervalCollection<T>.Intersect no longer considers a nullData property to be equal to every other value. As a result, consider intersecting with a time interval collection without data or calling IntersectMergingData to control how data is merged in the resulting intervals.
SegmentBoundaryTimes can now be specified on AxesInterpolator and RotationalMotionInterpolator. The interpolators will not interpolate over these boundary times.
Added a GregorianDateRoundSeconds method to round an instance's GregorianDateSecond property to a specified number of digits after the decimal point.
Added GaussianStatistics, containing functions for use with multi-dimensional Gaussian probability distributions like position covariance.
Added CovarianceSeparationConstraint to constrain access based on the range between two objects while taking into account the uncertainty of position of one or both of them.
Added new coordinate type, Covariance3By3Derivative, representing the derivatives of the positional variance and covariance information for an object.
Added new geometry type, DynamicCovariance3By3, to evaluate covariance and its derivatives over time.
Uncertainty in the LocationPoint of a platform can now be represented by ILocationPointCovarianceService and LocationPointCovarianceExtension.
Uncertainty in the LocationPoint of a platform can now be visualized with ILocationPointCovarianceGraphicsService and LocationPointCovarianceGraphicsExtension.
Added a STK_COMPONENTS_NO_DEFAULT_LEAP_SECONDS environment variable that, when set, prevents the libraries from using a default table of leap seconds. As a result, if a table of leap seconds is not explicitly given, the libraries will throw an exception when leap seconds are required.
Added a STK_COMPONENTS_NO_DEFAULT_EARTH_ORIENTATION_PARAMETERS environment variable that, when set, prevents the libraries from using a default table of EarthOrientationParameters (EOP) data. As a result, if EOP data is not explicitly given, the libraries will throw an exception when EOP data is required.
Added support for two new NanuType values: NanuType.FCSTUUFN and NanuType.DECOM. For the FCSTUUFN NANU, no end date is set for the satellite outage.
New classes have been added, e.g. StkComponentsCore, containing easily-accessible version information about the version of STK Components being used.
EntityParameter<TEntity> and TransactionParameter now have a DefaultValue property which allows the user to specify a default value for the parameter if one is not specified during evaluator parameterization.
Improved the performance of many evaluators in the libraries when derivatives are not required.
Added ToTleStringLine0, ToTleStringLine1, and ToTleStringLine2 methods to TwoLineElementSet.
Added an overload of GregorianDateToIso8601String to specify the number of decimal digits to include after the decimal point in the 'seconds' field.
Unicode characters in the Space Separator category are now treated as valid white space characters within a TLE string when constructing a TwoLineElementSet.
Added Version property to StkEphemerisFile and StkAttitudeFile. Upon construction, the version defaults to v9.0. Upon reading an unrecognized version specification in a file, the version is set to Unknown.
The values of the AuxiliaryStateElements in the NumericalPropagatorCurrentState property are now updated on the creation and reset of the propagator. Previously, these values were out-of-date until Propagate was called.
Resetting a NumericalPropagator now restores the PropagationDirection property to its original value.
Fixed a bug where an StkEphemerisFile containing CovarianceTimePosVel data and without the CovarianceFormat property explicitly specified would be incorrectly interpreted as UpperTriangular rather than LowerTriangular.
Fixed a bug where converting from UTC time to UT1 time very early, without first accessing other parts of the libraries, could throw an exception.
Fixed a bug that caused an exception when calling CreateSatelliteCollection on an SP3cEphemeris instance without velocity data.
Fixed a bug where EllipsoidSurfaceRegion would report a CartographicExtent including the north or south pole for extremely thin north-south regions.
Fixed a bug in GregorianDateToString that could lead to rounding errors in the last decimal place in the formatted number of seconds.
Fixed a bug in ServiceProviderDisplay where certain types of changes would not be applied even after calling ApplyChanges.
Removed IInterpolator and PolynomialApproximation. These types were marked obsolete in a previous release in favor of InterpolationAlgorithm.
Removed the SigmaInterpolator and RotationInterpolator properties from Covariance3By3SizeAndOrientationInterpolator. These properties were marked obsolete in a previous release in favor of SigmaInterpolationAlgorithm and RotationInterpolationAlgorithm.
Removed the Interpolator property from DoubleMotionInterpolator, TranslationalMotionInterpolator, and RotationalMotionInterpolator. This property was marked obsolete in a previous release in favor of the InterpolationAlgorithm property.
EvaluatorGroup now supports calling the Parameterize method with evaluators of type MotionEvaluator<T, TDerivative>.
Improved the performance of determining the MinimumSampleSpacing for a NgaDigitalTerrainElevationData terrain provider.
Improved the performance of HermitePolynomialApproximation.
SensorVolumeConstraint now uses an improved algorithm for selecting the sampling step for conic sensor shapes, resulting in improved performance when evaluating the constraint over time.
GregorianDateToIso8601String now has an overload that takes an enumeration indicating how the string should be formatted.
Fixed a bug that caused an exception when attempting to evaluate the transformation between the TrueEquatorMeanEquinoxFrame (TEME) axes and the FixedFrame axes during a leap second.
CommunicationLinkConstraint and CommunicationObjectConstraint will no longer throw an exception when compared against another constraint with a nullConstraintParameter.
Fixed a bug with CommunicationLinkConstraint and CommunicationObjectConstraint where access was unable to find interval boundaries precisely because of inadequate sampling.
Fixed a bug in ScalarAngleBetweenVectors where it did not use the same EvaluatorGroup for all pieces of its computation. This did not affect the results, but it caused poor performance in certain situations.
Fixed a bug when evaluating a MotionEvaluator<T> or MotionEvaluator<T, TDerivative> over an interval. In most cases, any exceptions occurring during evaluation would be wrapped in a ThreadException, but sometimes an exception would pass through without being wrapped. Now, all exceptions are wrapped.
JulianDateToGregorianDate now throws an exception in cases where the GregorianDate would be invalid. Previously, this method could create invalid dates.
Fixed a bug where objects visualized with ServiceProviderDisplay were sometimes shown even when their DisplayParameters specified that they should not be.
PropagatedRoute.HasNoConfigurationErrors is obsolete. Please use HasConfigurationErrors instead.
Added Terrain Integrated Rough Earth Model (TIREM) v3.18 for accurate communication signal propagation along terrain. For more information, see the reference documentation for TiremPropagationModel3_18.
PropagatedRoute now exposes a Segments property and a GetSegment method in order to provide access to more detailed information about individual segments in the overall route.
Added EllipsoidEllipsoidSeparationDistance to compute the separation distance between two ellipsoids.
Modified TerrainAvoidanceProfile so that having a large effective pitch rate will no longer cause the profile to exaggerate the height above the terrain. This includes alternative heuristics to avoid cases where noisy terrain can cause problems when trying to navigate over local peaks. TerrainAvoidanceProfile should now be more reliable and create reasonable routes in most cases, though configuration errors may still result from certain difficult geometries.
Improved the reliability of the StandardTransitionProfileSegment to prevent numerical noise from causing conflict between the boundary conditions between profiles. The height of the profile at the end of a long surface segment will now be more precise with respect to the requested boundary condition.
Added a new Multiply method to Cartesian to multiply a Cartesian (treated as a row vector) by a Matrix3By3.
Added a constructor to Matrix3By3Symmetric that rounds the non-diagonal elements of a Matrix3By3. This provides a better way of constructing a symmetric matrix from a matrix which has become slightly non-symmetric due to numerical noise from the FromLowerTriangular and FromUpperTriangular methods.
Fixed a bug in ReceivingAntennaExtension that could lead to exceptions when using a ComplexReceiver created from a SimpleReceiver.
Fixed a bug in GregorianDateToIso8601String that caused single-digit numbers of seconds to be formatted without a leading zero. In addition, ISO8601 dates are now formatted consistently regardless of the current culture.
Fixed a bug in LinkVisualizer that could cause multiple links visualized with ServiceProviderDisplay to be incorrectly displayed in the same color.
RinexNavigationEphemerisAvailabilityIntervals is now computed from the time of transmission rather than from the time of ephemeris.
StkEphemerisFile no longer automatically converts distances to meters and angles to radians on load. However, the interpolator accessible via the Interpolator property still offers data in meters and radians for easier interfacing with other parts of STK Components.
When an exception occurs during function evaluation, TimeIntervalFinder now wraps the exception in a ThreadException even when it is operating in a single-threaded mode. This is consistent with the behavior in the rest of STK Components and allows user code to catch the same exception regardless of whether the operation ended up being multithreaded.
Orbit Propagation Library now supports propagation of a StateTransitionMatrix that can be used to compute state covariance, or the uncertainty in the state elements, over time. See the Covariance and Uncertainty topic for more information.
Added a generalized Matrix abstract class and two concrete, derived classes, DenseMatrix and DiagonalMatrix. Also added a time-varying matrix type, DynamicMatrix.
Added basic support for sensors that change shape with time. See the Sensor Field of View Volumes topic for more information.
Added LagrangeOrbitVariationOfParameters to interpolate orbital positions using a two-body propagator and variation of parameters (VOP).
StkEphemerisFile now supports the "LagrangeVOP" interpolation method.
Added SensorFieldOfViewVisualizer<TEntity> to allow visualization of sensors attached to Tracking entities.
Added an EvaluationBehavior property to GpsRinexPropagator, allowing control of the behavior when evaluating outside the AvailabilityIntervals of the propagator. Also added a similar option to RinexNavigationCreateSatelliteCollection and RinexNavigationRecordCreateSatellite.
Added a new constructor overload to AzimuthElevationMaskConstraint to make it easier to construct an instance from a link and a link end.
Added new constructor overloads to ComplexConic, RectangularPyramid, SyntheticApertureRadarVolume, and CustomSensorPattern to make it easier to construct these sensor shapes.
CartesianStateElementConverter is no longer abstract so it can be constructed directly.
Fixed a bug in CustomSensorPattern that resulted in poor performance when using the sensor volume to compute access.
Fixed a bug in DescriptiveStatisticsPercentileT that would rarely cause it to index incorrectly into the supplied list and raise an exception.
Fixed a bug in GaussJacksonIntegrator that caused it to throw an exception when used with NumericalPropagator.
Fixed a bug in CameraSnapshot that caused it to sometimes render the incorrect scene when multiple Insight3D controls were present within a single application.
Fixed a bug in CameraVideoRecording that could cause black frames to be written to the video if a Pick was executed.
Fixed a bug in computing projections of ComplexConic and SyntheticApertureRadarVolume sensors that could cause unnecessary segment breaks and therefore extra outlining when visualizing them.
BrentFindExtremum now throws ArgumentOutOfRangeException instead of ArithmeticException when the initial bracketing points are invalid or do not indicate an extremum.
Added new geocentric (or planetocentric) coordinate type, LongitudeLatitudeRadius.
StkEphemerisFile now supports the EphemerisLLRTimePos and EphemerisLLRTimePosVel formats.
BrentFindExtremum no longer throws an exception when the values it's given are already converged based on the independent variable tolerance.
Fixed a bug that could cause Access Queries, DoubleFunctionExplorer, DurationFunctionExplorer, and JulianDateFunctionExplorer to throw an ArithmeticException when given evaluation intervals smaller than the independent variable convergence tolerance or when an extremum was indicated over a similarly small interval.
Fixed a bug in UsgsDigitalElevationModel that caused it to interpret negative heights and voids incorrectly.
Fixed a bug introduced in STK Components 2012 r2 that caused AccessConstraints to be evaluated in only one thread when evaluated over a single interval, regardless of the ThreadingPolicy.
Fixed a bug where DiscreteCoverageDefinitionOnCentralBody could not be canceled by ITrackCalculationProgress.
Fixed a bug that could cause DiscreteCoverageDefinitionOnCentralBody to throw an IndexOutOfRangeException when the computation was aborted as a result of a different exception.
Fixed a bug that could lead to an access violation when loading Collada models with textures.
Removed the Principle and PrincipleAxis properties of AxesAlignedConstrained. They were marked obsolete in a previous release in favor of the correctly-spelled versions.
Classes derived from AccessEvaluator are now required to implement the EvaluateIgnoringAvailability method. This new method offers improved performance in cases where the underlying evaluators are already known to be available.
The EvaluatorGroup.CreateEvaluatorCallback delegate types have been renamed, for example, AGI.FoundationEvaluatorGroupCallback0TEvaluator.
The following types were moved from the AGI.Foundation.Geometry namespace to the AGI.Foundation.Communications namespace: LinkBudget, LinkBudgetScalars, AntennaTargetingResult, AntennaTargetingResultReason, and AntennaTargetingResultCollection.
PointInterpolatorType is now obsolete. Please use InterpolationAlgorithmType instead.
The Explore method on DoubleFunctionExplorer, DurationFunctionExplorer, and JulianDateFunctionExplorer now automatically calls Reset. As a result, events will no longer be raised for crossings and extrema occurring between the intervals in two successive calls to Explore.
Added DiscreteCoverageDefinitionOnCentralBody, an alternative to CoverageDefinitionOnCentralBody that may be faster and more flexible in some situations. See the Coverage topic for more information.
Added a Frequently Asked Questions topic to the Programmer's Guide.
Added a new method to TimeIntervalCollection<T>, AddMergingData, that allows the caller to control how data is merged when a new interval being added overlaps an existing one.
Added EvaluatorGroupCallAndMemoize methods to allow caching of a function result in the context of an EvaluatorGroup.
Added IPlaceHolderService, which serves as a marker for extensible objects that act as placeholders rather than fully-functional objects. In some circumstances, placeholders may be subject to less verification than regular objects so that they are not required to provide all of their eventual services until evaluator creation time.
AGI Components has been renamed to STK Components!
Improved terrain performance by about 10% in many important use-cases.
StkEphemerisFile now treats two (or more) successive ephemeris points with the same time as implicit SegmentBoundaryTimes.
Improved EvaluatorGroup algorithm for selecting where to insert caches for evaluators that include parameters. This will result in improved performance when using parameterized evaluators.
Improved performance for common cases involving Communications Library propagation models and antenna patterns.
Improved performance of repeated calls to GeometryTransformerObservePoint with different points but where each point is defined in the same reference frame.
Fixed a bug in StkEphemerisFile that caused distances to be read incorrectly when the file specified the DistanceUnit property.
Fixed a bug preventing CommunicationSystem from being used with CoverageDefinitionOnCentralBody.
Fixed a bug in TranslationalMotionInterpolator that caused it to arbitrarily return either of the two values when evaluated exactly on a segment boundary time. Now, it always returns the second value.
Fixed a bug in various caching evaluators that could cause them to return incorrect results when the underlying evaluator threw an exception and then the cache was evaluated again at the same time.
Fixed a bug where CoverageDefinitionOnCentralBody would report incorrect access results for assets defined to include an AccessQueryOr.
Fixed a bug that caused TwoLineElementSetToTleString to write a negative exponent for BStar and MeanMotionDotDot even in the rare case that their exponents are positive.
Fixed a bug that could prevent a ScreenOverlay from being returned in a call to Pick when an application had multiple Insight3D controls.
Added the recently-announced June 30, 2012 leap second to the default list of leap seconds.
Signal now throws an exception if constructed with zero bandwidth or a negative frequency.
SensorFieldOfView.GetProjections is now obsolete. Please use SensorFieldOfViewGetProjection instead.
SensorProjectionEvaluator now evaluates to a SensorProjection instead of a list of SensorProjectionBoundary instances.
IInterpolator and PolynomialApproximation are now obsolete. Use the new abstract base class InterpolationAlgorithm instead.
Properties named Interpolator on TranslationalMotionInterpolator, RotationalMotionInterpolator, DoubleMotionInterpolator, and Covariance3By3SizeAndOrientationInterpolator are all now obsolete, and are replaced by properties named InterpolationAlgorithm. This makes a clear distinction between the interpolation algorithm classes and the interpolator classes that use them.
Interpolation methods on LinearApproximation, HermitePolynomialApproximation, and LagrangePolynomialApproximation taking IList<double> parameters are now obsolete. They are replaced by better-performing versions that take double[] parameters.
All of the sensor types, including RectangularPyramid, ComplexConic, SyntheticApertureRadarVolume, and CustomSensorPattern, can now compute their complete projection into space as well as onto the ellipsoid.
Sensors visualized with FieldOfViewCentralBodyProjectionGraphicsExtension now display the projection of the sensor into space in addition to displaying the projection onto the ellipsoid.
CustomSensorPattern now has a Radius property to limit the range of the sensor.
Added the EllipsoidSurfaceRegion.CreateRegionUsingExtent method to make it easy to create a coverage grid from a latitude / longitude extent.
Added a ToIso8601String method to GregorianDate. Also, GregorianDate can now parse a date string in ISO8601 day-of-year format.
Interpolation using TranslationalMotionInterpolator, RotationalMotionInterpolator, DoubleMotionInterpolator, and Covariance3By3SizeAndOrientationInterpolator is now faster, due to the interpolation algorithm changes mentioned in the "Breaking Changes" section above.
Improved the numerical stability of computing sensor projections.
Added a ToString method to LinkBudget to make it easy to print out all of the link budget values.
Fixed a bug where some AccessEvaluators would report true for IsTimeVarying instead of false, leading to inefficient evaluator performance in cases where the access result was static.
Fixed a bug in CubicRealPolynomial that could cause an exception when attempting to project a ComplexConic sensor.
Fixed a bug in EllipsoidTangents that caused it to always report that there were no tangents when the specified half angle was greater than 90 degrees.
Fixed a bug that resulted in a NullReferenceException when copying a NumericalPropagator with auxiliary elements.
TextBatchPrimitive now works correctly when one or more of the strings is an empty string.
Classes deriving from GainPattern are now required to override the Clone method.
Two constructors on ComplexDigitalTransmitter are now obsolete. Use the overloads taking SignalDataCollection instead.
Overloads of NumericalPropagatorPropagate taking an outputInterval have been removed. Instead, an outputSparsity parameter is provided to reduce the output produced by the propagator.
CommunicationLinkCollection now has a DefaultAccessConstraints property. The constraints are applied to all links in the collection so that they are unavailable when, for example, the transmitter and receiver are on opposite sides of the Earth.
Added a new type of IntendedSignalStrategy, IntendedSignalByTransmitter, that makes it easy to specify that the intended signal in a CommunicationSystem is the one transmitted by a particular transmitter.
CentralBodyObstructionConstraint no longer requires either end of the link to have an orientation. In addition, it is a bit faster in many cases.
Improved the usability of StkEphemerisFile and StkAttitudeFile, and improved their conformance with STK.
GainPattern now implements ICloneWithContext.
AccessConstraintsExtension added to transmitter and receiver Platforms will now affect the propagation of signals along wireless communication links.
AGI Components for .NET is now tested against Mono v2.10.5.
StkEphemerisFile now reads the InterpolationSamplesM1 property written by recent versions of STK. Previously, it ignored the property, which could result in incorrect interpolation.
Fixed a bug in TranslationalMotionInterpolator that could cause it to interpolate using more points than expected when used with HermitePolynomialApproximation.
References to a single instance of a NumericalPropagator held by multiple objects will now get updated properly when those objects are cloned.
Fixed a bug where specifying values near zero for the minimum threshold of a CommunicationObjectConstraint would cause the constraint to incorrectly report that access is not available.
Fixed a bug in Covariance3By3SizeAndOrientationInterpolator that could lead to incorrect results when the values of SigmaDegree and RotationDegree were different.
Fixed a bug in BrentFindExtremum that could cause it to produce NaNs and attempt to evaluate the function at invalid independent variable values when a function evaluated to positive or negative infinity.
Attempting to stop the cache thread for a TerrainCacheGroup that was already stopped now throws an exception instead of hanging.
Fixed a bug that could rarely cause an exception to be thrown when setting valid ModelPrimitive articulation values.
Two AxesAlignedConstrained properties, Principle and PrincipleAxis, were spelled incorrectly and have been marked obsolete. Please use Principal and PrincipalAxis instead.
ThreadingPolicyFacet, NumberOfProcessorsThreadingPolicyFacet, and ConstantThreadingPolicyFacet are now obsolete. Please use ThreadingPolicy instead.
Removed constructor overloads for BingMapsForEnterpriseImageGlobeOverlay taking an account ID and password, because the account ID and password are no longer required. These constructors were previously marked obsolete.
Added higher-level types to make it much easier to do analysis with the Communications Library. See the Basic Communications topic more information.
Added AxesTargetingLink, which makes it easy to make a sensor point in the direction of a LinkInstantaneous or LinkSpeedOfLight.
IersTechnicalNote21 now exposes Updated1980NutationModel and UpdatedEquationOfEquinoxes, and EarthCentralBody is configured to use these models by default. The old models are still available from ClassicalEquationOfEquinoxes and Iau1980Nutation, and can be selected by setting the EquationOfEquinoxes and NutationModel properties on EarthCentralBody.
Added IntendedSignalByIdentifier<T> to select an intended communications signal by specifying its identifier.
Added new GraphicsParameter<T> types for use with ServiceProviderDisplay, including AxesGraphicsParameter, PointGraphicsParameter, ScalarGraphicsParameter, and VectorGraphicsParameter. Also added GraphicsParameterFormatter and GraphicsParameterTransform<TInput, TOutput> to make it easy to generate dynamic labels by combining several parameters together.
Improved the numerical stability of the QuarticRealPolynomialRealRoots method.
JplDE now uses the equation of the equinoxes to model the longitude of the mean ascending node of the moon for nutation. Previously, it was always 0.0.
EarthOrientationParameters now implements IEquatableDefinition.
Sgp4Propagator now returns an approximate acceleration which is the same as the acceleration produced by the J4Propagator. Since the SGP4 theory itself is an approximation, and even its position and velocity do not correspond exactly, the fact that the acceleration is not exact is deemed an appropriate approximation. Having acceleration available from the propagator is extremely useful throughout other parts of the system.
AGI Components now consistently honors the ThreadingPolicyThreadSource property when executing parallelizable operations in multiple threads.
Fixed a bug in PointPropagationParameter that could cause IsSameDefinition to erroneously return true.
Fixed a bug in StkEphemerisFile and StkAttitudeFile that caused them to generate incorrect results when working in a non-standard reference frame or set of axes.
Fixed a bug where a Signal created with a NoiseTemperature of 0.0 and a NoiseBandwidth of positive or negative infinity would end up with a NoisePower of NaN instead of 0.0.
Fixed a bug in EllipsoidSurfaceCurve that could cause EllipsoidGridRegions to produce grid points far outside the desired region.
Fixed a bug that prevented markers in KML documents in Insight3D from working with the newest NVidia GPU drivers and when running on certain other GPUs.
The InitialVelocityResiduals and FinalVelocityResiduals properties of Sgp4PropagatorSgp4EstimationOutput have been marked obsolete. The values were never computed or used as part of the estimation process.
CentralBody is no longer settable via the service interface, making it consistent with other service interfaces.
Matrix3By3.EigenDecompositionOfSymmetricMatrix is now obsolete. Use Matrix3By3SymmetricEigenDecomposition instead.
StkEphemerisFile now stores covariance information using the more efficient Matrix3By3Symmetric instead of Matrix3By3 in order to reduce memory requirements when dealing with large amounts of covariance information.
Added Matrix3By3Symmetric.
Added a new service, INameService, that exposes the name of an IServiceProvider.
Added NameExtension, LocationPointExtension, and OrientationAxesExtension types that can be used to add Platform-like capabilities to ExtensibleObjects.
Added DoubleMotionInterpolator to interpolate over collections of double-precision, floating-point numbers using various interpolation algorithms.
Added VectorInterpolator and ScalarInterpolator which are a time-varying Vector and Scalar (respectively) defined by interpolating over collections of time-tagged data.
LinkInstantaneous and LinkSpeedOfLight now have Name properties.
In Matrix3By3, the associated reordering of the eigenvectors to produce the proper sorting of the eigenvalues in the eigen decomposition of a symmetric matrix is now performed in such a manner as to preserve the "right-handedness" and rotational characteristic of the underlying Schur decomposition.
Improved performance and reduced memory requirements when writing an StkEphemerisFile that contains covariance information.
Due to a new license agreement between AGI and Microsoft, BingMapsForEnterpriseImageGlobeOverlay no longer shows an evaluation banner when not using a licensed account. All Insight3D applications can now use imagery from the Microsoft Bing Maps public servers free of charge.
TwoLineElementSetToTleString now throws an exception when the values of the properties cannot be represented as a TLE string. Previously, it would generate an invalid TLE.
Starting in AGI Components 2011 r4, EndianBitConverter would throw different exceptions depending on whether the desired endianness matched the system. This regression has been fixed, and the exceptions thrown by EndianBitConverter once again match those thrown by the standard bit converter.
Fixed an issue with Sgp4PropagatorEstimateElements which would cause a matrix to become singular for some orbits.
Sgp4PropagatorEstimateElements now produces results for MeanMotionDot for epochs that do not coincide with the initial ephemeris point of the fit data.
Fixed a bug in UsgsDigitalElevationModel where numbers expressed in Fortran scientific notation were not parsed correctly, leading to a FormatException.
A large number of types and members have been removed in this release. These items were all marked obsolete in previous releases. Please contact AGI support if you have difficulty adjusting your code to work with this release.
SunCentralBody.MeanSolarRadius is now obsolete. Use MeanSolarRadius1992Seidelmann, MeanSolarRadius1993Prussing, or MeanSolarRadius2007Carroll instead. The 2007 value is now used for the Shape of the SunCentralBody by default.
Introducing the Orbit Propagation Library, which provides a specialized state variable and several force and environment models that can be used to propagate a satellite. For more information, see the Orbit Propagation topic.
In addition to orbit propagation, the NumericalPropagator can propagate more general state elements with defined derivatives, such as PropagationVector and PropagationScalar.
Added the following numerical integrators: RungeKutta4Integrator, RungeKuttaFehlberg78Integrator, BulirschStoerIntegrator, and GaussJacksonIntegrator.
Added new methods EllipsoidIsAtOrBeneathSurface and EllipsoidComputeApproximateHeight.
Added new static method CollectionAlgorithmsCreateJaggedDoubleArray.
Added new method JulianDateDaysDifference.
Added new methods FloatingPointComparisonEqualsSignificantDigits and FloatingPointComparisonEqualsSignificantDigitsOrAbsoluteError.
Added a MinimumSampleSpacing property to TerrainProvider. This property provides a good estimate of the resolution of the terrain data and is used in TerrainAlongLine to select how the terrain is sampled.
Added TriangleTerrainInterpolator, a RasterTerrainInterpolator designed to make interpolated terrain heights for analysis more closely match the terrain rendered by Insight3D.
MarkerBatchPrimitive now has per-marker time interval display conditions, set using the SetTimeIntervalDisplayConditions method, and per-marker display flags, set using the SetDisplays method.
MarkerBatchPrimitive now supports aligning markers with the north vector, using the AlignToNorth method, or with an arbitrary axis, using the AlignToAxis method, in addition to the previous capability of aligning with the screen, using the AlignToScreen method.
TextBatchPrimitive now has per-string time interval display conditions, set using the SetTimeIntervalDisplayConditions method, and per-string display flags, set using the SetDisplays method.
TriangleMeshPrimitive can now display a texture. It has new properties for specifying the Texture and TextureFilter, and can specify the per-vertex texture coordinates using the new SetTextureCoordinates method.
TriangleMeshPrimitive now supports per-vertex coloring, set using the SetPerVertexColors method. The ShadeModel property controls whether flat or smooth shading is used to render per-vertex colors.
Added support for ReferenceFrame and Vector visualization to ServiceProviderDisplay. See the HowTo for examples.
RasterTerrainProviderGetHeightRelativeToShape now optionally accepts a RasterTerrainInterpolator parameter specifying how the terrain data should be interpolated.
CompositeTerrainProviderGetHeight now optionally accepts a RasterTerrainInterpolator parameter specifying how any RasterTerrainProvider in the composite should be interpolated.
Fixed a bug where the ParameterizedPointCheckForSameDefinition method did not examine the ReferenceFrame property.
Fixed a bug where the ParameterizedVectorCheckForSameDefinition method did not examine the DefinedInAxes property.
Fixed a bug where the ScalarDotProductCheckForSameDefinition method mistakenly returned true when comparing scalars representing "vectorA 'dot' vectorB" and "vectorB 'dot' vectorA". While the values are likely to be the same, the definitions should be considered different.
JplDEFile now uses BarycentricDynamicalTime as opposed to TerrestrialTime, as is stipulated by JPL.
Fixed a bug in SqlServerArchive<TEntity> that could cause problems when archiving data spanning multiple days.
Fixed a bug in SqlServerArchive<TEntity> that could cause it to report incorrect results when queried using dates not expressed using the InternationalAtomicTime (TAI) time standard.
Fixed a bug in Insight3D that caused it to crash at startup when run on a Linux system under WINE. Insight3D is still not officially supported on non-Windows platforms.
Fixed a bug in Insight3D that could cause textures on MDL models to disappear under some circumstances.
VectorDotProduct is now obsolete. Use ScalarDotProduct instead.
Parameter evaluators now throw an exception if they are evaluated without first being parameterized. Previously, they returned a default value.
TrackingTypeArchiverCollection.AddPrimitive has been removed. A new AddEnumerationT method is provided to register an enumeration type for default archiving. Any other type should use the Add method and pass a custom archiver class.
Constructors for BingMapsForEnterpriseImageGlobeOverlay that take an account ID and password are now obsolete because Microsoft is discontinuing support for Token Service authentication on March 30, 2012. Instead, use the new constructors that take an application ID and utilize the Key Service.
Added new scalar and vector types: VectorSum, ScalarSum, ScalarDotProduct, ScalarProduct, and ScalarExponent. New operator overloads were added to Scalar and Vector to facilitate the use of these new types.
Added two new access constraints, AngleInPlaneConstraint and AngleOutOfPlaneConstraint. These constraints are similar to AzimuthAngleConstraint and ElevationAngleConstraint, respectively, but allow more flexibility in how the angles are defined.
Added ParameterizedScalar, ParameterizedVector, and ParameterizedPoint types. These types are used with EvaluatorGroupParameterize to specify a geometry type's value at invocation time.
Added EvaluatorGroupParameterize overloads taking MotionEvaluator<T> so that derivatives can be obtained from parameterized evaluators.
Evaluators can now be parameterized with surplus or missing parameters by passing an appropriate value of the ParameterAction enumeration to the EvaluatorGroupParameterize method.
PointInterpolator now supports a PointInterpolatorType of Linear in addition to Hermite and Lagrange.
Added a UsePerPixelLighting property to GlobeOverlaySettings. It may be useful to disable per-pixel lighting on older GPUs.
Added the ScaleByInverse property to VectorScaled in order to make it more convenient to scale by the reciprocal of a scalar.
Evaluating many Scalars and Vectors without derivatives is now slightly more efficient.
Fixed a bug where parameters in a parameterized evaluator sometimes returned false from their IsTimeVarying property, leading to improper caching of their value.
Fixed a bug where TerrainAlongLine would report an obscured view if the one of the points was very slightly below the terrain surface. It is common to end up placing objects very slightly below terrain when attempting to put them on terrain, due to floating point rounding.
Fixed a bug in PointVectorToPoint that caused an exception when comparing it to another point of a different type.
DateMotionCollection<T>.AddRange now properly sets the Order property when invoked on an empty collection.
When using ServiceProviderDisplay, completely static models would not appear until the initial Update call, instead of appearing immediately after the call to ApplyChanges.
Fixed several memory leaks in Insight3D.
Fixed an exception that could occur in WebMapServiceCachedImageGlobeOverlay.
When RasterTerrainProviderCartographicExtentToIndexExtent is passed a Cartographic extent outside of the valid range of the terrain provider, it now clamps the returned index extent rather than throwing an exception.
Added a RenderPass property to allow the render pass of the underlying MarkerBatchPrimitive to be specified.
LabelVisualizer<TEntity> now exposes a TextureFilter property.
Added support for Stereoscopic rendering.
Added a TerrainAzimuthElevationMaskCreateDelayedMask method which creates a delayed azimuth-elevation mask in which individual azimuths of the mask are not computed until they are needed. In most cases, using this method instead of the Compute method will improve performance by eliminating unnecessary computations.
Added a CacheTileSize property to RasterTerrainCache. RasterTerrainProvider can set this property in order to align cache blocks with their natural tile size.
Added a OverallSurfaceDistance property and CreateSurfaceCurve method to PropagatedRoute to provide access to the projection of the route onto the central body's ellipsoid surface.
Added overloads of StkEphemerisFileReadFrom that allow additional read options to be specified, such as whether or not to read covariance data.
Beginning with this release, AGI Components for .NET is distributed as a simple ZIP file instead of as an installer. We hope that you will find this more convenient, but we appreciate your feedback.
Improved the performance of AGIProcessedDataTerrain.
Improved the performance of AGIWorldTerrain.
ThreadedCalculation now installs a ConstantThreadingPolicyFacet specifying one thread in each thread that is used to do the computation. This ensures that parallelizable computations invoked within the thread are not themselves parallelized. As a result, the number of threads is closer to the number of cores in common use-cases, which improves performance by reducing context switch overhead. For example, when splitting a large coverage grid among multiple threads, the individual access computations that are performed for each grid point will not themselves be multithreaded.
Delayed transformation of CovarianceData when reading a StkEphemerisFile until the covariance data is accessed.
Fixed a bug where a ScreenOverlay would not honor its parent's ClipToParent status when determining the parent's bounding rectangle.
Fixed a bug that could lead to an exception when PerItemPickingEnabled was set to true on a primitive with an empty collection of batch items.
Fixed a bug where ServiceProviderDisplay showed graphics for points, markers, links, and text when the DisplayParametersDisplay property was set to a constant value of false.
Fixed a bug that could cause some tiles of irregular, high-resolution PDTT files to not be rendered.
Fixed a bug that caused textures on MDL models to disappear when rendered in the same view as a TextBatchPrimitive.
Fixed a bug that prevented evaluation of AGIWorldTerrain heights very close to -180 degrees longitude or 90 degrees latitude.
Fixed a bug that caused AGIProcessedDataTerrain to incorrectly return heights of 0.0 for some regions of irregular, high-resolution terrain.
Fixed a bug that could lead to an access violation when using imagery overlays in Insight3D. This bug was introduced in AGI Components 2011 r2.
DoubleFunctionThreshold, DurationFunctionThreshold, JulianDateFunctionThreshold, DoubleFunctionExtrema, DurationFunctionExtrema, and JulianDateFunctionExtrema are now obsolete. Use DoubleFunctionExplorer, DurationFunctionExplorer, or JulianDateFunctionExplorer instead.
All of the types previously in the AGI.Foundation.NumericalMethods.UnivariateFunctions namespace were moved to either AGI.Foundation.NumericalMethods or AGI.Foundation.NumericalMethods.Advanced.
The misnamed DelaunayElements.MeanMotion property is now obsolete. The MeanAnomaly property should be used instead.
Added support for the ColladaFX framework for Collada models rendered with ModelPrimitive. ColladaFX allows for fine-grained control over the rendering of the model in order to create sophisticated visual effects. See the Advanced Shading section of the Model Primitive topic for more information.
Added DoubleFunctionExplorer, DurationFunctionExplorer, and JulianDateFunctionExplorer to numerically explore functions looking for threshold crossings, minima, and maxima. See the Exploring Functions topic for more information.
Insight3D terrain and imagery now use per-pixel lighting on supported hardware, which improves visual quality.
Orbital element types now consistently throw an InvalidOperationException describing the issue when initialized from a rectilinear orbit. Previously, some types would throw a DivideByZeroException.
Fixed a bug that could cause pixel alignment issues with MarkerBatchPrimitive, TextBatchPrimitive, and ScreenOverlay.
Fixed a bug in the Insight3D Balloons that could cause sizing issues when given certain content.
Fixed a memory leak that could occur when using the CopyFromRaster, CopyFromMemory, or CopyFromBitmap methods on Raster and RasterStream.
Fixed issues with orbital element support for non-closed orbits which would cause some conversions and operations to throw exceptions or produce incorrect results.
Added OrderedCompositePrimitive for z-ordering primitives on the surface. See the Ordered Composite Primitive topic for more information.
Celestial-to-terrestrial reference frame transformations are now validated against the Standards of Fundamental Astronomy (SOFA) Libraries.
Added a DayOfYear property to GregorianDate.
Fixed a bug in DoubleFunctionExtrema, DurationFunctionExtrema, and JulianDateFunctionExtrema that could lead to an exception when evaluating over an extremely short interval.
Fixed a bug in DoubleFunctionExtrema that could cause it to report incorrect extrema.
Fixed a bug in DoubleFunctionThreshold that could cause it to report incorrect threshold crossings.
Fixed a bug in CoverageGridResult where the boundary vertices, if set beforehand, would become null after calling ApplyFilter.
Fixed a bug that incorrectly caused multiple items to be picked on older video cards or over Remote Desktop when TextBatchPrimitivePerItemPickingEnabled was set.
Fixed rendering problems with PathPrimitive on older (OpenGL 1.1) graphics cards.
Fixed a bug where KML network links would fail to refresh in certain configurations.
Fixed a bug in KmlNetworkLink that could lead to an exception when using query strings to request data.
Fixed a bug that could lead to an exception when visualizing a link using ServiceProviderDisplay.
KmlDocumentLoadedEventArgsException is no longer settable.
Added PathPrimitive, which is similar to PolylinePrimitive, except it allows efficient addition and removal of points from the front or back of the polyline. See the Path Primitive topic.
Added PacketAcquirementYieldTime, PacketBufferLimit, and AllowFrameDrop properties to VideoStream, to provide more customization for video stream buffering and performance.
Added PrimitiveFactory to simplify creating primitives for common use cases such as polygons, circles, and latitude-longitude grids.
Added NetworkContext to configure additional network settings for acquiring resources from URIs in Insight3D. For instance, you can now set a proxy, set credentials, or configure certificate policies that can enable SSL connections.
Improved accuracy when calculating Earth Rotation Angle, particularly at times far removed from J2000.
AzimuthElevationMask now throws a more informative exception when its ElevationMasks are incorrectly defined.
Improvements to ProjectedRasterOverlay. See the Raster and Projection Streams topic for more information. Improvements include:
Projection onto models.
Visualization of the far plane.
Projection borders.
Color filtering.
Colors and translucency of various aspects of the visualization can now be customized.
Support for Rasters with alpha channels.
Access to the direction vectors that define the projection's frustum.
ProjectedRasterOverlay now behaves more like a standard GlobeImageOverlay when added to the CentralBodyGraphicsImagery collection, including support for Z-ordering.
Visual properties can now be set dynamically while visualization is occurring.
Other fixes and performance enhancements.
PrimitiveManager and CompositePrimitive now implement IEnumerable<Primitive>.
Fixed a bug causing AGIProcessedDataTerrain to ignore any TerrainCacheGroup provided to its constructors.
Fixed a crash in Platform Graphics when mixing null and non-null GraphicsParameter<T> objects of the same type.
Fixed a bug causing the GlobeImageOverlayAddCompleteEventArgs object provided to any registered handlers for the ImageCollectionAddComplete event to always report failure when adding a GeospatialImageGlobeOverlay, even if the add succeeded.
Fixed an issue where the BalloonNavigating event would not be raised in some cases when a link was clicked after calling KmlFeatureShowBalloon.
The StartTime property and the Propagate method of RoutePropagator were marked obsolete. Instead, use the PropagateFromTime method.
EarthOrientationParameters.GetUt1MinusUtc was marked obsolete. Use the equivalent ComputeUt1MinusUtc method instead.
Added StationaryHoldProcedure to Route Design Library. It allows users to define a waypoint at which the vehicle will slow to a stop, hold for a specified amount of time, and then speed up to continue toward the next procedure.
Added StaticRouteProfile to Route Design Library. It allows the height and dynamics in a procedure to be specified by extending ProfileSegment, instead of the more complicated RouteProfile.
RoutePropagator now has a PropagateTowardTime method used to plan routes that rendezvous at a particular time and place at the end of the route.
Added ComputeTaiMinusUtc and ComputeEopData methods to EarthOrientationParameters.
ServiceProviderDisplay can now be used to render AzimuthElevationMasks using AzimuthElevationMaskGraphicsExtension.
The performance of Sgp4Propagator has been improved.
AGI Components is now tested against Mono v2.8.
The performance of rendering models using ServiceProviderDisplay has been substantially improved.
Fixed an issue with AxesFromBankAngle that could cause a discontinuity when several tight turns were performed close together.
Fixed a bug in EvaluatorGroup that could cause top-level evaluators to not be cached even when retrieved multiple times.
Fixed an issue with StandardTransitionProfile where the profile was not using the user's SpeedReference in all cases. Also, in the event that the profile attempts a near-vertical path, the profile will now try to reconfigure the path to create a more flat profile to avoid an error where there is a discontinuity in speed in the middle of the profile.
Fixed a bug that could cause ModelPrimitives using some MDL models to be lit incorrectly.
Fixed a bug that caused ModelVisualizer to try to evaluate an object at the wrong time, leading to an exception.
Fixed a problem that could cause ground overlays loaded from a KML document to be rotated incorrectly.
AccessQueryOptions is now obsolete. Please specify the time observer directly rather than wrapping it in AccessQueryOptions.
Ellipsoid.SurfacePoint is now obsolete. Please use SurfacePosition instead.
TerrainProvider.Cache has been removed. It was previously marked obsolete.
The SetPositionRadius, SetPositionAzimuthElevation, TryCartographicToWindowCoordinate, CartographicToWindowCoordinate, TryWindowCoordinateToCartographic, WindowCoordinateToCartographic, ViewExtent (obsolete overloads only), and ViewSphere methods of Camera were removed. They were previously marked obsolete.
The ViewEntityFromOffset<TEntity>Shape property and constructor taking an ellipsoid were removed. They were previously marked obsolete.
Added StartInThreadPoolThread and StartInNewThread methods to start a MessageQueue with explicit control over what type of thread to use. StartInNewThread optionally allows you to specify the name of the thread. The existing StartInAnotherThread method uses either a thread pool thread or a newly created thread depending on the state of a new property: ThreadingPolicyFacet.UseThreadPool, which is true by default to maintain the previous behavior.
Added a SelectTransactionallyTResult method to TransactionContext to allow code to be executed transactionally and a result to be returned.
Added a AntiAliasing property to SceneManager to allow control over the use of multisample anti-aliasing (MSAA) to render scenes.
Added a Rendering event to SceneManager that is raised when any Scene is rendered.
Added default constructors for CentralBodySurfaceCurve and CentralBodySurfaceRegion, and made the CentralBodySurfaceCurveSurfaceCurve and CentralBodySurfaceRegionSurfaceRegion properties settable.
Improved the algorithm used by BrentFindRoot to converge more quickly in most cases and to more closely match Brent's published algorithm.
TimeGenerator now generates time in the nearest arithmetic-safe time standard (such as TAI) when given times in a non-safe standard (such as UTC).
Access Queries now accept a null time observer when all links in the query are LinkInstantaneous. Previously, an exception was thrown even though the time observer did not affect the results.
ServiceProviderDisplay can now support models attached to a much larger number of Platforms, by only loading models that are within the required distance to the camera.
Added a Uri property to BalloonNavigatingEventArgs that indicates the URI to which the balloon is navigating.
AGIProcessedDataTerrain now obtains the Shape from the Shape property of the CentralBody to which the terrain is attached. Previously, it would use WorldGeodeticSystem1984Shape.
Fixed a bug in BrentFindRoot that could cause it to think it converged on the independent variable tolerance before it really had.
The Tolerance property on CentralBodyObstructionConstraint is no longer ignored when the constraint is used with a LinkInstantaneous.
Removed usages of methods in the .NET Framework that were not available in older (pre-service pack) versions of .NET 2.0 and .NET 3.5.
StkEphemerisFile and StkAttitudeFile now use the correct frame or axes, MeanEquatorMeanEquinoxFrame, instead of MeanEclipticMeanEquinoxFrame.
Fixed a bug that led to an access violation when setting the SceneManagerAnimation property to the same value it already held.
Fixed a memory leak when accessing the CameraPosition property. This bug fix also substantially improves the performance of this property.
Accessing a KmlNetworkLink when that network link is unavailable now throws an appropriate exception instead of causing an access violation.
Fixed issue that could cause primitives to disappear when adding a ModelPrimitive to the SceneManager before loading the model.
Fixed an access violation that could occur when loading a KML document containing assets accessed via SSL (HTTPS).
ModelVisualizer<TEntity> now supports multiple models for a single entity.
Fixed an issue where the CameraSnapshot methods SaveToRaster, SaveToTexture, and SaveToClipboard sometimes required an additional render before it reflected the latest updates to the Camera.
Fixed an issue that could cause KML to render improperly with terrain.
The "tessellation" property of a polygon in a KML document is now correctly ignored when the polygon's altitude mode is "clampToGround."
Classes that derive from CentralBody must now implement the PrincipalFrame property and the SynchronizeOrigins method.
The StkEphemerisFile class now only provides a valid interpolator for ephemeris files with Lagrange and Hermite interpolation methods. For GreatArc and other methods, users must construct an interpolator manually. Previous versions returned a partially-constructed but unusable interpolator for unsupported interpolation methods.
IsTimeVarying is now abstract on evaluator classes. If you are implementing your own evaluators, you will need to override this property.
Two protected methods on CustomImageGlobeOverlay, StartingUp and ShuttingDown, now take a Scene parameter. If you override these methods in a derived class, you will need to update your code.
Sgp4Propagator can now estimate Sgp4Elements based on ephemeris data. The results of the estimation can be used to produce a TwoLineElementSet.
Added a new class, CentralBodyInertialAxes, which represents an inertial axes for a central body that is consistent with STK Desktop's default central body inertial axes.
ServiceProviderDisplay can now be used to easily visualize sensors by attaching a FieldOfViewCentralBodyProjectionGraphicsExtension to the sensor Platform.
Added a Scenes property to the Insight3D SceneManager to allow access to the list of scenes that currently exist.
Added a PickRectangular method to Scene which allows you to determine the objects that lie within a rectangular screen region. This is also known as "rubber band picking."
Added PrimitiveManagerClear and CompositePrimitiveClear methods, both of which remove all primitives in a single call.
Sgp4Propagator has been updated to reflect recent work by CSSI and to match the SGP4 propagator in STK 9.
TerrainAlongLineComputeTerrainIntersection now only returns the starting point if it lies exactly on the terrain surface and the direction of interest is toward the surface.
Messages can now be posted to a MessageQueue even after it has been terminated. The messages will be processed if and when the queue is restarted.
Improved BrentFindExtremum performance by using Golden section instead of bisection when one end of the bracketing interval remains stationary over two iterations.
Access Queries have been given a more prominent place in the documentation and examples. We recommend that you use them instead of AccessComputation.
Insight3D now renders at a target rate of 60 frames per second by default. Previously it would render as fast as possible, causing unnecessary CPU usage. The previous behavior can be restored by setting the RefreshRate property on the SceneManagerAnimation object.
Fixed a crash that could occur when creating Primitives after animating or setting the Animation property, but before creating an Insight3D control.
Fixed a crash that could occur when creating a ModelPrimitive and specifying a model filename that does not include an absolute or relative path.
SurfaceMeshPrimitive now correctly renders polygons with a hole.
Fixed a crash that could occur when working with streaming Rasters.
Fixed a bug where a PolylinePrimitive with a RhumbLineInterpolator would not be rendered correctly when given closely-spaced points.
Fixed a bug that could result in excessive memory usage when animating but not interacting with the Insight3D window.
Fixed outlined PolylinePrimitive rendering artifacts that occurred for overlapping polylines that wrapped around the globe.
Fixed a bug where outlined PolylinePrimitives could not be picked.
Fixed a bug where the wrong item in a MarkerBatchPrimitive could be reported as picked.
Fixed an issue where SurfaceMeshPrimitiveSupported could incorrectly return false even when it was supported by the video card. This was most common with Intel video chipsets.
All evaluators now correctly implement IsTimeVarying when they do not vary with time. Previously, many evaluators simply returned true, which did not cause incorrect results but could negatively impact performance in certain cases.
Fixed an issue in HeightTransitionProcedure that would cause a discontinuity for some cases when exiting a left-handed spiral.
Fixed an issue where the speed reported by the StandardTransitionProfile segment was zero when extrapolating before the "Start" or after the "Stop" times of the route. This fixes an issue where AxesFromBankAngle threw an exception when evaluated slightly before the start or slightly after the stop times.
Fixed an issue in TimeIntervalFinder that would cause LocalMaximum or LocalMinimum events at the function threshold or within the tolerance of the function threshold to incorrectly start or end an interval.
Fixed an issue where AccessQuery evaluation at a single date could return inconsistent results if an interval of consideration had been previously analyzed.
Fixed an issue in TerrainAlongLineComputeElevationAngleAboveTerrain where the incorrect end point could be used for part of the computation.
The AccessSampling type has been renamed to JulianDateFunctionSampling.
Added support for UniversalTransverseMercator (UTM), UniversalPolarStereographic (UPS), and MilitaryGridReferenceSystem (MGRS) coordinates.
Added the DurationFunctionThreshold type to find threshold crossings of functions where the independent variable is of type Duration.
Added the DoubleFunctionExtrema, JulianDateFunctionExtrema, DurationFunctionExtrema types to find function minima and maxima.
CommunicationLinkConstraint now has a ConstrainedLink property and a ConstrainedLinkEnd property, making it consistent with other constraints implementing ILinkConstraint.
Improved support for video cards with ATI chipsets.
Fixed a bug where a control called AgGxBalloonBrowserControl was being added to the Visual Studio toolbox when adding AGI.Foundation.Graphics.dll from the Choose Items... dialog.
Fixed a bug where CentralBodySurfaceRegionVisualizer would cause an exception if the CentralBodySurfaceRegionGraphicsExtensionBoundaryGraphics property was null.
GlobeImageOverlayAddCompleteEventArgs and TerrainOverlayAddCompleteEventArgs now correctly provide exception information to completion event handlers when terrain or imagery are added asynchronously. In AGI Components 2010 r6 (but not prior versions) this information was lost.
ProjectedRasterOverlay.Translucency now throws NotSupportedException instead of silently ignoring the provided value, restoring the behavior that existed prior to AGI Components 2010 r6.
In AGI Components 2010 r6, the SceneManager.Animation.Time property was initialized to TimeConstantsJ2000 instead of SceneManagerTime as it was in previous releases. This caused the time to quickly jump from the scene manager's time to the animation controller's time at the start of animation if SceneManager.Animation.Time was not set explicitly.
Fixed a bug where setting the SceneManager.Animation.StartTime property and then rendering, without explicitly setting SceneManagerTime, would cause the scene to be rendered at a different time than that reported by the SceneManagerTime property.
Two assemblies that were previously unsigned, AGI.Foundation.Platform.Graphics.dll and AGI.Foundation.Tracking.Graphics.dll, now have strong names.
Fixed a bug in Insight3D's terrain and imagery loading that could lead to access violations or hangs in certain situations.
Removed the Supported properties from MarkerBatchPrimitive and TextBatchPrimitive. They were previously marked obsolete.
RealTimeSimulationAnimation no longer has a TimeOffset property. Also, the amount of time stepped by StepForward and StepBackward is now controlled by the TimeStep property instead of by the amount of real time that has passed since the last step.
AreaTarget, AreaTargetElevationAngleConstraint, LineTarget, LineTargetElevationAngleConstraint, and related types have been marked obsolete. Instead, use CentralBodySurfaceRegion, CentralBodySurfaceRegionElevationAngleConstraint, CentralBodySurfaceCurve, and CentralBodySurfaceCurveElevationAngleConstraint.
Insight3D can now load and display KML documents and provide basic access to the underlying document object model (DOM). See the KML topic for more information.
Insight3D can now display rich HTML balloons attached to positions in a scene. See the Balloons topic for more information.
A new library, Platform Graphics, has been added that makes it easy and flexible to visualize Platforms, links, and other IServiceProviders, as well as the results of analyzing these objects, in Insight3D. For more information, see the Visualizing Platforms topic.
Added a Matrix6By6 type.
StkEphemerisFile can now read covariance data from an ephemeris file and interpolate over the data.
Added a GetSearchRegion method to RasterSearchProcedure, making it easy to obtain the surface region corresponding to the search area.
Improved performance of MarkerBatchPrimitive when marker positions are constantly updated and the batch has a per-marker distance display condition.
Fixed an issue with TakeoffProcedure and LandingProcedure involving discontinuities in height when configuring them with connections which use a different TerrainProvider than the procedure itself.
PointBatchPrimitive and PolylinePrimitive are now outlined correctly even when per-point/line colors are used.
Fixed a memory leak in SurfaceShapes.
RealTimeSimulationAnimation now behaves more consistently when switching between animating forward and animating backward. It also now works correctly when set to loop at either end.
Removed RaimComputation, CreateFromArray, IIndexableImmutable, CrossPlatform, IOrdinalArithmetic, FunctionThreshold, and IPropagateFromInitialConditions. They were previously marked obsolete.
Removed the Prn and PrnCharacter properties from RinexObservationSatRecord. They were previously marked obsolete.
Removed the LastUpdate properties from StkCityDatabase, StkFacilityDatabase, and StkSatelliteDatabase. They were previously marked obsolete.
Removed Jpeg2000ImageGlobeOverlay. It was previously marked obsolete.
The Camera methods Camera.TryWindowCoordinateToCartographic, Camera.WindowCoordinateToCartographic, Camera.TryCartographicToWindowCoordinate, and Camera.CartographicToWindowCoordinate are now obsolete. Please instead use WindowToCartographic, TryWindowToCartographic, CartographicToWindow, and TryCartographicToWindow, respectively.
Introducing the Route Design Library, which provides simple ways to represent and analyze routes for vehicles, such as aircraft, ground vehicles, and ships, operating near the surface of the Earth or other central body. For more information on the Route Design Library, see the Route Design topic.
Added the ability to obtain the gradient, hessian, and surface normals at a point in a TerrainProvider, by calling the GetGradient, GetHessian, and GetNormal methods. The gradient can be used to compute a directional derivative of height along the surface. First and second partial derivatives are also now available, by calling the GetFirstPartials and GetSecondPartials methods.
Added PreloadExtent and UnloadExtent methods to TerrainProvider. PreloadExtent is used to load the terrain data for a specified region into the terrain cache. UnloadExtent unloads preloaded data from the cache. See the Terrain topic for more information.
Added the ability to stream Microsoft Bing Maps for Enterprise (previously Microsoft Virtual Earth) imagery using the BingMapsForEnterpriseImageGlobeOverlay class.
Individual items can now be picked within a MarkerBatchPrimitive, TextBatchPrimitive, PointBatchPrimitive, or PolylinePrimitive. See the Picking topic for more information.
A web proxy can now be specified when constructing an OpenStreetMapImageGlobeOverlay.
Added a TextureFilter property to TextureScreenOverlay, allowing the texture filtering technique to be specified.
CustomImageGlobeOverlay now has a Reload method to reload custom imagery without removing the old imagery first.
AverageSubCalculationProgress can now be constructed with a nullITrackCalculationProgress to which to report progress, making it easier to use in cases where progress reporting is optional.
Insight3D globe overlay (terrain and imagery) rendering performance has been significantly improved.
VideoStream now uses an asynchronous connection for RTP streaming in addition to UDP and TCP streaming.
TextBatchPrimitiveSet performance has been substantially improved.
Improved mouse handling when MouseOptionsAnimateWhileHandling is enabled, and the frame rate is low.
Fixed a bug where specifying the ModelUpAxis on a ModelPrimitive would not always produce correct results.
Fixed a bug that resulted in an access violation when a large number of triangles were used with SurfaceMeshPrimitive.
Fixed a bug that caused the Camera to temporarily have an incorrect axes after a zoom.
Setting the CameraAxes property no longer causes the view to change.
Fixed a bug where the MouseOptionsZoomComplete event could be raised when clicking on the globe even when AutoHandleMouse was disabled.
ViewExtent now works correctly when the extent crosses the international date line.
Camera.SetPositionRadius and Camera.ViewSphere are now obsolete. Use CameraViewOffset instead.
Camera.SetPositionAzimuthElevation and Camera.ViewExtent methods taking AzimuthElevationRange are now obsolete.
Removed PointBatchPrimitive.SupportsDistanceDisplayConditionPerPoint. It was previously marked obsolete.
The ViewEntityFromOffset.Shape property, and the related constructor, has been made obsolete. Use the CentralBody property instead.
LinearApproximation now throws an exception when given the same value for x0 and x1. Previously, it would return the average of y0 and y1.
Added the ability to render cylinders with SolidPrimitive. See the Solid Primitive topic for more information.
A DistancePerRadius property was added to Camera.
Added Position, Rotation, and Scale properties to SolidPrimitive.
HistoryVisualizer<TEntity>, LabelVisualizer<TEntity>, MarkerVisualizer<TEntity>, PointVisualizer<TEntity>, and WaypointVisualizer<TEntity> can now be constructed with a SetHint value which is given to any Insight3D primitives created by the visualizer.
The ImageCollectionAddComplete and TerrainCollectionAddComplete events now indicate in their event args the imagery or terrain that was loaded.
MarkerBatchPrimitive, PointBatchPrimitive, PolylinePrimitive, and TriangleMeshPrimitive now allow an empty collection of positions to be passed to their Set methods and an empty collection of indices to be passed to their SetPartial methods.
RecurringTaskSchedulerRemoveTask now returns the final set of performance metrics for the removed task.
Tracking Library now provides default archivers for all AGI Components relevant value types and enumerations.
Implemented an improved algorithm in CubicRealPolynomial with better numerical properties.
Default-constructed GregorianDate and YearMonthDay objects now represent valid times and will stably convert to and from JulianDate.
Fixed a flicker caused by CameraViewCentralBody performing an extra and unintentional render.
ViewEntityFromOffset<TEntity> now works in all reference frames.
Fixed a bug that could cause an ArithmeticException in certain circumstances when computing sensor projections.
LagrangePolynomialApproximation now uses additional derivatives in the input data, if available. Previously, only the input coordinate values were used to compute the Lagrange polynomial. Higher-order output, if requested, was computed from that polynomial. Now, the Lagrange polynomial for a given output order is computed from the input data with the highest-order less than or equal to the output order. For example, if both position and velocity information are provided as source data for interpolation but position, velocity, and acceleration are requested as output, the position and velocity information are interpolated independently and the derivatives of the velocity interpolating polynomials are used to compute the acceleration.
LinearApproximation now linearly interpolates across all given orders of input. If higher order outputs are requested, the output order one higher than the highest input order is the constant slope for that segment, and any higher outputs are zero. Previously, input derivatives were ignored, the first derivative on output was constant, and higher derivatives were zero.
InterpolationAlgorithm now has an additional method, GetRequiredDataPoints, which takes a degree and an input order and returns the number of independent variables that must be interpolated over in order to attain the specified degree of polynomial approximation.
EulerSequence and YawPitchRoll now check to ensure the EulerSequenceIndicator or YawPitchRollIndicator that is returned from each type's Sequence property is valid. Previously, it was possible to create invalid instances in .NET, but not Java. The two versions now behave consistently.
Insight3D now properly orients Collada models. If you added code to correct for the incorrect orientation, you will need to remove it when you upgrade to this release.
LagrangePolynomialApproximation can now compute any requested output order. In previous releases, interpolated values only up to the second derivative could be computed.
HermitePolynomialApproximation can now use any number of input derivatives (including zero), and return any number of output derivatives.
PrimitiveManager and CompositePrimitive have a new property, TranslucentPrimitivesSortOrder, that allows translucent primitives to be rendered back-to-front so that they are blended correctly.
EllipsoidCartesianToCartographic and EllipsoidSurfaceProjection are now slightly more precise.
An exception with a more informative message is now thrown when the Transmitter or Receiver in a LinkInstantaneous or LinkSpeedOfLight has a nullLocationPoint property.
Fixed a bug in HermitePolynomialApproximation that caused it to interpolate with a much higher degree than specified when used with large data sets, resulting in extremely slow performance.
Fixed a bug in LinearApproximation that caused it to throw an exception when the requested output order was larger than the input order. Now it returns the slope of the line for the output order one higher than the input order and zero for any additional output orders.
Fixed a bug where MarkerBatchPrimitiveSupported would incorrectly return false.
Fixed a bug in SceneManagerRefreshEvaluators where it would not refresh the evaluator associated with the ReferenceFrame of a Primitive. Changes to the ReferenceFrame would not take effect even after calling SceneManagerRefreshEvaluators.
Removed the CentralBody property on Primitive, which was previously marked obsolete.
Removed the SetCartographic and SetPartial overloads on Primitive that did not take a central body. They were previously marked obsolete.
Removed the PositionCartographic property from ModelPrimitive, which was previously marked obsolete.
Removed the SetSubsetCartographic overloads on PolylinePrimitive that did not take a central body. They were previously marked obsolete.
MarkerBatchPrimitive.Supported is now obsolete because MarkerBatchPrimitive is now supported on all video cards.
TextBatchPrimitive.Supported is now obsolete because TextBatchPrimitive is now supported on all video cards.
Due to a bug fix in GraphicsFont, text displayed with the TextBatchPrimitive is now about 25% larger for a given point size than it was in previous releases.
NgaDigitalTerrainElevationData must now be constructed with a FileStreamFactory instead of a more general StreamFactory. Previously, using a StreamFactory was allowed but would throw an exception at runtime if the factory did not produce a FileStream.
An InvalidOperationException is now thrown if MessageQueueStart or MessageQueueStartInAnotherThread is called more than once without an intervening Terminate or TerminateAndWait.
TerrainCache and RasterTerrainCache no longer take a TerrainCacheGroup to add themselves to. Instead, the cache objects must be added to the appropriate cache group by the terrain provider.
TerrainProvider.Cache is now obsolete. Not all terrain providers use a cache.
Introducing Tracking Library, which seamlessly integrates the processing, visualization, and analysis of dynamically acquired data in AGI Components. See the Tracking topic for more information.
The "up" axis of an MDL model can now be specified when constructing a ModelPrimitive or calling its Load method.
MarkerBatchPrimitive now works correctly even on older video cards.
TextBatchPrimitive now works correctly even on older video cards.
Added new overloads for ExtrudedPolylineTriangulatorCompute and ExtrudedPolylineTriangulatorComputeCartographic that take two collections of positions, one specifying the top positions and the other specifying the bottom.
Added the EllipsoidApparentAngularSize method.
The maximum number of items in a MessageQueue can now be specified with the MaximumQueueLength property.
The visual quality of text rendering in Insight3D was significantly improved.
The HowTo application now shows more detailed descriptions of what it is demonstrating.
AGIProcessedDataTerrain can now be constructed with a more general StreamFactory instead of requiring a FileStreamFactory.
Fixed a bug that could cause StkAttitudeFile and StkEphemerisFile to be written incorrectly in non-English locales.
Fixed a bug that caused the colors to be inverted when an ECW image was used as a globe overlay.
Terrain readers now work reliably with streams that have Read methods that can return fewer bytes than requested.
Fixed a bug that caused GraphicsFont to incorrectly undersize fonts by about 25%.
Fixed a race in RasterTerrainCache that could cause a NullReferenceException in the TerrainCacheGroup thread.
Fixed a line width issue when a MarkerBatchPrimitive, SurfaceMeshPrimitive, or TriangleMeshPrimitive was rendered in Wireframe mode.
RaimComputation and related types are now obsolete. Use ReceiverAutonomousIntegrityMonitoring instead.
AccessSampling no longer implements IFunctionSamplingStrategy<JulianDate>. Instead, it has a method, AccessSampling.CreateFunctionSamplingStrategy, that returns an instance of IFunctionSamplingStrategy<JulianDate>.
RinexObservationSatRecord.Prn and RinexObservationSatRecord.PrnCharacter are now obsolete. Use RinexObservationSatRecordPseudoRandomNumber and RinexObservationSatRecordPseudoRandomNumberCharacter instead.
SatelliteIdentifier is now immutable, meaning that it cannot be changed after it is created.
Removed the incorrectly named EvaluatorGroup.CreateEvaluatorCallback3, which was previously marked obsolete. Use Callback4 instead.
Removed Solid.GetEnclosures, which was previously marked obsolete. Use SolidGetEnclosureDescriptions instead.
Removed CrossPlatform.ParseDateTime, which was previously marked obsolete. Use GregorianDateParse instead.
The CrossPlatform class is now obsolete. Its one method, IsMonoRuntime does not need to be included in AGI Components. To detect whether an application is running under Mono, see the "How can I detect if am running in Mono?" question in the Mono Technical FAQ.
Removed the AxesVehicleVelocityLocalHorizontal.CentralBody property and the related constructor, which were previously marked obsolete. Use the AxesVehicleVelocityLocalHorizontalReferenceFrame property instead.
Removed the constructor for GpsReceiver taking a GpsReceiverSolutionType, which was previously marked obsolete. Instead, construct it with one of the other constructors and set the ReceiverSolutionType property.
Insight3D now has the ability to render solids such as boxes and ellipsoids. See the Solid Primitive topic for more information.
PolylinePrimitive and PointBatchPrimitive can now be rendered with an outline by setting their DisplayOutline, OutlineColor, OutlineTranslucency, and OutlineWidth properties.
YearMonthDay can now be constructed from a year and a day-of-the-year.
Added EndianBitConverter to enable conversion between values in fixed byte order formats.
Numerous improvements to the examples and documentation.
The performance of SensorVolumeConstraint has been improved.
TimeIntervalCollection now implements IList<TimeInterval>.
ReceiverAutonomousIntegrityMonitoring replaces RaimComputation. The new class offers better performance and an easier-to-use interface.
Improved numerical results for finding roots of a QuadraticRealPolynomial when the linear term is zero and the constant term is small in relation to the quadratic term.
GridTimeSampledValues.ComputeData now creates grid points and figure of merit scalars in multiple threads simultaneously according to the ThreadingPolicyFacet.
AccessSampling now ensures that access constraint functions are sampled at least three times over each interval. Previously, small intervals might be sampled only twice and access events could be missed.
Fixed a bug in DoubleFunctionThreshold and JulianDateFunctionThreshold that could cause them to throw an exception claiming that the "threshold crossings of the function are not consistent" when two crossings of the threshold are close together.
Fixed several problems rendering PointBatchPrimitive and SurfaceMeshPrimitive on video cards with ATI chipsets.
Fixed an issue with picking MarkerBatchPrimitive, TextBatchPrimitive, and PointBatchPrimitive that only contain a single item.
Fixed a bug that could cause TriangleMeshPrimitive to flicker under certain circumstances.
Fixed a bug that caused AccessSampling to ignore the AccessSampling.TrendingStep property if it was smaller than the AccessSampling.MinimumStep.
Fixed a bug where setting MouseOptionsZooming and allowing the user to perform the zoom caused the camera's PositionReferenceFrame and ReferencePointReferenceFrame properties to return stale data.
Jpeg2000ImageGlobeOverlay is now obsolete. Use GeospatialImageGlobeOverlay instead.
Setting MarkerBatchPrimitiveSize now throws InvalidOperationException if the marker batch was not constructed with MarkerBatchSizeSource.UserDefined. Similarly, MarkerBatchPrimitiveSet and MarkerBatchPrimitiveSetCartographic now throw ArgumentException if per-marker sizes are provided and the marker batch was not constructed with MarkerBatchSizeSource.UserDefined.
EvaluatorGroupCreateEvaluator now throws an ArgumentTypeInvalidException if any of the given parameters implement IEvaluator. Previously, this was allowed but could result in poor evaluator performance. Instead, definitional objects should be passed to EvaluatorGroupCreateEvaluator and the evaluators should be obtained inside the callback method.
Trig.AngleInRange is now obsolete. Instead, use TrigIsAngleInRange, TrigPutAngleInRange, or TrigTryPutAngleInRange.
The type of the SurfaceMeshPrimitiveTextureMatrix property is now TextureMatrix instead of Matrix.
ScreenOverlay now has FlipX and FlipY properties that can be used to flip an overlay at its center along the X or Y axes.
ECW files, ECW files streamed from a server through the ECWP protocol, and MrSID files can now be used as Globe Overlays via the GeospatialImageGlobeOverlay class. They can also be added by filename to an ImageCollection.
Primitives, ScreenOverlays, and GlobeOverlays now have a Tag property that can be used to attach arbitrary data. This property is commonly used to assist with Picking.
SurfaceMeshPrimitive can now do trapezoidal texture mapping by setting the SurfaceMeshPrimitiveTextureMatrix property. In other words, a texture can be accurately rendered in cases where the Cartographic coordinates of the four corners are known. See the Surface Mesh Primitive topic for more information.
CartesianRotate(UnitQuaternion) and UnitCartesianRotate(UnitQuaternion) now use a more efficient implementation for rotating with a UnitQuaternion.
The algorithm for computing an intersection between an Ellipsoid and a cone has been improved. This makes the computation of the projections of the ComplexConic and SyntheticApertureRadarVolume sensors more accurate and predictable.
Unhandled exceptions raised in the TerrainCacheGroup thread (for example, while a TerrainProvider is loading a region of terrain) are now rethrown when TerrainCacheGroupRequestRegionLoad is called. TerrainCacheGroupStartCacheThread can be called to clear the exception and restart the TerrainCacheGroup thread. Previously, unhandled exceptions would silently end the thread and cause poor terrain performance.
Numerous improvements to documentation and examples.
Fixed a bug where TextureScreenOverlay would sometimes fail to update its texture if it was assigned for the first time after it had been rendered.
Fixed a bug in ScalarSingleFrequencyIonosphericCorrection and ScalarSaastamoinenTroposphericCorrection that could result in incorrect results when the receiver's LocationPoint was not defined in the Earth Fixed frame.
Fixed a bug in TerrainCacheGroup that caused it to load the least recently used region instead of the most recently used one when multiple regions were in the queue. This bug fix should yield a performance improvement in certain cases.
The overload of the CameraVisibilityTest method taking a CentralBody has been made obsolete. Instead, use the overload that does not take a CentralBody.
Primitive.CentralBody has been made obsolete. Set the PrimitiveReferenceFrame property instead.
The overloads of SetCartographic and SetPartialCartographic on MarkerBatchPrimitive, PointBatchPrimitive, PolylinePrimitive, and TextBatchPrimitive that do not take a CentralBody have been made obsolete. Instead, use the overloads that specify a CentralBody.
ModelPrimitive.PositionCartographic has been made obsolete. Instead, use ModelPrimitiveSetPositionCartographic.
The overload of PolylinePrimitiveSetSubsetCartographic that does not take a CentralBody has been made obsolete. Instead, use the overload that does take a CentralBody.
FunctionThreshold has been made obsolete in this release. Instead, use DoubleFunctionThreshold or JulianDateFunctionThreshold.
IPropagateFromInitialConditions has been made obsolete in this release.
IIndexableImmutable and CreateFromArray have been made obsolete in this release.
PrimitiveReferenceFrame now accepts any ReferenceFrame. If the specified reference frame moves, the primitive will as well. Previously, only the Fixed and Inertial frames were allowed.
CameraVisibilityTest now accepts any ReferenceFrame.
CompositePrimitiveAdd no longer throws ArgumentException if the primitive added does not have the same CentralBody as the composite.
In AGI Components 2009 r6, the MATLAB example referenced the default install location of AGI Components 2009 r5. In this release, the example uses a relative path so it should work regardless of where AGI Components is installed.
Fixed a bug that could cause EarthOrientationParameters to return NaN instead of a valid value in rare circumstances when working with multiple EarthOrientationParameters instances in a single application.
The Ellipsoid copy constructor, which was marked obsolete in AGI Components 2009 r3, has been removed in this release.
Added the KozaiIzsakMeanElements coordinate type.
Added DihedralAngle methods to UnitCartesian.
Added ComputeTerrainIntersection methods to TerrainAlongLine to compute the point where a line intersects with terrain.
CustomSensorPattern can now be projected onto an Ellipsoid.
Insight3D now continues animating while the user interacts with it using the mouse. The previous behavior can be restored by setting the MouseOptionsAnimateWhileHandling property on the Insight3D control to false.
You can now specify the Origin of a ScreenOverlayRotationPoint.
StkEphemerisFile and StkAttitudeFile are no longer case-sensitive.
StkEphemerisFile and StkAttitudeFile now support a much more complete set of reference frames and axes, notably including the International Celestial Reference Frame (ICRF).
RotateFilter can now rotate by an arbitrary angle. Previously it only allowed 90, 180, and 270 degree rotations.
Numerous documentation improvements.
Fixed several problems with sensor projections that could cause exceptions or unexpected results in certain unusual cases.
Fixed a bug that prevented Access Queries from evaluating over a TimeInterval containing just a single instant of time.
Fixed a bug that prevented the EllipsoidGrid.ReferenceTerrain property from being used with coverage analysis.
The Insight3D control was incorrectly raising a DragDrop event when the DragEnter event should have been raised.
Fixed some problems rendering filled polygons and video on terrain with ATI HD video cards.
ScalarReceivedIsotropicPower and ScalarReceivedPowerFluxDensity previously did not take into account access constraints applied to the link, so "received" power was unaffected by terrain line of sight, etc. In addition, ScalarPropagationLoss will now report 100% loss when the link's access constraints are not satisfied.
Fixed a rare race condition in TerrainCacheGroup that could cause an ArgumentException when attempting to obtain a terrain height.
Fixed several problems preventing the AGI Components analysis components from being used in a partial-trust environment such as from within an XBAP application. Insight3D (AGI.Foundation.Graphics) still cannot be used in a partial trust environment because of its use of unmanaged code.
Fixed a problem with EllipsoidGridRegions when some of the regions span the international date line.
Examples of using AGI Components from MATLAB are now included in the Examples subdirectory.
An overload of EllipsoidGrazingAltitudeLocation that was marked obsolete in AGI Components 2009 r2 has been removed in this release.
Removed Primitive.RenderPasses, which was previously marked obsolete.
Added support for the International Celestial Reference Frame (ICRF), which can be obtained from the EarthCentralBodyInternationalCelestialReferenceFrame property. By default, the EarthCentralBodyInertialFrame is now ICRF instead of J2000.
Added new GPS receiver error models: SaastamoinenTroposphericCorrectionModel and SingleFrequencyIonosphericCorrectionModel.
The "Mean Earth" fixed frame for the Moon can now be obtained from JPL ephemerides using the JplDE421GetMoonTopographicFixedFrame method.
Added ExtrudedPolylineTriangulatorComputeSingleConstantAltitude to create extrusions with a constant altitude and a varying altitude.
Added a MaintainAspectRatio property to TextureScreenOverlay.
Added PinningPosition and PinningOrigin properties to ScreenOverlay.
Added a UnitSpherical coordinate type.
Added a CustomSensorPattern class that can be used to define a custom sensor that can then be used to constrain access.
Grids in Spatial Analysis Library now allow users to specify a TerrainProvider as a reference for the grid point heights.
Added support for RINEX meteorological files with the RinexMeteorological class.
Numerous documentation improvements.
The performance of many computations has been substantially improved.
The performance of the TerrainAlongLineComputeElevationAngleAboveTerrain method and the TerrainLineOfSightConstraint access constraint has been substantially improved. This is on top of the general library-wide performance improvements mentioned above.
Added a Using DME Component Libraries with Matlab topic to the Programmer's Guide, explaining how to use AGI Components from within MATLAB.
Added SurfaceMeshPrimitiveSetWithoutTexturing, which is an efficient alternative to SurfaceMeshPrimitiveSet when texturing is not required.
Numerous improvements to the HowTo application.
Added a new constructor to GpsReceiver that fully constructs the receiver and prepares it for use. Marked the previous constructor, which created a GPS receiver that could not be used to compute accuracy, as obsolete.
Fixed a crash that could occur when creating a MarkerBatchPrimitive before an Insight3D control was fully constructed.
ModelPrimitive now supports Collada models (*.dae) with textures with non-power-of-two dimensions regardless of whether or not the video card supports GL_ARB_texture_non_power_of_two.
The TimeIntervalDisplayConditionMinimumTime and TimeIntervalDisplayConditionMaximumTime properties can now be reliably compared against JulianDateMinValue and JulianDateMaxValue.
Fixed the normals returned by ExtrudedPolylineTriangulator. In some cases, incorrect normals lead to incorrect lighting when the returned ExtrudedPolylineTriangulatorResult was assigned to a TriangleMeshPrimitive.
Fixed some potential problems with various access constraints when AccessSampling.UseConstraintSamplingSuggestion is set to false.
Fixed a potential crash related to the GraphicsFont class.
Fixed a bug that caused AccessComputationOverrideConstraintSampling to be ignored.
Fixed a MarkerBatchPrimitive bug where markers with duplicate per-marker textures did not render.
The Insight3D control will now appear when added to the Visual Studio 2008 toolbox even when the project is set to use .NET 2.0. Previously the control would not appear unless the project used .NET 3.0 or later.
Fixed a bug in RotationalMotionInterpolator that could cause it to throw a NullReferenceException when the first time evaluated is at or before the start of the attitude data.
A significant number of types, methods, and properties that have been marked obsolete for 6 or more months have been removed in this release.
GeospatialInformationIsMissingException is now thrown instead of ArgumentException when calling the ImageCollectionAdd method with a JP2 file without geospatial information as a globe overlay.
JulianDateToTimeStandard now throws an ArgumentOutOfRangeException if asked to convert a JulianDate representing a time during a leap second to Coordinated Universal Time (UTC). A TryConvertTimeStandard method has been added to attempt the conversion without throwing an exception if it fails. Also, arithmetic operations on JulianDate (such as Add and Subtract) return a result in International Atomic Time (TAI) if the result cannot be represented in UTC.
AltitudeDisplayCondition and DistanceToPositionDisplayCondition now have a CentralBody and ReferenceFrame, respectively, which default to Earth and Earth's FixedFrame. Previously, these display conditions used the central body of the primitive to which the display condition was applied.
The constructor for SurfaceMeshPrimitive will now throw an InsufficientVideoCardException, for consistency with other primitives. Previously, the exception was not thrown until Set was called.
The following classes, properties, and enumerations related to the Insight3D camera have been deprecated in this release: UntetheredCamera, NormalCamera, Camera.Untethered, Camera.Normal, Camera.ActiveViewMode, and CameraViewMode. Equivalent functionality is available on the Camera class.
The orientation of imagery used with the ProjectionStream class has changed. Previously, X went from the bottom to the top of the image, Y went from the left to the right of the image, and positive Z went into the image. Now, the orientation is a more conventional scheme where X goes from the left to the right of the image, Y goes from the bottom to the top of the image, and negative Z goes into the image. This change means that it is no longer necessary to invert a quaternion representing the transformation from CBF before assigning it to the ProjectionStream.
SimulationAnimation and RealTimeSimulationAnimation no longer validate the StartTime, EndTime, StartCycle, and EndCycle properties when those properties are set. Instead, they are validated when animation is started. This frees the user from needing to worry about the order in which the properties are set.
Primitive.RenderPasses has been deprecated in this release.
CrossPlatform.ParseDateTime has been deprecated in this release.
Added a GregorianDate type. It can be used in place of the .NET standard DateTime for more accurate parsing and formatting of dates.
Many access constraints have logic to suggest the next sampling step in order to avoid missing interesting features of the constraint function. This can now be disabled by setting the AccessSampling.UseConstraintSamplingSuggestion property to false, in which case the function will be sampled using the AccessSampling.DefaultStep instead.
Primitives and Screen Overlays now have a Display property that allows them to easily be hidden or shown.
Screen Overlays now support Display Conditions.
Two new Display Conditions have been added for use with Primitives, Screen Overlays, and Globe Overlays: DistanceToGlobeOverlayDisplayCondition and DistanceToPrimitiveDisplayCondition.
MarkerBatchPrimitive can now be configured to render in wireframe mode by setting the Wireframe property.
Added support for rendering imagery from OpenStreetMap on the Insight3D globe via the OpenStreetMapImageGlobeOverlay class.
Added support for rendering imagery from a WMS-C server to the Insight3D globe via the WebMapServiceCachedImageGlobeOverlay class.
Added TryCartographicToWindowCoordinate, CartographicToWindowCoordinate, TryWindowCoordinateToCartographic, and WindowCoordinateToCartographic methods to the Camera class to quickly find the longitude, latitude, and altitude corresponding to a specified pixel, or vice-versa.
Added a SurfaceDistanceConstraint to constrain access based on the distance between two objects along the surface of the Earth or another central body.
Numerous documentation improvements.
The terrain extent computed by the GTOPO30Terrain reader has been changed slightly in order to improve conformance with STK Desktop and with the terrain format specification. The previous behavior, if required, can be restored by passing the GTOPO30Options.StrictlyHonorUpperLeft option to the constructor.
A single CompositePrimitive can now hold both opaque and translucent primitives. Previously, it threw an exception when adding primitives with different render passes.
SurfaceMeshPrimitiveTexture now supports textures with non-power-of-two dimensions regardless of whether or not the video card supports GL_ARB_texture_non_power_of_two. Therefore, SurfaceMeshPrimitiveTexture no longer throws InsufficientVideoCardException.
Changing SurfaceMeshPrimitiveTexture from non-null to null is now allowed and will no longer throw an InvalidOperationException.
Added a SetHint property to TextBatchPrimitive.
Improved performance when passing arrays of Cartographic positions to many methods in Insight3D.
Improved the performance of GeometryTransformer in certain cases.
TerrainAzimuthElevationMaskCompute no longer computes the ray at both 0 degrees and 360 degrees, which yields a small performance improvement.
Fixed a bug in AlphaFromRasterFilter and AlphaFromPixelFilter that could cause them to generate incorrect images in some situations.
Fixed a bug in AGIProcessedDataTerrain that caused it to fail on big-endian processor architectures such as SPARC.
Fixed a bug that affected the light intensity of some TriangleMeshPrimitives.
Fixed some problems in the HowTo and Lots of Satellites reference applications that caused them to crash on an older video card supporting only OpenGL 1.1.
Fixed an exception in RinexObservation when reading an observation file that contains only one record.
Fixed a rendering problem when extremely small PDTTX or JP2 files were added to the Insight3D globe.
Fixed a bug in StkAttitudeFile that caused it to write files that could not be read by STK.
Fixed a bug that could cause camera's position to be updated incorrectly when setting the CameraPosition property.
Fixed a bug that caused MarkerBatchPrimitive to fail with certain video cards unless Supported was called first.
An uncommonly used overload of EvaluatorGroupCreateEvaluator was misspelled in the previous release and has been corrected.
TotalAngularRateConstraint now computes the angular rate with respect to the reference frame of the constrained link end, which is the end of the link to which the constraint has been applied. Previously the rate was computed with respect to the displacement vector's axes, which could be different if accounting for light-time delay.
The functionality previously in AGI.Foundation.Terrain.dll has been split into two assemblies: AGI.Foundation.TerrainReaders.dll and AGI.Foundation.TerrainAnalysis.dll. You will need to update the references in your projects.
The PlatformExtension and PlatformExtensionCollection types have been removed. Use ObjectExtension and ExtensionCollection instead.
This release includes Insight3D®, a flexible and high-performance 3D visualization component. It is a technically accurate 3D globe with excellent support for visualizing time-dynamic geometry. For more information, see the Visualization with Insight3D® topic in the documentation.
StkEphemerisFile now provides an interpolator for StkEphemerisFileEphemerisLLATimePos, making it much simpler to read longitude, latitude, and altitude data from an ephemeris file and use it for analysis.
Duration now has a Divide method that takes a constant divisor.
AxesVehicleVelocityLocalHorizontal is now defined with a reference frame instead of a central body. This allows the axes to be oriented based on, for example, the velocity in the fixed frame rather than the velocity in the inertial frame.
EarthCentralBodyOrientationParameters is now, by default, configured with a default-constructed EarthOrientationParameters. This allows the transformation between the Earth Fixed and J2000 frames to be computed, though somewhat less accurately, without first loading EOP data.
The MoonCentralBody now has a valid Shape by default.
Numerous documentation improvements.
A bug has been fixed that prevented the "simple" licensing system from finding a license embedded in an assembly other than the entry assembly. The entry assembly is usually the application executable.
Fixed a numerical stability problem in AGIWorldTerrain that could cause it to throw an exception when attempting to provide the terrain height at certain valid locations.
RinexNavigationEphemeris incorrectly reported the TimeOfClock value as its Epoch.
The BoundingExtent property on GeodasGriddedTerrain was previously always returning null.
This release includes changes to the mechanism for licensing AGI Components for use in your applications. While it is designed to be minimally intrusive, you will need a new license and to take some basic steps to avoid licensing exceptions at runtime. Please see the Getting Started or Licensing and Deployment topics for more information.
CustomGainPattern now allows users to specify a gain pattern as either a simple Function<Cartesian, double> or as SphericalTabularGainData.
JplDE421 ephemerides are now supported.
CoverageDefinitionOnCentralBody now has the option to store the grid cell boundary vertices along with the coverage data in the CoverageGridResult. This is useful when plotting results.
The performance for adding an interval at the end of a TimeIntervalCollection has been improved along with adding a RemoveAt method.
Fixed an issue with BrentFindExtremum for certain functions where it would take an infinitesimal step and cause the algorithm to 'converge' prematurely.
The EllipsoidGrazingAngles method now handles the case where it intersects the Ellipsoid.
The EllipsoidGrazingAltitude method now guarantees that the resulting minimum altitude is measured at a point between the two end points.
Fixed an issue with the Ellipsoid.SurfacePoint method when specifying a heading of zero with respect to a spherical instance of Ellipsoid.
J2Propagator and J4Propagator now handle the case where the orbit intersects the central body by treating the orbit as unperturbed (two body motion) rather than causing strange results.
VectorNormalized now handles zero-vectors better.
Fixed an issue with AGIWorldTerrain where it would calculate some post indices incorrectly.
Fixed AccessQuery so that the corresponding AccessEvaluator will not create a single worker thread off of the main thread when it is told to only use one thread.
Fixed an issue with the computation of angular velocity and acceleration for the AxesVehicleVelocityLocalHorizontal and AxesLocalVerticalLocalHorizontal types.
Fixed Duration so that it is possible to multiply by a fractional value and get the correct result.
Please contact us at support@agi.com and we will be glad to help you update your existing code to work with this release.
Evaluators are now expected to implement the IAvailabilityGetAvailabilityIntervals method instead of the AvailabilityIntervals property. The new method allows the caller to specify the intervals over which they are interested in the availability.
The Ellipsoid class is now immutable, meaning it cannot be changed after it is created.
Introducing Communications Library, which analyzes communication signals by modeling antenna gain patterns, wireless propagation effects, and hardware processing. It provides several ways to analyze signal data, including the creation of "Link Budgets" based on various scalar parameters such as ScalarCarrierToNoise or ScalarBitErrorRate<TModulation>. It also models the effects of multiple signals interfering with an intended signal. For more information on Communications Library, see the Communications topic.
AxesAlignedConstrained now allows the user to specify which axes to use as the principal and reference.
BrentFindExtremum now has better behavior for flat functions and other special cases. This may improve access results in certain cases.
StkSatelliteDatabase now treats the wr, fr, and tce files that are normally part of the database as optional. This is useful when using a custom satellite database.
Default-constructed AzimuthElevationMaskConstraint, ThirdBodyElevationAngleConstraint, LineTargetElevationAngleConstraint, and AreaTargetElevationAngleConstraint objects now default to having a MinimumValue of 0.0 radians. Previously neither MinimumValue nor MaximumValue was set, so the constraints effectively did nothing unless the user explicitly set one of these properties.
GeometryTransformer now computes transformation chains between axes and reference frames more quickly in certain cases.
This release of AGI Components is now tested against Mono v2.2.
Numerous documentation improvements.
Fixed a bug that could cause an "eccentricity violation" exception when computing access with an SGP4-propagated satellite and light-time delay enabled, even with a valid TLE and computation interval.
AccessEvaluator now correctly reports its availability as infinite. An access query can be evaluated at any time. If an underlying quantity is not available at that time, the result of the query is that access is "unknown."
Fixed a bug in TimeGenerator that could cause it to very rarely return two identical times at the end of the interval. This could manifest itself as two identical times being returned from evaluating any evaluator over an interval.
Fixed a bug in Heading that could cause the algorithm to compute NaNs in certain very rare circumstances.
VectorMagnitude no longer throws an exception when the magnitude is zero.
Added three Coverage Figures of Merit to Navigation Accuracy Library: DilutionOfPrecisionFigureOfMerit, NavigationAccuracyAssessedFigureOfMerit, and NavigationAccuracyPredictedFigureOfMerit. These new figures of merit are used with TimeSampledValues and GridTimeSampledValues.
Spatial Analysis Library now multithreads the creation of grid points in order to improve performance on multi-core and hyperthreaded hardware.
AGI Components is now built using Visual Studio 2008. This change should be transparent as Visual Studio 2005 and .NET 2.0 are still fully supported in this release.
Numerous documentation improvements.
Fixed a bug in the constructor for Waypoint that takes a previous waypoint. The bug would result in an exception ("The waypoint collection does not model constant accelerations between the waypoints") when attempting to use the waypoints with WaypointPropagator.
Fixed a bug in the GpsReceiverClone that resulted in the new GpsReceiver and the original one sharing their lists of SatelliteConstraints and ReceiverConstraints.
Terrain Analysis Library now has the ability to read terrain data in the AGI PDTT format using AGIProcessedDataTerrain.
Navigation Accuracy Library now has the ability to read RINEX Observation files using RinexObservation.
Added a LinearApproximation type which has a static method for doing simple linear interpolation and also implements InterpolationAlgorithm.
VectorDifferentiator and PointDifferentiator now have a DerivativeToCompute property. Previously, these types always computed the next derivative after the highest available from the underlying vector or point.
Added an EllipsoidGridSpecified type that makes it easy for the grid points used in a coverage computation to be given explicitly by the user.
Addressed a difference between the convention used to represent rotational motion in an StkAttitudeFile and that used in the rest of AGI Components. This could cause rotational motion interpolated from an attitude file to be interpreted incorrectly. See AttitudeData for more information.
EarthGravitationalModel1996 now has unnormalized versions of the J2, J3, and J4 constants. Also, the documentation for J2Propagator and J4Propagator has been updated to refer users to these constants.
The YearMonthDay type can now be constructed directly from a JulianDate.
Numerous documentation improvements.
Fixed a bug in the Satellite Tracker demo application that could cause it to fail to invoke Google Earth when exporting KML.
Fixed a bug in StkEphemerisFile that caused it to throw an exception when encountering an .e file with comments.
Several Ellipsoid methods now check to see if they are operating on a point that is very close to the center of the ellipsoid and throw an exception if this is the case. Previously, these methods could, in rare situations, get stuck in an endless loop.
Evaluators now have overloaded Evaluate methods that sample the evaluator at a fixed step over an entire interval. The sampling is automatically performed in multiple threads, as appropriate, for best performance on multi-core systems.
Added a new type, TerrainAlongLine, which provides a simple way to determine terrain obscuration between two points.
Added GTOPO30Terrain to read terrain data in the GTOPO30 format.
Added a DegreesMinutesSeconds type to work with angles represented as these three components.
The StartAngle and StopAngle properties of CircularAccessConstraint are now settable directly.
Made it much easier to construct a PointInterpolator to interpolate over a set of position and velocity data. New constructors accept the required information directly rather than requiring the construction of several additional objects.
Simplified the use of LagrangePolynomialApproximation and HermitePolynomialApproximation by adding InterpolateWithDegree methods. These methods interpolate over an appropriate subset of the data, chosen based on the degree of interpolation and the x-value at which to interpolate.
GeometryTransformerObservePoint is now smarter about avoiding unnecessary transformations. In particular, it will now perform only a trivial operation if asked to observe a point in a reference frame that has that point as its origin.
SatelliteGlobalUserRangeError now exposes clock phase error.
Numerous documentation improvements.
StkEphemerisFile no longer fails with an exception when reading a .e file with covariance data.
Fixed a problem where TerrainLineOfSightConstraint could miss obstructing terrain when the two objects are far apart and the "lower" object is in a very flat region of terrain.
Fixed a problem where an EllipsoidRhumbLine could travel the long way around the ellipsoid.
The RINEX file readers now allow blanks, representing data that was unknown when the files were created. Previously, the readers threw an exception when they encountered a blank.
Fixed a problem in NgaDigitalTerrainElevationData that caused the reader to report unknown heights for certain cells even though the cells existed and had valid data.
Please contact us at support@agi.com and we will be glad to help you update your existing code to work with this release.
Custom access constraints written for previous releases will not work in this release.
Classes implementing IFunctionSamplingStrategy are now also required to implement the methods of IThreadAware.
Introducing the Spatial Analysis Library, which provides several major new capabilities:
Define a set of assets that can cover a region. An asset can be a spacecraft, aircraft, constellation, chain, or any boolean combination of these.
Define and discretize a region using one of several gridding algorithms.
Determine the coverage of the region by the assets.
Compute statistical information (Figures of Merit) related to the coverage of the region.
Effectively, Spatial Analysis Library brings many of the capabilities of STK/Coverage to AGI Components. For more information, see the Coverage topic.
Access Queries enable the modeling of sophisticated intervisibility problems involving any number of objects. Access constraints on one or many objects can be combined using boolean operators such as And, Or, Not, AtLeastN, AtMostN, and ExactlyN. Access queries can be used to model a chain and will account for light-time delay between each hop. Access queries bring many of the capabilities of the STK Chain and Constellation objects to AGI Components, and in fact enable many use cases that STK cannot support.
The Iau2000Orientation and Iau2006Orientation types now provide the orientation of all of the major planets, Earth's Moon, and the Sun. Previously only the Sun and Earth's Moon were available.
Numerous documentation improvements.
GlobalPositioningSystemDate now has a constructor that allows an instance to be created directly from a DateTime.
Previously, EllipsoidGeodesic could get stuck in an endless loop when given certain ambiguous cases. Now, it will instead throw an exception explaining the problem.
StkEphemerisFile and StkAttitudeFile now provide an interpolator matching the default used by STK even if the source file does not explicitly specify an interpolator.
Fixed a number of bugs in TimeIntervalCollection that could yield incorrect results for certain operations in unusual cases.
Several new navigation-related access constraints were added to Navigation Accuracy Library:
Dilution of precision (DOP) - DilutionOfPrecisionConstraint
Assessed navigation accuracy - NavigationAccuracyAssessedConstraint
Predicted navigation accuracy - NavigationAccuracyPredictedConstraint
Navigation Accuracy Library can now operate in a 'diligent' or 'lazy' mode when computing accuracy using Prediction Support File (PSF) data. Previously this option was only available when computing accuracy using Performance Assessment File (PAF) data.
Added an analytical model for the positions of the planets and Earth's moon based on a paper by Simon et al. This new model, found in Simon1994PlanetaryPositions, is now the default model used by all central bodies. This means that it is no longer necessary to load and configure JPL DE data before performing computations that depend on planetary positions. However, you may still want to use JPL DE data because it is more accurate than this analytical model.
The orbital element types now take optional tolerance parameters, where appropriate. Also, these types now throw more reasonable and consistent exceptions when given invalid input.
Numerous documentation improvements.
Fixed a bug in PointVectorToPoint that resulted in one less than the highest requested derivative being returned. If no derivatives were requested, the returned position would be incorrect as well.
Support for two new terrain formats has been added to Terrain Analysis Library:
AGI World Terrain - AGIWorldTerrain
GEODAS Gridded Data Format (GRD98) - GeodasGriddedTerrain
STK's Facility and City databases are now supported using the StkFacilityDatabase and StkCityDatabase types.
TerrainAzimuthElevationMaskCompute now optionally takes an ITrackCalculationProgress instance which allows cancellation and progress reporting of the computation.
The name has been changed from AGI Component Technology to AGI Components.
Numerous documentation improvements.
The CHM documentation will now remember the language selection made with the drop-down list in the upper right-hand corner.
This release of AGI Components is now tested against Mono v1.9.
Some changes to evaluators and evaluator groups have been implemented to improve performance and to simplify the task of writing a new evaluator. If you have written your own evaluator or if you are using evaluator groups to improve performance, please see the Evaluators And Evaluator Groups topic for a description of the changes.
Fixed a bug in EarthCentralBodyFixedFrame where values computed prior to the J2000 epoch were computed incorrectly. This could affect the transformation between the Earth Fixed and Earth Inertial reference frames.
Fixed several bugs in RinexNavigation that could cause certain files to fail to parse.
Fixed a bug in GpsRinexPropagator that could cause it to miss the first time step when evaluating.
Fixed a bug in the RectangularPyramid sensor type that could cause the enclosure function to compute NaNs in very specific circumstances.
Fixed a bug in AzimuthElevationRangeConvertMotion that caused the range-rate to be computed incorrectly.
Fixed a bug in ScalarDihedralAngle where the dihedral angle would not be computed correctly if the vectors used to measure the angle were expressed in different axes.
A new interface has been added, IIsTimeVarying, which allows evaluators to report whether or not they have a different value as a function of time. All evaluators implement this interface and by default they return true. For best performance, the IsTimeVarying method should be overridden to return false when the evaluator is known not to change with time.
PointEvaluator, AxesEvaluator, ScalarEvaluator, and VectorEvaluator now have a SimplifyIfNotTimeVarying method. By calling it in the GetEvaluator-type methods after obtaining the evaluator, the evaluator complexity can be substantially reduced. This is done for many of the evaluators included in the library and results in a substantial performance improvement when, for example, computing access to a stationary facility.
EarthCentralBody now has a SlowChangingAxesUpdateInterval property. By default, this interval is used by Iau1976Precession and Iau1980Nutation for their CacheSeconds value. It is still possible to set the CacheSeconds property explicitly to override this value. It is also used for updating pole wander during the Earth Fixed → Inertial transformation. The default value is 0, indicating that the values should be computed every time, so previous results should be unaffected. However, increasing this value will result in a significant performance improvement for many use cases with little to no difference in results.
CartographicZoneConstraint now offers the ability to obtain the zone parameters from the constraint after they have been set. Previously they were write-only.
PerformanceAssessmentFile now has a GetSatelliteGlobalUserRangeErrorEvaluator method that can be used to obtain global URE.
A new service interface has been added, IGpsPrnService, which allows the user to obtain the PRN associated with a GPS satellite. GpsSatelliteExtension provides this service.
SatelliteOutageFile now has several FindOutages methods to find the outages corresponding to a particular PRN or interval.
CentralBodyObstructionConstraint will now yield better performance when not considering light-time delay.
The documentation has been improved in several places.
The performance of Dilution of Precision (DOP) and RAIM calculations has been substantially improved.
Fixed a serious race condition in TranslationalMotionInterpolator and RotationalMotionInterpolator that could cause them to report wrong numbers when used from multiple threads simultaneously even after doing a CopyForAnotherThread.
Fixed a serious race condition in DefaultAccessSamplingStrategy that could cause incorrect sampling of constraint functions during access computations. The incorrect sampling could cause missed intervals of access or, under certain circumstances, unexpected exceptions.
AccessComputation now works correctly if ComputeIntervals is called with an open interval. Previously it threw an unexpected exception.
KeplerianElements and ModifiedKeplerianElements now verify that the inclination is within the valid range of 0 to π radians.
The first release of AGI Component Technology!