Class TLcyShapeVisibilityAddOn


public class TLcyShapeVisibilityAddOn extends ALcyFormatAddOn
Add-on to calculate visibility between point observers and other point, lines or area shapes on Lightspeed maps. It provides the model and domain objects for the visibility calculations through the createBaseFormat(). To visualize the results, you need to plug in the TLcyLspShapeVisibilityFormatAddOn as well.

For visibility calculations on a GXY map, refer to TLcyVisibilityAddOn.

Since:
2019.1
  • Field Details

  • Constructor Details

    • TLcyShapeVisibilityAddOn

      public TLcyShapeVisibilityAddOn()
      Default constructor
  • Method Details

    • plugInto

      public void plugInto(ILcyLucyEnv aLucyEnv)
      Description copied from class: ALcyFormatAddOn

      Creates and plugs in the add-on's format.

      Overrides:
      plugInto in class ALcyFormatAddOn
      Parameters:
      aLucyEnv - the Lucy environment to plug into
      See Also:
    • unplugFrom

      public void unplugFrom(ILcyLucyEnv aLucyEnv)
      Description copied from class: ALcyFormatAddOn
      Unplugs the add-on's format.
      Overrides:
      unplugFrom in class ALcyFormatAddOn
      Parameters:
      aLucyEnv - the Lucy environment
      See Also:
    • createBaseFormat

      protected ALcyFormat createBaseFormat()
      Description copied from class: ALcyFormatAddOn

      Returns a new data format for this add-on. Override this method to extend the default format with new functionality.

      For example, to alter the icon of the layers of this format, you can decorate the layer factory created in the format:

      
       @Override
       protected ALcyFormat createBaseFormat() {
         return new ALcyFormatWrapper(super.createBaseFormat()){
           @Override
           protected ILcdGXYLayerFactory createGXYLayerFactory(){
             final ILcdGXYLayerFactory delegate = super.createGXYLayerFactory();
             return new ILcdGXYLayerFactory(){
               @Override
               public ILcdGXYLayer createGXYLayer(ILcdModel aModel){
                 ILcdGXYLayer layer = delegate.createGXYLayer(aModel);
                 if (layer != null){
                   ILcdIcon icon = ...;
                   layer.setIcon(icon);
                 }
                 return layer;
               }
             }
           }
         }
       }
       
      Specified by:
      createBaseFormat in class ALcyFormatAddOn
      Returns:
      a new format for this add-on
    • createFormatWrapper

      protected final ALcyFormat createFormatWrapper(ALcyFormat aBaseFormat)
      Description copied from class: ALcyFormatAddOn

      Returns a new data format wrapper for this add-on. A format wrapper extends the base format with aspects such as asynchronous painting, mutable file behavior, safe guarding, etc.

      Overriding this method of an existing add-on should be done with extreme care as add-ons typically rely on the wrappers that should be present (e.g. a safe guard).

      Specified by:
      createFormatWrapper in class ALcyFormatAddOn
      Parameters:
      aBaseFormat - the base format to wrap
      Returns:
      a new format for this add-on
      See Also:
    • createVisibilityCalculationPropertiesProvider

      protected ILcyVisibilityCalculationPropertiesProvider createVisibilityCalculationPropertiesProvider()

      Returns a provider for the properties used during the visibility calculations. This method is called once when the add-on is plugged in.

      You can override this method to return a custom instance, allowing you to return custom properties to influence how the visibility calculations are performed.

      The default implementation of this method creates an instance based on the settings specified in the configuration file of this add-on.

      Returns:
      a provider for the properties used during the visibility calculations.
    • createPointObserverShapeProvider

      protected Function<TLcdDomainObjectContext,TLcdShapeAltitudeContext<ILcdPoint>> createPointObserverShapeProvider()

      Returns a function used to calculate the ILcdPoint shape for an observer in the visibility calculations. The function receives the TLcdDomainObjectContext for the (candidate) observer domain object, and should return an ILcdPoint when the domain object is a valid observer, together with the altitude mode to interpret the Z-value of the point. If not, the function should return null.

      The point returned by the function:

      The returned function will be called multiple times for the same domain object context. For example when the domain object changes, the function will be re-triggered to obtain the new shape.

      When the function has returned a non-null point for a certain domain object context, it should return a non-null value on subsequent calls for the same domain object context.

      The default implementation of this method is based on the ALcdShape.fromDomainObject(Object) for deriving the shape and uses a heuristic for the coverage altitude mode.

      This method can also be called from a background thread.

      Returns:
      function to retrieve the ILcdPoint shape for an observer.
      Since:
      2020.1
    • createObserveeShapeProvider

      protected Function<TLcdDomainObjectContext,TLcdShapeAltitudeContext<ILcdShape>> createObserveeShapeProvider()

      Returns a function used to calculate the shape under observation in the visibility calculations. The function receives the TLcdDomainObjectContext for the (candidate) observee domain object, and should return an ILcdShape when the domain object is a valid observee, together with the altitude mode to interpret the Z-values of the shape. If not, the function should return null.

      The shape returned by the function:

      The returned function will be called multiple times for the same domain object context. For example when the domain object changes, the function will be re-triggered to obtain a new shape.

      When the function has returned a non-null value for a certain domain object context, it should return a non-null value on subsequent calls for the same domain object context.

      The default implementation of this method is based on the ALcdShape.fromDomainObject(Object) for deriving the shape and uses a heuristic for the coverage altitude mode.

      This method can also be called from a background thread.

      Returns:
      function to retrieve the shape for an observer.
      Since:
      2020.1
    • createTerrainAltitudeProvider

      protected ILcdAltitudeProvider createTerrainAltitudeProvider(ILcdView aView, double aCalculationStepSize, ILcdGeoReference aPreferredReference, ILcyLucyEnv aLucyEnv)

      Creates an ILcdAltitudeProvider that is used by the visibility calculations to retrieve the altitude of the terrain.

      The default implementation of this method returns an altitude provider using either the elevation of the painted terrain or the height data available in the models loaded on the map, depending on the value of the useModelElevationData property in the configuration file of this add-on.

      This method can also be called from a background thread.

      Parameters:
      aView - The view containing the line-of-sight. This can be used to access all the data that is loaded on the map.
      aCalculationStepSize - The step size that will be used for the calculation. It matches the ILcyVisibilityCalculationPropertiesProvider.VisibilityCalculationProperties.getCalculationStepSize().
      aPreferredReference - The reference that will be used the most to retrieve elevation values. Performance will improve if the returned altitude provider can provide elevation values for points expressed in this reference without additional transformations.
      aLucyEnv - The Lucy back-end
      Returns:
      The created altitude provider.
      Since:
      2020.1