Part 4:  C

6 Object class definitions

6.1 Introduction

6.1.1 Topics

Table 6.1 lists the topics in this clause.

Table 6.1 — Topics

6 Object class definitions

6.1 Introduction

6.1.1 Topics

6.1.2 Notational conventions

6.2 SRM abstract object method signatures

6.2.1 Overview

6.2.2 LifeCycleObject

SRM_Create

SRM_Destroy

6.2.3 BaseSRF

SRM_GetCSCode

SRM_GetORMCodes

SRM_GetSRFCodes

6.2.4 BaseSRF2D

SRM_ChangeCoordinate2DArraySRF

SRM_ChangeCoordinate2DArraySRFObject

SRM_ChangeCoordinate2DSRF

SRM_ChangeCoordinate2DSRFObject

SRM_CreateCoordinate2D

SRM_EuclideanDistance2D

SRM_Generating2D

SRM_GetCoordinate2DValues

SRM_InverseGenerating2D

6.2.5 BaseSRF3D

SRM_ChangeCoordinate3DArraySRF

SRM_ChangeCoordinate3DArraySRFObject

SRM_ChangeCoordinate3DSRF

SRM_ChangeCoordinate3DSRFObject

SRM_ChangeDirectionArraySRF

SRM_ChangeDirectionArraySRFObject

SRM_ChangeDirectionSRF

SRM_ChangeDirectionSRFObject

SRM_CreateCoordinate3D

SRM_CreateDirection

SRM_EuclideanDistance3D

SRM_Generating3D

SRM_GetCoordinate3DValues

SRM_GetDirectionValues

SRM_GetExtendedValidRegion

SRM_GetValidRegion

SRM_InverseGenerating3D

SRM_SetExtendedValidRegion

SRM_SetValidRegion

6.2.6 BaseSRFwithTangentPlaneSurface

SRM_AssociateSurfaceCoordinateTPS

SRM_CreateSurfaceCoordinateTPS

SRM_EuclideanDistanceTPS

SRM_GetSurfaceCoordinateValuesTPS

SRM_PromoteSurfaceCoordinateTPS

6.2.7 BaseSRFwithEllipsoidalHeight

SRM_AssociateSurfaceCoordinateEH

SRM_CreateLocalTangentSpaceEuclideanSRF

SRM_CreateSurfaceCoordinateEH

SRM_EuclideanDistanceEH

SRM_GeodesicDistance

SRM_GetSurfaceCoordinateValuesEH

SRM_PromoteSurfaceCoordinateEH

SRM_VerticalOffset

6.2.8 BaseMapProjection

SRM_ConvergenceOfTheMeridian

SRM_GetExtendedValidGeodeticRegion

SRM_GetValidGeodeticRegion

SRM_MapAzimuth

SRM_PointDistortion

SRM_SetExtendedValidGeodeticRegion

SRM_SetValidGeodeticRegion

6.3 SRM concrete object classes

6.3.1 Overview

6.3.2 Celestiocentric

SRM_CC_Create

SRM_CC_Method_List

SRM_Celestiocentric

6.3.3 Celestiodetic

SRM_CD_Create

SRM_CD_Method_List

SRM_Celestiodetic

6.3.4 Celestiomagnetic

SRM_CM_Create

SRM_CM_Method_List

SRM_Celestiomagnetic

6.3.5 Coordinate2D

SRM_Coordinate2D_Method_List

SRM_Coordinate2D

6.3.6 Coordinate3D

SRM_Coordinate3D_Method_List

SRM_Coordinate3D

6.3.7 Direction

SRM_Direction_Method_List

SRM_Direction

6.3.8 EquatorialInertial

SRM_EI_Create

SRM_EI_Method_List

SRM_EI_EquatorialInertial

6.3.9 EquidistantCylindrical

SRM_EC_Create

SRM_EC_GetSRFParameters

SRM_EC_Method_List

SRM_EquidistantCylindrical

6.3.10 HeliosphericAriesEcliptic

SRM_HAEC_Create

SRM_HAEC_Method_List

SRM_HeliosphericAriesEcliptic

6.3.11 HeliosphericEarthEcliptic

SRM_HEEC_Create

SRM_HEEC_Method_List

SRM_HeliosphericEarthEcliptic

6.3.12 HeliosphericEarthEquatorial

SRM_HEEQ_Create

SRM_HEEQ_Method_List

SRM_HeliosphericEarthEquatorial

6.3.13 LambertConformalConic

SRM_LCC_Create

SRM_LCC_GetSRFParameters

SRM_LCC_Method_List

SRM_LambertConformalConic

6.3.14 LocalSpaceAzimuthal

SRM_LSA_Create

SRM_LSA_Method_List

SRM_SRM_LocalSpaceAzimuthal

6.3.15 LocalSpacePolar

SRM_LSP_Create

SRM_LSP_Method_List

SRM_LocalSpacePolar

6.3.16 LocalSpaceRectangular2D

SRM_LSR_2D_Create

SRM_LSR_2D_GetSRFParameters

SRM_LSR_2D_Method_List

SRM_LocalSpaceRectangular2D

6.3.17 LocalSpaceRectangular3D

SRM_LSR_3D_Create

SRM_LSR_3D_GetSRFParameters

SRM_LSR_3D_Method_List

SRM_LocalSpaceRectangular3D

6.3.18 LocalTangentSpaceAzimuthalSpherical

SRM_LTSAS_Create

SRM_LTSAS_GetSRFParameters

SRM_LTSAS_Method_List

SRM_LocalTangentSpaceAzimuthalSpherical

6.3.19 LocalTangentSpaceCylindrical

SRM_LTSC_Create

SRM_LTSC_GetSRFParameters

SRM_LTSC_Method_List

SRM_LocalTangentSpaceCylindrical

6.3.20 LocalTangentSpaceEuclidean

SRM_LTSE_Create

SRM_LTSE_GetSRFParameters

SRM_LTSE_Method_List

SRM_LocalTangentSpaceEuclidean

6.3.21 LococentricEuclidean3D

SRM_LCE_3D_Create

SRM_LCE_3D_GetSRFParameters

SRM_LCE_3D_Method_List

SRM_LococentricEuclidean3D

6.3.22 Mercator

SRM_M_Create

SRM_M_GetSRFParameters

SRM_M_Method_List

SRM_Mercator

6.3.23 ObliqueMercatorSpherical

SRM_OMS_Create

SRM_OMS_GetSRFParameters

SRM_OMS_Method_List

SRM_ObliqueMercatorSpherical

6.3.24 Planetodetic

SRM_PD_Create

SRM_PD_Method_List

SRM_Planetodetic

6.3.25 PolarStereographic

SRM_PS_Create

SRM_PS_GetSRFParameters

SRM_PS_Method_List

SRM_PolarStereographic

6.3.26 Position2D

SRM_Position2D_Method_List

SRM_Position2D

6.3.27 Position3D

SRM_Position3D_Method_List

SRM_Position3D

6.3.28 SolarEcliptic

SRM_SEC_Create

SRM_SEC_Method_List

SRM_SolarEcliptic

6.3.29 SolarEquatorial

SRM_SEQ_Create

SRM_SEQ_Method_List

SRM_SolarEquatorial

6.3.30 SolarMagneticDipole

SRM_SMD_Create

SRM_SMD_Method_List

SRM_SolarMagneticDipole

6.3.31 SolarMagneticEcliptic

SRM_SME_Create

SRM_SME_Method_List

SRM_SolarMagneticEcliptic

6.3.32 SurfaceCoordinate

SRM_SurfaceCoordinate_Method_List

SRM_SurfaceCoordinate

6.3.33 TransverseMercator

SRM_TM_Create

SRM_TM_GetSRFParameters

SRM_TM_Method_List

SRM_TransverseMercator

6.4 Creation function for standard SRFs

6.4.1 Overview

6.4.2 CreateSRFSetMember

SRM_CreateSRFSetMember

6.4.3 CreateStandardSRF

SRM_CreateStandardSRF

6.5 Query functions

6.5.1 Overview

6.5.2 QueryORMSupport

SRM_QueryORMSupport

6.5.3 QuerySRFTSupport

SRM_QuerySRFTSupport

6.1.2 Notational conventions

The binding of each SRM concrete object method signature is bound as depicted in the following template:

SRM_CBindingMethodName

Abstract SRM API object method:  AbstractMethodName

typedef ReturnValueDataType SRM_CBindingMethodName (

 

Parameter0DataType

parameter_0_name,

/* parameter_0_comment */

 

Parameter1DataType

parameter_1_name,

/* parameter_1_comment */

 

• • •

 

 

 

ParameterNDataType

parameter_N_name

/* parameter_N_comment */

};

The SRM C binding method name is formed by a sentinal “SRM_” followed by the name without spaces and with words capitalized. The SRM abstract method name is the name used in ISO/IEC 18026. Parameter 0 of a method is always a pointer to the associated object.

Independent functions (including all Create functions) are bound in a manner similar to that used by object methods except that Parameter 0 is not constrained to be a pointer to the current object. In most cases, the independent functions are producing an object instance.

The return value data type and parameter data types may be found in Clause 5 of this part of ISO/IEC 18042 or may be a standard C data type (e.g., void).

The parameter names are formed by using lower case words separated by underscores.

To the right of each parameter declaration is an optional C comment field. If the comment begins with “OUT”, it means the argument is used as an output parameter; the implementation returns data to the application through this argument. Arguments without “OUT” are input parameters.

Each SRM concrete object class is bound to a data type that is specified as a structure containing a pointer to its state and another pointer to its list of methods as depicted in the following template:

SRM_CBindingObjectClassName

Abstract SRM API object class:  AbstractObjectClassName

typedef struct {

void

*state;

Method_List_Data_Type

*methods;

} SRM_CBindingObjectClassName;

The state is an implementation-dependent private data type that is accessed solely through the methods in the method list.

Each method list for a SRM concrete object class is a data type that is specified as a structure containing a pointer to each method supported by the object class as depicted in the following template:

SRM_CBindingObjectClassNameMethodList

Abstract SRM API object class method list:  AbstractObjectClassName

typedef struct {

Method_0_Data_Type

*method_0_name;

Method_1_Data_Type

*method_1_name;

• • •

 

Method_N_Data_Type

*method_N_name;

} SRM_CBindingObjectClassNameMethodList;

NOTE  Instances of this data type are normally populated by the implementation during object creation.

6.2  SRM abstract object method signatures

6.2.1 Overview

Method signatures for SRM abstract objects are specified here for use when specifying concrete object classes (see 6.3 SRM concrete object classes).

6.2.2 LifeCycleObject

SRM_Create

Abstract SRM API function:  Create

SRM_Status_Code SRM_Create (

 

SRM_Object_Reference

new_object

/* OUT create object */

);

SRM_Destroy

Abstract SRM API object method:  Destroy

typedef SRM_Status_Code SRM_Destroy (

 

SRM_Object_Reference

this_object

/* object to destroy*/

);

6.2.3 BaseSRF

SRM_GetCSCode

Abstract SRM API object method:  GetCSCode

typedef SRM_Status_Code SRM_GetCSCode (

 

SRM_Object_Reference

this_object,

 

 

SRM_CS_Code

*cs_code

/* OUT cs code */

);

SRM_GetORMCodes

Abstract SRM API object method:  GetORMCodes

typedef SRM_Status_Code SRM_GetORMCodes (

 

SRM_Object_Reference

this_object,

 

 

SRM_ORM_Code

*orm_code,

/* OUT */

 

SRM_RT_Code

*rt_code

/* OUT */

);

SRM_GetSRFCodes

Abstract SRM API object method:  GetSRFCodes

typedef SRM_Status_Code SRM_GetSRFCodes (

 

SRM_Object_Reference

this_object,

 

 

SRM_SRFT_Code

*srft_code,

/* OUT srf template code */

 

SRM_SRF_Code

*srf_code,

/* OUT srf code */

 

SRM_SRFS_Code_Info

*srfs_code_info

/* OUT srf set code info */

);

6.2.4 BaseSRF2D

SRM_ChangeCoordinate2DArraySRF

Abstract SRM API object method:  ChangeCoordinate2DArraySRF

typedef SRM_Status_Code SRM_ChangeCoordinate2DArraySRF (

 

SRM_Object_Reference

this_object,

 

const

SRM_Object_Reference

source_srf,

 

const

SRM_Coordinate2D_Array

*source_coordinate_array,

 

 

SRM_Coordinate2D_Array

*target_coordinate_array,

/* OUT */

 

SRM_Integer_Positive

*index

/* OUT */

);

SRM_ChangeCoordinate2DArraySRFObject

Abstract SRM API object method:  ChangeCoordinate2DArraySRFObject

typedef SRM_Status_Code SRM_ChangeCoordinate2DArraySRFObject (

 

SRM_Object_Reference

this_object,

 

const

SRM_Object_Reference

source_srf,

 

const

SRM_Coordinate2D_Array

*source_coordinate_array,

 

const

SRM_ORM_Transformation_2D_Parameters

*h_st,

 

 

SRM_Coordinate2D_Array

*target_coordinate_array,

/* OUT */

 

SRM_Integer_Positive

*index

/* OUT */

);

SRM_ChangeCoordinate2DSRF

Abstract SRM API object method:  ChangeCoordinate2DSRF

typedef SRM_Status_Code SRM_ChangeCoordinate2DSRF (

 

SRM_Object_Reference

this_object,

 

const

SRM_Object_Reference

source_srf,

 

const

SRM_Coordinate2D

*source_coordinate,

 

 

SRM_Coordinate2D

*target_coordinate

/* OUT */

);

SRM_ChangeCoordinate2DSRFObject

Abstract SRM API object method:  ChangeCoordinate2DSRFObject

typedef SRM_Status_Code SRM_ChangeCoordinate2DSRFObject (

 

SRM_Object_Reference

this_object,

 

const

SRM_Object_Reference

source_srf,

 

const

SRM_Coordinate2D

*source_coordinate,

 

const

SRM_ORM_Transformation_2D_Parameters

*h_st,

 

 

SRM_Coordinate2D

*target_coordinate

/* OUT */

);

SRM_CreateCoordinate2D

Abstract SRM API object method:  CreateCoordinate2D

typedef SRM_Status_Code SRM_CreateCoordinate2D (

 

SRM_Object_Reference

this_object,

 

 

SRM_Long_Float

first_coordinate_component,

 

 

SRM_Long_Float

second_coordinate_component,

 

 

SRM_Coordinate2D

*new_coordinate

/* OUT */

);

SRM_EuclideanDistance2D

Abstract SRM API object method:  EuclideanDistance

typedef SRM_Status_Code SRM_EuclideanDistance2D (

 

SRM_Object_Reference

this_object,

 

const

SRM_Coordinate2D

*source_coordinate,

 

const

SRM_Coordinate2D

*target_coordinate

 

 

SRM_Long_Float

*distance

/* OUT */

);

SRM_Generating2D

Abstract SRM API object method:  Generating2D

typedef SRM_Status_Code SRM_Generating2D (

 

SRM_Object_Reference

this_object,

 

const

SRM_Coordinate2D

*coordinate,

 

 

SRM_Position2D

*position

/* OUT */

);

SRM_GetCoordinate2DValues

Abstract SRM API object method:  GetCoordinate2DValues

typedef SRM_Status_Code SRM_GetCoordinate2DValues (

 

SRM_Object_Reference

this_object,

 

const

SRM_Coordinate2D

*coordinate,

 

 

SRM_Long_Float

*first_coordinate_component,

/* OUT */

 

SRM_Long_Float

*second_coordinate_component

/* OUT */

);

SRM_InverseGenerating2D

Abstract SRM API object method:  InverseGenerating2D

typedef SRM_Status_Code SRM_InverseGenerating2D (

 

SRM_Object_Reference

this_object,

 

const

SRM_Position2D

*position,

 

 

SRM_Coordinate2D

*coordinate

/* OUT */

);

6.2.5 BaseSRF3D

SRM_ChangeCoordinate3DArraySRF

Abstract SRM API object method:  ChangeCoordinate3DArraySRF

typedef SRM_Status_Code SRM_ChangeCoordinate3DArraySRF (

 

SRM_Object_Reference

this_object,

 

const

SRM_Object_Reference

source_srf,

 

const

SRM_Coordinate3D_Array

*source_coordinate_array,

 

 

SRM_Coordinate3D_Array

*target_coordinate_array,

/* OUT */

 

SRM_Integer_Positive

*index,

/* OUT */

 

SRM_Coordinate_Valid_Region_Array

*region_array

/* OUT */

);

SRM_ChangeCoordinate3DArraySRFObject

Abstract SRM API object method:  ChangeCoordinate3DArraySRFObject

typedef SRM_Status_Code SRM_ChangeCoordinate3DArraySRFObject (

 

SRM_Object_Reference

this_object,

 

const

SRM_Object_Reference

source_srf,

 

const

SRM_Coordinate3D_Array

*source_coordinate_array,

 

const

SRM_ORM_Transformation_3D_Parameters

*h_st,

 

 

SRM_Coordinate3D_Array

*target_coordinate_array,

/* OUT */

 

SRM_Integer_Positive

*index,

/* OUT */

 

SRM_Coordinate_Valid_Region_Array

*region_array

/* OUT */

);

SRM_ChangeCoordinate3DSRF

Abstract SRM API object method:  ChangeCoordinate3DSRF

typedef SRM_Status_Code SRM_ChangeCoordinate3DSRF (

 

SRM_Object_Reference

this_object,

 

const

SRM_Object_Reference

source_srf,

 

const

SRM_Coordinate3D

*source_coordinate,

 

 

SRM_Coordinate3D

*target_coordinate,

/* OUT */

 

SRM_Coordinate_Valid_Region

*region

/* OUT */

);

SRM_ChangeCoordinate3DSRFObject

Abstract SRM API object method:  ChangeCoordinate3DSRFObject

typedef SRM_Status_Code SRM_ChangeCoordinate3DSRFObject (

 

SRM_Object_Reference

this_object,

 

const

SRM_Object_Reference

source_srf,

 

const

SRM_Coordinate3D

*source_coordinate,

 

const

SRM_ORM_Transformation_3D_Parameters

*h_st,

 

 

SRM_Coordinate3D

*target_coordinate,

/* OUT */

 

SRM_Coordinate_Valid_Region

*region

/* OUT */

);

SRM_ChangeDirectionArraySRF

Abstract SRM API object method:  ChangeDirectionArraySRF

typedef SRM_Status_Code SRM_ChangeDirectionArraySRF (

 

SRM_Object_Reference

this_object,

 

const

SRM_Object_Reference

source_srf,

 

const

SRM_Direction_Array

*source_direction_array,

 

 

SRM_Direction_Array

*target_direction_array,

/* OUT */

 

SRM_Integer_Positive

*index,

/* OUT */

 

SRM_Coordinate_Valid_Region_Array

*ref_coord_region_array

/* OUT */

);

SRM_ChangeDirectionArraySRFObject

Abstract SRM API object method:  ChangeDirectionArraySRFObject

typedef SRM_Status_Code SRM_ChangeDirectionArraySRFObject (

 

SRM_Object_Reference

this_object,

 

const

SRM_Object_Reference

source_srf,

 

const

SRM_Direction_Array

*source_direction_array,

 

const

SRM_ORM_Transformation_3D_Parameters

*h_st,

 

 

SRM_Direction_Array

*target_direction_array,

/* OUT */

 

SRM_Integer_Positive

*index,

/* OUT */

 

SRM_Coordinate_Valid_Region_Array

*ref_coord_region_array

/* OUT */

);

SRM_ChangeDirectionSRF

Abstract SRM API object method:  ChangeDirectionSRF

typedef SRM_Status_Code SRM_ChangeDirectionSRF (

 

SRM_Object_Reference

this_object,

 

const

SRM_Object_Reference

source_srf,

 

const

SRM_Direction

*source_direction,

 

 

SRM_Direction

*target_direction,

/* OUT */

 

SRM_Coordinate_Valid_Region

*ref_coord_region

/* OUT */

);

SRM_ChangeDirectionSRFObject

Abstract SRM API object method:  ChangeDirectionSRFObject

typedef SRM_Status_Code SRM_ChangeDirectionSRFObject (

 

SRM_Object_Reference

this_object,

 

const

SRM_Object_Reference

source_srf,

 

const

SRM_Direction

*source_direction,

 

const

SRM_ORM_Transformation_3D_Parameters

*h_st,

 

 

SRM_Direction

*target_direction,

/* OUT */

 

SRM_Coordinate_Valid_Region

*ref_coord_region

/* OUT */

);

 

SRM_CreateCoordinate3D

Abstract SRM API object method:  CreateCoordinate3D

typedef SRM_Status_Code SRM_CreateCoordinate3D (

 

SRM_Object_Reference

this_object,

 

 

SRM_Long_Float

first_coordinate_component,

 

 

SRM_Long_Float

second_coordinate_component,

 

 

SRM_Long_Float

third_coordinate_component,

 

 

SRM_Coordinate3D

*new_coordinate

/* OUT */

);

SRM_CreateDirection

Abstract SRM API object method:  CreateDirection

typedef SRM_Status_Code SRM_CreateDirection (

 

SRM_Object_Reference

this_object,

 

const

SRM_Coordinate3D

*reference_coordinate,

 

 

SRM_Long_Float

first_direction_component,

 

 

SRM_Long_Float

second_direction_component,

 

 

SRM_Long_Float

third_direction_component,

 

 

SRM_Direction

*new_direction

/* OUT */

);

SRM_EuclideanDistance3D

Abstract SRM API object method:  EuclideanDistance

typedef SRM_Status_Code SRM_EuclideanDistance3D (

 

SRM_Object_Reference

this_object,

 

const

SRM_Coordinate3D

*point1_coordinate,

 

const

SRM_Coordinate3D

*point2_coordinate,

 

 

SRM_Long_Float

*distance

/* OUT */

);

SRM_Generating3D

Abstract SRM API object method:  Generating3D

typedef SRM_Status_Code SRM_Generating3D (

 

SRM_Object_Reference

this_object,

 

const

SRM_Coordinate3D

*coordinate,

 

 

SRM_Position3D

*position

/* OUT */

);

SRM_GetCoordinate3DValues

Abstract SRM API object method:  GetCoordinate3DValues

typedef SRM_Status_Code SRM_GetCoordinate3DValues (

 

SRM_Object_Reference

this_object,

 

const

SRM_Coordinate3D

*coordinate,

 

 

SRM_Long_Float

*first_coordinate_component,

/* OUT */

 

SRM_Long_Float

*second_coordinate_component,

/* OUT */

 

SRM_Long_Float

*third_coordinate_component

/* OUT */

);

SRM_GetDirectionValues

Abstract SRM API object method:  GetDirectionValues

typedef SRM_Status_Code SRM_GetDirectionValues (

 

SRM_Object_Reference

this_object,

 

const

SRM_Direction

*direction,

 

 

SRM_Coordinate3D

*reference_coordinate,

/* OUT */

 

SRM_Long_Float

*first_direction_component,

/* OUT */

 

SRM_Long_Float

*second_direction_component,

/* OUT */

 

SRM_Long_Float

*third_direction_component

/* OUT */

);

SRM_GetExtendedValidRegion

Abstract SRM API object method:  GetExtendedValidRegion

typedef SRM_Status_Code SRM_GetExtendedValidRegion (

 

SRM_Object_Reference

this_object,

 

 

SRM_Integer

component_identifier,

 

 

SRM_Interval_Type

*interval_type,

/* OUT */

 

SRM_Long_Float

*extended_lower_bound,

/* OUT */

 

SRM_Long_Float

*lower_bound,

/* OUT */

 

SRM_Long_Float

*upper_bound,

/* OUT */

 

SRM_Long_Float

*extended_upper_bound

/* OUT */

);

SRM_GetValidRegion

Abstract SRM API object method:  GetValidRegion

typedef SRM_Status_Code SRM_GetValidRegion (

 

SRM_Object_Reference

this_object,

 

 

SRM_Integer

component_identifier,

 

 

SRM_Interval_Type

*interval_type,

/* OUT */

 

SRM_Long_Float

*lower_bound,

/* OUT */

 

SRM_Long_Float

*upper_bound

/* OUT */

);

SRM_InverseGenerating3D

Abstract SRM API object method:  InverseGenerating3D

typedef SRM_Status_Code SRM_InverseGenerating3D (

 

SRM_Object_Reference

this_object,

 

const

SRM_Position3D

*position,

 

 

SRM_Coordinate3D

*coordinate,

/* OUT */

 

SRM_Coordinate_Valid_Region

*region

/* OUT */

);

SRM_SetExtendedValidRegion

Abstract SRM API object method:  SetExtendedValidRegion

typedef SRM_Status_Code SRM_SetExtendedValidRegion (

 

SRM_Object_Reference

this_object,

 

 

SRM_Integer

component_identifier,

 

 

SRM_Interval_Type

interval_type,

 

 

SRM_Long_Float

extended_lower_bound,

 

 

SRM_Long_Float

lower_bound,

 

 

SRM_Long_Float

upper_bound,

 

 

SRM_Long_Float

extended_upper_bound

 

);

SRM_SetValidRegion

Abstract SRM API object method:  SetValidRegion

typedef SRM_Status_Code SRM_SetValidRegion (

 

SRM_Object_Reference

this_object,

 

 

SRM_Integer

component_identiifer,

 

 

SRM_Interval_Type

interval_type,

 

 

SRM_Long_Float

lower_bound,

 

 

SRM_Long_Float

upper_bound

 

);

6.2.6 BaseSRFwithTangentPlaneSurface

SRM_AssociateSurfaceCoordinateTPS

Abstract SRM API object method:  AssociateSurfaceCoordinate

typedef SRM_Status_Code SRM_AssociateSurfaceCoordinateTPS (

 

SRM_Object_Reference

this_object,

 

const

SRM_Coordinate3D

*coordinate,

 

 

SRM_SurfaceCoordinate

*on_surface_coordinate

/* OUT */

);

SRM_CreateSurfaceCoordinateTPS

Abstract SRM API object method:  CreateSurfaceCoordinate

typedef SRM_Status_Code SRM_CreateSurfaceCoordinateTPS (

 

SRM_Object_Reference

this_object,

 

 

SRM_Long_Float

first_coordinate_component,

 

 

SRM_Long_Float

second_coordinate_component,

 

 

SRM_SurfaceCoordinate

*new_coordinate

/* OUT */

);

SRM_EuclideanDistanceTPS

Abstract SRM API object method:  EuclideanDistance

typedef SRM_Status_Code SRM_EuclideanDistanceTPS (

 

SRM_Object_Reference

this_object,

 

const

SRM_SurfaceCoordinate

*point1_coordinate,

 

const

SRM_SurfaceCoordinate

*point2_coordinate,

 

 

SRM_Long_Float

*distance

/* OUT */

);

SRM_GetSurfaceCoordinateValuesTPS

Abstract SRM API object method:  GetSurfaceCoordinateValues

typedef SRM_Status_Code SRM_GetSurfaceCoordinateValuesTPS (

 

SRM_Object_Reference

this_object,

 

const

SRM_SurfaceCoordinate

*coordinate,

 

 

SRM_Long_Float

*first_coordinate_component,

/* OUT */

 

SRM_Long_Float

*second_coordinate_component

/* OUT */

);

SRM_PromoteSurfaceCoordinateTPS

Abstract SRM API object method:  PromoteSurfaceCoordinate

typedef SRM_Status_Code SRM_PromoteSurfaceCoordinateTPS (

 

SRM_Object_Reference

this_object,

 

const

SRM_SurfaceCoordinate

*surface_coordinate,

 

 

SRM_Coordinate3D

*coordinate

/* OUT */

);

6.2.7 BaseSRFwithEllipsoidalHeight

SRM_AssociateSurfaceCoordinateEH

Abstract SRM API object method:  AssociateSurfaceCoordinate

typedef SRM_Status_Code SRM_AssociateSurfaceCoordinateEH (

 

SRM_Object_Reference

this_object,

 

const

SRM_Coordinate3D

*coordinate,

 

 

SRM_SurfaceCoordinate

*on_surface_coordinate

/* OUT */

);

SRM_CreateLocalTangentSpaceEuclideanSRF

Abstract SRM API object method:  CreateLocalTangentSpaceEuclideanSRF

typedef SRM_Status_Code SRM_CreateLocalTangentSpaceEuclideanSRF (

 

SRM_Object_Reference

this_object,

 

const

SRM_SurfaceCoordinate

*surface_coordinate,

 

 

SRM_Long_Float

azimuth,

 

 

SRM_Long_Float

false_x_origin,

 

 

SRM_Long_Float

false_y_origin,

 

 

SRM_Long_Float

offset_height,

 

 

SRM_LocalTangentSpaceEuclidean

*local_tangent_Euclidean_srf

/* OUT */

);

SRM_CreateSurfaceCoordinateEH

Abstract SRM API object method:  CreateSurfaceCoordinate

typedef SRM_Status_Code SRM_CreateSurfaceCoordinateEH (

 

SRM_Object_Reference

this_object,

 

 

SRM_Long_Float

first_coordinate_component,

 

 

SRM_Long_Float

second_coordinate_component,

 

 

SRM_SurfaceCoordinate

*new_coordinate

/* OUT */

);

SRM_EuclideanDistanceEH

Abstract SRM API object method:  EuclideanDistance

typedef SRM_Status_Code SRM_EuclideanDistanceEH (

 

SRM_Object_Reference

this_object,

 

const

SRM_SurfaceCoordinate

*point1_coordinate,

 

const

SRM_SurfaceCoordinate

*point2_coordinate,

 

 

SRM_Long_Float

*distance

/* OUT */

);

SRM_GeodesicDistance

Abstract SRM API object method:  GeodesicDistance

typedef SRM_Status_Code SRM_GeodesicDistance (

 

SRM_Object_Reference

this_object,

 

const

SRM_SurfaceCoordinate

*point1_coordinate,

 

const

SRM_SurfaceCoordinate

*point2_coordinate,

 

 

SRM_Long_Float

*distance

/* OUT */

);

SRM_GetSurfaceCoordinateValuesEH

Abstract SRM API object method:  GetSurfaceCoordinateValues

typedef SRM_Status_Code SRM_GetSurfaceCoordinateValuesEH (

 

SRM_Object_Reference

this_object,

 

const

SRM_SurfaceCoordinate

*coordinate,

 

 

SRM_Long_Float

*first_coordinate_component,

/* OUT */

 

SRM_Long_Float

*second_coordinate_component

/* OUT */

);

SRM_PromoteSurfaceCoordinateEH

Abstract SRM API object method:  PromoteSurfaceCoordinate

typedef SRM_Status_Code SRM_PromoteSurfaceCoordinateEH (

 

SRM_Object_Reference

this_object,

 

const

SRM_SurfaceCoordinate

*surface_coordinate,

 

 

SRM_Coordinate3D

*coordinate

/* OUT */

);

SRM_VerticalOffset

Abstract SRM API object method:  VerticalOffset

typedef SRM_Status_Code SRM_VerticalOffset (

 

SRM_Object_Reference

this_object,

 

 

SRM_DSS_Code

dss_code,

 

const

SRM_SurfaceCoordinate

*surface_coordinate,

 

 

SRM_Long_Float

*separation

/* OUT */

);

6.2.8 BaseSRFMapProjection

SRM_ConvergenceOfTheMeridian

Abstract SRM API object method:  ConvergenceOfTheMeridian

typedef SRM_Status_Code SRM_ConvergenceOfTheMeridian (

 

SRM_Object_Reference

this_object,

 

const

SRM_SurfaceCoordinate

*surface_coordinate,

 

 

SRM_Long_Float

*gamma

/* OUT */

);

SRM_GetExtendedValidGeodeticRegion

Abstract SRM API object method:  GetExtendedValidGeodeticRegion

typedef SRM_Status_Code SRM_GetExtendedValidGeodeticRegion (

 

SRM_Object_Reference

this_object,

 

 

SRM_Integer

component_identifier,

 

 

SRM_Interval_Type

*interval_type,

/* OUT */

 

SRM_Long_Float

*extended_lower_bound,

/* OUT */

 

SRM_Long_Float

*lower_bound,

/* OUT */

 

SRM_Long_Float

*upper_bound,

/* OUT */

 

SRM_Long_Float

*extended_upper_bound

/* OUT */

);

SRM_GetValidGeodeticRegion

Abstract SRM API object method:  GetValidGeodeticRegion

typedef SRM_Status_Code SRM_GetValidGeodeticRegion (

 

SRM_Object_Reference

this_object,

 

 

SRM_Integer

component_identifier,

 

 

SRM_Interval_Type

*interval_type,

/* OUT */

 

SRM_Long_Float

*lower_bound,

/* OUT */

 

SRM_Long_Float

*upper_bound

/* OUT */

);

SRM_MapAzimuth

Abstract SRM API object method:  MapAzimuth

typedef SRM_Status_Code SRM_MapAzimuth (

 

SRM_Object_Reference

this_object,

 

const

SRM_SurfaceCoordinate

*point1_coordinate,

 

const

SRM_SurfaceCoordinate

*point2_coordinate,

 

 

SRM_Long_Float

*azimuth

/* OUT */

);

SRM_PointDistortion

Abstract SRM API object method:  PointDistortion

typedef SRM_Status_Code SRM_PointDistortion (

 

SRM_Object_Reference

this_object,

 

const

SRM_SurfaceCoordinate

*surface_coordinate,

 

 

SRM_Long_Float

*distortion

/* OUT */

);

SRM_SetExtendedValidGeodeticRegion

Abstract SRM API object method:  SetExtendedValidGeodeticRegion

typedef SRM_Status_Code SRM_SetExtendedValidGeodeticRegion (

 

SRM_Object_Reference

this_object,

 

 

SRM_Integer

component_identifier,

 

 

SRM_Interval_Type

interval_type,

 

 

SRM_Long_Float

extended_lower_bound,

 

 

SRM_Long_Float

lower_bound,

 

 

SRM_Long_Float

upper_bound,

 

 

SRM_Long_Float

extended_upper_bound

 

);

SRM_SetValidGeodeticRegion

Abstract SRM API object method:  SetValidGeodeticRegion

typedef SRM_Status_Code SRM_SetValidGeodeticRegion (

 

SRM_Object_Reference

this_object,

 

 

SRM_Integer

component_identifier,

 

 

SRM_Interval_Type

interval_type,

 

 

SRM_Long_Float

lower_bound,

 

 

SRM_Long_Float

upper_bound

 

);

6.3 SRM concrete object classes

6.3.1 Overview

Concrete SRM objects are defined by a combination of methods and functions defined for the abstract object classes as specified in 6.2 SRM Abstract object method signatures and new methods and data types specified for each concrete object class. Objects may be created by using the Create function that accompanies each object class. The Create function accepts parameters that specify the characteristics of an object and returns a pointer to the object that is created. Object classes not specifying a Create function use that specified in 6.2.2 LifeCycleObject.

6.3.2 Celestiocentric

The following function specifies the binding of the factory for the Celestiocentric object class:

SRM_CC_Create

Abstract SRM API function:  Create

SRM_Status_Code SRM_CC_Create (

 

SRM_ORM_Code

orm_code,

 

 

SRM_RT_Code

rt_code,

 

 

SRM_Celestiocentric

*new_srf

/* OUT */

);

The following data type is used to specify the methods of the Celestiocentric object class:

SRM_CC_Method_List

Abstract SRM API object class:  Celestiocentric

typedef struct {

SRM_ChangeCoordinate3DArraySRF

*ChangeCoordinate3DArraySRF;

SRM_ChangeCoordinate3DArraySRFObject

*ChangeCoordinate3DArraySRFObject;

SRM_ChangeCoordinate3DSRF

*ChangeCoordinate3DSRF;

SRM_ChangeCoordinate3DSRFObject

*ChangeCoordinate3DSRFObject;

SRM_ChangeDirectionArraySRF

*ChangeDirectionArraySRF;

SRM_ChangeDirectionArraySRFObject

*ChangeDirectionArraySRFObject;

SRM_ChangeDirectionSRF

*ChangeDirectionSRF;

SRM_ChangeDirectionSRFObject

*ChangeDirectionSRFObject;

SRM_CreateCoordinate3D

*CreateCoordinate3D;

SRM_CreateDirection

*CreateDirection;

SRM_Destroy

*Destroy;

SRM_EuclideanDistance3D

*EuclideanDistance3D;

SRM_Generating3D

*Generating3D;

SRM_GetCoordinate3DValues

*GetCoordinate3DValues;

SRM_GetCSCode

*GetCSCode;

SRM_GetDirectionValues

*GetDirectionValues;

SRM_GetExtendedValidRegion

*GetExtendedValidRegion;

SRM_GetORMCodes

*GetORMCodes;

SRM_GetSRFCodes

*GetSRFCodes;

SRM_GetValidRegion

*GetValidRegion;

SRM_InverseGenerating3D

*InverseGenerating3D;

SRM_SetExtendedValidRegion

*SetExtendedValidRegion;

SRM_SetValidRegion

*SetValidRegion;

} SRM_CC_Method_List;

The following record type specifies the binding of the Celestocentric object class:

SRM_Celestiocentric

Abstract SRM API object class:  Celestiocentric

typedef struct {

void

*state;

SRM_CC_Method_List

*methods;

} SRM_Celestiocentric;

6.3.3 Celestiodetic

The following function specifies the binding of the factory for the Celestiodetric object class:

SRM_CD_Create

Abstract SRM API function:  Create