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.
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 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 email@example.com.
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.
IEvaluator now has a Group (get) 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.
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.
EllipsoidGraphics.Subdivisions (get / set) has changed from CesiumProperty<Double> to CesiumProperty<Integer>. 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: Polarization.toConstantPolarizationSource, BingMapsStyle.HYBRID, SegmentPropagatorVariable.createSettings, Sgp4EstimationInput.OutputEpoch, GpsSatelliteInformation.PRN, GpsSatelliteInformation.SVN, GpsSatelliteInformation.SatNum, GpsSatelliteInformation.SVBeginsAsPrn, GpsSatelliteInformation.SVEndsAsPRN, SemAlmanacRecord.SpaceVehicleNumber.
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 TimeInterval.Infinite (get).
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.
Removed dependency on the JAXB XML API which was disabled by default in Java 9, and removed completely in Java 11.
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.
Fixed a bug where RealTimeSimulationAnimation animated in the opposite direction than expected.
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 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 preventing use of Insight3D on Java 9 or newer.
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 (get) or MaxValue (get), or intervals containing those value as endpoints.
Fixed a bug relating to occultation percentages when the illuminating body is closer than the occluding body.
ScalarAtmosphericDensity and derived classes now have a configurable UpperHeightLimit (get / set) 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.
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 SolarSystemBarycenter.CenterOfMassPoint (get / set), SolarSystemBarycenter.InertialFrame (get / set), and EarthCentralBody.InertialFrame (get / set), 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 ScalarAtmosphericDensity.setApparentSunPosition and ScalarAtmosphericDensity.setTrueSunPosition now state that the vector position of the Sun originates at the CentralBody (get / set) and not at the Earth.
STK Components for Java now requires Java 8 or above. As a result, several types have changed in the API, across all libraries.
The bundled Joda-Time date/time library has been replaced with standard Java Time APIs. Specifically:
Previously, a custom RuntimeIOException was thrown in various situations when an IO error occurred. We now throw the Java standard UncheckedIOException. The custom RuntimeFileNotFoundException has been renamed to UncheckedFileNotFoundException, and extends UncheckedIOException.
A new InvalidDataException is thrown in situations where a stream of data is invalid. Previously these situations would throw a generic RuntimeIOException.
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:
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 ChildrenExtension.findDescendants 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 (get / set), SurfaceHumidity (get / set), SurfaceRefractivity (get / set), and SurfaceRelativePermittivity (get / set) now default to more realistic real-world values.
TerrainSamplingStep (get / set) now defaults to null, and the sampling value will be calculated dynamically based on the resolution of the configured TerrainProvider (get / set). 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 (get / set).
Fixed an issue where GregorianDate.toIso8601String 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 re-used in unrelated calculations within the same EvaluatorGroup. These temporary evaluators are no longer disposed.
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.AERIAL_WITH_LABELS.
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 a new access constraint, CentralBodySurfaceRegionConstraint, which can be used to determine if an object is within a given surface region.
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.
Also, the process for building demo applications has been simplified. Jar files no longer need to be copied into every demo. Instead, they are referenced using a relative path to the Jars directory.
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.
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.
In the previous release, the folder structure of the Javadoc zip file was incorrectly flattened, which prevented IDEs like Eclipse from displaying Javadoc automatically.
Also, code examples were incorrectly omitted from the Javadoc. This has been corrected.
Methods and types which are not intended for use from external code are now marked as deprecated. These members are marked as internal in STK Components for .NET, preventing their use externally, but since Java does not have an equivalent access level, these members had to be marked public when STK Components for Java was created. These members have always been omitted from the documentation, and marking them deprecated further communicates that these members are for internal use only, are not a supported part of the Components API, and are subject to change without notice.
Several properties have changed from CesiumProperty<Double> to CesiumProperty<Integer>. 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.
Sgp4EstimationInput.OutputEpoch has been marked obsolete. Use RequestedEstimationEpoch (get / set) which makes it more clear that the resulting epoch may be be different if it occurs during a leap second.
SegmentPropagatorVariable.createSettings is now obsolete. Use SegmentPropagatorVariableEvaluator.createSettings 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.
Added RainAttenuationModelItuRP838, which implements the ITU-R P.838 rain attenuation model.
Added independent and dependent variable scaling to NewtonRaphsonMultivariableFunctionSolver, configured using the new SolverVariableSettings.Scaling (get / set) and SolverConstraintSettings.Scaling (get / set) properties, as well as to the differential corrector in the Segment Propagation Library, using the new SegmentPropagatorVariable.Scaling (get / set) and SegmentPropagatorConstraint.Scaling (get / set) properties.
Added new functions to automatically download data over the internet from AGI servers. See:
Added support to the Cesium library for the following CZML features:
API methods now use the JSR 305 annotations, javax.annotation.Nonnull and javax.annotation.Nullable, to indicate whether their parameters or return values allow null or not. Not all API methods have been annotated with this information yet. Coverage will increase over time in future releases. To be clear, these annotations are not required to use STK Components. They have no effect unless you provide an implementation of the attributes and use them to perform static code analysis in your application.
Several methods and constructors that previously took an Iterable have been improved to now accept a bounded wildcard, which makes them easier to use. For example, Sgp4Propagator now accepts an Iterable<? extends Sgp4Elements>, which enables easy use with collections of derived types, for example, List<TwoLineElementSet>.
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.
Sgp4Propagator.estimateElements 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 Sgp4EstimationInput.AllowEstimationEpochDuringLeapSecond (get / set) 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.
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 (get / set). 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 (get / set) or MeanMotionDotDot (get / set) 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 EarthOrientationParameters.LeapSeconds (get) 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.
The static method Polarization.toConstantPolarizationSource has been deprecated. Use the new PolarizationSource.toPolarizationSource method instead.
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:
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 (add / remove) event. If you want to ignore exceptions during propagation, register a handler for this event that does nothing.
The following events have been marked obsolete and will be removed in a future release: AccessConstraintCollection.ConstraintAdded, AccessConstraintCollection.ConstraintRemoved, PlatformCollection.PlatformAdded, and PlatformCollection.PlatformRemoved.
Most delegate types no longer provide static combine and remove methods.
StkEphemerisFile.createCovarianceIntepolator was misspelled and has been replaced by createCovarianceInterpolator.
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 (get / set) 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 EllipsoidSurfaceRegion.isPointInsideRegion 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 package in the Core library. Additionally, the Width (get) and Height (get) properties previously returned incorrect results and have been corrected.
In the Cesium library, BillboardGraphics.AlignedAxis (get / set) 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.
SegmentResults.StateForNextSegment (get) 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 (get) 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 SolvableMultivariableFunctionOperations.computeJacobianNumerically no longer takes an array of cloned functions.
The overload of PropagateSegmentResults.addStoppingConditionBackwardsAdapters taking a StoppingCondition has been marked obsolete. Use the overload taking a SegmentDefinition.
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. Removed setter overloads taking double from the following types: CloudFogAttenuationModelItuRP840, TiremPropagationModel3_18, SimpleSatcomAtmosphericAttenuationModel.
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 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:
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 LeapSecondFile.downloadLeapSeconds 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.
DurationStoppingCondition now uses the absolute value of the threshold by default.
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.
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 (get / set).
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.
The ThreadFactory used to create new threads can now be configured by calling ThreadHelper.setThreadFactory-java.util.concurrent.ThreadFactory-. The ExecutorService used to schedule work on the thread pool can now be configured by calling ThreadPool.setExecutor-java.util.concurrent.ExecutorService-.
Delegate types now contain a nested functional interface which can be used in Java 8 to easily create delegates from lambda expressions. See the Delegates topic for more information.
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.
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.
Fixed an issue where Covariance3By3SizeAndOrientationInterpolator modified CovarianceData (get / set) 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 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 Sgp4Propagator.ReferenceFrame (get) 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.
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 (get / set) 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.
The segment configuration parameter passed to SegmentPropagator.propagate 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.
The following StateElementAdapterDefinitions were removed:
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.
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 ImpulsiveManeuverInformation.Orientation (get / set).
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 TargetedSegmentListOperator.getOperatorEvaluator method no longer takes the parent propagator as an argument.
Anonymous delegate instances with the same body are no longer considered equal, which is a safer conservative default. In cases where delegate equality is important, the best approach is still to cache and re-use delegate instances, as described in the Delegates topic.
Removed the following types, methods, and properties, which were marked obsolete in a previous release: HashCode.finalizeHash, Signal.LowerNoiseBandwdithFrequency, TransmitterIdentifier, Action. 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.
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.
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.
ChangeStoppingConditionThresholdOperator<T> allows a callback to be defined to change the Threshold (get) 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 (get / set) property.
StopSegment will stop all propagation if enabled and encountered.
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.
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:
ScalarDifferenceOfSegmentConstraint which will return the difference of a value between the start and end points of a segment.
Added the following geometry types:
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 StkEphemerisFile.writeTo-java.io.Writer- and StkAttitudeFile.writeTo-java.io.Writer- 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 Duration.Zero (get).
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 (get / set). Before, the stopping condition could be satisfied even if the root finding did not converge within the specified tolerance. The RequireFunctionTolerance (get / set) property was added to allow the condition to be satisfied even if it does not converge to within the tolerance.
InitialStateSegment<T> is no longer abstract.
In some cases, exceptions thrown by Insight3D did not properly include an exception message indicating the error.
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 support for sending CZML delete packets. See CesiumDeleteExtension.
Added new functions to automatically download data over the internet from AGI servers. See:
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 converted to a ScalarDependentOnLink by calling the ScalarDependentOnLink.toScalarDependentOnLink helper method.
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:
Instead, customize the models using these new properties:
InvalidFuelStateException.PropagationElementThanRanOut was misspelled and has been marked obsolete. Use InvalidFuelStateException.PropagationElementThatRanOut (get) 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 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 overloads of TimeIntervalCollection1<T>.Remove and TimeIntervalCollection1<T>.RemoveLeavingEndpoints that take a TimeInterval. Previously, a TimeInterval1<T> was required, even though the data was ignored.
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 (get / set) of the AccessConstraint.Sampling (get). 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, Cartesian.equalsEpsilon) 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.
TransactionContext.doTransactionally now takes an instance of Action1. The old method, which takes Action, has been deprecated. In a future release, Action will be replaced with a delegate with no generic type that takes no parameters.
TransmitterIdentifier is now obsolete. See below for related changes to how IntendedSignalByTransmitter identifies signals.
Removed the following types, methods, and properties, which were marked obsolete in a previous release: CentralBodyObstructionConstraint.getDegreeOfObstruction, ScalarDensityJacchiaRoberts.UseApparentSunPosition, MarkerBatchPrimitive.alignToPixel, ProjectedRasterOverlay. Removed overloaded methods taking a TypeLiteral parameter: NumericalPropagationStateHistory.getDateMotionCollection, PropagationStateConverter.getDateMotionCollection, PropagationStateConverter.convertState, AuxiliaryStateElementConverter.convertState, PropagationStateElementConverter.convertState.
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 (get) instead.
All JARs and DLLs 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, SolvableMultivariableFunctionOperations.computeJacobianNumerically 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.
Improved LifetimeOrbitPropagator implementation to better predict decay of eccentric orbits.
The hash algorithm used by HashCode.combine has been replaced with the MurmurHash3 algorithm.
Fixed an issue in Ellipsoid.ellipsoidSeparationDistance 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.
In rare cases with overlapping ellipsoids Ellipsoid.ellipsoidSeparationDistance would throw an exception rather than successfully calculating the answer.
This release includes an updated Software License Agreement.
In some cases terrain height could be calculated incorrectly when performing signal propagation with TiremPropagationModel3_18.
In rare cases EllipsoidGeodesic.heading could calculate the wrong heading when very close to an equatorial crossing.
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.
All example solutions previously targeted to VS 2005 are now targeted to VS 2008.
CssiSolarGeophysicalData was not thread safe.
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 a possible race condition when calling DefinitionalObject.getDefinitionHashCode in certain cases.
TargetedSegmentList.ResetNestedTargetedSegments was replaced with TargetedSegmentList.ResetBetweenRuns (get / set). 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.jar to agi.foundation.segmentpropagation.jar. In addition, many abstract types were moved from agi.foundation.segmentpropagation.jar to agi.foundation.models.jar.
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 (get) 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 (get / set) 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 CentralBodiesFacet.useInCurrentContext or LeapSecondsFacet.useInCurrentContext in that thread.
Several DLLs related to decoding videos are no longer statically linked in agi.foundation.graphics.native.dll. They must now be copied into the library path 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 AxesVelocityOrbitNormal to represent the Vector Normal Co-normal axes.
Added AxesBPlane to represent the axes aligned to the B-Plane.
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 re-entry time.
Added ScalarDensityJacchia1970 which calculates atmospheric density according to the Jacchia 1970 model.
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.
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.
Texture2DFactory can now create mipmap compatible textures.
Further significant improvements to the performance of CentralBodySurfaceRegionSensorVolumeConstraint.
TimeIntervalCollection.contains 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 Double.POSITIVE_INFINITY will retain the old functionality. AccessConstraints do not expose their function explorers, but JulianDateFunctionSampling has an ExtremaCrossingUncertaintyFactor (get / set) property.
Insight3D can now display KML super overlays.
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.
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.VIOLATES_PROFILE_DYNAMICS when profile connections produced accelerations in excess of the maximum ThrustAcceleration (get / set).
Several bug fixes should make viewing KMLs much more stable.
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 Ellipsoid.getDegreeOfObstruction instead.
NumericalPropagationStateHistory.insert has been removed.
The result of NumericalPropagationStateHistory.getDateMotionCollection 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 PropagationStateConverter.getDateMotionCollection and passing the reversed time and state lists as parameters.
Numerical propagator methods taking a type literal are now obsolete. Please use the versions without a type literal instead.
Added NewtonFindRoot. This new class uses the Newton-Raphson method to solve for the roots of a function.
Added a CentralBodyClipped (get / set) property to MarkerBatchPrimitive, PointBatchPrimitive, PolylinePrimitive, and TriangleMeshPrimitive to control whether or not the primitive is clipped by the Earth or other central body.
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.
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 ModulationFsk to support Frequency Shift Keying (FSK) modulation.
STK Components no longer logs information at the DEBUG log level during calculations.
The embedded version of Joda Time has been upgraded to version 2.2.
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 EllipsoidSurfaceCurve.getDiscretePoints 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 that could lead to an exception when computing sensor projections.
Fixed a bug where Ellipsoid.surfaceDistance could return NaN if one of the points was very, very close to (but not on) the equator.
Fixed a bug in EllipsoidSurfaceRegion.checkPointInsideRegion 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 TimeIntervalCollection.toDuration 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 WaypointPropagator.constructConstantVelocityWaypointPropagator which provides a method to easily construct a WaypointPropagator that hits the desired waypoints at the desired times.
Added AttitudeTimeQuaternions.convertToStkAttitudeConvention and AttitudeTimeQuaternions.convertFromStkAttitudeConvention 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 StkAttitudeFile.configureFromAxes that caused incorrect results when using an Axes not supported by the STK Attitude file format. StkAttitudeFile.configureFromAxes now correctly transforms the input data to a supported Axes.
Fixed a bug in Insight3D that could cause imagery overlay tiles to be shown before they were done loading.
The raw IAU 2006 XYS data used to compute International Celestial Reference Frame (ICRF) is now exposed via the Iau2006XysData class.
GregorianDate.parseExact now optionally takes an array of acceptable formats.
CollectionAlgorithms.binarySearch now supports searching a subset of the collection.
JulianDate.toString 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 EarthOrientationParametersReadOptions.InterpretTimesUsingLeapSecondsFacet (get / set) 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 GregorianDate.toString that could cause it to report incorrect fractional seconds with seconds close to but not equal to zero.
Not-a-number (NaN) floating point values now appear as "NaN" and positive/negative infinity now appear as "Infinity" when they appear in strings or files written by STK Components.
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.
TimeInterval, TimeInterval1<T>, TimeIntervalCollection, and TimeIntervalCollection1<T> no longer require TypeLiteral parameters in any of their method signatures. If not specified when constructing, a TimeInterval1<T>Data (get) property now always defaults to null, regardless of the type of T.
TimeIntervalCollection1<T>.intersect no longer considers a nullData (get) 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.
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.
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.
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 (get / set) 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 an overload of GregorianDate.toIso8601String 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 (get / set) 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 NumericalPropagator.CurrentState (get) property are now updated on the creation and reset of the propagator. Previously, these values were out-of-date until propagate was called.
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 in GregorianDate.toString that could lead to rounding errors in the last decimal place in the formatted number of seconds.
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 (get / set) and RotationInterpolationAlgorithm (get / set).
Removed the Interpolator property from DoubleMotionInterpolator, TranslationalMotionInterpolator, and RotationalMotionInterpolator. This property was marked obsolete in a previous release in favor of the InterpolationAlgorithm (get / set) property.
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.
GregorianDate.toIso8601String 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 (get / set) (TEME) axes and the FixedFrame (get / set) axes during a leap second.
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 MotionEvaluator1<T> or MotionEvaluator2<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.
PropagatedRoute.HasNoConfigurationErrors is obsolete. Please use HasConfigurationErrors (get) 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.
Added Ellipsoid.ellipsoidSeparationDistance 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 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 GregorianDate.toIso8601String 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.
RinexNavigationEphemeris.AvailabilityIntervals (get) 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 (get / set) 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 basic support for sensors that change shape with time. See the bottom of 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 an EvaluationBehavior (get / set) property to GpsRinexPropagator, allowing control of the behavior when evaluating outside the AvailabilityIntervals (get) of the propagator. Also added a similar option to RinexNavigation.createSatelliteCollection and RinexNavigationRecord.createSatellite.
Added a new constructor overload to AzimuthElevationMaskConstraint to make it easier to construct an instance from a link and a link end.
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 DescriptiveStatistics.percentile that would rarely cause it to index incorrectly into the supplied list and raise an exception.
Added new geocentric (or planetocentric) coordinate type, LongitudeLatitudeRadius.
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 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.foundation.evaluatorgroup.Callback0.
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 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.
Improved performance for common cases involving Communications Library propagation models and antenna patterns.
Improved performance of repeated calls to GeometryTransformer.observePoint 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 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.
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 SensorFieldOfView.getProjection instead.
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 List<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.
Added the EllipsoidSurfaceRegion.createRegionUsingExtent method to make it easy to create a coverage grid from a latitude / longitude extent.
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.
Fixed a bug in Ellipsoid.tangents that caused it to always report that there were no tangents when the specified half angle was greater than 90 degrees.
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.
Overloads of NumericalPropagator.propagate 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 (get) 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.
GainPattern now implements ICloneWithContext.
If an Error (rather than a RuntimeException) occurred in a worker thread, it was not properly handled by ThreadedCalculation or TerrainCacheGroup. Errors are now propagated back to the main thread in the same way RuntimeExceptions are.
StkEphemerisFile now reads the InterpolationSamplesM1 property written by recent versions of STK. Previously, it ignored the property, which could result in incorrect interpolation.
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 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.
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.
IersTechnicalNote21 now exposes Updated1980NutationModel (get) and UpdatedEquationOfEquinoxes (get), 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 (get / set) and NutationModel (get / set) 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 QuarticRealPolynomial.realRoots 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.
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.
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.
Fixed a bug where Insight3D would crash in situations with multiple AWT EventQueues running when native resources were cleaned up by finalizers and the finalization thread chose the wrong EventQueue thread. In particular, this could happen in a Java applet.
The InitialVelocityResiduals and FinalVelocityResiduals properties of agi.foundation.propagators.sgp4propagator.Sgp4EstimationOutput have been marked obsolete. The values were never computed or used as part of the estimation process.
CentralBody (get) is no longer settable via the service interface, making it consistent with other service interfaces.
Matrix3By3.eigenDecompositionOfSymmetricMatrix is now obsolete. Use Matrix3By3Symmetric.eigenDecomposition 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 DoubleMotionInterpolator to interpolate over collections of double-precision, floating-point numbers using various interpolation algorithms.
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.
TwoLineElementSet.toTleString 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 Sgp4Propagator.estimateElements which would cause a matrix to become singular for some orbits.
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 (get / set) 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.
Added new static method CollectionAlgorithms.createJaggedDoubleArray.
Added new method JulianDate.daysDifference.
Added a MinimumSampleSpacing (get) 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.
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.
TriangleMeshPrimitive can now display a texture. It has new properties for specifying the Texture (get / set) and TextureFilter (get / set), 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 (get / set) property controls whether flat or smooth shading is used to render per-vertex colors.
Fixed a bug where the ScalarDotProduct.checkForSameDefinition 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.
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 addEnumeration 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.
PointInterpolator now supports a PointInterpolatorType of Linear in addition to Hermite and Lagrange.
Fixed a bug where parameters in a parameterized evaluator sometimes returned false from their IsTimeVarying (get) 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.
Fixed several memory leaks in Insight3D.
Fixed an exception that could occur in WebMapServiceCachedImageGlobeOverlay.
When RasterTerrainProvider.cartographicExtentToIndexExtent 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 support for Stereoscopic (get) rendering.
Added a TerrainAzimuthElevationMask.createDelayedMask 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 overloads of StkEphemerisFile.readFrom that allow additional read options to be specified, such as whether or not to read covariance data.
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.
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 several bugs in the Insight3D Applet example. The location of the VC90 runtime DLLs inside the native JAR was corrected, and the applet's destroy method was adjusted to avoid a threading crash.
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.
The misnamed DelaunayElements.MeanMotion property is now obsolete. The MeanAnomaly (get) property should be used instead.
An Insight3D Applet example is now included that demonstrates how to build an applet that uses Insight3D in a web browser.
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.
Fixed a crash that could occur if the Java VM was shut down while Insight3D was animating.
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 NetworkContext, which controls whether the Java networking libraries should be used when acquiring resources from URIs in Insight3D. For instance, you can now set a proxy, set credentials, or configure SSL certificate policies using the built-in Java APIs.
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 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.
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. This functionality was previously only available in the .NET version of AGI Components.
Added PacketAcquirementYieldTime (get / set), PacketBufferLimit (get / set), and AllowFrameDrop (get / set) 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.
Improved accuracy when calculating Earth Rotation Angle, particularly at times far removed from J2000.
Improvements to ProjectedRasterOverlay. See the Raster and Projection Streams topic for more information. Improvements include:
Projection onto models.
Visualization of the far plane.
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.
Visual properties can now be set dynamically while visualization is occurring.
Other fixes and performance enhancements.
In situations where finalizers are not run in a timely manner, it was possible for AGIProcessedDataTerrain to cause the JVM to allocate unbounded amounts of native (non-Java heap) memory in order to decompressing data. These native resources are now freed proactively.
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 ImageCollection.AddComplete (add / remove) event to always report failure when adding a GeospatialImageGlobeOverlay, even if the add succeeded.
Added the ability to stream Microsoft Bing Maps for Enterprise (previously Microsoft Virtual Earth) imagery using the BingMapsForEnterpriseImageGlobeOverlay class. This class was previously only available in the .NET version of AGI Components.
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.
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 (get) 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.
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.
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. This library was previously only available in the .NET version of AGI Components.
A new library, Tracking Graphics, has been added that makes it easy to visualize Tracking Library entities in Insight3D. See the Visualization with Insight3D® topic for more information. This library was previously only available in the .NET version of AGI Components.
Added the AGIProcessedTerrainWriter class to enable conversion of various terrain formats to PDTT so that they can be visualized with Insight3D. This class was previously only available in the .NET version of AGI Components.
Added support for rendering imagery from a WMS-C server to the Insight3D globe via the WebMapServiceCachedImageGlobeOverlay class. This class was previously only available in the .NET version of AGI Components.
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 default constructors for CentralBodySurfaceCurve and CentralBodySurfaceRegion, and made the CentralBodySurfaceCurve.SurfaceCurve (get / set) and CentralBodySurfaceRegion.SurfaceRegion (get / set) 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).
AGIProcessedDataTerrain now obtains the Shape (get / set) from the Shape (get / set) property of the CentralBody to which the terrain is attached. Previously, it would use WorldGeodeticSystem1984.Shape (get).
Fixed a bug in BrentFindRoot that could cause it to think it converged on the independent variable tolerance before it really had.
AGI Components now throws ArgumentNullException and ArgumentOutOfRangeException in many cases where it previously threw NullPointerException and IndexOutOfBoundsException, respectively. These new exception types are subclasses of the more appropriate IllegalArgumentException and improve consistency with AGI Components for .NET.
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 (get) is now abstract on evaluator classes. If you are implementing your own evaluators, you will need to override this property.
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.
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.
TerrainAlongLine.computeTerrainIntersection 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.
All evaluators now correctly implement IsTimeVarying (get) 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 TerrainAlongLine.computeElevationAngleAboveTerrain where the incorrect end point could be used for part of the computation.
The AccessSampling type has been renamed to JulianDateFunctionSampling.
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.
AreaTarget, AreaTargetElevationAngleConstraint, LineTarget, LineTargetElevationAngleConstraint, and related types have been marked obsolete. Instead, use CentralBodySurfaceRegion, CentralBodySurfaceRegionElevationAngleConstraint, CentralBodySurfaceCurve, and CentralBodySurfaceCurveElevationAngleConstraint.
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.
LinearApproximation now throws an exception when given the same value for x0 and x1. Previously, it would return the average of y0 and y1.
RecurringTaskScheduler.removeTask 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.
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.
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.
When converting a JulianDate to a Joda DateTime, the number of milliseconds was computed by truncation instead of by rounding. The conversion now yields the closest time that is representable by Joda.
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.
Many methods that are not intended to be overridden in derived classes are now marked final.
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.
TerrainProvider.Cache is now obsolete. Not all terrain providers use a cache.
Introducing Tracking Library, which seamlessly integrates the processing, and analysis of dynamically acquired data in AGI Components. See the Tracking topic for more information.
Added the Ellipsoid.apparentAngularSize method.
Fixed several bugs related to reading and writing of data files in non-English locales.
Terrain readers now work reliably with streams that have read methods that can return fewer bytes than requested.
RinexObservationSatRecord.Prn and RinexObservationSatRecord.PrnCharacter are now obsolete. Use RinexObservationSatRecord.PseudoRandomNumber (get / set) and RinexObservationSatRecord.PseudoRandomNumberCharacter (get / set) instead.
SatelliteIdentifier is now immutable, meaning that it cannot be changed after it is created.
Numerous improvements to the examples and documentation.
The performance of SensorVolumeConstraint has been improved.
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 a bug that caused AccessSampling to ignore the AccessSampling.TrendingStep property if it was smaller than the AccessSampling.MinimumStep.
The first release of AGI Components for Java!