AGI Components
What's New?
AGI Components for .NET 2010 r1
  • Breaking Changes
    • RaimComputation and related types are now obsolete. Use ReceiverAutonomousIntegrityMonitoring instead.
    • AccessSampling no longer implements IFunctionSamplingStrategy<JulianDate>. Instead, it has a method, CreateFunctionSamplingStrategy, that returns an instance of IFunctionSamplingStrategy<JulianDate>.
    • RinexObservationSatRecord.Prn and RinexObservationSatRecord.PrnCharacter are now obsolete. Use RinexObservationSatRecord.PseudoRandomNumber and RinexObservationSatRecord.PseudoRandomNumberCharacter instead.
    • SatelliteIdentifier is now immutable, meaning that it cannot be changed after it is created.
    • Removed the incorrectly named EvaluatorGroup.CreateEvaluatorCallback3, which was previously marked obsolete. Use CreateEvaluatorCallback4 instead.
    • Removed Solid.GetEnclosures, which was previously marked obsolete. Use Solid.GetEnclosureDescriptions instead.
    • Removed CrossPlatform.ParseDateTime, which was previously marked obsolete. Use GregorianDate.Parse instead.
    • The CrossPlatform class is now obsolete. Its one method, IsMonoRuntime does not need to be included in AGI Components. To detect whether an application is running under Mono, see the "How can I detect if am running in Mono?" question in the Mono Technical FAQ.
    • Removed the AxesVehicleVelocityLocalHorizontal.CentralBody property and the related constructor, which were previously marked obsolete. Use the AxesVehicleVelocityLocalHorizontal.ReferenceFrame property instead.
    • Removed the constructor for GpsReceiver taking a GpsReceiverSolutionType, which was previously marked obsolete. Instead, construct it with one of the other constructors and set the ReceiverSolutionType property.
  • New Features
    • Insight3D now has the ability to render solids such as boxes and ellipsoids. See the Solid Primitive overview topic for more information.
    • PolylinePrimitive and PointBatchPrimitive can now be rendered with an outline by setting their DisplayOutline, OutlineColor, OutlineTranslucency, and OutlineWidth properties.
    • YearMonthDay can now be constructed from a year and a day-of-the-year.
    • Added the EndianBitConverter to enable conversion between values in fixed byte order formats.
  • Improvements
    • Numerous improvements to the examples and documentation.
    • The performance of SensorVolumeConstraint has been improved.
    • TimeIntervalCollection now implements IList<TimeInterval>.
    • ReceiverAutonomousIntegrityMonitoring replaces RaimComputation. The new class offers better performance and an easier-to-use interface.
    • Improved numerical results for finding roots of a QuadraticRealPolynomial when the linear term is zero and the constant term is small in relation to the quadratic term.
    • GridTimeSampledValues.ComputeData now creates grid points and figure of merit scalars in multiple threads simultaneously according to the ThreadingPolicyFacet.
    • AccessSampling now ensures that access constraint functions are sampled at least three times over each interval. Previously, small intervals might be sampled only twice and access events could be missed.
  • Bug Fixes
    • Fixed a bug in DoubleFunctionThreshold and JulianDateFunctionThreshold that could cause them to throw an exception claiming that the "threshold crossings of the function are not consistent" when two crossings of the threshold are close together.
    • Fixed several problems rendering PointBatchPrimitive and SurfaceMeshPrimitive on video cards with ATI chipsets.
    • Fixed an issue with picking MarkerBatchPrimitives, TextBatchPrimitives, and PointBatchPrimitives that only contain a single item.
    • Fixed a bug that could cause the TriangleMeshPrimitive to flicker under certain circumstances.
    • Fixed a bug that caused AccessSampling to ignore the TrendingStep property if it was smaller than the MinimumStep.
    • Fixed a bug where setting MouseOptions.Zooming and allowing the user to perform the zoom caused the camera's PositionReferenceFrame and ReferencePointReferenceFrame properties to return stale data.
AGI Components 2009 r8
  • Breaking Changes
    • Jpeg2000ImageGlobeOverlay is now obsolete. Use GeospatialImageGlobeOverlay instead.
    • Setting MarkerBatchPrimitive.Size now throws InvalidOperationException if the marker batch was not constructed with MarkerBatchSizeSource.UserDefined. Similarly, MarkerBatchPrimitive.Set and MarkerBatchPrimitive.SetCartographic now throw ArgumentException if per-marker sizes are provided and the marker batch was not constructed with MarkerBatchSizeSource.UserDefined.
    • EvaluatorGroup.CreateEvaluator now throws an ArgumentTypeInvalidException if any of the given parameters implement IEvaluator. Previously this was allowed but could result in poor evaluator performance. Instead, definitional objects should be passed to CreateEvaluator and the evaluators should be obtained inside the callback method.
    • Trig.AngleInRange is now obsolete. Instead, use Trig.IsAngleInRange, Trig.PutAngleInRange, or Trig.TryPutAngleInRange.
    • The type of the SurfaceMeshPrimitive.TextureMatrix property is now TextureMatrix instead of Matrix.
  • New Features
    • ScreenOverlay now has FlipX and FlipY properties that can be used to flip an overlay at its center along the X or Y axes.
    • ECW files, ECW files streamed from a server through the ECWP protocol, and MRSID files can now be used as Globe Overlays via the GeospatialImageGlobeOverlay class. They can also be added by filename to the ImageCollection.
    • Primitives, ScreenOverlays, and GlobeOverlays now have a Tag property that can be used to attach arbitrary data. This property is commonly used to assist with picking.
    • SurfaceMeshPrimitive can now do trapezoidal texture mapping by setting the SurfaceMeshPrimitive.TextureMatrix property. In other words, a texture can be accurately rendered in cases where the Cartographic coordinates of the four corners are known. See the Surface Mesh Primitive overview topic for more information.
  • Improvements
    • Cartesian.Rotate and UnitCartesian.Rotate now use a more efficient implementation for rotating with a UnitQuaternion.
    • The algorithm for computing an intersection between an Ellipsoid and a cone has been improved. This makes the computation of the projections of the ComplexConic and SyntheticApertureRadar sensors more accurate and predictable.
    • Unhandled exceptions raised in the TerrainCacheGroup thread (for example, while a TerrainProvider is loading a region of terrain) are now re-thrown when TerrainCacheGroup.RequestRegionLoad is called. TerrainCacheGroup.StartCacheThread can be called to clear the exception and restart the TerrainCacheGroup thread. Previously, unhandled exceptions would silently end the thread and cause poor terrain performance.
    • Numerous improvements to documentation and examples.
  • Bug Fixes
    • Fixed a bug where TextureScreenOverlay would sometimes fail to update its texture if it was assigned for the first time after it had been rendered.
    • Fixed a bug in ScalarSingleFrequencyIonosphericCorrection and ScalarSaastamoinenTroposphericCorrection that could result in incorrect results when the receiver's LocationPoint was not defined in the Earth Fixed frame.
    • Fixed a bug in TerrainCacheGroup that caused it to load the least recently used region instead of the most recently used one when multiple regions were in the queue. This bug fix should yield a performance improvement in certain cases.
AGI Components 2009 r7
  • Breaking Changes
    • The overload of the Camera.VisibilityTest method taking a CentralBody has been made obsolete. Instead, use the overload that does not take a CentralBody.
    • Primitive.CentralBody has been made obsolete. Set the ReferenceFrame property instead.
    • The overloads of SetCartographic and SetPartialCartographic on MarkerBatchPrimitive, PointBatchPrimitive, PolylinePrimitive, and TextBatchPrimitive that do not take a CentralBody have been made obsolete. Instead, use the overloads that specify a CentralBody.
    • ModelPrimitive.PositionCartographic has been made obsolete. Instead, use ModelPrimitive.SetPositionCartographic.
    • The overload of PolylinePrimitive.SetSubsetCartographic that does not take a CentralBody has been made obsolete. Instead, use the overload that does take a CentralBody.
    • FunctionThreshold has been made obsolete in this release. Instead, use DoubleFunctionThreshold or JulianDateFunctionThreshold.
    • IPropagateFromInitialConditions has been made obsolete in this release.
    • IIndexableImmutable and CreateFromArray have been made obsolete in this release.
  • New Features
    • Primitive.ReferenceFrame now accepts any ReferenceFrame. If the specified reference frame moves, the primitive will as well. Previously, only the Fixed and Inertial frames were allowed.
    • Camera.VisibilityTest now accepts any ReferenceFrame.
  • Improvements
    • CompositePrimitive.Add no longer throws ArgumentException if the primitive added does not have the same CentralBody as the composite.
  • Bug Fixes
    • In AGI Components 2009 r6, the MATLAB example referenced the default install location of AGI Components 2009 r5. In this release, the example uses a relative path so it should work regardless of where AGI Components is installed.
    • Fixed a bug that could cause EarthOrientationParameters to return NaN instead of a valid value in rare circumstances when working with multiple EarthOrientationParameters instances in a single application.
AGI Components 2009 r6
  • Breaking Changes
    • The Ellipsoid copy constructor, which was marked obsolete in AGI Components 2009 r3, has been removed in this release.
  • New Features
    • Added the KozaiIzsakMeanElements coordinate type.
    • Added DihedralAngle methods to UnitCartesian.
    • Added ComputeTerrainIntersection methods to TerrainAlongLine to compute the point where a line intersects with terrain.
    • CustomSensorPattern can now be projected onto an Ellipsoid.
    • Insight3D now continues animating while the user interacts with it using the mouse. The previous behavior can be restored by setting the MouseOptions.AnimateWhileHandling property on the Insight3D control to false.
    • You can now specify the Origin of a ScreenOverlayRotationPoint.
  • Improvements
    • StkEphemerisFile and StkAttitudeFile are no longer case-sensitive.
    • StkEphemerisFile and StkAttitudeFile now support a much more complete set of reference frames and axes, notably including the International Celestial Reference Frame (ICRF).
    • RotateFilter can now rotate by an arbitrary angle. Previously it only allowed 90, 180, and 270 degree rotations.
    • Numerous documentation improvements.
  • Bug Fixes
    • Fixed several problems with sensor projections that could cause exceptions or unexpected results in certain unusual cases.
    • Fixed a bug that prevented Access Queries from evaluating over a TimeInterval containing just a single instant of time.
    • Fixed a bug that prevented the EllipsoidGrid.ReferenceTerrain property from being used with coverage analysis.
    • The Insight3D control was incorrectly raising a DragDrop event when the DragEnter event should have been raised.
    • Fixed some problems rendering filled polygons and video on terrain with ATI HD video cards.
    • ScalarReceivedIsotropicPower and ScalarReceivedPowerFluxDensity previously did not take into account access constraints applied to the link, so "received" power was unaffected by terrain line of sight, etc. In addition, ScalarPropagationLoss will now report 100% loss when the link's access constraints are not satisfied.
    • Fixed a rare race condition in TerrainCacheGroup that could cause an ArgumentException when attempting to obtain a terrain height.
    • Fixed several problems preventing the AGI Components analysis components from being used in a partial-trust environment such as from within an XBAP application. Insight3D (AGI.Foundation.Graphics) still cannot be used in a partial trust environment because of its use of unmanaged code.
    • Fixed a problem with EllipsoidGridRegions when some of the regions span the international date line.
    • Examples of using AGI Components from MATLAB are now included in the Examples subdirectory.
AGI Components 2009 r5
  • Breaking Changes
    • An overload of Ellipsoid.GrazingAltitudeLocation that was marked obsolete in AGI Components 2009 r2 has been removed in this release.
    • Removed Primitive.RenderPasses, which was previously marked obsolete.
  • New Features
    • Added support for the International Celestial Reference Frame (ICRF), which can be obtained from the EarthCentralBody.InternationalCelestialReferenceFrame property. By default, the EarthCentralBody.InertialFrame is now ICRF instead of J2000.
    • Added new GPS receiver error models: SaastamoinenTroposphericCorrectionModel and SingleFrequencyIonosphericCorrectionModel.
    • The "Mean Earth" fixed frame for the Moon can now be obtained from JPL ephemerides using the GetMoonTopographicFixedAxes method.
    • Added ExtrudedPolylineTriangulator.ComputeSingleConstantAltitude to create extrusions with a constant altitude and a varying altitude.
    • Added a MaintainAspectRatio property to TextureScreenOverlay.
    • Added PinningPosition and PinningOrigin properties to ScreenOverlay.
    • Added a UnitSpherical coordinate type.
    • Added a CustomSensorPattern class that can be used to define a custom sensor that can then be used to constrain access.
    • Grids in Spatial Analysis Library now allow user’s to specify a TerrainProvider as a reference for the grid point heights.
    • Added support for RINEX meteorological files with the RinexMeteorological class.
  • Improvements
    • Numerous documentation improvements.
    • The performance of many computations has been substantially improved.
    • The performance of the TerrainAlongLine.ComputeElevationAngleAboveTerrain method and the TerrainLineOfSightConstraint access constraint has been substantially improved. This is on top of the general library-wide performance improvements mentioned above.
    • Added a topic to the Programmer's Guide explaining how to use AGI Components from within MATLAB.
    • Added SurfaceMeshPrimitive.SetWithoutTexturing, which is an efficient alternative to SurfaceMeshPrimitive.Set when texturing is not required.
    • Numerous improvements to the Insight3D How To.
    • Added a new constructor to GpsReceiver that fully constructs the receiver and prepares it for use. Marked the previous constructor, which created a GPS receiver that could not be used to compute accuracy, as obsolete.
  • Bug Fixes
    • Fixed a crash that could occur when creating a MarkerBatchPrimitive before an Insight3D control was fully constructed.
    • ModelPrimitive now supports Collada models (*.dae) with textures with non-power-of-two dimensions regardless of whether or not the video card supports GL_ARB_texture_non_power_of_two.
    • TimeIntervalDisplayCondition's MinimumTime and MaximumTime properties can now be reliably compared against JulianDate.MinValue and JulianDate.MaxValue.
    • Fixed the normals returned by ExtrudedPolylineTriangulator. In some cases, incorrect normals lead to incorrect lighting when the returned ExtrudedPolylineTriangulatorResult was assigned to a TriangleMeshPrimitive.
    • Fixed some potential problems with various access constraints when AccessSampling.UseConstraintSamplingSuggestion is set to false.
    • Fixed a potential crash related to the GraphicsFont class.
    • Fixed a bug that caused AccessComputation.OverrideConstraintSampling to be ignored.
    • Fixed a MarkerBatchPrimitive bug where markers with duplicate per-marker textures did not render.
    • The Insight3D control will now appear when added to the Visual Studio 2008 toolbox even when the project is set to use .NET 2.0. Previously the control would not appear unless the project used .NET 3.0 or later.
    • Fixed a bug in RotationalMotionInterpolator that could cause it to raise a NullReferenceException when the first time evaluated is at or before the start of the attitude data.
AGI Components 2009 r4
  • Breaking Changes
    • A significant number of types, methods, and properties that have been marked obsolete for 6 or more months have been removed in this release.
    • GeospatialInformationIsMissingException is now thrown instead of ArgumentException when attempting to Add a JP2 file without geospatial information as a globe overlay.
    • JulianDate.ToTimeStandard now throws an ArgumentOutOfRangeException if asked to convert a JulianDate representing a time during a leap second to Coordinated Universal Time (UTC). A TryConvertTimeStandard method has been added to attempt the conversion without throwing an exception if it fails. Also, arithmetic operations on JulianDate (such as Add and Subtract) return a result in International Atomic Time (TAI) if the result cannot be represented in UTC.
    • AltitudeDisplayCondition and DistanceToPositionDisplayCondition now have a CentralBody and ReferenceFrame, respectively, which default to Earth and Earth's FixedFrame. Previously, these display conditions used the central body of the primitive to which the display condition was applied.
    • The constructor for SurfaceMeshPrimitive will now throw an InsufficientVideoCardException, for consistency with other primitives. Previously, the exception was not thrown until Set was called.
    • The following classes, properties, and enumerations related to the Insight3D camera have been deprecated in this release: UntetheredCamera, NormalCamera, Camera.Untethered, Camera.Normal, Camera.ActiveViewMode, and CameraViewMode. Equivalent functionality is available on the Camera class.
    • The orientation of imagery used with the ProjectionStream class has changed. Previously, X went from the bottom to the top of the image, Y went from the left to the right of the image, and positive Z went into the image. Now, the orientation is a more conventional scheme where X goes from the left to the right of the image, Y goes from the bottom to the top of the image, and negative Z goes into the image. This change means that it is no longer necessary to invert a quaternion representing the transformation from CBF before assigning it to the ProjectionStream.
    • SimulationAnimation and RealTimeSimulationAnimation no longer validate the StartTime, EndTime, StartCycle, and EndCycle properties when those properties are set. Instead, they are validated when animation is started. This frees the user from needing to worry about the order in which the properties are set.
    • Primitive.RenderPasses has been deprecated in this release.
    • CrossPlatform.ParseDateTime has been deprecated in this release.
  • New Features
    • Added a GregorianDate type. It can be used in place of the .NET standard DateTime for more accurate parsing and formatting of dates.
    • Many access constraints have logic to suggest the next sampling step in order to avoid missing interesting features of the constraint function. This can now be disabled by setting the AccessSampling.UseConstraintSamplingSuggestion property to false, in which case the function will be sampled using the DefaultStep instead.
    • Primitives and Screen Overlays now have a Display property that allows them to easily be hidden or shown.
    • Screen Overlays now support Display Conditions.
    • Two new Display Conditions have been added for use with Primitives, Screen Overlays, and Globe Overlays: DistanceToGlobeOverlayDisplayCondition and DistanceToPrimitiveDisplayCondition.
    • MarkerBatchPrimitive can now be configured to render in wireframe mode by setting the Wireframe property.
    • Added support for rendering imagery from www.openstreetmap.org on the Insight3D globe via the OpenStreetMapImageGlobeOverlay class.
    • Added support for rendering imagery from a WMS-C server to the Insight3D globe via the WebMapServiceCachedImageGlobeOverlay class.
    • Added TryCartographicToWindowCoordinate, CartographicToWindowCoordinate, TryWindowCoordinateToCartographic, and WindowCoordinateToCartographic methods to the Camera class to quickly find the longitude, latitude, and altitude corresponding to a specified pixel, or vice-versa.
    • Added a SurfaceDistanceConstraint to constrain access based on the distance between two objects along the surface of the Earth or another central body.
  • Improvements
    • Numerous documentation improvements.
    • The terrain extent computed by the GTOPO30Terrain reader has been changed slightly in order to improve conformance with STK and with the terrain format specification. The previous behavior, if required, can be restored by passing the StrictlyHonorUpperLeft option to the constructor.
    • A single CompositePrimitive can now hold both opaque and translucent primitives. Previously, it threw an exception when adding primitives with different render passes.
    • SurfaceMeshPrimitive.Texture now supports textures with non-power-of-two dimensions regardless of whether or not the video card supports GL_ARB_texture_non_power_of_two. Therefore, SurfaceMeshPrimitive.Texture no longer throws InsufficientVideoCardException.
    • Changing SurfaceMeshPrimitive.Texture from non-null to null is now allowed and will no longer throw an InvalidOperationException.
    • Added a SetHint property to TextBatchPrimitive.
    • Improved performance when passing arrays of Cartographic positions to many methods in Insight3D.
    • Improved the performance of the GeometryTransformer in certain cases.
  • Bug Fixes
    • TerrainAzimuthElevationMask.Compute no longer computes the ray at both 0 degrees and 360 degrees, which yields a small performance improvement.
    • Fixed a bug in AlphaFromRasterFilter and AlphaFromPixelFilter that could cause them to generate incorrect images in some situations.
    • Fixed a bug in AGIProcessedDataTerrain that caused it to fail on big-endian processor architectures such as SPARC.
    • Fixed a bug that affected the light intensity of some TriangleMeshPrimitives.
    • Fixed some problems in the Insight3D How To and Lots of Satellites reference applications that caused them to crash on an older video card supporting only OpenGL 1.1.
    • Fixed an exception in RinexObservation when reading an observation file that contains only one record.
    • Fixed a rendering problem when extremely small PDTTX or JP2 files were added to the Insight3D globe.
    • Fixed a bug in StkAttitudeFile that caused it to write files that could not be read by STK.
    • Fixed a bug that could cause camera's position to be updated incorrectly when setting the Camera.Position property.
    • Fixed a bug that caused MarkerBatchPrimitive to fail with certain video cards unless Supported was called first.
AGI Components 2009 r3
  • Breaking Changes
    • An uncommonly used overload of CreateEvaluator was misspelled in the previous release and has been corrected.
    • TotalAngularRateConstraint now computes the angular rate with respect to the reference frame of the constrained link end, which is the end of the link to which the constraint has been applied. Previously the rate was computed with respect to the displacement vector's axes, which could be different if accounting for light-time delay.
    • The functionality previously in AGI.Foundation.Terrain.dll has been split into two assemblies: AGI.Foundation.TerrainReaders.dll and AGI.Foundation.TerrainAnalysis.dll. You will need to update the references in your projects.
    • The PlatformExtension and PlatformExtensionCollection types have been removed. Use ObjectExtension and ExtensionCollection instead.

  • New Features
    • 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 - Insight3D section in the documentation.
    • StkEphemerisFile now provides an interpolator for EphemerisLLATimePos, making it much simpler to read longitude, latitude, and altitude data from an ephemeris file and use it for analysis.
  • Improvements
    • Duration now has a Divide method that takes a constant divisor.
    • AxesVehicleVelocityLocalHorizontal is now defined with a reference frame instead of a central body. This allows the axes to be oriented based on, for example, the velocity in the fixed frame rather than the velocity in the inertial frame.
    • EarthCentralBody.OrientationParameters is now, by default, configured with a default-constructed EarthOrientationParameters. This allows the transformation between the Earth Fixed and J2000 frames to be computed, though somewhat less accurately, without first loading EOP data.
    • The MoonCentralBody now has a valid Shape by default.
    • Numerous documentation improvements.
  • Bug Fixes
    • A bug has been fixed that prevented the "simple" licensing system from finding a license embedded in an assembly other than the entry assembly. The entry assembly is usually the application executable.
    • Fixed a numerical stability problem in AGIWorldTerrain that could cause it to throw an exception when attempting to provide the terrain height at certain valid locations.
    • RinexNavigationEphemeris incorrectly reported the Time of Clock value as its Epoch.
    • The BoundingExtent property of GeodasGriddedTerrain was previously always returning null.
AGI Components 2009 r2
  • Breaking Changes

    This release includes changes to the mechanism for licensing AGI Components for use in your applications. While it is designed to be minimally intrusive, you will need a new license and to take some basic steps to avoid licensing exceptions at runtime. Please see the Getting Started or Licensing and Deployment sections in the Programmer's Guide for more information.

  • New Features
    • CustomGainPattern now allows users to specify a gain pattern as either a simple Function or as SphericalTabularGainData.
    • JplDE421 ephemerides are now supported.
  • Improvements
    • CoverageDefinitionOnCentralBody now has the option to store the grid cell boundary vertices along with the coverage data in the CoverageGridResult. This is useful when plotting results.
    • The performance for adding an interval at the end of a TimeIntervalCollection has been improved along with adding a "RemoveAt" method.
  • Bug Fixes
    • Fixed an issue with BrentFindExtremum for certain functions where it would take an infinitesimal step and cause the algorithm to 'converge' prematurely.
    • The Ellipsoid.GrazingAngles method now handles the case where it intersects the Ellipsoid.
    • The Ellipsoid.GrazingAltitude method now guarantees that the resulting minimum altitude is measured at a point between the two end points.
    • Fixed an issue with the Ellipsoid.SurfacePoint method when specifying a heading of zero with respect to a spherical instance of Ellipsoid.
    • The J2Propagator and J4Propagator now handle the case where the orbit intersects the central body by treating the orbit as unperturbed (two body motion) rather than causing strange results.
    • VectorNormalized now handles zero-vectors better.
    • Fixed an issue with AGIWorldTerrain where it would calculate some post indices incorrectly.
    • Fixed AccessQuery so that the corresponding AccessEvaluator will not create a single worker thread off of the main thread when it is told to only use one thread.
    • Fixed an issue with the computation of angular velocity and acceleration for the AxesVehicleVelocityLocalHorizontal and AxesLocalVerticalLocalHorizontal types.
    • Fixed Duration so that it is possible to multiply by a fractional value and get the correct result.
AGI Components 2009 r1
  • Breaking Changes
    • Please contact us at support@agi.com and we will be glad to help you update your existing code to work with this release.
    • Evaluators are now expected to implement the GetAvailabilityIntervals method instead of the AvailabilityIntervals property. The new method allows the caller to specify the intervals over which they are interested in the availability.
    • The Ellipsoid class is now immutable, meaning it cannot be changed after it is created.
  • New Features
    • Communications Library is a new component which analyzes communication signals by modeling antenna gain patterns, wireless propagation effects, and hardware processing. It provides several ways to analyze signal data, including the creation of "Link Budgets" based on various scalar parameters such as CarrierToNoise or BitErrorRate. It also models the effects of multiple signals interfering with an intended signal. For more information on Communications Library, see the Communications Overview in the Programmer's Guide.
  • Improvements
    • AxesAlignedConstraint now allows the user to specify which axes to use as the principle and reference.
    • BrentFindExtremum now has better behavior for flat functions and other special cases. This may improve access results in certain cases.
    • StkSatelliteDatabase now treats the "wr," "fr," and "tce" files that are normally part of the database as optional. This is useful when using a custom satellite database.
    • Default-constructed AzimuthElevationMaskConstraint, ThirdBodyElevationAngleConstraint, LineTargetElevationAngleConstraint, and AreaTargetElevationAngleConstraint now default to having a MinimumValue of 0.0 radians. Previously neither MinimumValue nor MaximumValue was set, so the constraints effectively did nothing unless the user explicitly set one of these properties.
    • GeometryTransformer now computes transformation chains between axes and reference frames more quickly in certain cases.
    • This release of AGI Components is now tested against Mono v2.2.
    • Numerous documentation improvements.
  • Bug Fixes
    • Fixed a bug that could cause an "eccentricity violation" exception when computing access with an SGP4-propagated satellite and light-time delay enabled, even with a valid TLE and computation interval.
    • AccessEvaluator now correctly reports its availability as infinite. An access query can be evaluated at any time. If an underlying quantity is not available at that time, the result of the query is that access is "unknown."
    • Fixed a bug in TimeGenerator that could cause it to very rarely return two identical times at the end of the interval. This could manifest itself as two identical times being returned from evaluating any evaluator over an interval.
    • Fixed a bug in EllipsoidGeodesic.Heading that could cause the algorithm to compute NaNs in certain very rare circumstances.
    • VectorMagnitude no longer throws an exception when the magnitude is zero.
AGI Components 2008 r8
  • New Features
    • Added three Coverage Figures of Merit to Navigation Accuracy Library: DilutionOfPrecisionFigureOfMerit, NavigationAccuracyAssessedFigureOfMerit, and NavigationAccuracyPredictedFigureOfMerit. These new figures of merit are used with TimeSampledValues and GridTimeSampledValues.
  • Improvements
    • Spatial Analysis Library now multithreads the creation of grid points in order to improve performance on multi-core and hyperthreaded hardware.
    • AGI Components is now built using Visual Studio 2008. This change should be transparent as Visual Studio 2005 and .NET 2.0 are still fully supported in this release.
    • Numerous documentation improvements.
  • Bug Fixes
    • Fixed a bug in the constructor for Waypoint that takes a previous waypoint. The bug would result in an exception ("The waypoint collection does not model constant accelerations between the waypoints") when attempting to use the waypoints with WaypointPropagator.
    • Fixed a bug in the Clone method of GpsReceiver that resulted in the new GpsReceiver and the original one sharing their lists of SatelliteConstraints and ReceiverConstraints.
AGI Components 2008 r7
  • New Features
    • Terrain Analysis Library now has the ability to read terrain data in the AGI PDTT format using AGIProcessedDataTerrain.
    • Navigation Accuracy Library now has the ability to read RINEX Observation files using RinexObservation.
    • Added a LinearApproximation type which has a static method for doing simple linear interpolation and also implements IInterpolator.
    • VectorDifferentiator and PointDifferentiator now have a DerivativeToCompute property. Previously, these types always computed the next derivative after the highest available from the underlying vector or point.
    • Added an EllipsoidGridSpecified type that makes it easy for the grid points used in a coverage computation to be given explicitly by the user.
  • Improvements
    • Addressed a difference between the convention used to represent rotational motion in an StkAttitudeFile and that used in the rest of AGI Components. This could cause rotational motion interpolated from an attitude file to be interpreted incorrectly. See AttitudeData for more information.
    • EarthGravitationalModel1996 now has unnormalized versions of the J2, J3, and J4 constants. Also, the documentation for J2Propagator and J4Propagator has been updated to refer users to these constants.
    • The YearMonthDay type can now be constructed directly from a JulianDate.
    • Numerous documentation improvements.
  • Bug Fixes
    • Fixed a bug in the Satellite Tracker demo application that could cause it to fail to invoke Google Earth when exporting KML.
    • Fixed a bug in StkEphemerisFile that caused it to throw an exception when encountering an .E file with comments.
    • Several Ellipsoid methods now check to see if they are operating on a point that is very close to the center of the ellipsoid and throw an exception if this is the case. Previously, these methods could, in rare situations, get stuck in an endless loop.
AGI Components 2008 r6
  • New Features
    • Evaluators now have overloaded Evaluate methods that sample the evaluator at a fixed step over an entire interval. The sampling is automatically performed in multiple threads, as appropriate, for best performance on multi-core systems.
    • Added a new type, TerrainAlongLine, which provides a simple way to determine terrain obscuration between two points.
    • Added GTOPO30Terrain to read terrain data in the GTOPO30 format.
    • Added a DegreesMinutesSeconds type to work with angles represented as these three components.
  • Improvements
    • The StartAngle and StopAngle properties of CircularAccessConstraint are now settable directly.
    • Made it much easier to construct a PointInterpolator to interpolate over a set of position and velocity data. New constructors accept the required information directly rather than requiring the construction of several additional objects.
    • Simplified the use of LagrangePolynomialApproximation and HermitePolynomialApproximation by adding InterpolateWithDegree methods. These methods interpolate over an appropriate subset of the data, chosen based on the degree of interpolation and the x-value at which to interpolate.
    • GeometryTransformer.ObservePoint is now smarter about avoiding unnecessary transformations. In particular, it will now perform only a trivial operation if asked to observe a point in a reference frame that has that point as its origin.
    • SatelliteGlobalUserRangeError now exposes clock phase error.
    • Numerous documentation improvements.
  • Bug Fixes
    • StkEphemerisFile no longer fails with an exception when reading a .E file with covariance data.
    • Fixed a problem where TerrainLineOfSightConstraint could miss obstructing terrain when the two objects are far apart and the "lower" object is in a very flat region of terrain.
    • Fixed a problem where an EllipsoidRhumbLine could travel the long way around the ellipsoid.
    • The RINEX file readers now allow blanks, representing data that was unknown when the files were created. Previously, the readers threw an exception when they encountered a blank.
    • Fixed a problem in NgaDigitalTerrainElevationData that caused the reader to report unknown heights for certain cells even though the cells existed and had valid data.
AGI Components 2008 r5
  • Breaking Changes
    • Please contact us at support@agi.com and we will be glad to help you update your existing code to work with this release.
    • Custom access constraints written for previous releases will not work in this release.
    • Classes implementing IFunctionSamplingStrategy are now also required to implement the methods of IThreadAware.
  • New Features
    • A new library has been added, Spatial Analysis Library. It provides several major new capabilities:
      • Define a set of assets that can cover a region. An asset can be a spacecraft, aircraft, constellation, chain, or any boolean combination of these.
      • Define and discretize a region using one of several gridding algorithms.
      • Determine the coverage of the region by the assets.
      • Compute statistical information (Figures of Merit) related to the coverage of the region.
      Effectively, Spatial Analysis Library brings many of the capabilities of STK/Coverage to AGI Components. For more information, see the Coverage overview topic.
    • Access Queries enable the modeling of sophisticated intervisibility problems involving any number of objects. Access constraints on one or many objects can be combined using boolean operators such as And, Or, Not, AtLeastN, AtMostN, and ExactlyN. Access queries can be used to model a chain and will account for light-time delay between each hop. Access queries bring many of the capabilities of the STK Chain and Constellation objects to AGI Components, and in fact enable many use cases that STK cannot support.
    • The Iau2000Orientation and Iau2006Orientation types now provide the orientation of all of the major planets, Earth's Moon, and the Sun. Previously only the Sun and Earth's Moon were available.
  • Improvements
    • Numerous documentation improvements.
    • GlobalPositioningSystemDate now has a constructor that allows an instance to be created directly from a DateTime.
  • Bug Fixes
    • Previously, EllipsoidGeodesic could get stuck in an endless loop when given certain ambiguous cases. Now, it will instead throw an exception explaining the problem.
    • StkEphemerisFile and StkAttitudeFile now provide an interpolator matching the default used by STK even if the source file does not explicitly specify an interpolator.
    • The GPSNavAccuracyWebServiceJavaClient example now includes the necessary Eclipse project files.
    • Fixed a number of bugs in TimeIntervalCollection that could yield incorrect results for certain operations in unusual cases.
AGI Components 2008 r4
  • New Features
    • Several new navigation-related access constraints were added to Navigation Accuracy Library:
      • Dilution of precision (DOP) - DilutionOfPrecisionConstraint
      • Assessed navigation accuracy - NavigationAccuracyAssessedConstraint
      • Predicted navigation accuracy - NavigationAccuracyPredictedConstraint
    • Navigation Accuracy Library can now operate in a 'diligent' or 'lazy' mode when computing accuracy using Prediction Support File (PSF) data. Previously this option was only available when computing accuracy using Performance Assessment File (PAF) data.
    • Added an analytical model for the positions of the planets and Earth's moon based on a paper by Simon et al. This new model, found in Simon1994PlanetaryPositions, is now the default model used by all central bodies. This means that it is no longer necessary to load and configure JPL DE data before performing computations that depend on planetary positions. However, you may still want to use JPL DE data because it is more accurate than this analytical model.
  • Improvements
    • The orbital element types now take optional tolerance parameters, where appropriate. Also, these types now throw more reasonable and consistent exceptions when given invalid input.
    • Numerous documentation improvements.
  • Bug Fixes
    • Fixed a bug in PointVectorToPoint that resulted in one less than the highest requested derivative being returned. If no derivatives were requested, the returned position would be incorrect as well.
AGI Components 2008 r3
  • New Features
    • Support for two new terrain formats has been added to Terrain Analysis Library:
      • AGI World Terrain - AGIWorldTerrain
      • GEODAS Gridded Data Format (GRD98) - GeodasGriddedTerrain
    • STK's Facility and City databases are now supported using the StkFacilityDatabase and StkCityDatabase types.
    • TerrainAzimuthElevationMask.Compute now optionally takes an ITrackCalculationProgress instance which allows cancellation and progress reporting of the computation.
  • Improvements
    • The name has been changed from AGI Component Technology to AGI Components.
    • Numerous documentation improvements.
    • The CHM documentation will now remember the language selection made with the drop-down list in the upper right-hand corner.
    • This release of AGI Components is now tested against Mono v1.9.
    • Some changes to evaluators and evaluator groups have been implemented to improve performance and to simplify the task of writing a new evaluator. If you have written your own evaluator or if you are using evaluator groups to improve performance, please see the Evaluators and Evaluator Groups topic for a description of the changes.
  • Bug Fixes
    • Fixed a bug in EarthCentralBody.FixedFrame where values computed prior to the J2000 epoch were computed incorrectly. This could affect the transformation between the Earth Fixed and Earth Inertial reference frames.
    • Fixed several bugs in RinexNavigation that could cause certain files to fail to parse.
    • Fixed a bug in GpsRinexPropagator that could cause it to miss the first time step when evaluating.
    • Fixed a bug in the RectangularPyramid sensor type that could cause the enclosure function to compute NaNs in very specific circumstances.
    • Fixed a bug in AzimuthElevationRange.ConvertMotion that caused the range-rate to be computed incorrectly.
    • Fixed a bug in ScalarDihedralAngle where the dihedral angle would not be computed correctly if the vectors used to measure the angle were expressed in different axes.
AGI Component Technology 2008 r2
  • New Features
    • A new interface has been added, IIsTimeVarying, which allows evaluators to report whether or not they have a different value as a function of time. All evaluators implement this interface and by default they return true. For best performance, the IsTimeVarying method should be overridden to return false when the evaluator is known not to change with time.
    • PointEvaluator, AxesEvaluator, ScalarEvaluator, and VectorEvaluator now have a SimplifyIfNotTimeVarying method. By calling it in the GetEvaluator-type methods after obtaining the evaluator, the evaluator complexity can be substantially reduced. This is done for many of the evaluators included in the library and results in a substantial performance improvement when, for example, computing Access to a stationary facility.
    • EarthCentralBody now has a SlowChangingAxesUpdateInterval. By default, this interval is used by Iau1976Precession and Iau1980Nutation for their CacheSeconds value. It is still possible to set the CacheSeconds property explicitly to override this value. It is also used for updating pole wander during the Earth Fixed<->Inertial transformation. The default value is 0, indicating that the values should be computed every time, so previous results should be unaffected. However, increasing this value will result in a significant performance improvement for many use cases with little to no difference in results.
    • CartographicZoneConstraint now offers the ability to obtain the zone parameters from the constraint after they have been set. Previously they were write-only.
    • PerformanceAssessmentFile now has a GetSatelliteGlobalUserRangeErrorEvaluator method that can be used to obtain global URE.
    • A new service interface has been added, IGpsPrnService, which allows the user to obtain the PRN associated with a GPS satellite. GpsSatelliteExtension provides this service.
    • SatelliteOutageFile now has several FindOutages methods to find the outages corresponding to a particular PRN or interval.
  • Improvements
    • CentralBodyObstructionConstraint will now yield better performance when not considering light-time delay.
    • The documentation has been improved in several places.
    • The performance of Dilution of Precision (DOP) and RAIM calculations has been substantially improved.
  • Bug Fixes
    • Fixed a serious race condition in TranslationalMotionInterpolator and RotationalMotionInterpolator that could cause them to report wrong numbers when used from multiple threads simultaneously even after doing a CopyForAnotherThread.
    • Fixed a serious race condition in DefaultAccessSamplingStrategy that could cause incorrect sampling of constraint functions during Access computations. The incorrect sampling could cause missed intervals of access or, under certain circumstances, unexpected exceptions.
    • AccessComputation now works correctly if ComputeIntervals is called with an open interval. Previously it threw an unexpected exception.
    • KeplerianElements and ModifiedKeplerianElements now verify that the inclination is within the valid range of 0 to Pi radians.
AGI Component Technology 2008 r1
The first release of AGI Component Technology!