SEDRIS Data Dictionary
-------------------------------------------------------------------------------

Class Name: Absolute Time

Definition:
 An instance of this DRM class specifies an absolute time
 (that is, Greenwich Mean Time (GMT), which is not relative to some
 other point in time).

 <Absolute Time> provides
 - a means to specify an absolute time (GMT) for metadata, and

 - a general-purpose mechanism for describing points in absolute
   (GMT) time.

Primary Page in DRM Diagram:
     20

Example:
 1. Consider a SEDRIS transmittal constructed from a historical
    database, in which the time at which an event happened is
    recorded as Oct 3 17:56:47 GMT 1994. In the SEDRIS transmittal,
    this information is specified by an <Absolute Time>
    instance with time_significance = SE_TIME_SIGNIF_OCCURRENCE,
    as follows.

    time_significance                = SE_TIME_SIGNIF_OCCURRENCE
    time_value.configuration         = SE_TIME_CFG_DATE_YMD_AND_TIME_HMS
    time_value.value.ymd_hms.year    = 1994
    time_value.value.ymd_hms.month   = SE_MONTH_OCTOBER
    time_value.value.ymd_hms.day     = 3
    time_value.value.ymd_hms.hour    = 17
    time_value.value.ymd_hms.minutes = 56
    time_value.value.ymd_hms.seconds = 47.0

 2. Consider a SEDRIS transmittal for which the data provider wishes
    to represent the date and time when the transmittal was created -
    in this example, Mar 23 15:18:33 GMT 2003. In this case, the
    data provider would create an <Absolute Time> instance
    with time_significance = SE_TIME_SIGNIF_CREATION_DATE and
    the other field values set appropriately, as follows.

    time_significance                = SE_TIME_SIGNIF_CREATION_DATE
    time_value.configuration         = SE_TIME_CFG_DATE_YMD_AND_TIME_HMS
    time_value.value.ymd_hms.year    = 2003
    time_value.value.ymd_hms.month   = SE_MONTH_MARCH
    time_value.value.ymd_hms.day     = 23
    time_value.value.ymd_hms.hour    = 15
    time_value.value.ymd_hms.minutes = 18
    time_value.value.ymd_hms.seconds = 33.0

    This <Absolute Time> instance would then be attached
    as a component of the transmittal's <Transmittal Root>.

 3. The date and time of observations.

FAQS:
     None.

Superclass: Time Point

Constraints:
     Publishable Object
     Legal Time Ranges

Component of (two-way) (inherited)
	zero or more Environment Root instances
	zero or more Time Constraints Data instances
	zero or one Transmittal Root instance

Component of (two-way)
	zero or more Absolute Time Interval instances
	zero or more Citation instances
	zero or more Process Step instances
	zero or more Relative Time instances
	zero or more Relative Time Interval instances

Inherited Field Elements:
    SE_Time_Significance time_significance;
   /*
    *  The time_significance field specifies the significance of
    *  the time information.
    */


Field Elements:
    SE_Time_Value time_value;
   /*
    *  The time_value field specifies the time value.
    */


-------------------------------------------------------------------------------

Class Name: Absolute Time Interval

Definition:
 An instance of this DRM class specifies an interval of time defined
 by an absolute (GMT) start time, specified by the <Absolute Time>
 component, and a duration, specified by the fields of the
 <Absolute Time Interval> instance itself.

 <Absolute Time Interval> provides
 - a means to specify a time interval in terms of absolute time (GMT)
   for metadata, and

 - a general-purpose mechanism for describing intervals specified in
   terms of absolute (GMT) time.

Primary Page in DRM Diagram:
     20

Example:
 1. Consider a SEDRIS transmittal for which the data provider
    is to specify the time period for which that transmittal
    is to be considered valid. To specify this information,
    the <Transmittal Root> of the transmittal has an
    <Absolute Time Interval> component for which
    time_significance is set to
    SE_TIME_SIGNIF_PERIOD_OF_CONTENT. The stop time
    specified by the <Absolute Time Interval> can be considered
    to be an "expiration date".

FAQS:
     None.

Superclass: Time Interval

Constraints:
     Publishable Object
     Legal Time Ranges
     Time Dependency
     Time Interval Calculation

Composed of (two-way)
	one Absolute Time instance 

Component of (two-way) (inherited)
	zero or more Environment Root instances
	zero or more Time Constraints Data instances
	zero or one Transmittal Root instance
	zero or more Season instances
	zero or more Sound Instance instances
	zero or more Source instances

Inherited Field Elements:
    SE_Time_Significance time_significance;
   /*
    *  The time_significance field specifies the significance of
    *  the time information.
    */


Field Elements:
    SE_Integer delta_days;
   /*
    *  The delta_days field specifies the number of days since the start of
    *  the given <Absolute Time Interval> instance. See constraints on this
    *  class for cases where this may be negative.
    */

    SE_Byte_Unsigned delta_hours;
   /*
    *  After delta_days has been taken into account, delta_hours specifies
    *  the number of hours since the start of the given
    *  <Absolute Time Interval> instance.
    */

    SE_Byte_Unsigned delta_minutes;
   /*
    *  After delta_days and delta_hours have been taken into account,
    *  delta_minutes specifies the number of minutes since the start of
    *  the given <Absolute Time Interval> instance.
    */

    SE_Long_Float delta_seconds;
   /*
    *  After delta_days, delta_hours, and delta_minutes have been
    *  taken into account, delta_seconds specifies the number of seconds
    *  since the start of the given <Absolute Time Interval> instance.
    *  Fractions provide higher accuracy if needed, such as milliseconds.
    */


-------------------------------------------------------------------------------

Class Name: Access

Definition:
 An instance of this DRM class specifies the security classification
 and any access and/or usage constraints for its containing SEDRIS
 object, provided in a form compatible with ISO 19115.

Primary Page in DRM Diagram:
     1

Secondary Pages in DRM Diagram:
     2
     3
     6
     8
     10
     14
     19
     22

Example:
 1. Given a <Transmittal Root> that has restricted access
    (no access by non-U.S. citizens) and is for official use
    only, its <Access> information might be
       access_constraints = SE_RESTR_CODE_RESTRICTED;
       use_constraints    = SE_RESTR_CODE_OTHER_RESTRICTIONS;
       other_constraints  = "For Official Use Only";
       security.classification = SE_SEC_CL_CODE_SECRET;
       security.user_note = "No access by non-U.S. citizens";
       security.classification_system = "United States Department of Defense";
       security.handling_description  = "Downgrade on 31 Dec 2004";
       use_limitation     = "";

FAQS:
 Q. What is the purpose of this class?
 A. This class supports the creation of SEDRIS transmittals that contain
    classified or sensitive data.

 Q. How is the security classification of a SEDRIS object related to
    the security classifications of its component objects, or to the
    security classification of its containing object?
 A. In general, the rules for security classification metadata for
    the SEDRIS objects within a transmittal are the same as the rules
    for security classification markings of the paragraphs and
    sections within a hierarchically structured classified document.
    The security classification of an object shall be at least as
    high as the highest of the security classifications of its
    components, and may be higher if the aggregation of the
    components allows additional information to be inferred.
    Therefore, the security classification of an object shall be no
    higher than the security classification of its containing object.
    Unclassified objects need not have an <Access> component,
    unless they are unclassified components of a classified
    containing object.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Mandatory Metadata

Component of (two-way)
	zero or more Colour Table instances
	zero or more Colour Table Group instances
	zero or more Data Table instances
	zero or more Environment Root instances
	zero or more Feature Model instances
	zero or more Feature Representation instances
	zero or more Geometry Hierarchy instances
	zero or more Geometry Model instances
	zero or more Image instances
	zero or more Library instances
	zero or more Model instances
	zero or more Property Set instances
	zero or more Property Set Table instances
	zero or more Property Set Table Group instances
	zero or more Sound instances
	zero or more Symbol instances
	zero or one Transmittal Root instance

Field Elements:
    SE_Restriction_Code access_constraints;
   /*
    *  The access_constraints field expresses access constraints
    *  applied to assure the protection of privacy or intellectual
    *  property, and any special restrictions or limitations on
    *  obtaining the resource being described by the given instance
    *  of <Access>.
    */

    SE_Restriction_Code use_constraints;
   /*
    *  The use_constraints field expresses constraints applied to
    *  assure the protection of privacy or intellectual property,
    *  and any special restrictions or limitations or warnings on
    *  using the resource being described by the given instance of
    *  <Access>.
    */

    SE_String other_constraints;
   /*
    *  The other_constraints field specifies other restrictions and
    *  legal prerequisites for accessing and using the resource
    *  being described by the given instance of <Access>.
    */

    SE_Security_Constraints security;
   /*
    *  The security field specifies the security classification for the
    *  given data object.
    */

    SE_String use_limitation;
   /*
    *  If non-empty, the use_limitation field specifies a limitation
    *  affecting the fitness for use of the resource being described by the
    *  given instance of <Access>.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Aggregate Feature

Definition:
 An instance of a concrete class derived from this DRM class specifies
 a collection of <Primitive Feature> and/or <Feature Hierarchy>
 instances, organized according to some organizing principle specific
 to the particular subclass of <Aggregate Feature> being considered.

 For most subclasses of <Aggregate Feature>, each individual branch
 of the aggregation is explicitly identified by a distinct link object.
 The various subclasses provide different mechanisms for organizing
 <Feature Representation> instances, which include:

  ALTERNATE HIERARCHY: Each branch is a <Feature Hierarchy> with a
     different <Hierarchy Data> instance, representing a different
     way of organizing the same underlying collection of
     <Feature Representation> instances.

  CLASSIFICATION: Each branch is a <Feature Hierarchy> with a
     different <Classification Data> instance, representing a different
     thematic layer, or a different classification of <Feature Representation>
     instances (e.g., roads, railroads) within a single thematic layer.

  LEVEL_OF_DETAIL: Each branch is a <Feature Hierarchy> with a
     distinct (but possibly overlapping), <Base LOD Data>
     instance, representing an alternative that is to be used at
     a specified level of detail.

  OCTANT: The <Aggregate Feature> represents an octant, where each
     branch is a <Feature Hierarchy> representing an octant,
     as identified by its <Octant Data> instance.

  PERIMETER: Each branch is a <Feature Hierarchy> that is located
     within a different cell of an irregular spatial index, as
     defined by its <Perimeter Data> instance.

  QUADRANT: The <Aggregate Feature> represents a quadrant, in which
     each branch is a <Feature Hierarchy> representing a quadrant,
     as identified by its <Quadrant Data> instance.

  SPATIAL_INDEX: The <Aggregate Feature> represents a regularly spaced
     spatial index grid, in which each branch is <Feature Hierarchy>
     instance representing a different cell within the spatial index.

  STATE: The <Aggregate Feature> represents something that can take
     on different state values for a specified EDCS Attribute Code
     (the state_tag, which shall have the "state-related"
     property). Each branch is a <Feature Hierarchy> instance with a
     different <State Data> instance, representing an alternative that
     shall be used to represent the <Aggregate Feature> when it takes
     on the specified state value.

  TIME: The <Aggregate Feature> represents something that has
     different representations for different time periods, so that
     each branch is a <Feature Hierarchy> instance with a distinct
     (though possibly overlapping) <Time Constraints Data> instance,
     representing an alternative that shall be used for the
     time period specified by its <Time Constraints Data>.

  UNION: Each branch is a <Feature Representation>, which may be either a
     <Primitive Feature> or a <Feature Hierarchy> instance. The
     reason for organizing them into separate components is
     only minimally specified.

Primary Page in DRM Diagram:
     8

Secondary Pages in DRM Diagram:
     7
     11
     23

Example:
 See specific subclasses for examples.

FAQS:
 Q. What is the purpose of this class?

 A. This class, through its subclasses, allows instances of
    <Feature Representation>
    to be hierarchically organized in a variety of different ways. The
    <Classification Related Features> subclass allows features to be
    organized according to their classification codes.  The <Spatial Index
    Related Features>, <Perimeter Related Features>, <Quadrant Related
    Features>, and <Octant Related Features> subclasses allow features to
    be organized according to their locations.  The <Alternate Hierarchy
    Related Features>, <LOD Related Features>, <State Related
    Features>, and <Time Related Features> subclasses allow multiple
    alternative representations of collections of <Feature Representation>
    instances to be created, with different alternatives used under
    different conditions.  Finally, the <Union Of Features> subclass allows
    features to be grouped arbitrarily.

Superclass: Feature Hierarchy

Subclasses:
     Alternate Hierarchy Related Features
     Classification Related Features
     LOD Related Features
     Octant Related Features
     Perimeter Related Features
     Quadrant Related Features
     Spatial Index Related Features
     State Related Features
     Time Related Features
     Union Of Features

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Non Cyclic Aggregations
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or one Reference Surface instance
	zero or more Sound Instance instances

Composed of (two-way)
	zero or more Base LOD Data instances
	zero or more Colour instances
	zero or more Feature Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance 
	zero or more Property Description instances
	zero or one Spatial Extent instance

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances
	zero or more Alternate Hierarchy Related Features instances, each with a Hierarchy Data link object
	zero or more Classification Related Features instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Feature Model instance
	zero or more LOD Related Features instances, each with a Base LOD Data link object
	zero or more Octant Related Features instances, each with a Octant Data link object
	zero or more Perimeter Related Features instances, each with a Perimeter Data link object
	zero or more Quadrant Related Features instances, each with a Quadrant Data link object
	zero or more Spatial Index Related Features instances, each with a Spatial Index Data link object
	zero or more State Related Features instances, each with a State Data link object
	zero or more Time Related Features instances, each with a Time Constraints Data link object

Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant, that is, each <Feature Representation> instance that
    *  exists in the component tree rooted at the given <Aggregate Feature>,
    *  shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Feature Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Aggregate Geometry

Definition:
 An instance of a concrete class derived from this DRM class
 specifies a collection of <Primitive Geometry> or
 <Geometry Hierarchy> instances, organized according to some
 organizing principle specific to the particular
 subclass of <Aggregate Geometry> being considered.

 For most subclasses of <Aggregate Geometry>, each individual branch
 of the aggregation is explicitly identified by a distinct link object.
 The various subclasses provide different mechanisms for organizing
 <Geometry Representation> instances, which include:

  ALTERNATE HIERARCHY:
     Each branch is a <Geometry Hierarchy> instance with a different
     <Hierarchy Data> instance, representing a different way of
     organizing the same underlying collection of
     <Geometry Representation> instances.

  ANIMATION:
     Each branch is a <Geometry Hierarchy> instance representing a different
     frame in an animation sequence. This organizing principle has no
     counterpart on the <Feature Representation> side.

  CLASSIFICATION:
     Each branch is a <Geometry Hierarchy> instance with a different
     <Classification Data> instance, representing either a different
     thematic layer, or a different classification of
     <Geometry Representation> instances (for example, roads, railroads)
     within a single thematic layer.

  CONTINUOUS_LEVEL_OF_DETAIL:
     Each branch is either a <Union Of Primitive Geometry> instance (usually
     a collection of <Polygon> instances), or a set of fragmented <Polygon>
     instances that represent the terrain at a finer level of detail at
     close range (or alternatively, with a coarser level of detail at
     long range). This mechanism is used to represent continuous terrain
     or continuous adaptive terrain. This organizing principle has no
     counterpart on the <Feature Representation> side.

  LEVEL_OF_DETAIL:
     Each branch is a <Geometry Hierarchy> instance with a different (but
     possibly overlapping) <Base LOD Data> instance, representing an
     alternative that shall be used at a specified level of detail.

  OCTANT:
     The <Aggregate Geometry> represents an octant, in which each branch
     is a <Geometry Hierarchy> representing an octant,
     as identified by its <Octant Data> instance.

  PERIMETER:
     Each branch is a <Geometry Hierarchy> that is located within a
     different cell of an irregular spatial index, as defined by its
     <Perimeter Data> instance.

  QUADRANT:
     The <Aggregate Geometry> represents a quadrant, in which each branch
     is a <Geometry Hierarchy> representing a quadrant,
     as identified by its <Quadrant Data> instance.

  SEPARATING_PLANE:
     Each branch is a <Separating Plane Relations>, each branch of which
     is a <Geometry Hierarchy> instance that is on either the positive
     or negative side of the associated <Separating Plane>, as indicated
     by the <Separating Plane Data> instance for that branch. This
     organizing principle has no counterpart on the <Feature Representation>
     side.

  SPATIAL_INDEX:
     The <Aggregate Geometry> represents a regularly spaced spatial index
     grid, in which each branch is a <Geometry Hierarchy> instance
     representing a different cell within the spatial index.

  STATE:
     The <Aggregate Geometry> represents something that can take on
     different state values for a specified EDCS Attribute Code
     (the state_tag, which shall have the "state-related" property).
     Each branch is a <Geometry Hierarchy> instance with a different
     <State Data> instance, representing an alternative that shall be
     used to represent the <Aggregate Geometry> when it takes on the
     specified state value.

  TIME:
     The <Aggregate Geometry> represents something that has different
     representations for different time periods, so that each branch
     is a <Geometry Hierarchy> instance with a distinct (though possibly
     overlapping) <Time Constraints Data> instance, representing an
     alternative that shall be used for the time period specified by
     its <Time Constraints Data>.

  UNION_OF_GEOMETRY_HIERARCHY:
     Each branch is a <Geometry Hierarchy> instance. The reason for
     organizing them into separate components is only minimally specified.
     This mechanism's counterpart on the <Feature Representation> side is
     <Union Of Features>.

  UNION_OF_PRIMITIVE_GEOMETRY:
     Each branch is a <Primitive Geometry> instance; <Primitive Geometry>
     can be included in a transmittal only by means of <Union Of Primitive
     Geometry> instances. This mechanism's counterpart on the
     <Feature Representation> side is <Union Of Features>.

Primary Page in DRM Diagram:
     4

Secondary Pages in DRM Diagram:
     3
     7
     9
     11
     18
     21
     23

Example:
 See concrete subclasses for examples.

FAQS:
     None.

Superclass: Geometry Hierarchy

Subclasses:
     Alternate Hierarchy Related Geometry
     Animation Related Geometry
     Classification Related Geometry
     Continuous LOD Related Geometry
     LOD Related Geometry
     Octant Related Geometry
     Perimeter Related Geometry
     Quadrant Related Geometry
     Separating Plane Related Geometry
     Spatial Index Related Geometry
     State Related Geometry
     Time Related Geometry
     Union Of Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances

Composed of (two-way)
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


-------------------------------------------------------------------------------

Class Name: Alternate Hierarchy Related Features

Definition:
 An instance of this DRM class specifies an aggregation of
 <Feature Hierarchy> instances, in which each
 component <Feature Hierarchy> is an alternate representation of
 the same environmental entity, and the corresponding <Hierarchy Data>
 instance indicates why that particular alternate representation
 was provided.

Primary Page in DRM Diagram:
     8

Example:
 1. Consider a collection of <Feature Representation> instances
    representing a specific
    spatial region, for which there is a requirement that the
    <Feature Representation>
    instances shall be efficiently accessible both by location and by
    classification (such as ECC_ROAD, ECC_RIVER, ECC_VEGETATION).

    To satisfy this requirement, the data provider has chosen to use
    an <Alternate Hierarchy Related Features> instance with two
    components, in which one component (in this example, a
    <Quadrant Related Features> instance) organizes the
    <Feature Representation>
    instances spatially, while a second component
    (a <Classification Related Features> instance) organizes the
    <Feature Representation> instances by ECC.

FAQS:
 Q. What is the purpose of this class?

 A. This class allows a single collection of <Feature Representation>
    instances to be hierarchically organized in two or more different
    ways.  In one component, the <Feature Representation> instances
    might be organized spatially,
    while in another component they might be organized by classification.
    Each branch of an instance of this class provides a different
    access path to the same objects, where each branch is organized to
    be efficient with respect to a different access pattern.

Superclass: Aggregate Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Non Cyclic Aggregations
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or more Colour instances
	zero or more Feature Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance 
	zero or more Property Description instances
	zero or one Spatial Extent instance

Composed of (two-way)
	2 or more Feature Hierarchy instances, each with a Hierarchy Data link object

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances
	zero or more Alternate Hierarchy Related Features instances, each with a Hierarchy Data link object
	zero or more Classification Related Features instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Feature Model instance
	zero or more LOD Related Features instances, each with a Base LOD Data link object
	zero or more Octant Related Features instances, each with a Octant Data link object
	zero or more Perimeter Related Features instances, each with a Perimeter Data link object
	zero or more Quadrant Related Features instances, each with a Quadrant Data link object
	zero or more Spatial Index Related Features instances, each with a Spatial Index Data link object
	zero or more State Related Features instances, each with a State Data link object
	zero or more Time Related Features instances, each with a Time Constraints Data link object

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant, that is, each <Feature Representation> instance that
    *  exists in the component tree rooted at the given <Aggregate Feature>,
    *  shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Feature Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


-------------------------------------------------------------------------------

Class Name: Alternate Hierarchy Related Geometry

Definition:
 An instance of this DRM class specifies an aggregation of
 <Geometry Hierarchy> instances, in which each
 component <Geometry Hierarchy> is an alternate representation of
 the same environmental entity, and the corresponding <Hierarchy Data>
 instance indicates why that particular alternate representation
 was provided.

Primary Page in DRM Diagram:
     4

Example:
 1. Consider a collection of <Geometry Representation> instances
    representing a specific
    spatial region, for which there is a requirement that the
    <Geometry Representation>
    instances shall be efficiently accessible both by location and by
    classification (such as ECC_ROAD, ECC_RIVER, ECC_VEGETATION).

    To satisfy this requirement, the data provider has chosen to use
    an <Alternate Hierarchy Related Geometry> instance with two
    components, in which one component (in this example, a
    <Spatial Index Related Geometry> instance) organizes the
    <Geometry Representation> instances spatially, while a second component
    (a <Classification Related Geometry> instance) organizes the
    <Geometry Representation> instances by ECC.

FAQS:
 Q. What is the purpose of this class?
 A. This class allows a single collection of <Geometry Representation>
    instances to be
    hierarchically organized in two or more different ways.  In one branch,
    the <Geometry Representation> instances might be organized spatially,
    while in another,
    they might be organized by classification.  This provides two (or more)
    different access paths to the same objects, each organized to be
    efficient with respect to a different access pattern.

Superclass: Aggregate Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance

Composed of (two-way)
	2 or more Geometry Hierarchy instances, each with a Hierarchy Data link object

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


-------------------------------------------------------------------------------

Class Name: Ambient Colour

Definition:
 An instance of this DRM class specifies the ambient reflectance component
 of a <Primitive Colour> or <Light Source>, providing the base colour to
 the lighting equation for the object being lit or the light itself,
 respectively.

 Ambient light is the result of bouncing light rays around the environment
 until the light has been diffused so much that its source and direction
 cannot be determined. Consequently, <Ambient Colour> is
 - independent of the angle of the lit object to the light source
 - independent of the angle of the lit object to the observer

 The <Ambient Colour> of an object is combined with the ambient component
 of each incoming light source to determine the colour due to the ambient
 light.

Primary Page in DRM Diagram:
     14

Secondary Pages in DRM Diagram:
     21

Example:
 See <Primitive Colour>.

FAQS:
 Q. Does SEDRIS use the OpenGL lighting model?
 A. No, although the terminology is similar. SEDRIS handles transparency
    somewhat differently than OpenGL does, among other things. For a
    description of the OpenGL lighting model, see [OPENGL], Chapter 5
    "Lighting".

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	one Colour Data instance

Component of (two-way)
	zero or one Light Source instance
	zero or one Primitive Colour instance

-------------------------------------------------------------------------------

Class Name: Animation Behaviour

Definition:
 An instance of this DRM class specifies, for its aggregate
 <Animation Related Geometry> instance(s), all the information
 necessary to define one animation sequence among the "frames"
 defined by that <Animation Related Geometry>.

Primary Page in DRM Diagram:
     4

Example:
 1. An animation of an explosion could have many different sections. One
    section could represent the explosion, another section the fire, and
    another section smoke.  The fields of this class give the duration
    of each frame and the beginning and ending frame sequence.

 2. The <Animation Related Geometry> instance would have 60 ordered <Geometry
    Hierarchy> components. The first <Animation Behaviour> (explosion)
    would define frames 1 through 20 in its animation sequence. The second
    <Animation Behaviour> (fire) would define frames 21 through 40 in its
    animation sequence.  The third <Animation Behaviour> (smoke) would define
    frames 41 through 60 as its sequence, with count set to 0.
    The effect would be to see the animation of the explosion followed by
    the fire, followed by the smoke. The smoke would last forever, since
    its count field was set to 0.

FAQS:
 Q. Can animation sequences be chained together?
 A. Yes. An instance of the <Animation Related Geometry> class can have
    one or more ordered instances of <Animation Behaviour> as components.
    In the example (below) of an explosion, each one of the sections
    (that is, explosion, fire, and smoke) can be its own
    <Animation Behaviour>.
    Because the <Animation Behaviour> components are ordered, they behave
    as though they are chained together, one following the other.

 Q. Can the frames in different animation sequences overlap?
 A. Yes.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Component of (two-way)
	one or more Animation Related Geometry instances

Field Elements:
    SE_Long_Float period;
   /*
    *  The period field specifies the duration (in seconds) of each frame.
    */

    SE_Short_Integer_Unsigned count;
   /*
    *  The count field specifies the number of times that the animation
    *  sequence will repeat, where 0 indicates that it repeats endlessly.
    */

    SE_Boolean forward_sequence_mode;
   /*
    *  If the value of the forward_sequence_mode field is SE_TRUE,
    *  the animation sequence cycles from
    *  beginning to end, beginning to end, beginning to end, for the
    *  number of iterations specified by count; this is referred to
    *  as *standard cycling*. If forward_sequence_mode is SE_FALSE,
    *  the animation sequence cycles from beginning to end, end
    *  to beginning, beginning to end, end to beginning, as specified
    *  by count; this is referred to as *swing mode*.
    */

    SE_Short_Integer_Positive beginning_frame;
   /*
    *  The beginning_frame field specifies the index of the beginning
    *  frame among the ordered <Geometry Hierarchy> components of the
    *  <Animation Related Geometry> instance under consideration.
    */

    SE_Short_Integer_Positive ending_frame;
   /*
    *  The ending_frame field specifies the index of the ending
    *  frame among the ordered <Geometry Hierarchy> components of the
    *  <Animation Related Geometry> instance under consideration.
    */

    SE_Boolean random_beginning_frame;
   /*
    *  The random_beginning_frame field specifies whether the beginning
    *  frame is chosen randomly.
    *  If random_beginning_frame = SE_FALSE, the beginning frame is ignored,
    *  and the sequence cycles towards the ending frame.
    */


-------------------------------------------------------------------------------

Class Name: Animation Related Geometry

Definition:
 An instance of this DRM class specifies an aggregation of
 <Geometry Hierarchy> instances, in which each component
 <Geometry Hierarchy> acts as a frame in one or more
 animation sequence(s).

Primary Page in DRM Diagram:
     4

Example:
 1. An aircraft that is modeled with landing gear. The landing gear is
    modeled in different positions, each representing a frame. These frames
    can be run in sequence, giving it an animated or moving effect.

FAQS:
 Q. How complex can an animation frame be?
 A. Animation frames can be nothing more than a single <Polygon> changing
    an <Image>. They can also be much more complex, which may involve many
    attributes and aggregations.

Superclass: Aggregate Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance

Composed of (two-way)
	one or more {ordered} Animation Behaviour instances
	one or more {ordered} Geometry Hierarchy instances

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


-------------------------------------------------------------------------------

Class Name: Arc

Definition:
 An instance of this DRM class specifies a circular arc, the
 endpoints of which are specified by the <Vertex> components,
 and the centre point is specified by the <Location> component.

Primary Page in DRM Diagram:
     5

Example:
 1. A geometric representation of a treeline, or a string of lights that
    follow the path of the <Arc>.

FAQS:
 Q. An <Arc> can be defined in different ways. Rather than using
    SEDRIS' method of three points that define the beginning, mid,
    and ending points on an <Arc>, I define an <Arc> with a centre point,
    radius, beginning angle, and ending angle. How can I implement
    this in SEDRIS?
 A. The following formulas show how centre point, radius, beginning
    and ending angles can be derived from the first set of information
    (beginning, mid, and ending points on the <Arc>).

        double x1, y1,              /* beginning point */
               x2, y2,              /* mid point */
               x3, y3,              /* ending point */

               sx1, sx2, sx3,       /* squared x values */
               sy1, sy2, sy3,       /* squared y values */
               ad, D, E, F,         /* determinate values */
               dc, ec, fc,          /* coefficient values */

               centrex, centrey,    /* centre point of arc */
               r,                   /* radius of arc */
               ab, ae;              /* beginning & ending angles */

        /* get squared values */
        sx1 = x1*x1;   sx2 = x2*x2;   sx3 = x3*x3;
        sy1 = y1*y1;   sy2 = y2*y2;   sy3 = y3*y3;

        /* get "a" determinate */
        ad = x1*(y2 - y3) - y1*(x2-x3) + x2*y3 - x3*y2;

        /* get "D" determinate */
        D = (sx1 + sy1)*(y2 - y3) - y1*((sx2 + sy2) - (sx3 + sy3))
            + y3*(sx2 + sy2) - y2*(sx3 + sy3);

        /* get "E" determinate */
        E = (sx1 + sy1)*(x2 - x3) - x1*((sx2 + sy2) - (sx3 + sy3))
            + x3*(sx2 + sy2) - x2*(sx3 + sy3);

        /* get "F" determinate */
        F = (sx1 + sy1)*(x2*y3 - x3*y2) -
             x1*(y3*(sx2 + sy2) - y2(sx3 + sy3)) +
             y1*(x3*(sx2 + sy2) - x2*(sx3 + sy3));

        D = -D;            F = -F;

        /* check for colinear point */
        if (ad == 0.0) {
            fprintf(stderr, "ERROR! colinear point\n");
            fflush(stderr);
            exit(-1);
        }

        /* get coefficients */
        dc = D/(2.0*ad);
        ec = E/(2.0*ad);
        fc = F/ad;

        /* get centre point */
        centrex = -dc;    centrey = -ec;

        /* get radius */
        r = sqrt((dc*dc + ec*ec - fc));

        /* get beginning and ending angles */
        ab = atan2(y1 - centrey, x1 - centrex);
        ae = atan2(y3 - centrey, x3 - centrex);

Superclass: Linear Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Continuous LOD Restrictions
     Image Mapping Functions and Texture Coordinates
     Nested Primitive Geometry
     Linear Geometry Structure

Associated with (two-way) (inherited)
	zero or more {ordered} Geometry Edge instances, each with a Edge Directions link object

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or one Presentation Domain instance
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or more Tack Point instances
	zero or one Union Of Primitive Geometry instance 

Composed of (two-way)
	one Location instance
	exactly 2 {ordered} Vertex instances

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Primitive Geometry instances

Inherited Field Elements:
    SE_Short_Integer_Unsigned count;
   /*
    *  A value of zero (0) for the count field indicates that the given
    *  <Linear Geometry> instance is to be rendered as solid.
    *
    *  Otherwise, the interpretation of the count depends on whether
    *  a <Light Rendering Properties> component is present for
    *  the given <Linear Geometry> instance.
    *
    *  - If a <Light Rendering Properties> component is present, then
    *    count is the number of evenly spaced light points to be
    *    rendered along the <Linear Geometry>.
    *
    *  - If no <Light Rendering Properties> component is present, then
    *    count is the number of evenly spaced line segments to be
    *    rendered along the <Linear Geometry>.
    */

    SE_Boolean suppress_last;
   /*
    *  If count is greater than zero, the suppress_last field specifies
    *  whether the last segment / point in the sequence is suppressed
    *  or rendered.
    */


-------------------------------------------------------------------------------

Class Name: Areal Feature

Definition:
 An instance of this DRM class specifies a <Primitive Feature> that
 encloses a bounded region, such as a forest or a built-up area.

Primary Page in DRM Diagram:
     8

Secondary Pages in DRM Diagram:
     12

Example:
 1. Consider an <Areal Feature> representing a lake. It has a
    <Feature Face>, which defines its size, shape, and topological
    relationships; <Classification Data> that identifies it as a lake,
    <Property Value> components that describe its characteristics, such as
    bottom composition, and a <Label> that identifies it as "Duck Lake".

FAQS:
 Q. Is Level 3 feature topology required in order for <Areal Feature>
    instances to exist?
 A. No.  Although in VPF, for example, the mere presence of Faces implies
    Level 3 topology, this is not the case in SEDRIS. <Areal Feature>
    instances may exist at any level of topology.

 Q. Can an <Areal Feature>'s topology consist of multiple <Feature Face>
    instances? If so, are these <Feature Face> instances required to be
    adjacent or connected to one another?

 A. An <Areal Feature> can consist of multiple <Feature Face> instances.
    There is no requirement that the <Feature Face> instances be connected
    to one another.  For example, a forest that has a stream and a road
    passing through it commonly would be represented as a single
    <Areal Feature>, but might require multiple <Feature Face> instances.

Superclass: Primitive Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated with (two-way)
	one or more Feature Face instances, each with a Face Directions link object

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Presentation Domain instance 
	zero or one Spatial Extent instance

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances

-------------------------------------------------------------------------------

Class Name: Attachment Point

Definition:
 An instance of this DRM class specifies a <Location 3D> where
 a consuming application may attach other <Model> instances.

Primary Page in DRM Diagram:
     2

Example:
 1. Consider an aircraft <Model>, the hard points of which are represented
    as <Attachment Point> instances. Consider a second <Model>, representing
    a missile. One missile hangs below the wing, and another missile
    hangs from the tip of the wing. In this case, the matrix formed by the
    <Attachment Point> instances would convey the appropriate rotation. The
    missile, on the other hand, would use an <LSR Transformation> to move the
    missile's origin (which would probably be its <Geometric Centre>
    SE_GEOM_CTR_CODE_CENTRE_OF_MASS) to the point on or near the surface
    where it attaches to the airplane's <Attachment Point> instances.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	one Location 3D instance

Component of (two-way)
	one Geometry Model instance

-------------------------------------------------------------------------------

Abstract Class Name: Axis

Definition:
 An instance of a concrete class derived from this DRM class
 specifies a set of values of an independent variable to be used to
 organize the dependent values in an instance of
 <Data Table>.

Primary Page in DRM Diagram:
     6

Secondary Pages in DRM Diagram:
     23

Example:
 1. A table of Digital Terrain Elevation Data (DTED) contains terrain
    elevation data sampled in a grid of regularly spaced longitude and
    latitude points. The <Axis> components of such a table are
    longitude and latitude.

 2. A table of ocean temperature and salinity data taken at varying depths
    by an expendable bathythermograph can be captured in a table. Such a
    table would have depth as an <Axis>, and temperature and pressure would
    be <Table Property Description> components. If these data were taken at
    intervals along a path, the locations on that path (say longitudes)
    would form a second <Axis> of the now two-dimensional table.

FAQS:
 Q. How are the values on an <Axis> related?
 A. The values on a single axis shall be distinct values of a single
    variable specified by the axis_type. If the axis is numeric,
    then the values shall be arranged monotonically.

 Q. Can an <Axis> have no values or a single value?
 A. An <Axis> shall have at least one value; an axis with no values is a
    violation of SEDRIS' constraints. If the <Axis> has a single value,
    this implies that all of the data in the table shares that value. There
    may be better ways to associate a single value with all the table
    entries.

 Q. Given 2 variables, where certain combinations of values for these
    2 variables are impossible or meaningless, can a data provider combine
    these 2 variables on a single <Axis> in order to exclude the
    meaningless cells?

 A. No. A data provider should include the meaningless cells, and set a
    value for EVC_NOT_APPLICABLE, and use it for those cells.

Superclass: SEDRIS Abstract Base

Subclasses:
     Enumeration Axis
     Interval Axis
     Irregular Axis
     Regular Axis

Constraints:
     Publishable Object
     Axis Type Restrictions

Component of (two-way)
	one or more Data Table instances

Field Elements:
    EDCS_Attribute_Code axis_type;
   /*
    *  The axis_type field specifies the property being described by the
    *  given <Axis> instance.
    */

    SE_Short_Integer_Positive axis_value_count;
   /*
    *  The axis_value_count field specifies the number of "hash marks"
    *  along the given <Axis> instance.
    */


-------------------------------------------------------------------------------

Class Name: AZ 2D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Azimuthal spherical (Az) 2D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
     None.

FAQS:
     None.

Superclass: Location 2D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

Field Elements:
    SRM_AZ_2D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Base Association Data

Definition:
 An instance of a concrete class derived from this DRM class specifies
 the semantic meaning of the association relationship with which it
 is bound.

Primary Page in DRM Diagram:
     9

Secondary Pages in DRM Diagram:
     3
     6
     8
     23

Example:
 See concrete subclasses for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     Base Spatial Association Data
     Functional Association Data

Constraints:
     Publishable Object

-------------------------------------------------------------------------------

Abstract Class Name: Base LOD Data

Definition:
 An instance of a concrete class derived from this DRM class
 specifies the rules and data that govern the replacement of
 objects based upon a predefined function.  The specific
 function is specific to the particular subclass used.

Primary Page in DRM Diagram:
     9

Secondary Pages in DRM Diagram:
     4
     6
     8
     23

Example:
 See individual subclasses for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     Distance LOD Data
     Index LOD Data
     Map Scale LOD Data
     Spatial Resolution LOD Data
     Volume LOD Data

Constraints:
     Publishable Object
     LOD Related Organizing Principle

Component of (two-way)
	zero or more Aggregate Feature instances
	zero or more Aggregate Geometry instances
	zero or more Property Grid Hook Point instances

-------------------------------------------------------------------------------

Abstract Class Name: Base Positional Light

Definition:
 An instance of a concrete class derived from this DRM class
 is a <Light Source> that radiates in all directions from a specified
 point in 3D space with a sphere of influence centred at that point,
 the radius of which is specified by the value of the radius field.

 Only objects that are within the sphere of influence of a
 <Base Positional Light> instance (that is, an instance of one of its
 concrete subclasses) can be affected by that <Base Positional Light>.
 Specific subclasses may further restrict the zone of influence to
 only a portion of the sphere.

 The degree to which an object is affected in the zone of influence
 depends on the attenuation of the <Base Positional Light>, which
 depends on the values of its attenuation factor fields. If attenuation
 is not specified - that is, when constant_attenuation_factor = 1.0,
 linear_attenuation_factor = 0.0, and quadratic_attenuation_factor = 0.0 -
 the light ends abruptly at the edge of the sphere of influence.
 Otherwise, the light intensity components (ambient, diffuse, and specular)
 are attenuated by the reciprocal of the attenuation quadratic
 (a + bd + cd**2), where a, b, c are the attenuation factor field
 values as noted in their footnotes, and d is the distance from the
 position of the <Base Positional Light>.

 Consequently, the formula for the final attenuation factor is:

                                       1
       --------------------------------------------------------------
       [ constant_attenuation_factor +
            (distance * linear_attenuation_factor) +
                ((distance squared) * quadratic_attenuation_factor) ]

Primary Page in DRM Diagram:
     21

Secondary Pages in DRM Diagram:
     23

Example:
 See subclasses for examples.

FAQS:
     None.

Superclass: Light Source

Subclasses:
     Positional Light
     Spot Light

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one Ambient Colour instance
	one Diffuse Colour instance
	zero or one Light Source Control Link instance 
	one Specular Colour instance

Composed of (two-way)
	one Location 3D instance 

Component of (two-way) (inherited)
	one or more Aggregate Geometry instances

Inherited Field Elements:
    SE_Boolean apply_to_children;
   /*
    *  For a <Light Source> instance (that is, an instance of one of the
    *  concrete classes descended from the class) that is a component of
    *  some <Aggregate Geometry>, apply_to_children provides a mechanism
    *  for limiting the scope of the <Light Source>. If apply_to_children
    *  is SE_TRUE, only <Primitive Geometry> in the component tree of those
    *  <Aggregate Geometry> instances are affected by the given
    *  <Light Source>. If apply_to_children is SE_FALSE, the <Light Source>
    *  is not limited to the scope of those <Aggregate Geometry> instances
    *  and thus applies globally.
    */

    SE_Boolean override_positional_lights;
   /*
    *  For a <Light Source> instance that is a component of some
    *  <Aggregate Geometry>, override_positional_lights provides a
    *  mechanism to indicate with a value of SE_TRUE that the effect of the
    *  given <Light Source> overrides that of any <Base Positional Light>
    *  instances that would have otherwise applied to that
    *  <Aggregate Geometry> - for example, if the given <Light Source> is
    *  so close to the affected <Geometry Representation> that the
    *  <Base Positional Light> effects would be negligible. If
    *  override_positional_lights = SE_FALSE, the effect of the
    *  given <Light Source> is combined with that
    *  of any <Base Positional Light> instances that are already in effect.
    */

    SE_Boolean override_infinite_lights;
   /*
    *  For a <Light Source> instance (that is, an instance of one of the
    *  concrete classes descended from the class) that is a component of
    *  some <Aggregate Geometry>, override_infinite_lights provides a
    *  mechanism to indicate with a value of SE_TRUE that the effect of the
    *  given <Light Source> overrides that of any <Infinite Light>
    *  instances that would have otherwise applied to that
    *  <Aggregate Geometry>. If override_infinite_lights = SE_FALSE,
    *  the effect of the given <Light Source> is combined with that
    *  of any <Infinite Light> instances that are already in effect.
    */

    SE_Boolean active_light_value;
   /*
    *  A value of SE_TRUE for the active_light_value field indicates
    *  that the light is on, while a value of
    *  SE_FALSE indicates that the light is off. For a <Light Source>
    *  with a <Light Source Control Link> instance as a component,
    *  this is the default state of the light.
    */


Field Elements:
    SE_Float radius;
   /*
    *  The radius field, which is specified in metres, together with
    *  the <Location 3D> component specifies the zone of influence
    *  of the given <Base Positional Light> instance.
    */

    SE_Long_Float constant_attenuation_factor;
   /*
    *  The constant_attenuation_factor field is the constant "a"
    *  in the attenuation quadratic (a + bd + cd**2).
    */

    SE_Long_Float linear_attenuation_factor;
   /*
    *  The linear_attenuation_factor field is the constant "b"
    *  in the attenuation quadratic (a + bd + cd**2).
    */

    SE_Long_Float quadratic_attenuation_factor;
   /*
    *  The quadratic_attenuation_factor field is the constant "c"
    *  in the attenuation quadratic (a + bd + cd**2).
    */


-------------------------------------------------------------------------------

Abstract Class Name: Base Spatial Association Data

Definition:
 An instance of a concrete class derived from this DRM class specifies
 the semantic meaning of the association relationship with which it
 is bound, which will represent a spatial relationship.

Primary Page in DRM Diagram:
     9

Secondary Pages in DRM Diagram:
     23

Example:
 See concrete subclasses for examples.

FAQS:
     None.

Superclass: Base Association Data

Subclasses:
     Proximity Data
     Spatial Association Data

Constraints:
     Publishable Object

Field Elements:
    SE_Spatial_Association_Meaning_Type meaning;
   /*
    *  The meaning field specifies the semantic meaning of the association
    *  relationship with which the given instance of
    *  <Base Spatial Association Data> is bound.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Base Summary Item

Definition:
 An instance of a concrete class derived from this DRM class
 represents an instance (or group of instances) of the specified
 class that exist within the scope being summarized; the specific
 aspect of the class' usage that is being summarized depends on
 the concrete subclass of <Base Summary Item> being instanced.

Primary Page in DRM Diagram:
     20

Secondary Pages in DRM Diagram:
     23

Example:
 See specific subclasses for examples.

FAQS:
 Q. Can the same classes be represented by <DRM Class Summary Item>,
    <Hierarchy Summary Item> and / or <Primitive Summary Item> instances
    in the same transmittal?
 A. Yes.

Superclass: SEDRIS Abstract Base

Subclasses:
     DRM Class Summary Item
     Hierarchy Summary Item
     Primitive Summary Item

Constraints:
     Publishable Object

Composed of (two-way metadata)
	zero or more EDCS Use Summary Item instances 

Field Elements:
    SE_DRM_Class drm_class;
   /*
    *  The drm_class field indicates the DRM class of the object(s)
    *  represented by the given <Base Summary Item> instance.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Base Time Data

Definition:
 An instance of a concrete class derived from this DRM class
 specifies a time period.

Primary Page in DRM Diagram:
     20

Secondary Pages in DRM Diagram:
     1
     23

Example:
 See specific subclasses for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     Season
     Time Interval
     Time Of Day
     Time Point

Constraints:
     Publishable Object

Component of (two-way)
	zero or more Environment Root instances
	zero or more Time Constraints Data instances
	zero or one Transmittal Root instance

Field Elements:
    SE_Time_Significance time_significance;
   /*
    *  The time_significance field specifies the significance of
    *  the time information.
    */


-------------------------------------------------------------------------------

Class Name: Blend Directional Light

Definition:
 An instance of this DRM class specifies a <Directional Light Behaviour>,
 the intensity of which varies depending on the observer's position
 relative to the light's location, direction, and shape. This light
 takes the shape of a pyramid, subdivided by two planes. These planes
 are based at the pyramid's apex and extend towards the base. They
 subdivide the pyramid into upper and lower sections with a blend
 section in between. The upper section receives the primary colour,
 while the lower section receives the secondary colour. The blend
 section blends between the primary and secondary colours depending
 on the viewing position.

Primary Page in DRM Diagram:
     21

Example:
 1. Consider a <Blend Directional Light> instance with both a primary and
    a secondary colour.

    <Blend Directional Light>
    upper_plane_angular_offset =  1.5 pi / 180.0
    lower_plane_angular_offset = -2.5 pi / 180.0
    <>
    |
    <Lobe Data>
    horizontal_width = pi / 2.0
    vertical_width   = pi / 2.0

    At 10 pi / 180.0 radians from the SE_REF_VEC_TYP_LIGHT_DIRECTION vector
    in the vertical direction, towards the positive end of the
    SE_REF_VEC_TYP_VERTICAL_AXIS vector, the primary colour is visible,
    because the position lies in the upper section of the pyramid, inside
    the lobe.

    At 10 pi / 180.0 radians from the SE_REF_VEC_TYP_LIGHT_DIRECTION
    vector in the vertical direction, towards the positive end of the
    SE_REF_VEC_TYP_VERTICAL_AXIS vector, the primary colour is visible,
    because the position lies at the upper edge of the blend section.
    Moving from this position along the SE_REF_VEC_TYP_VERTICAL_AXIS
    vector toward the negative end, the amount of primary colour decreases
    as it is blended with proportionally increasing amounts of the
    secondary colour, because this lies within the blend section of the
    pyramid, from the upper edge to the lower edge. At -0.5 pi / 180.0
    radians from the SE_REF_VEC_TYP_LIGHT_DIRECTION vector in the vertical
    direction (that is, towards the negative direction of the vertical
    axis), the primary and secondary colours are blended in equal amounts,
    since this position is in the middle of the blend section. Moving in
    the same direction, the amount of primary colour continues to decrease
    proportionally as the amount of secondary colour increases. At
    -2.5 pi / 180.0 radians from the light direction, only the secondary
    colour is visible, as this is the lower edge of the blend section.

    At -10 pi / 180.0 radians from the SE_REF_VEC_TYP_LIGHT_DIRECTION
    vector in the vertical direction, that is, towards the negative end of
    the SE_REF_VEC_TYP_VERTICAL_AXIS vector, the secondary colour is
    visible, as this lies in the lower section of the pyramid.

    At -50 pi / 180.0 radians from the SE_REF_VEC_TYP_LIGHT_DIRECTION
    vector in the vertical direction, that is, towards the negative end
    of the vertical axis vector, nothing is visible, since this lies
    outside the pyramid.

FAQS:
     None.

Superclass: Directional Light Behaviour

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one Lobe Data instance 
	one Location instance

Component of (two-way) (inherited)
	one or more Light Rendering Properties instances

Field Elements:
    SE_Long_Float upper_plane_angular_offset;
   /*
    *  The upper_plane_angular_offset field specifies the angular offset
    *  of the plane separating the upper and blend sections, in radians,
    *  from the given <Lobe Data> instance's SE_REF_VEC_TYP_LIGHT_DIRECTION
    *  vector, measured along its SE_REF_VEC_TYP_VERTICAL_AXIS vector.
    *  The resulting upper section of the light is taken to be
    *  between the plane and the positive end of the vertical axis
    *  SE_REF_VEC_TYP_VERTICAL_AXIS vector.
    */

    SE_Long_Float lower_plane_angular_offset;
   /*
    *  The lower_plane_angular_offset field specifies the angular offset
    *  of the plane separating the lower and blend sections, in radians,
    *  from the given <Lobe Data> instance's
    *  SE_REF_VEC_TYP_LIGHT_DIRECTION vector, measured along its
    *  SE_REF_VEC_TYP_VERTICAL_AXIS vector.
    *
    *  The resulting lower section of the light is taken to be between
    *  the plane and the negative end of the
    *  SE_REF_VEC_TYP_VERTICAL_AXIS vector.
    */


-------------------------------------------------------------------------------

Class Name: Bounding Volume

Definition:
 An instance of this DRM class specifies a volume that encompasses the
 <Aggregate Geometry> of which it is a component.

Primary Page in DRM Diagram:
     9

Secondary Pages in DRM Diagram:
     4

Example:
 1. The rectangular <Bounding Volume> of a house that is used to show the
    maximum extents of the house in three dimensions.  This may be used to
    calculate first level ray-volume intersections.

FAQS:
 Q. Can an <Aggregate Geometry>'s <Bounding Volume> and <Collision Volume>
    be the same?
 A. Yes.

 Q. Is the <Bounding Volume> the convex hull of the <Aggregate Geometry>?
 A. Not necessarily. The convex hull could be considerably more complex
    than the <Volume Extent> (see).

 Q. Does the <Bounding Volume> exactly contain the <Aggregate Geometry>?
 A. In special cases, the <Bounding Volume> may fail to contain all of
    the geometry due to "warping" introduced by coordinate conversion or
    transformation.

Superclass: Volume

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one Location 3D instance 
	one Volume Extent instance 

Component of (two-way)
	one Aggregate Geometry instance

-------------------------------------------------------------------------------

Class Name: Browse Media

Definition:
 An instance of this DRM class specifies a graphic or multimedia resource
 that provides a preview of the content of its containing SEDRIS object.

Primary Page in DRM Diagram:
     20

Example:
 1. A map of the area covered by a <Transmittal Root> or
    <Environment Root> instance.

 2. A rotating image of a <Model> of an M1A2 tank.

 3. A thumbnail version of an <Image> in the <Image Library>.

 4. A graphic visualization of a function defined by a <Data Table>.

 5. A graphic depiction of the contents of a <Colour Table>.

 6. As a component of <Transmittal Root>, a movie clip of a
    fly-through of the transmittal.

FAQS:
 Q. What is the purpose of this class?
 A. This class provides ISO 19115-compliant metadata in the form of a
    graphical or multi-media representation that previews the content
    of its containing SEDRIS object. Its purpose is to allow a potential
    user of the attributed object to easily assess the utility of the
    attributed object.

 Q. How is the graphic or multi-media resource encoded? What format(s)
    can be used?
 A. The resource is identified by a SEDRIS media URN which can be
    resolved to a URL for the resource.  The URN contains a
    "media format tag" field. These tags are registered by the
    SEDRIS Organization to denote specific media formats.  The
    resource may be encoded in any one of these registered
    formats.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Mandatory Metadata

Component of (two-way)
	zero or more Description instances

Field Elements:
    SE_String name;
   /*
    *  The name field specifies the title of the resource.
    */

    SE_Media_Format media_format;
   /*
    *  The media_format field specifies the media format of the resource.
    */

    SE_URN media_urn;
   /*
    *  The media_urn field specifies a SEDRIS media URN, in the form
    *  urn:x-sedris:<DNAS>:media=<MN>
    *  where:
    *    <DNAS> is domain name authority name string, and
    *    <MN> is a scoped browse media resource name string.
    */

    SE_String description;
   /*
    *  The description field, if not empty, provides a description of
    *  the resource.
    */


-------------------------------------------------------------------------------

Class Name: Camera Point

Definition:
 An instance of this DRM class specifies an eye point to view from,
 specifying a location, an orientation, and either an orthographic
 or perspective viewing volume.

 A viewing volume is defined, oriented along the axis defined to start at
 the camera <Location 3D> and oriented as specified by the components of
 the <Camera Point>. This orientation defines the coordinate space of the
 camera, where the camera is at (0, 0, 0) and is oriented to look down the
 +Y axis (assuming the XY plane defines the horizontal plane and the
 right-hand rule applies).

 The viewing volume of a given <Camera Point> instance is defined based on
 two planes specified by two parallel rectangles in space, the near
 clipping plane and the far clipping plane. The near clipping plane is the
 plane perpendicular to the camera axis and located camera_near metres
 from the <Location> of the <Camera Point>. The far clipping plane is
 parallel to the near clipping plane, but is located camera_far metres
 from the <Location> of the <Camera Point>.

 If projection = SE_CAM_PROJ_TYP_ORTHOGRAPHIC, then the viewing volume is
 the parallelepiped volume between the two clipping planes, bounded
 by the rectangle specified by (left, bottom) as its lower left
 corner and (right, top) as its upper right corner.

 If the camera defines a perspective view point, then the viewing
 volume is a frustum that can be described by in one of two ways.
 The perspective viewing volume can be defined as the volume starting
 at the near clipping plane rectangle and expanding to the far clipping
 plane. Alternatively, the perspective viewing volume can be described by
 a field-of-view angle, an aspect ratio that is the width of the frustum
 divided by its height, and the distance to the near and far clipping planes.

Primary Page in DRM Diagram:
     18

Secondary Pages in DRM Diagram:
     4
     7
     22

Example:
 1. A perspective viewing point defined at the beginning of a runway,
    oriented to look down the runway.

 2. An orthographic viewing point defined high above the transmittal, in
    the centre of the transmittal, to give a "God's eye view" of the entire
    transmittal.

FAQS:
 Q. What are <Camera Point> instances used for?
 A. Typically, <Camera Point> instances are used for pre-set views into
    a transmittal. They can also be used for eye point attachments for
    own-ship <Model> instances.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations

Associated to (one-way)
	zero or one Image instance 

Composed of (two-way)
	zero or one Classification Data instance
	one Location instance
	zero or more Property Value instances
	exactly 2 Reference Vector instances

Component of (two-way)
	one or more Aggregate Geometry instances

Field Elements:
    SE_Camera_Projection_Type projection;
   /*
    *  The projection_field specifies the type of perspective projection
    *  in use by the given <Camera Point> instance.
    */

    SE_Long_Float camera_near;
   /*
    *  The camera_near field specifies the distance from camera position
    *  to near clipping plane, in metres.
    */

    SE_Long_Float camera_far;
   /*
    *  The camera_far field specifies the distance from camera position
    *  to far clipping plane, in metres.
    */

    SE_Boolean use_left_right_bottom_top;
   /*
    *  If the value of the use_left_right_bottom_top field is SE_TRUE,
    *  use the parameters from the left, right, bottom, and top fields.
    *  These fields are always used for orthographic viewing, but
    *  perspective viewing can either use these fields or the
    *  field-of-view and aspect ratio fields.
    */

    SE_Long_Float left;
   /*
    *  The left field specifies the X coordinate of the lower left corner
    *  of the rectangle in the near clipping plane.
    */

    SE_Long_Float bottom;
   /*
    *  The bottom field specifies the Y coordinate of the lower left corner
    *  of the rectangle in the near clipping plane.
    */

    SE_Long_Float top;
   /*
    *  The top field specifies the Y coordinate of the upper right corner
    *  of the rectangle in the near clipping plane.
    */

    SE_Long_Float right;
   /*
    *  The right field specifies the X coordinate of the upper right corner
    *  of the rectangle in the near clipping plane.
    */

    SE_Long_Float horizontal_field_of_view;
   /*
    *  The horizontal_field_of_view field specifies the angle, in radians,
    *  of the horizontal field of view. This value is used for perspective
    *  viewing if the use_left_right_bottom_top flag is SE_FALSE, assuming
    *  a on-axis symmetric viewing volume.  Off axis viewing volumes are
    *  not supported.
    */

    SE_Long_Float aspect_ratio;
   /*
    *  The aspect_ratio field specifies the width of the frustum divided
    *  by its height. This value is used for perspective viewing if the
    *  use_left_right_bottom_top flag is SE_FALSE.
    */


-------------------------------------------------------------------------------

Class Name: CC 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Celestiocentric (CC) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. CC is used in Distributed Interactive Simulation (DIS) to define
    the position of all simulated entities.

 2. CC provides a convenient system for relating the SRF of a
    rotating Earth to a variety of Earth mass-centred inertial SRFs.

FAQS:
 Q. Where can users obtain further information on CC?
 A. See the SRM for additional details.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Euclidean_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: CD 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Celestiodetic (CD) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. A <Feature Node> instance representing Cinderella Castle at Walt
    Disney World in Orlando, Florida might have a <CD 3D Location>
    instance with coordinate.latitude = 28.25, coordinate.longitude =
    81.35, and coordinate.ellipsoidal_height = 0.0.

FAQS:
 Q. Where can users obtain further information on CD?
 A. See the SRM for additional details.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_CD_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: CD Surface Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Celestiodetic Surface SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. A <Feature Node> instance representing Cinderella Castle at Walt
    Disney World in Orlando, Florida might have a <CD Surface Location>
    instance with coordinate.latitude = 28.25 and
    coordinate.longitude = 81.35.

FAQS:
 Q. Where can users obtain further information on CD?
 A. See the SRM for additional details.

Superclass: Location Surface

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

Field Elements:
    SRM_CD_Surface_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: Citation

Definition:
 An instance of this DRM class specifies the recommended bibliographic
 reference information to be used for the data set being described,
 such that the information is provided in an ISO 19115 compatible form.

 In the documentation for this class, the phrase "the data set" refers
 to "the data set being described by the given <Citation> instance".
 This, in turn, refers to the object tree rooted at the aggregate
 of the <Citation> instance.

 If a <Citation> instance is shared by multiple aggregate objects, "the
 data set" refers to the collection of object trees rooted at its
 various aggregates.

Primary Page in DRM Diagram:
     20

Secondary Pages in DRM Diagram:
     1
     2
     6
     10
     14
     19
     22

Example:
 1. Consider a SEDRIS transmittal produced from Vector Product Format
    (VPF) source data, where the source data is not part of a series,
    and where this is its first edition as a SEDRIS transmittal. In
    this case, the transmittal was produced by Sterling Logicon,
    via their VPF-SEDRIS conversion software.

    The citation information for the transmittal's <Transmittal Root>
    is as follows.
        title = "dtopn/t007us01";
        edition = "1.0";
        series_name = "N/A";
        issue_identification = "N/A";
        other_citation_details = "Created using VPF-SEDRIS Converter";

    The <Absolute Time> instance's fields are set to the
    following.
            time_significance = SE_TIME_SIGNIF_PUBLICATION_DATE
            time_value.configuration      = SE_TIME_CFG_DATE_YMD_AND_TIME_H
            time_value.value.ymd_hms.year    = 2002;
            time_value.value.ymd_hms.month   = SE_MONTH_JUNE;
            time_value.value.ymd_hms.day     = 22;
            time_value.value.ymd_hms.hour    = 14;
            time_value.value.ymd_hms.minutes = 56;
            time_value.value.ymd_hms.seconds = 30.0;

FAQS:
 Q. What is the purpose of this class?
 A. This class provides ISO 19115-compliant metadata that allows a
    <Transmittal Root> or a high-level component of a <Transmittal Root>
    (e.g., a <Model>, <Image>, etc.) to be referenced in external documents.
    <Citation> identifies the object by name and edition/version, and
    specifies who created and/or released the object, and when it was
    created/released.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Mandatory Metadata

Composed of (two-way)
	one Absolute Time instance 

Composed of (two-way metadata)
	one Responsible Party instance 

Component of (two-way)
	zero or more Colour Table instances
	zero or more Colour Table Group instances
	zero or more Cross Reference instances
	zero or more Data Table instances
	zero or more Environment Root instances
	zero or more Image instances
	zero or more Keywords instances
	zero or more Library instances
	zero or more Model instances
	zero or more Property Set instances
	zero or more Property Set Table instances
	zero or more Property Set Table Group instances
	zero or more Sound instances
	zero or more Source instances
	zero or more Symbol instances
	zero or one Transmittal Root instance

Field Elements:
    SE_String title;
   /*
    *  The title field specifies the name by which the data object is known.
    */

    SE_String edition;
   /*
    *  If provided, the edition field specifies the version of the
    *  data object.
    */

    SE_String series_name;
   /*
    *  The series_name field specifies the name of the series, or
    *  aggregate data set, of which the given data set is a part.
    */

    SE_String issue_identification;
   /*
    *  The issue_identification field identifies the issue of the series.
    */

    SE_String other_citation_details;
   /*
    *  The other_citation_details field supplies any other information
    *  required to complete the citation that is not recorded elsewhere.
    */


-------------------------------------------------------------------------------

Class Name: Classification Data

Definition:
 An instance of this DRM class specifies an ECC indicating what
 the object to which the <Classification Data> is being applied
 represents. If the ECC requires elaboration by EACs, then
 the <Classification Data> may have elaborating <Property Value>
 components.

 <Classification Data> is used in three different contexts.

 1. A <Classification Data> instance can be a component of an
    <EDCS Use Summary Item>; see that class for an explanation
    of its usage.

 2. If X is an instance of a DRM class other than
    <EDCS Use Summary Item>, and X has a <Classification Data>
    instance as a component, then the <Classification Data>
    specifies what X represents.

 3. If X, Y are SEDRIS objects such that X has Y as a component
    with a <Classification Data> instance as a link object on the
    relationship, then the <Classification Data> specifies what Y
    represents. For this case, see <Classification Related Features>
    and <Classification Related Geometry> for a more detailed
    discussion.

Primary Page in DRM Diagram:
     20

Secondary Pages in DRM Diagram:
     2
     3
     4
     6
     8
     9
     10
     18
     19
     22

Example:
 1. An ECC such as ECC_DRIVE_IN_THEATRE or ECC_ROAD.

 2. A <Classification Data> with tag = ECC_BUILDING, elaborated with
    a <Property Value> component with attribute code
    EAC_BUILDING_FUNCTION and value EEC_BLDGFN_CASTLE:

        <Point Feature>
           <>
            |
            |
    <Classification Data>
      tag = ECC_BUILDING
           <>
            |
            |
     <Property Value>
     meaning = { SE_PROP_CODE_TYP_ATTRIBUTE,
                 {EAC_BUILDING_FUNCTION}}
     value   = { EDCS_AVT_ENUMERATION, {EEC_BLDGFN_CASTLE}}

FAQS:
 Q. Where can users find a list of EDCS' classification codes?
 A. See the EDCS Classification Codes section of Part 4, volume 17
    of the SEDRIS Documentation Set.

 Q. Why not just attach an elaborating <Property Value> component to
    the classified object?
 A. Because that would represent an attribute of the object instead
    of an elaboration of the classifying concept.

 Q. How can a data consumer determine which version of EDCS was
    used to produce a given transmittal?
 A. The Level 0 API has a function that provides this information:
        SE_GetTransmittalVersionInformation()

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	zero or more Property Value instances

Component of (two-way)
	zero or more Camera Point instances
	zero or more Data Table instances
	zero or more EDCS Use Summary Item instances
	zero or more Feature Representation instances
	zero or more Geometry Representation instances
	zero or more Image instances
	zero or more Model instances
	zero or more Property Set instances
	zero or more Sound instances
	zero or more Symbol instances

Field Elements:
    EDCS_Classification_Code tag;
   /*
    *  The tag field specifies the ECC.
    */


-------------------------------------------------------------------------------

Class Name: Classification Related Features

Definition:
 An instance of this DRM class specifies an aggregation of
 <Feature Hierarchy> instances, organized according to
 their ECCs, such that each component <Feature Hierarchy>
 instance represents

 1) a different thematic layer, or

 2) a different classification of <Feature Representation> instances
    within a single thematic layer.

 Each branch of a <Classification Related Features> instance therefore
 has a <Classification Data> instance associated with it as a link object,
 specifying its (possibly elaborated) classification.

Primary Page in DRM Diagram:
     8

Example:
 1. Several thematic layers of features might be grouped using a
    <Classification Related Features> instance, with each of its components
    representing a separate thematic layer (such as culture or vegetation).
    In such a case, the unique_descendants and strict_organizing_principle
    flags of the <Classification Related Features> instance should be set to
    SE_TRUE.  The <Classification Data> link object associated with
    each of its components identifies the contents of each thematic layer,
    and each of the components is an independent topological complex and
    has a <Feature Topology Hierarchy>.
         A region consisting of forest and water is represented as a
    <Classification Related Features> with strict_organizing_principle set
    to SE_TRUE, containing two <Union Of Features> components. The first,
    containing the forest features, has a <Classification Data>
    link object with tag = ECC_FOREST, while the second, containing the
    water features, has a <Classification Data> link object with
    tag = ECC_WATER.

 2. Considering the first example, suppose that roads run through
    the forest. The forest <Union Of Features> can then be replaced with
    another <Classification Related Features> having 2 branches, one
    classified as ECC_ROAD and the other as ECC_FOREST, and the
    strict_organizing_principle flag in example 1's
    <Classification Related Features> would set to SE_FALSE,
    because the forest branch at the coarse level contains non-forest
    (in this case, road) features.

 3. A large collection of features might be organized using a <Classification
    Related Features> instance, with multiple component <Union Of Features>
    instances, containing cultural, vegetation, and surface drainage
    features, respectively.

FAQS:
 Q. What is the purpose of this class?
 A. <Classification Related Features> exists to provide a mechanism
    for hierarchically organizing <Feature Representation> instances according to
    their (possibly elaborated) classification.

Superclass: Aggregate Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Non Cyclic Aggregations
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or more Colour instances
	zero or more Feature Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance 
	zero or more Property Description instances
	zero or one Spatial Extent instance

Composed of (two-way)
	one or more Feature Hierarchy instances, each with a Classification Data link object

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances
	zero or more Alternate Hierarchy Related Features instances, each with a Hierarchy Data link object
	zero or more Classification Related Features instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Feature Model instance
	zero or more LOD Related Features instances, each with a Base LOD Data link object
	zero or more Octant Related Features instances, each with a Octant Data link object
	zero or more Perimeter Related Features instances, each with a Perimeter Data link object
	zero or more Quadrant Related Features instances, each with a Quadrant Data link object
	zero or more Spatial Index Related Features instances, each with a Spatial Index Data link object
	zero or more State Related Features instances, each with a State Data link object
	zero or more Time Related Features instances, each with a Time Constraints Data link object

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant, that is, each <Feature Representation> instance that
    *  exists in the component tree rooted at the given <Aggregate Feature>,
    *  shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Feature Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


-------------------------------------------------------------------------------

Class Name: Classification Related Geometry

Definition:
 An instance of this DRM class specifies an aggregation of
 <Geometry Hierarchy> instances, organized according to their
 ECCs, such that each component <Geometry Hierarchy> instance
 represents

 1) a different thematic layer, or

 2) a different classification of <Geometry Representation> instances within a single
    thematic layer.

 Each branch of a <Classification Related Geometry> instance therefore
 has a <Classification Data> instance associated with it as a link object,
 specifying its (possibly elaborated) classification.

Primary Page in DRM Diagram:
     4

Example:
 1. A surface area consisting of forest and water is represented as a
    <Classification Related Geometry> with strict_organizing_principle set
    to SE_TRUE, containing two <Union Of Primitive Geometry> components. The
    first, containing the forest polygons, has a <Classification
    Data> link object with a tag value of ECC_FOREST, while the second,
    containing the water polygons, has a <Classification Data>
    link object with a tag value of ECC_WATER.

 2. In the first example, suppose a road runs through the forest.
    Then the forest <Union Of Primitive Geometry> can be replaced with
    another <Classification Related Geometry> having 2 branches, one
    classified as ECC_ROAD and the other as ECC_FOREST, and the
    strict_organizing_principle flag mentioned in example 1 is set to
    SE_FALSE, because the forest branch at the coarse level contains
    non-forest (that is, road) geometry.

FAQS:
 Q. What is the purpose of this class?
 A. <Classification Related Geometry> exists to provide a mechanism
    for hierarchically organizing <Geometry Representation> instances
    according to their (possibly elaborated) classification.

Superclass: Aggregate Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance

Composed of (two-way)
	one or more Geometry Hierarchy instances, each with a Classification Data link object

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


-------------------------------------------------------------------------------

Class Name: CM 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Celestiomagnetic 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. The positions of magnetic observatories are often expressed in
    celestiomagnetic coordinates.

 2. Positions of charged particles affected by the Earth's magnetic
    fields, as well as the magnetic fields themselves, can be
    expressed conveniently in celestiomagnetic coordinates.

FAQS:
 Q. How is the dipole position determined?
 A. The International Association of Geomagnetism and Aeronomy (IAGA)
    updates the dipole position every 5 years, and
    1995 is the epoch for the current location. The U.S. representative to
    the IAGA working group is John Quinn at the USGS in Golden, CO:
    303-273-8475, jquinn@usgs.gov
    The U.S. Air Force's AFRL/VSB maintains the value of the standard radius
    of the Earth; this value is currently set at 6378145.0 metres.

 Q. When the ORM represents the Earth, how is the centre of Earth
    defined, and what is the shape of the surface of Earth that is
    being assumed?
 A. The references that discuss the celestiomagnetic coordinate system
    (e.g., Handbook of Geophysics and the Space Environment, Airforce
    Geophysics Laboratory) do not define the centre of the Earth and
    the shape of the Earth, because the applications for ionospheric
    and near-Earth space analysis that use this SRF do not require a
    formal or precise standard defining the centre or the shape of
    the Earth. If a model were to apply a more precise measure, the
    output of the model would be essentially unchanged because the
    inaccuracy inherent in the model is large compared to the
    differences between the assumption of a spherical earth and another,
    more accurate ellipsoid. The SRM defines the CM SRF consistent
    with the World Geodetic System 1984 (WGS-84) ORM definition
    of the Earth's centre and surface ellipsoidal shape. This allows
    unambiguous interconversion of CM and other SRF locations (e.g. CD).

    The matrix transformation outlined above assumes that the user has
    already converted the celestiodetic (CD) { latitude, longitude,
    altitude} to a geocentric (GC) vector. This conversion is where the
    shape of the Earth is important. Likewise, once the CM vector is
    obtained, the shape of the Earth is important in the conversion from
    the CM vector to a CM { latitude, longitude, radius}.

 Q. Where can users obtain further information on CM?
 A. See the SRM for additional details.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Spherical_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: CMY Colour

Definition:
 An instance of this DRM class specifies the actual cyan, magenta, and
 yellow data values for a colour defined within the CMY colour model.
 These values shall be between 0.0 and 1.0, inclusive.

 Note that the CMY colour model is closely related to the RGB colour
 model. Cyan is the complement of Red (Cyan = 1.0 - Red); Magenta,
 of Green (Magenta = 1.0 - Green); and Yellow, of Blue (Yellow = 1.0 - Blue)

Primary Page in DRM Diagram:
     14

Example:
 1. A CMY colour for pure black (cmy_data.cyan = 1.0,
    cmy_data.magenta = 1.0, cmy_data.yellow = 1.0)

 2. A CMY colour for bright red (cmy_data.cyan = 0.0,
    cmy_data.magenta = 1.0, cmy_data.yellow = 1.0)

FAQS:
 Q. How can a data consumer who uses RGB rather than CMY get RGB from a
    CMY transmittal?
 A. This is very easy to do. After opening the transmittal, before
    retrieving any <Colour Data>, (or even before opening the
    transmittal), call the SE_SetColourModel() function, like so:
    "SE_SetColourModel(SE_CLR_MDL_RGB);" and for the rest of the
    execution of that program, would never get back a <CMY Colour>
    instance, because each <Colour Data> instance retrieved from
    there on out would be an <RGB Colour> instance.

    Also, if a user has colour data to be converted from one
    colour model to another (such as from CMY to RGB), standard
    utility functions are provided in the DRM API to carry out these
    data conversions.

 Q. How can a user who needs CMYK convert data into or out of CMYK?
 A. CMYK can be simply derived from CMY. If the user does not care to
    perform the derivation personally, the DRM API provides colour
    conversion functions that convert between CMY and CMYK.

    The derivation is quite simple. Given a CMY colour, e.g. one with
    data values of (cyan = 0.7, magenta = 0.5, yellow = 0.2), find the
    minimum value. In this example, yellow is the minimum value. To
    convert any CMY colour to a CMYK colour, set the black value equal
    to the minimum CMY value, then subtract the minimum value from each
    CMY value. In this example, the CMY colour of (cyan = 0.7,
    magenta = 0.5, yellow = 0.2) is converted to the CMYK values
    (cyan = 0.5, magenta = 0.3, yellow = 0.0, black = 0.2)

Superclass: Colour Data

Constraints:
     Publishable Object

Composed of (two-way)
	zero or one CMY Colour Control Link instance

Component of (two-way) (inherited)
	zero or more Ambient Colour instances
	zero or more Diffuse Colour instances
	zero or more Emissive Colour instances
	zero or more Specular Colour instances

Field Elements:
    SE_CMY_Data cmy_data;
   /*
    *  The cmy_data field specifies the CMY colour coordinate.
    */


-------------------------------------------------------------------------------

Class Name: CMY Colour Control Link

Definition:
 An instance of this DRM class specifies a specialized <Control Link>
 instance providing the connection between an ordered aggregation of
 <Expression> instances and the target fields of one or more
 <CMY Colour> instances.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     14

Example:
 1. Consider a transmittal, produced with CMY colours, the <Model Library>
    of which contains a <Model> representing a car with a <Geometry Model>,
    the geometry of which consists of <Polygon> instances with
    <Inline Colour> components.

    This car model is instanced in many places throughout the transmittal,
    and the data provider wishes to vary its appearance depending on the
    <Geometry Model Instance>. Consequently, each <CMY Colour> instance in
    the <Model> has a <CMY Colour Control Link> instance, supplying the
    value of the yellow field of the <CMY Colour> with a <Variable>.

           <Model>
             <>
             |------------------------------------
             |                                    |
             |                                    |
         <Geometry Model>                  <Interface Template>
             <>                                   |
             |                                    |
         <Union Of Primitive Geometry>            |
             <>                                   |
             |                                    |
         <Polygon>                                |
             <>                                   |
             |                                    |
         <Inline Colour>                          |
             <>                                   |
             |                                    |
         <Primitive Colour>                       |
             <>                                   |
             |                                    |
         <Ambient Colour>                         |
             <>                                   |
             |                                    |
         <CMY Colour>                             |
             <>                                   |
             |                                    |
      <CMY Colour Control Link>                   |
       cyan_expr_index    = 0                     |
       magenta_expr_index = 0                     |
       yellow_expr_index  = 1                     |
             <>                                   |
             |                                    |
       <Variable> --------------------------------

       meaning     = { SE_PROP_CODE_TYP_VARIABLE,
                       { SE_VAR_CODE_COLOUR_COORDINATE_3 }}
       value_unit  = EUC_UNITLESS
       value_scale = ESC_UNI
       value_type  = EDCS_AVT_REAL

    Each <Geometry Model Instance> of this <Model> can then provide,
    via the <Model>'s <Interface Template>, a different value for
    the yellow field of the <CMY Colour>, thus allowing each
    <Geometry Model Instance> to look different.

FAQS:
     None.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more CMY Colour instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Unsigned cyan_expr_index;
   /*
    *  The value of the cyan_expr_index field specifies
    *  which <Expression> component, if any, controls the
    *  cmy_data.cyan field value of the affected
    *  <CMY Colour> instances. If the value is zero, the
    *  cmy_data.cyan field of those instances is not controlled;
    *  otherwise, the value is a 1-based index into the ordered
    *  aggregation of <Expression> instances.
    */

    SE_Integer_Unsigned magenta_expr_index;
   /*
    *  The value of the magenta_expr_index field specifies which
    *  <Expression> component, if any, controls the cmy_data.magenta
    *  field value of the affected <CMY Colour> instances. If the
    *  value is zero, the cmy_data.magenta field of those instances
    *  is not controlled;
    *  otherwise, the value is a 1-based index into the ordered
    *  aggregation of <Expression> instances.
    */

    SE_Integer_Unsigned yellow_expr_index;
   /*
    *  The value of the yellow_expr_index field specifies which
    *  <Expression> component, if any,
    *  controls the cmy_data.yellow field value of the affected
    *  <CMY Colour> instances. If the value is zero, the
    *  cmy_data.yellow field of those instances is not controlled;
    *  otherwise, the value is a 1-based index into the ordered
    *  aggregation of <Expression> instances.
    */


-------------------------------------------------------------------------------

Class Name: Collision Volume

Definition:
 An instance of this DRM class specifies a <Volume> that
 encompasses part (possibly all) of the <Aggregate Geometry>
 of which it is a component, and is used in collision detection.

Primary Page in DRM Diagram:
     9

Secondary Pages in DRM Diagram:
     4

Example:
 1. The cylinder that describes the gun tube of a weapon system.

 2. Consider a geometric representation of a car, for which it will
    be necessary to compute intersections of the front of the car
    with other objects. In this example, the data provider constructs
    a perpendicular volume projecting from the front bumper of
    the car representation, and uses the resulting
    <Parallelelpiped Volume Extent> to specify a <Collision Volume>
    for the car representation.

FAQS:
 Q. May an <Aggregate Geometry> specify the same volume of space
    for both its <Bounding Volume> and its <Collision Volume>?
 A. Yes.

 Q. If an <Aggregate Geometry> instance has multiple
    <Collision Volume> components, how are they to be
    interpreted?
 A. The complete volume specified by the union of all the
    individual <Collision Volume> components is that which
    is used for collision detection. This capability is
    provided to allow <Collision Volume> information to
    be provided for complex shapes.

Superclass: Volume

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one Location 3D instance 
	one Volume Extent instance 

Component of (two-way)
	one Aggregate Geometry instance

-------------------------------------------------------------------------------

Abstract Class Name: Colour

Definition:
 An instance of a concrete class derived from this DRM class is
 either an instance of <Inline Colour> (which will be directly
 attached to representations of coloured objects) or an instance
 of <Colour Index> (referring to colours stored in a
 <Colour Table> instance).

Primary Page in DRM Diagram:
     14

Secondary Pages in DRM Diagram:
     4
     5
     8
     18
     19
     23

Example:
 See concrete subclasses for examples.

FAQS:
 Q. Where can one find more information on colour in SEDRIS?
 A. See Part 4, Volume 8 Images and Colour Models Technical Guide
    of the SEDRIS Documentation Set for further information.

 Q. Where do RGB values go in all this? How is a single, simple colour
    represented?
 A. The actual colour values are represented by a single <Primitive Colour>
    for each <Colour> instance. The location of this <Primitive Colour>
    depends on whether the <Colour> in question is an <Inline Colour>
    or a <Colour Index>. See those classes for details.

    A single, simple colour is represented as an <Inline Colour>, the
    colour_mapping of which is set to some variation of PRIMARY_COLOUR,
    and the <Primitive Colour> of which has only an <Ambient Colour>
    component specified.

    See <Primitive Colour> for further discussion.

 Q. How can a data provider represent a colour (such as RGB) that has a
    coefficient (such as K)?
 A. The data provider in this example has two options.
    1) The coefficient can be factored into the colour to create an
       <Inline Colour> instance.
    2) The colour can be placed in a <Colour Table> instance, then
       referenced by a <Colour Index> instance, the intensity of which
       is set to the value of the coefficient.

 Q. How does one determine how to apply a <Colour> instance to the object
    using it? What is the colour_mapping field for?
 A. The colour_mapping field indicates how to apply a <Colour> instance
    to the object using it -- which side of the object it applies to,
    whether it is used for the primary colour, for distance or image
    blending, or something else. (See SE_Colour_Mapping for the details
    of specific colour mappings).

    Incidentally, the colour_mapping field is a set rather than a
    simple enumeration, in order to simplify the consumer's task of
    identifying what a colour applies to. Its members are taken from the
    SE_Colour_Mapping enumeration.

 Q. Is a <Primitive Geometry> instance required to have a PRIMARY_COLOUR as
    a component (whether direct or inherited)?
 A. No. Some texture mapping techniques don't require colour to be present
    on <Polygon> instances, so some data providers have no PRIMARY_COLOUR
    to supply. If a consumer cannot handle the texture mapping technique
    used in a transmittal, then the consumer will have to choose some
    appropriate default colour.

 Q. Are all combinations of PRIMARY_COLOUR, DISTANCE_BLEND_COLOUR, and
    IMAGE_BLEND_COLOUR colour mapping valid for a single polygon's OTW
    front face?
 A. Yes.

Superclass: SEDRIS Abstract Base

Subclasses:
     Colour Index
     Inline Colour

Constraints:
     Publishable Object
     Colour Mapping Restrictions

Composed of (two-way)
	zero or one Presentation Domain instance 
	zero or one Translucency instance

Component of (two-way)
	zero or more Aggregate Feature instances
	zero or more Aggregate Geometry instances
	zero or more Primitive Feature instances
	zero or more Primitive Geometry instances
	zero or more Property Set instances
	zero or more Vertex instances

Field Elements:
    SE_Colour_Mapping colour_mapping;
   /*
    *  The colour_mapping field specifies the set of SE_Colour_Mapping
    *  tokens applicable to the given <Colour> instance.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Colour Data

Definition:
 An instance of a concrete class derived from this DRM class specifies
 a 3-tuple representing a colour value, that is, the actual colour
 coordinate values for a colour in the given colour model.

Primary Page in DRM Diagram:
     14

Secondary Pages in DRM Diagram:
     23

Example:
 See concrete subclasses for examples.

FAQS:
 Q. Consider a data consumer who does not use the colour model that
    the data provider used. How can the data consumer get the
    colour values in the consumer's colour model?
 A. If the consumer's colour model is one of the SEDRIS defined
    colour models (RGB, CMY, or HSV), the SEDRIS Level 0 API, if
    directed to do so, will change all <Primitive Colour> instances
    into whichever directly supported colour model the data consumer
    wishes to specify.

    If the data consumer's colour model is not directly supported, the
    consumer should retrieve the data in an appropriate colour model for
    use with one of the utility functions provided in the DRM API.

 Q. Where can users find more information on colour in SEDRIS?
 A. See Part 4, Volume 8 Images and Colour Models Technical Guide
    of the SEDRIS Documentation Set for further information.

Superclass: SEDRIS Abstract Base

Subclasses:
     CMY Colour
     HSV Colour
     RGB Colour

Constraints:
     Publishable Object

Component of (two-way)
	zero or more Ambient Colour instances
	zero or more Diffuse Colour instances
	zero or more Emissive Colour instances
	zero or more Specular Colour instances

-------------------------------------------------------------------------------

Class Name: Colour Index

Definition:
 An instance of this DRM class specifies the means of referencing a
 <Primitive Colour> that is contained in a <Colour Table>.

 A <Colour Index> instance contains an index into the primary
 <Colour Table> of the <Colour Table Group> to which it is
 associated. The <Colour Table Group> specifies which of its
 component <Colour Table> instances is being used, while the
 <Colour Index> specifies which <Primitive Colour> within that
 primary <Colour Table> is being referenced.

Primary Page in DRM Diagram:
     14

Example:
 1. Consider a <Colour Table Group>, the primary <Colour Table> of which
    consists of <Primitive Colour> instances for Out-the-Window (OTW)
    viewing conditions.

    A <Polygon> that references the kth <Primitive Colour> in this table
    will do so by having a <Colour Index> component that is associated to
    the <Colour Table Group> and the index value of which is set to k. If
    the <Colour Index> is solely responsible for the <Polygon>'s colour,
    its intensity_level will be 100.0.

FAQS:
 Q. I am attempting to consume an object, e.g. a <Polygon>, the
    <Colour> of which is specified by a <Colour Index>. What can
    I do to get access to the actual <Primitive Colour> being
    referred to?
 A. A consumer can access the actual <Primitive Colour> instances
    contained within a <Colour Table>, just as though <Inline Colour>
    instances had been used, via the Level 0 API.  See
    SE_InitializeComponentIterator()'s
    directly_attach_table_components parameter, and SE_GetComponent()'s
    directly_attach_table_components parameter.

 Q. How can I, as a data provider, specify that a <Colour> contributes
    x percent (e.g. 25%) of the total effect on a coloured object, while
    an <Image Mapping Function> provides the remaining 100%-x (e.g. 75%)?
 A. See <Colour Index>'s intensity_level field and <Image Mapping Function>'s
    intensity_level field.

Superclass: Colour

Constraints:
     Publishable Object
     Colour Mapping Restrictions

Associated to (one-way)
	one Colour Table Group instance

Composed of (two-way) (inherited)
	zero or one Presentation Domain instance 
	zero or one Translucency instance

Composed of (two-way)
	zero or one Colour Index Control Link instance

Component of (two-way) (inherited)
	zero or more Aggregate Feature instances
	zero or more Aggregate Geometry instances
	zero or more Primitive Feature instances
	zero or more Primitive Geometry instances
	zero or more Property Set instances
	zero or more Vertex instances

Inherited Field Elements:
    SE_Colour_Mapping colour_mapping;
   /*
    *  The colour_mapping field specifies the set of SE_Colour_Mapping
    *  tokens applicable to the given <Colour> instance.
    */


Field Elements:
    SE_Integer_Positive index;
   /*
    *  The index field specifies which <Primitive Colour> instance within the
    *  referenced <Colour Table Group> instance's primary <Colour Table>
    *  instance is being referred to.
    */

    SE_Long_Float intensity_level;
   /*
    *  The intensity_level field specifies the percent contribution of the
    *  colour to the total effect on the coloured object(s). Multiply the
    *  colour data values within the referenced <Primitive Colour> instance
    *  by this value to obtain their contribution to the total colour of
    *  the affected coloured object(s).
    */


-------------------------------------------------------------------------------

Class Name: Colour Index Control Link

Definition:
 An instance of this DRM class specifies an <Expression> instance
 that determines the index field value and / or an <Expression> instance
 that determines the intensity_level field value of all target
 <Colour Index> instances, thus controlling which <Primitive Colour>
 instance is referenced by each such <Colour Index> instance
 and / or its intensity.

 Note that since each controlled <Colour Index> instance may be bound
 to a different <Colour Table Group> instance, and thus to a different
 primary <Colour Table> instance, the fact that their index values are
 the same does not mean that the set of <Colour Index> instances
 controlled by a given <Colour Index Control Link> instance
 reference the same <Primitive Colour> instance.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     14

Example:
 1. Consider a <Geometry Model> within a <Model> representing a tree,
    where the geometry consists of a single <Polygon> defined with
    <Stamp Behaviour>.

                         <Geometry Model>
                                 <>
                                 |
                     <Union Of Primitive Geometry>
                                 <>
                           -----------------
                           |               |
                           |               |
                       <Polygon>   <Stamp Behaviour>
                          <>
                      -------------
                      |           |
                 <Colour Index>  <Image Mapping Function>
                      <>
                      |
             <Colour Index Control Link>
                      <>
                      |
                   <Variable>

    The <Polygon>'s appearance is determined by a <Colour Index>
    and an <Image Mapping Function>. However, for every <Geometry
    Model Instance> of this tree, the data provider wants to be
    able to vary the intensity_level of the <Colour Index>, so that
    its contribution to the overall colour of the tree changes from
    instance to instance. Consequently, the <Colour Index> has a
    <Colour Index Control Link>, which specifies a <Variable> that
    controls the intensity_level of the <Colour Index>, so that
    each <Geometry Model Instance> can supply its own <Literal>
    to determine the percent contribution of the <Colour Index>
    to the appearance of the <Polygon>.

FAQS:
 Q. What does a <Colour Index Control Link> instance control?
 A. A <Colour Index Control Link> controls the value of the index stored
    in a <Colour Index>, the value of the intensity_level stored in the
    <Colour Index>, or both.

 Q. Can a <Colour Index Control Link> instance be used to change which
    <Colour Table> is accessed within a <Colour Table Group>?
 A. No. The index always refers to the primary <Colour Table>.

 Q. Can a <Colour Index Control Link> instance be used to switch a
    <Colour Index> from one <Colour Table Group> to a different
    <Colour Table Group>?
 A. No. The link to the <Colour Table Group> is an association within the
    given transmittal, and associations cannot be changed dynamically.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more Colour Index instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Unsigned colour_index;
   /*
    *  The colour_index field specifies which <Expression> component,
    *  if any, specifies the index field value of the affected
    *  <Colour Index> instances.
    *  If this value is zero, the index field values of the
    *  <Colour Index> instances are not controlled.
    */

    SE_Integer_Unsigned intensity_level_index;
   /*
    *  The intensity_level_index field specifies which <Expression>
    *  component, if any, specifies the intensity_level field value
    *  of the affected <Colour Index> instances. If this value is
    *  zero, the intensity_level field values of the <Colour Index>
    *  instances are not controlled.
    */


-------------------------------------------------------------------------------

Class Name: Colour Shininess

Definition:
 An instance of this DRM class specifies the specular coefficient that
 specifies how shiny a colour is to appear, based on the angle between
 lines from the observer to the coloured object to the light source.

Primary Page in DRM Diagram:
     14

Example:
 1. Consider a <Colour Table> instance with a <Presentation Domain>
    component having presentation_domain = { OTW }, the entries of
    which are intended for use in representing metallic surfaces in
    the Out-the-Window (OTW) visual domain. Each <Primitive Colour>
    instance in the table is defined by a <Specular Colour> component
    and an <Ambient Colour> component.

    Depending on the angles between the observer, the metallic surface,
    and the light source, the shininess of each <Specular Colour> will
    vary. Hence, each <Specular Colour> instance in the table is given
    a <Colour Shininess> component, if the corresponding metal is
    sufficiently reflective.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Component of (two-way)
	one or more Specular Colour instances

Field Elements:
    SE_Long_Float shininess;
   /*
    *  The shininess field specifies the specular coefficient.
    */


-------------------------------------------------------------------------------

Class Name: Colour Table

Definition:
 An instance T of this DRM class specifies an ordered collection of
 <Primitive Colour> instances such that for the <Colour Table Group>
 instance G of which T is itself a component, the index value of any
 <Colour Index> instance associated to G unambiguously specifies one
 of the <Primitive Colour> components of T.

Primary Page in DRM Diagram:
     14

Example:
 1. Consider a data provider whose format specifies colours using
    palettes. To convey exactly the colour information used, each
    palette is represented in SEDRIS as the primary <Colour Table>
    in a <Colour Table Group>.

FAQS:
 Q. Why do <Colour Table> instances have <Primitive Colour> rather than
    <Inline Colour> components?
 A. A <Colour Table> instance does not contain <Inline Colour> components,
    because a <Colour Table> exists to store "just the colour", without
    any additional <Translucency>.

    1. The interpretation of a <Colour Index> is clearer if the referenced
       <Colour Table> entry cannot have additional <Translucency>.

    2. Storing <Primitive Colour> instances in a <Colour Table> allows
       greater re-use, since the same <Primitive Colour> can be referenced
       by different <Colour Index> instances with different <Translucency>
       components.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Colour Table Size

Composed of (two-way)
	zero or one Presentation Domain instance
	one or more {ordered} Primitive Colour instances

Composed of (two-way metadata)
	zero or one Access instance
	zero or one Citation instance
	zero or more Cross Reference instances
	zero or one Description instance

Component of (two-way)
	one Colour Table Group instance

-------------------------------------------------------------------------------

Class Name: Colour Table Group

Definition:
 An instance of this DRM class specifies an interchangeable group of one
 or more <Colour Table> instances.  The primary <Colour Table> in the
 group is indicated by the primary_table_index. When a reference is made
 to a <Colour Table> (for example, from an <Colour Index> component of a
 <Polygon>), the reference identifies the <Colour Table Group> and the
 index within the <Colour Table>, but not the specific <Colour Table>
 within the <Colour Table Group>. By definition, a <Colour Index> refers
 to a <Primitive Colour> from the primary <Colour Table> of the indicated
 <Colour Table Group>. An alternate <Colour Table> from within the
 <Colour Table Group> can be chosen at the discretion of the data consumer.

Primary Page in DRM Diagram:
     14

Secondary Pages in DRM Diagram:
     10

Example:
 1. One <Colour Table Group> in the transmittal, and that group has only one
    <Colour Table> within the group.  That <Colour Table> is the one and
    only <Colour Table> for the entire transmittal.

 2. A <Colour Table Group> with two <Colour Table> components, where one
    <Colour Table> is for normal, Out the Window (OTW) viewing, and
    the other <Colour Table> exists to change the appearance of the view to
    represent a view as seen through Night Vision Goggles (NVG).

 3. A <Colour Table Group> with 3 <Colour Table> components with the same
    usage of OTW.  Why 3 tables?  One <Colour Table> defines the colours
    as originally created by the data modellers.  The second <Colour Table>
    has different shades of blue for the lakes and skies because a company
    VIP came through and didn't like the blues that were there. The third
    <Colour Table> contains yet another set of blues for the lakes, and
    different shades of green for the trees and tanks, because the customer
    in charge of the program came through and didn't think the colours were
    realistic.  In this particular example, it's left as an exercise to the
    data provider to determine which <Colour Table> should be the primary
    <Colour Table> for the group.

FAQS:
 Q. Can a transmittal in any way refer to a <Colour Table> in a
    <Colour Table Group> other than the primary <Colour Table>?
 A. No. The only <Colour Table> that can be referenced in any
    <Colour Table Group> is the primary <Colour Table>.

 Q. Since they cannot be referenced, why bother to have alternate
    <Colour Table> instances within a <Colour Table Group>?
 A. Because in real life, many run-time systems do have multiple
    colour tables they can switch between for various reasons,
    and these tables should be shared to promote interoperability.
    See the example section, below.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Colour Table Size

Associated by (one-way)
	zero or more Colour Index instances

Composed of (two-way)
	one or more {ordered} Colour Table instances

Composed of (two-way metadata)
	zero or one Access instance
	zero or one Citation instance
	zero or more Cross Reference instances
	zero or one Description instance

Component of (two-way)
	one Colour Table Library instance

Field Elements:
    SE_Integer_Positive primary_table_index;
   /*
    *  The primary_table_index field specifies the primary
    *  <Colour Table> component of
    *  the given <Colour Table Group> instance from its
    *  ordered <Colour Table> components.
    */

    SE_Integer_Positive table_size;
   /*
    *  The table_size field specifies the size of any and all <Colour Table>
    *  components of the given <Colour Table Group> instance.
    */


-------------------------------------------------------------------------------

Class Name: Colour Table Library

Definition:
 An instance of this DRM class specifies a <Library> of
 <Colour Table Group> instances.

Primary Page in DRM Diagram:
     10

Secondary Pages in DRM Diagram:
     1
     14

Example:
 1. Consider a data provider whose format specifies colours using
    palettes. To convey exactly the colour information used, each
    palette is represented in SEDRIS as the primary <Colour Table>
    in a <Colour Table Group>. The collection of these <Colour Table
    Group> instances is the <Colour Table Library> of the transmittal
    being produced.

FAQS:
     None.

Superclass: Library

Constraints:
     Publishable Object

Composed of (two-way)
	one or more {ordered} Colour Table Group instances

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or one Citation instance
	zero or one Description instance

Component of (two-way)
	one Transmittal Root instance

-------------------------------------------------------------------------------

Class Name: Cone Directional Light

Definition:
 An instance of this DRM class specifies a <Directional Light Behaviour>,
 the intensity of which varies depending on the observer's position
 relative to the light's location, direction, and shape. This light
 takes the shape of a cone, which can be elliptical.

 A <Cone Directional Light> instance can specify a plane that divides
 the light cone into an upper and a lower section along the body of
 the cone. The upper section receives the primary colour while
 the lower section receives the secondary colour, if one is used.

Primary Page in DRM Diagram:
     21

Example:
 1. A 100 kilometre highway has regularly spaced lampposts. Each lamp has
    <Cone Directional Light> with <Lobe Data> pointing down. If all the
    lamps use the same <Cone Directional Light> instance, then all the
    directions will be parallel. Due to the curvature of the Earth, very
    few of the lights will shine directly down; the others will be slightly
    skewed. If, instead, the set of lamps is divided into smaller contiguous
    groups, each with its own <Cone Directional Light> instance using a
    <Location> near the centre of the group, the skewing effect will be
    greatly minimized.

 2. Consider a <Cone Directional Light> instance with a primary colour
    that is a <Colour Index> with intensity_level = 0.8.

    <Cone Directional Light>
    has_plane                = SE_FALSE
    plane_angular_offset     = 0.0
    use_full_intensity       = SE_FALSE
    minimum_colour_intensity = 0.2
    invisible_behind         = SE_FALSE
    <>
    |
    <Lobe Data>
    horizontal_width = 40.0 pi / 180.0 radians
    vertical_width   = 40.0 pi / 180.0 radians

    equation:
    final_intensity = minimum_colour_intensity +
      ((((width / 2.0) - degrees_away_from_direction_vector) / (width / 2.0))
                   *  (full_intensity - minimum_colour_intensity))

    At 15 pi / 180.0 radians from the SE_REF_VEC_TYP_LIGHT_DIRECTION vector
    in the horizontal direction, the final intensity is 0.35.

    At 25 pi / 180.0 radians from the SE_REF_VEC_TYP_LIGHT_DIRECTION vector
    in the horizontal direction, the final intensity is 0.2, because that
    position lies outside the horizontal width of the lobe.

 3. Consider the following <Cone Directional Light> instance, with
    its primary colour specified by an <Inline Colour>, so that the
    full intensity is 1.0.

    <Cone Directional Light>
    has_plane                = SE_FALSE
    plane_angular_offset     = 0.0
    use_full_intensity       = SE_TRUE
    minimum_colour_intensity = 0.5
    invisible_behind         = SE_FALSE
    <>
    |
    <Lobe Data>
    horizontal_width = pi / 2.0 radians
    vertical_width   = pi / 2.0 radians

    At 40 pi / 180.0 radians from the SE_REF_VEC_TYP_LIGHT_DIRECTION vector
    in the horizontal direction, the final_intensity is 1.0, because
    use_full_intensity is SE_TRUE and the position lies inside the
    horizontal width of the lobe.

    At 50 pi / 180.0 radians from the SE_REF_VEC_TYP_LIGHT_DIRECTION vector
    in the horizontal direction, the final_intensity is 0.5, because the
    position is outside the horizontal width.

 4. Consider a <Cone Directional Light> instance with both a primary and
    a secondary colour, each of which is a <Colour Index> instance with
    intensity 0.8

    <Cone Directional Light>
    has_plane                = SE_FALSE
    plane_angular_offset     = 0.0
    use_full_intensity       = SE_TRUE
    minimum_colour_intensity = 0.0
    invisible_behind         = SE_FALSE
    <>
    |
    <Lobe Data>
    horizontal_width = 70.0 pi / 180.0 radians
    vertical_width   = pi / 2.0 radians

    At 40 pi / 180.0 radians from the SE_REF_VEC_TYP_LIGHT_DIRECTION vector
    in the vertical direction, the primary colour is in effect with
    intensity 0.8, because the position is inside the vertical width and
    use_full_intensity is SE_TRUE.

    At 40 pi / 180.0 radians from the SE_REF_VEC_TYP_LIGHT_DIRECTION vector
    in the horizontal direction, the secondary colour is in effect with
    intensity 0.8, because the position is outside the horizontal width and
    minimum_colour_intensity = 0.0.

 5. Consider a <Cone Directional Light> instance with both a primary and
    a secondary colour, each of which is a <Colour Index> instance with
    intensity 0.8

    <Cone Directional Light>
    has_plane                = SE_TRUE
    plane_angular_offset     = 20.0
    use_full_intensity       = SE_FALSE
    minimum_colour_intensity = 0.0
    invisible_behind         = SE_FALSE
    <>
    |
    <Lobe Data>
    horizontal_width = 70.0 pi / 180.0 radians
    vertical_width   = pi / 2.0 radians

    At 25 pi / 180.0 radians from the SE_REF_VEC_TYP_LIGHT_DIRECTION vector
    in the vertical direction, towards the positive end of the
    SE_REF_VEC_TYP_VERTICAL_AXIS vector, the full intensity of the primary
    colour is 0.8, because this position lies in the upper section of the
    cone and the minimum_colour_intensity value is 0.0.

    At 15 pi / 180.0 radians from the SE_REF_VEC_TYP_LIGHT_DIRECTION vector
    in the vertical direction, towards the positive end of the
    SE_REF_VEC_TYP_VERTICAL_AXIS vector, the full intensity of the
    secondary colour is 0.8, because this position lies in the lower
    section of the cone and the minimum_colour_intensity value is 0.0.

FAQS:
     None.

Superclass: Directional Light Behaviour

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one Lobe Data instance 
	one Location instance

Component of (two-way) (inherited)
	one or more Light Rendering Properties instances

Field Elements:
    SE_Boolean has_plane;
   /*
    *  If the value of the has_plane field is SE_TRUE, a plane, based at
    *  the cone apex and extending along the body of the cone, divides
    *  the light cone into an upper and a lower section. The upper section
    *  receives the primary colour. If a secondary colour is used, the
    *  lower section receives it.
    */

    SE_Long_Float plane_angular_offset;
   /*
    *  If has_plane is SE_TRUE, the value of the plane_angular_offset field
    *  defines the angular offset of the plane measured in radians from the
    *  <Lobe Data> instance's SE_REF_VEC_TYP_LIGHT_DIRECTION vector and
    *  along its SE_REF_VEC_TYP_VERTICAL_AXIS vector. The resulting upper
    *  section of the light is taken to be between the plane and the
    *  positive end of the SE_REF_VEC_TYP_VERTICAL_AXIS vector.
    *
    *  The value of the plane_angular_offset field is ignored if
    *  has_plane is SE_FALSE.
    */

    SE_Boolean use_full_intensity;
   /*
    *  If the value of the use_full_intensity field is SE_TRUE, it indicates
    *  that the full intensity of the light is shown in the cone shaped area.
    *  Otherwise, the intensity of the light decreases (towards the
    *  minimum_colour_intensity value) as one moves away from the
    *  SE_REF_VEC_TYP_LIGHT_DIRECTION vector.
    */

    SE_Long_Float minimum_colour_intensity;
   /*
    *  The value of the minimum_colour_intensity field is used in
    *  conjunction with the primary colour's intensity value. If
    *  the primary colour is represented by a <Colour Index> instance,
    *  the full intensity is specified by its intensity_level field.
    *  If the primary colour is represented by an <Inline Colour>
    *  instance, the full intensity is 1.0.
    *
    *  A location in the direct path of the <Lobe Data> instance's
    *  SE_REF_VEC_TYP_LIGHT_DIRECTION vector receives the full intensity
    *  value. If use_full_intensity is SE_FALSE, the intensity decreases
    *  with increasing distance from the SE_REF_VEC_TYP_LIGHT_DIRECTION
    *  vector, until the boundary specified by the horizontal and
    *  vertical <Lobe Data> widths is reached. Outside the lobe, the
    *  intensity is minimum_colour_intensity.
    *
    *  If the minimum_colour_intensity value is 0.0, the secondary colour
    *  (if present) will be seen outside the lobe. If no secondary colour
    *  is present, nothing is visible outside the lobe.
    */

    SE_Boolean invisible_behind;
   /*
    *  If the value of the invisible_behind field is SE_TRUE, the
    *  directional light is invisible when viewed from behind the
    *  plane of the directional light.
    */


-------------------------------------------------------------------------------

Class Name: Conformal Behaviour

Definition:
 The <Geometry Hierarchy> to which a <Conformal Behaviour> is attached
 conforms to the terrain skin automatically, either "parallel to gravity"
 (for example, ensuring that the base of a building touches the ground
 without warping the walls) or orthogonally to the terrain skin (for
 example, as in the case of a fence).

Primary Page in DRM Diagram:
     3

Secondary Pages in DRM Diagram:
     4
     5
     7
     18

Example:
 1. A <Model> instanced to terrain. A <Geometry Model Instance> may specify
    that the location component of its <Transformation> is
    <Conformal Behaviour> to the terrain skin. The terrain skin may use a
    <Classification Related Geometry> aggregation to separate the
    surface that <Model> conforms to from the rest of the
    <Geometry Representation>.
    If so, the <Conformal Behaviour> instance can associate with the terrain
    skin. This would help the consumer resolve ambiguities when deriving the
    actual 3D location.  The surface to be conformed to can be further
    qualified by the <Property Value>.

 2. Consider a tree canopy that conforms to multiple, or continuous LOD
    terrain. The entire collection of tree canopy <Polygon> instances
    and the tree wall <Polygon> instances around the canopy is aggregated
    into a <Classification Related Geometry>, which is associated with an
    <Areal Feature>.

    Each <Vertex> of the <Polygon> instances representing the tree wall
    around the canopy uses <Conformal Behaviour>. The <Conformal Behaviour>
    of each <Vertex> on the ground has parallel_gravity = SE_FALSE and
    offset_distance = 0, while the <Conformal Behaviour> of the <Vertex>
    instances at the top has parallel_gravity = SE_TRUE and a positive
    offset_distance indicating the height of the tree wall. Each <Vertex>
    of the <Polygon> instances representing the tree canopy has a
    <Conformal Behaviour> with parallel_gravity = SE_TRUE and
    offset_distance indicating the height of the tree canopy.

 3. An airplane <Model> might have <Geometry Representation>
    that represents the projected
    shadow. The <Geometry Hierarchy> containing the shadow could be given
    <Conformal Behaviour> so that it will hug the nominal terrain surface.

FAQS:
 Q. Why has <Conformal Behaviour> been made into a class of its own
    and not implemented as a kind of <Control Link>?
 A. <Conformal Behaviour> could be achieved via a <Translation Control Link>
    instance with a <Variable> component that represents a Zenith (HAT) test.
    We have chosen to represent this kind of behaviour as a class of its own
    because it is a well-understood (abstracted) self-contained behaviour.
    This is also the case with <Stamp Behaviour> and level of detail.
    SEDRIS has generally been designed to allow for high-level abstraction
    as well as lower-level descriptions to exist in the same <Model>.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Component of (two-way)
	zero or more Aggregate Geometry instances
	zero or more Geometry Model Instance instances
	zero or more Point instances
	zero or more Vertex instances

Field Elements:
    SE_Boolean parallel_gravity;
   /*
    *  If the value of the parallel_gravity field is SE_TRUE, the
    *  direction of conformance is parallel to gravity; otherwise,
    *  the direction of conformance is orthogonal to the terrain skin.
    */

    SE_Float offset_distance;
   /*
    *  The offset_distance field specifies the distance above the
    *  given surface, in metres.
    */


-------------------------------------------------------------------------------

Class Name: Contact Point

Definition:
 An instance of this DRM class specifies an identified location and
 orientation that run-time systems can identify as a place where
 intersection tests should occur.

Primary Page in DRM Diagram:
     2

Example:
 1. Consider a <Model> specifying a geometric representation of
    an airplane, which is to be used for an application in which
    it is useful to know the position of the bottom of the wheels
    when the landing gear is fully extended. In this case, the
    landing gear is represented as a separate <Model>, and the
    <Geometry Model> of the landing gear <Model> specifies a
    <Contact Point> to identify this location.

 2. The hitch point on a train or pickup truck.

 3. The endpoint of a loading ramp on a roll-on-roll-off ship.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	one Location 3D instance

Component of (two-way)
	one Geometry Model instance

-------------------------------------------------------------------------------

Class Name: Continuous LOD Related Geometry

Definition:
 An instance of this DRM class is used to represent
 continuous terrain or continuous adaptive terrain, by replacing
 a <Polygon> instance with a set of fragmented <Polygon> instances
 that represent the terrain at a finer level of detail at close range
 (or alternatively, with a coarser level of detail at long range).

Primary Page in DRM Diagram:
     4

Example:
 1. A Continuous LOD node can be fragmented into one or more <Polygon>
    instances and will then have zero or more Continuous LOD nodes as
    subnodes. Any Continuous LOD node that contains Continuous LOD
    nodes under it will have the terminating_node flag set to SE_FALSE. The
    <Union Of Primitive Geometry> node will contain <Polygon> data. If a
    Continuous LOD node is encountered with the terminating_node flag
    set to SE_TRUE, that means it only has a <Union Of Primitive Geometry>
    node under it.

 Continuous LOD Related Geometry (terminating_node=0)
    <>
 ____|___________________________________________
 |     |             |            |             |
 UoPG  CLOD         CLOD         CLOD         CLOD
 <>    term_node=1  term_node=0  term_node=1  term_node=1
 |     <>              <>         <>           <>
 |     |             ___|___      |             |
 Poly  UoPG          |     |      UoPG         UoPG
       <>            |     |      <>           <>
       |             |     |       |            |
       Poly          |     |      Poly         Poly
                     |     |
                     |     |---------------|---------------|---------------|
                     UoPG  CLOD(t_n=1)  CLOD(t_n=1)  CLOD(t_n=1)  CLOD(t_n=1)
                    <>    <>           <>           <>           <>
                     |     |            |            |            |
                     Poly  UoPG         UoPG         UoPG         UoPG
                          <>           <>           <>           <>
                           |            |            |            |
                           Poly         Poly         Poly         Poly

    (NOTE that this example only shows two levels of polygon fragmentation.
    Each <Continuous LOD Related Geometry> could contain
    component <Continuous LOD Related Geometry> instances, but
    that would make a huge picture. Only the idea is represented here.)

FAQS:
 Q. How can a consumer find the finest fragmentation of polygons?

 A. Follow all Continuous LOD chains. Wherever a Continuous LOD node
    with terminating_node set to SE_TRUE is encountered, that identifies
    the finest fragmentation of <Polygon> instances under the
    <Union Of Primitive Geometry> at that Continuous LOD.

 Q. What do the "terminating" <Polygon> instances represent?

 A. The combination of polygons from the Continuous LOD nodes with
    terminating_node set to SE_TRUE make up the <Polygon> identified
    under the <Union Of Primitive Geometry> from the Continuous LOD node
    with terminating_node set to SE_FALSE.

 Q. Since <Continuous LOD Related Geometry> is not organized
    with link class instances, such as <Base LOD Data>, how
    can consumers determine the range between fine and coarse data?

 A. The uniqueness of Continuous LOD data is that it is not based on
    range data for an entire area to blend in. Rather, the blending of
    data is performed typically at the IG. In source data, all potential
    polygon fragmentations have been identified. Therefore, it is not
    necessary to have range data stored in a link class.

Superclass: Aggregate Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates
     Continuous LOD Restrictions

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance

Composed of (two-way)
	zero or more Continuous LOD Related Geometry instances
	one Union Of Primitive Geometry instance

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Component of (two-way)
	zero or one Continuous LOD Related Geometry instance

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


Field Elements:
    SE_Boolean terminating_node;
   /*
    *  The terminating_node field specifies whether the current level of
    *  fragmentation is the lowest level of fragmentation for a specific
    *  chain. This flag is set to SE_TRUE if no other
    *  <Continuous LOD Related Geometry> instances are
    *  found below this chain's current level.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Control Link

Definition:
 An instance of a concrete class derived from this DRM class specifies
 the connection between <Expression> instances and the fields of other
 SEDRIS objects (called target objects).  For each class of target object,
 there shall be a specialization of this class to match it.  Objects of
 the specialized subclass shall be aggregated by the target object.  The
 definition of each subclass shall specify how the ordered list of
 <Expression> instances is used to determine the values of the fields of
 the target object (called target fields).

 In general, a specialized <Control Link> will contain at least one
 field (called a link field) for each target field in the
 target object.  The link field is an index into the ordered aggregation
 of <Expression> instances, and is used to select the specific <Expression>
 that controls the value of the target field. The specialization may also
 contain "constraint" fields that are indexes into the ordered aggregation
 of <Expression> instances, and are used to constrain the values of the
 target field.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     16
     23

Example:
 See individual subclasses for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     CMY Colour Control Link
     Colour Index Control Link
     HSV Colour Control Link
     Light Rendering Properties Control Link
     Light Source Control Link
     LSR 3D Location Control Link
     Polygon Control Link
     Property Set Index Control Link
     Property Table Reference Control Link
     Reference Vector Control Link
     RGB Colour Control Link
     Rotation Control Link
     Scale Control Link
     Sound Instance Control Link
     State Control Link
     Texture Coordinate Control Link
     Translation Control Link
     Translucency Control Link

Constraints:
     Publishable Object

Composed of (two-way)
	one or more {ordered} Expression instances

Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


-------------------------------------------------------------------------------

Class Name: Cross Reference

Definition:
 An instance of this DRM class specifies a CSDGM-compliant reference to
 an external data set that is related in some way to the containing
 SEDRIS object to which the <Cross Reference> is attached.

Primary Page in DRM Diagram:
     19

Secondary Pages in DRM Diagram:
     1
     2
     3
     6
     8
     10
     14
     22

Example:
 1. A reference to a SEDRIS transmittal covering the adjacent area
    to the east.

 2. A reference to a small-scale map covering the entire area described
    by a transmittal.

 3. A reference to a Statement of Work containing the requirements used
    to create a transmittal.

 4. A reference to a Product Specification describing the content of one
    of the types of a <Data Table>.

FAQS:
 Q. What is the purpose of this class?

 A. This class provides a very general-purpose mechanism that can be used
    to document almost any type of relationship between an object in a
    SEDRIS transmittal and an external data set.  It uses a <Citation>
    component to refer to the external data set, so it has the flavor of a
    bibliographical reference, and can be used to refer to books, maps,
    presentations, or any other type of "publication", as well as to digital
    data sets.  Each <Cross Reference> also includes a field in which the
    nature of the relationship can be described.  Note that a <Cross
    Reference> is similar to a <Source>, but is more general in nature.
    <Source> instances should be used to document the data sources that were
    used in the creation of a SEDRIS transmittal or one of its major
    subordinate objects.  <Cross Reference> instances should be used to
    refer to other related materials that may be of interest to the user
    of a SEDRIS transmittal.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way metadata)
	one Citation instance 

Component of (two-way)
	zero or more Colour Table instances
	zero or more Colour Table Group instances
	zero or more Data Table instances
	zero or more Environment Root instances
	zero or more Feature Model instances
	zero or more Feature Representation instances
	zero or more Geometry Hierarchy instances
	zero or more Geometry Model instances
	zero or more Image instances
	zero or more Model instances
	zero or more Property Set instances
	zero or more Property Set Table instances
	zero or more Property Set Table Group instances
	zero or more Sound instances
	zero or more Symbol instances
	zero or one Transmittal Root instance

Field Elements:
    SE_String relationship;
   /*
    *  If provided, the relationship field describes the relationship of
    *  the cited data set to the given data set.
    */


-------------------------------------------------------------------------------

Class Name: Cylindrical Volume Extent

Definition:
 An instance of this DRM class specifies the radius and orientation of
 the major and minor axes that specify an elliptical cylinder volume
 relative to the location of the volume centre (which is specified
 separately by the aggregate of the <Cylindrical Volume Extent>, and
 which is at the mid point of all three axes).

Primary Page in DRM Diagram:
     9

Example:
 1. A <Collision Volume> for a car bumper modeled as a line segment uses
    a (degenerate) <Cylindrical Volume Extent> with major_axis_radius =
    minor_axis_radius = 0.0.

FAQS:
 Q. How is the direction of the cylinder's axis determined?
 A. The cylinder axis direction is perpendicular to the two component
    <Reference Vector> instances, which give the major and minor axes
    of the elliptical cross-section.

Superclass: Volume Extent

Constraints:
     Publishable Object
     Cylindrical Structure

Composed of (two-way)
	exactly 2 {ordered} Reference Vector instances 

Component of (two-way) (inherited)
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SE_Long_Float major_axis_radius;
   /*
    *  The major_axis_radius field is specified in metres.
    */

    SE_Long_Float minor_axis_radius;
   /*
    *  The minor_axis_radius field is specified in metres.
    */

    SE_Long_Float cylinder_length;
   /*
    *  The cylinder_length field is specified in metres.
    */


-------------------------------------------------------------------------------

Class Name: Data Quality

Definition:
 An instance of this DRM class specifies a ISO 19115-compliant
 description of the level of quality of the information contained
 in the aggregating SEDRIS object.

Primary Page in DRM Diagram:
     20

Secondary Pages in DRM Diagram:
     1
     2
     3
     6
     8
     19

Example:
 1. Description of the level of data quality for the <Feature Representation>
    instances within a particular thematic layer, such as vegetation.

FAQS:
 Q. How does the data quality of a SEDRIS object depend on the data quality
    of the sources used in its creation?
 A. Each of the processing steps that is performed in the
    creation of a SEDRIS object has some effect on the quality
    of the result, but the individual impacts of the processing
    steps are not well understood, let alone the combined
    impacts.

 Q. How does the data quality of a <Transmittal Root>, or
    any other SEDRIS object within a transmittal, depend on the
    data quality of its components?
 A. The data quality of the whole is certainly no better than
    the worst of its components.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	zero or one Lineage instance 

Component of (two-way)
	zero or more Data Table instances
	zero or more Environment Root instances
	zero or more Feature Model instances
	zero or more Feature Representation instances
	zero or more Geometry Hierarchy instances
	zero or more Geometry Model instances
	zero or more Model instances
	zero or more Property Set instances
	zero or one Transmittal Root instance

Field Elements:
    SE_Boolean fictional;
   /*
    *  The value of the fictional field is SE_TRUE if *any* aspect of
    *  the data content *intentionally* deviates from the available
    *  source data - that is, was "made up" out of thin air; fictional is
    *  SE_FALSE otherwise.
    */

    SE_Data_Quality_Element field_accuracy;
   /*
    *  The field_accuracy field specifies a statement of field accuracy.
    */

    SE_Data_Quality_Element logical_consistency;
   /*
    *  The logical_consistency field specifies an optional statement
    *  of logical consistency.
    */

    SE_Data_Quality_Element completeness;
   /*
    *  The completeness field specifies an optional statement of completeness.
    */

    SE_Data_Quality_Element abs_horiz_pos_accuracy;
   /*
    *  The abs_horiz_pos_accuracy field specifies an optional statement
    *  that may alternately be expressed
    *  numerically through the use of
    *  EAC_ABSOLUTE_HORIZONTAL_ACCURACY.
    */

    SE_Data_Quality_Element rel_horiz_pos_accuracy;
   /*
    *  The rel_horiz_pos_accuracy field specifies an optional statement
    *  that may alternately be expressed
    *  numerically through the use of
    *  EAC_RELATIVE_HORIZONTAL_ACCURACY.
    */

    SE_Data_Quality_Element abs_vert_pos_accuracy;
   /*
    *  The abs_vert_pos_accuracy field specifies an optional statement
    *  that may alternately be expressed
    *  numerically through the use of
    *  EAC_ABSOLUTE_VERTICAL_ACCURACY.
    */

    SE_Data_Quality_Element rel_vert_pos_accuracy;
   /*
    *  The rel_vert_pos_accuracy field specifies an optional statement
    *  that may alternately be expressed
    *  numerically through the use of
    *  EAC_RELATIVE_VERTICAL_ACCURACY.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Data Table

Definition:
 An instance of a concrete class derived from this DRM class specifies
 an N-dimensional array of data cells, each of which has the same
 data signature, representing some data set. The general nature of
 the data set being represented is indicated by the required
 <Classification Data> component. The specific contents in the context
 of that <Classification Data> instance are given by the given
 <Data Table> instance's signature, that is, the combination of its
 ordered <Axis> and <Table Property Description> components.

 The N dimensions of a <Data Table> instance are specified by its
 N ordered <Axis> components.

 The complete structure of a cell within a <Data Table> instance
 is described by the complete ordered set of
 <Table Property Description> components of that <Data Table> instance;
 this set is also called the data signature, and applies to all
 cells of the <Data Table> instance.

 Additional information about any given cell property, where
 such information is to be applied throughout the scope of
 the <Data Table> instance, such as sentinel values and tolerances,
 is specified by attaching <Property Characteristic> components
 to the applicable <Table Property Description> instance(s).

Primary Page in DRM Diagram:
     6

Secondary Pages in DRM Diagram:
     10
     23

Example:
 See individual subclasses for examples.

FAQS:
 Q. Where can users obtain further information about the <Data Table>
    class and its usage?
 A. See Part 4 Volume 6, Data Tables Technical Guide, of the
    SEDRIS Documentation Set for detailed information on
    <Data Table> manipulation.

 Q. The <Data Table> class does not have a field for the actual cells
    of a <Data Table> instance. Where are they, and how are they
    accessed?
 A. The actual cells of a <Data Table> instance are hidden by the API
    implementation being used to provide the <Data Table>. See the
    SE_PutDataTableData() function in the level 0 write API for
    <Data Table> production, and the level 0 function
    SE_GetDataTableData() for consumption.

 Q. How does a <Data Table> instance indicate what it represents?
 A. The general nature of the data set in indicated by the required
    <Classification Data> component. The specific contents in the
    context of that <Classification Data> instance are given by the
    <Data Table> instance's signature, that is, the combination of its
    ordered <Axis> and <Table Property Description> components.

 Q. Can values from a <Data Table> be used to drive a <Control Link>?
 A. Yes; see <Property Table>.

Superclass: SEDRIS Abstract Base

Subclasses:
     Property Grid
     Property Table

Constraints:
     Publishable Object
     Index Codes within Tables

Composed of (two-way)
	one or more {ordered} Axis instances
	one Classification Data instance 
	zero or more {ordered} Image Mapping Function instances
	one or more {ordered} Table Property Description instances

Composed of (two-way metadata)
	zero or one Access instance
	zero or one Citation instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way)
	zero or one Data Table Library instance
	zero or more Property Grid instances

-------------------------------------------------------------------------------

Class Name: Data Table Library

Definition:
 An instance of this DRM class specifies a <Library> containing
 <Data Table> instances that can be referenced or "instanced"
 by an object within the transmittal.  If the particular
 <Data Table> instance is a <Property Grid> instance, the
 associating <Geometry Representation> instance shall have a
 <Location> component that is used as the origin for the spatial
 <Axis> components of the <Property Grid> instance - most often
 a <Property Grid Hook Point>.  A (non-spatial) <Property Table>
 instance is assumed to provide information that applies to the
 entire associating <Geometry Representation> or
 <Feature Representation> instance.  A <Property Table Reference>
 instance may be employed to select a (N-1)-dimensional slice from
 the referenced <Data Table> instance in the <Data Table Library>
 instance.

Primary Page in DRM Diagram:
     10

Secondary Pages in DRM Diagram:
     1
     6

Example:
 1. A generic seamount could be modeled as a 2-d <Property Grid>
    of the bottom elevation, surface properties, etc.  This grid could
    be "instanced" in multiple places in the environment by means of
    <Property Grid Hook Point> instances to construct a desired situation
    for training sonar operators.

 2. A table of material properties can be placed in a <Data Table Library>
    and accessed via <Property Table Reference> instances to identify the
    materials and their properties for objects in the given transmittal,
    e.g. the optical or electromagnetic properties in various
    wavelength bands.

FAQS:
Q. Why place a <Data Table> in a <Data Table Library> rather than
   directly into an <Environment Root>?

A. Most often so that it can be reused easily ("instanced" or referenced)
   from multiple places in the transmittal.  This sharing can be especially
   important for tables such as material properties that do not "belong"
   to any one object in the normal sense.

Q. When should a table *not* be placed in a <Data Table Library>?

A. There are no situations that are prohibited by SEDRIS data representation
   model or constraints.  However, there is little benefit from placing a
   <Data Table> in a <Data Table Library> if it is not shared by many other
   objects in the transmittal.

Superclass: Library

Constraints:
     Publishable Object

Composed of (two-way)
	one or more {ordered} Data Table instances

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or one Citation instance
	zero or one Description instance

Component of (two-way)
	one Transmittal Root instance

-------------------------------------------------------------------------------

Class Name: Description

Definition:
 An instance of this DRM class specifies a characterization
 of the data set being described, including its intended use
 and limitations.

 In the documentation for this class, the phrase "the data set" refers
 to "the data set being described by the given <Description> instance".
 This, in turn, refers to the object tree rooted at the aggregate
 of the <Description> instance.

 If a <Description> is shared by multiple aggregate objects, then "the
 data set" refers to the collection of object trees rooted at its
 various aggregates.

Primary Page in DRM Diagram:
     1

Secondary Pages in DRM Diagram:
     2
     3
     6
     8
     10
     14
     19
     22

Example:
 1. The description of a <Model> of an F-18, perhaps
    including a summary of its structure, and a list
    of its intended uses.

FAQS:
 Q. What is the purpose of this class?
 A. This class provides a place for an ISO 19115-compliant description
    of a high-level SEDRIS object (such as an instance of
    <Transmittal Root>, <Model>, <Image>, etc.) <Description> includes an
    abstract field, which describes *what* the object is, a purpose field,
    which describes *how* the object is intended to be used, and an
    additional field for any other information about the object.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Mandatory Metadata

Composed of (two-way metadata)
	zero or more Browse Media instances
	a bounded set of 0..5 Keywords instances 
	zero or more Responsible Party instances

Component of (two-way)
	zero or more Colour Table instances
	zero or more Colour Table Group instances
	zero or more Data Table instances
	zero or more Environment Root instances
	zero or more Feature Model instances
	zero or more Feature Representation instances
	zero or more Geometry Hierarchy instances
	zero or more Geometry Model instances
	zero or more Image instances
	zero or more Library instances
	zero or more Model instances
	zero or more Property Set instances
	zero or more Property Set Table instances
	zero or more Property Set Table Group instances
	zero or more Sound instances
	zero or more Symbol instances
	zero or one Transmittal Root instance

Field Elements:
    SE_String abstract;
   /*
    *  The abstract field specifies a brief narrative summary of
    *  the content of the resource(s) being described.
    */

    SE_String purpose;
   /*
    *  The purpose field specifies a summary of the intentions with
    *  which the resource(s) being described were developed.
    */

    SE_Short_Integer_Unsigned credit_count;
   /*
    *  The credit_count field specifies the count of entries in the
    *  credit array.
    */

    SE_String credit[];
   /*
    *  The credit field provides recognition of those who contributed to
    *  the resource(s) being described.
    */

    SE_String supplemental_information;
   /*
    *  The supplemental_information field supplies any other descriptive
    *  information about the data set.
    */


-------------------------------------------------------------------------------

Class Name: Diffuse Colour

Definition:
 An instance of this DRM class specifies the diffuse reflectance component
 of a <Primitive Colour>.

 <Diffuse Colour> is
 - dependent on the angle of the lit object to the light source
 - independent of the angle of the lit object to the observer.

 Surfaces exhibiting *only* diffuse reflection (also known as Lambertian
 reflection) are dull, matte surfaces that appear equally bright from all
 viewing angles. When a beam of light is reflected from such a surface,
 the reflected ray is diffused to cover an area, the size of which is
 inversely proportional to the cosine of the angle that the beam makes
 with the surface normal.
    Diffuse reflection provides what is known as *shape from shading*
 information to visual perception; that is, for a surface composed of
 a single substance and illuminated by a single light source, the
 shading of the object can be used to compute its surface normals
 (that is, its shape).

 See [FOLEY_VAN_DAM] 16.1.2, "Diffuse Reflection" for further discussion
 of diffuse reflectance.

Primary Page in DRM Diagram:
     14

Secondary Pages in DRM Diagram:
     21

Example:
 See <Primitive Colour>.

FAQS:
 Q. Does SEDRIS use the OpenGL lighting model?
 A. No, although the terminology is similar. SEDRIS handles transparency
    somewhat differently than OpenGL does, among other things. For a
    description of the OpenGL lighting model, see [OPENGL], Chapter 5
    "Lighting".

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	one Colour Data instance

Component of (two-way)
	zero or one Light Source instance
	zero or one Primitive Colour instance

-------------------------------------------------------------------------------

Abstract Class Name: Directional Light Behaviour

Definition:
 An instance of a concrete class derived from this DRM class specifies
 a directional light having a direction and lobe shape defined by a
 component <Lobe Data> instance.  The lobe shape parameters are used
 by sub-classes to specify cones, pyramids, blend geometry, and
 so on.

 Directional lights can have both a primary and a secondary colour. These
 are specified by the <Colour> components of the parent
 <Geometry Representaiton> that have
 colour_mapping values of Lgt_Render_Bhvr_Primary and
 Lgt_Render_Bhvr_Secondary, respectively.

Primary Page in DRM Diagram:
     21

Secondary Pages in DRM Diagram:
     23

Example:
 See concrete subclasses for examples.

FAQS:
  Q. How can a simple bi-directional light be represented?
  A. This can be done using either a <Cone Directional Light>
     or a <Pyramid Directional Light> with primary and
     secondary colours. Set the horizontal and vertical widths
     of the lobe to 180 degrees and invisible_behind to SE_TRUE.

 Q. Why does <Directional Light Behaviour> have a required <Location>
    component? Is it the location of the light?
 A. No; it does not represent the location of any light(s) that use this
    behaviour. It is the reference location for the direction of the light
    (as expressed the <Reference Vector> components of the <Lobe Data>).
    In most SRFs, directions shall refer to a location to account for
    the curvature of the earth. Even in linear space SRFs, localized
    directions may be important (See Example 1).

Superclass: Light Rendering Behaviour

Subclasses:
     Blend Directional Light
     Cone Directional Light
     Pyramid Directional Light

Constraints:
     Publishable Object

Composed of (two-way)
	one Lobe Data instance 
	one Location instance

Component of (two-way) (inherited)
	one or more Light Rendering Properties instances

-------------------------------------------------------------------------------

Class Name: Distance LOD Data

Definition:
 An instance of this DRM class specifies a level of detail
 described in terms of distance from the eyepoint to the
 centre of the object.

Primary Page in DRM Diagram:
     9

Example:
 1. Consider a <LOD Related Geometry> instance which has two
    branches, each having an attached <Distance LOD Data>.

    The first <Distance LOD Data> instance has:
        minimum_range = 100.0
        minimum_fade_band = 10.0
        maximum_range = 200.0
        maximum_fade_band = 20.0

    The second <Distance LOD Data> instance has:
        minimum_range = 200.0
        minimum_fade_band = 10.0
        maximum_range = 1000.0
        maximum_fade_band = 10.0

    If the eyepoint is moving outward and the distance reaches 90, the first
    branch starts fading in. At a distance of 100, the first branch has
    totally faded in. At a distance of 180 the first branch starts to fade
    out. At a distance of 190 the second branch starts fading in. The first
    and second branches are both seen (super-imposed) between the ranges of
    190 and 200. At a distance of 200 the first branch is totally faded out,
    while the second branch is the only branch seen. At a distance of 990,
    the second branch starts fading out, and at 1000 it is completely faded
    out.

 2. Consider a <Level of Detail Related Geometry> instance which has two
    branches, each having an attached <Distance LOD Data>.

    The first <Distance LOD Data> instance has:
       minimum_range = 50.0
       minimum_fade_band = 20.0
       maximum_range = 100.0
       maximum_fade_band = 30.0

    The second <Distance LOD Data> instance has:
       minimum_range = 110.0
       minimum_fade_band = 15.0
       maximum_range = 500.0
       maximum_fade_band = 10.0

    If the eyepoint is moving outward and the distance reaches 30, the first
    branch starts fading in. At a distance of 50, the first branch
    has totally faded in. At a distance of 70 the first branch starts
    to fade out. At a distance of 95 the second branch starts fading in.
    The first and second branches are both seen (super-imposed) between
    the ranges of 95 and 100. At a distance of 100, the first branch is
    totally faded out, while the second branch is the only branch seen,
    but hasn't completely faded in. At a distance of 110 the second branch
    has completely faded in. At a distance of 490 the second branch starts
    fading out, and at 500 is completely faded out.

 3. A set of polygonal data is produced with low detail for viewing at
    ranges greater than 3200 metres, and organized as a
    <Union Of Primitive Geometry>, with a <Distance LOD Data>
    component specifying this viewing range so that the intended viewing
    distance at which these <Polygon> instances are to be used is provided.

 4. See <LOD Related Geometry>'s examples.

FAQS:
 Q. As a data provider, I have a branch of a distance
    level-of-detail-related organization for which
    fade bands aren't applicable. How should those
    fields be set?
 A. If a target does not contain fade bands, then the
    minimum_fade_band and maximum_fade_band shall be
    set to 0.

Superclass: Base LOD Data

Constraints:
     Publishable Object
     LOD Related Organizing Principle

Composed of (two-way)
	zero or one Location instance 

Component of (two-way) (inherited)
	zero or more Aggregate Feature instances
	zero or more Aggregate Geometry instances
	zero or more Property Grid Hook Point instances

Field Elements:
    SE_Long_Float minimum_range;
   /*
    *  The minimum_range field is specified in metres.
    */

    SE_Long_Float minimum_fade_band;
   /*
    *  The minimum_fade_band is expressed in metres (not percent).
    *  This fade band shall go in the negative direction from the
    *  minimum range.
    */

    SE_Long_Float maximum_range;
   /*
    *  The maximum_range field is specified in metres;
    *  SE_POSITIVE_INFINITY is a legal range value.
    */

    SE_Long_Float maximum_fade_band;
   /*
    *  The maximum_fade_band is expressed in metres (not percent).
    *  This fade band shall go in the negative direction from the
    *  maximum range.
    */


-------------------------------------------------------------------------------

Class Name: DRM Class Summary Item

Definition:
 An instance of this DRM class is used as part of a summary of a
 transmittal's content to represent instances of a class (specified
 by the drm_class field value) that are used that transmittal.

 <DRM Class Summary Item> instances are combined together to form a list
 of the classes that are present in a transmittal or part of a
 transmittal. Each such list has only one entry per class. However, it
 does not have to be a complete list of every class used, and it can
 include abstract classes.

 Each <DRM Class Summary Item> can optionally have a list of <EDCS Use
 Summary Item> instances giving the classifications that are attached
 to instances of that class in the transmittal. Obviously this only
 makes sense for those classes that can have classification information.

 Each <DRM Class Summary Item> can also have a list of <SRF Summary>
 instances giving the SRFs defined in the transmittal by instances
 of that class. Obviously this only makes sense for those classes
 that contain SRF parameters.

Primary Page in DRM Diagram:
     20

Example:
 1. A summary of the classes used in an entire transmittal.

    <Transmittal Root> <>---- <Environment Root>
          <>
          |
    ----------------------------------------------------------
    |                        |                      |
   <Transmittal Summary>  <Model Library>    <Environment Root>
     <>                        <>
      |                        |
      |                    <Model> ...
      |
      |
      |
      +----- <DRM Class Summary Item>    <>------ <SRF Summary>
      |      SE_DRM_CLS_ENVIRONMENT_ROOT
      |
      +----- <DRM Class Summary Item>
      |      SE_DRM_CLS_MODEL_LIBRARY
      |
      +----- <DRM Class Summary Item>    <>------ <SRF Summary>
      |      SE_DRM_CLS_MODEL
      .
      .
      .

 2. A summary of classes used in part of a transmittal. (See the
    FAQ list also).

    See the HTML examples for this class for an instance diagram;
    due to the restrictions of ASCII, it is shown here in two
    parts rather than as a unified diagram.

    The geometry portion of the given <Environment Root> instance
    has the following layout.

                            <Environment Root>
                                    <>
                                     |
                                     |
                      <Level of Detail Related Geometry>
                                    <>
                                     |
       --------------------------------------------------------
       |                             |                        |
  <Union Of                   <Union Of                  <Union Of
   Primitive Geometry>         Primitive Geometry>       Geometry Hierarchy>
       <>                            <>                       <>
       |                             |                        |
   ------------                ----------------          -------------
   |                           |                         |           |
  <Polygon> ...             <Polygon> ...         <Union Of       <Union Of
                                                   Primitive       Primitive
                                                   Geometry>       Geometry>
                                                      <>              <>
                                                       |               |
                                                  ----------     ----------
                                                  |              |
                                                <Polygon> ...  <Polygon> ...


    The geometry portion of the given <Environment Root> instance is
    therefore summarized as follows.

                            <Environment Root>
                                    <>
                                     |
                                     |
                            <Hierarchy Summary Item>
                            (SE_DRM_CLS_LOD_RELATED_GEOMETRY, 1)
                                      <>
                                      |
                               +------+---------+
                               |                |
                           Hierarchy      Hierarchy
                           Summary Item   Summary Item
                            (UOPG, 2)      (UOGH, 1)
                               <>                <>
                               |                 |
                               |                 |
                               +-- DRM Class     +-- DRM Class
                                  Summary Item   |  Summary Item
                                   (Polygon)     |   (UOPG)
                                                 |
                                                 +-- DRM Class
                                                 |  Summary Item
                                                 |   (Polygon)
                                                 |
                                                 +-- DRM Class
                                                     Summary Item
                                                     (Vertex)

FAQS:
 Q. Why is the <Union Of Primitive Geometry> in Example #2 a
    <DRM Class Summary Item> rather than a <Hierarchy Summary Item>?
 A. This illustrates the possible use of <DRM Class Summary Item> if we
    were to use the <Hierarchy Summary Item> to show only the top level
    hierarchy (for some reason).
        The data producer may decide, for a number of reasons, that it
    would be useful to summarize the hierarchy down to a certain level
    only, but that it's also useful to show that there are aggregates
    such as <Union Of Primitive Geometry> below that level - i.e.,
    showing that they exist, rather than showing their position in the
    hierarchy, is what is of value.

 Q. Hey! The examples for <DRM Class Summary Item> show <Polygon> and
    <Vertex> instances as <DRM Class Summary Items>, but the examples for
    <Primitive Summary Item> show them as <Primitive Summary Items>!
    Isn't this ambiguous? What's going on?
 A. This isn't ambiguous as the two classes (<DRM Class Summary Item>
    and <Primitive Summary Item> summarize different aspects of a
    transmittal. Therefore the same classes can (and will) quite
    legitimately be represented by both. So <Polygon> and <Vertex> can
    turn up as types of <DRM Class Summary Items>, to summarize their
    *presence* in the transmittal, and as <Primitive Summary Items>, to
    show common *patterns* of objects in which they are used.

Superclass: Base Summary Item

Constraints:
     Publishable Object

Composed of (two-way metadata) (inherited)
	zero or more EDCS Use Summary Item instances 

Composed of (two-way metadata)
	zero or more SRF Summary instances

Component of (two-way)
	zero or more Hierarchy Summary Item instances 
	zero or one Transmittal Summary instance 

Inherited Field Elements:
    SE_DRM_Class drm_class;
   /*
    *  The drm_class field indicates the DRM class of the object(s)
    *  represented by the given <Base Summary Item> instance.
    */


-------------------------------------------------------------------------------

Class Name: EC Augmented 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Augmented Equidistant Cylindrical (AEC) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. Consider a SEDRIS transmittal that contains an <Environment Root>
    instance, the ORM of which is ORM_MULTIGEN_FLAT_EARTH_1989, so that its
    srf_info field is specified in the Equidistant Cylindrical SRF.
    An <EC Augmented 3D Location> instance within this
    SRF might be easting = 30.0, northing = 50.0,
    ellipsoidal_height = 100.0.

FAQS:
 Q. Where can users obtain further information on AEC?
 A. See the SRM for additional details.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Map_Projection_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: EC Surface Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Equidistant Cylindrical (EC) 2D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. Consider a SEDRIS transmittal that contains an <Environment Root>
    instance, the ORM of which is ORM_MULTIGEN_FLAT_EARTH_1989, so that its
    srf_info field is specified in the Equidistant Cylindrical SRF.
    An <EC Surface Location> instance within this
    SRF might be easting = 30.0, northing = 50.0.

FAQS:
 Q. Where can users obtain further information on EC?
 A. See the SRM for additional details.

Superclass: Location Surface

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

Field Elements:
    SRM_Map_Projection_Surface_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: EDCS Use Summary Item

Definition:
 An instance of this DRM class specifies a pattern of EDCS codes that
 appears within the scope being summarized, specifically, an ECC
 and a set of EACs that are used with it, or just an individual EAC.

 The <Classification Data> instance, which may be qualified by
 <Property Value> instances, represents the (potentially qualified)
 classification being described, if any.

Primary Page in DRM Diagram:
     20

Example:
 1. A transmittal containing two different <Model> instances, one classified
    using ECC_TREED_TRACT with attributes and the other using ECC_RESERVOIR
    with attributes.

    DRM Class
    Summary Item
      (Model)  <>--- EDCS Use      <>-+- <Classification Data>
                |  Summary Item       |  ECC_TREED_TRACT
                |   ("Funny shaped    |
                |    area of trees")  |
                |                     +----<Property Description>
                |                     |    EAC_PREDOMINANT_HEIGHT
                |                     |
                |                     |
                |                     +----<Property Description>
                |                          EAC_TREE_TYPE
                |
                |
                +-- EDCS Use      <>-+-<Classification Data>
                    Summary Item     | ECC_RESERVOIR
                                     |
                                     +----<Property Description>
                                          EAC_DEPTH_BELOW_SURFACE_LEVEL

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	zero or one Classification Data instance
	zero or more Property Description instances

Component of (two-way)
	zero or more Base Summary Item instances
	zero or one Transmittal Summary instance

Field Elements:
    SE_String description;
   /*
    *  The description field specifies an abstract, human-readable
    *  description of the "overall" classification specified by
    *  the given instance; may be empty.
    */


-------------------------------------------------------------------------------

Class Name: Edge Direction

Definition:
 An instance of this DRM class specifies, for the associated relationship,
 whether the target edge should be traversed forwards (from start node to
 end node) or backwards (in the opposite direction).

Primary Page in DRM Diagram:
     12

Secondary Pages in DRM Diagram:
     5
     8
     13

Example:
 1. A <Linear Feature> instance representing a stream is associated with
    several <Feature Edge> instances that define the path of the stream.
    The <Edge Direction> associated with each <Feature Edge> has
    forwards = SE_TRUE if the <Feature Edge> is oriented so that the
    stream flows in the direction from its starting node to its
    ending node, and SE_FALSE if the stream flows in the opposite
    direction.

 2. Consider a <Linear Feature> instance representing a one-way street.
    Its path is defined by a <Feature Edge>, so that the <Edge Direction>
    between the <Linear Feature> and the <Feature Edge> indicates whether
    the orientation of the <Feature Edge> matches the permitted direction
    of travel along the one-way street.

 3. The external <Feature Face Ring> of a regular <Feature Face> consists
    of three <Feature Edge> instances.  In traversing the ring, the first
    <Feature Edge> might be traversed from starting node to ending node,
    so that its <Edge Direction> would have forwards = SE_TRUE.  If the
    next <Feature Edge> was traversed from its ending node (which in this
    example is the same <Feature Node> as the ending node of the previous
    <Feature Edge>) to its starting node, its <Edge Direction> would have
    forwards = SE_FALSE (that is, backward).

FAQS:
 Q. What if the object associated with the edge represents a spatially
    located entity, such such as a tree line, that has no well-defined
    orientation?

 A. In such cases, the <Edge Direction> instance's forwards field shall
    be set to SE_FALSE.

 Q. Isn't this information redundant, in the case of ring edges?

 A. While this information can be derived by comparing the starting and
    ending nodes of consecutive edges within the face ring, it is
    provided as a convenience and as a validity check.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Field Elements:
    SE_Boolean forwards;
   /*
    *  If the value of the forwards field is SE_TRUE, the edge is
    *  oriented in the same direction as the object with which it
    *  is associated, so that it should be traversed from its
    *  starting node to its ending node.
    *
    *  If the value of the forwards field is SE_FALSE, either the
    *  orientation of the edge is the opposite of that of the
    *  associated object, or the associated object has no clearly
    *  defined orientation. In this case, the edge should be
    *  traversed from ending node to starting node.
    */


-------------------------------------------------------------------------------

Class Name: EI 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Equatorial Inertial (EI) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. EI provides a convenient SRF for
    a. Defining the positions of orbital satellites.
    b. Describing space vehicle dynamics.
    c. Providing astronomical data.

FAQS:
 Q. Is EI an inertial coordinate system?
 A. EI is independent of the Earth's surface, and the Earth's
    position with respect to the Sun -- it is fully inertial.

 Q. Where can users obtain further information on EI?
 A. See the SRM for additional details.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_EI_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: Ellipse

Definition:
 An instance E of this DRM class specifies a closed plane curve
 such that for each point P on the curve, the sum of P's
 distances from two fixed points (called the *foci* of E) is
 a constant. The <Location> component of E specifies the centre
 of the instance E.
 The line passing through the foci of E is termed the *major axis*
 of E. The direction of the major axis of E is specified by the
 component <Reference Vector> of E with vector_type = MAJOR_AXIS.
 The line passing through the centre of E and perpendicular to
 the major axis of E is termed the *minor axis* of E. The direction
 of the minor axis of E is specified by the component
 <Reference Vector> of E with vector_type = MINOR_AXIS.

Primary Page in DRM Diagram:
     5

Secondary Pages in DRM Diagram:
     13

Example:
 1. The physical extent of certain underwater acoustic phenomena are best
    described by oval surface geometries in some cases, and by
    <Elliptic Cylinder> instances in others.

FAQS:
 Q. Why doesn't SEDRIS have a Circle class?
 A. Because a circle is a special case of an ellipse for which the major
    and minor axes have the same length.

Superclass: Surface Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Continuous LOD Restrictions
     Image Mapping Functions and Texture Coordinates
     Nested Primitive Geometry

Associated with (two-way)
	zero or one Geometry Node instance 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or one Presentation Domain instance
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or more Tack Point instances
	zero or one Union Of Primitive Geometry instance 

Composed of (two-way)
	one Location instance 
	exactly 2 Reference Vector instances 

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Primitive Geometry instances

Field Elements:
    SE_Long_Float major_axis_length;
   /*
    *  The major_axis_length field is specified in metres.
    */

    SE_Long_Float minor_axis_length;
   /*
    *  The minor_axis_length field is specified in metres.
    */


-------------------------------------------------------------------------------

Class Name: Emissive Colour

Definition:
 An instance of this DRM class specifies the intensity component of a
 <Primitive Colour>, used to represent light emitted by the coloured
 object.

 Since the <Emissive Colour> component is due to light emitted by the object,
 it is independent of any light sources in the environment, so it is
 - independent of the angle of the lit object to the light source
 - independent of the angle of the lit object to the observer

Primary Page in DRM Diagram:
     14

Example:
 See <Primitive Colour>.

FAQS:
 Q. Does SEDRIS use the OpenGL lighting model?
 A. No, although the terminology is similar. SEDRIS handles transparency
    somewhat differently than OpenGL does, among other things. For a
    description of the OpenGL lighting model, see [OPENGL], Chapter 5
    "Lighting".

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	one Colour Data instance

Component of (two-way)
	one Primitive Colour instance

-------------------------------------------------------------------------------

Class Name: Enumeration Axis

Definition:
 An instance of this DRM class is an <Axis> that uses
 EDCS Enumerant Codes rather than numerical values as hash marks.

Primary Page in DRM Diagram:
     6

Example:
 1. Consider a <Property Grid> instance containing data that varies by
    ocean bottom material composition. The <Property Grid> instance
    therefore has an <Enumeration Axis> component of axis_type =
    EAC_WATER_BODY_FLOOR_MATERIAL_TYPE. The axis_value_array[]
    contains corresponding values such as
    EEC_WTRBDFLRMATTY_CLAY_AND_SILT.

 2. Consider a <Property Table> instance containing data that varies
    by season of the year. The <Property Table> instance therefore
    has an <Enumeration Axis> component of axis_type = EAC_SEASON. The
    axis_value_array[] contains some or all of the values:
    EEC_SEASON_WINTER, EEC_SEASON_SPRING, EEC_SEASON_SUMMER,
    or EEC_SEASON_AUTUMN.

FAQS:
 Q. How should a data provider decide between using an <Enumeration Axis>
    with one <Table Property Description> per axis entry, and using multiple
    <Table Property Description> instances, with each
    <Table Property Description> replacing a value on the
    <Enumeration Axis>?
 A. If the values on the <Enumeration Axis> represent different values of
    some variable (days of the week, colours, seasons, states), the
    data provider should use an <Enumeration Axis>, requesting a new
    EAC enumeration if justified. Multiple <Table Property Description>
    instances should be used when the <Data Table> contains different
    kinds of dependent data, such as temperature, pressure, and humidity.

Superclass: Axis

Constraints:
     Publishable Object
     Axis Type Restrictions

Component of (two-way) (inherited)
	one or more Data Table instances

Inherited Field Elements:
    EDCS_Attribute_Code axis_type;
   /*
    *  The axis_type field specifies the property being described by the
    *  given <Axis> instance.
    */

    SE_Short_Integer_Positive axis_value_count;
   /*
    *  The axis_value_count field specifies the number of "hash marks"
    *  along the given <Axis> instance.
    */


Field Elements:
    EDCS_Enumerant_Code axis_value_array[];


-------------------------------------------------------------------------------

Class Name: Environmental Domain Summary

Definition:
 An instance of this DRM class summarizes a single environmental domain
 (such as terrain, ocean, atmosphere) to which at least part of the
 data set described by its aggregate <Transmittal Summary> relates.

 The complete list of <Environmental Domain Summary> components of a
 <Transmittal Summary> summarizes the total coverage of the
 transmittal being described.

Primary Page in DRM Diagram:
     20

Example:
 1. Consider a transmittal containing a polygonal representation of a
    terrain skin. It consequently contains an <Environmental Domain Summary>
    with environmental_domain = ECC_LAND.

 2. Consider a transmittal containing a <Property Grid> of
    EAC_WATER_BODY_SOUND_SPEED versus depth in water.

    The transmittal consequently contains an <Environmental Domain Summary>
    with environmental_domain = ECC_WATER_BODY_ACOUSTIC_PROPERTY_SET.

 3. A transmittal containing <Property Grid> instances of terrain heights
    and ocean floor depths consequently has two
    <Environmental Domain Summary> instances with
    environmental_domain = ECC_LAND and
    environmental_domain = ECC_OCEAN_FLOOR, respectively.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	zero or more Property Value instances 

Component of (two-way)
	one Transmittal Summary instance

Field Elements:
    EDCS_Classification_Code environmental_domain;
   /*
    *  The environmental_domain specifies the environmental domain
    *  being specified.
    */


-------------------------------------------------------------------------------

Class Name: Environment Root

Definition:
 An instance of this DRM class is the aggregating object for the
 <Feature Hierarchy> and / or <Geometry Hierarchy> that represent
 the instantiation of all data in a common SRF in a given
 transmittal.  In other words, an <Environment Root> instance is
 the starting point for all objects in the same SRF in a transmittal.

Primary Page in DRM Diagram:
     1

Secondary Pages in DRM Diagram:
     16

Example:
 1. Earth.

 2. An area of North America that straddles two UTM zones. The
    <Transmittal Root> would have two <Environment Root> components,
    one for each of the two UTM zones.

FAQS:
 Q. Is an <Environment Root> required in a transmittal?

 A. No. For example, a valid transmittal may contain only libraries,
    such as a <Transmittal Root> with a <Model Library> but without
    an <Environment Root>.

 Q. May a data provider supply multiple <Environment Root>
    instances in the same transmittal?

 A. Yes, provided that each <Environment Root> instance has a distinct
    srf_info field (in accordance with the constraint
    <<Environment Root Spatial Reference Frame>>).  See example 2.

 Q. Why can <Environment Root> have at most 2 <Hierarchy Summary Item>
    components?

 A. See <Hierarchy Summary Constraints>.

 Q. Can <Environment Root> have both <Hierarchy Summary Item> and
    <Primitive Summary Item> components (as opposed to either/or)?

 A. Yes.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Hierarchy Summary Constraints
     Non Empty Environment Root

Composed of (two-way)
	zero or more Base Time Data instances 
	zero or one Feature Hierarchy instance
	zero or one Geometry Hierarchy instance
	a bounded set of 0..2 Hierarchy Summary Item instances 
	zero or one Interface Template instance 
	zero or more Primitive Summary Item instances
	one Spatial Extent instance 

Composed of (two-way metadata)
	zero or one Access instance
	zero or one Citation instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way)
	one Transmittal Root instance

Field Elements:
    SE_SRF_Info srf_info;
   /*
    *  The srf_info field specifies the SRF within which the given
    *  <Environment Root> instance is defined.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Expression

Definition:
 An instance of a concrete class derived from this DRM class expresses
 values that are used by <Control Link> instances and the SEDRIS objects
 controlled by them. <Expression> instances represent places within a
 transmittal where consuming systems shall perform an evaluation in
 order to get the exact value of the field of an object.

Primary Page in DRM Diagram:
     16

Secondary Pages in DRM Diagram:
     3
     7
     17
     23

Example:
 See individual subclasses for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     Function
     Literal
     Variable

Constraints:
     Publishable Object
     Non Cyclic Aggregations

Component of (two-way)
	zero or more Control Link instances
	zero or more Feature Model Instance instances, each with a Model Instance Template Indices link object
	zero or more Function instances
	zero or more Geometry Model Instance instances, each with a Model Instance Template Indices link object

-------------------------------------------------------------------------------

Class Name: Face Direction

Definition:
 An instance of this DRM class specifies which side (the front
 or the back) of the given topological face is associated with
 the given <Areal Feature> instance.

Primary Page in DRM Diagram:
     12

Secondary Pages in DRM Diagram:
     8
     13

Example:
 1. Consider an <Areal Feature> instance representing a grass-covered
    region, consisting of a single <Feature Face> instance.  The
    <Face Direction> link data on the relationship between them is
    set to SE_TRUE, indicating that the front (that is, the top)
    side of the face corresponds to the <Areal Feature> instance.

FAQS:
 Q. What if both sides of a <Feature Face> instance are associated with the
    same <Areal Feature> instance?

 A. In such a case the <Feature Face> would appear twice in the collection
    of <Feature Face> components of the <Areal Feature>, once with the
    <Face Direction> set to SE_TRUE (front), and once with the
    <Face Direction> set to SE_FALSE (back).

 Q. What if the two sides of a <Feature Face> are associated with different
    <Areal Feature> instances?

 A. In such a case the <Feature Face> would appear once in the collection of
    <Feature Face> components of each of the two <Areal Features>.  For the
    <Areal Feature> corresponding to the front side of the face, the <Face
    Direction> would be set to SE_TRUE, while for the <Areal Feature>
    corresponding to the back side of the <Feature Face>, the <Face
    Direction> would be set to SE_FALSE.

 Q. How does <Face Direction> relate to the feature topology level?

 A. At feature topology levels 0 through 3, <Face Direction> shall always be
    SE_TRUE (front).  Only at feature topology level 4 can the back side of
    a <Feature Face> be associated with an <Areal Feature>.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Face Direction Levels 0 3

Field Elements:
    SE_Boolean front;
   /*
    *  The <A CLASS="Face_Direction#front">front</A> field
    *  specifies whether the front side of the given face
    *  instance is that associated with the given SEDRIS object.
    */


-------------------------------------------------------------------------------

Class Name: Fade Range

Definition:
 For region-based audio, an instance of this DRM class specifies the
 range where the audio is attenuated to fade out at the boundary.

Primary Page in DRM Diagram:
     22

Example:
 1. Consider a 2D areal region used to represent a localized storm
    cell.  If the listener is within the region, the constant sound
    of rainfall is to be played.  If the listener is outside the
    region, the rainfall sound is not to be played.
       At the edge of the region, the data provider doesn't want the
    sound to just turn itself off, but to gradually fade out as the
    listener gets farther away. So a <Fade Range> instance is attached
    to the <Sound Instance>, defining the range at which
    the sound begins fading away and the range at which the
    sound has completely faded away.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Component of (two-way)
	one or more Sound Instance instances

Field Elements:
    SE_Long_Float fade_to_off_begin;
   /*
    *  The fade_to_off_begin field specifies the range (in metres)
    *  where the sound begins to fade away.
    */

    SE_Long_Float fade_to_off_complete;
   /*
    *  The fade_to_off_complete field specifies the range (in metres)
    *  where the sound has completely faded away.
    */


-------------------------------------------------------------------------------

Class Name: Feature Edge

Definition:
 An instance of this DRM class is a one-dimensional <Feature Topology>
 instance consisting of an ordered collection of <Location> instances
 connecting one <Feature Node> to another <Feature Node>. The
 orientation of a <Feature Edge> is defined by the order of its
 <Location> components, taken in conjunction with
 its starting <Feature Node> and ending <Feature Node>.

 A <Feature Edge> is used to represent the location of a segment of either:
 1 one or more <Linear Feature> instances,
 2) a boundary of one or more <Feature Face> instances, or
 3) both.

Primary Page in DRM Diagram:
     12

Secondary Pages in DRM Diagram:
     8

Example:
 1. A <Linear Feature> representing the centreline of a road would be defined
    by one or more <Feature Edge> instances.  The border of a forested area
    would be defined by a collection of one or more <Feature Edge>
    instances.

FAQS:
 Q. When are <Feature Edge> instances required?

 A. <Feature Edge> instances are required whenever either <Linear Feature>
    or <Feature Face> instances are present.

 Q. Does the sequence of <Location> instances that make up a <Feature Edge>
    include the endpoints?

 A. No.  The endpoints of a <Feature Edge> are defined by its ordered
    <Feature Node> associates.

 Q. Are there any geometric constraints on the sequence of <Location>
    instances that make up a <Feature Edge>?

 A. Yes; see this class' constraints for details.

 Q. How are <Feature Edge> instances affected by the feature topology level?

 A. At feature topology level 2 or higher, no <Feature Edge> may intersect
    with or overlap another <Feature Edge>.  At feature topology level 3,
    each <Feature Edge> forms part of the boundaries of exactly two
    <Feature Face> instances.

Superclass: Feature Topology

Constraints:
     Publishable Object
     No Attribute Conflicts
     Connected Edge Restrictions
     Edges Bordering Faces
     Feature Edge Restrictions
     Non Crossing Associations

Associated to (one-way)
	zero or more {ordered} Feature Face instances 

Associated by (one-way)
	zero or more Feature Face Ring instances, each with a Edge Directions link object 

Associated with (two-way)
	zero or more Feature Edge instances
	exactly 2 {ordered} Feature Node instances, each with a Edge Directions link object 
	zero or more Feature Volume instances 
	zero or more Linear Feature instances, each with a Edge Directions link object

Composed of (two-way) (inherited)
	zero or more Property Value instances

Composed of (two-way)
	zero or more {ordered} Location instances

Component of (two-way) (inherited)
	zero or more Union Of Feature Topology instances

-------------------------------------------------------------------------------

Class Name: Feature Face

Definition:
 An instance of this DRM class is a 2-dimensional <Feature Topology>
 instance used to represent the region that corresponds to an
 <Areal Feature>, bounded by one or more <Feature Edge> instances.

Primary Page in DRM Diagram:
     12

Secondary Pages in DRM Diagram:
     8

Example:
 1. Consider an <Areal Feature> representing a forest - that is, with
    a <Classification Data> component of ECC_FOREST. The forest
    has an outer boundary, which is specified by one or more
    <Feature Edge> instances via a <Feature Face Ring>.

 2. At feature topology level 4, the walls of a building might be
    defined by a collection of <Feature Face> instances.

FAQS:
 Q. When are <Feature Face> instances required?

 A. <Feature Face> instances are required whenever there are
    <Areal Feature> instances, regardless of the feature topology level.

 Q. Are there any geometric constraints on <Feature Faces>?

 A. Yes; see this class' constraints.

 Q. Can <Feature Face> instances exist at any feature topology level?

 A. Yes.  <Feature Face> instances may exist at any feature topology level
    in order to define the extents of <Areal Feature> instances. See this
    class' constraints for further details.

 Q. Looking at the relationships allowed for <Feature Topology>,
    note that the <Feature Edge> to <Feature Edge> association
    is "many to many", and similarly the <Feature Node> to
    <Feature Node> association is "many to many". Why is the
    <Feature Face> to <Feature Face> association "optional to
    optional" instead of "many to many"?

 A. These associations exist to support cross-tile topology.
    In SEDRIS terms, this is topology that appears in more than
    one branch of a <Spatial Index Related> or <Perimeter Related>
    aggregation, namely, in a <Spatial Index Related Features>,
    <Spatial Index Related Feature Topology>, <Perimeter Related
    Features>, or <Perimeter Related Feature Topology>).

    <Feature Node>, <Feature Edge>, and, in 3D, <Feature Face>
    instances can be located on the boundary of a tile.  When this
    happens, they have "counterparts" in each of the adjacent tiles
    that share the boundary.  These associations allow <Feature Node>,
    <Feature Edge>, and <Feature Face> instances to identify their
    counterparts, if any.

    In 2D,
    - tile boundary <Feature Node> instances come in pairs, unless
      they're located at a corner where four tiles meet,
    - tile boundary <Feature Edge> instances always come in pairs,
    - <Feature Face> instances are always contained within a single tile.

    However, the multiplicity in the DRM is there to support 3D tiles
    (e.g., a regular set of rectangular blocks of space).

    In 3D,
    - tile boundary <Feature Node> instances can come in
      - pairs, if they're located within a tile boundary <Feature Face>,
      - fours, if they lie on a tile boundary <Feature Edge>, or
      - eights, if they are at a tile boundary corner.

    - tile boundary <Feature Edge> instances can come in
      - pairs, if they are contained in a tile boundary <Feature Face>,
      or
      - fours if they lie on a tile boundary <Feature Edge>.

    - tile boundary <Feature Face> instances only come in pairs, so a
      <Feature Face> can have at most one counterpart.

Superclass: Feature Topology

Constraints:
     Publishable Object
     No Attribute Conflicts
     Contained Node Restrictions
     Edges Bordering Faces
     Feature Edge Restrictions
     Non Crossing Associations

Associated to (one-way)
	a bounded set of 0..2 {ordered} Feature Volume instances 

Associated by (one-way)
	zero or more Feature Edge instances 
	exactly 2 Feature Volume Shell instances, each with a Face Directions link object

Associated with (two-way)
	zero or more Areal Feature instances, each with a Face Directions link object
	zero or one Feature Face instance
	zero or more Feature Node instances 

Composed of (two-way) (inherited)
	zero or more Property Value instances

Composed of (two-way)
	zero or more {ordered} Feature Face Ring instances
	zero or more Location instances

Component of (two-way) (inherited)
	zero or more Union Of Feature Topology instances

Field Elements:
    SE_Boolean universal;
   /*
    *  The universal field specifies that the given <Feature Face> instance
    *  is the universal <Feature Face> instance.  Within a 2D or 3D tile
    *  that has feature topology level 3, the universal <Feature Face>
    *  instance lies "outside" any other faces.  Since the external
    *  boundary of the universal <Feature Face> instance is at infinity,
    *  a <Feature Face> instance that has this field set to SE_TRUE has
    *  no external <Feature Face Ring> instance.
    */


-------------------------------------------------------------------------------

Class Name: Feature Face Ring

Definition:
 An instance of this DRM class specifies the one-directional
 topological relationship from a <Feature Face> instance to
 the ordered collection of one or more <Feature Edge> instances
 that define one of its boundaries (outer or inner).

Primary Page in DRM Diagram:
     12

Example:
 1. Consider an <Areal Feature> L representing an ECC_LAKE. The
    topology of L is represented by a regular <Feature Face>, the
    outer boundary of which is defined by 2 <Feature Edge> instances,
    one defining the north shore of the ECC_LAKE, the other defining
    the south shore.

    To indicate that these 2 <Feature Edge> instances define the
    outer boundary of the ECC_LAKE, they are components of an
    external <Feature Face Ring>, which is in turn a component of
    the <Regular Feature Face> specifying the topology of L. The
    <Edge Direction> associated with each <Feature Edge> indicates
    its orientation with respect to the <Feature Face Ring>.

                         <Feature Face> "L's topology"
                         universal = SE_FALSE
                               <>
                               |
                        <Feature Face Ring>
                               |
                               |
        ---------------------------------------
        |                                     |
        |-<Edge Direction>                    |-<Edge Direction>
        | forwards = SE_TRUE                  | forwards = SE_TRUE
        |                                     |
      <Feature Edge>                   <Feature Edge>

FAQS:
 Q. When are <Feature Face Ring> instances required?

 A. All <Feature Face> instances are required to have at least one
    <Feature Face Ring> component, regardless of feature topology level.  A
    <Regular Feature Face> shall have an <External Feature Face Ring>, which
    defines its outer boundary, and may have any number of
    <Internal Feature Face Ring> components, which define inner boundaries
    (that is, "holes") within the <Feature Face>.  A "universal"
    <Feature Face> has no external <Feature Face Ring>, but will have
    one or more internal <Feature Face Ring> components.

 Q. Can the same <Feature Edge> appear more than once in the collection of
    <Feature Edge> instances making up a <Feature Face Ring>?

 A. Yes.  A <Feature Edge> can appear up to twice in a <Feature Face Ring>,
    once with each orientation.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Face Ring Edge Consistency

Associated to (one-way)
	one or more {ordered} Feature Edge instances, each with a Edge Directions link object

Component of (two-way)
	one Feature Face instance

-------------------------------------------------------------------------------

Abstract Class Name: Feature Hierarchy

Definition:
 An instance of one of the concrete subclasses of this DRM class is
 a hierarchically organized collection of
 <A CLASS="Feature_Representation">Feature Representation</A>
 instances.

Primary Page in DRM Diagram:
     8

Secondary Pages in DRM Diagram:
     1
     2
     3
     7
     9
     20
     22
     23

Example:
 See subclasses for examples.

FAQS:
 Q. Where can users find further information on feature topology in SEDRIS?

 A. See Part 4, Volume 4 Topology Technical Guide of the SEDRIS
    Documentation Set for further information.

 Q. Why can't a <Reference Surface> be associated to a <Feature Hierarchy>,
    as with <Geometry Hierarchy>?
 A. A <Reference Surface> is associated to a <Geometry Hierarchy> to indicate
    that the <Geometry Hierarchy> contains a resolution surface. <Feature
    Hierarchy> instances are not used to represent resolution surfaces.

Superclass: Feature Representation

Subclasses:
     Aggregate Feature
     Feature Model Instance

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Non Cyclic Aggregations

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way)
	zero or one Hierarchy Summary Item instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance

Composed of (two-way)
	zero or one Reference Surface instance
	zero or more Sound Instance instances

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances

Component of (two-way)
	zero or more Alternate Hierarchy Related Features instances, each with a Hierarchy Data link object
	zero or more Classification Related Features instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Feature Model instance
	zero or more LOD Related Features instances, each with a Base LOD Data link object
	zero or more Octant Related Features instances, each with a Octant Data link object
	zero or more Perimeter Related Features instances, each with a Perimeter Data link object
	zero or more Quadrant Related Features instances, each with a Quadrant Data link object
	zero or more Spatial Index Related Features instances, each with a Spatial Index Data link object
	zero or more State Related Features instances, each with a State Data link object
	zero or more Time Related Features instances, each with a Time Constraints Data link object

-------------------------------------------------------------------------------

Class Name: Feature Model

Definition:
 An instance of this DRM class specifies a collection of feature
 attributes and the necessary hierarchy and attributes required
 to build a <Feature Representation> representation of an
 environmental entity, defined in the single SRF specified by
 its <Model> aggregate.

Primary Page in DRM Diagram:
     2

Secondary Pages in DRM Diagram:
     7
     16

Example:
 1. A segment of railroad track, with <Property Value> instances
    describing its mobility and material properties.

FAQS:
 Q. Where can users find further information on feature topology in SEDRIS?

 A. See Part 4, Volume 4 Topology Technical Guide of the SEDRIS
    Documentation Set for further information.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Associated by (one-way)
	zero or more Feature Model Instance instances

Composed of (two-way)
	zero or one Feature Hierarchy instance 

Composed of (two-way metadata)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way)
	one Model instance

-------------------------------------------------------------------------------

Class Name: Feature Model Instance

Definition:
 An instance of this DRM class specifies a single case of the
 existence of a <Feature Model> within a given transmittal,
 including variations or specialization unique to that case.

Primary Page in DRM Diagram:
     7

Secondary Pages in DRM Diagram:
     2
     8
     16

Example:
 1. Consider a <Model> instance representing a forested area, consisting of
    a <Geometry Model> instance describing its renderable geometry, and a
    <Feature Model> instance describing it in terms of a collection of
    <Areal Feature> instances. The <Geometry Model> instance's
    <Geometry Hierarchy> and the <Feature Model>'s component
    <Union Of Features> are connected by an association relationship, to
    indicate that they are alternate representations of the same entity.

    Wherever the <Model> is to be instanced, a <Feature Model Instance>
    instance will be placed, with the appropriate <Transformation>
    instance to locate it in space and any <Expression> instances required
    for <Variable> instances within the <Feature Model>.

FAQS:
 Q. Where can users find further information on feature topology in SEDRIS?

 A. See Part 4, Volume 4 Topology Technical Guide of the SEDRIS
    Documentation Set for further information.

Superclass: Feature Hierarchy

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Non Cyclic Aggregations
     Distinct Link Objects
     Model Spatial Reference Frame

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated to (one-way)
	one Feature Model instance

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or one Reference Surface instance
	zero or more Sound Instance instances

Composed of (two-way)
	zero or more Expression instances, each with a Model Instance Template Indices link object
	zero or one Transformation instance 

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances
	zero or more Alternate Hierarchy Related Features instances, each with a Hierarchy Data link object
	zero or more Classification Related Features instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Feature Model instance
	zero or more LOD Related Features instances, each with a Base LOD Data link object
	zero or more Octant Related Features instances, each with a Octant Data link object
	zero or more Perimeter Related Features instances, each with a Perimeter Data link object
	zero or more Quadrant Related Features instances, each with a Quadrant Data link object
	zero or more Spatial Index Related Features instances, each with a Spatial Index Data link object
	zero or more State Related Features instances, each with a State Data link object
	zero or more Time Related Features instances, each with a Time Constraints Data link object

-------------------------------------------------------------------------------

Class Name: Feature Node

Definition:
 An instance of this DRM class is a zero-dimensional <Feature Topology>
 instance specifying the location of a <Point Feature> instance and / or
 the endpoints of one or more <Feature Edge> instances.

Primary Page in DRM Diagram:
     12

Secondary Pages in DRM Diagram:
     8

Example:
 1. The location of a small building might be represented by a single
    <Feature Node>.

 2. The intersection of two roads would be represented by a <Feature Node>.

FAQS:
 Q. When are <Feature Node> instances required?

 A. <Feature Node> instances are required whenever either <Point Feature>
    or <Feature Edge> instances are present, regardless of the
    feature topology level.

 Q. Are there any geometric constraints on the <Location> that is
    associated with a <Feature Node>?

 A. Yes.  At all feature topology levels greater than zero, different
    <Feature Node> instances cannot share the same <Location>.

Superclass: Feature Topology

Constraints:
     Publishable Object
     No Attribute Conflicts
     Connected Edge Restrictions
     Contained Node Restrictions
     Non Crossing Associations

Associated with (two-way)
	zero or more Feature Edge instances, each with a Edge Directions link object 
	zero or one Feature Face instance 
	zero or more Feature Node instances
	zero or one Feature Volume instance 
	zero or more Point Feature instances

Composed of (two-way) (inherited)
	zero or more Property Value instances

Composed of (two-way)
	one Location instance

Component of (two-way) (inherited)
	zero or more Union Of Feature Topology instances

-------------------------------------------------------------------------------

Abstract Class Name: Feature Representation

Definition:
 An instance of a concrete class derived from this DRM class
 represents an entity in the environment (or a hierarchical
 collection of such entities) so as to abstract away all spatial
 information that is not needed to reason about that entity in
 terms of its spatial connectivity.

Primary Page in DRM Diagram:
     8

Secondary Pages in DRM Diagram:
     3
     6
     10
     23

Example:
 1. A wide variety of spatially located entities, including roads,
    railroads, streams, rivers, lakes, bridges, buildings,
    built-up areas, forests, fields, political boundaries, powerlines,
    airfields, and so on can be abstractly represented as
    <Feature Representation> instances. <Feature Representation>
    instances may be organized into thematic layers, each forming a
    separate topological surface.

FAQS:
 Q. Are there any limits on the size of a feature?

 A. No. <Feature Representation> instances are conceptual entities.  There
    are no limits on the size of a single feature, and very few limits on
    what can be considered to be a single feature.  For example, the
    entire Interstate highway system of the United States could be
    considered to be a single high-level feature, if that were useful in
    a particular context.  However, there are some limits on individual
    <Primitive Feature> instances.

Superclass: SEDRIS Abstract Base

Subclasses:
     Feature Hierarchy
     Primitive Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index

Associated to (one-way)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Composed of (two-way)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance

Composed of (two-way metadata)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way)
	zero or more Union Of Features instances

-------------------------------------------------------------------------------

Abstract Class Name: Feature Topology

Definition:
 An instance of a concrete class derived from this DRM class specifies
 both the geometric aspects (such as location and shape) and topological
 aspects (such as adjacency) of part of one or more <Feature Representation>
 instances.

 A topological surface consists of a collection of <Feature Topology>
 instances related to one another through a variety of topological
 relationships.

Primary Page in DRM Diagram:
     12

Secondary Pages in DRM Diagram:
     11
     23

Example:
 1. In a collection of <Feature Representation> instances representing a
    transportation network, the <Feature Face> instances represent
    built-up areas, airfields, railroad yards, and parking lots,
    the <Feature Edge> instances represent their boundaries as well
    as roads, railroads, and runways, and the <Feature Node>
    instances represent road intersections and railroad crossings.

FAQS:
 Q. Why is <Feature Topology> defined separately from <Geometry Topology>?

 A. <Feature Topology> includes both the geometric and the topological
    aspects of <Feature Representations>, while <Geometry Topology>
    includes only the topological aspects of <Geometry Representation>,
    which are completely optional.

Superclass: SEDRIS Abstract Base

Subclasses:
     Feature Edge
     Feature Face
     Feature Node
     Feature Volume

Constraints:
     Publishable Object
     No Attribute Conflicts

Composed of (two-way)
	zero or more Property Value instances

Component of (two-way)
	zero or more Union Of Feature Topology instances

-------------------------------------------------------------------------------

Abstract Class Name: Feature Topology Hierarchy

Definition:
 An instance of this DRM class specifies a spatially organized
 hierarchical collection of <Feature Topology> instances, which
 includes all the <Feature Topology> instances that lie within a
 defined spatial extent, and are components of a single
 <Aggregate Feature> instance.

Primary Page in DRM Diagram:
     11

Secondary Pages in DRM Diagram:
     8
     23

Example:
 1. The set of all <Feature Topology> instances contained within an
    independent topological surface, organized into a collection of
    regularly or irregularly shaped tiles.

FAQS:
 Q. What is the purpose of this class?

 A. This class allows <Feature Topology> instances to be spatially organized
    using different methods.  It ensures that all <Feature Topology>
    instances, particularly those that are not directly associated with any
    <Feature Representation>, have at least one containing object.

 Q. Why not restrict <Feature Topology Hierarchy> to be a component of
    just <Environment Root> and <Model> - placing topology as an
    organizing principle on par with <Geometry Representation> organizations
    and <Feature Representation> organizations?
 A. It shall be possible to spatially organize the topology of every
    "topological surface".  A "topological surface" is not necessarily
    "rooted at" an <Environment Root> or a <Model> instance. In general,
    many different "topological surfaces" may exist within
    an <Environment Root> or a <Model>.

Superclass: SEDRIS Abstract Base

Subclasses:
     Perimeter Related Feature Topology
     Spatial Index Related Feature Topology
     Union Of Feature Topology

Constraints:
     Publishable Object

Component of (two-way)
	zero or more Aggregate Feature instances

Field Elements:
    SE_Feature_Topology_Level feature_topology_level;
   /*
    *  The feature_topology_level field specifies the level of
    *  feature topology that is present within the hierarchy
    *  represented by the given <Feature Topology Hierarchy>
    *  instance.
    */


-------------------------------------------------------------------------------

Class Name: Feature Volume

Definition:
 An instance of this DRM class is a 3-dimensional <Feature Topology>
 instance used to represent the region of space that corresponds to
 parts of zero or more <Volumetric Feature> instances, bounded by
 two or more <Feature Face> instances.

Primary Page in DRM Diagram:
     12

Secondary Pages in DRM Diagram:
     8

Example:
 1. Consider a <Volumetric Feature> representing a building. It has an
    associated <Feature Volume>, which defines its extent, shape, and
    topological relationships; a <Classification Data> component that
    classifies it as an ECC_BUILDING; <Property Value> components that
    describe its characteristics, such as material composition, and a
    <Label> that identifies it as "The Empire State Building".

            <Volmetric Feature>--------------<Feature Volume>
                   <>
           ----------------------------------------
           |                      |               |
   <Classification Data>   <Property Value>    <Label>
     { ECC_BUILDING }                            <>
                                                 |
                                               <Text>
                                      { "Empire State Building" }

FAQS:
 Q. When are <Feature Volume> instances required?
 A. <Feature Volume> instances are required whenever there are
    <Volumetric Feature> instances, regardless of the feature
    topology level.

 Q. Are there any geometric constraints on <Feature Volume>
    instances?
 A. Yes.  <Feature Volume> instances must always have closed external
    boundaries, and their interiors must be fully connected.  At
    feature topology level 5, the interiors of <Feature Volume>
    instances may not intersect or overlap one another, and <Feature
    Volume> instances may meet only along one or more common <Feature
    Face> instances.

 Q. Can <Feature Volume> instances exist at any feature topology
    level?
 A. Yes. <Feature Volume> instances may exist at any feature topology
    level in order to define the extents of <Volumetric Feature>
    instances. At feature topology level 5, the collection of
    <Feature Volume> instances must exhaustively and exclusively
    partition the 3-dimensional topological space, such that exactly
    two <Feature Volume> instances shall be bounded by each
    <Feature Face>.

 Q. Looking at the relationships allowed for <Feature Topology>, we
    note that the <Feature Node> to <Feature Node> association, and
    the <Feature Edge> to <Feature Edge> association are "many to
    many", while the <Feature Face> to <Feature Face> association is
    "optional to optional".  Why is there no corresponding
    association between <Feature Volume> instances?
 A. These associations exist to support cross-tile topology. This
    refers to topological relationships that cross multiple branches
    below a <Spatial Index Related Features>, <Spatial Index
    Related Feature Topology>, <Perimeter Related Features>, or
    <Perimeter Related Feature Topology> instance. <Feature Node>,
    <Feature Edge>, and, in 3D, <Feature Face> instances can be
    located on the boundary of a tile. When this happens, they have
    "counterparts" in each of the adjacent tiles that share the
    boundary. These associations allow <Feature Node>, <Feature
    Edge>, and <Feature Face> instances to identify their
    counterparts, if any.

    In 2D,
    * tile boundary <Feature Node> instances come in pairs, unless
      they're located at a corner where four tiles meet,
    * tile boundary <Feature Edge> instances always come in pairs,
    * <Feature Face> instances are always contained within a single
      tile.

    In 3D,
    * tile boundary <Feature Node> instances can come in
      - pairs, if they're located within a tile boundary
        <Feature Face>,
      - fours, if they lie on a tile boundary <Feature Edge>, or
      - eights, if they are at a tile boundary corner.
    * tile boundary <Feature Edge> instances can come in
      - pairs, if they are contained in a tile boundary
        <Feature Face>,
        or
      - fours if they lie on a tile boundary <Feature Edge>.
    * tile boundary <Feature Face> instances only come in pairs,
      so a <Feature Face> can have at most one counterpart.
    * <Feature Volume> instances cannot be part of a tile boundary
      (though their bounding <Feature Face> instances can).
      Therefore, <Feature Volume> instances never have counterparts
      in adjacent tiles.

Superclass: Feature Topology

Constraints:
     Publishable Object
     No Attribute Conflicts
     Contained Edge Restrictions
     Contained Node Restrictions
     Faces Bordering Volumes
     Non Crossing Associations
     Volume Shell Face Consistency

Associated by (one-way)
	zero or more Feature Face instances 

Associated with (two-way)
	zero or more Feature Edge instances 
	zero or more Feature Node instances 
	zero or more Volumetric Feature instances

Composed of (two-way) (inherited)
	zero or more Property Value instances

Composed of (two-way)
	zero or more Feature Volume Shell instances 

Component of (two-way) (inherited)
	zero or more Union Of Feature Topology instances

-------------------------------------------------------------------------------

Class Name: Feature Volume Shell

Definition:
 An instance of this DRM class specifies the one-directional
 topological relationship from a <Feature Volume> to the
 collection of two or more <Feature Face> instances that
 define one of its boundaries (external or internal).

Primary Page in DRM Diagram:
     12

Example:
 1. Consider a <Volumetric Feature> representing a building. It has an
    associated <Feature Volume>, which defines its extent, shape, and
    topological relationships; a <Classification Data> component that
    classifies it as an ECC_BUILDING; <Property Value> components that
    describe its characteristics, such as material composition, and a
    <Label> that identifies it as "The Empire State Building". The
    external boundary of the <Feature Volume> would consist of a single
    <Feature Volume Shell> which would be associated with the
    <Feature Face> instances representing the walls, roof, and
    (basement) floor of the building.

FAQS:
 Q. When are <Feature Volume Shell> instances required?
 A. All <Feature Volume> instances except the instance representing
    the universal volume are required to have at least one
    <Feature Volume Shell> component, representing its external
    boundary. All <Feature Volume> instances, including the
    instance representing the universal volume, may also have
    any number of <Feature Volume Shell> components that
    define internal boundaries (that is, "holes") within the
    <Feature Volume>.

 Q. Can the same <Feature Face> appear more than once in the
    collection of <Feature Face> instances making up a
    <Feature Volume Shell>?
 A. Yes. A <Feature Face> can appear up to twice in a
    <Feature Volume Shell>, once with each orientation.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Volume Shell Face Consistency

Associated to (one-way)
	2 or more Feature Face instances, each with a Face Directions link object

Component of (two-way)
	one Feature Volume instance

Field Elements:
    SE_Boolean universal;
   /*
    *  The universal field specifies that the given <Feature Volume> instance
    *  is the universal <Feature Volume> instance.  Within a 3D tile that has
    *  feature topology level 5, the universal <Feature Volume>
    *  instance lies "outside" any other volumes.  Since the
    *  external boundary of the universal <Feature Volume> instance
    *  is at infinity, a <Feature Volume> instance that has this field
    *  set to SE_TRUE has no external <Feature Volume Shell> instance.
    */


-------------------------------------------------------------------------------

Class Name: Finite Element Mesh

Definition:
 An instance of this DRM class specifies a tesselation of a surface
 into mesh faces, or of a solid into solid elements. Additional
 data may be associated with each vertex, mesh face, and / or
 solid element.

 More specifically, a <Finite Element Mesh> instance is comprised of:
 1) an ordered list of <Vertex> instances, which thus associates
    an index number to each <Vertex> instance,

 2) a <Mesh Face Table> instance, which defines the mesh faces
    in terms of <Vertex> index numbers,

 3) optionally, <Property Table> instances providing additional data
    (details given below).

 Knowledge of which vertices form a mesh face (or solid) is important
 for various computations, such as interpolation.

 Component <Property Table> instances are optional; when present, they
 are used to define solid elements and to associate data with <Vertex>
 instances, mesh faces, or solid elements.

Primary Page in DRM Diagram:
     5

Secondary Pages in DRM Diagram:
     18

Example:
 1. In support of a rain run-off computational model, a ground surface
    area is triangulated.  At each triangle vertex, the gradient, porosity,
    flow resistance, water capacity, and rain rate are measured.

    This data set is represented in a <Finite Element Mesh> instance by

    1) an ordered list of <Vertex> instances (one for each triangle
       vertex),

    2) a <Mesh Face Table> to define the triangles, an
       ECC_MESH_FACE_PROPERTY_SET <Property Table> for the gradient
       data, and

    3) an ECC_MESH_NODE_PROPERTY_SET <Property Table> for the
       remaining properties.

FAQS:
 Q. What is the difference between a surface and a solid
    <Finite Element Mesh>?
 A. Surface mesh does not have any <Property Table> instances classified
    as either ECC_MESH_SOLID_SET or ECC_MESH_SOLID_PROPERTY_SET, but may
    have surface topology in its component <Mesh Face Table>.

    A solid mesh shall have a ECC_MESH_SOLID_SET <Property Table>,
    may have a ECC_MESH_SOLID_PROPERTY_SET <Property Table>, and
    does not have surface topology in its component <Mesh Face Table>.

 Q. As a user, where can users obtain further information about
    <Finite Element Mesh> and its associated <Data Table> instances?
 A. See Part 4 Volume 6, Data Tables Technical Guide, of the
    SEDRIS Documentation Set.

Superclass: Primitive Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Continuous LOD Restrictions
     Image Mapping Functions and Texture Coordinates
     Nested Primitive Geometry
     Finite Element Mesh Structure

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or one Presentation Domain instance
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or more Tack Point instances
	zero or one Union Of Primitive Geometry instance 

Composed of (two-way)
	one Mesh Face Table instance
	3 or more {ordered} Vertex instances 

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Primitive Geometry instances

-------------------------------------------------------------------------------

Class Name: Flashing Light Behaviour

Definition:
 An instance of this DRM class specifies behaviour specific to
 a flashing light.

Primary Page in DRM Diagram:
     21

Example:
 1. Consider a <Point> representing a warning light at a railroad
    crossing. The <Point> has a <Light Rendering Properties>
    component, which in turn has a <Flashing Light Behaviour>
    and a <Light Rendering Properties Control Link>. The
    <Light Rendering Properties Control Link> is used to turn on
    the light, so that the light flashes when indicating that a
    train is approaching.

FAQS:
     None.

Superclass: Light Rendering Behaviour

Constraints:
     Publishable Object

Component of (two-way) (inherited)
	one or more Light Rendering Properties instances

Field Elements:
    SE_Long_Float period;
   /*
    *  The period field specifies the total period of time, measured
    *  in seconds, and including both the on and off parts of the
    *  flashing cycle.
    */

    SE_Long_Float delay;
   /*
    *  The delay field specifies a delay period, measured in seconds,
    *  before the flashing behaviour is to begin, and shall be
    *  a non-negative value. It can be used to allow a collection
    *  of objects representing lights to appear asynchronous.
    */

    SE_Long_Float duration;
   /*
    *  The duration field specifies the period of time, measured in seconds,
    *  that the light is on, and is therefore required to be less than
    *  the period field value.
    */


-------------------------------------------------------------------------------

Class Name: Functional Association Data

Definition:
 An instance of this DRM class specifies the semantic meaning of
 the association relationship with which it is bound.

Primary Page in DRM Diagram:
     9

Example:
     None.

FAQS:
     None.

Superclass: Base Association Data

Constraints:
     Publishable Object

Field Elements:
    SE_Functional_Association_Meaning_Type meaning;
   /*
    *  The meaning field specifies the semantic meaning of the
    *  association relationship with which the given instance of
    *  <Functional Association Data> is bound.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Function

Definition:
 An instance of one of the concrete subclasses of this abstract DRM class
 specifies an expression for which the value is determined by evaluating
 the arguments of the expression - the ordered <Expression> components
 of the <Function> - and passing them through the specified function.

Primary Page in DRM Diagram:
     16

Secondary Pages in DRM Diagram:
     23

Example:
 See specific subclasses for examples.

FAQS:
 See the subclasses for details.

Superclass: Expression

Subclasses:
     Predefined Function
     Pseudo Code Function

Constraints:
     Publishable Object
     Non Cyclic Aggregations

Composed of (two-way)
	zero or more {ordered} Expression instances 

Component of (two-way) (inherited)
	zero or more Control Link instances
	zero or more Feature Model Instance instances, each with a Model Instance Template Indices link object
	zero or more Function instances
	zero or more Geometry Model Instance instances, each with a Model Instance Template Indices link object

Field Elements:
    EDCS_Attribute_Value_Type value_type;
   /*
    *  The value_type of a <Function> instance returns the type of value
    *  produced when the <Function> instance is evaluated for its arguments.
    */


-------------------------------------------------------------------------------

Class Name: Geometric Centre

Definition:
 An instance A of this DRM class is a component of an
 <Aggregate Geometry> instance B - that is, of an instance
 of a concrete subclass of <Aggregate Geometry> - where B
 represents a "body" such that the <Location 3D> instance
 specified by A has the semantic indicated by A's
 meaning field.

Primary Page in DRM Diagram:
     4

Example:
 1. Consider a <Model> instance S providing a geometric representation
    of an ECC_SAILING_VESSEL as follows, where the srf_info of S is
    specified to be LSR 3D.

         <Model>
         <>
         ----------------------------------
         |                                |
   <Geometry Model>             <Classification Data>
        <>                      tag = ECC_SAILING_VESSEL
        |
   <Union Of Geometry Hierarchy>
        <>
   ------------------------------------
   |                                  |
 (geometric representation)  <Geometric Centre>
                             meaning =
                             SE_GEOM_CTR_CODE_CENTRE_OF_BUOYANCY
                                      |
                             <LSR 3D Location>

    If S is instanced in a simulation where S is considered to be
    floating on water, the effects of the force of the water upon
    S can be computed for the SE_GEOM_CTR_CODE_CENTRE_OF_BUOYANCY
    <Geometric Centre> to determine how they apply to S as a whole.

 2. Consider a <Model> instance G providing a geometric representation
    of an ECC_GROUND_VEHICLE as follows, where the srf_info
    of the <Model> are specified to be LSR 3D.

         <Model>
         <>
         ----------------------------------
         |                                |
   <Geometry Model>             <Classification Data>
        <>                      tag = ECC_GROUND_VEHICLE
        |
   <Union Of Geometry Hierarchy>
        <>
   ------------------------------------
   |                                  |
 (geometric representation)  <Geometric Centre>
                             meaning =
                             SE_GEOM_CTR_CODE_CENTRE_OF_MASS
                                      |
                             <LSR 3D Location>

 3. Consider a <Model> instance A providing a geometric representation
    of an ECC_AIRCRAFT as follows, where the srf_info of the <Model>
    are specified to be LSR 3D.

         <Model>
         <>
         ----------------------------------
         |                                |
   <Geometry Model>             <Classification Data>
        <>                      tag = ECC_AIRCRAFT
        |
   <Union Of Geometry Hierarchy>
        <>
   ------------------------------------
   |                                  |
 (geometric representation)  <Geometric Centre>
                             meaning =
                             SE_GEOM_CTR_CODE_CENTRE_OF_PRESSURE
                                      |
                             <LSR 3D Location>

    If A is instanced in a simulation where A is considered to be
    in the air, the effects of the force of the air upon A
    can be computed for the SE_GEOM_CTR_CODE_CENTRE_OF_PRESSURE
    <Geometric Centre> to determine how they apply to A as a whole.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	one Location 3D instance

Component of (two-way)
	one or more Aggregate Geometry instances

Field Elements:
    SE_Geometric_Centre_Code meaning;
   /*
    *  The meaning field specifies the semantic of the <Location 3D>
    *  component of the given instance of <Geometric Centre>.
    */


-------------------------------------------------------------------------------

Class Name: Geometry Edge

Definition:
 An instance of this DRM class is a one-dimensional
 <Geometry Topology> instance consisting of an ordered
 collection of <Location> instances connecting one <Geometry Node> to
 another <Geometry Node>. The orientation of a <Geometry Edge> is defined
 by the order of its <Location> components, taken in conjunction with
 its starting <Geometry Node> and ending <Geometry Node>.

 A <Geometry Edge> is used to represent the location of a segment of
 1) one or more <Linear Geometry> instances,
 2) a boundary of one or more <Geometry Face> instances, or
 3) both.

Primary Page in DRM Diagram:
     13

Secondary Pages in DRM Diagram:
     5

Example:
 1. A <Line> instance that represents the lighting of a
    runway may consist of many <Geometry Edge> instances.

FAQS:
     None.

Superclass: Geometry Topology

Constraints:
     Publishable Object
     Connected Edge Restrictions

Associated with (two-way)
	zero or more {ordered} Geometry Face instances, each with a Edge Directions link object 
	exactly 2 {ordered} Geometry Node instances, each with a Edge Directions link object 
	zero or more Geometry Volume instances 
	zero or more Linear Geometry instances, each with a Edge Directions link object

Component of (two-way) (inherited)
	one Union Of Geometry Topology instance

-------------------------------------------------------------------------------

Class Name: Geometry Face

Definition:
 An instance of this DRM class specifies a significant polygonal area.

 The external boundary of a <Geometry Face> is specified by its
 <Geometry Face Ring> component.

Primary Page in DRM Diagram:
     13

Secondary Pages in DRM Diagram:
     5

Example:
 1. A triangulation of <Polygon> instances that detail the upper surface
    of a forest canopy is composed of many <Geometry Face> instances.

FAQS:
     None.

Superclass: Geometry Topology

Constraints:
     Publishable Object
     Contained Node Restrictions

Associated with (two-way)
	one or more {ordered} Geometry Edge instances, each with a Edge Directions link object 
	zero or more Geometry Node instances 
	a bounded set of 0..2 {ordered} Geometry Volume instances, each with a Face Directions link object 
	zero or more Polygon instances

Component of (two-way) (inherited)
	one Union Of Geometry Topology instance

-------------------------------------------------------------------------------

Abstract Class Name: Geometry Hierarchy

Definition:
 An instance of one of the concrete subclasses of this DRM class is
 a hierarchically organized collection of <Geometry Representation>
 instances.

Primary Page in DRM Diagram:
     3

Secondary Pages in DRM Diagram:
     1
     2
     4
     5
     7
     8
     9
     20
     22
     23

Example:
 See concrete subclasses for examples.

FAQS:
     None.

Superclass: Geometry Representation

Subclasses:
     Aggregate Geometry
     Geometry Model Instance
     Property Grid Hook Point

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations

Associated to (one-way)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances

Composed of (two-way)
	zero or one Reference Surface instance
	zero or more Sound Instance instances

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance

Composed of (two-way metadata)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

-------------------------------------------------------------------------------

Class Name: Geometry Model

Definition:
 An instance of this DRM class specifies a collection of
 geometric attributes and the necessary hierarchy and
 attributes required to build a renderable component of
 the transmittal, defined in the single single SRF
 specified by its <Model> aggregate.

Primary Page in DRM Diagram:
     2

Secondary Pages in DRM Diagram:
     3
     7
     16

Example:
 1. The representation of the hull of an M1 tank.

 2. A <Geometry Model> representing a missile pointing down the -Z axis.
    The <Geometry Model> is aggregated by a <Model>, which in turn is part of
    a large <Model Library>, in which the missiles are expected to point down
    the positive Y axis. To be consistent with the other <Models> in the
    <Model Library>, the missile's <Geometry Model> has an
    <LSR Transformation> to reorient it to point down the positive Y axis.

 3. A <Geometry Model> may be a large and complex as a large terrain model,
    or as simple as a tank's turret at the lowest level of detail.

FAQS:
 Q. Why does <Geometry Model> have an <LSR Transformation>? Isn't this
    taken care of by <Geometry Model Instance>'s <Transformation>
    component?
 A. <Geometry Model> has an <LSR Transformation> to allow all <Model>
    components of a <Model Library> to be given a uniform orientation.
    (Note that the data provider is not *required* to give them all a
    uniform orientation.)

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Continuous LOD Restrictions

Associated by (one-way)
	zero or more Geometry Model Instance instances 

Composed of (two-way)
	zero or more Attachment Point instances
	zero or more Contact Point instances 
	zero or one Geometry Hierarchy instance 
	zero or one LSR Transformation instance 

Composed of (two-way metadata)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way)
	one Model instance

-------------------------------------------------------------------------------

Class Name: Geometry Model Instance

Definition:
 An instance of this DRM class specifies a single case of the existence
 of a <Geometry Model> within a given transmittal, including variations
 or specialization unique to that case. In particular, a
 <Geometry Model Instance> is used to transform one <Geometry Model> into
 the SRF of another <Geometry Model> or that of an <Environment Root>.

Primary Page in DRM Diagram:
     7

Secondary Pages in DRM Diagram:
     2
     3
     16

Example:
 1. Consider a <Model> of a building, consisting of a <Geometry Model>
    describing its geometric representation, where the <Model> is
    described in an LSR 3D SRF.

    To instance this <Model> into an <Environment Root>, the
    SRF of which is 3D geodetic, the data provider
    constructs a <Geometry Model Instance> with a <World Transformation>
    component, and incorporates it into the <Geometry Hierarchy> of
    that <Environment Root>. The <World Transformation> specifies the
    <CD 3D Location> at which the <Model>'s 0, 0, 0 coordinate will be
    instanced, together with any other transformation information required
    to orient and scale the <Model> properly.

 2. Consider a <Geometry Model> describing the rotor of a helicopter,
    and intended for use within a larger <Geometry Model> of the entire
    helicopter. Both are defined in 3D LSR SRFs.

    The helicopter model will contain a <Geometry Model Instance> of
    the rotor model, with an <LSR Transformation> component containing
    a <Rotation> instance with a <Rotation Control Link>. The
    <LSR Transformation> specifies both the transformation required to
    position the rotor within the helicopter model, and the <Variable>
    within the larger helicopter <Model> that will be plugged into the
    rotor <Model>'s internal <Variable> for angle of rotation.

FAQS:
     None.

Superclass: Geometry Hierarchy

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Distinct Link Objects
     Model Spatial Reference Frame

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated to (one-way)
	one Geometry Model instance 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances

Composed of (two-way)
	zero or one Conformal Behaviour instance 
	zero or more Expression instances, each with a Model Instance Template Indices link object
	zero or one Overload Priority Index instance
	zero or one Rendering Priority Level instance
	zero or one Stamp Behaviour instance
	zero or one Transformation instance 

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

-------------------------------------------------------------------------------

Class Name: Geometry Node

Definition:
 An instance of this DRM class specifies a topological attribute that
 identifies a significant place, or the connecting point of
 higher-dimensional topological attribute(s).  It is the component of
 one (or more) objects that have a single <Location>.  The location
 of a <Geometry Node> is the same location as the spatially located
 object of which the node is a component.

Primary Page in DRM Diagram:
     13

Secondary Pages in DRM Diagram:
     5
     6
     18

Example:
 1. The endpoints of a <Geometry Edge> representing part of the
    lighting of a runway are specified by <Geometry Node> instances.

FAQS:
     None.

Superclass: Geometry Topology

Constraints:
     Publishable Object
     Connected Edge Restrictions
     Contained Node Restrictions

Associated with (two-way)
	zero or more Ellipse instances 
	zero or more Geometry Edge instances, each with a Edge Directions link object 
	zero or one Geometry Face instance 
	zero or one Geometry Volume instance 
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or more Vertex instances
	zero or more Volume Object instances 

Component of (two-way) (inherited)
	one Union Of Geometry Topology instance

-------------------------------------------------------------------------------

Abstract Class Name: Geometry Representation

Definition:
 An instance of a concrete class derived from this DRM class species either
 1) the concepts of traditional geometry and/or
 2) measured data and organizational methods used to organize
    instances of these traditional geometry and of other
    concrete DRM classes within a transmittal.

Primary Page in DRM Diagram:
     3

Secondary Pages in DRM Diagram:
     5
     6
     23

Example:
 See individual subclasses for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     Geometry Hierarchy
     Primitive Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index

Composed of (two-way)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances

Composed of (two-way metadata)
	zero or one Time Constraints Data instance

-------------------------------------------------------------------------------

Abstract Class Name: Geometry Topology

Definition:
 An instance of a concrete class derived from this DRM class
 specifies a standard topological element.

Primary Page in DRM Diagram:
     13

Secondary Pages in DRM Diagram:
     11
     23

Example:
 See individual subclasses for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     Geometry Edge
     Geometry Face
     Geometry Node
     Geometry Volume

Constraints:
     Publishable Object

Component of (two-way)
	one Union Of Geometry Topology instance

-------------------------------------------------------------------------------

Abstract Class Name: Geometry Topology Hierarchy

Definition:
 An instance of a concrete class derived from this DRM class is a
 spatially organized hierarchical collection of
 <Geometry Topology> instances that lie within a defined spatial
 extent, and are components of a single <Aggregate Geometry> instance.

Primary Page in DRM Diagram:
     11

Secondary Pages in DRM Diagram:
     4
     23

Example:
 See individual subclasses for examples.

FAQS:
 Q. What is the purpose of this class?

 A. This class allows <Geometry Topology> instances to be spatially organized
    using different methods.  It ensures that all <Geometry Topology>
    instances particularly those that are not directly associated with any
    <Geometry Representation>, have at least one containing object.

 Q. Why not restrict <Geometry Topology Hierarchy> to be a component of
    just <Environment Root> and <Model> - placing topology as an
    organizing principle on par with <Geometry Representation> organizations
    and <Geometry Representation> organizations?
 A. We require the ability to spatially organize the topology of every
    "topological surface".  A "topological surface" is not necessarily
    "rooted at" an <Environment Root> or a <Model> instance. In general,
    many different "topological surfaces" may exist within
    an <Environment Root> or a <Model> instance.

Superclass: SEDRIS Abstract Base

Subclasses:
     Perimeter Related Geometry Topology
     Spatial Index Related Geometry Topology
     Union Of Geometry Topology

Constraints:
     Publishable Object

Component of (two-way)
	zero or more Aggregate Geometry instances

Field Elements:
    SE_Geometry_Topology_Level geometry_topology_level;
   /*
    *  The geometry_topology_level field specifies the level of
    *  geometry topology that is present within the hierarchy
    *  represented by the given <Geometry Topology Hierarchy>
    *  instance.
    */


-------------------------------------------------------------------------------

Class Name: Geometry Volume

Definition:
 An instance of this DRM class is a three-dimensional <Geometry Topology>
 instance used to represent an enclosed region of space that is
 bounded by two or more <Geometry Face> instances.

Primary Page in DRM Diagram:
     13

Secondary Pages in DRM Diagram:
     5

Example:
 1. Consider a <Polyhedron> representing a building. It has a collection
    of <Polygons>, which define its geometric shape; an associated
    <Geometry Volume>, which defines its topological relationships; a
    <Classification Data> component that classifies it as an
    ECC_BUILDING; <Property Value> components that describe its
    characteristics, such as material composition, and a <Label> that
    identifies it as "The Empire State Building".

FAQS:
 Q. When are <Geometry Volume> instances required?
 A. <Geometry Volume> instances are required only when the geometry
    topology level is five.

 Q. Are there any geometric constraints on <Geometry Volume>
    instances?
 A. Yes.  <Geometry Volume> instances must always have closed
    external boundaries (defined by their component <Polygons>),
    and their interiors must be fully connected.  At geometry
    topology level 5, the interiors of <Geoemtry Volume> instances
    may not intersect or overlap one another, and <Geometry Volume>
    instances may meet only along one or more common <Geometry
    Face> instances.

 Q. Can <Geometry Volume> instances exist at any geometry topology
    level?
 A. Yes. <Geometry Volume> instances may exist at any geometry
    topology level. At geometry topology level 5, the collection of
    <Geometry Volume> instances must exhaustively and exclusively
    partition the 3-dimensional topological space, such that exactly
    two <Geometry Volume> instances shall be bounded by each
    <Geometry Face>.

Superclass: Geometry Topology

Constraints:
     Publishable Object
     Contained Edge Restrictions
     Contained Node Restrictions
     Faces Bordering Volumes
     Non Crossing Associations

Associated with (two-way)
	zero or more Geometry Edge instances 
	4 or more Geometry Face instances, each with a Face Directions link object 
	zero or more Geometry Node instances 
	zero or more Polyhedron instances

Component of (two-way) (inherited)
	one Union Of Geometry Topology instance

-------------------------------------------------------------------------------

Class Name: Grid Overlap

Definition:
 An instance of this DRM class specifies how the data provider
 intended the consumer to resolve data ambiguity at a location
 falling within a grid cell for two or more <Property Grid>
 instances, such that the ambiguity cannot be resolved by other
 means.

 An ambiguity occurs at a location L lying within two <Property Grid>
 instances A and B if all four of the following conditions hold.
 - A and B are not disjoint due to any higher-level organizing
   structure in the transmittal, such as membership under
   different branches of an <Alternate Hierarchy Related Geometry,
   or disjoint <Time Constraints Data>.

 - A and B have matching <Classification Data>.

 - At least one <Table Property Description> in A has a meaning
   matching a <Table Property Description> in B.

 - Both A and B actually have data for that matching
   <Table Property Description> at L.

 When such an ambiguity occurs, <Grid Overlap> instance(s) indicate how
 the data provider intended the consumer to calculate the
 <Table Property Description> value intended at each such location.

 When <Grid Overlap> instances are required and are present, resolution
 only occurs within an overlay group.  The resolution process is performed
 on data from <Property Grid> cells that contain a given location (choose
 the first priority group that includes all relevant grids.)
 The resolution process is as follows:

 STEP 1:
   Start with priority 0.  Each priority group shall have exactly one
   <Grid Overlap> instance with priority 0. The <Property Grid>
   instance for this <Grid Overlap> instance shall overlap the other
   <Property Grid> instances in the given priority group. The
   operation for priority 0 shall be SE_GRD_OVRLP_OP_BASE.

   Extract cell data from the <Property Grid> instance that has this
   <Grid Overlap> instance as a component; this becomes the current data.

 STEP 2:
   Find the next priority.  Priorities within an overlay group need
   not be consecutive, but they shall be unique.  Extract the cell data from
   the <Property Grid> that has this <Grid Overlap> as a component.  Operate
   on this and the current data according to the <Grid Overlap> operation.
   The result of the operation becomes the current data for the next step.

   SE_GRD_OVRLP_OP_REPLACE means that this data overrides the current data
   from the last step.

   SE_GRD_OVRLP_OP_ADD and SE_GRD_OVRLP_OP_MEAN can only be applied to
   numeric data.

   SE_GRD_OVRLP_OP_MERGE operations are dependent on the classification of
   the <Property Grids>, and use methods documented outside SEDRIS.

 STEP 3:
   Look for next priority.  If found, goto step 2.  Otherwise use
   the current data.

Primary Page in DRM Diagram:
     6

Example:
 1. Low resolution grid A covers a large area, and contains smaller,
    but higher resolution grids B, C, and D.  The <Grid Overlap> scheme is:

    <Property Grid>  overlay_group   priority  operation
      A              10              0         SE_GRD_OVRLP_OP_BASE
      B              10              1         SE_GRD_OVRLP_OP_REPLACE
      A              20              0         SE_GRD_OVRLP_OP_BASE
      C              20              1         SE_GRD_OVRLP_OP_REPLACE
      D              20              2         SE_GRD_OVRLP_OP_REPLACE

 In intersection A & B, B data overrides A.
 In intersection A & C, C data overrides A.
 In intersection A & D, D data overrides A.
 In intersection A & C & D, D data overrides others.

 B should not intersect either C or D as this scheme will
 not provide ambiguity resolution.

 2. A seamount is modeled as a grid M of elevation offsets above
    the underlying bathymetry in grids A and B.  The <Grid Overlap> scheme
    is:

    <Property Grid>  overlay_group   priority  operation
      A              1               0         SE_GRD_OVRLP_OP_BASE
      B              1               1         SE_GRD_OVRLP_OP_MEAN
      M              1               999       SE_GRD_OVRLP_OP_ADD
      B              2               0         SE_GRD_OVRLP_OP_BASE
      M              2               999       SE_GRD_OVRLP_OP_ADD

 In intersection A & M and outside of B, add M offsets to A bathymetry
 values.

 In intersection B & M and outside of A, add M offsets to B bathymetry
 values.

 In intersection A & B, average A and B bathymetry values.

 In intersection A & B & M, first average A and B bathymetry values,
 and then add offsets from M to the average.

FAQS:
 Q. Are there real datasets that require this capability?
 A. There are numerous numerical models in the atmosphere and ocean
    community that start by computing a coarse grid over a large
    area, then use this grid as boundary and initial conditions
    for calculating a more finely-sampled grid over a smaller area.
    In many cases, the process is repeated several times, producing
    a "nest" of grids that all cover the same area.  It is also
    possible to implement variable-resolution grids in SEDRIS by
    constructing a base grid covering a large region at a coarse sample
    spacing suitable for describing "ambient" conditions, and then to
    inset finer grids at locations with detailed features of interest.

 Q. When are <Grid Overlap> instances required, and when are they
    optional?
 A. A <Grid Overlap> is required whenever multiple grids contain values
    for the same <Table Property Description> at the same location within
    the simulated environment.

    If their absence will not cause ambiguity in the transmittal,
    <Grid Overlap> instances are not needed. If the <Property Grids>
    are explicitly disjoint due to some higher organizing structure,
    such as mutually exclusive branches of an <Aggregate Geometry>,
    there is no ambiguity and a <Grid Overlap> is not required.
    If grids covering the same location have no common
    <Table Property Description> contents, they do not create ambiguity
    and do not need a <Grid Overlap>.

 Q. Can a <Property Grid> have more than one <Grid Overlap> instance?
 A. Yes.  A base <Property Grid> could have disjoint overlaps with several
    different "insets".  Although it is usually possible to choose priority
    levels within a single group to resolve the ambiguities, use of multiple
    groups may make the situation clearer and easier for the consumer. There
    are also less common situations of multiple overlaps that can't be
    resolved using a single group.

 Q. What happens when cells of overlapping grids are not spatially
    aligned with each other?
 A. The operation rules described in the definition apply at a
    single point location, so alignment of cells is not strictly
    required.  However, it is likely that combining values from misaligned
    cells will not produce a sensible value.  As basic guidance, preparers
    of transmittals should avoid this situation when possible, since it is
    confusing to consumers.  Grids should be resampled before preparing the
    transmittal so as to achieve alignment whenever possible.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Component of (two-way)
	one Property Grid instance

Field Elements:
    SE_Short_Integer_Positive overlay_group;
   /*
    *  The overlay_group field specifies the overlay group within which
    *  the resolution process is to occur.
    */

    SE_Short_Integer_Unsigned priority;
   /*
    *  The priority field specifies a priority that is meaningful
    *  within the specified overlay_group.
    */

    SE_Grid_Overlap_Operator operation;
   /*
    *  The operation field specifies the operation to be performed on
    *  the data during the resolution process.
    */


-------------------------------------------------------------------------------

Class Name: HAEC 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Heliospheric Aries Ecliptic (HAEC) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
     None.

FAQS:
     None.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Spherical_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: HEEC 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Heliospheric Earth Ecliptic (HEEC) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
     None.

FAQS:
     None.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Spherical_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: HEEQ 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Heliospheric Earth Equatorial (HEEQ) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
     None.

FAQS:
     None.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Spherical_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: Hierarchy Data

Definition:
 An instance of this DRM class specifies, for an alternate representation
 within an alternate-hierarchy-related aggregation, the reason why the
 particular alternate representation represented by the branch with which
 this <Hierarchy Data> instance is associated was provided.

Primary Page in DRM Diagram:
     4

Secondary Pages in DRM Diagram:
     8

Example:
 See <Alternate Hierarchy Related Features>,
 <Alternate Hierarchy Related Geometry>.

FAQS:
 See <Alternate_Hierarchy_Related Features>,
 <Alternate Hierarchy Related Geometry>.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Field Elements:
    SE_String alternate_representation_reason;
   /*
    *  The alternate_representation_reason field states the reason that
    *  the corresponding alternate representation was provided.
    */


-------------------------------------------------------------------------------

Class Name: Hierarchy Summary Item

Definition:
 An instance of this DRM class represents an instance, or a number of
 identical instances, of a <Geometry Hierarchy> or <Feature Hierarchy>
 that exists within the given <Model> or <Environment Root> instance.
 <Hierarchy Summary Item> instances are combined together to form
 hierarchies that mirror those that they summarize. This summary is
 a compressed form of the actual hierarchy, as each
 <Hierarchy Summary Item> may represent a number of instances of the
 class indicated by its drm_class field.

 Consequently, the multiplicity field records how many of the given
 class a <Hierarchy Summary Item> actually represents. Note that all
 instances represented by one <Hierarchy Summary Item> shall have
 exactly the same hierarchical pattern beneath them, right down to
 where the hierarchy summary concludes. In essence, a
 <Hierarchy Summary Item> represents both the instance(s) that it
 describes, and the specific hierarchy beneath it (them); it may
 have an optional association to the <Geometry Hierarchy(ies)> or
 <Feature Hierarchy(ies)> that it summarizes.

 Each <Hierarchy Summary Item> instance (that is, each object type)
 can optionally have a list of <EDCS Use Summary Item> instances
 giving the classifications that are attached to those instances in
 the transmittal being summarized.

 The Hierarchy Summary does not have to be a total representation of the
 entire transmittal hierarchy and can be limited to a useful high level
 summary.

 If the producer of the transmittal deems it of potential use to
 consumers, the branches of the Hierarchy Summary can terminate with a
 list of <DRM Class Summary Item> instances representing the objects
 beneath that point in the hierarchy.

Primary Page in DRM Diagram:
     20

Secondary Pages in DRM Diagram:
     1
     2
     3
     8

Example:
 1. Consider an <Environment Root> instance for which the geometry is to
    be summarized.

                            <Environment Root>
                                    <>
                                     |
                                     |
                      <LOD Related Geometry>
                                    <>
                                     |
       --------------------------------------------------------
       |                             |                        |
  <Union Of              <Union Of                      <Union Of
   Primitive Geometry>    Primitive Geometry>           Geometry Hierarchy>
       <>                       <>                           <>
       |                        |                             |
   ------------          ----------      ------------------------------
   |                     |               |             |              |
  <Polygon> ...   <Polygon> ...   <Classification <Union Of       <Union Of
                                   Data>           Primitive       Primitive
                                                   Geometry>       Geometry>
                                                      <>              <>
                                                       |               |
                                                  ----------     ----------
                                                  |              |
                                                <Polygon> ...  <Polygon> ...



    The geometry portion of the above <Environment Root> can therefore
    summarized as follows. Note that this is the same <Environment Root>
    instance as shown above, but for readability only the
    <Hierarchy Summary Item> portion of its instance diagram is shown
    here.

                    <Environment Root>
                            <>
                             |
               <Hierarchy Summary Item>
         drm_class = SE_DRM_CLS_LOD_RELATED_GEOMETRY
         multiplicity_meaning = SE_HS_MLTPCTY_EXACT
         multiplicity         = 1
                            <>
                             |
           ----------------------------------------------
           |                                            |
<Hierarchy Summary Item>               <Hierarchy Summary Item>
SE_DRM_CLS_UNION_OF_PRIMITIVE_GEOMETRY SE_DRM_CLS_UNION_OF_GEOMETRY_HIERARCHY
SE_HS_MLTPCTY_EXACT                    SE_HS_MLTPCTY_EXACT
 2                                     1
           <>                               <>
           |                                 |
      <DRM Class Summary Item>               |
       SE_DRM_CLS_POLYGON                    |
                                             |
                                             |
    ----------------------------------------------------------
    |                           |                            |
  <EDCS Use Summary Item>  <DRM Class Summary Item> <DRM Class Summary Item>
                           SE_DRM_CLS_POLYGON        SE_DRM_CLS_VERTEX


    The <Hierarchy Summary Item> tree, rooted at the <Environment Root>,
    parallels the structure of the corresponding geometry. In this instance,
    the data provider has elected not to provide a detailed summary of the
    <Union Of Geometry Hierarchy>'s structure. The list of
    <DRM Class Summary Item> components merely identify classes that are
    somewhere below the <Union Of Geometry Hierarchy>, rather than the
    patterns in which they appear.

    The <EDCS Use Summary Item> components summarize patterns of
    ECCs, possibly used together with EACs, in the context being summarized.

    If the data provider wished to summarize the hierarchy of the
    <Union Of Geometry Hierarchy> in detail, its <Hierarchy Summary Item>
    could be provided with appropriate <Hierarchy Summary Item> components
    as desired, until the summary reached the level of <Primitive Geometry>
    and the hierarchy summary came to an end.

    For examples of summaries of <Primitive Geometry> patterns, see
    <Primitive Summary Item>.

FAQS:
 Q. If the intent is for a useful high level summary, why not just have
    the consumer perform a shallow breadth-first search?
 A. The consumer could indeed compute the information, since all that
    this provides is a summary of what's in the transmittal. The reason
    for providing the information is to indicate that users don't have
    to be exhaustive if they don't think it's appropriate / required /
    necessary, or a good use of processing time, etc. Even just providing
    a top level summary, allows producers to summarize. They don't have
    to be complete in a legalistic way, and can therefore use this mechanism
    to summarize the major hierarchical structuring, perhaps leaving out
    less significant deviations from that predominant pattern. These
    would turn up in a search and actually confuse the issue. If you
    like, this mechanism allows a producer to sketch out the forest
    without missing it for the trees.

 Q. Why can <Environment Root> and <Model> only have 0 - 2
    <Hierarchy Summary Item> components?
 A. See <<Hierarchy Summary Constraints>>.

Superclass: Base Summary Item

Constraints:
     Publishable Object
     Hierarchy Summary Constraints
     Non Crossing Associations
     Non Overlapping DRM Class Summary Items

Associated to (one-way)
	zero or more Feature Hierarchy instances 
	zero or more Geometry Hierarchy instances 

Composed of (two-way)
	zero or more DRM Class Summary Item instances 
	zero or more Hierarchy Summary Item instances 

Composed of (two-way metadata) (inherited)
	zero or more EDCS Use Summary Item instances 

Component of (two-way)
	zero or one Environment Root instance
	zero or more Hierarchy Summary Item instances
	zero or one Model instance

Inherited Field Elements:
    SE_DRM_Class drm_class;
   /*
    *  The drm_class field indicates the DRM class of the object(s)
    *  represented by the given <Base Summary Item> instance.
    */


Field Elements:
    SE_HS_Multiplicity_Code multiplicity_meaning;
   /*
    *  The multiplicity_meaning field specifies the meaning of the
    *  multiplicity field value for the given <Hierarchy Summary Item>
    *  instance.
    */

    SE_Integer_Unsigned multiplicity;
   /*
    *  The multiplicity field specifies the number of identical
    *  instances represented, or the order of magnitude of that
    *  number, for the given <Hierarchy Summary Item> instance.
    *  If the multiplicity is unknown, this field's value should
    *  be set to zero.
    */


-------------------------------------------------------------------------------

Class Name: HSV Colour

Definition:
 An instance of this DRM class specifies the actual Hue, Saturation,
 and Value data values for a colour defined within the
 HSV colour model.

Primary Page in DRM Diagram:
     14

Example:
 1. A <HSV Colour> for pure black (Value = 0.0,
    Hue and Saturation values don't matter)
 2. A <HSV Colour> for a bright red (Hue = 0.0,
    Saturation = 1.0, Value = 1.0)

FAQS:
 Q. I use RGB, not HSV. How do I get RGB from an HSV transmittal?
 A. This is very easy to do. The mathematical transformation is a bit
    involved, but the SEDRIS API will do it for you, if you ask nicely.
    After opening the transmittal, before you retrieve any <Colour Data>,
    (or, if you want, even before you open the transmittal) call the
    SE_SetColourModel() function, like so:
    "SE_SetColourModel(SE_CLR_MDL_RGB);",
    and for the rest of the execution of that program, you will
    never get back an <HSV Colour> instance. Each <Colour Data> instance
    you retrieve from that point on will be an <RGB Colour> instance.

Superclass: Colour Data

Constraints:
     Publishable Object

Composed of (two-way)
	zero or one HSV Colour Control Link instance

Component of (two-way) (inherited)
	zero or more Ambient Colour instances
	zero or more Diffuse Colour instances
	zero or more Emissive Colour instances
	zero or more Specular Colour instances

Field Elements:
    SE_HSV_Data hsv_data;
   /*
    *  The hsv_data field specifies the HSV colour coordinate.
    */


-------------------------------------------------------------------------------

Class Name: HSV Colour Control Link

Definition:
 An instance of this DRM class specifies a specialized <Control Link> instance
 used to provide the connection between an ordered aggregation of
 <Expression> instances and the target fields of one or more
 <HSV Colour> instances.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     14

Example:
 See the example for <CMY Colour Control Link>, which is analogous
 to how this class is used.

FAQS:
     None.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more HSV Colour instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Unsigned hue_expr_index;
   /*
    *  The value of the hue_expr_index field specifies
    *  which <Expression> component, if any, controls the
    *  hsv_data.hue field value of the affected
    *  <HSV Colour> instances. If the value is zero, the
    *  hsv_data.hue field of those instances is not controlled;
    *  otherwise, the value is a 1-based index into the ordered
    *  aggregation of <Expression> instances.
    */

    SE_Integer_Unsigned saturation_expr_index;
   /*
    *  The value of the saturation_expr_index field specifies
    *  which <Expression> component, if any, controls the
    *  hsv_data.saturation field value of the affected
    *  <HSV Colour> instances. If the value is zero, the
    *  hsv_data.saturation field of those instances is not controlled;
    *  otherwise, the value is a 1-based index into the ordered
    *  aggregation of <Expression> instances.
    */

    SE_Integer_Unsigned value_expr_index;
   /*
    *  The value of the value_expr_index field specifies
    *  which <Expression> component, if any, controls the
    *  hsv_data.value field value of the affected
    *  <HSV Colour> instances. If the value is zero, the
    *  hsv_data.value field of those instances is not controlled;
    *  otherwise, the value is a 1-based index into the ordered
    *  aggregation of <Expression> instances.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Icon

Definition:
 An instance of a concrete class derived from this DRM class is either 
 a <Symbol> or <Text> instance intended for display on a planimetric display.

Primary Page in DRM Diagram:
     10

Secondary Pages in DRM Diagram:
     23

Example:
 See individual subclasses for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     Symbol
     Text

Constraints:
     Publishable Object

Component of (two-way)
	zero or more Label instances

-------------------------------------------------------------------------------

Class Name: Image

Definition:
 An instance of this DRM class specifies one or more MIP levels of texels,
 and can have 3 dimensions.

Primary Page in DRM Diagram:
     22

Secondary Pages in DRM Diagram:
     10
     18

Example:
 1. A brick <Image> that is repeated over the surface of a <Polygon>
    to represent a brick wall.

 2. An <Image> of a tree that when applied to a <Polygon> and combined with
    <Translucency> creates a flat version of a tree.

 3. The <Image> mapped to the surface of a Dismounted Infantryman icon.

 4. The sequence of <Image>(s) mapped to a <Polygon> to represent a
    television.

 5. Consider an <Image> instance that has 3 <Property Table Reference>
    components:
    - one to a <Property Table> for Infrared properties,
    - one to a <Property Table> for Night Vision Goggles properties,
    - and the third to a <Property Table> for Surface Material Category
      properties.
    NOTE: There is no restriction on the number of possible
          <Property Table Reference> components.

                         Image
         ------------------------------------
         |                 |                 |
       PT Ref           PT Ref             PT Ref
   (specifies Axis)  (specifies Axis)  (specifies Axis)
         |                 |                 |
    (Infrared table)    (NVG Table)       (SMC Table)

    1   xx                xx                 yy
    2   xx                xx                 yy
    3   xx                xx                 yy
    4   xx                xx                 wood
    5   xx                xx                 yy
    6   xx                xx                 concrete
    7   xx                xx                 glass
    8   xx                xx                 yy



    a. Consider the case of 1 material. A given texel will contain
       a single integer, which is used in place of the index_on_axis
       field for all the <Property Table Reference> components of
       the <Image>.

    b. Consider the case of 2 materials. A given texel will contain
       3 integers, 2 of which are used in place of the index_on_axis
       field for all the <Property Table Reference> components of
       the <Image>, and a third integer, which specifies the
       percentage of the 2nd material. For a given texel, say the
       numbers are 7   6   50 ; then the material at that texel
       is something that's 50% glass and 50% concrete.

    c. Consider the case of 3 materials. A given texel will contain
       5 integers, 3 of which are used in place of the index_on_axis
       field for all the <Property Table Reference> components of the
       <Image>, and 2 of which specify the percentages of material 2
       and 3. For a given texel, say the numbers are  4 6 7 20 30;
       then the material at that texel is something that is 50% wood,
       20% concrete, and 30% glass.

FAQS:
 Q. Where can users go for further information about
    <Images> and texture mapping?
 A. See Part 4 Volume 8, Images and Colour Models Technical Guide, of the
    SEDRIS Documentation Set for detailed information on
    <Data Table> manipulation.

 Q. The <Image> class does not appear to have a field for storing
    the texels of an <Image> instance. Where are the texels, and
    how can a data provider get at them?
 A. The actual texels of an <Image> instance are hidden by the API
    implementation being used to provide the <Image>. See the
    SE_PutImageData() function in the level 0 write API.

 Q. The <Image> class does not appear to have a field for storing
    the texels of an <Image> instance. Where are the texels, and
    how can a data consumer get at them?
 A. The actual texels of an <Image> instance are hidden by the API
    implementation being used to provide the <Image>, so they are
    accessed via the SE_GetImageData() (in level 0) and
    SE_GetRearrangedImageData() (in level 1) Read API functions.

 Q. How do I use the bits_of_xxx, min_value_of_xxx, and max_value_of_xxx
    fields?
 A. See the comments for the individual image signatures in
    SE_Image_Signature for details on which values are
    present for which signature.

    The min/max fields are used to specify the minimum and
    maximum values a component may have on the producer's system, and
    do NOT relate to whatever values may actually be present in the
    transmitted through SEDRIS.

    EXAMPLES:
    1. If the image components are floating point 32 bits, then a minimum
       value of -1.0 and a maximum value of 1.0 means that all values in
       an image on the producer's system shall be represented within the
       range [-1.0, 1.0].
    2. An image with unsigned integer components of 8 bits may specify its
       range to be [0, 99], indicating that even though the maximum value
       that can be specified with 8 bits is 255, the value 99 should be
       treated as the maximum value for this image.

 Q. What is the maximum size of an image that SEDRIS can transmit?
 A. There is no known size limitation for images in a SEDRIS transmittal.
    (Well, 1.8 x 10^19 texels by the depth of the texel.)
    However, there may be size limitations in either the media that is used
    in the transmission or in computer hardware that interprets the
    transmittal. To alleviate some of the problems associated with large
    images, SEDRIS has "hidden" the actual image data behind a function
    call that allows for the consumer to specify the size of the data that
    is to be handed off to the consumer. This function call is documented
    in P4V17 of the SEDRIS Documentation Set.

 Q. As a data provider, I have an image that I wish to transmit which
    does not correspond to any registered SE_Image_Signature in SEDRIS.
    What can I do?
 A. There are two possibilities.
    1. Decompose your image into component images which *do* correspond
       to various registered image signatures, if possible. In addition
       to complex image signatures, individual image components are also
       supported as an SE_Image_Signature. After the decomposition, add
       a <Description> component to the resulting <Images> to convey to
       your consumers how the component images are to be reassembled
       into the complete image.
    2. If one of the components of your image does not correspond to
       any registered SE_Image_Signature and/or if you have the time,
       submit a SEDRIS Change Request requesting that the desired
       signature be registered as a new addition to SE_Image_Signature.

 Q. Why doesn't SEDRIS support JPEG (and other compressed formats)?
 A. It is not currently deemed appropriate to directly support "lossy"
    imagery within the DRM.

 Q. What kind of image data ordering does SEDRIS support?
 A. Currently SEDRIS only supports texel (pixel) data ordering. Scan line
    (All the red values on the first scan line, then all the green
    values ...) and image plane ordering (all the values of red within
    the image, then all the values of green...) are not supported.

 Q. A <Geometry Representation>'s <Classification Data> component
    identifies it as a wall, but its <Image> via
    <Image Mapping Function> has <Classification Data> for
    railroad track. Which is it?
 A. The <Image> was created for use as a railroad track, but when it is
    creatively reused by a non-railroad <Geometry Representation>, the
    <Geometry Representation> classification overrides.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Associated by (one-way)
	zero or more Camera Point instances
	zero or more Image Mapping Function instances

Composed of (two-way)
	zero or one Classification Data instance 
	zero or one Image Anchor instance
	zero or one Lineage instance 
	zero or one Presentation Domain instance 
	zero or more Property Table Reference instances
	zero or one Spatial Extent instance

Composed of (two-way metadata)
	zero or one Access instance
	zero or one Citation instance
	zero or more Cross Reference instances
	zero or one Description instance 
	zero or one Time Constraints Data instance

Component of (two-way)
	one Image Library instance

Field Elements:
    SE_String name;
   /*
    *  The name field specifies a meaningful short name.
    */

    SE_Colour_Model colour_model;
   /*
    *  The colour_model field specifies the colour model used
    *  throughout the given <Image> instance.  Only one colour
    *  model is allowed per <Image> instance.
    */

    SE_Short_Integer_Positive level_count;
   /*
    *  The level_count field specifies the number of Levels of Detail
    *  defined for the given <Image> instance (for mipmaps). If the
    *  given instance is not a mipmapped image, only one level will
    *  be defined (level_count == 1).
    *
    *  Many end-user applications require that <Image> instances
    *  having MIP levels specify both the horizontal and vertical
    *  dimensions as a power of 2. However, some applications can
    *  handle <Image> instances for which the horizontal and vertical
    *  dimensions are a multiple of 2 rather than a power of 2.
    *  For example, 96 texels in a direction is a multiple of 2 but not
    *  a power of 2. Please note that SEDRIS places no restriction on
    *  either the dimensional size of an <Image> instance, nor makes
    *  any statement as to whether the use of MIPS information within
    *  the <Image> instance will be valid on a given consumer's system.
    */

    SE_Image_MIP_Extents mip_extents_array[];
   /*
    *  There are level_count entries in the mip_extents_array, each
    *  entry of which defines the "size" (the number of horizontal,
    *  vertical, and z texels) for a single MIP level of the given
    *  <Image> instance. The first map shall contain the highest
    *  level of detail; that is, mip_extents_array[0] corresponds
    *  to the level containing the most texels.
    */

    SE_Image_Signature image_signature;
   /*
    *  The image_signature field specifies how texels are represented
    *  within the given <Image> instance; see SE_Image_Signature for details.
    *
    *  Note that for an <Image> instance with an image_signature of
    *  SE_IMG_SIG_EDCS_CLASSIFICATION_CODE, the bit size is a constant
    *  of sizeof(EDCS_Classification_Code).
    */

    SE_Image_Scan_Direction scan_direction;
   /*
    *  The scan_direction field specifies the origin and direction of
    *  the horizontal and vertical components of the given <Image>
    *  instance.
    */

    SE_Image_Scan_Direction_Z scan_direction_z;
   /*
    *  The scan_direction_z specifies the direction in which the given
    *  <Image> instance's z components are ordered.
    */

    SE_Image_Component_Type component_data_type;
   /*
    *  The component_data_type field specifies the data type of the raw
    *  image data. If signed or unsigned integer is specified, the maximum
    *  size fields apply. If floating point is specified, the values range
    *  from 0.0 to 1.0.
    */

    SE_Boolean data_is_little_endian;
   /*
    *  The data_is_little_endian field specifies the endianess
    *  of the raw image data.
    */

    SE_Boolean data_is_3D;
   /*
    *  The data_is_3D field specifies whether the image data has
    *  3 dimensions.
    */

    SE_Short_Integer_Unsigned bits_of_alpha;
   /*
    *  If 0 is specified, the image data does not contain alpha information.
    */

    SE_Short_Integer_Unsigned bits_of_luminance;
   /*
    *  If 0 is specified, the image data does not contain luminance information.
    */

    SE_Short_Integer_Unsigned bits_of_colour_coordinate_1;
   /*
    *  If 0 is specified, the image data does not contain colour information
    *  for this colour coordinate (R, C, H).
    */

    SE_Short_Integer_Unsigned bits_of_colour_coordinate_2;
   /*
    *  If 0 is specified, the image data does not contain colour information
    *  for this colour coordinate (G, M, S).
    */

    SE_Short_Integer_Unsigned bits_of_colour_coordinate_3;
   /*
    *  If 0 is specified, the image data does not contain colour information
    *  for this colour coordinate (B, Y, V).
    */

    SE_Short_Integer_Unsigned bits_of_bump_map_height;
   /*
    *  If 0 is specified, the image data does not contain bump_map_height
    *  information.
    */

    SE_Short_Integer_Unsigned bits_of_material_1;
   /*
    *  If 0 is specified, the image data does not contain material 1 index
    *  information. If non-0 is specified, then this is an index into the
    *  <Property Table> instance(s) that are referenced from the given
    *  <Image> instance.
    *
    *  NOTE: With no material_2 or material_3 percentages, material_1
    *        is at 100%.
    */

    SE_Short_Integer_Unsigned bits_of_material_2;
   /*
    *  If the bits_of_material_2 field specifies non-zero for a given
    *  <Image> instance X, then
    *  - X has at least one <Property Table Reference> component, and
    *  - the bits in the image data of X corresponding to material 2
    *    specify indices into the <Property Table> instance(s) referenced
    *    by X's <Property Table Reference> component(s).
    *
    *  However, if bits_of_material_2 = 0, the given <Image> instance's
    *  texel data do not contain material 2 index information.
    */

    SE_Short_Integer_Unsigned bits_of_material_3;
   /*
    *  If the bits_of_material_3 field specifies non-zero for a given
    *  <Image> instance X, then
    *  - X has at least one <Property Table Reference> component, and
    *  - the bits in the image data of X corresponding to material 3
    *    specify indices into the <Property Table> instance(s) referenced
    *    by X's <Property Table Reference> component(s).
    *
    *  However, if bits_of_material_3 = 0, the given <Image> instance's
    *  texel data do not contain material 3 index information.
    */

    SE_Short_Integer_Unsigned bits_of_material_2_percentage;
   /*
    *  If required by the given <Image> instance's image_signature,
    *  the bits_of_material_2_percentage field is used to specify
    *  the percentage of material 2.
    *
    *  NOTE: the percentage of material 1 is
    *  (100% - (percentage of material 2))
    */

    SE_Short_Integer_Unsigned bits_of_material_3_percentage;
   /*
    *  If required by the given <Image> instance's image_signature,
    *  the bits_of_material_3_percentage field is used to specify
    *  the percentage of material 3.
    *
    *  NOTE: the percentage of material 1 is
    *  (100% - (percentage of material 2) - percentage of material 3))
    */

    SE_Short_Integer_Unsigned bits_of_image_index;
   /*
    *  If 0 is specified, the image data does not contain image index
    *  information.
    */

    SE_Short_Integer_Unsigned bits_of_bump_map_u;
   /*
    *  If 0 is specified, the image data does not contain bump_map_u
    *  information.
    */

    SE_Short_Integer_Unsigned bits_of_bump_map_v;
   /*
    *  If 0 is specified, the image data does not contain bump_map_v
    *  information.
    */

    SE_Float min_value_of_alpha;
   /*
    *  The min_value_of_alpha field specifies the minimum value that
    *  alpha can be within the image data; it is 0.0 if alpha is not used.
    */

    SE_Float max_value_of_alpha;
   /*
    *  The max_value_of_alpha field specifies the maximum value that
    *  alpha can be within the image data; it is 0.0 if alpha is not used.
    */

    SE_Float min_value_of_luminance;
   /*
    *  The min_value_of_luminance field specifies the minimum value that
    *  luminance can be within the image data; it is 0.0 if luminance is
    *  not used.
    */

    SE_Float max_value_of_luminance;
   /*
    *  The max_value_of_luminance field specifies the maximum value that
    *  luminance can be within the image data; it is 0.0 if luminance is
    *  not used.
    */

    SE_Float min_value_of_colour_coordinate_1;
   /*
    *  The min_value_of_colour_coordinate_1 field specifies the minimum
    *  value that colour_coordinate_1 can be within the image data; it
    *  is 0.0 if colour_coordinate_1 is not used.
    */

    SE_Float max_value_of_colour_coordinate_1;
   /*
    *  The max_value_of_colour_coordinate_1 field specifies the maximum
    *  value that colour_coordinate_1 can be within the image data; it
    *  is 0.0 if colour_coordinate_1 is not used.
    */

    SE_Float min_value_of_colour_coordinate_2;
   /*
    *  The min_value_of_colour_coordinate_2 field specifies the minimum
    *  value that colour_coordinate_2 can be within the image data; it
    *  is 0.0 if colour_coordinate_2 is not used.
    */

    SE_Float max_value_of_colour_coordinate_2;
   /*
    *  The max_value_of_colour_coordinate_2 field specifies the maximum
    *  value that colour_coordinate_2 can be within the image data; it
    *  is 0.0 if colour_coordinate_2 is not used.
    */

    SE_Float min_value_of_colour_coordinate_3;
   /*
    *  The min_value_of_colour_coordinate_3 field specifies the minimum
    *  value that colour_coordinate_3 can be within the image data; it
    *  is 0.0 if colour_coordinate_3 is not used.
    */

    SE_Float max_value_of_colour_coordinate_3;
   /*
    *  The max_value_of_colour_coordinate_3 field specifies the maximum
    *  value that colour_coordinate_3 can be within the image data; it
    *  is 0.0 if colour_coordinate_3 is not used.
    */

    SE_Float min_value_of_bump_map_height;
   /*
    *  The min_value_of_bump_map_height field specifies the minimum
    *  value that bump_map_height can be within the image data; it
    *  is 0.0 if bump_map_height is not used.
    */

    SE_Float max_value_of_bump_map_height;
   /*
    *  The max_value_of_bump_map_height field specifies the maximum
    *  value that bump_map_height can be within the image data; it
    *  is 0.0 if bump_map_height is not used.
    */

    SE_Float min_value_of_bump_map_u;
   /*
    *  The min_value_of_bump_map_u field specifies the minimum
    *  value that bump_map_u can be within the image data; it
    *  is 0.0 if bump_map_u is not used.
    */

    SE_Float max_value_of_bump_map_u;
   /*
    *  The max_value_of_bump_map_u field specifies the maximum
    *  value that bump_map_u can be within the image data; it
    *  is 0.0 if bump_map_u is not used.
    */

    SE_Float min_value_of_bump_map_v;
   /*
    *  The min_value_of_bump_map_v field specifies the minimum
    *  value that bump_map_v can be within the image data; it
    *  is 0.0 if bump_map_v is not used.
    */

    SE_Float max_value_of_bump_map_v;
   /*
    *  The max_value_of_bump_map_v field specifies the maximum
    *  value that bump_map_v can be within the image data; it
    *  is 0.0 if bump_map_v is not used.
    */


-------------------------------------------------------------------------------

Class Name: Image Anchor

Definition:
 An instance of this DRM class specifies where the given <Image> is
 located in the specified SRF.

 <Image Anchor> is used in 2 ways:
 - As a component of an <Image> in an <Image Library>.
   In this case, the <Image> is not tied to a particular
   <Feature Representation>
   or <Geometry Representation>, and the <Image Anchor>'s <Location>
   components merely specify the positions of the corners of the
   <Image> in the specified SRF.

   Please note that if 2 geo-referenced <Image> instances are to be
   placed exactly next to each other by means of <Image Anchor>
   components, the <Location> components of those <Image Anchor>
   instances would be exactly the same along the common edge.

 - As a component of an <Image Mapping Function> instance.
   In this case, the <Image Anchor> defines how the associated
   <Image> is to be applied to the object having the
   <Image Mapping Function> instance as a component, and the
   SRF parameters of the <Image Anchor> shall match those of the
   context in which the <Image Mapping Function> is being applied.

   <Image Anchor> instances are used to support spherical and cylindrical
   image projections for <Image Mapping Functions>. By specifying
   anchor points that are not in the same plane, non-orthogonal
   projection becomes possible.

 Note that when an image mapping is applied to many <Polygon> instances
 using a single <Image Mapping Function>, a "continuous" image should
 result when displayed.

Primary Page in DRM Diagram:
     22

Example:
 1. A producer has a geo-specific "global" texture that has been derived
    from overhead photography and rectified.  It might, for example,
    be used to "drape" over a terrain surface.  This would typically
    be represented as an <Image> (in an <Image Library>) with an
    <Image Anchor> component.

 2. If a producer has a geo-referenced <Image> data that is to be
    explicitly applied to one or more terrain <Polygon> instances, the
    mapping of the image data to the <Polygon> instances would be defined
    by an <Image Mapping Function> (component of each <Polygon>) that has
    an <Image Anchor> and an association to the appropriate <Image>.

FAQS:
 Q. Is it necessary to define SRF parameters
    for every <Image> in an <Image Library>?
 A. No. An <Image> instance is not required to specify an
    <Image Anchor>, and in fact, an <Image> utilizes its optional
    relationship with <Image Anchor> only when the texture is
    geo-specific.

    Consequently, since SRF parameters are
    defined for an <Image> instance only if an <Image Anchor>
    is present as a component of that <Image>, only geo-specific
    textures require assignment of SRF parameters.

 Q. In a given <Image Library>, are all geo-specific <Image> instances
    required to specify the same SRF parameters?
    If so, why not store those parameters within the <Image Library>
    rather than in <Image Anchor> components for individual <Image>
    instances?
 A. Although all geo-specific textures in an <Image Library> may
    have the same parameters, this is *not* a requirement for
    data providers, nor can it be relied upon by consumers.
    Consequently, each geo-specific <Image> may specify an independent
    SRF.

    Furthermore, many data providers generate <Image> instances that
    are not geo-specific and thus do not require spatial reference
    frame parameters. Adding SRF parameters as
    a field of <Image Library> would require all data providers to
    specify SRFs for all <Image Library> instances,
    even those to which SRF parameters were not
    applicable.

 Q. Can the SRF parameters defined for a geo-specific
    <Image> differ from those specified for its native transmittal's
    <Environment Root>, and if so, why?
 A. A geo-specific <Image> is not required to specify the same
    SRF parameters as that of any of the
    <Environment Root> instances that may be present in its
    native transmittal. It is perfectly possible for a transmittal
    to contain multiple <Environment Root> instances, each with its
    own SRF, or to have an <Image Library> and
    no <Environment Root> instances whatsoever.

 Q. How can a data provider transmit an <Image> and its associated warping?
 A. <Image Anchor> instances only provide for a simple method of <Image>
    warping. It is assumed that for more complex forms of warping (i.e.,
    "rubber sheeting", ortho-rectification) the <Image> will be warped by
    the data provider and transmitted in the final state.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Image Anchor Spatial Reference Frame

Composed of (two-way)
	exactly 3 {ordered} Location instances 

Component of (two-way)
	zero or more Image instances
	zero or more Image Mapping Function instances

Field Elements:
    SE_SRF_Info srf_info;
   /*
    *  The srf_info field specifies the SRF within which the given
    *  <Image Anchor> instance is defined.
    */


-------------------------------------------------------------------------------

Class Name: Image Library

Definition:
 An instance of this DRM class specifies the complete list of
 unique <Image> instances stored within the native transmittal of
 that <Image Library> instance.

Primary Page in DRM Diagram:
     10

Secondary Pages in DRM Diagram:
     1
     22

Example:
 1. Imagery intended to be texture-mapped to other objects in the
    transmittal.

    For instance, consider an <Image Library> containing an <Image>
    of a tree, and a <Model> of a tree, where the <Model>'s geometry
    consists of a single <Union Of Primitive Geometry> containing
    a single <Polygon> and having <Stamp Behaviour>.

    (In this example, <Stamp Behaviour> allows the <Polygon> to be rotated
    at run-time so that the texture-mapped side always faces the observer.)


        <Image Library>         <Model Library>
             <>                       <>
             |                        |
         <Image>                   <Model>
                                      <>
                                      |
                                <Geometry Model>
                                      <>
                                      |
                                <Union Of Primitive Geometry>
                                      <>
                                      |
                                -----------------------------
                                |                           |
                            <Polygon>               <Stamp Behaviour>
                               <>
                                |
                            -----------
                            |     ... |
                        <Vertex>    <Image Mapping Function>
                           <>
                            |
                        ----------
                        |     ...
                    <Texture Coordinate>

    Each <Vertex> of the <Polygon> in this example has a <Texture
    Coordinate>, which is used, together with the <Image Mapping Function>,
    to locate the imagery on the <Polygon>.

 2. Imagery applied to a large number of polygons at once, where the
    <Polygon> instances are grouped under some <Aggregate Geometry> with
    an <Image Mapping Function>.

    In this case, the <Image Mapping Function> determines the placement
    of the imagery within the currently scoped "world" SRF. The imagery
    is then applied to the <Polygon> instances after they have been
    located within the specified SRF.

    This method has two common uses.
    (1) First, the application of a geo-specific image to many polygons
        in a seamless image.
    (2) Second, the application of a single image to a large number of
        polygons within a <Model> (e.g. the image of an aircraft is
        "wall-papered" onto all the polygons within the <Model> of that
        aircraft).

 3. Imagery can be transmitted that is not used by any <Image Mapping
    Function>. This imagery normally has anchor points (see <Image Anchor>).

FAQS:
 Q. Can a SEDRIS transmittal contain <Image> instances that are not
    part of an <Image Library>?
 A. No. All <Image> instances referenced within a SEDRIS transmittal
    shall be part of an <Image Library>.

 Q. Is an <Image Library> permitted to contain <Image> instances that
    are not referenced through <Image Mapping Function> instances
    elsewhere in the transmittal?
 A. Imagery within an <Image Library> may or may not be referenced
    through <Image Mapping Function> instances.

Superclass: Library

Constraints:
     Publishable Object

Composed of (two-way)
	one or more {ordered} Image instances

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or one Citation instance
	zero or one Description instance

Component of (two-way)
	one Transmittal Root instance

-------------------------------------------------------------------------------

Class Name: Image Lookup

Definition:
 An instance of this DRM class specifies a set of data representing
 the final displayed value of a texel.

 The value of a texel no longer represents the colour at a point on
 a display; instead, a texel value is interpreted as a reference
 into the lookup representing the final displayed value.

 In general:
 - The number of axes in a lookup equals the number of components
   within the referencing image signature.

 - The number of elements along an axis equals the maximum size
   of the component image data.

 The minimum / maximum field values are used to specify the minimum
 and maximum values the corresponding texel component may have.
 For example, if the lookup components are floating point 32 bits,
 then a minimum value of -1.0 and a maximum value of 1.0 means that
 all values in the referenced <Image> instance fall within the range
 [-1.0, 1.0]. In another example, a lookup with unsigned integer
 texel components of 8 bits may specify its range to be [0, 99],
 indicating that even though the maximum value that can be specified
 with 8 bits is 255, the value 99 should be treated as the maximum
 value for this lookup.

Primary Page in DRM Diagram:
     22

Example:
 1. Given an <Image> of a regular grid of lines, by scaling the <Image>,
    it can be used to represent the concrete blocks of a parking lot,
    and by having an <Image Lookup> change the alpha of the "white"
    areas of the grid, the <Image> can be applied to a vertical <Polygon>
    in order to represent a chain link fence.

FAQS:
 Q. How can a data provider associate a lookup of type "xyz" with a
    given image mapping?
 A. Only the lookup signature types specified are supported.  A change to
    the SEDRIS DRM is required to support other types.

 Q. What is the purpose of the maximum size and minimum size fields,
    given the existence of the bits_of_xxx fields?
 A. The bits_of_xxx fields provide information as to the maximum and
    minimum *possible* values, whereas the maximum and minimum size
    field values specify the maximum and minimum values actually in
    use.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Component of (two-way)
	one or more Image Mapping Function instances

Field Elements:
    SE_Image_Lookup_Signature lookup_signature;
   /*
    *  The lookup_signature field specifies the number and type of lookup axes.
    */

    SE_Image_Lookup_Type lookup_type;
   /*
    *  The lookup_type field specifies how to convert a texel's data into
    *  some specified lookup index or indices.
    */

    SE_Colour_Model colour_model;
   /*
    *  The colour_model field specifies the colour model used throughout
    *  the lookup.  Only one colour model is allowed per texture definition.
    */

    SE_Boolean data_is_integer;
   /*
    *  The data_is_integer field specifies the data type of the raw
    *  lookup data. Either the raw data is integer and the data maximum
    *  sizes are valid, or the raw lookup data is floating point and
    *  the values are between 0 and 1.
    */

    SE_Short_Integer_Unsigned bits_of_alpha;
   /*
    *  If 0 is specified, the lookup data does not contain alpha
    *  information.
    */

    SE_Short_Integer_Unsigned bits_of_luminance;
   /*
    *  If 0 is specified, the lookup data does not contain luminance
    *  information.
    */

    SE_Short_Integer_Unsigned bits_of_colour_coordinate_1;
   /*
    *  If 0 is specified, the lookup data does not contain colour
    *  information for this colour coordinate (R, C, H).
    */

    SE_Short_Integer_Unsigned bits_of_colour_coordinate_2;
   /*
    *  If 0 is specified, the lookup data does not contain colour
    *  information for this colour coordinate (G, M, S).
    */

    SE_Short_Integer_Unsigned bits_of_colour_coordinate_3;
   /*
    *  If 0 is specified, the lookup data does not contain colour
    *  information for this colour coordinate (B, Y, V).
    */

    SE_Short_Integer_Unsigned bits_of_bump_map_height;
   /*
    *  If 0 is specified, the lookup data does not contain bump_map_height
    *  information.
    */

    SE_Short_Integer_Unsigned bits_of_material_1;
   /*
    *  If 0 is specified, the lookup data does not contain material 1 index
    *  information; otherwise, this is an index into the <Property Table>
    *  instance that is referenced from the given <Image> instance.
    */

    SE_Short_Integer_Unsigned bits_of_material_2;
   /*
    *  If 0 is specified, the lookup data does not contain material 2 index
    *  information; otherwise, this is an index into the <Property Table>
    *  instance that is referenced from the given <Image> instance.
    */

    SE_Short_Integer_Unsigned bits_of_material_3;
   /*
    *  If 0 is specified, the lookup data does not contain material 3 index
    *  information; otherwise, the bits_of_material_3 field specifies an
    *  index into the <Property Table> instance that is referenced from
    *  the given <Image> instance.
    */

    SE_Short_Integer_Unsigned bits_of_material_2_percentage;
   /*
    *  If the <Image> instance being referenced by the given <Image Lookup>
    *  instance contains material 2 information, the value of the
    *  bits_of_material_2_percentage field is the percentage of material 2.
    */

    SE_Short_Integer_Unsigned bits_of_material_3_percentage;
   /*
    *  If the <Image> instance being referenced by the given <Image Lookup>
    *  instance contains material 3 information, the value of the
    *  bits_of_material_3_percentage field is the percentage of material 3.
    */

    SE_Short_Integer_Unsigned bits_of_image_index;
   /*
    *  If 0 is specified, the lookup data does not contain image index
    *  information.
    */

    SE_Short_Integer_Unsigned bits_of_bump_map_u;
   /*
    *  If 0 is specified, the lookup data does not contain bump_map_u
    *  information.
    */

    SE_Short_Integer_Unsigned bits_of_bump_map_v;
   /*
    *  If 0 specified, the lookup data does not contain bump_map_v
    *  information.
    */

    SE_Float min_value_of_alpha;
   /*
    *  The min_value_of_alpha field specifies the minimum value that alpha
    *  can be within the lookup data; it is 0.0 if not used.
    */

    SE_Float max_value_of_alpha;
   /*
    *  The max_value_of_alpha field specifies the maximum value that alpha
    *  can be within the lookup data; it is 0.0 if not used.
    */

    SE_Float min_value_of_luminance;
   /*
    *  The min_value_of_luminance field specifies the minimum value that
    *  luminance can be within the lookup data; it is 0.0 if not used.
    */

    SE_Float max_value_of_luminance;
   /*
    *  The max_value_of_luminance field specifies the maximum value that
    *  luminance can be within the lookup data; it is 0.0 if not used.
    */

    SE_Float min_value_of_colour_coordinate_1;
   /*
    *  The min_value_of_colour_coordinate_1 field specifies the minimum
    *  value that colour_coordinate_1 can be within the lookup data; it
    *  is 0.0 if not used.
    */

    SE_Float max_value_of_colour_coordinate_1;
   /*
    *  The max_value_of_colour_coordinate_1 field specifies the maximum
    *  value that colour_coordinate_1 can be within the lookup data; it
    *  is 0.0 if not used.
    */

    SE_Float min_value_of_colour_coordinate_2;
   /*
    *  The min_value_of_colour_coordinate_2 field specifies the minimum
    *  value that colour_coordinate_2 can be within the lookup data; it
    *  is 0.0 if not used.
    */

    SE_Float max_value_of_colour_coordinate_2;
   /*
    *  The max_value_of_colour_coordinate_2 field specifies the maximum
    *  value that colour_coordinate_2 can be within the lookup data; it
    *  is 0.0 if not used.
    */

    SE_Float min_value_of_colour_coordinate_3;
   /*
    *  The min_value_of_colour_coordinate_3 field specifies the minimum
    *  value that colour_coordinate_3 can be within the lookup data; it
    *  is 0.0 if not used.
    */

    SE_Float max_value_of_colour_coordinate_3;
   /*
    *  The max_value_of_colour_coordinate_3 field specifies the maximum
    *  value that colour_coordinate_3 can be within the lookup data; it
    *  is 0.0 if not used.
    */

    SE_Float min_value_of_bump_map_height;
   /*
    *  The min_value_of_bump_map_height field specifiesthe minimum value
    *  that bump_map_height can be within the lookup data; it is 0.0 if
    *  not used.
    */

    SE_Float max_value_of_bump_map_height;
   /*
    *  The max_value_of_bump_map_height field specifies the maximum value
    *  that bump_map_height can be within the lookup data; it is 0.0 if
    *  not used.
    */

    SE_Float min_value_of_bump_map_u;
   /*
    *  The min_value_of_bump_map_u field specifies the minimum value
    *  that bump_map_u can be within the lookup data; it is 0.0 if
    *  not used.
    */

    SE_Float max_value_of_bump_map_u;
   /*
    *  The max_value_of_bump_map_u field specifies the maximum value
    *  that bump_map_u can be within the lookup data; it is 0.0 if
    *  not used.
    */

    SE_Float min_value_of_bump_map_v;
   /*
    *  The min_value_of_bump_map_v field specifies the minimum value
    *  that bump_map_v can be within the lookup data; it is 0.0 if
    *  not used.
    */

    SE_Float max_value_of_bump_map_v;
   /*
    *  The max_value_of_bump_map_v field specifies the maximum value
    *  that bump_map_v can be within the lookup data; it is 0.0 if
    *  not used.
    */

    SE_Short_Integer_Positive axis_size;
   /*
    *  The axis_size field specifies the number of elements along each
    *  axis of the lookup. All axes shall be the same size and shall
    *  be as large as any maximum value for any component within the
    *  referencing  <Image> instance.
    */

    SE_Short_Integer_Positive axes_count;
   /*
    *  The axes_count specifies the number of axes within the lookup,
    *  and shall coincide with the lookup_signature of the given
    *  <Image Lookup> instance.
    */


-------------------------------------------------------------------------------

Class Name: Image Mapping Function

Definition:
 An instance of this DRM class specifies how the given <Image> is to be
 mapped onto a given textured object, including the mapping method,
 the projection, and how <Texture Coordinate> instances (if present) are
 to be treated if they fall outside the image space bounded by
 (0, 0), (1, 1).

Primary Page in DRM Diagram:
     22

Secondary Pages in DRM Diagram:
     4
     5
     6
     8
     19

Example:
 1. An <Image> is mapped to a <Polygon>. The <Polygon> has <Texture
    Coordinate> instances at three or more of its <Vertex> components,
    the <Image> is mapped to the <Polygon> instance using the
    <Texture Coordinate> instances. Each <Texture Coordinate> instance
    represents the location within the <Image> instance that lies on
    top of the <Vertex> instance corresponding to the given
    <Texture Coordinate> instance.

 2. Consider a <Polygon> with two <Image> instances mapped to it. One
    <Image> could be the <Image> displayed for most cases. The second
    <Image>, if image_detail_mapping is SE_TRUE, would then be the
    imagery that is added to the <Polygon> when the eyepoint is so close
    to the <Polygon> that the main <Image> texels are no longer useful
    for texturing the <Polygon>.

FAQS:
 Q. What is the order of precedence for mapping an <Image> to a geometric
    object, such as a <Polygon>?
 A. The <Texture Coordinate> instances on the attribute geometry always
    have the highest precedence. Next, if the attribute geometry has
    <Tack Point> instances, three conditions could occur.

    1) If there is only one <Tack Point>, the <Tack Point> is used to locate
       the imagery, and the scaling and rotation information from the <Image
       Mapping Function> is used.
    2) If two <Tack Point> instances are defined, the location and rotation
       of the imagery is taken from the <Tack Point> instances, but the
       scaling information is derived from the <Image Mapping Function>.
    3) If there are three or more <Tack Point> instances, the position,
       rotation information is derived from the first three <Tack Point>
       components. Since <Tack Point> components are unordered, the
       complete set of supplied <Tack Point> components shall define an
       orthogonal image projection. This is to insure that no matter which
       three <Tack Point> components are used, the same projection is
       derived for the imagery.

    If the <Polygon> does not have <Texture Coordinate> or <Tack Point>
    components, then any <Image Anchor> components of the
    <Image Mapping Function> define the location of the image on the
    attribute geometry. If none of the previous conditions are met, then
    the <Image Anchor>s in the <Image> are used. If there are no
    <Texture Coordinate>s, <Tack Point>s, no <Image Anchor>s in the <Image
    Mapping Function> and no anchor points in the <Image>, then the image
    mapping is undefined. It should be noted that the final two cases can be
    used to create non-orthogonal projections.

 Q. How can I create a non-orthogonal projection of texture onto a textured
    object, e.g. a <Polygon>?
 A. Since all texture mappings that are a result of texture coordinate
    mapping at the polygon level are defined to be orthogonal projections, a
    non-orthogonal projection cannot be created with <Texture Coordinate>.
    instances. To create a non-orthogonal projection, the <Image Anchor>
    points shall be used. These points are defined in the currently scoped
    "world" SRF, and therefore are not required to be in the plane of the
    <Polygon> instance. There is no method to create a non-orthogonal
    projection in the local SRF of the <Model>.

 Q. As a data provider, I have a texture map that is applied to a textured
    object using a spherical projection. How do I store the centre and
    radius of projection in the <Image Mapping Function>?
 A. Rather than using <Texture Coordinate> instances to tie the
    <Image Mapping Function> instance to the textured object, use an
    <Image Anchor> instance. For a spherical projection, the
    <Image Anchor> instance's <Location> components are interpreted
    as follows:
    1) origin (the centre of the sphere)
    2) direction (point on the north pole of the sphere)
    3) alignment (point at the equator of the sphere)

 Q. Given an <Image> that is to be applied to a given object using a
    cylindrical projection, how can an <Image Mapping Function> be
    used to store the centre of projection?
 A. The <Image Mapping Function> for this case specifies an
    <Image Anchor>, while the object to be textured does not
    specify <Texture Coordinate> instances. For details of how
    the <Image Anchor> specifies the cylindrical projection, see
    <Image Anchor>.

 Q. When <Image Anchor> instances are used, how are the rotation and
    scale of the image mapping represented?
 A. The rotation and scale of the image mapping can be derived from the
    <Location> instances representing the 3 corners of the <Image>
    instance, i.e., the <Location> components of the <Image Anchor>
    instance.

 Q. When blending, how is a blend (luminance) value interpreted?
 A. 1.0 = 100% Primary colour, No Blend contribution
    0.0 = no Primary contribution, %100 Blend Colour

 Q. Does an <Image Mapping Function> apply to both sides
    of a <Polygon>, or only the front side? What if a data provider
    wants to represent a wall with brick texture on one side and
    wallpaper texture on the other?
 A. An <Image Mapping Function> instance applies only to the front side
    of a <Primitive Geometry>. In the wall example, 2 <Polygon>
    instances would be needed, one with brick texture
    on its front side, facing the outside of the building,
    and the other with wallpaper, facing the inside of the
    building.

    Any other representation would be lost in a rendering
    system that used back-face culling.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Image Anchor Spatial Reference Frame
     Image Mapping Functions and Texture Coordinates

Associated to (one-way)
	one Image instance

Composed of (two-way)
	zero or one Image Anchor instance
	zero or more Image Lookup instances
	zero or one Presentation Domain instance 

Component of (two-way)
	zero or more Aggregate Feature instances
	zero or more Aggregate Geometry instances
	zero or more Data Table instances
	zero or more Primitive Feature instances
	zero or more Primitive Geometry instances
	zero or more Property Set instances

Field Elements:
    SE_Image_Mapping_Method image_mapping_method;
   /*
    *  The image_mapping_method field specifies how to combine the
    *  referenced texture map with any <Colour> instances on the textured
    *   object.
    */

    SE_Image_Wrap image_wrap_s;
   /*
    *  The image_wrap_s field specifies whether to clamp or repeat
    *  the given <Image> instance in s.
    */

    SE_Image_Wrap image_wrap_t;
   /*
    *  The image_wrap_t field specifies whether to clamp or repeat
    *  the given <Image> instance in t.
    */

    SE_Image_Projection_Type image_projection_type;
   /*
    *  The image_projection_type field specifies the type of projection
    *  to be used when applying the given <Image> instance to textured
    *  objects.
    *
    *  1) If planar projection is specified, the following cases may apply:
    *     - The object may have <Texture Coordinate> or <Tack Point>
    *       instances, in which case the
    *       <<Image Mapping Functions and Texture Coordinates>>
    *       constraint will apply.
    *
    *     - The <Image Mapping Function> instance may have an
    *       <Image Anchor> instance.
    *
    *     - The <Image> instance may have an <Image Anchor> instance.
    *
    *  2) If cylindrical or spherical projection is specified, the object
    *     shall not have <Texture Coordinate> or <Tack Point> instances.
    *     Instead, either the <Image Mapping Function> instance or its
    *     <Image> instance shall have an <Image Anchor> instance.
    */

    SE_Long_Float intensity_level;
   /*
    *  The intensity_level field specifies the percent contribution of the
    *  given <Image Mapping Function> instance to the total effect on the
    *  textured object. For an <Image> instance with a colour coordinate
    *  component specified by its signature, multiply first, second, and
    *  third colour coordinate values within the <Image> instance's texels
    *  by this value.
    */

    SE_Long_Float gain;
   /*
    *  The value of the gain field is to be added to each colour data
    *  value from the texel data of the given <Image> instance to obtain
    *  the displayed image.
    */

    SE_Boolean image_detail_mapping;
   /*
    *  The image_detail_mapping field specifies whether the given
    *  <Image Mapping Function> instance is used to describe mapping
    *  of a "detail" image on the textured object.
    */


-------------------------------------------------------------------------------

Class Name: In Out

Definition:
 An instance of this DRM class specifies whether a <Source> instance
 that is associated with a <Process Step> is an input to the
 <Process Step> or an output generated by the <Process Step>.

Primary Page in DRM Diagram:
     20

Example:
 1. Indicates that a particular DTED cell (represented by a <Source>
    instance) is an input to a terrain surface generation process
    (represented by a <Process Step> instance).

 2. Indicates that an <Environment Root> instance (represented by a
    <Source> instance) is the output of a high-level environmental
    database generation process (represented by a <Process Step>
    instance).

FAQS:
 Q. What is the purpose of this class?
 A. This class provides a mechanism by which <Sources> can be
    associated with <processes> to describe the overall creation
    of a transmittal. A logical network of <Process Step>s can be
    defined by linking the <Process Step> that generates a particular
    <Source> to all of the <Process Step>s that consume that <Source>.
    For each associated <Source>, <Process Step> pair, the <In Out>
    instance identifies whether the <Source> is an input or an output
    of the <Process Step>.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Field Elements:
    SE_Boolean input;
   /*
    *  If the value of the input field is SE_TRUE, the given <Source>
    *  instance is an input to the <Process Step> instance; otherwise,
    *  the <Source> instance is an output from the <Process Step> instance.
    */


-------------------------------------------------------------------------------

Class Name: Index LOD Data

Definition:
 An instance of this DRM class specifies a level of detail
 described in terms of an index value indicating the
 relative level of detail of the associated data.

Primary Page in DRM Diagram:
     9

Example:
 1. Consider an item represented by an instance of <LOD Related Geometry>,
    for which ten versions of the item are provided at varying levels of
    detail. Each version is represented by a branch of the
    <LOD Related Geometry> instance for which the link object is an
    instance of <Index LOD Data>. The index values of the
    <Index LOD Data> instances are 1 through 10, where number 1
    corresponds to the most detailed version, and number 10 is the
    least detailed version.

FAQS:
     None.

Superclass: Base LOD Data

Constraints:
     Publishable Object
     LOD Related Organizing Principle

Component of (two-way) (inherited)
	zero or more Aggregate Feature instances
	zero or more Aggregate Geometry instances
	zero or more Property Grid Hook Point instances

Field Elements:
    SE_Integer_Positive index;
   /*
    *  The index field specifies the relative level of detail of the
    *  associated data, where lower values indicate more detailed
    *  representations and higher values indicate less detailed
    *  representations.
    */


-------------------------------------------------------------------------------

Class Name: Infinite Light

Definition:
 An instance of this DRM class is a <Light Source> that is considered to be
 located infinitely far away. It illuminates uniformly along a particular
 direction.  Colour and control are inherited from <Light Source>.  An
 <Infinite Light> has no bound of influence and so affects all components
 of any <Aggregate Geometry> that references it.

Primary Page in DRM Diagram:
     21

Example:
 1. Consider an <Environment Root> instance that has a
    <Spatial Index Related Geometry> component, representing the terrain
    in its transmittal. The <Spatial Index Related Geometry> has an
    <Infinite Light Source> component, representing the sun.

FAQS:
     None.

Superclass: Light Source

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one Ambient Colour instance
	one Diffuse Colour instance
	zero or one Light Source Control Link instance 
	one Specular Colour instance

Composed of (two-way)
	one Reference Vector instance 

Component of (two-way) (inherited)
	one or more Aggregate Geometry instances

Inherited Field Elements:
    SE_Boolean apply_to_children;
   /*
    *  For a <Light Source> instance (that is, an instance of one of the
    *  concrete classes descended from the class) that is a component of
    *  some <Aggregate Geometry>, apply_to_children provides a mechanism
    *  for limiting the scope of the <Light Source>. If apply_to_children
    *  is SE_TRUE, only <Primitive Geometry> in the component tree of those
    *  <Aggregate Geometry> instances are affected by the given
    *  <Light Source>. If apply_to_children is SE_FALSE, the <Light Source>
    *  is not limited to the scope of those <Aggregate Geometry> instances
    *  and thus applies globally.
    */

    SE_Boolean override_positional_lights;
   /*
    *  For a <Light Source> instance that is a component of some
    *  <Aggregate Geometry>, override_positional_lights provides a
    *  mechanism to indicate with a value of SE_TRUE that the effect of the
    *  given <Light Source> overrides that of any <Base Positional Light>
    *  instances that would have otherwise applied to that
    *  <Aggregate Geometry> - for example, if the given <Light Source> is
    *  so close to the affected <Geometry Representation> that the
    *  <Base Positional Light> effects would be negligible. If
    *  override_positional_lights = SE_FALSE, the effect of the
    *  given <Light Source> is combined with that
    *  of any <Base Positional Light> instances that are already in effect.
    */

    SE_Boolean override_infinite_lights;
   /*
    *  For a <Light Source> instance (that is, an instance of one of the
    *  concrete classes descended from the class) that is a component of
    *  some <Aggregate Geometry>, override_infinite_lights provides a
    *  mechanism to indicate with a value of SE_TRUE that the effect of the
    *  given <Light Source> overrides that of any <Infinite Light>
    *  instances that would have otherwise applied to that
    *  <Aggregate Geometry>. If override_infinite_lights = SE_FALSE,
    *  the effect of the given <Light Source> is combined with that
    *  of any <Infinite Light> instances that are already in effect.
    */

    SE_Boolean active_light_value;
   /*
    *  A value of SE_TRUE for the active_light_value field indicates
    *  that the light is on, while a value of
    *  SE_FALSE indicates that the light is off. For a <Light Source>
    *  with a <Light Source Control Link> instance as a component,
    *  this is the default state of the light.
    */


-------------------------------------------------------------------------------

Class Name: Inline Colour

Definition:
 An instance of this DRM class is a <Colour> that is specified
 "inline", in the sense that it is completely specified as a
 component of the coloured object without referring to any
 <Colour Table>.

Primary Page in DRM Diagram:
     14

Example:
 1. Consider a <Polygon> instance with both an <Image Mapping Function>
    and an <Inline Colour> component, where the <Inline Colour> instance's
    colour_mapping = { FRONT_IMAGE_BLEND }. This indicates that the colour
    is to be applied to the "front" of the <Polygon> instance, and to
    be combined with the texture mapping information provided by the
    <Image Mapping Function>.

 2. Consider a <Polygon> instance with an <Inline Colour> component,
    where the <Inline Colour> instance has colour_mapping =
    { BACK_PRIMARY }. This colour is used for the back face of the
    <Polygon> instance.

FAQS:
 Q. Why do <Colour Table> instances have <Primitive Colour> components
    rather than <Inline Colour> components?
 A. <Colour Table> instances used to be composed of <Inline Colour>
    instances, but problems arose since both <Colour Index> and
    <Inline Colour> instances can have <Translucency> components. When a
    <Colour Index> that has a <Translucency> component refers to an entry
    in a <Colour Table> instance, the interpretation is clearer if the
    <Colour Table> instance's entry cannot have any additional
    <Translucency> instances. Consequently, <Primitive Colour> exists so
    that 'just the colour' can be put into a <Colour Table> instance's
    entry.

Superclass: Colour

Constraints:
     Publishable Object
     Colour Mapping Restrictions

Composed of (two-way) (inherited)
	zero or one Presentation Domain instance 
	zero or one Translucency instance

Composed of (two-way)
	one Primitive Colour instance

Component of (two-way) (inherited)
	zero or more Aggregate Feature instances
	zero or more Aggregate Geometry instances
	zero or more Primitive Feature instances
	zero or more Primitive Geometry instances
	zero or more Property Set instances
	zero or more Vertex instances

Inherited Field Elements:
    SE_Colour_Mapping colour_mapping;
   /*
    *  The colour_mapping field specifies the set of SE_Colour_Mapping
    *  tokens applicable to the given <Colour> instance.
    */


-------------------------------------------------------------------------------

Class Name: Interface Template

Definition:
 Note that an instance of this DRM class is always a component of a
 <Model> or <Environment Root> instance. The scope of that
 <Model> / <Environment Root> is hereafter referred to as
 "the given scope" in this definition.

 An instance of this DRM class provides, for the given scope, a means
 of accessing all <Variable> instances within that scope, thus allowing
 manipulation of the affected <Control Link> instances' targets. These
 <Variable> instances are associated with the <Interface Template> in
 an ordered list; each is also aggregated by at least one <Control Link>
 instance in the given scope.

 - For a <Model> that is instanced by some object MI (either a
   <Feature Model Instance> or a <Geometry Model Instance>),
   values are specified for each of the <Variable> instances associated
   with the <Model>'s <Interface Template> as follows.

   Each such value is specified by an <Expression> that is aggregated
   by MI. The <Model Instance Template Index> instance lying between
   the <Expression> and MI specifies the particular <Variable>
   instance being set by specifying its index within the ordered list
   of the <Model>'s <Interface Template>.

   Note that the <Expression> may be a <Variable> in the instancing
   scope, or a <Function> of some kind, not just a <Literal>.

 - For an <Environment Root> instance, an <Interface Template>
   provides a means for 'environmental' <Variable> instances to be
   accessed by the user, such as a <Variable> for EAC_WIND_SPEED.

Primary Page in DRM Diagram:
     16

Secondary Pages in DRM Diagram:
     1
     2

Example:
 1. Consider a <Model> representing a tank, which is made up of separate
    tank body, turret and cannon submodels, each instanced by the tank
    <Model> itself. The turret can be dynamically rotated and the cannon
    can be dynamically elevated. Both movements can be controlled
    separately.

    Both movements are rotations, so each of the turret and cannon
    submodels have <Rotation> instances at appropriate points in their
    hierarchies. Each of these <Rotation> instances aggregates a
    <Rotation Control Link>, which in turn aggregates a <Variable> that
    specifies the current rotation. The values supplied for these
    <Variable> instances shall be adjusted from outside the submodels
    that contain them. Consequently, the <Variable> in each submodel
    shall be associated with its submodel's <Interface Template>.

    However, the turret and cannon rotations shall be controlled from outside
    the entire tank <Model>. Therefore, it shall be possible to set rotation
    values via the tank <Model>'s own <Interface Template>, so the tank
    <Model> shall contain a turret-rotation <Variable> and a cannon-elevation
    <Variable>, and these <Variable> instances shall be associated with the
    tank <Model>'s own <Interface Template>. Each of the two <Variable>
    instances is also aggregated by the <Geometry Model Instance> that
    instances the submodel to which they relate.

    Finally, it is necessary to tie the <Variable> instances in the tank
    <Model> to the equivalent <Variable> instances in each of the submodels.
    This is done using the <Model Instance Template Index> link object for
    each tank <Variable>. The <Model Instance Template Index> link object
    associated with the tank <Model>'s turret-rotation <Variable> references
    the equivalent <Variable>'s entry in the turret <Model>'s
    <Interface Template>, and the <Model Instance Template Index> link object
    associated with the tank <Model>'s cannon-elevation <Variable>
    references the equivalent <Variable>'s entry in the cannon <Model>'s
    <Interface Template>.

    Consequently, the tank <Model>'s <Interface Template> allows the turret
    rotation and cannon elevation to be set from outside the <Model>. The
    values set in the tank <Model> will then themselves set values in the
    <Variable> instances within the turret and cannon submodels, thereby
    rotating the turret and elevating the cannon as required.

 2. A building <Model> that may be instanced on terrain polygons that are at
    various different orientations. Each building wall shall meet the
    terrain, leaving no gaps. This means that the lengths of the building's
    walls shall be adjusted by different amounts in each instance to match
    the slope of the ground.

    The location of each <Vertex> of a <Polygon> can be adjusted by using an
    <LSR 3D Location Control Link> aggregated by the <LSR 3D Location> that
    specifies the <Vertex>'s location. Each <LSR 3D Location Control Link>
    would itself aggregate a <Variable>, which would specify the new location
    value. These <Variable>s shall be set separately for each instance to
    match the terrain upon which the instance is positioned. This calls for
    the <Variable>s to be set from outside the building <Model> so all of
    these <Variable>s in the building <Model> shall be associated with the
    <Model>'s <Interface Template>.

    When the building is instanced, via a <Geometry Model Instance> GMI,
    the <Variable> instances' values can be set for GMI using <Expression>
    instances aggregated by GMI. As the terrain on which GMI will stand
    is known and fixed, these <Expression> instances could be <Literal>
    instances. Each <Literal> instance is related to the <Variable> for
    which it is specifying a value by the associated
    <Model Instance Template Index>, which references the <Variable> via
    the building <Model>'s <Interface Template>.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Non Crossing Associations

Associated with (two-way)
	one or more {ordered} Variable instances

Component of (two-way)
	zero or one Environment Root instance
	zero or one Model instance

Field Elements:
    SE_String description;
   /*
    *  The description field specifies a brief description.
    */


-------------------------------------------------------------------------------

Class Name: Interval Axis

Definition:
 An instance of this DRM class is an <Axis> instance that specifies an
 interval for each axis value (tick mark).

Primary Page in DRM Diagram:
     6

Example:
 1. Consider an <Interval Axis> instance that specifies wavelength bands
    in centimetres. Its field values are

    axis_type        = EAC_WAVELENGTH
    axis_value_count = 3
    axis_interval_value_array =
     {
         { SE_IVT_FLOAT,
           { EUC_METRE, ESC_CENTI,
             { EDCS_NVT_GE_LT_INTERVAL, { 2.4,  3.75 }}
           }
         },
         { SE_IVT_FLOAT,
           { EUC_METRE, ESC_CENTI,
             { EDCS_NVT_GE_LT_INTERVAL, { 3.75, 7.5 }}
           }
         },
         { SE_IVT_FLOAT,
           { EUC_METRE, ESC_CENTI,
             { EDCS_NVT_GE_LT_INTERVAL, { 7.5, 15.0 }}
           }
         }
     }

FAQS:
     None.

Superclass: Axis

Constraints:
     Publishable Object
     Axis Type Restrictions

Component of (two-way) (inherited)
	one or more Data Table instances

Inherited Field Elements:
    EDCS_Attribute_Code axis_type;
   /*
    *  The axis_type field specifies the property being described by the
    *  given <Axis> instance.
    */

    SE_Short_Integer_Positive axis_value_count;
   /*
    *  The axis_value_count field specifies the number of "hash marks"
    *  along the given <Axis> instance.
    */


Field Elements:
    SE_Interval_Value axis_interval_value_array[];
   /*
    *  The axis_interval_value_array field specifies the array of "tick mark"
    *  values, each of which is an interval. While the intervals are not
    *  required to be adjacent in a single <Interval Axis> instance, the
    *  intervals may not overlap and they shall be in ascending order.
    *
    *  If a boundary point can belong to only one interval (that is, there is
    *  a gap on one side of the point), it is considered to lie in that
    *  interval. If a boundary point is simultaneously the upper bound of one
    *  interval and the lower bound of another, it belongs to the interval of
    *  which it is the minimal value.
    */

    EDCS_Unit_Code value_unit;
   /*
    *  The value_unit field specifies the unit of measurement of the given
    *  <Interval Axis> instance, which shall be compatible with the
    *  requirements imposed by its axis_type value.
    *
    *  If the specified axis_type does not require a unit of measurement
    *  value_unit shall be set to EUC_UNITLESS.
    */

    EDCS_Scale_Code value_scale;
   /*
    *  The value_scale field specifies the scale applicable to value_unit.
    *
    *  If the specified axis_type does not require a unit of measurement,
    *  value_scale shall be set to ESC_UNI.
    */


-------------------------------------------------------------------------------

Class Name: Irregular Axis

Definition:
 An instance of this DRM class is an <Axis> instance that does not use
 a constant spacing between hash marks.

Primary Page in DRM Diagram:
     6

Example:
 1. Data taken at times 1, 2, 5, 10, 50, and 100 seconds after
    some start time would be collected on an <Irregular Axis> instance.

 2. Radiosonde data, including temperature, humidity, wind speed, and
    wind direction, is generally reported as a function of pressure height.
    Data are reported only when there is a significant change in one of the
    dependent variables. Accordingly, the pressure heights are captured at
    unpredictable, irregular intervals. They are best captured in an
    <Irregular Axis> instance.

FAQS:
 Q. If a few values are missing from a regular sequence, should the
    data provider use an <Irregular Axis> instance to represent the data?
 A. It depends how many values are missing. If only one or two values are
    missing from a long regular sequence, it may be preferable to use a
    <Regular Axis> instance and indicate the missing data points with an
    appropriate <Property Characteristic> instance.

 Q. A data provider's data was taken on an irregular set of points on a
    surface. Should <Irregular Axis> instances be used to indicate the
    2-dimensional locations of these points?
 A. If the data were truly irregular, which is to say that there is only
    one point at each x-value and only one point at each y-value, do not
    use irregular x- and y-axes. Instead, use a single regular axis to give
    each point an index and make the x- and y-values dependent variables.

    On the other hand, if the points are not quite that
    irregular, but rather data were taken at each (or most)
    combination of x- and y-values, irregular axes may be
    appropriate. This would mean that the data really did
    form a grid.

Superclass: Axis

Constraints:
     Publishable Object
     Axis Type Restrictions

Component of (two-way) (inherited)
	one or more Data Table instances

Inherited Field Elements:
    EDCS_Attribute_Code axis_type;
   /*
    *  The axis_type field specifies the property being described by the
    *  given <Axis> instance.
    */

    SE_Short_Integer_Positive axis_value_count;
   /*
    *  The axis_value_count field specifies the number of "hash marks"
    *  along the given <Axis> instance.
    */


Field Elements:
    SE_Single_Value axis_value_array[];
   /*
    *  The axis_value_array field specifies the "tick mark" values, which
    *  shall be arranged in ascending order.
    */

    EDCS_Unit_Code value_unit;
   /*
    *  The value_unit field specifies the unit of measurement of the given
    *  <Irregular Axis> instance, which shall be compatible with the
    *  requirements imposed by  its axis_type value.
    *
    *  If the specified axis_type does not require a unit of measurement
    *  value_unit shall be set to EUC_UNITLESS.
    */

    EDCS_Scale_Code value_scale;
   /*
    *  The value_scale field specifies the scale applicable to value_unit.
    *
    *  If the specified axis_type does not require a unit of measurement,
    *  value_scale shall be set to ESC_UNI.
    */

    SE_Interpolation_Type interpolation_type;
   /*
    *  The value of the interpolation_type field allows the data provider
    *  to indicate how best to interpolate the data to points that are
    *  between grid points on the axis represented by the given
    *  <Irregular Axis> instance. Note that when a <Data Table> instance
    *  has more than one <Irregular Axis> component, the order of the
    *  interpolations follows the order of the <Irregular Axis> components.
    */


-------------------------------------------------------------------------------

Class Name: Keywords

Definition:
 An instance of this DRM class specifies keywords, as well
 as their type and reference source, for the containing
 SEDRIS object.

Primary Page in DRM Diagram:
     20

Example:
 1. Consider a <Model> representing an F18C aircraft, such that
    the <Model> contains a <Description> instance with a <Keywords>
    instance specified in U.S. English, in order to support
    keyword searches on the type of aircraft. The <Keywords>
    instance has the following structure:

    <Keywords>
    keyword_count    = 1
    keyword_array[0] = { SE_LOCALE_DEFAULT, 4, "F18C" }
    type             = SE_KEYWORD_THEME

 2. Consider a transmittal containing a terrain dataset
    representing roads and lakes located at Fort Hood, Texas.
    The source dataset has a [ISO 19115] metadata record containing
    keyword information for the entire transmittal.

    The following <Keywords> instances, defined in U.S. English,
    are attached to a <Description>, which is attached to the
    <Transmittal Root> of the transmittal to transmit this
    information as follows.

    <Keywords>
     keyword_count    = 1
     keyword_array[0] = { SE_LOCALE_DEFAULT, 9, "Fort Hood"}
     keyword_array[1] = { SE_LOCALE_DEFAULT, 5, "Texas" }
     type             = SE_KEYWORD_PLACE
    |
    <>
    |
    <Citation>
    title                  = { SE_LOCALE_DEFAULT,
                               22, "MEL_Location_Thesaurus" }
    edition                = (empty string)
    series_name            = (empty string)
    issue_identification   = (empty string)
    other_citation_details = (empty string)
    |
    <>
    |
    <Responsible Party> (for MEL thesauri)


    <Keywords>
    keyword_count    = 2
    keyword_array[0] = { SE_LOCALE_DEFAULT, 11, "Cartography"}
    keyword_array[1] = { SE_LOCALE_DEFAULT, 7, "Mapping" }
    type             = SE_KEYWORD_THEME

    <>
    |
    <Citation>
    { SE_LOCALE_DEFAULT, 42,
      "MEL_Scientific-Engineering_Field_Thesaurus" }
    |
    <>
    |
    <Responsible Party> (for MEL thesauri, shared)

FAQS:
 Q. What is the purpose of this class?
 A. This DRM class provides a mechanism for specifying
    ISO 19115-compliant keywords, which can be used to
    search a repository (such as MEL) for SEDRIS transmittals
    that address specified real-world objects,
    spatial locations, or time periods. This allows a
    potential user to identify and select those
    SEDRIS transmittals that meet their requirements,
    without having to actually obtain and examine the
    transmittals themselves.

 Q. Consider a data provider who has keywords to populate
    a <Keywords> instance, but is unable to determine which
    SE_Keyword_Type_Code should be used to classify a
    particular keyword. What procedure is suggested for
    such a data provider?
 A. If no more appropriate SE_Keyword_Type_Code can be
    determined, SE_KEYWORD_THEME is suggested.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Mandatory Metadata

Composed of (two-way metadata)
	zero or one Citation instance 

Component of (two-way)
	one or more Description instances

Field Elements:
    SE_Short_Integer_Positive keyword_count;
   /*
    *  The keyword_count field specifies the number of entries in
    *  keyword_array.
    */

    SE_String keyword_array[];
   /*
    *  Each entry of the keyword_array field is a commonly used word
    *  or a formalized word or phrase used to describe the
    *  subject.
    */

    SE_Keyword_Type_Code type;
   /*
    *  The type field specifies the subject matter used to group
    *  similar keywords in the given instance of <Keywords>.
    */


-------------------------------------------------------------------------------

Class Name: Label

Definition:
 An instance of this DRM class specifies text or symbology that is
 tied to a location, and is used for identifying features on 2D
 displays or maps.

Primary Page in DRM Diagram:
     10

Secondary Pages in DRM Diagram:
     8

Example:
 1. Consider a <Point Feature> that represents a school.  The name of
    the school should appear next to the location of the school on a map.
    The name is represented by a <Label>.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	one Icon instance 
	zero or one Location instance

Component of (two-way)
	one Feature Representation instance

-------------------------------------------------------------------------------

Class Name: LCC Augmented 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Augmented Lambert Conformal Conic (ALCC) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. The Augmented Lambert Conformal Conic SRF is used
    mainly for mapping the North American Region.

FAQS:
 Q. Where can users obtain further information on ALCC?
 A. See the SRM for additional details.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Map_Projection_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: LTSAS 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Local Tangent Space Azimuthal Spherical (LTSAS) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
     None.

FAQS:
     None.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_LTSAS_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: LTSAS Surface Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Local Tangent Space Azimuthal (LTSAS) Surface SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
     None.

FAQS:
     None.

Superclass: Location Surface

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

Field Elements:
    SRM_LTSAS_Surface_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: LCC Surface Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Lambert Conformal Conic (LCC) 2D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. The Lambert Conformal Conic SRF is used
    mainly for mapping the North American Region.

FAQS:
     None.

Superclass: Location Surface

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

Field Elements:
    SRM_Map_Projection_Surface_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: LTSC 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Local Tangent Space Cylindrical (LTSC) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
     None.

FAQS:
     None.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_LTSC_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: LTSC Surface Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Local Tangent Space Cylindrical (LTSC) Surface SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
     None.

FAQS:
     None.

Superclass: Location Surface

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

Field Elements:
    SRM_LTSC_Surface_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: LOD Related Features

Definition:
 An instance of this DRM class specifies an aggregation of
 <Feature Hierarchy> instances in which each component
 <Feature Hierarchy> is an alternate representation of the same
 entity at a different level of detail. Each component
 <Feature Hierarchy> is a collection of <Feature Representation>
 instances with a different, possibly overlapping, <Base LOD Data>
 value, representing alternatives that should be used at different
 viewing ranges, map scales, spatial resolution, and so on.

Primary Page in DRM Diagram:
     8

Example:
 1. A forested area could be represented at two levels of detail using a
    <LOD Related Features> instance, with two component
    <Union Of Features> having different scale ranges, each containing a
    single <Areal Feature>.  The <Areal Feature> to be used at smaller
    scales would be simpler than the <Areal Feature> to be used at larger
    scales.

 2. In the previous example, a third component <Union Of Features> could be
    added to be used at even larger scales, where the single <Areal Feature>
    is replaced by a large number of <Point Feature> instances representing
    individual trees.

FAQS:
     None.

Superclass: Aggregate Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Non Cyclic Aggregations
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects
     LOD Related Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or more Colour instances
	zero or more Feature Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance 
	zero or more Property Description instances
	zero or one Spatial Extent instance

Composed of (two-way)
	one or more Feature Hierarchy instances, each with a Base LOD Data link object

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances
	zero or more Alternate Hierarchy Related Features instances, each with a Hierarchy Data link object
	zero or more Classification Related Features instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Feature Model instance
	zero or more LOD Related Features instances, each with a Base LOD Data link object
	zero or more Octant Related Features instances, each with a Octant Data link object
	zero or more Perimeter Related Features instances, each with a Perimeter Data link object
	zero or more Quadrant Related Features instances, each with a Quadrant Data link object
	zero or more Spatial Index Related Features instances, each with a Spatial Index Data link object
	zero or more State Related Features instances, each with a State Data link object
	zero or more Time Related Features instances, each with a Time Constraints Data link object

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant, that is, each <Feature Representation> instance that
    *  exists in the component tree rooted at the given <Aggregate Feature>,
    *  shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Feature Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


Field Elements:
    SE_LOD_Data_Type lod_data_type;
   /*
    *  The lod_data_type field specifies the subclass of <Base LOD Data> of
    *  each link object in the given organization.
    */


-------------------------------------------------------------------------------

Class Name: LOD Related Geometry

Definition:
 An instance of this DRM class specifies an aggregation of
 <Geometry Hierarchy> instances in which each component
 <Geometry Hierarchy> is an alternate representation of the
 same entity at a different level of detail. Each component
 <Geometry Hierarchy> is a collection of <Geometry Representation>
 instances with a different, possibly overlapping, <Base LOD Data>
 value, representing alternatives that should be used at different
 viewing ranges, map scales, spatial resolution, and so on.

Primary Page in DRM Diagram:
     4

Example:
 1. Consider a <Model> of a house, organized based on viewing ranges.
    If the viewer is farther away than 1000 metres, the house is not
    visible. From 500 metres to 1000 metres, the roof and walls are
    visible but not in great detail. From 0 metres to 500 metres, the
    windows and door become visible. Consequently, the <Model> is visible
    at two distance-related levels of detail: 0-500 metres, and
    500-100 metres.

                    <Model> "house"
                       <>
                        |
              <Geometry Model>
                       <>
                        |
         <LOD Related Geometry>
                       <>
                        |
         ------------------------------------------------
         |                                               |
         |- <Distance LOD Data>     <Distance LOD Data> -|
         |    (500.0, 1000.0)           (0.0, 500.0)     |
         |                                               |
         |                                               |
    <Union Of Geometry Hierarchy>         <Union Of Geometry Hierarchy>
           <>                              (also expands into a set of GMIs)
            |
      --------------------------------
      |     |       |       |        |
    <GMI>   <GMI>   <GMI>   <GMI>   <GMI>
    "roof"  "wall"  "wall"  "wall"  "wall"

    For the more detailed 0.0 - 500.0 metres, different "wall" <Model>
    instances are instanced for the walls containing the windows and doors;
    otherwise the structure of the two levels, for this example, is similar.

 2. Three <Model> instances representing a given building are created,
    each with different <Polygon> counts. The most accurate
    representation is useful up to a viewing distance of 1 kilometre,
    the second from 1 kilometre to 2 kilometres, and the third for 2
    kilometres to 5 kilometres.

    To indicate this, a fourth <Model> instance can be created as follows:

                 <Model>
                   <>
                   |
              <Geometry Model>
                   <>
                   |
       <LOD Related Geometry>
                   <>
    ---------------------------------------------------
    |                        |                        |
    |--<Distance LOD Data>   |--<Distance LOD Data>   |--<Distance LOD Data>
    |  0.0 - 1.0             |    1.0 - 2.0           |  2.0 - 5.0
    |                        |                        |
   <GMI>                    <GMI>                    <GMI>

FAQS:
     None.

Superclass: Aggregate Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects
     LOD Related Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance

Composed of (two-way)
	one or more Geometry Hierarchy instances, each with a Base LOD Data link object

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


Field Elements:
    SE_LOD_Data_Type lod_data_type;
   /*
    *  The lod_data_type field specifies the subclass of <Base LOD Data> of
    *  each link object in the given organization.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Library

Definition:
 An instance of a concrete subclass specifies the complete list of
 unique instance(s) of a particular class that are stored within
 the given transmittal.

Primary Page in DRM Diagram:
     10

Secondary Pages in DRM Diagram:
     1
     23

Example:
 See individual subclasses for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     Colour Table Library
     Data Table Library
     Image Library
     Model Library
     Property Set Table Library
     Sound Library
     Symbol Library

Constraints:
     Publishable Object

Composed of (two-way metadata)
	zero or one Access instance
	zero or one Citation instance
	zero or one Description instance

-------------------------------------------------------------------------------

Abstract Class Name: Light Rendering Behaviour

Definition:
 An instance of a concrete class derived from this DRM class specifies,
 for the given <Light Rendering Properties> instance,
 behaviour that is specific to a particular type of light, where
 "type" of light refers to its shape, direction, or apparent motion.

Primary Page in DRM Diagram:
     21

Secondary Pages in DRM Diagram:
     23

Example:
 See individual subclasses for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     Directional Light Behaviour
     Flashing Light Behaviour
     Moving Light Behaviour
     Rotating Light Behaviour
     Strobing Light Behaviour
     Twinkling Light Behaviour
     Volume Light Behaviour

Constraints:
     Publishable Object

Component of (two-way)
	one or more Light Rendering Properties instances

-------------------------------------------------------------------------------

Class Name: Light Rendering Properties

Definition:
 An instance of this DRM class specifies that the aggregating
 <Geometry Representation> is to be rendered so as to provide the
 illusion that the <Geometry Representation> emits light, but
 unlike an actual <Light Source> instance, the
 <Geometry Representation> will not actually emit light (for
 example, shadows should not be generated).

Primary Page in DRM Diagram:
     21

Secondary Pages in DRM Diagram:
     4
     5
     19

Example:
 1. Any <Primitive Geometry> can take on light behaviour. An example might
    be a <Point> instance, where the light point is visible to a certain
    extinguishing range (default = 0, that is, the light is visible from
    any distance).

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Homogeneous Light Rendering Properties

Composed of (two-way)
	zero or more Light Rendering Behaviour instances
	zero or one Light Rendering Properties Control Link instance

Component of (two-way)
	zero or more Aggregate Geometry instances
	zero or more Primitive Geometry instances
	zero or more Property Set instances

Field Elements:
    SE_Point_Light_Display_Type display_type;
   /*
    *  The display_type field specifies whether the light is raster or
    *  calligraphic.
    */

    SE_Long_Float light_diameter;
   /*
    *  The light_diameter field specifies the size of the light, in pixels.
    *  The default value, 0.0, means "not applicable."
    */

    SE_Long_Float light_extinguishing_range;
   /*
    *  The light_extinguishing_range field specifies the distance, in
    *  metres, at which the light is no longer seen. The default value,
    *  0.0, means that it is always seen.
    */

    SE_Boolean random_area_light;
   /*
    *  The random_area_light field specifies whether all lights at
    *  this level and in the associated component tree were originally
    *  part of a random area light.
    */

    SE_Boolean active_light_value;
   /*
    *  The active_light_value field specifies the default / active state
    *  of the light, where SE_TRUE = on, and SE_FALSE = off.
    */

    SE_Long_Float candela_value;
   /*
    *  The candela_value field specifies the candela value of the light
    *  at full intensity. The default value, 0.0, means that the source
    *  had no candela value.
    */


-------------------------------------------------------------------------------

Class Name: Light Rendering Properties Control Link

Definition:
 An instance of this DRM class is a specialized <Control Link> instance
 providing the connection between one or more <Light Rendering Properties>
 instances and the <Expression> instance(s) that are used to determine
 whether the target <Light Rendering Properties> instances are active
 and / or their candela_value field values.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     21

Example:
 1. Consider a flight simulator database containing an area of terrain
    representing a city as seen from the air. Some of the <Polygon>
    instances of this terrain representation have
    <Light Rendering Properties> with <Twinkling Light Behaviour>,
    representing city lights. These <Light Rendering Properties>
    share a <Light Rendering Properties Control Link> that turns them on
    and off depending on the time of day (on at dusk, off at dawn).

 2. Consider a runway, bordered on either side by a <Line> representing the
    runway lights. Each <Line> has a <Light Rendering Properties> with
    <Strobing Light Behaviour>, and a
    <Light Rendering Properties Control Link> that turns the lights on
    and off depending on the time of day (on at dusk, off at dawn).

FAQS:
 Q. What does a <Light Rendering Properties Control Link> control?
 A. A <Light Rendering Properties Control Link> controls whether the
    associated <Light Rendering Properties> are on or off, and the
    candela_value of the <Light Rendering Properties>.

 Q. Can a <Light Rendering Properties Control Link> be used to change
    the <Light Rendering Behaviour> of the <Light Rendering Properties>?
 A. No. The links to the <Light Rendering Behaviour> instances are
    associations within the transmittal, and associations cannot be
    changed dynamically.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more Light Rendering Properties instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Unsigned active_expr_index;
   /*
    *  The active_expr_index field specifies which component <Expression>,
    *  if any, specifies the active_light_value of the target
    *  <Light Rendering Properties> instances. If active_expr_index is
    *  zero (0), the active_light_value field values of the target
    *  instances are not controlled; otherwise, the value is a 1-based
    *  index into the ordered aggregation of <Expression> instances.
    */

    SE_Integer_Unsigned candela_value_expr_index;
   /*
    *  The candela_value_expr_index field specifies which component
    *  <Expression>, if any, specifies
    *  the candela_value of the target <Light Rendering Properties>
    *  instances. If candela_value_expr_index is zero (0), the candela_value
    *  field values of the target instances are not controlled; otherwise,
    *  the value is a 1-based index into the ordered aggregation of
    *  <Expression> instances.
    */

    SE_Integer_Unsigned lower_candela_value_expr_index;
   /*
    *  The lower_candela_value_expr_index field specifies which
    *  component <Expression>, if any, specifies
    *  the lower limit of the candela_value of the target
    *  <Light Rendering Properties> instances. If lower_candela_value_expr_index
    *  is zero (0), no lower limit is specified; otherwise, the
    *  value is a 1-based index into the ordered aggregation of
    *  <Expression> instances. Note that if candela_value_expr_index
    *  is zero, the candela_value field values of the target instances
    *  are not controlled, so this value would also be zero.
    */

    SE_Integer_Unsigned upper_candela_value_expr_index;
   /*
    *  The upper_candela_value_expr_index field specifies which component
    *  <Expression>, if any, specifies the upper limit of the candela_value
    *  of the target <Light Rendering Properties> instances. If
    *  upper_candela_value_expr_index is zero (0), no upper limit is
    *  specified; otherwise, the value is a 1-based index into the
    *  ordered aggregation of <Expression> instances.
    *
    *  Note that if candela_value_expr_index is zero, the
    *  candela_value field values of the target instances are not
    *  controlled, so this value would also be zero.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Light Source

Definition:
 An instance of a concrete subclass descended from this abstract DRM class
 specifies a source of light emission.

Primary Page in DRM Diagram:
     21

Secondary Pages in DRM Diagram:
     4
     14
     23

Example:
 See individual subclasses for examples.

FAQS:
 Q. What about linear or area light sources?
 A. This definition does not attempt to address linear or area
    light sources; it is fashioned after the OpenGL abstraction
    of light.

 Q. Why isn't my favorite light source addressed?
 A. Only light sources specific to CIG lighting have been addressed.

Superclass: SEDRIS Abstract Base

Subclasses:
     Base Positional Light
     Infinite Light

Constraints:
     Publishable Object

Composed of (two-way)
	one Ambient Colour instance
	one Diffuse Colour instance
	zero or one Light Source Control Link instance 
	one Specular Colour instance

Component of (two-way)
	one or more Aggregate Geometry instances

Field Elements:
    SE_Boolean apply_to_children;
   /*
    *  For a <Light Source> instance (that is, an instance of one of the
    *  concrete classes descended from the class) that is a component of
    *  some <Aggregate Geometry>, apply_to_children provides a mechanism
    *  for limiting the scope of the <Light Source>. If apply_to_children
    *  is SE_TRUE, only <Primitive Geometry> in the component tree of those
    *  <Aggregate Geometry> instances are affected by the given
    *  <Light Source>. If apply_to_children is SE_FALSE, the <Light Source>
    *  is not limited to the scope of those <Aggregate Geometry> instances
    *  and thus applies globally.
    */

    SE_Boolean override_positional_lights;
   /*
    *  For a <Light Source> instance that is a component of some
    *  <Aggregate Geometry>, override_positional_lights provides a
    *  mechanism to indicate with a value of SE_TRUE that the effect of the
    *  given <Light Source> overrides that of any <Base Positional Light>
    *  instances that would have otherwise applied to that
    *  <Aggregate Geometry> - for example, if the given <Light Source> is
    *  so close to the affected <Geometry Representation> that the
    *  <Base Positional Light> effects would be negligible. If
    *  override_positional_lights = SE_FALSE, the effect of the
    *  given <Light Source> is combined with that
    *  of any <Base Positional Light> instances that are already in effect.
    */

    SE_Boolean override_infinite_lights;
   /*
    *  For a <Light Source> instance (that is, an instance of one of the
    *  concrete classes descended from the class) that is a component of
    *  some <Aggregate Geometry>, override_infinite_lights provides a
    *  mechanism to indicate with a value of SE_TRUE that the effect of the
    *  given <Light Source> overrides that of any <Infinite Light>
    *  instances that would have otherwise applied to that
    *  <Aggregate Geometry>. If override_infinite_lights = SE_FALSE,
    *  the effect of the given <Light Source> is combined with that
    *  of any <Infinite Light> instances that are already in effect.
    */

    SE_Boolean active_light_value;
   /*
    *  A value of SE_TRUE for the active_light_value field indicates
    *  that the light is on, while a value of
    *  SE_FALSE indicates that the light is off. For a <Light Source>
    *  with a <Light Source Control Link> instance as a component,
    *  this is the default state of the light.
    */


-------------------------------------------------------------------------------

Class Name: Light Source Control Link

Definition:
 An instance of this DRM class specifies an <Expression> instance,
 the value of which determines the active_light_value of all target
 <Light Source> instances - that is, which determines whether those
 <Light Source> instances are on or off.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     21

Example:
 1. A <Model> of a lighthouse has a <Geometry Model> with a
    <Union Of Geometry Hierarchy>, to which is attached an <Spot Light>
    representing the lighthouse's light. The <Spot Light> has
    a <Light Source Control Link> that turns the light on or off, depending
    on the time of day and the weather.

FAQS:
 Q. What does a <Light Source Control Link> control?
 A. A <Light Source Control Link> controls the active_light_value stored
    in its <Light Source>, so that the <Light Source> can be turned on
    and off.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more Light Source instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Positive expr_index;
   /*
    *  The expr_index field specifies which <Expression> component's
    *  value controls whether the controlled <Light Source> instance(s)
    *  are on or off. If the <Expression> evaluates to SE_TRUE, the
    *  <Light Source> instances are on.
    */


-------------------------------------------------------------------------------

Class Name: Line

Definition:
 An instance of this DRM class specifies a sequence of connected
 line segments, each implicitly specified between the i, i+1
 pair of <Vertex> components.

Primary Page in DRM Diagram:
     5

Example:
 1. Consider a <Line> instance L representing a string of 30 evenly spaced
    lights along one side of a runway.

    To specify what L represents, it has a qualified <Classification Data>
    component C with tag = ECC_AERODROME_LIGHTING, where C has a
    <Property Value> component with
    meaning = { SE_PROP_CODE_TYP_ATTRIBUTE, {EAC_AERONAUTICAL_LIGHT_TYPE}}
    value   = { EDCS_AVT_ENUMERATION, { EEC_AEROLGTTY_RUNWAY }}.

    L also has a <Light Rendering Properties> component with an
    appropriate <Flashing Light Behaviour>. L's own field values are
    count = 30 and suppress_last = SE_FALSE, so that L is rendered
    as a string of 30 evenly spaced flashing lights.

FAQS:
     None.

Superclass: Linear Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Continuous LOD Restrictions
     Image Mapping Functions and Texture Coordinates
     Nested Primitive Geometry
     Linear Geometry Structure

Associated with (two-way) (inherited)
	zero or more {ordered} Geometry Edge instances, each with a Edge Directions link object

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or one Presentation Domain instance
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or more Tack Point instances
	zero or one Union Of Primitive Geometry instance 

Composed of (two-way)
	zero or more {ordered} Reference Vector instances
	2 or more {ordered} Vertex instances

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Primitive Geometry instances

Inherited Field Elements:
    SE_Short_Integer_Unsigned count;
   /*
    *  A value of zero (0) for the count field indicates that the given
    *  <Linear Geometry> instance is to be rendered as solid.
    *
    *  Otherwise, the interpretation of the count depends on whether
    *  a <Light Rendering Properties> component is present for
    *  the given <Linear Geometry> instance.
    *
    *  - If a <Light Rendering Properties> component is present, then
    *    count is the number of evenly spaced light points to be
    *    rendered along the <Linear Geometry>.
    *
    *  - If no <Light Rendering Properties> component is present, then
    *    count is the number of evenly spaced line segments to be
    *    rendered along the <Linear Geometry>.
    */

    SE_Boolean suppress_last;
   /*
    *  If count is greater than zero, the suppress_last field specifies
    *  whether the last segment / point in the sequence is suppressed
    *  or rendered.
    */


-------------------------------------------------------------------------------

Class Name: Lineage

Definition:
 An instance of this DRM class either
 - provides information about the events and / or source data
   used in constructing the data specified by the scope, or

 - indicates a lack of knowledge about lineage.

Primary Page in DRM Diagram:
     20

Secondary Pages in DRM Diagram:
     10
     22

Example:
 1. Consider a data set representing a transmittal containing
    a polygonal terrain representation that was derived from a
    DTED representation. The <Lineage> instance for the
    <Transmittal Root> instance of this example transmittal
    might have a <Process Step> component describing the
    polygonalization process, as well as a <Source> component
    corresponding to the DTED representation.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Mandatory Metadata

Composed of (two-way metadata)
	zero or more Process Step instances 
	zero or more Source instances 

Component of (two-way)
	zero or more Data Quality instances
	zero or more Image instances
	zero or more Sound instances
	zero or more Symbol instances

Field Elements:
    SE_String statement;
   /*
    *  If provided, the statement field supplies a general explanation
    *  of the data provider's knowledge about the lineage of the dataset
    *  being described.
    */


-------------------------------------------------------------------------------

Class Name: Linear Feature

Definition:
 An instance of this DRM class is a <Primitive Feature> with a
 one-dimensional structure, such as a road, a stream, or a power line.

Primary Page in DRM Diagram:
     8

Secondary Pages in DRM Diagram:
     12

Example:
 1. Consider a <Linear Feature> representing a road.

    <Linear Feature> ---------------------------------
     <>                                              | - <Edge Direction>
     |                                               |
     |-- <Classification Data>                       |
     |   tag = ECC_ROAD                          <Feature Edge>
     |
     |-- <Property Value>
     |   meaning = EAC_WIDTH
     |
     |-- <Property Value>
     |   meaning = EAC_TERRAIN_TRANSPORTATION_ROUTE_SURFACE_TYPE
     |
     |-- <Property Value>
         meaning = EAC_NAME
         "Interstate 5"

    This <Linear Feature> instance has an ordered set of <Feature Edge>
    instances defining the 2D or 3D path of its centreline. The
    <Classification Data> identifies it as a road, while the
    <Property Value> instances describe the characteristics of the road.

    Note that if individual segments of the road had different
    surface characteristics, they could have been attributed with their
    own <Property Value> components.

FAQS:
 Q. Can a <Linear Feature> consist of multiple <Feature Edge> instances?

 A. Yes. However, these <Feature Edge> instances shall form an ordered
    sequence, such that each consecutive pair of <Feature Edge> instances
    shares a common <Feature Node>. Also, any properties of the feature
    shall remain the same throughout its length.  For example, a single
    road feature (Interstate 95) could conceivably consist of a linear
    sequence of hundreds or thousands of <Feature Edge> instances.

Superclass: Primitive Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated with (two-way)
	one or more {ordered} Feature Edge instances, each with a Edge Directions link object

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Presentation Domain instance 
	zero or one Spatial Extent instance

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances

-------------------------------------------------------------------------------

Abstract Class Name: Linear Geometry

Definition:
 An instance of a concrete class derived form this DRM class is a
 geometric linear representation.

Primary Page in DRM Diagram:
     5

Secondary Pages in DRM Diagram:
     13
     23

Example:
 See individual subclasses for examples.

FAQS:
     None.

Superclass: Primitive Geometry

Subclasses:
     Arc
     Line

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Continuous LOD Restrictions
     Image Mapping Functions and Texture Coordinates
     Nested Primitive Geometry
     Linear Geometry Structure

Associated with (two-way)
	zero or more {ordered} Geometry Edge instances, each with a Edge Directions link object

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or one Presentation Domain instance
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or more Tack Point instances
	zero or one Union Of Primitive Geometry instance 

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Primitive Geometry instances

Field Elements:
    SE_Short_Integer_Unsigned count;
   /*
    *  A value of zero (0) for the count field indicates that the given
    *  <Linear Geometry> instance is to be rendered as solid.
    *
    *  Otherwise, the interpretation of the count depends on whether
    *  a <Light Rendering Properties> component is present for
    *  the given <Linear Geometry> instance.
    *
    *  - If a <Light Rendering Properties> component is present, then
    *    count is the number of evenly spaced light points to be
    *    rendered along the <Linear Geometry>.
    *
    *  - If no <Light Rendering Properties> component is present, then
    *    count is the number of evenly spaced line segments to be
    *    rendered along the <Linear Geometry>.
    */

    SE_Boolean suppress_last;
   /*
    *  If count is greater than zero, the suppress_last field specifies
    *  whether the last segment / point in the sequence is suppressed
    *  or rendered.
    */


-------------------------------------------------------------------------------

Class Name: Literal

Definition:
 An instance of this DRM class is an <Expression> instance that specifies
 a constant value.

Primary Page in DRM Diagram:
     16

Example:
 See the examples of the subclasses of <Control Link>.

FAQS:
     None.

Superclass: Expression

Constraints:
     Publishable Object
     Non Cyclic Aggregations

Component of (two-way) (inherited)
	zero or more Control Link instances
	zero or more Feature Model Instance instances, each with a Model Instance Template Indices link object
	zero or more Function instances
	zero or more Geometry Model Instance instances, each with a Model Instance Template Indices link object

Field Elements:
    SE_Single_Value value;
   /*
    *  The value field specifies the actual data value expressed by the given
    *  <Literal> instance.
    */


-------------------------------------------------------------------------------

Class Name: Lobe Data

Definition:
 An instance of this DRM class specifies a cone or a pyramid shape of
 a light source or directional light in terms of direction vectors for
 the central axis (SE_REF_VEC_TYP_LIGHT_DIRECTION), the
 SE_REF_VEC_TYP_VERTICAL_AXIS, and horizontal and vertical angular widths.

Primary Page in DRM Diagram:
     21

Example:
 See examples in: <Spot Light>, <Blend Directional Light>,
 <Cone Directional Light>, and <Pyramid Directional Light>.

FAQS:
 Q. If the two <Reference Vector> components specify the
    SE_REF_VEC_TYP_LIGHT_DIRECTION and SE_REF_VEC_TYP_VERTICAL_AXIS,
    how is the horizontal axis specified?
 A. The horizontal direction is always perpendicular to the plane of
    the two <Reference Vector> instances of type
    SE_REF_VEC_TYP_LIGHT_DIRECTION and SE_REF_VEC_TYP_VERTICAL_AXIS.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Required Reference Vector Location

Composed of (two-way)
	exactly 2 Reference Vector instances 

Component of (two-way)
	zero or more Directional Light Behaviour instances
	zero or more Spot Light instances

Field Elements:
    SE_Long_Float horizontal_width;
   /*
    *  The horizontal_width field specifies the horizontal lobe width,
    *  measured in radians perpendicular to the SE_REF_VEC_TYP_VERTICAL_AXIS
    *  <Reference Vector> component.
    */

    SE_Long_Float vertical_width;
   /*
    *  The vertical_width field specifies the vertical lobe width,
    *  measured in radians parallel to the SE_REF_VEC_TYP_VERTICAL_AXIS
    *  <Reference Vector> component.
    */


-------------------------------------------------------------------------------

Class Name: Local 4x4

Definition:
 An instance of this DRM class specifies a sixteen element matrix that is
 used to scale, orient, and position objects in the scope of its aggregate
 <LSR Transformation>. The direction of rotation is determined by the
 right-hand rule. The translation parameters are always in the rightmost
 column of the matrix.

 Since a <Local 4x4> only appears as part of an <LSR Transformation>, and an
 <LSR Transformation> only appears in the scope of an LSR spatial reference
 frame, the objects to which a <Local 4x4> is applied are always defined in
 an LSR SRF. Since LSR SRFs are usually used to specify <Model> rather than
 <Environment Root> instances, usually <Local 4x4> is considered to be
 'local'. However, an <Environment Root> may be specified in an LSR SRF, in
 which case <LSR Transformation> instances would be legal within its scope.

 The matrix multiplication order is defined by w = M x v, where M is the
 <Local 4x4> matrix, v is the original location vector, and w is the
 resulting location vector.

Primary Page in DRM Diagram:
     7

Example:
 1. The position and orientation of the control tower in a <Model> of an
    airport is specified by the <Local 4x4>.  See <Transformation> for
    more examples.

FAQS:
 Q. How is the transformation matrix stored?
 A. SEDRIS stores matrices in *row* major order; that is, the first four
    elements correspond to the first row of the matrix, the following four
    elements correspond to the second row of the matrix, and so on (just as
    a float[4][4] in C is organized). Hence, if mat[][] is the matrix being
    used, then mat[i][j] is the element in row i and column j of the matrix.

 Q. What is the multiplication order for <Local 4x4> matrices?
 A. If M is a <Local 4x4> transformation matrix and v is a column location
    vector, then the SEDRIS Level 0 API transforms v to a column location
    vector w by setting w = Mv.

    (See HTML for detailed matrix equation.)

 Q. Is a matrix in SEDRIS the same as a matrix in OpenGL?
 A. No. A matrix in SEDRIS is stored in row major order, while in OpenGL,
    matrices are specified in column major order (as in the glMultMatrix
    function). Consequently, to correctly apply SEDRIS transformations in
    OpenGL programs, each matrix shall be reordered.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Component of (two-way)
	one LSR Transformation instance

Field Elements:
    SRM_Matrix_4x4 matrix;
   /*
    *  The matrix field specifies a standard 4 x 4 transformation matrix.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Location

Definition:
 An instance of a concrete class derived from this this DRM class specifies
 linear or angular quantities that designate the position of a point in a SRF.

Primary Page in DRM Diagram:
     15

Secondary Pages in DRM Diagram:
     1
     4
     5
     6
     7
     8
     9
     10
     11
     12
     18
     20
     21
     22
     23

Example:
 1. A tree is instanced as a <Point Feature>. The <Point Feature>'s
    <Feature Node> shall have a <Location> giving the position in space
    where the tree will be placed.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     Location 2D
     Location 3D
     Location Surface

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

-------------------------------------------------------------------------------

Abstract Class Name: Location 2D

Definition:
 An instance of a concrete class derived from this DRM class specifies
 linear or angular quantities that designate the position of a point in
 a two dimensional SRF.

Primary Page in DRM Diagram:
     15

Secondary Pages in DRM Diagram:
     23

Example:
 See individual subclasses for examples.

FAQS:
     None.

Superclass: Location

Subclasses:
     AZ 2D Location
     LSR 2D Location
     Polar 2D Location

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

-------------------------------------------------------------------------------

Abstract Class Name: Location 3D

Definition:
 An instance of a concrete class derived from this DRM class specifies
 linear or angular quantities that designate the position of a point
 in a three dimensional SRF.

Primary Page in DRM Diagram:
     15

Secondary Pages in DRM Diagram:
     2
     4
     5
     7
     9
     21
     22
     23

Example:
 1. A <Point Feature> representing a bridge is associated with a
    <Feature Node>.  The location of that <Feature Node> in the
    currently scoped SRF is represented by a <Location 3D>.

 2. The location of a <Vertex> (point) of a <Polygon> in a <Model>
    of a tank is associated with a <Geometry Node>.  The location
    of that <Geometry Node> in the local SRF of the tank <Model> is
    represented by the <Location 3D> of the <Vertex>.

FAQS:
     None.

Superclass: Location

Subclasses:
     CC 3D Location
     CD 3D Location
     CM 3D Location
     EC Augmented 3D Location
     EI 3D Location
     HAEC 3D Location
     HEEC 3D Location
     HEEQ 3D Location
     LCC Augmented 3D Location
     LSR 3D Location
     LTSAS 3D Location
     LTSC 3D Location
     LTSE 3D Location
     M Augmented 3D Location
     OM Augmented 3D Location
     PS Augmented 3D Location
     SEC 3D Location
     SEQ 3D Location
     SM 3D Location
     SMS 3D Location
     TM Augmented 3D Location

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

Component of (two-way)
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

-------------------------------------------------------------------------------

Class Name: LSR 2D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Local Space Rectangular (LSR2) 2D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. <LSR 2D Location> instances are most commonly used
    in <Model> representations.

FAQS:
 Q. What if all of the <Vertex> components of a <Polygon> instance use
    <LSR 2D Location> instances, and the <Polygon> instance crosses over
    two or more terrain facets?

 A. By default, the <Polygon> instance should be draped across the terrain.
    This would cause the <Polygon> instance to be broken at the terrain
    facet boundaries, creating multiple polygons.  If the Dont_Drape
    SE_Polygon_Flag is set on the <Polygon> instance, do not drape the
    <Polygon> instance. Instead, the <Vertex> components of the <Polygon>
    instance will conform to the terrain surface, while the interior of
    the <Polygon> instance may cut through the terrain.

Superclass: Location 2D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

Field Elements:
    SRM_Euclidean_2D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: LSR 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Local Space Rectangular (LSR) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. <LSR 3D Location> instances are most commonly used
    in <Model> representations.

FAQS:
     None.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Composed of (two-way)
	zero or one LSR 3D Location Control Link instance

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Euclidean_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: LSR 3D Location Control Link

Definition:
 An instance of this DRM class is a specialized <Control Link> instance
 used to provide the connection between an ordered aggregation of
 <Expression> instances and the target fields of the
 <LSR 3D Location> instances that aggregate it.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     15

Example:
 1. Consider a building <Model> that may be instanced on terrain polygons
    that are at various different orientations. Each building wall shall meet
    the terrain, leaving no gaps. This means that the lengths of the
    building's walls shall be adjusted by different amounts in each instance
    to match the slope of the ground.

    The location of each <Vertex> at the base of a wall <Polygon> can be
    adjusted by using an <LSR 3D Location Control Link> aggregated by the
    <LSR 3D Location> that specifies the <Vertex>'s location. Each
    <LSR 3D Location Control Link> would itself aggregate a <Variable>, which
    would specify the new location value. These <Variables> shall be set
    separately for each instance to match the terrain upon which the instance
    is positioned. This calls for the <Variables> to be set from outside the
    building <Model> so all of these <Variables> in the building <Model>
    shall be associated with the <Model>'s <Interface Template>.

 2. See also <Interface Template>, <Model Instance Template Index>.

FAQS:
     None.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more LSR 3D Location instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Unsigned u_expr_index;
   /*
    *  The u_expr_index field identifies a component <Expression>, the
    *  value of which specifies that of the coordinate.u field of the
    *  affected <LSR 3D Location> instances. If this index is 0, the
    *  coordinate.u field is not controlled.
    */

    SE_Integer_Unsigned v_expr_index;
   /*
    *  The v_expr_index field identifies a component <Expression>, the
    *  value of which specifies that of the coordinate.v field of the
    *  affected <LSR 3D Location> instances. If this index is 0, the
    *  coordinate.v field is not controlled.
    */

    SE_Integer_Unsigned w_expr_index;
   /*
    *  The w_expr_index field identifies a component <Expression>,
    *  the value of which specifies that of the coordinate.w field
    *  of the affected <LSR 3D Location> instances. If this index
    *  is 0, the coordinate.w field is not controlled.
    */


-------------------------------------------------------------------------------

Class Name: LSR Transformation

Definition:
 An instance of this DRM class is a <Transformation>, specified by a
 4 x 4 matrix, used to transform an object defined in one LSR SRF
 into another LSR SRF, when the original SRF does not have conformal
 points (<LSR 2D Location> instances) that shall be maintained as
 conformal points. (If the original SRF does have conformal points
 that shall be maintained, a <World Transformation> shall be used
 instead.)

 Note that the 4 x 4 matrix may be explicitly specified as a <Local 4x4>,
 implicitly by a series of <LSR Transformation Step> components, or both,
 as long as the <<LSR Transformation Components>> constraint is obeyed.

Primary Page in DRM Diagram:
     7

Secondary Pages in DRM Diagram:
     2
     4
     6

Example:
 1. Used when instancing a wheel to the axle of a vehicle.

 2. The <Translation>, <Rotation>, and <Scale> instances applied to
    a gun barrel when modeled into a tank turret.

 3. See <Transformation> for general examples.

FAQS:
     None.

Superclass: Transformation

Constraints:
     Publishable Object
     LSR Transformation Components

Composed of (two-way)
	zero or one Local 4x4 instance
	zero or more {ordered} LSR Transformation Step instances

Component of (two-way) (inherited)
	zero or more Feature Model Instance instances
	zero or more Geometry Model Instance instances

Component of (two-way)
	zero or more Aggregate Geometry instances
	zero or one Geometry Model instance
	zero or more Property Grid Hook Point instances

-------------------------------------------------------------------------------

Abstract Class Name: LSR Transformation Step

Definition:
 An instance of a concrete class derived from this DRM class represents a
 transformation step that is defined in a (2D or 3D) LSR SRF.

Primary Page in DRM Diagram:
     7

Secondary Pages in DRM Diagram:
     23

Example:
 See individual subclasses for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     Rotation
     Scale
     Translation

Constraints:
     Publishable Object

Composed of (two-way)
	zero or one Reference Vector instance 

Component of (two-way)
	zero or one LSR Transformation instance

-------------------------------------------------------------------------------

Class Name: LTSE Surface Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Local Tangent Space Euclidean (LTSE) Surface SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. A <Property Grid> instance maps wind velocities along a coastline. The
    <Property Grid> instance uses a Local Tangent Euclidean (Surface)
    SRF with the Y axis parallel to the coast.

FAQS:
 Q. How does the Local Tangent Space Euclidean (LTSE) SRF differ from the
    Local Space Rectangular (LSR) SRF?
 A. The Local Tangent Euclidean (Surface) SRF specifies a location in
    a georeferenced space. The Local Space Rectangular (2D) SRF specifies
    a location in a Cartesian, non-georeferenced "model" space.

Superclass: Location Surface

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

Field Elements:
    SRM_LTSE_Surface_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: LTSE 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Local Tangent Space Euclidean (LTSE) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. Consider a <Property Grid> instance that maps wind velocities along a
    coastline. The <Property Grid> instance uses a
    Local Tangent Euclidean SRF with the Y axis parallel to the coast.

FAQS:
 Q. How does the Local Tangent Space Euclidean (LTSE) SRF differ from the Local Space
    Rectangular (LSR) SRF?
 A. The Local Tangent Euclidean SRF specifies a location in a georeferenced
    space. The Local Space Rectangular SRF specifies a location in a
    Cartesian, non-georeferenced "model" space.

 Q. If a data provider has a 2D grid, why is the data provider required
    to specify a height?
 A. Because the Local Tangent Euclidean references a Cartesian coordinate system
    to a curved surface, the two surfaces are not parallel (in particular,
    LTSE is not a projection-based SRF).  When they are not parallel,
    a 2D coordinate in one SRF can map to a range of 2D coordinates in
    the other SRF. Specifying the third coordinate resolves this
    ambiguity.

    If the data provider's grid is small enough or the ambiguity in
    location is unimportant, the data provider can specify a height
    as a global parameter of the <Property Grid>. Otherwise, the
    data provider should specify the height as a separate value in
    each grid cell, or use several grids of smaller extents.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_LTSE_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: M Augmented 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Augmented Mercator (AM) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. The Augmented Mercator SRF is used by a number of METOC data
    sets of importance to the modelling and simulation (M&S) community.

FAQS:
 Q. Where can users obtain further information on AM?
 A. See the SRM for additional details.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Map_Projection_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: M Surface Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Mercator (M) Surface SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. The Mercator SRF is used by a number of METOC data sets of
    importance to the modelling and simulation (M&S) community.

FAQS:
 Q. Where can users obtain further information on M?
 A. See the SRM for additional details.

Superclass: Location Surface

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

Field Elements:
    SRM_Map_Projection_Surface_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: Map Scale LOD Data

Definition:
 An instance of this DRM class specifies the map scale
 of the associated data.

Primary Page in DRM Diagram:
     9

Example:
     None.

FAQS:
     None.

Superclass: Base LOD Data

Constraints:
     Publishable Object
     LOD Related Organizing Principle

Component of (two-way) (inherited)
	zero or more Aggregate Feature instances
	zero or more Aggregate Geometry instances
	zero or more Property Grid Hook Point instances

Field Elements:
    SE_Long_Float map_scale;
   /*
    *  The map_scale field specifies the denominator of the representative
    *  fraction on a map (for example, on a 1:24,000-scale map, the map_scale
    *  is 24000.0). This shall be a positive value (greater than 1.0, since
    *  maps are smaller than the things they represent).
    */


-------------------------------------------------------------------------------

Class Name: Mesh Face Table

Definition:
 An instance of this DRM class specifies a two-dimensional table that
 defines the face elements of a <Finite Element Mesh> instance in terms of
 vertex numbers in the ordered <Vertex> component list of the
 <Finite Element Mesh> instance and, optionally, the topology of the
 face elements.

 The first data element specifies, for cell i, j, the index in the ordered
 <Vertex> list of the <Vertex> representing the jth node of the ith mesh
 face. If the ith mesh face contains less than j nodes, so that j is greater
 than the number of the last listed node of mesh face i, then the cell data
 element contains zero (0). The edges of each mesh face i are implicitly
 defined by pairing node j to node j + 1.

 For a given mesh face element index i and mesh face node index j, the
 (i, j)-th cell gives the vertex number that comprises the j-th node of
 the i-th mesh face. The mesh face vertices are listed (j index) in
 clockwise order around the outer perimeter of the mesh face, starting
 and ending with a first vertex. If inner perimeter rings are present,
 the vertex list along the second axis continues with inner perimeter
 vertices in counter-clockwise order starting and ending with a first
 vertex on each inner ring.

Primary Page in DRM Diagram:
     18

Example:
 1. Consider six <Vertex> instances, used to define
    a <Mesh Face Table>, where the mesh would be
    diagrammed as follows.

    (k) = <Vertex> k

    Mesh:

        (1)-----(2)-----(3)
         \  A  /  \  B   |
          \   /  C \     |
           (4)------(5)-(6)

    In this example, there are six <Vertex> instances
    forming the nodes of the mesh, which has three
    mesh faces (A, B, C).

    The corresponding <Mesh Face Table> instance,
    without surface topology, would be organized as
    follows, where each individual cell contains a
    vertex number.

                    Node #
                 | 1   2   3   4   5
              ------------------------
 Mesh Face #   1 |1  |2  |4  |1  |0  |  -->Mesh Face A
               2 |2  |3  |6  |5  |2  |  -->Mesh Face B
               3 |4  |2  |5  |4  |0  |  -->Mesh Face C

 2. Consider the <Mesh Face Table> instance from the
    previous example, with the addition of surface topology
    (that is, adjacent_face_table_present set to SE_TRUE). In this
    instance, each individual cell contains
    a {vertex number, adjacent mesh face number} pair.

                    Node #
                | 1   2   3   4   5
             ------------------------
 Mesh Face #  1 |1,0|2,3|4,0|1,0|0,0|  -->Mesh Face A
              2 |2,0|3,0|6,0|5,3|2,0|  -->Mesh Face B
              3 |4,1|2,2|5,0|4,0|0,0|  -->Mesh Face C

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Component of (two-way)
	one Finite Element Mesh instance

Field Elements:
    SE_Integer_Positive mesh_face_count;
   /*
    *  The mesh_face_count field specifies the total number of mesh faces
    *  in the given <Mesh Face Table> instance.
    */

    SE_Integer_Positive maximum_vertices_per_face;
   /*
    *  The maximum_vertices_per_face field specifies the maximum
    *  number of vertices in any one face element.
    */

    SE_Boolean adjacent_face_table_present;
   /*
    *  If the adjacent_face_table_present field is set to SE_TRUE, the given
    *  <Finite Element Mesh> instance contains face adjacency information in
    *  a separate table called the *adjacent face table*, which has the same
    *  dimensions as the mesh face table. The values in the table are positive
    *  integer values that specify face indices that represent the row in the
    *  mesh face table.
    */


-------------------------------------------------------------------------------

Class Name: Model

Definition:
 An instance of this DRM class specifies a representation of some
 environmental entity as a feature representation, a geometric
 representation, or both. This representation is usually a "generic"
 representation that can be referenced many times in a transmittal
 to create many instances of representations of similar environmental
 entities.

 The special case of the "null model" is the case in which both
 the feature and the geometric representation of the <Model> are
 empty - that is, they contain no primitives. This is instanced
 in cases where some state or condition of a representation exists
 but has no primitives, such as a representation of an environmental
 entity that has been completely destroyed, or that is out of viewing
 range.

Primary Page in DRM Diagram:
     2

Secondary Pages in DRM Diagram:
     10
     16

Example:
 1. The lowest level of detail of a tank's turret.

 2. A 1 degree by 1 degree tile of terrain containing thousands of
    instances to other <Model> instances.

 3. An aircraft carrier that has both a geometric representation
    and a feature representation.

 4. A data provider has an overall model (call it "car") made up of several
    components: top, two sides, four tires, back, front, underneath. When
    put into this data provider's <Model Library>, each of these components
    (as well as the overall "car" placeholder) is represented as an instance
    of <Model>. The data provider's organization has a place in its database
    where "car" is instanced, so that at an IG the "car" appears. This is
    represented in the resulting SEDRIS transmittal by a <Geometry Model
    Instance> of "car" appearing in the scope of an <Environment Root>.
    No other <Models> in this data provider's mapping to SEDRIS can reference
    the "car" <Model>.

    In this case, the "car" will have model_reference_type
    set to SE_MDL_REF_TYP_ROOT, since "car" can be instanced outside the
    scope of the <Model Library>, and in fact has a <Geometry Model
    Instance> under an <Environment Root>.

    On the other hand, the "top" <Model>, representing the top of the
    car, cannot be instanced outside the <Model Library> in the data
    provider's scheme of things, but only as part of more complex
    <Models>; consequently, the "top" <Model> has model_reference_type
    SE_MDL_REF_TYP_COMPONENT.

 5. A producer has a <Model> "plane" that has several components (two wings,
    tail, fuselage, etc). However, the producer has a <Model> "ship" that
    instances "plane" to identify a ship with planes on its deck. The
    transmittal will instance "ship", and "ship" has model_reference_type =
    SE_MDL_REF_TYP_ROOT. Since the <Model> "plane" could be used elsewhere
    in the transmittal, its instance under "ship" has model_reference_type
    = SE_MDL_REF_TYP_ROOT_AND_COMPONENT.

FAQS:
 Q. Why do I need a dynamic_model_processing flag?  When I retrieve data
    from a SEDRIS transmittal, won't the dynamic <Model> instances also
    be processed?
 A. That depends entirely on how the data processing code was written.  If
    the code starts at <Environment Root> and processes everything that the
    components of <Environment Root> eventually refer to, then dynamic
    <Model> instances will not be processed unless the dynamic <Model>
    instance(s) have a connection to the database (unless at least one
    reference is made to the dynamic <Model> instance(s) from somewhere
    within an <Environment Root> instance).  In some Interchange systems,
    the way around this has been to "connect" the dynamic <Model>
    instance(s) to something like the SW corner of the database. However,
    this requires "adding" information, which is not the purpose of
    SEDRIS.

 Q. As a consumer, if I am given a transmittal containing a <Model Library>,
    I keep track of which <Model> instances are instanced by some
    <Environment Root> instance. Does this information correlate at all
    with the dynamic_model_processing information of each <Model> instance?
 A. Not necessarily.

    As <Model Library> instances are passed around projects and re-used for
    purposes other than that for which they were built, many <Model>
    instances in any given <Model Library> instance may not be referenced
    in a given <Environment Root> instance that references that
    <Model Library> instance. For instance, a <Model Library> instance may
    contain a <Model> representing a free-standing brick wall that by chance
    is not instanced by any <Environment Root>, but this does not
    make the brick wall dynamic.

    On the other hand, consider a <Model> representing a biplane, in which
    the propellers are able to rotate. An <Environment Root> representing
    the Smithsonian Air and Space Museum might contain an instance of this
    <Model> representing one of the exhibits.

 Q. Can't any <Model> really be dynamic in the database? All I have to do is
    put it through my special processing, and it moves. Couldn't all the
    flags for dynamic model processing therefore be set to SE_TRUE?
 A. Although the consumer can determine additional processing for any
    data read from SEDRIS, these flags are to be set by the data provider.
    If a <Model> instance is dynamic or has moving parts, then the data
    provider is required to provide this information.

 Q. Relating to the "has_moving_parts" flag, can't this information be
    derived by searching the entire <Model> for <LSR Transformation>
    instances that have <Control Links> attached to them?
 A. Yes. The information is provided to allow consumers to detect
    at the 'top' level of the <Model> whether it has moving parts
    anywhere within its scope, rather than forcing them to (potentially)
    search the entire <Model> to derive this information.

 Q. Why can <Model> have at most 2 <Hierarchy Summary Item> components?
 A. A <Model> is not required to have a hierarchy summary at all, but if
    a data provider wants to provide a summary of hierarchy, then a <Model>
    may have one summary for <Geometry Representation>, one summary for
    <Feature Representation>, or a summary of each.

 Q. Can <Model> have both <Hierarchy Summary Item> and <Primitive
    Summary Item> components (as opposed to either/or)?
 A. Yes.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Hierarchy Summary Constraints
     Model Reference Type Constraints
     Model Spatial Reference Frame
     No Attribute Conflicts
     Non Empty Model

Composed of (two-way)
	zero or one Classification Data instance
	zero or one Feature Model instance
	zero or one Geometry Model instance
	a bounded set of 0..2 Hierarchy Summary Item instances
	zero or one Interface Template instance
	zero or one Overload Priority Index instance
	zero or more Primitive Summary Item instances
	zero or more Property Value instances
	zero or one Spatial Extent instance

Composed of (two-way metadata)
	zero or one Access instance
	zero or one Citation instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance 
	zero or one Time Constraints Data instance

Component of (two-way)
	one Model Library instance

Field Elements:
    SE_String name;
   /*
    *  The name field specifies a meaningful short name.
    */

    SE_SRF_Info srf_info;
   /*
    *  The srf_info field specifies the SRF within which the given
    *  <Model> instance is defined.
    */

    SE_Model_Reference_Type model_reference_type;
   /*
    *  The model_reference_type field specifies how the given
    *  <Model> instance may be referenced within a transmittal.
    */

    SE_Boolean dynamic_model_processing;
   /*
    *  The value of the dynamic_model_processing field is SE_TRUE only
    *  if the given <Model> instance is used by the
    *  data provider to represent something that moves throughout the
    *  environment, such as a vehicle. This flag is used to identify
    *  information at the top level of model data, so that it can be
    *  set at the level where model_reference_type is not
    *  SE_MDL_REF_TYP_COMPONENT.
    */

    SE_Boolean has_units;
   /*
    *  The has_units field only takes effect if the srf_info are LSR;
    *  has_units allows a data provider to say "This LSR Model is in metres"
    *  vs. "This LSR Model is unitless (it has no units)".
    *  In the former case, when an LSR model is specified in metres, it can
    *  be used to represent real-world things, such as a tank, a ship, or a
    *  tree. Sometimes such a <Model> is scaled when it is instanced.
    *  (<Model>s representing trees are often scaled, but those representing
    *  ships and tanks aren't.)
    *  In the latter case, when an LSR model has no units, the <Model>
    *  cannot be instanced into another SRF. One
    *  example of something that might be represented in this manner
    *  is a "logo model".
    */

    SE_Boolean has_moving_parts;
   /*
    *  The value of the has_moving_parts field is SE_TRUE only if the
    *  given <Model> contains at least one <Control Link> attached to
    *  an <LSR Transformation Step> instance that allows motion.
    */


-------------------------------------------------------------------------------

Class Name: Model Instance Template Index

Definition:
 An instance of this DRM class is used by a <Feature Model Instance> (FMI)
 or <Geometry Model Instance> (GMI) to specify, for a given <Expression>
 component of the FMI / GMI, which <Variable> instance within the instanced
 <Model>'s <Interface Template> component is receiving that <Expression>
 instance as its value for that FMI / GMI.

 The mechanism works as follows.

 Consider a <Model> instance M which contains <Variable> instances. In
 order to be semantically valid, M is required to have an
 <Interface Template> component I, which by definition has an ordered set
 of association relationships to each <Variable> within M.

 The <Interface Template> instance I exists to provide access to all
 <Variable> instances within M, so that all FMIs and GMIs referring to
 M have a means of specifying values to be plugged into those
 <Variable> instances for a particular FMI or GMI referring to M.

 Specifically, a model instance object referring to M (whether
 a <Feature Model Instance> or a <Geometry Model Instance>)
 provides a set of <Expression> instances to be 'plugged in' to M's
 <Variable> instances. For a <Model> M with N <Variable> instances, M's
 <Interface Template> component will have 1..N ordered associations, one
 to each <Variable> instance within M. Each model instance of M
 will supply N <Expression> instances, together with a <Model Instance
 Template Index> instance for each <Expression> instance. The index within
 the <Model Instance Template Index> instance for a given <Expression>
 component specifies which of the N <Variable> instances of M is to be
 supplied with that <Expression> instance as its value.

Primary Page in DRM Diagram:
     7

Secondary Pages in DRM Diagram:
     3
     16

Example:
 See <Interface Template> for examples.

FAQS:
 Q. What restrictions are there on the value of the
    index field?
 A. The index is a 1-based index, which (as described in the
    definition of <Model Instance Template Index>) serves as
    an index into the ordered list of <Expressions> provided
    by the given <Model>'s <Interface Template>.

    Consequently, if the <Model> contains N <Variables>,
    the <Interface Template> will have N ordered associates,
    so the value of a <Model Instance Template Index> instance
    for a given <Expression> being supplied by a model instance
    shall be between 1 and N inclusive.

    See also the constraints for this class, and for
    <Feature Model Instance>, <Geometry Model Instance>.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Distinct Link Objects  Naturally, a given model instance is not permitted to supply
 conflicting <Expression> instances for a given <Variable>, so
 for any model instance instance, all its
 <Model Instance Template Index> instances shall be unique.


Field Elements:
    SE_Integer_Positive index;
   /*
    *  Given the <Model> that is being instanced, the index field
    *  specifies an index into the ordered <Variable> list of that <Model>'s
    *  <Interface Template>.
    */


-------------------------------------------------------------------------------

Class Name: Model Library

Definition:
 An instance of this DRM class specifies the complete list of the unique
 <Model> instance(s) that are stored in the given transmittal. By
 traversing this library the user can retrieve the generic instances of
 all <Model> instances.

Primary Page in DRM Diagram:
     10

Secondary Pages in DRM Diagram:
     1
     2

Example:
     None.

FAQS:
 Q. As a consumer, I would like to pre-process all <Model> components of
    a particular <Model Library> instance for efficiency reasons. Is
    there a way to uniquely identify <Model> objects, so that I can
    detect whether a given <Model> has already been processed?

 A. Yes. The <Model> objects can be placed in a lookup table in the
    consuming application, then referenced by the model instances.
    There are at least two ways to do this via the API.

    1. If the API implementation being used supports the SE_Object_ID
       capability, the SE_Object_ID of the <Model> can be used as a
       lookup.  The <Model> objects can be stored in a sorted table or
       hash table with the index based on the string value of the
       SE_Object_ID.

    2. Alternately, retrieve all the <Geometry Model> and <Feature Model>
       instances within the given <Model Library> and place them in an array
       while assigning each the index into the array entry through the use
       of the SE_SetUserData() function in the level 0 API. When a
       <Geometry Model Instance> or <Feature Model Instance> is
       encountered, retrieve the associated <Geometry Model> or
       <Feature Model>, then retrieve the array index using the level 0
       API function SE_GetUserData().  The user data will be valid as
       long as the <Geometry Model> (or <Feature Model>, as the case may
       be) has not been freed.

Superclass: Library

Constraints:
     Publishable Object

Composed of (two-way)
	one or more {ordered} Model instances

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or one Citation instance
	zero or one Description instance

Component of (two-way)
	one Transmittal Root instance

-------------------------------------------------------------------------------

Class Name: Moving Light Behaviour

Definition:
 An instance of this DRM class specifies that the light moves along
 a specified path.

Primary Page in DRM Diagram:
     21

Example:
 1. A moving light that represents traffic along a road.

FAQS:
     None.

Superclass: Light Rendering Behaviour

Constraints:
     Publishable Object

Composed of (two-way)
	one Reference Vector instance 

Component of (two-way) (inherited)
	one or more Light Rendering Properties instances

Field Elements:
    SE_Long_Float speed;
   /*
    *  The speed field specifies the speed, in metres per second, at which the
    *  light moves along the path.
    */

    SE_Long_Float delay;
   /*
    *  The delay field, specified in seconds, is better characterized as a
    *  pre-start; it allows a series of lights to appear asynchronous.
    */


-------------------------------------------------------------------------------

Class Name: Octant Data

Definition:
 An instance of this DRM class specifies which octant of the octree
 that the associated branch of the given octant-related aggregation
 represents, where the octree as a whole corresponds to the entire
 aggregation.

Primary Page in DRM Diagram:
     4

Secondary Pages in DRM Diagram:
     8

Example:
 See <Octant Related Features>, <Octant Related Geometry>.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Field Elements:
    SE_Octant octant;
   /*
    *  The octant field specifies the octant that the given branch represents.
    */


-------------------------------------------------------------------------------

Class Name: Octant Related Features

Definition:
 An instance of this DRM class specifies an aggregation of
 <Feature Hierarchy> instances in which each component
 <Feature Hierarchy> represents a branch of an octant. The octant
 represented by a branch is specified by the <Octant Data> instance
 associated with that branch. The bounding region that the
 <Feature Hierarchy> components occupy is defined by the
 <Spatial Extent> component of the <Octant Related Features>
 instance.

Primary Page in DRM Diagram:
     8

Example:
 1. Consider an octree that is represented in a transmittal by
    an <Octant Related Features> instance. The lower left octant
    of the octree is a <Union Of Features> aggregated by the
    <Octant Related Features> as follows:

              <Octant Related Features>
                       <>
                       |
                       |-- <Octant Data>
                       |   octant = SE_OCTANT_LOWER_FRONTLEFT
                       |
                 <Union Of Features>

FAQS:
 Q. If an <Octant Related Features> has less than 8 components, why
    is the data being organized under an <Octant Related Features>
    at all?
 A. An <Octant Related Features> is used when an object in the hierarchy
    contains spatial components that occupy a certain octant. These
    octants might not contain <Primitive Features>, which is why this
    class can have less than 8 components.

 Q. Where is the <Spatial Extent> component?
 A. <Octant Related Features> automatically has a <Spatial Extent>
    component, because it is a <Feature Hierarchy>. However, unlike
    other classes descended from <Feature Hierarchy>,
    <Octant Related Features> has a constraint stating that the
    <Spatial Extent> component is mandatory.

Superclass: Aggregate Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Non Cyclic Aggregations
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects
     Octant Related Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or more Colour instances
	zero or more Feature Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance 
	zero or more Property Description instances
	zero or one Spatial Extent instance

Composed of (two-way)
	a bounded set of 1..8 Feature Hierarchy instances, each with a Octant Data link object

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances
	zero or more Alternate Hierarchy Related Features instances, each with a Hierarchy Data link object
	zero or more Classification Related Features instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Feature Model instance
	zero or more LOD Related Features instances, each with a Base LOD Data link object
	zero or more Octant Related Features instances, each with a Octant Data link object
	zero or more Perimeter Related Features instances, each with a Perimeter Data link object
	zero or more Quadrant Related Features instances, each with a Quadrant Data link object
	zero or more Spatial Index Related Features instances, each with a Spatial Index Data link object
	zero or more State Related Features instances, each with a State Data link object
	zero or more Time Related Features instances, each with a Time Constraints Data link object

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant, that is, each <Feature Representation> instance that
    *  exists in the component tree rooted at the given <Aggregate Feature>,
    *  shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Feature Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


-------------------------------------------------------------------------------

Class Name: Octant Related Geometry

Definition:
 An instance of this DRM class specifies an aggregation of
 <Geometry Hierarchy> instances in which each component
 <Geometry Hierarchy> represents a branch of an octant. The octant
 represented by a branch is specified by the <Octant Data> instance
 associated with that branch. The bounding region that
 the <Geometry Hierarchy> components occupy is defined by the
 <Spatial Extent> component of the <Octant Related Geometry>
 instance.

Primary Page in DRM Diagram:
     4

Example:
 1. Consider an octree that is represented in a transmittal by
    an <Octant Related Geometry> instance. The lower left octant
    of the octree is a <Union Of Primitive Geometry> aggregated by the
    <Octant Related Geometry> as follows:

              <Octant Related Geometry>
                       <>
                       |
                       |-- <Octant Data>
                       |   octant = SE_OCTANT_LOWER_FRONTLEFT
                       |
           <Union Of Primitive Geometry>

FAQS:
 Q. If an <Octant Related Geometry> has less than 8 components, why
    is the data being organized under an <Octant Related Geometry>
    at all?
 A. An <Octant Related Geometry> is used when an object in the hierarchy
    contains spatial components that occupy a certain octant. These
    octants might not contain <Primitive Geometry>, which is why this
    class can have less than 8 components.

 Q. Where is the <Spatial Extent> component?
 A. <Octant Related Geometry> automatically has a <Spatial Extent>
    component, because it is a <Geometry Hierarchy>. However, unlike
    other classes descended from <Geometry Hierarchy>,
    <Octant Related Geometry> has a constraint stating that the
    <Spatial Extent> component is mandatory.

Superclass: Aggregate Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects
     Octant Related Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance

Composed of (two-way)
	a bounded set of 1..8 Geometry Hierarchy instances, each with a Octant Data link object

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


-------------------------------------------------------------------------------

Class Name: OM Augmented 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Augmented Oblique Mercator (AOM) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. The Augmented Oblique Mercator SRF is used by a number of
    METOC data sets of importance to the modelling and simulation
    (M&S) community.

FAQS:
 Q. Where can users obtain further information on AOM?
 A. See the SRM for additional details.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Map_Projection_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: OM Surface Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Oblique Mercator (OM) Surface SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. The Oblique Mercator SRF is used by a number of METOC
    data sets of importance to the modelling and simulation
    (M&S) community.

FAQS:
 Q. Where can users obtain further information on OM?
 A. See the SRM for additional details.

Superclass: Location Surface

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

Field Elements:
    SRM_Map_Projection_Surface_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: Overload Priority Index

Definition:
 An instance of this DRM class specifies an overload management priority
 to an instance of <Model> or of <Geometry Model Instance>. This priority
 is intended to allow a modeller to indicate that certain instances of
 <Model> are more important than others, so that in an overload situation,
 the more important <Model> instances will be displayed and the <Model>
 instances of lesser importance may be simplified or dropped from the
 display. Note that the actual effect of an instance of
 <Overload Priority Index> within an application is entirely dependent
 on the application.

Primary Page in DRM Diagram:
     2

Secondary Pages in DRM Diagram:
     3
     4
     7

Example:
 1. In a SEDRIS transmittal designed for a simulation that is more
    concerned with rotary-winged aircraft than fixed-winged aircraft,
    each helicopter <Model> instance may have an
    <Overload Priority Index> instance of 1, while each airplane
    <Model> instance has an <Overload Priority Index> instance of 2.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Component of (two-way)
	zero or more Aggregate Geometry instances
	zero or more Geometry Model Instance instances
	zero or more Model instances

Field Elements:
    SE_Short_Integer overload_priority;
   /*
    *  The overload_priority field is interpreted as
    *  1 = Highest Priority, 2 = Next Highest Priority...
    */


-------------------------------------------------------------------------------

Class Name: Parallelepiped Volume Extent

Definition:
 An instance of this DRM class specifies the length and orientation of each
 of the edges of a parallelepiped volume relative to the location of the
 volume centre (which is specified separately by the aggregate of the
 <Parallelepiped Volume Extent>).

Primary Page in DRM Diagram:
     9

Example:
 1. Consider a <Bounding Volume> instance for a representation of a
    building, such that the bounding volume is specified by a
    <Parallelepiped Volume Extent> instance with:

     edge_length[0]=width,
         first <Reference Vector> instance points to the right,

     edge_length[1]=depth,
         second <Reference Vector> instance points to the back, and

     edge_length[2]=height,
         third <Reference Vector> instance points up.

FAQS:
 Q. Given the location of the centre, how do I compute the eight
    corners of the parallelepiped?
 A. If V1, V2, and V3 are the three <Reference Vector> components
    and L0 is the <Location 3D> of the <Volume>, then the vector
    equation for a parallelepiped corner C is given by:
       C = L0+(+/-0.5)*edge_length[0]*V1
             +(+/-0.5)*edge_length[1]*V2
             +(+/-0.5)*edge_length[2]*V3
 The eight combinations of three (+/-0.5) coefficients give eight corners.

 Q. Given the three edges emanating from a corner of a parallelepiped,
    how are edge lengths and <Reference Vector> instances computed?
 A. If C0 is the corner location and C[i] is the corner at the other end
    edge i, then:
       edge_length[i-1] = length of vector ( C[i]-C0 )
       and the i-th reference vector is (1/edge_length[i-1])*(C[i]-C0)
       for i=1,2,3.

Superclass: Volume Extent

Constraints:
     Publishable Object
     Parallelepiped Structure

Composed of (two-way)
	exactly 3 {ordered} Reference Vector instances 

Component of (two-way) (inherited)
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SE_Long_Float edge_length[];
   /*
    *  Each entry of the edge_length array is measured in metres,
    *  and shall be > 0.0.
    */


-------------------------------------------------------------------------------

Class Name: Perimeter Data

Definition:
 An instance of this DRM class specifies the perimeter of the region
 corresponding to the attributed object. The ordered <Location>
 components of a <Perimeter Data> instance specify the perimeter
 (outline) of the given region by specifying an implicit line
 between each pair of <Location> components (i, i+1), with a last
 implicit line connecting the last <Location> component to the
 first <Location> component.

 When a <Perimeter Data> instance is provided as a component
 of another object, the aggregate is the attributed object for
 which the perimeter is being specified. When a <Perimeter Data>
 instance is provided as a link object in a perimeter-related
 organization, the component object on the associated branch is
 the attributed object for which the perimeter is being specified.

Primary Page in DRM Diagram:
     9

Secondary Pages in DRM Diagram:
     4
     8
     11
     22

Example:
 1. Consider a thematic coverage in which the spatial extent forms
    a collection of tiles, where some of the tiles (due to
    shorelines) have irregular shapes. Consequently, this
    coverage is represented by a <Perimeter Related Featues>
    organization, in which each tile's boundary can be correctly
    represented by a <Perimeter Data>.

    Note that while a rectangular tile can be described by a
    <Perimeter Data> instance with 4 <Location> instances, an
    irregularly shaped tile may require a much larger number of
    <Location> instances.

 2. Consider a polygonal representation of a region of terrain,
    organized into tiles based on political boundaries, such as
    different provinces within a country or different countries.
    Many of the tiles in this example have irregular shapes,
    so each tile is organized under a separate <Geometry Hierarchy>
    component of a <Perimeter Related Geometry>, with the
    corresponding <Perimeter Data> describing the boundary of that
    tile.

 3. See also <Perimeter Related Geometry>.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Non Self Overlapping Perimeter Data Locations

Composed of (two-way)
	3 or more {ordered} Location instances 

Component of (two-way)
	zero or more Aggregate Feature instances
	zero or more Aggregate Geometry instances
	zero or more Sound Instance instances

-------------------------------------------------------------------------------

Class Name: Perimeter Related Feature Topology

Definition:
 An instance of this DRM class is a <Feature Topology Hierarchy>
 that spatially organizes its components into a collection of
 (potentially) irregularly shaped regions, each defined by a
 <Perimeter Data> instance.

Primary Page in DRM Diagram:
     11

Example:
 1. The geographic extent of a thematic coverage might be divided up into a
    collection of tiles.  Due to political boundaries or shorelines, some of
    these tiles might have irregular shapes.  The <Feature Topology>
    instances contained within each tile would be organized into one of the
    components of a <Perimeter Related Feature Topology> instance.

FAQS:
 Q. May the regions defined by the components of a <Perimeter Related Feature
    Topology> instance overlap?

 A. No.  The regions defined by the components of a <Perimeter Related
    Feature Topology> instance should fully partition the topological surface.

 Q. May the same <Feature Topology> instance be contained within more than one
    of the components of a <Perimeter Related Feature Topology> instance?

 A. No.  The organization of <Feature Topology> instances is strict, such that
    each <Feature Topology> instance shall be located within the region
    defined by a single component.

Superclass: Feature Topology Hierarchy

Constraints:
     Publishable Object
     Distinct Link Objects
     Perimeter Related Organizing Principle

Composed of (two-way)
	one or more Union Of Feature Topology instances, each with a Perimeter Data link object

Component of (two-way) (inherited)
	zero or more Aggregate Feature instances

Inherited Field Elements:
    SE_Feature_Topology_Level feature_topology_level;
   /*
    *  The feature_topology_level field specifies the level of
    *  feature topology that is present within the hierarchy
    *  represented by the given <Feature Topology Hierarchy>
    *  instance.
    */


-------------------------------------------------------------------------------

Class Name: Perimeter Related Features

Definition:
 An instance of this DRM class is an <Aggregate Feature> that spatially
 organizes its component <Feature Hierarchy> instances into a collection
 of (potentially) irregularly shaped regions, each defined by a
 <Perimeter Data> instance. That is, each component <Feature Hierarchy>
 is contained within the perimeter area specified by the <Perimeter Data>
 associated with that component.

Primary Page in DRM Diagram:
     8

Example:
     None.

FAQS:
 Q. May the regions defined by the components of a <Perimeter Related
    Features> instance overlap?

 A. See <Perimeter Related Organizing Principle>.

 Q. May the same <Feature Representation> be contained within more
    than one of the components of a <Perimeter Related Features> instance?

 A. See <Perimeter Related Organizing Principle>.

 Q. Does each of the components of a <Perimeter Related Features> instance
    form an independent topological surface?

 A. Normally, yes.  In this case, each component <Feature Hierarchy> would
    have its own <Feature Topology Hierarchy>. However, the
    <Feature Topology> instances in all the components may also form a single
    topological surface, in which case only the <Perimeter Related Features>
    instance itself would have such a topology hierarchy.

Superclass: Aggregate Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Non Cyclic Aggregations
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects
     Perimeter Related Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or more Colour instances
	zero or more Feature Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance 
	zero or more Property Description instances
	zero or one Spatial Extent instance

Composed of (two-way)
	one or more Feature Hierarchy instances, each with a Perimeter Data link object

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances
	zero or more Alternate Hierarchy Related Features instances, each with a Hierarchy Data link object
	zero or more Classification Related Features instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Feature Model instance
	zero or more LOD Related Features instances, each with a Base LOD Data link object
	zero or more Octant Related Features instances, each with a Octant Data link object
	zero or more Perimeter Related Features instances, each with a Perimeter Data link object
	zero or more Quadrant Related Features instances, each with a Quadrant Data link object
	zero or more Spatial Index Related Features instances, each with a Spatial Index Data link object
	zero or more State Related Features instances, each with a State Data link object
	zero or more Time Related Features instances, each with a Time Constraints Data link object

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant, that is, each <Feature Representation> instance that
    *  exists in the component tree rooted at the given <Aggregate Feature>,
    *  shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Feature Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


-------------------------------------------------------------------------------

Class Name: Perimeter Related Geometry

Definition:
 An instance of this DRM class is an <Aggregate Geometry> that spatially
 organizes its component <Geometry Hierarchy> instances into a collection
 of (potentially) irregularly shaped regions, each defined by a
 <Perimeter Data> instance. That is, each component <Geometry Hierarchy>
 is contained within the perimeter area specified by the <Perimeter Data>
 associated with that component.

Primary Page in DRM Diagram:
     4

Example:
     None.

FAQS:
 Q. May the regions defined by the components of a <Perimeter Related
    Geometry> instance overlap?

 A. See <Perimeter Related Organizing Principle>.

 Q. May the same <Geometry Representation> be contained within more than one of the
    components of a <Perimeter Related Geometry> instance?

 A. See <Perimeter Related Organizing Principle>.

 Q. Does each of the components of a <Perimeter Related Geometry> instance
    form an independent topological surface?

 A. Normally, yes.  In this case, each component <Geometry Hierarchy>
    would have its own <Geometry Topology Hierarchy>. However, the
    <Geometry Topology> instances in all the components may also form
    a single topological surface, in which case only the
    <Perimeter Related Geometry> instance itself would have such a
    topology hierarchy.

Superclass: Aggregate Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects
     Perimeter Related Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance

Composed of (two-way)
	one or more Geometry Hierarchy instances, each with a Perimeter Data link object

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


-------------------------------------------------------------------------------

Class Name: Perimeter Related Geometry Topology

Definition:
 An instance of this DRM class is a <Geometry Topology Hierarchy> that
 spatially organizes its components into a collection of (potentially)
 irregularly shaped regions, each defined by a <Perimeter Data> instance.

Primary Page in DRM Diagram:
     11

Example:
     None.

FAQS:
     None.

Superclass: Geometry Topology Hierarchy

Constraints:
     Publishable Object
     Distinct Link Objects
     Perimeter Related Organizing Principle

Composed of (two-way)
	one or more Union Of Geometry Topology instances, each with a Perimeter Data link object

Component of (two-way) (inherited)
	zero or more Aggregate Geometry instances

Inherited Field Elements:
    SE_Geometry_Topology_Level geometry_topology_level;
   /*
    *  The geometry_topology_level field specifies the level of
    *  geometry topology that is present within the hierarchy
    *  represented by the given <Geometry Topology Hierarchy>
    *  instance.
    */


-------------------------------------------------------------------------------

Class Name: Point

Definition:
 An instance of this DRM class specifies an attributed location,
 which conceptually has no spatial extents.

Primary Page in DRM Diagram:
     5

Secondary Pages in DRM Diagram:
     13

Example:
 1. The abstract representation of the sun, a <Point> in space from which
    the light emanates.
 2. The headlight of a jeep as viewed from a kilometre away.

FAQS:
     None.

Superclass: Primitive Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Continuous LOD Restrictions
     Image Mapping Functions and Texture Coordinates
     Nested Primitive Geometry

Associated with (two-way)
	zero or one Geometry Node instance 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or one Presentation Domain instance
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or more Tack Point instances
	zero or one Union Of Primitive Geometry instance 

Composed of (two-way)
	zero or one Conformal Behaviour instance
	one Location instance
	zero or more Reference Vector instances
	zero or more {ordered} Texture Coordinate instances

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Primitive Geometry instances

-------------------------------------------------------------------------------

Class Name: Point Feature

Definition:
 An instance of this DRM class specifies a <Primitive Feature> for which
 the spatial information needed for the representation can be abstracted
 to a single topologically significant location. This is sometimes
 referred to as a "zero-dimensional" location, since the topology
 associated with a <Point Feature> does not provide length, width,
 or height information.

Primary Page in DRM Diagram:
     8

Secondary Pages in DRM Diagram:
     12

Example:
 1. Consider a well represented as a <Point Feature>. The <Point Feature>
    has a <Classification Data> classifying it as a well, an associated
    <Feature Node> specifying its location, and <Property Value>
    components specifying its depth below the terrain surface and
    the potability of the water it contains.

 2. Consider a road interchange represented as a <Point Feature>. The
    <Point Feature> has a <Classification Data> classifying it as
    ECC_ROAD_INTERCHANGE, and an associated <Feature Node> specifying
    its location. In addition, the <Feature Node> in this example is
    associated with some <Feature Edge> instances that are part of
    the topology of some <Linear Feature> instances representing the
    roads in question.

 3. Consider a small building represented as a <Point Feature>.  It has a
    <Feature Node> that defines its location, <Classification Data> that
    identifies it as a building, and a set of <Property Value> components
    that describe its characteristics, such as its height and its
    building functional category.

FAQS:
 Q.  Can a <Point Feature> consist of multiple <Feature Node> instances?

 A.  No.  A <Point Feature> shall consist of only a single <Feature Node>.

Superclass: Primitive Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated with (two-way)
	one Feature Node instance 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Presentation Domain instance 
	zero or one Spatial Extent instance

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances

-------------------------------------------------------------------------------

Class Name: Polar 2D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Polar 2D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
     None.

FAQS:
     None.

Superclass: Location 2D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

Field Elements:
    SRM_Polar_2D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: Polygon

Definition:
 An instance of this DRM class specifies a bounded portion of a plane,
 defined by a set of three or more <Vertex> instances listed in
 counter-clockwise order.  The final segment connecting the last
 <Vertex> instance to the first <Vertex> instance is implicit, not
 explicit; that is, first <Vertex> instance is not duplicated to also
 appear as the last <Vertex> instance of the <Polygon> instance).

Primary Page in DRM Diagram:
     5

Secondary Pages in DRM Diagram:
     13

Example:
 1. One of the surfaces representing the geometry of a vehicle.

FAQS:
     None.

Superclass: Surface Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Continuous LOD Restrictions
     Image Mapping Functions and Texture Coordinates
     Nested Primitive Geometry
     Polygon As Bounded Plane

Associated with (two-way)
	a bounded set of 0..2 {ordered} Geometry Face instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or one Presentation Domain instance
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or more Tack Point instances
	zero or one Union Of Primitive Geometry instance 

Composed of (two-way)
	zero or one Polygon Control Link instance
	zero or more Reference Vector instances
	3 or more {ordered} Vertex instances

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Primitive Geometry instances

Component of (two-way)
	zero or more Polyhedron instances

Field Elements:
    SE_Polygon_Flag polygon_flags;
   /*
    *  The polygon_flags field specifies the set of SE_Polygon_Flag
    *  tokens applicable to the given <Polygon> instance.
    */


-------------------------------------------------------------------------------

Class Name: Polygon Control Link

Definition:
 An instance of this DRM class is a <Control Link> instance that
 has been specialized to control the polygon_flags (in a set) in
 one or more instances of <Polygon>.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     5

Example:
 1. The Invisible flag on a <Polygon> is set to SE_TRUE.
    A <Polygon Control Link> can reset some polygon_flags values.
    In this case, it could set the Invisible flag
    to be SE_FALSE.

FAQS:
 Q. Why isn't there a single <Polygon Control Link> field to
    control the polygon_flags field of the affected <Polygon>
    instance(s)?

 A. The polygon_flags field of <Polygon> is a set, and users
    of <Polygon Control Link> are not trying to change the set
    in question. What users are doing is setting (or clearing)
    individual boolean flags within the set.

    Consequently, instead of having a single index field
    for the polygon_flags field, <Polygon Control Link>
    provides separate index fields for each flag that
    can be manipulated, so that each can be driven by a
    separate controlling <Expression> instance.

 Q. Why aren't there <Polygon Control Link> fields for each of
    the individual flags within polygon_flags?

 A. Simple! No one has asked to be able to control the other flags.
    If you'd like to be able to control another flag, we'd be
    happy to consider any change request you might offer.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more Polygon instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Unsigned hat_test_expr_index;
   /*
    *  If non-zero, the value of the hat_test_expr_index field is
    *  the index of an ordered <Expression>
    *  component of the given <Polygon Control Link> instance. The
    *  specified <Expression> instance shall be boolean-valued, and
    *  shall control the inclusion or exclusion of Hat_Test within the
    *  polygon_flags field of the affected <Polygon> instances such
    *  that SE_TRUE means that Hat_Test shall be added to polygon_flags,
    *  and SE_FALSE that Hat_Test shall be cleared from polygon_flags.
    *
    *  If hat_test_expr_index is 0, the Hat_Test portion of the
    *  polygon_flags of the affected <Polygon> instances is not
    *  affected.
    */

    SE_Integer_Unsigned collidible_expr_index;
   /*
    *  If non-zero, the value of the collidible_expr_index field
    *  specifies the index of an ordered <Expression>
    *  component of the given <Polygon Control Link> instance. The
    *  specified <Expression> instance shall be boolean-valued, and
    *  shall control the inclusion or exclusion of  Collidible within
    *  the polygon_flags field of the affected <Polygon> instances
    *  such that SE_TRUE means that Collidible shall be added to the
    *  polygon_flags, and SE_FALSE that Collidible shall be cleared
    *  from the polygon_flags.
    *
    *  If collidible_expr_index is 0, the Collidible portion of the
    *  polygon_flags of the affected <Polygon> instances is not
    *  affected.
    */

    SE_Integer_Unsigned invisible_expr_index;
   /*
    *  If non-zero, the value of the invisible_expr_index field
    *  specifies the index of an ordered <Expression>
    *  component of the given <Polygon Control Link> instance. The
    *  specified <Expression> instance shall be boolean-valued, and
    *  shall control the inclusion or exclusion of Invisible within
    *  the polygon_flags field of the affected <Polygon> instances
    *  such that SE_TRUE means that Invisible shall be added to the
    *  polygon_flags, and SE_FALSE that Invisible shall be cleared
    *  from the polygon_flags.
    *
    *  If invisible_expr_index is 0, the Invisible portion of the
    *  polygon_flags of the affected <Polygon> instances is not
    *  affected.
    */

    SE_Integer_Unsigned laser_range_finding_expr_index;
   /*
    *  If non-zero, the value of the laser_range_finding_expr_index
    *  field is the index of an ordered <Expression>
    *  component of the given <Polygon Control Link> instance. The
    *  specified <Expression> instance shall be boolean-valued, and
    *  shall control the inclusion or exclusion of Laser_Range_Finding
    *  within the polygon_flags field of the affected <Polygon>
    *  instances such that SE_TRUE means that Laser_Range_Finding shall
    *  be added to the polygon_flags, and SE_FALSE that
    *  Laser_Range_Finding shall be cleared from the polygon_flags.
    *
    *  If laser_range_finding_expr_index is 0, the
    *  Laser_Range_Finding portion of the polygon_flags of
    *  the affected <Polygon> instances is not affected.
    */


-------------------------------------------------------------------------------

Class Name: Polyhedron

Definition:
 An instance of this DRM class is a <Volume Geometry> that encloses
 a bounded region of three-dimensional space, such as a building or a
 room within a building.

Primary Page in DRM Diagram:
     5

Secondary Pages in DRM Diagram:
     13

Example:
 1. Consider a <Polyhedron> representing a building. It has a collection
    of component <Polygons>, which defines its shape; an associated
    <Geometry Volume>, which defines its topological relationships; a
    <Classification Data> component that classifies it as an
    ECC_BUILDING; <Property Value> components that describe its
    characteristics, such as material composition, and a <Label> that
    identifies it as "The Empire State Building".

FAQS:
 Q. Is Level 5 feature topology required in order for <Polyhedron>
    instances to exist?
 A. No. In order for <Polyhedrons> to exist, the SRF must be
    three-dimensional, and at least four <Polygon> instances
    that enclose a region of space must exist.

Superclass: Volume Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Continuous LOD Restrictions
     Image Mapping Functions and Texture Coordinates
     Nested Primitive Geometry
     Polyhedron Structure

Associated with (two-way)
	one Geometry Volume instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or one Presentation Domain instance
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or more Tack Point instances
	zero or one Union Of Primitive Geometry instance 

Composed of (two-way)
	4 or more Polygon instances

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Primitive Geometry instances

-------------------------------------------------------------------------------

Class Name: Positional Light

Definition:
 An instance of this DRM class is a <Base Positional Light> that radiates
 in all directions from a specified point in 3D space, affecting only
 objects within the sphere of influence centred at that point and
 specified by the value of its radius field.

Primary Page in DRM Diagram:
     21

Example:
 1. A streetlight on a pole.

FAQS:
     None.

Superclass: Base Positional Light

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one Ambient Colour instance
	one Diffuse Colour instance
	zero or one Light Source Control Link instance 
	one Specular Colour instance
	one Location 3D instance 

Component of (two-way) (inherited)
	one or more Aggregate Geometry instances

Inherited Field Elements:
    SE_Boolean apply_to_children;
   /*
    *  For a <Light Source> instance (that is, an instance of one of the
    *  concrete classes descended from the class) that is a component of
    *  some <Aggregate Geometry>, apply_to_children provides a mechanism
    *  for limiting the scope of the <Light Source>. If apply_to_children
    *  is SE_TRUE, only <Primitive Geometry> in the component tree of those
    *  <Aggregate Geometry> instances are affected by the given
    *  <Light Source>. If apply_to_children is SE_FALSE, the <Light Source>
    *  is not limited to the scope of those <Aggregate Geometry> instances
    *  and thus applies globally.
    */

    SE_Boolean override_positional_lights;
   /*
    *  For a <Light Source> instance that is a component of some
    *  <Aggregate Geometry>, override_positional_lights provides a
    *  mechanism to indicate with a value of SE_TRUE that the effect of the
    *  given <Light Source> overrides that of any <Base Positional Light>
    *  instances that would have otherwise applied to that
    *  <Aggregate Geometry> - for example, if the given <Light Source> is
    *  so close to the affected <Geometry Representation> that the
    *  <Base Positional Light> effects would be negligible. If
    *  override_positional_lights = SE_FALSE, the effect of the
    *  given <Light Source> is combined with that
    *  of any <Base Positional Light> instances that are already in effect.
    */

    SE_Boolean override_infinite_lights;
   /*
    *  For a <Light Source> instance (that is, an instance of one of the
    *  concrete classes descended from the class) that is a component of
    *  some <Aggregate Geometry>, override_infinite_lights provides a
    *  mechanism to indicate with a value of SE_TRUE that the effect of the
    *  given <Light Source> overrides that of any <Infinite Light>
    *  instances that would have otherwise applied to that
    *  <Aggregate Geometry>. If override_infinite_lights = SE_FALSE,
    *  the effect of the given <Light Source> is combined with that
    *  of any <Infinite Light> instances that are already in effect.
    */

    SE_Boolean active_light_value;
   /*
    *  A value of SE_TRUE for the active_light_value field indicates
    *  that the light is on, while a value of
    *  SE_FALSE indicates that the light is off. For a <Light Source>
    *  with a <Light Source Control Link> instance as a component,
    *  this is the default state of the light.
    */

    SE_Float radius;
   /*
    *  The radius field, which is specified in metres, together with
    *  the <Location 3D> component specifies the zone of influence
    *  of the given <Base Positional Light> instance.
    */

    SE_Long_Float constant_attenuation_factor;
   /*
    *  The constant_attenuation_factor field is the constant "a"
    *  in the attenuation quadratic (a + bd + cd**2).
    */

    SE_Long_Float linear_attenuation_factor;
   /*
    *  The linear_attenuation_factor field is the constant "b"
    *  in the attenuation quadratic (a + bd + cd**2).
    */

    SE_Long_Float quadratic_attenuation_factor;
   /*
    *  The quadratic_attenuation_factor field is the constant "c"
    *  in the attenuation quadratic (a + bd + cd**2).
    */


-------------------------------------------------------------------------------

Class Name: Predefined Function

Definition:
 An instance of this DRM class is a <Function> for which the
 function being used to determine the value of the expression is
 one of those enumerated by SE_Predefined_Function.

Primary Page in DRM Diagram:
     16

Example:
 1. See <Property Table Reference Control Link>, example 1.

FAQS:
 Q. Why isn't <my favorite function> included in the
    SE_Predefined_Function?
 A. Simple!  We didn't think of it.  If you'd like to see it, we'd be
    happy to consider any change request you might offer.

Superclass: Function

Constraints:
     Publishable Object
     Non Cyclic Aggregations

Composed of (two-way) (inherited)
	zero or more {ordered} Expression instances 

Composed of (two-way)
	zero or one Property Table Reference instance

Component of (two-way) (inherited)
	zero or more Control Link instances
	zero or more Feature Model Instance instances, each with a Model Instance Template Indices link object
	zero or more Function instances
	zero or more Geometry Model Instance instances, each with a Model Instance Template Indices link object

Inherited Field Elements:
    EDCS_Attribute_Value_Type value_type;
   /*
    *  The value_type of a <Function> instance returns the type of value
    *  produced when the <Function> instance is evaluated for its arguments.
    */


Field Elements:
    SE_Predefined_Function function;
   /*
    *  For a <Predefined Function> instance, the function field specifies
    *  the function to be used to determine the value of the expression
    *  when it is evaluated.
    */


-------------------------------------------------------------------------------

Class Name: Presentation Domain

Definition:
 An instance of this DRM class specifies the set of sensor domains
 in which the attributed object is applicable.

Primary Page in DRM Diagram:
     14

Secondary Pages in DRM Diagram:
     4
     5
     8
     19
     21
     22

Example:
     None.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Component of (two-way)
	zero or more Aggregate Feature instances
	zero or more Aggregate Geometry instances
	zero or more Colour instances
	zero or more Colour Table instances
	zero or more Image instances
	zero or more Image Mapping Function instances
	zero or more Primitive Feature instances
	zero or more Primitive Geometry instances
	zero or more Property Set instances
	zero or more Rendering Properties instances

Field Elements:
    SE_Presentation_Domain presentation_domain;
   /*
    *  The presentation_domain field specifies the set of
    *  SE_Presentation_Domain tokens specifying the
    *  sensor domains represented by the given <Presentation Domain>
    *  instance.
    */


-------------------------------------------------------------------------------

Class Name: Primitive Colour

Definition:
 An instance of this DRM class specifies a single colour, consisting
 of individual ambient, diffuse, emissive, and specular components.

 Generally speaking, to determine the colour of an object illuminated by a
 light source X, combine
    the <Ambient Colour> with the ambient component of X,
    the <Diffuse Colour> with the diffuse component of X,
    the <Specular Colour> with the specular component of X,
 add any intensity due to the <Emissive Colour> (which isn't affected by X.)

Primary Page in DRM Diagram:
     14

Example:
 1. Consider a <Geometry Model Instance> of a computer monitor, placed on
    top of a <Geometry Model Instance> of a desk. A <Positional Light>
    affecting the two objects is located so that the illumination is directed
    from above. (Assume that these instances are present within an
    environment simulating an ordinary room.)

        Each <Polygon> within the desk <Model> has an <Inline Colour>
    component, which in turn has a <Primitive Colour> with both an
    <Ambient Colour> and a <Diffuse Colour> component. Due to the
    <Diffuse Colour> component, the area of the desk under the monitor
    that's visible to the observer appears to be in shadow. However, the
    shadowy area is not totally blacked out, because the <Ambient Colour>
    simulates the effect due to light reflected from the walls, ceiling,
    and so on that would reach that area.

 2. Consider a <Line> used to simulate a line of runway lights. The <Line>'s
    <Colour> would resolve to a <Primitive Colour> consisting primarily
    (possibly completely) of an <Emissive Colour>, since the <Line> is
    pretending to emit light.

 3. Consider a collection of <Polygon> instances used to represent the
    surface of a sunlit lake. These <Polygon> instances' <Colour>
    components resolve to <Primitive Colour> instances consisting of
    <Ambient Colour>, <Diffuse Colour>, and <Specular Colour> components.

        The <Ambient Colour> prevents any <Polygon> instances in shadow from
    appearing black, while the <Diffuse Colour> provides most of the normal
    appearance of a lit object. However, since water is a reflective
    substance, its colour requires a <Specular Colour> component to
    simulate light reflected from the water.

FAQS:
 Q. Does SEDRIS use the OpenGL lighting model?
 A. No, although the terminology is similar. SEDRIS handles transparency
    somewhat differently than OpenGL does, among other things. For a
    description of the OpenGL lighting model, see [OPENGL], Chapter 5
    "Lighting".

 Q. Consider a data provider with a very simple illumination model, with
    no objects that glow in the dark or otherwise emit light, and no
    reflections. How is this represented in SEDRIS?

 A. The question has eliminated any concerns about <Emissive Colour>
    and <Specular Colour> components -- the <Primitive Colours> won't have
    them. Having said that, the data provider is down to 2 choices --
    <Ambient Colour> and <Diffuse Colour>. Here is a simplified description
    of the effects each will provide (i.e., considering only 1 light source).
       <Ambient Colour> is independent of the positions of either the
    light source or the observer. That is, an object with only <Ambient
    Colour> appears uniformly lit across its surface, regardless of where
    the light source is or where the observer is. (This can create a very
    artificial-looking effect, since it distorts some of the visual
    cues that provide depth perception.)
       <Diffuse Colour>, on the other hand, depends on the angle of the
    lit object to the light source (although not on the observer's
    position). An object with only <Diffuse Colour> will appear to be
    lighted on the side facing the light source, while the opposite
    side will be in shadow. The effect is consistent with the visual
    cues used to determine shape-from-shading in various image analysis
    methods.
        Note that a <Primitive Colour> can have both an <Ambient Colour>
    and a <Diffuse Colour> component. This indicates that even if part
    of the object is in shadow, it is still somewhat visible. See example #1.

 Q. Where are the RGB values in all this?!?
 A. Each of the components of <Primitive Colour> has, in turn, a <Colour Data>
    component, which is either an <RGB Colour>, an <HSV Colour>, or a
    <CMY Colour> instance, depending on which colour model is being used.

 Q. Why do <Colour Table> instances have <Primitive Colour> components
    instead of <Inline Colour> components?
 A. <Colour Table> instances used to be composed of <Inline Colour>
    instances, but problems arose since both <Colour Index> and
    <Inline Colour> instances can have <Translucency> components. When a
    <Colour Index> instance that has a <Translucency> component refers to
    an entry in a <Colour Table> instance, the interpretation is clearer
    if the <Colour Table> instance's entry cannot specify any additional
    <Translucency> instances. Consequently, <Primitive Colour> exists so
    that "just the colour" can be put into a <Colour Table> instance.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	zero or one Ambient Colour instance
	zero or one Diffuse Colour instance
	zero or one Emissive Colour instance
	zero or one Specular Colour instance

Component of (two-way)
	zero or one Colour Table instance
	zero or more Inline Colour instances

-------------------------------------------------------------------------------

Abstract Class Name: Primitive Feature

Definition:
 An instance of a concrete class derived from this DRM class is a 
 <Feature Representation> instance that is not hierarchically structured.

Primary Page in DRM Diagram:
     8

Secondary Pages in DRM Diagram:
     23

Example:
 See individual subclasses for examples.

FAQS:
 Q. What determines whether a <Feature Representation> is represented
    as a <Point Feature>, a <Linear Feature>, or an <Areal Feature>?

 A. This is primarily determined by the dimensions of the
    <Feature Representation>, in
    conjunction with the nature of the <Feature Representation>,
    the resolution of the source
    imagery from which the <Feature Representation> was extracted,
    and the intended use of the
    extracted feature data.  A long, narrow feature will be extracted as a
    <Linear Feature>, representing the centreline of the actual feature, with
    a width field.  A very small feature will be extracted as a <Point
    Feature>, with length and width fields, or possibly a radius
    field.

Superclass: Feature Representation

Subclasses:
     Areal Feature
     Linear Feature
     Point Feature
     Volumetric Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance

Composed of (two-way)
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Presentation Domain instance 
	zero or one Spatial Extent instance

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances

-------------------------------------------------------------------------------

Abstract Class Name: Primitive Geometry

Definition:
 An instance of a concrete class derived from this DRM class specifies
 data to describe a a <Geometry Representation> instance.

Primary Page in DRM Diagram:
     5

Secondary Pages in DRM Diagram:
     3
     4
     18
     23

Example:
 1. In processing subfaces, traversal and drawing order of
    the objects is depth first.

 <Union Of Primitive Geometry>
             |
             p1
             |
 <Union Of Primitive Geometry>
              |
 |---------------------------------------------|
 p2                                           p3
 |                                             |
 <Union Of Primitive Geometry>    <Union Of Primitive Geometry>
        |                                      |
     |----|                               |----|----|
     p4   p5                              p6   p7   p8

FAQS:
 Q. How can the <Polygon> instances be retrieved in the right order?

 A. In order to consume, set up a component iterator for
    <Primitive Geometry> on the first <Union Of Primitive Geometry>
    with search depth of 0 and traversal method to SE_TRAV_ORDR_DEPTH_FIRST.
    This will return the <Polygon> instances in their rendering order.

 Q. What happens to the context of <Union Of Primitive Geometry>
    components of <Continuous LOD Geometry> instances?

 A. As a constraint, <Union Of Primitive Geometry> components of
    <Continuous LOD Geometry> instances are not allowed
    to have other <Union Of Primitive Geometry> instances within
    the scope of any of their <Primitive Geometry> components,
    a mechanism provided to allow a data provider to specify
    subfacing information. A terrain <Polygon> usually does not have
    subfaces. If there is a terrain <Polygon> within another
    coplanar <Polygon>, then a <Rendering Priority Level> instance
    can be provided to determine the correct drawing order.  This
    is usually a layering issue, wherein soil is usually rendered
    first, then vegetation, then water, and so on.

 Q. What happens if a <Rendering Priority Level> is
    encountered under a subfaced <Polygon>?

 A. <Rendering Priority Level> should be handled normally.
    If one is encountered, then the siblings for that
    <Polygon> should be examined and those siblings with a
    lower rendering priority should be processed before
    those with a higher rendering priority.

 Q. What should the ordering_reason be for the
    <Union Of Primitive Geometry>?

 A. The ordering_reason could still be valid for any of
    the enumerants currently in SE_Ordering_Reason.
    The actual drawing order is explicitly defined using a
    depth-first search for <Primitive Geometry>.

 Q. When a <Primitive Geometry> contains a
    <Union Of Primitive Geometry> for nesting reasons, what
    are the restrictions on the nested <Primitive Geometry>
    instances?
 A. See <<Nested Primitive Geometry>>.

Superclass: Geometry Representation

Subclasses:
     Finite Element Mesh
     Linear Geometry
     Point
     Surface Geometry
     Volume Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Continuous LOD Restrictions
     Image Mapping Functions and Texture Coordinates
     Nested Primitive Geometry

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances

Composed of (two-way)
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or one Presentation Domain instance
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or more Tack Point instances
	zero or one Union Of Primitive Geometry instance 

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance

Component of (two-way)
	zero or more Union Of Primitive Geometry instances

-------------------------------------------------------------------------------

Class Name: Primitive Summary Item

Definition:
 An instance of this DRM class specifies a common pattern of
 primitive objects that appear in the scope being summarized,
 which may be either a <Model> instance or an <Environment Root>
 instance. A <Primitive Summary Item> instance represents one or
 more instances of the class specified by its drm_class field
 that conform to the specified pattern.

 A <Primitive Summary Item> instance may represent only instances
 of <Primitive Geometry>, <Primitive Feature>, their subclasses,
 and the classes that may appear in their component trees.
 <Primitive Summary Item> instances are combined to form a hierarchy
 mirroring that of the primitive instances that they represent, such
 that the summary is a compressed form of the actual hierarchy.

 Since a <Primitive Summary Item> instance may represent many instances
 of the primitive that it summarizes, it has a multiplicity field,
 indicating how many instances of the pattern it represents. Note that
 all instances represented by a given <Primitive Summary Item> instance
 shall conform exactly to that pattern, up to the point where the
 summary's pattern ceases to provide specifics.

Primary Page in DRM Diagram:
     20

Secondary Pages in DRM Diagram:
     1
     2

Example:
 1. Summary of a common <Polygon> structure pattern within a <Model>.

    In this case, the pattern indicates that a data consumer can expect
    to see triangles. Note that other patterns can be present; in this
    particular example, the <Model> contains not only triangles,
    but other types of <Polygon> instances, such as quadrilaterals and
    even 5-sided <Polygon> instances. The <Primitive Summary Item>
    instances are just indicating common patterns; they're not enumerating
    all the patterns that are present.

          <Model> <>--------------------------  <Primitive Summary Item>
            <>                                   (Polygon, 1)
             |                                       <>
       <Union Of Geometry Hierarchy>                  |
            <>                                  <Primitive Summary Item>
             +-----------------------+           (Vertex, 3)
             |                       |
       <Union Of             (and so on)
        Primitive Geometry>
            <>
             |
      +------+------+------+------+--------+
      |             |                      |
  <Polygon>     <Polygon>               Polygon
     <>            <>                      <>
      |             |                       |
  +---+---+     +---+---+---+---+       +---+---+---+
  |   |   |     |   |   |   |   |       |   |   |   |
 Vtx Vtx Vtx   Vtx Vtx Vtx Vtx Vtx     Vtx Vtx Vtx Vtx

FAQS:
 Q. Suppose that as a consumer, I encounter a <Primitive Summary Item>
    as a component of an <Environment Root>, which specifies a pattern
    of usage for instances of a given class. Does this mean that *all*
    instances of that class in the scope of the given <Environment Root>
    shall comply with the specified pattern?
 A. No; it only indicates that in this particular scope, the specified
    pattern is very common.

    For instance, consider an <Environment Root> with a
    <Primitive Summary Item> describing a texture-mapped triangular
    <Polygon> - that is, a <Polygon> with an <Image Mapping Function>
    component and 3 <Vertex> components. All that this means is that
    <Polygon> instances of that description are common in the scope of
    that <Environment Root>.

 Q. Can a given class' usage be simultaneously and unambiguously
    summarized by a <DRM Class Summary Item> and a
    <Primitive Summary Item> in the same scope?
 A. Yes, because <DRM Class Summary Item> and <Primitive Summary Item>
    summarize different aspects of usage. <DRM Class Summary Item>
    summarizes the *presence* of instances of the specified class,
    while <Primitive Summary Item> represents common *patterns*
    of objects in which instances of the specified class appear.

Superclass: Base Summary Item

Constraints:
     Publishable Object
     Primitive Summary Item Constraints

Composed of (two-way)
	zero or more Primitive Summary Item instances

Composed of (two-way metadata) (inherited)
	zero or more EDCS Use Summary Item instances 

Component of (two-way)
	zero or one Environment Root instance
	zero or one Model instance
	zero or more Primitive Summary Item instances

Inherited Field Elements:
    SE_DRM_Class drm_class;
   /*
    *  The drm_class field indicates the DRM class of the object(s)
    *  represented by the given <Base Summary Item> instance.
    */


Field Elements:
    SE_Integer_Unsigned multiplicity;
   /*
    *  The multiplicity field indicates the number of identical instances
    *  represented.
    */


-------------------------------------------------------------------------------

Class Name: Process Step

Definition:
 An instance of this DRM class specifies information about
 an event in the creation process for the data specified
 by the scope.

Primary Page in DRM Diagram:
     20

Example:
 1. Filtering of feature data based on FACC feature code using ARC/INFO.

 2. Polygonalization of feature data using S1000.

FAQS:
 Q. What is the purpose of this class?
 A. This class provides a mechanism for documenting the processes used in
    environmental database generation.  In conjunction with the
    <Source> class, this class can be used to construct a network-like
    description of the database generation process, consisting of processing
    steps linked by their input and output data.  This class allows the date
    and time that each process was performed to be recorded, as well as a
    point of contact for each processing step.  Each <Process Step> instance
    can be associated with a collection of <Source> instances, each of which
    is labelled as being either an input or an output.  Thus each
    <Process Step> instance may use multiple inputs and produce multiple
    outputs.  At a minimum, the overall database generation process (such as
    SOF ATS) should be identified.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Distinct Link Objects
     Mandatory Metadata
     Non Crossing Associations

Associated to (one-way)
	zero or more Source instances, each with a In Outs link object 

Composed of (two-way)
	one Absolute Time instance 

Composed of (two-way metadata)
	zero or more Responsible Party instances 

Component of (two-way)
	one Lineage instance

Field Elements:
    SE_String description;
   /*
    *  The description field specifies an explanation of the event,
    *  including related parameters or tolerances.
    */

    SE_String rationale;
   /*
    *  If supplied, the rationale field states the requirement or purpose
    *  for the given <Process Step> instance.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Property

Definition:
 An instance of a concrete class derived from this DRM class specifies
 a property of the attributed SEDRIS object in terms of
 a) its meaning (specified using an EAC, SE_Index_Code,
    or SE_Variable_Code),
 b) its units (such as metres),
 c) and its data storage type (such as EDCS_Integer).

 See individual subclasses for details on the uses of
 <Property> instances.

Primary Page in DRM Diagram:
     6

Secondary Pages in DRM Diagram:
     23

Example:
 See specific subclasses for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     Property Description
     Property Value

Constraints:
     Publishable Object
     Property Characteristic Restrictions
     Property Meaning Restrictions

Composed of (two-way)
	zero or more Property Characteristic instances

Field Elements:
    SE_Property_Code meaning;
   /*
    *  The meaning field specifies the meaning of the given
    *  <Property> instance.
    */


-------------------------------------------------------------------------------

Class Name: Property Characteristic

Definition:
 An instance of this DRM class specifies additional information about
 how to use, interpret or further specify an instance of a <Property>
 subclass. It consists of an enumeration that designates the type of
 information, and a value for the designated attribute.

Primary Page in DRM Diagram:
     6

Example:
 1.  A <Model> classified as ECC_BRIDGE has a <Property Value> representing
     its length. The <Property Value> has two <Property Characteristic>
     components to specify maximum length and length precision:

     First <Property Characteristic>
         meaning                           = EVC_MAXIMUM_VALUE
         characteristic_value.value_type   = EDCS_AVT_REAL
         characteristic_value.u.real_value = { EUC_METRE, ESC_UNI,
                                               { EDCS_NVT_SINGLE_VALUE,
                                                 { 32767.0 }
                                               }
                                             }

     Second <Property Characteristic>
         meaning                           = EVC_TOLERANCE
         characteristic_value.value_type   = EDCS_AVT_REAL
         characteristic_value.u.real_value = { EUC_METRE, ESC_UNI,
                                               { EDCS_NVT_SINGLE_VALUE,
                                                 { 1.0 }
                                               }
                                             }

  2. A <Property Grid> containing a <Table Property Description>
     with meaning = { SE_ELEM_CODE_TYP_ATTRIBUTE,
                      { EAC_AIR_TEMPERATURE }}

     describes air temperature measurements over the specified
     region. In some locations, no measurements were taken, so
     a sentinel value (deliberately chosen to lie outside the
     range of possible data values) is needed to indicate those
     locations.

     Consequently, the <Table Property Description> for
     EAC_AIR_TEMPERATURE in this example has a
     <Property Characteristic> with meaning = EVC_MISSING
     and characteristic_value of, say, -10000.

     Any cell data element for this <Table Property Description>
     which has a value of -10000 is therefore interpreted as
     meaning that the measurement is missing.

     Note that the <Table Property Description> may have other
     <Property Characteristic> components, provided that they have
     different meaning values. For example, this
     <Table Property Description> may have another
     <Property Characteristic> specifying EVC_MINIMUM_VALUE.

  3. A <Property Grid> containing a <Table Property Description>
     with meaning = { SE_ELEM_CODE_TYP_ATTRIBUTE,
                      { EAC_SALINITY }}

     describes water salinity data over the region specified
     for the grid. However, in this example, part of the grid
     lies over land, so that water salinity measurements not
     only were not taken there, but make no sense. A sentinel
     value (deliberately chosen to lie outside the range of
     possible data values) is needed to indicate those locations.

     Consequently, the <Table Property Description> for
     EAC_SALINITY in this example has a <Property Characteristic>
     with meaning = EVC_NOT_APPLICABLE and a characteristic_value
     of, say, -1.

     Any cell data element for this <Table Property Description>
     which has a value of -1 is therefore interpreted as
     meaning that the measurement is not applicable.

     Note that the <Table Property Description> may have other
     <Property Characteristic> components, provided that they have
     different meaning values. For example, this
     <Table Property Description> may have another
     <Property Characteristic> specifying EVC_MINIMUM_VALUE.

FAQS:
 Q.  Why would a <Property Value> require a <Property Characteristic>?

 A.  If a <Property Value> had associated with it a valid range of
     values or a precision value (as is sometimes found in FACC attribute
     specifications), then each of these associated values could be attached
     to the <Property Value> with a <Property Characteristic>.

     However, a <Property Value> does not require <Property Characteristics>
     that specify sentinel values, since they are meaningful only in the
     context of <Data Tables>.

 Q.  Shouldn't a value's range and precision information be part of
     metadata, such as <Data Quality>?

 A.  They can be, but metadata information is not readily accessible
     in software. For example, in an application which plots tabular
     data, access to information specifying the valid range of values
     is useful in scaling the plot. As a second example, precision
     information can be used to determine appropriate round-off when
     converting between units of measure.

 Q.  How do <Table Property Description> instances in the signature of a
     <Data Table> use <Property Characteristics>?

 A.  In addition to specifying value ranges, precision, and tolerances,
     a given <Table Property Description> of a <Data Table> can use a
     <Property Characteristic> to specify information that applies to all
     cells in the <Data Table>, such as a sentinel value that flags a
     special meaning to certain values.  A <Property Characteristic> can
     also be used to indicate that a certain <Data Table> property is in
     fact constant in this particular instance of the table.

 Q.  Why are <Data Table> sentinel values needed?

 A.  Often <Data Tables> are incomplete for various reasons.  Typically
     a set of special values is selected to flag missing data.
     Such special values are selected to be out of the valid range
     of values for the parameter in question.  Since the valid
     range of a parameter varies by data set as well by <Property>
     type, these special values vary accordingly.
     <Property Characteristics> provide a means to associate specific
     sentinel values and their meaning with a specific <Property>
     of a specific <Data Table>.

 Q. How can characteristic values for EVC_NOT_APPLICABLE, EVC_MISSING,
    EVC_VALUE_WITHHELD, EVC_MULTIPLE, and EVC_UNDESIGNATED be used with
    enumerated EDCS Attributes?

 A. The sentinel mechanism that is often used with numeric attributes
    use out-of-valid-range values in conjunction with <Property
    Characteristic> instances for this purpose.  The only valid EE codes
    for a given EA are specified in the EE dictionary.  Any non-valid
    code for the EE (such as a negative value) may be used for a
    characteristic value.

 Q.  What are the units of a <Property Characteristic> characteristic_value?

 A.  The characteristic_value is measured with the same unit as the
     <Property> subclass that aggregates it.

 Q. What is the difference between EVC_MAXIMUM_VALUE, EVC_MINIMUM_VALUE and
    EVC_UPPER_BOUND, EVC_LOWER_BOUND?

 A. EVC_MAXIMUM_VALUE and EVC_MINIMUM_VALUE are intended to give the nominal
    or legal range of values for this type of data as opposed to this
    instance of the data. EVC_UPPER_BOUND and EVC_LOWER_BOUND are intended
    to supply a tighter bound for the given instance of numeric data. If
    both sets of characteristics are supplied, then:
       EVC_UPPER_BOUND <= EVC_MAXIMUM_VALUE
       EVC_LOWER_BOUND >= EVC_MINIMUM_VALUE

 Q. Is EVC_UPPER_BOUND the same as the least upper bound for the data?
    Similarly, is EVC_LOWER_BOUND the greatest lower bound?

 A. Not necessarily.  But the tighter the bound the more useful is the
    information provided.  If possible they should be the least upper
    greatest lower bounds.

 Q. How are the EVC_UPPER_BOUND, EVC_LOWER_BOUND values used?

 A. They can be used by the data consumer for scaling graphs, checking data
    validity, etc.  When supplied for a <Table Property Description>,
    together with EVC_TOLERANCE or EVC_SIGNIFICANT_DIGITS values, a SEDRIS
    API implementation may be able to use this information to compress the
    <Data Table>.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Property Characteristic Restrictions

Component of (two-way)
	zero or more Property instances
	zero or more Table Property Description instances

Field Elements:
    EDCS_Value_Characteristic_Code meaning;
   /*
    *  The meaning field specifies the semantic represented by the given
    *  <Property Characteristic> instance.
    */

    EDCS_Attribute_Value characteristic_value;
   /*
    *  The characteristic_value field specifies the data value of the given
    *  <Property Characteristic> instance.
    */


-------------------------------------------------------------------------------

Class Name: Property Description

Definition:
 An instance of this DRM class is used to elaborate a property attribute of
 an <Aggregate Geometry> or <Aggregate Feature> instance and / or its
 component inheritance subtree by specifying <Property Characteristic>
 components and / or qualifying (limiting) <Property Value> components
 which meaningfully qualify the attribute identified by the
 <Property Description>.

Primary Page in DRM Diagram:
     6

Secondary Pages in DRM Diagram:
     4
     8
     20

Example:
 1. Consider a <Union Of Primitive Geometry> containing <Polygon> instances,
    each of which has an emissivity applicable to the IR band only, where
    valid values are less than or equal to 1.0.

            <Union Of Primitive Geometry>
                       <>
                       |
         ------------------------------------------------
         |                                              |
         |                                      <Property Description>
         |                                       EAC_EMISSIVITY
         |                                             <>
         |                                             |
         |                     ------------------------|
         |                     |                       |
         |           <Property Characteristic>    <Property Value>
         |           meaning = EVC_MAXIMUM_VALUE  EAC_ELECTROMAGNETIC_BAND
         |           characteristic_value 1.0     EEC_EMBAND_INFRARED
         |
         +-------------------------------------+
         |                                     |
         |                                     |
     <Polygon>                            <Polygon>
        <>                                   <>
        |                                    |
        |                                    |
   <Property Value>                     <Property Value>
   EAC_EMISSIVITY                       EAC_EMISSIVITY
      0.75                                  0.55

    The emissivity of each <Polygon> is applicable to the IR band only,
    because that property is so qualified by inheritance.


 2. Consider a <Union Of Features> containing various <Primitive Features>
    that shall specify dewpoint temperature. For all the <Primitive Features>
    in this aggregate, the dewpoint temperature given was taken at a height
    of ten metres above the surface of the terrain, and is of good quality.

                    <Union Of Features>
                           <>
                           |
                  ------------------------------------
                  |                                  |
          <Property Description>               <Point Feature>
          EAC_DEWPOINT_TEMPERATURE                 <>
                 <>                                 |
                 |                             <Property Value>
          -----------------------               EAC_DEWPOINT_TEMPERATURE
          |                     |               EDCS_UNITS_DEGREE_CELSIUS
          |                     |               15
  <Property Value>          <Property Value>
  EAC_DEWPOINT_QUALITY      EAC_HEIGHT_ABOVE_SURFACE
  EDCS_UNITS_METER          EDCS_UNITS_ENUMERATION
  10.0                      SE_PROP_VAL_DEQ__GOOD

    Since the <Point Feature>'s <Property Value> describes
    EAC_DEWPOINT_TEMPERATURE, it inherits the following qualifiers:

    1) The EAC_DEWPOINT_TEMPERATURE measurement was taken at a height of
       ten metres above the surface, and
    2) The measurement is of good quality.

FAQS:
 Q. How does an aggregate object use a <Property Description>?
 A. In two ways, either separately or in combination.
    1. An aggregate may use a <Property Description> to specify <Property
       Characteristic> components (such as maximum value for a quantity).
    2. An aggregate might also use a <Property Description>'s
       <Property Value> components to qualify an EAC.

    All objects in the component inheritance tree of the aggregate, as long
    as they have <Property Value> instances with a matching EAC, are
    subject to the <Property Descriptions> and / or qualifying values.

 Q. Can a data provider qualify an attribute A with two sets of qualifying
    <Property Value> instances, {b1, c1} and {b2, c2} by associating two
    <Property Value> instances for A with the corresponding qualifier set?
 A. No.  This situation requires a <Property Table>.

 Q. Are there any restrictions on the <Property Value> components?
 A. Only semantic restrictions.  For example, it makes sense to limit
    the applicability of an electromagnetic emissivity value to a
    particular electromagnetic band.  But it would be nonsensical
    to limit an electromagnetic band to a particular emissivity value.

Superclass: Property

Constraints:
     Publishable Object
     Property Characteristic Restrictions
     Property Meaning Restrictions

Composed of (two-way) (inherited)
	zero or more Property Characteristic instances

Composed of (two-way)
	zero or more Property Value instances

Component of (two-way)
	zero or more Aggregate Feature instances
	zero or more Aggregate Geometry instances
	zero or more EDCS Use Summary Item instances

Inherited Field Elements:
    SE_Property_Code meaning;
   /*
    *  The meaning field specifies the meaning of the given
    *  <Property> instance.
    */


-------------------------------------------------------------------------------

Class Name: Property Grid

Definition:
 An instance of this DRM class is a <Data Table> instance that has at
 least one (1) but not more than three (3) spatial axes, which always
 appear before any other <Axis> instances in its ordered <Axis> list.

 A spatial axis is an <Axis> instance that describes sampling along one of
 the components of the spatial reference frame of the <Property Grid>;
 hence it is directly useful for locating the sample values in space. To
 qualify as spatial, the <Axis> shall match the spatial reference frame
 exactly, using using a consistent specification (e.g., the same ORM,
 direction vector and (possibly scaled) units.

 - The "spatial" <Axis> instances of a <Property Grid> shall always be
   the first members of the ordered set of <Axis> components. The
   spatial_axes_count field indicates how many of the <Axis> instances
   are "spatial". Note: because the <Axis> ordering also determines the
   "scanning" order when data is retrieved from a <Data Table>, placing
   the spatial axes first imposes some limitations on the way data can
   be scanned, and may require reordering either by the preparer or the
   consumer to achieve a scanning that is more "natural" to them.

 - There are no other ordering rules for spatial <Axis> instances. If a
   producer has a choice, it is a good idea to order spatial <Axis>
   components in the same way as the spatial reference frame components,
   but as mentioned in point 1), this is not always possible, so
   consumers cannot make assumptions about the ordering apart from those
   stated above.

Primary Page in DRM Diagram:
     6

Secondary Pages in DRM Diagram:
     8

Example:
 1. A DTED <Property Grid> associated to <Areal Feature> instances
    representing DTED accuracy areas supplemental to the grid.

 2. Consider a <Property Grid> instance classified as
    ECC_WATER_BODY_TEMPERATURE_PROPERTY_SET for an ocean volume. Ocean
    temperature "features", such as warm / cold currents, fronts, and eddies,
    are associated to specific cells of the <Property Grid>.

 3. Consider a transmittal provided by a data producer whose format uses
    polygons rather than grids to represent terrain, where the polygons
    define a "default" post spacing. To provide this "default" post spacing
    in the transmittal, the data provider would provide an "empty" <Property
    Grid> instance, attaching it to the hierarchy with a
    <Property Grid Hook Point> instance, as usual, with the following
    structure.

      <Property Grid>
          <>
           |
           |- <Classification Data>
           |  tag = ECC_TERRAIN
           |
           |
           |- instances of <Axis> with spatial EAs as meanings
           |
           |- <Table Property Description>
              EAC_SURFACE_ELEVATION

  The spatial <Axis> instances define the extents and the spacing of the
  <Property Grid> instance. The data provider has the option of providing
  <Property Characteristic> components for the <Table Property Description>
  instance to supply the minimum and maximum elevation values.

FAQS:
 Q. Since a <Property Grid> is a sub-class of <Data Table>, and the <Data
    Table Library> is composed of <Data Tables>, doesn't that mean that a
    <Property Grid> can be a component of a <Data Table Library>?
 A. Yes.

 Q. What are examples of non-spatial axes?
 A. Of course, any <Axis> that has no spatial meaning is non-spatial, for
    example, month, material index, density.  There are also <Axis>
    instances that seem to have spatial meaning but are not "spatial" to
    SEDRIS, for example, atmospheric pressure height, height above or
    below terrain surface, azimuth.  These are non-spatial to SEDRIS
    because they require either additional information (such as the
    location of the terrain surface) or a parametric formula (such as
    the standard atmosphere model) to convert their values into a
    <Location> instance in the SEDRIS spatial reference frame of
    the given <Property Grid> instance.

 Q. Why is a <Property Table> permitted to aggregate other <Data Tables>?
 A. This mechanism allows a <Property Grid> cell data element to specify
    an index into the set of ordered <Data Table> components, so that any
    component <Data Table> can be "re-used" by many data cells. See
    <Index Codes within Tables> for further details.

 Q. Why is a <Property Grid> allowed to associate directly with a
    <Feature Representation>? Couldn't the same functionality be
    achieved by associating the <Feature Representation>
    with a <Property Grid Hook Point>?
 A. No. A <Property Grid Hook Point> may aggregate several <Property Grids>,
    making the main connection between a <Feature Representation> and
    a <Property Grid> ambiguous.

 Q. What if a cell in a <Property Grid> is related to several
    <Feature Representations> simultaneously?
 A. This is easily handled by having the cell index to a component (nested)
    <Data Table> of related <Feature Representation> IDs
    (EAC_NUMERIC_OBJECT_IDENTIFIER).  Such component <Data Tables> of
    related <Features> shall be classified as ECC_RELATED_OBJECT_SET.

 Q. What is the point of having an "empty" <Property Grid>, that is, with
    data_present == SE_FALSE?
 A. Because it provides an "outline" or "template" of the <Property Grid>
    information.  It provides the size, orientation, spacing, and so on of
    the <Property Grid> instance - just without any cell values.

    This makes it possible, for instance, for a consumer who requires
    <Property Grid> rather than <Polygon> instances for terrain to derive
    the <Property Grid> representation from the <Polygon> representation
    (see example 3).

Superclass: Data Table

Constraints:
     Publishable Object
     Index Codes within Tables
     Axis Type Restrictions
     Non Crossing Associations

Associated to (one-way)
	zero or more Feature Representation instances, each with a Base Association Data link object 

Associated by (one-way)
	zero or more Feature Representation instances, each with a Base Association Data link object 

Composed of (two-way) (inherited)
	one or more {ordered} Axis instances
	one Classification Data instance 
	zero or more {ordered} Image Mapping Function instances
	one or more {ordered} Table Property Description instances

Composed of (two-way)
	zero or more {ordered} Data Table instances
	zero or more Grid Overlap instances

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or one Citation instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or one Data Table Library instance
	zero or more Property Grid instances

Component of (two-way)
	zero or more Property Grid Hook Point instances

Field Elements:
    SE_Short_Integer_Positive spatial_axes_count;
   /*
    *  The spatial_axes_count field specifies how many axes of the
    *  given <Property Grid> instance are spatial axes.
    */

    SE_Short_Integer location_index[];
   /*
    *  This specifies up to three grid indices that identify the grid cell
    *  that contains the location corresponding to that specified by the
    *  <Location 3D> component of the <Property Grid Hook Point> aggregate
    *  of the given <Property Grid> instance.
    *
    *  The identified cell is the attachment cell of the given <Property Grid>
    *  instance; it is where the <Location 3D> instance is attached to the
    *  <Property Grid> instance.
    *
    *  The location_index shall specify a valid cell within the given
    *  <Property Grid> instance; that is, the indices shall be within
    *  the appropriate bounds of the <Property Grid> instance.  Only
    *  the first spatial_axes_count entries of location_index are
    *  significant.
    */

    SE_SRF_Info srf_info;
   /*
    *  This specifies the SRF within which the given <Property Grid>
    *  instance is defined, rather than attempting to depend on the
    *  SRF of the context in which the instance appears.
    *
    *  The "griddedness" of spatial positions is dependent on the properties
    *  of the SRF. Coordinate conversions and transformations are not,
    *  in general, linear, so that a set of points that form a regular
    *  array of positions in one SRF may not be regular in
    *  another SRF.  Therefore, in order to preserve
    *  "griddedness", a <Property Grid> specifies a SRF in
    *  which the data positions form a grid.
    */

    SE_Boolean data_present;
   /*
    *  If data_present = SE_TRUE (the default), the given <Property Grid>
    *  instance contains cell values that can be extracted via the
    *  appropriate Level 0 API calls.
    *
    *  Otherwise, if data_present = SE_FALSE, the given <Property Grid>
    *  instance does not contain any cell values, although it may provide
    *  everything else that a populated <Property Grid> instance could
    *  provide.
    */


-------------------------------------------------------------------------------

Class Name: Property Grid Hook Point

Definition:
 An instance of this DRM class  is used to "instance" a <Property Grid>
 into the spatial scope of an <Environment Root> or <Model>.  In
 particular, the origin of the spatial axes of a component
 <Property Grid> is located at the <Property Grid Hook Point>'s component
 <Location>.

 Since a <Property Grid Hook Point> separates a <Property Grid>'s cell
 data from the <Location> of its origin, <Property Grid> instances can
 be shared by multiple <Property Grid Hook Point> instances.

Primary Page in DRM Diagram:
     6

Secondary Pages in DRM Diagram:
     3
     7
     13

Example:
 1. Consider a 1-dimensional <Property Grid> classified as
    ECC_WATER_BODY_BATHYMETRY_PROPERTY_SET that contains a depth axis only.
    The <Property Grid Hook Point> <Location> serves to position this grid
    into the currently scoped 'world' spatial reference frame.

 2. Consider a 2-dimensional <Property Grid> instance classified as
    ECC_TERRAIN_ELEVATION that contains elevation relative to the
    south-west corner of the grid. The <Property Grid Hook Point>
    instance's <Location> component serves to position this grid corner
    into the currently scoped 'world' spatial reference frame.

 3. A <Property Grid Hook Point> instance, connecting a
    <Property Grid> instance of terrain elevation data from DTED to
    the geometry of an <Environment Root> instance.

FAQS:
 Q. If a <Property Grid> has all 3 spatial axes, isn't the hook
    <Location> redundant?
 A. No, the hook point <Location> serves several purposes.
    1.  Since the spatial axes are relative, the hook <Location>
        provides the axis offset origins.

    2.  It makes a <Location> associated with the grid visible to API search
        filters (in the currently scoped 'world' spatial reference frame).

Superclass: Geometry Hierarchy

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Associated with (two-way)
	zero or one Geometry Node instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances

Composed of (two-way)
	zero or more Base LOD Data instances
	one Location instance
	zero or one LSR Transformation instance
	one or more Property Grid instances
	zero or one Spatial Extent instance

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

-------------------------------------------------------------------------------

Class Name: Property Set

Definition:
 An instance of this DRM class groups together a set of instances
 of classes that
 - have formal component relationships with <Geometry Representation> and / or
   <Feature Representation>, and
 - that specify either 'attributes', such as <Rendering Priority Level>,
   or metadata.

 A <Property Set> instance provides a mechanism for a set of 'attributes'
 to be explicitly reused by many <Geometry Representation> and / or
 <Feature Representation> instances.

Primary Page in DRM Diagram:
     19

Secondary Pages in DRM Diagram:
     6

Example:
 1. A number of <Polygon> instances that are all coloured red and rendered
    using flat shading each contain the same <Property Set Index>,
    which references a <Property Set> containing a <Colour> instance
    specifying red and a <Rendering Properties> instance specifying
    flat shading.

 2. A number of <Polygon> instances that are all coloured green, have grass
    texture that is modulated and have an EAC_SURFACE_MATERIAL_TYPE
    specifying EEC_SRF_MATTY_GRASS. A common <Property Set Index>
    specifies a <Property Set> containing:
    1) a <Colour> instance specifying green,
    2) an <Image Mapping Function> instance specifying
       image_mapping_method = SE_IMG_MAPNG_METH_MODULATE, and
    3) a <Property Value> instance specifying an
       EAC_SURFACE_MATERIAL_TYPE value of EEC_SRF_MATTY_GRASS.

 3. A number of <Polygon> instances that all have the same electromagnetic
    properties and are coloured grey. A common <Property Set> would
    contain a <Colour> instance specifying grey and a <Property Table
    Reference> into a <Property Table> of electromagnetic properties.

 4. A <Feature Representation> is associated with a <Geometry Representation>
    that has been developed from it. Both reference the same <Property Set>,
    which contains a <Colour> instance, <Image Mapping Function> and
    <Browse Media>. The <Geometry Representation> would use the
    <Colour> and <Image Mapping Function> but ignore the <Browse Media>.

 5. Consider a <Feature Representation> instance with a <Data Quality>
    component, the fictional field of which is set to SE_TRUE. This
    particular <Feature Representation> instance also has a
    <Property Set Index> component, referencing a <Property Set>
    containing a <Data Quality> instance, the fictional field of which
    is set to SE_FALSE. Since a <Feature Representation> may contain at
    most one <Data Quality> instance, the <Data Quality> instance with
    fictional set to SE_TRUE would be used, as it is contained directly
    by the <Feature Representation> instance.

 6. Consider a <Geometry Representation> instance with two
    <Property Table Reference> components, which references a
    <Property Set> that contains another three <Property Table Reference>
    instances, where all five have distinct meanings. As a
    <Geometry Representation> may contain many <Property Table Reference>
    instances, all five will be used by the <Geometry Representation> as
    required. The two that are contained directly will be used first,
    then the three that are contained in the <Property Set>.

 7. Consider a <Polygon> instance with two <Image Mapping Function>
    components, which references a <Property Set> that contains another
    two. As a <Primitive Geometry> may contain many ordered
    <Image Mapping Function> instances, all four will be used by the
    <Polygon> as required. The two that are contained directly will be
    used in order first, then the three that are contained in the
    <Property Set>, again in order.

 8. A <Union Of Primitive Geometry> contains two <Property Table Reference>
    instances and references two <Property Set> instances.

    The first <Property Set> contains another <Property Table Reference>
    and the second <Property Set> contains another three
    <Property Table Reference> instances. As an <Aggregate Geometry> may
    contain many <Property Table Reference> instances, all six would be
    used by the <Union Of Primitive Geometry> as required. The two that are
    contained directly would be used first, then the one that is contained
    in the first <Property Set> and finally the three that are contained
    in the second <Property Set>.

FAQS:
 Q. Where can users find more information on 'attribute' objects?
 A. See Part 4, Volume 9 Attribute Inheritance and Context Technical Guide
    of the SEDRIS Documentation Set for further information.

 Q. What is the order of precedence for 'attribute' objects within
    a single <Property Set> instance?
 A. See the constraint <<Precedence of Property Set Index>>.

 Q. What if a <Geometry Representation> or <Feature Representation>
    has more than one <Property Set Index>, where the referenced
    <Property Set> instances have conflicting attribute objects?
 A. See the constraint <<Precedence of Property Set Index>>.

 Q. What if a <Property Set> instance contains attribute objects that
    are related to <Feature Representation> but is referenced by a
    <Geometry Representation> instance? Or vice versa?
 A. See the constraint <<Property Set Components>>.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     No Attribute Conflicts
     Property Set Components

Composed of (two-way)
	zero or one Classification Data instance
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or one Presentation Domain instance
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance

Composed of (two-way metadata)
	zero or one Access instance
	zero or one Citation instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way)
	one Property Set Table instance

-------------------------------------------------------------------------------

Class Name: Property Set Index

Definition:
 An instance of this DRM class specifies the means of referencing
 the contents of a <Property Set> instance that is contained in
 a <Property Set Table> instance.

 A <Property Set Index> instance specifies an index into the primary
 <Property Set Table> component of the <Property Set Table Group>
 instance to which it is associated. The <Property Set Table Group>
 instance specifies which of its <Property Set Table> components is
 being used, while the <Property Set Index> instance specifies which
 <Property Set> component within that primary <Property Set Table>
 instance is being referenced.

Primary Page in DRM Diagram:
     19

Secondary Pages in DRM Diagram:
     3
     8

Example:
 1. Consider a <Property Set Table Group> instance, such that its
    primary <Property Set Table> component's kth <Property Set>
    component consists of <Colour> and <Image Mapping Function>
    instances for sandy ground under normal, Out the Window (OTW)
    viewing conditions.

    A terrain <Polygon> instance that references this set will do so by
    having a <Property Set Index> component that is associated to the
    <Property Set Table Group> instance and the index value of which is
    set to k.

FAQS:
 Q. Is a <Property Set Index> a 1-based index?
 A. Yes.

 Q. I am attempting to consume an object, such as a <Point Feature>
    instance, the attributes of which are specified by a
    <Property Set Index> instance. What can I do to get access to
    the actual attribute objects being referred to?
 A. A consumer can access the actual attribute objects contained within
    the <Property Set Table>, as though they had been directly attached
    to the object. See SE_InitializeComponentIterator()'s
    directly_attach_table_components parameter, and SE_GetComponent()'s
    directly_attach_table_components parameter.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Associated to (one-way)
	one Property Set Table Group instance

Composed of (two-way)
	zero or one Property Set Index Control Link instance

Component of (two-way)
	zero or more Feature Representation instances
	zero or more Geometry Representation instances

Field Elements:
    SE_Integer_Positive index;
   /*
    *  The index field specifies which <Property Set> instance is being
    *  referred to within the primary <Property Set Table> component of
    *  the associated <Property Set Table Group> instance.
    */


-------------------------------------------------------------------------------

Class Name: Property Set Index Control Link

Definition:
 An instance of this DRM class specifies an <Expression> instance
 that determines the index field value of all target
 <Property Set Index> instances, thus controlling which <Property Set>
 instance is referenced by each such <Property Set Index> instance.

 Note that since each controlled <Property Set Index> instance may
 be bound to a different <Property Set Table Group> instance, and
 thus to a different primary <Property Set Table> instance, the fact
 that their index values are the same does not mean that the set of
 <Property Set Index> instances controlled by a given
 <Property Set Index Control Link> instance reference the same
 <Property Set> instance.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     19

Example:
 1. A tree canopy appears different at different times of the year,
    with a different colour and texture. This could be achieved by
    using a different <Property Set> for each period of the
    year. Each <Property Set> would contain the
    appropriate <Colour> and <Image Mapping Function>.
    A <Property Set Index Control Link> would be used
    to allow the appropriate <Property Set> to be
    selected.

FAQS:
 Q. What does a <Property Set Index Control Link> control?
 A. A <Property Set Index Control Link> controls the value of the index
    stored in the <Property Set Index> instances that reference it.

 Q. Can a <Property Set Index Control Link> be used to change which
    <Property Set Table> is accessed within a <Property Set Table Group>?
 A. No. The index always refers to the primary <Property Set Table>.

 Q. Can a <Property Set Index Control Link> be used to switch from one
    <Property Set Table Group> to a different <Property Set Table Group>?
 A. No. The link to the <Property Set Table Group> is an association within
    the transmittal, and associations cannot be changed dynamically.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more Property Set Index instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Positive expr_index;
   /*
    *  The expr_index field specifies the component <Expression>, the
    *  value of which controls the index of the affected
    *  <Property Set Index>.
    */


-------------------------------------------------------------------------------

Class Name: Property Set Table

Definition:
 An instance of this DRM class is conceptually an ordered collection
 of <Property Set> instances, where the ordering is required to
 permit the contents of the <Property Set Table> instance to be
 referenced by other objects.

 A <Property Set> instance within a <Property Set Table> instance is
 referenced by its ordinal position in the collection by means
 of <Property Set Index> instances, as specified in the definition
 of <Property Set Index>.

Primary Page in DRM Diagram:
     19

Example:
 1. A <Property Set Table> specifying <Property Set> instances
    for normal, Out The Window (OTW) viewing.

 2. A <Property Set Table> specifying <Property Set> instances
    for viewing through Night Vision Goggles (NVG).

 3. A <Property Set Table> specifying <Property Set> instances
    for OTW viewing using an enhanced set of colours and
    textures.

 4. A <Property Set Table> that contains <Property Set> instances
    that all contain a <Colour> and two <Image Mapping Function>
    instances. This <Property Set Table> would have regular set
    to SE_TRUE.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Property Set Table Size

Composed of (two-way)
	one or more {ordered} Property Set instances

Composed of (two-way metadata)
	zero or one Access instance
	zero or one Citation instance
	zero or more Cross Reference instances
	zero or one Description instance

Component of (two-way)
	one Property Set Table Group instance

Field Elements:
    SE_String table_usage;
   /*
    *  The table_usage field specifies the use for which the given
    *  <Property Set Table> instance is provided.
    */

    SE_Boolean regular;
   /*
    *  If the value of the regular field is SE_TRUE, all <Property Set>
    *  components of the
    *  given <Property Set Table> instance contain the same number of
    *  objects, and these objects are of the same types. Otherwise
    *  <Property Set> instances in the table may contain very
    *  different sets of objects.
    */


-------------------------------------------------------------------------------

Class Name: Property Set Table Group

Definition:
 An instance of this DRM class specifies an interchangeable group of one or
 more <Property Set Table> instances. The primary <Property Set Table> in
 the group is indicated by the primary_table_index. When a reference is
 made to a <Property Set Table> (for example, from a
 <Property Set Index> component of a <Polygon>), the reference identifies
 the <Property Set Table Group> and the index within the
 <Property Set Table>, but not the specific <Property Set Table>
 within the <Property Set Table Group>.  By definition, a
 <Property Set Index> refers to a <Property Set> from the primary
 <Property Set Table> of the indicated <Property Set Table Group>. An
 alternate <Property Set Table> from within the
 <Property Set Table Group> can be chosen at the discretion of
 the data consumer.

Primary Page in DRM Diagram:
     19

Secondary Pages in DRM Diagram:
     10

Example:
 1. One <Property Set Table Group> in the transmittal,
    and that group has only one <Property Set Table>
    within the group.  That <Property Set Table> is the
    one and only <Property Set Table> for the entire
    transmittal.

 2. A <Property Set Table Group> with two <Property Set Table>
    components, one for normal, Out The Window (OTW) viewing, the
    other to change the appearance of the view to be a view as seen
    through Night Vision Goggles (NVG).

 3. A <Property Set Table Group> with three <Property Set Table>
    components with the same usage of OTW.  Why three tables? One
    <Property Set Table> defines the colours and textures
    as originally created by the data modelers. The second
    <Property Set Table> has different shades of blue for
    the lakes and skies because a company VIP came through
    and didn't like the blues that were there. The third
    <Property Set Table> contains yet another set of blues
    for the lakes, different textures for the lakes and
    different shades of green for the trees and tanks,
    because the customer in charge of the program came
    through and didn't think the colours and textures were
    realistic.

FAQS:
 Q. Can a transmittal in any way refer to an <Property Set Table> in a
    <Property Set Table Group> other than the primary <Property Set Table>?
 A. No. The only <Property Set Table> that can be referenced in any
    <Property Set Table Group> is the primary <Property Set Table>.

 Q. Since they cannot be referenced in a transmittal, why bother to have
    alternate <Property Set Table> instances within a <Property
    Set Table Group>?
 A. Because in real life, many run-time systems have multiple colour
    and material tables they can switch between for various reasons,
    and these tables should be shared to promote interoperability.
    See the example section, below.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Property Set Table Size

Associated by (one-way)
	zero or more Property Set Index instances

Composed of (two-way)
	one or more {ordered} Property Set Table instances

Composed of (two-way metadata)
	zero or one Access instance
	zero or one Citation instance
	zero or more Cross Reference instances
	zero or one Description instance

Component of (two-way)
	one Property Set Table Library instance

Field Elements:
    SE_Integer_Positive primary_table_index;
   /*
    *  The primary_table_index (which is 1-based) specifies the primary
    *  <Property Set Table> component from the ordered
    *  <Property Set Table> components of the given
    *  <Property Set Table Group> instance.
    */

    SE_Integer_Positive table_size;
   /*
    *  The table_size field specifies the size of each
    *  <Property Set Table> within the given
    *  <Property Set Table Group> instance.
    */


-------------------------------------------------------------------------------

Class Name: Property Set Table Library

Definition:
 An instance of this DRM class is a <Library> of
 <Property Set Table Group> instances.

Primary Page in DRM Diagram:
     10

Secondary Pages in DRM Diagram:
     1
     19

Example:
 1. Consider a transmittal containing large stretches of various types
    of terrain, represented with texture-mapped <Polygon> instances, where
    the textures are blended with <Colour> instances.

    For efficiency, the source of this transmittal uses a library of
    terrain textures, which are repeated at intervals across the
    terrain. Consequently, a limited number of <Image Mapping Function>,
    <Colour> pairs are repeated across a large number of <Polygon>
    instances as components.

    Rather than creating many duplicate objects, the data provider
    creates a <Property Set Table Library>. Each of the <Image Mapping
    Function>, <Colour> pairs is placed in a <Property Set>, which
    is in turn stored in the primary <Property Set Table> of an
    <Property Set Table Group> within the library.

    Each <Polygon> is then given a <Property Set Index> component,
    which is associated to the appropriate <Property Set Table Group>.

FAQS:
     None.

Superclass: Library

Constraints:
     Publishable Object

Composed of (two-way)
	one or more {ordered} Property Set Table Group instances

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or one Citation instance
	zero or one Description instance

Component of (two-way)
	one Transmittal Root instance

-------------------------------------------------------------------------------

Class Name: Property Table

Definition:
 An instance of this DRM class is a <Data Table> instance containing no
 location information, and therefore has no spatial <Axis> components.

Primary Page in DRM Diagram:
     6

Secondary Pages in DRM Diagram:
     3
     8
     18
     19

Example:
 1. Externally Controlled Table-Based Animation

    See <Scale Control Link>, example 1.

 2. Cyclic Table-Based Animation

    See <Translation Control Link>, example 2.

 3. Function-Driven Table-Based Animation

    See <Property Table Reference Control Link>, example 1.

FAQS:
 Q. Why is a <Property Table> instance permitted to aggregate other
    <Property Table> instances?
 A. This mechanism allows a <Property Table> cell data element
    to specify an index into the set of ordered <Property Table>
    components, so that any component <Property Table> can be
    "re-used" by many data cells. See <Index Codes within Tables>
    for further details.

 Q. Why isn't a <Property Table> instance allowed to aggregate
    <Property Grid> instances?
 A. An object referencing a <Property Grid> shall specify a
    <Location> for the <Property Grid> origin, and a
    <Property Table> has no location information.

 Q. Why is a <Property Table> instance permitted to aggregate
    <Property Table Reference> instances?
 A. This mechanism allows a <Property Table> cell data element
    to specify an index into the set of ordered
    <Property Table Reference> components, so that any component
    <Property Table Reference> can be "re-used" by many data
    cells, therefore referring to "slices" of other <Property Table>
    instances without replicating the information. See
    <<Index Codes within Tables>> for further details.

 Q. Can values from a <Property Table> be used to drive <Control Link>
    instances?
 A. Yes; this is possible in the following way.

    1) Store the values in cells of the <Property Table> such that their
       <Table Property Description>'s meaning is appropriate for the
       target <Control Link> that is to be driven.

    2) Where the values are to be referenced in the controlling
       <Expression> of the target <Control Link>, place a
       <Predefined Function> SE_PREDEF_FUNC_TABLE_VALUE instance,
       which in turn contains an appropriate <Property Table Reference>
       as an argument, referencing the values in the <Property Table>.

    The <Predefined Function> will thereby return the value referenced
    from the <Property Table> as the value that drives the target
    <Control Link>.

    If desired, the <Property Table Reference> can itself be controlled
    using a <Property Table Reference Control Link>, allowing different
    values to be referenced from the <Property Table> based on a
    controlling <Expression>.

    See Part 4, Volume 5 Control Link Technical Guide of the SEDRIS
    Documentation Set for further details, as well as the examples
    shown here.

Superclass: Data Table

Constraints:
     Publishable Object
     Index Codes within Tables
     Axis Type Restrictions
     Finite Element Mesh Structure
     Non Cyclic Aggregations

Associated by (one-way)
	zero or more Property Table Reference instances

Composed of (two-way) (inherited)
	one or more {ordered} Axis instances
	one Classification Data instance 
	zero or more {ordered} Image Mapping Function instances
	one or more {ordered} Table Property Description instances

Composed of (two-way)
	zero or more {ordered} Property Table instances
	zero or more {ordered} Property Table Reference instances 

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or one Citation instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or one Data Table Library instance
	zero or more Property Grid instances

Component of (two-way)
	zero or more Feature Representation instances
	zero or more Geometry Representation instances
	zero or more Property Set instances
	zero or more Property Table instances

-------------------------------------------------------------------------------

Class Name: Property Table Reference

Definition:
 An instance of this DRM class specifies a reference to an N-1 dimensional
 "slice" of an N-dimensional <Property Table> component of a
 <Data Table Library>, where N is the number of <Axis> components
 of the <Property Table>.

 <Property Table Reference> exists primarily to allow a data provider
 to select a set of parameters from a standard <Property Table>
 containing an indexed collection of alternatives.

 Since only one <Axis> requires a specific "tick mark" to
 be specified, <Property Table Reference> specifies the
 axis_type of the <Axis> to be matched, and the index_on_axis
 specifies the "tick mark" on that <Axis>.

Primary Page in DRM Diagram:
     18

Secondary Pages in DRM Diagram:
     3
     6
     8
     16
     19
     22

Example:
 1. See <Property Table Reference Control Link>, example 1.

FAQS:
 Q. Why not use a collection of <Property Value> instances instead of a
    <Property Table Reference> instance?
 A. In some cases this might be possible, and is not
    prohibited.  However, some tables are multi-dimensional. It would not
    be possible to define <Property Value> instances to designate each
    combination of axis values that occur in a multi-dimensional table.

 Q. Why an N-1 dimensional slice?
 A. This is the only case for which there is a currently identified
    need, given the recursive composition capabilities of the
    <Property Table> class.

 Q. What restrictions are there on axis_type?
 A. The referenced <Property Table> shall contain an <Axis> with
    a matching axis_type; otherwise, there are no restrictions.
    Any <Axis> within the target <Property Table> may be specified.

 Q. Why is index_on_axis a zero-based index?
 A. Because the corresponding <Axis> data structures for "tick marks"
    are C arrays, and C uses zero-based indices for arrays.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Non Crossing Associations
     Reference To Data Table Library

Associated to (one-way)
	one Property Table instance

Composed of (two-way)
	zero or one Property Table Reference Control Link instance

Component of (two-way)
	zero or more Feature Representation instances
	zero or more Geometry Representation instances
	zero or more Image instances
	zero or more Predefined Function instances
	zero or more Property Set instances
	zero or more Property Table instances
	zero or more Vertex instances

Field Elements:
    EDCS_Attribute_Code axis_type;
   /*
    *  The axis_type field specifies the property being described by
    *  the target <Axis>.
    */

    SE_Integer_Unsigned index_on_axis;
   /*
    *  The index_on_axis field specifies the (0-based) index of the
    *  "tick mark" being referenced on the specified <Axis>. This
    *  allows the "tick mark" to be specified in a manner independent
    *  of the class of the <Axis>. The only restriction is that the
    *  value of index_on_axis shall be between zero and
    *  axis_value_count-1 for the specified <Axis>.
    *
    *  If index_on_axis specifies some value j, then the (j+1)th
    *  "tick mark" on the <Axis> is being referenced, regardless
    *  of the data type of the tick marks specified by the specific
    *  subclass of <Axis> being used.
    */


-------------------------------------------------------------------------------

Class Name: Property Table Reference Control Link

Definition:
 An instance of this DRM class specifies an <Expression> instance,
 the value of which determines the index_on_axis field value of all
 target <Property Table Reference> instances.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     18

Example:
 1. Consider an instance of a geometric model of a wind sock, which
    is to be rotated depending on the wind direction; that is, whenever
    the wind changes, the <Geometry Model Instance> is rotated accordingly.

    The <Rotation> of the applicable <LSR Transformation> controlled
    by a <Rotation Control Link>, which is driven using values from a
    <Property Table>. That is, the <Rotation Control Link> is driven by
    a <Predefined Function>, SE_PREDEF_FUNC_TABLE_VALUE, containing
    a <Property Table Reference> referring to the <Property Table>
    containing the rotation values.

    <LSR Transformation>
    <>
    |
    <Rotation>
    axis  = SE_LSR_TRNSFRM_Y
    angle = 0.0
    <>
    |
    <Rotation Control Link>
    expr_index  = 1
    lower_index = 0
    upper_index = 0
    <>
    |
    <Predefined Function>
    function = SE_PREDEF_FUNC_TABLE_VALUE
    <>
    |
    <Property Table Reference>
    axis_type     = { SE_ELEM_CODE_TYP_ATTRIBUTE, { EAC_WIND_SPEED }}
    index_on_axis = 0
    <>
    |
    <Property Table Reference Control Link>
    expr_indx = 1
    <>
    |
    <Variable>
    meaning = { SE_ELEM_CODE_TYP_ATTRIBUTE, { EAC_WIND_SPEED }}

    The wind sock rotates around the Y axis, depending on wind speed.
    (That is, if the wind speed is zero, it'll hang down toward the
    ground, while if the wind speed is higher, it'll straighten out
    parallel to the ground).

    The <Property Table> is classified as ECC_CONTROL_VALUE, and has a
    <Table Property Description> specified by SE_VAR_CODE_ROTATION_ANGLE.
    The <Property Table> specifies, for each EAC_WIND_SPEED value,
    the angle to which the wind sock should be rotated.

      <Property Table>
      <>
      |
      |
      |- <Classification Data>
      |  ECC_CONTROL_VALUE
      |
      |
      |- <Regular Axis>
      |  axis_type          = { SE_ELEM_CODE_TYP_ATTRIBUTE,
      |                         { EAC_WIND_SPEED }}
      |  interpolation_type = SE_INTERPOLATION_TYP_LINEAR
      |
      |
      |- <Table Property Description>
         meaning = { SE_ELEM_CODE_TYP_VARIABLE, SE_VAR_CODE_ROTATION_ANGLE }

 2. Consider a <Translation Control Link> instance that is to be driven
    using values from a <Property Table>. The table values that are to
    be used are to be cycled through 8 times, with each cycle taking 10
    seconds. This sequence of cycles is to be triggered from outside the
    transmittal.

    <Property Table>
    <>
    |
    |- <Classification Data>
    |  ECC_CONTROL_VALUE
    |
    |- <Regular Axis>
    |  EAC_PERIODIC_CYCLE_TIME
    |
    |- <Table Property Description>
       meaning = { SE_ELEM_CODE_TYP_VARIABLE,
                   {SE_VAR_CODE_TRANSLATION_AMOUNT }}

    The <Translation Control Link>'s controlling <Expression> is a
    <Predefined Function> instance for SE_PREDEF_FUNC_TABLE_VALUE,
    whose argument is a <Property Table Reference> instance referring
    to the <Property Table> containing the translation values.

    <Translation Control Link>
    <>
    |
    <Predefined Function>
    function = SE_PREDEF_FUNC_TABLE_VALUE
    <>
    |
    <Property Table Reference>
    <>
    |
    <Property Table Reference Control Link>
    <>
    |
    <Predefined Function>
    function = SE_PREDEF_FUNC_CYCLE_TIME
                 <>
                  |
       ___________|________________________________________________
       |A         |B        |C         |D       |E       |F       |G
       |          |         |          |        |        |        |
    Variable   Literal  Predefined  Literal  Literal  Literal  Literal
                (10)     Function     (8)      (0)      (10)   (TRUE)
                    (SE_PREDEF_FUNC_SIM_GMT)

    Note that the <Table Property Description> for the control values and
    the <Variable> instance controlling the referencing expression have
    the same meaning = { SE_ELEM_CODE_TYP_VARIABLE,
    {SE_VAR_CODE_TRANSLATION_AMOUNT }}

    The <Property Table Reference Control Link> controls which value is
    is referenced from the <Property Table>, and is itself driven by
    the SE_PREDEF_FUNC_CYCLE_TIME <Predefined Function>. The cycle
    length (10 seconds) and the number of cycles (8) are specified
    as arguments to the function.

    The <Variable> drives the <Property Table Reference Control Link>
    through the <Predefined Function>, so that it determines which value
    is referenced from the <Property Table>. To provide the hook for
    this <Variable> to be set from outside the transmittal, the
    <Variable> is associated with an <Interface Template> (not shown).

    If this <Translation Control Link> appears inside a <Model>, then
    to set the <Variable> using another variable from outside the
    transmittal, the data provider merely has to have the
    <Geometry Model Instance> supply a <Variable> from its own
    context for the value of the <Model>'s <Variable>.

FAQS:
     None.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more Property Table Reference instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Positive expr_index;
   /*
    *  For the given <Property Table Reference Control Link> instance,
    *  the value of the expr_index field specifies which of the ordered
    *  <Expression> components is that which controls the index_on_axis
    *  value of the affected <Property Table Reference> instances.
    */


-------------------------------------------------------------------------------

Class Name: Property Value

Definition:
 An instance of this DRM class specifies a property of the attributed
 SEDRIS object and its value.

Primary Page in DRM Diagram:
     6

Secondary Pages in DRM Diagram:
     2
     3
     8
     9
     12
     18
     19

Example:
 1. The <Property Value> instances of a representation of a lake might
    include its EAC_SURFACE_MATERIAL_TYPE.

 2. Consider the man-made materials that can be found on any surface,
    such as cloth, carpet, asphalt, silk, metal, and natural materials,
    such as wood. To specify the material making up a wooden wall
    represented by a <Polygon> instance, the data provider represents it as

             <Polygon>
               <>
               |
               |
             <Property Value>
             meaning = { SE_PROP_CODE_TYP_ATTRIBUTE,
                        { EAC_SURFACE_MATERIAL_TYPE }}
             value = { EDCS_AVT_ENUMERATION, { EEC_SRFMATTY_WOOD }}

 3. Consider an <Areal Feature> representing a surface covered with
    vegetation. To specify the type of vegetation, the data provider
    gave it a <Property Value> component with a meaning of
    EAC_VEGETATION_TYPE, and the value specifying the exact type
    of vegetation.

 4. Consider an <Areal Feature> labeled as "Red Field", because the
    surface represented has clay soil present. To describe the soil
    composition at some point or for some surface, <Property Value>
    instances are used, so a <Property Value> of the appropriate
    attribute is attached to the <Areal Feature>.

 5. Consider acoustic response, that is, changes to characteristics of
    objects in response to acoustic stimuli, such as the resonant
    frequency of a plate, response (such as echo, phase shift, absorption,
    diffraction), or frequency.

 6. Consider electromagnetic emission, that is, the emission
    characteristics of a geometric object or feature, including
    the electromagnetic wavelengths, amplitudes, and directionality.
    Examples include
          (A) The thermal signature of a rock at noon is described by its
              electromagnetic emission.
          (B) The headlight of a truck.

 7. Consider electromagnetic response, that is, changes to characteristics
    of objects in response to electromagnetic stimuli. Some examples of
    such properties include reflective and specular characteristics of a
    surface.

 8. Consider hydrology, that is, an attribute describing some aspect of
    the flow of water at a location or on a surface. For the <Polygon>
    instances that represent Salmon Creek, an example hydrology property
    represented by <Property Value> instances is the average speed of
    currents in the stream bed.

 9. <Property Value> instances can provide metrics, measurements that
    that relate to scalar properties, such as the elevation at a
    particular location.

FAQS:
     None.

Superclass: Property

Constraints:
     Publishable Object
     Property Characteristic Restrictions
     Property Meaning Restrictions
     No Attribute Conflicts

Composed of (two-way) (inherited)
	zero or more Property Characteristic instances

Component of (two-way)
	zero or more Camera Point instances
	zero or more Classification Data instances
	zero or more Environmental Domain Summary instances
	zero or more Feature Representation instances
	zero or more Feature Topology instances
	zero or more Geometry Representation instances
	zero or more Model instances
	zero or more Property Description instances
	zero or more Property Set instances
	zero or more Reference Surface instances
	zero or more Table Property Description instances

Inherited Field Elements:
    SE_Property_Code meaning;
   /*
    *  The meaning field specifies the meaning of the given
    *  <Property> instance.
    */


Field Elements:
    EDCS_Attribute_Value value;
   /*
    *  The value field specifies the value of the given property.
    */


-------------------------------------------------------------------------------

Class Name: Proximity Data

Definition:
 An instance of this DRM class specifies the semantic meaning of
 the association relationship with which it is bound, which will
 represent a spatial relationship.

Primary Page in DRM Diagram:
     9

Example:
     None.

FAQS:
     None.

Superclass: Base Spatial Association Data

Constraints:
     Publishable Object

Inherited Field Elements:
    SE_Spatial_Association_Meaning_Type meaning;
   /*
    *  The meaning field specifies the semantic meaning of the association
    *  relationship with which the given instance of
    *  <Base Spatial Association Data> is bound.
    */


Field Elements:
    SE_Long_Float distance;
   /*
    *  The value of the distance field, which is measured in metres,
    *  represents the shortest distance between any two points of thing1
    *  and thing2, where thing1 and thing2 are the environmental objects
    *  represented by the SEDRIS object instances for which a relationship
    *  is being represented by the given instance of <Proximity Data>.
    */


-------------------------------------------------------------------------------

Class Name: PS Augmented 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Augmented Polar Stereographic (APS) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. The Augmented Polar Stereographic Reference Frame provides reduced
    distortion at the polar regions of the Earth. This
    spatial reference frame is used for polar region navigation.

FAQS:
 Q. Where can users obtain further information on APS?
 A. See the SRM for additional details.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Map_Projection_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: PS Surface Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Polar Stereographic (PS) Surface SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. The Polar Stereographic Reference Frame provides reduced distortion
    at the polar regions of the globe. This spatial reference frame is
    used for polar region navigation.

FAQS:
 Q. Where can users obtain further information on PS?
 A. See the SRM for additional details.

Superclass: Location Surface

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

Field Elements:
    SRM_Map_Projection_Surface_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: Pseudo Code Function

Definition:
 An instance of this DRM class specifies the behaviour of a
 function that does not correspond to a <Predefined Function>.

Primary Page in DRM Diagram:
     16

Example:
     None.

FAQS:
 Q. Why is <Pseudo Code Function> needed?  Doesn't this leave room
    for ambiguity ?
 A. The decision to support <Pseudo Code Function> was based on three
    primary concerns.  First, we felt that it would be nearly impossible to
    capture every possible function that would be used to define the
    behaviour of <Control Link> instances.  Second, <Expression> instances
    lack the expressive power to define functions that require looping,
    branching, etc.  Finally, given the first two, it is recognized that many
    functions that are relatively simple when viewed as pseudo code or code
    fragments, would become overly complicated when converted into an
    expression tree.  It is important to keep in mind, that while any valid
    <Expression> instances could be converted into executable code or
    structures that could be directly used by a consuming system, most
    systems will not use them that way.  Currently, the majority of
    consuming systems would require that the expression be recoded into
    the consuming system.  For complex functions, pseudo code may be
    easier to convert.

Superclass: Function

Constraints:
     Publishable Object
     Non Cyclic Aggregations

Composed of (two-way) (inherited)
	zero or more {ordered} Expression instances 

Component of (two-way) (inherited)
	zero or more Control Link instances
	zero or more Feature Model Instance instances, each with a Model Instance Template Indices link object
	zero or more Function instances
	zero or more Geometry Model Instance instances, each with a Model Instance Template Indices link object

Inherited Field Elements:
    EDCS_Attribute_Value_Type value_type;
   /*
    *  The value_type of a <Function> instance returns the type of value
    *  produced when the <Function> instance is evaluated for its arguments.
    */


Field Elements:
    SE_String name;
   /*
    *  The name field specifies the name of the function being represented.
    */

    SE_String pseudo_code;
   /*
    *  The pseudo_code field specifies the psuedo code describing the
    *  behaviour of the function represented by the given
    *  <Pseudo Code Function> instance.
    */


-------------------------------------------------------------------------------

Class Name: Pyramid Directional Light

Definition:
 An instance of this DRM class specifies a light, the intensity
 of which varies depending on the observer's position
 relative to the light's location, direction, and lobe, which is
 pyramid-shaped.

 It is possible when defining the <Lobe Data> component of a
 <Pyramid Directional Light>, to set the horizontal_width
 or vertical_width to 0. When one of these values is set
 to 0, then it means infinity, and that there are no bounds
 in that direction. The shape of the light then becomes a
 wedge shape.

 If a secondary colour exists, then it is seen outside the lobe.

Primary Page in DRM Diagram:
     21

Example:
 1. Consider a <Pyramid Directional Light> with a primary colour that
    is a <Colour Index> with intensity_level  = 0.9, and which also
    has a secondary colour. The minimum_colour_intensity is 0.0. The
    use_full_intensity flag is SE_FALSE. The <Lobe Data> component has
    horizontal_width = 60.0 and vertical_width = 60.0.

    equation:
    final_intensity = minimum_colour_intensity +
               ((((width / 2.0) - degrees_away_from_direction_vector)
                    / (width / 2.0))
                       * (full_intensity - minimum_colour_intensity))

    At 10 degrees from the light direction vector in the horizontal
    direction, the final_intensity is 0.6 =
    0.0 + ((((60.0 / 2.0) - 10.0) / (60.0 / 2.0)) * (0.9 - 0.0))

    At 35 degrees from the light direction vector in the horizontal
    direction, the final_intensity is 1.0 (using the secondary colour),
    because this lies outside the lobe.

 2. Consider a <Pyramid Directional Light> with a primary colour that
    is an <Inline Colour>, so that the full intensity is 1.0.
    The minimum_colour_intensity is 0.2. The use_full_intensity
    flag is SE_TRUE. The component <Lobe Data> horizontal_width is 20.0
    and the vertical_width is 20.0.

    Lying on the light direction vector (that is, at 0 degrees), the
    final_intensity is 1.0.

    At 10 degrees from the light direction vector in the horizontal
    direction, the final_intensity is 0.2, since this position is
    outside the lobe.

FAQS:
     None.

Superclass: Directional Light Behaviour

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one Lobe Data instance 
	one Location instance

Component of (two-way) (inherited)
	one or more Light Rendering Properties instances

Field Elements:
    SE_Boolean use_full_intensity;
   /*
    *  If SE_TRUE, the use_full_intensity field specifies that the full
    *  intensity of the light is shown in the pyramid shaped area.
    *  Otherwise, the intensity of the light decreases (towards the
    *  minimum_colour_intensity value) as one moves away from the
    *  SE_REF_VEC_TYP_LIGHT_DIRECTION vector.
    */

    SE_Long_Float minimum_colour_intensity;
   /*
    *  The minimum_colour_intensity field's value is used in conjunction
    *  with the primary colour's intensity value. If the primary colour
    *  is a <Colour Index> instance, the full intensity is specified by
    *  its intensity_level field. If the primary colour is an
    *  <Inline Colour> instance, the full intensity is 1.0.
    *
    *  A location in the direct path of the <Lobe Data>'s
    *  SE_REF_VEC_TYP_LIGHT_DIRECTION vector receives the
    *  full intensity value. If use_full_intensity is SE_FALSE,
    *  the intensity decreases with increasing distance from
    *  the light direction vector, until the boundary
    *  specified by the horizontal and vertical <Lobe Data>
    *  widths is reached. Outside the lobe, the intensity is
    *  minimum_colour_intensity.
    *
    *  If the minimum_colour_intensity value is 0.0, the
    *  secondary colour (if present) will be seen outside the
    *  lobe. If no secondary colour is present, then nothing
    *  is visible outside the lobe.
    */

    SE_Boolean invisible_behind;
   /*
    *  If the value of the invisible_behind field is SE_TRUE, the
    *  directional light is invisible when viewed from behind the
    *  plane of the directional light.
    */


-------------------------------------------------------------------------------

Class Name: Quadrant Data

Definition:
 An instance of this DRM class specifies which quadrant of the
 quadtree is represented by the associated branch of the given
 quadrant-related aggregation, where the quadtree as a whole
 corresponds to the entire aggregation.

Primary Page in DRM Diagram:
     4

Secondary Pages in DRM Diagram:
     8

Example:
 See <Quadrant Related Features>, <Quadrant Related Geometry>
 for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Quadrant Related Organizing Principle

Field Elements:
    SE_Quadrant quadrant;
   /*
    *  The quadrant field specifies the quadrant represented by the
    *  associated branch of the given quadtree related organization.
    */


-------------------------------------------------------------------------------

Class Name: Quadrant Related Features

Definition:
 An instance of this DRM class specifies an aggregation of
 <Feature Hierarchy> objects in which each component <Feature Hierarchy>
 represents a branch of a Quadrant. The quadrant represented by a
 branch is specified by the <Quadrant Data> associated with that
 branch. The bounding region that the <Feature Hierarchy> components
 occupy is defined by the <Spatial Extent> of the
 <Quadrant Related Features>.

Primary Page in DRM Diagram:
     8

Example:
 1. Consider a region of terrain that is organized into quadrants, where the
    upper-right quadrant consists of ocean, and the other three quadrants
    consist of the terrain bordering the ocean. The ocean quadrant is not
    represented in the producer's system. The region is represented in SEDRIS
    by a <Quadrant Related Features> with 3 component <Union Of Features>.
    (Since the remaining quadrant had no <Feature Representation> instances,
    it was not represented.)

 2. Consider a <Quadrant Related Features> instance linked to a
    <Union Of Features> instance representing its upper-right quadrant,
    via a <Quadrant Data> instance. The <Quadrant Data> instance's
    quadrant value is SE_QUADRANT_RIGHT_FRONT.

              <Quadrant Related Features>
                       <>
                       |
                       |-- <Quadrant Data>
                       |   quadrant = SE_QUADRANT_RIGHT_FRONT
                       |
                 <Union Of Features>

FAQS:
 Q. If a <Quadrant Related Features> has less than 4 components, why
    is the data being organized under a <Quadrant Related Features>
    at all?
 A. A <Quadrant Related Features> is used when an object in the hierarchy
    contains spatial components that occupy a certain quadrant. These
    quadrants might not contain <Primitive Feature> objects, which is why
    instances of this class can have less than four components.

 Q. Where is the <Spatial Extent> component?
 A. <Quadrant Related Features> automatically has a <Spatial Extent>
    component, because it is a <Feature Representation>. Unlike
    <Feature Representations> in general,
    however, <Quadrant Related Features> has a constraint stating
    that the <Spatial Extent> component is mandatory.

Superclass: Aggregate Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Non Cyclic Aggregations
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects
     Quadrant Related Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or more Colour instances
	zero or more Feature Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance 
	zero or more Property Description instances
	zero or one Spatial Extent instance

Composed of (two-way)
	a bounded set of 1..4 Feature Hierarchy instances, each with a Quadrant Data link object

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances
	zero or more Alternate Hierarchy Related Features instances, each with a Hierarchy Data link object
	zero or more Classification Related Features instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Feature Model instance
	zero or more LOD Related Features instances, each with a Base LOD Data link object
	zero or more Octant Related Features instances, each with a Octant Data link object
	zero or more Perimeter Related Features instances, each with a Perimeter Data link object
	zero or more Quadrant Related Features instances, each with a Quadrant Data link object
	zero or more Spatial Index Related Features instances, each with a Spatial Index Data link object
	zero or more State Related Features instances, each with a State Data link object
	zero or more Time Related Features instances, each with a Time Constraints Data link object

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant, that is, each <Feature Representation> instance that
    *  exists in the component tree rooted at the given <Aggregate Feature>,
    *  shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Feature Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


-------------------------------------------------------------------------------

Class Name: Quadrant Related Geometry

Definition:
 An instance of this DRM class specifies an aggregation of
 <Geometry Hierarchy> objects in which each component
 <Geometry Hierarchy> represents a branch of a Quadrant. The quadrant
 represented by a branch is specified by the <Quadrant Data>
 associated with that branch. The bounding region that the <Geometry
 Hierarchy> components occupy is defined by the <Spatial Extent> of the
 <Quadrant Related Geometry>.

Primary Page in DRM Diagram:
     4

Example:
 1. Consider a representation of a region of terrain that is organized into
    quadrants, where the upper-right quadrant consists of ocean, and the
    other three quadrants consist of the terrain bordering the ocean. The
    ocean quadrant is not represented in the producer's system. The region
    is represented in SEDRIS by a <Quadrant Related Geometry> instance
    with three <Union Of Primitive Geometry> components. (Since the
    remaining quadrant had no <Polygon> instances, it was not represented.)

 2. Consider a quadtree that is represented in a transmittal by
    an <Quadrant Related Geometry> instance. The southwest quadrant
    of the quadtree is a <Union Of Primitive Geometry> aggregated by the
    <Quadrant Related Geometry> as follows:

              <Quadrant Related Geometry>
                       <>
                       |
                       |-- <Quadrant Data>
                       |   quadrant = SE_QUADRANT_LEFT_BACK
                       |
           <Union Of Primitive Geometry>

FAQS:
 Q. If a <Quadrant Related Geometry> has less than 4 components, why
    is the data being organized under a <Quadrant Related Geometry>
    at all?
 A. A <Quadrant Related Geometry> is used when an object in the hierarchy
    contains spatial components that occupy a certain quadrant. These
    quadrants might not contain <Primitive Geometry> objects, which is
    why instances of this class can have less than four components.

 Q. Where is the <Spatial Extent> component?
 A. <Quadrant Related Geometry> automatically has a <Spatial Extent>
    component, because it is a <Geometry Hierarchy>. Unlike <Geometry
    Hierarchies> in general, however, <Quadrant Related Geometry>
    has a constraint stating that the <Spatial Extent> component
    is mandatory.

Superclass: Aggregate Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects
     Quadrant Related Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance

Composed of (two-way)
	a bounded set of 1..4 Geometry Hierarchy instances, each with a Quadrant Data link object

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


-------------------------------------------------------------------------------

Class Name: Reference Origin

Definition:
 An instance of this DRM class specifies a location representing the
 origin of the spatial reference frame in which the data was represented
 originally.  This location is intended to convey information about
 how the original data was represented on the data provider's system.

Primary Page in DRM Diagram:
     1

Example:
 1. A producer's image generator is configured to understand the Local
    (origin offset from the UTM zone origin) Augmented (Z added) UTM
    reference frame the database is built in.  However, the producer
    stored the data in SEDRIS in the Augmented UTM reference frame with
    the local offset removed.

    For purposes of comparison, the consumer would like to know the offset
    used in the original database development.  This is so the producer can
    do direct comparisons of the producer and consumer systems using
    their respective image generators.

FAQS:
 Q. Is the <Reference Origin> needed to properly locate the data?
 A. No.  The <Reference Origin> is not to be used for locating
    data.  It is only intended to convey information about how
    the producer's native data is stored.

 Q. What would the <Reference Origin> be used for?
 A. Correlation of data between consumer and producer.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	one Location instance

Component of (two-way)
	one Transmittal Root instance

Field Elements:
    SE_SRF_Info srf_info;
   /*
    *  The srf_info field specifies the spatial reference frame within
    *  which the given <Reference Origin> instance is defined.
    */


-------------------------------------------------------------------------------

Class Name: Reference Surface

Definition:
 An instance of this DRM class specifies, for the hierarchy instance(s)
 of which it is a component, a surface which is to be used to
 resolve the elevation of <Location 2D> instances in the
 component tree rooted at each hierarchy instance.

 In addition, a <Reference Surface> specifies how the
 surface is to be used in the resolution process.

 A hierarchy instance requires a <Reference Surface> if
 - there are <Location 2D> instances below the hierarchy,
 - the <Location 2D> instances are in the scope of a 3D spatial
   reference frame, and
 - the data provider wants the locations to lie on a
   surface other than the last default surface (The initial
   default is the spatial reference frame's vertical offset model).

 A <Geometry Hierarchy>'s and <Reference Surface>'s field values
 define a surface for the resolution process as follows; there
 are several cases.

 1. The <Geometry Hierarchy> is a <Property Grid Hook Point> that
    aggregates at least one <Property Grid> with these qualifications:
    a. its <Classification Data> matches the <Reference Surface>'s
       classification field,
    b. it has 2 spatial axes corresponding to the horizontal coordinates
       of the SRF, and
    c. it has a <Table Property Description> for height, elevation, or
       bathymetry.

    If the <Property Grid> meets the above criteria, then it
    defines a resolution surface.

 2. The <Geometry Hierarchy> is a <Union Of Primitive Geometry> that
    aggregates <Surface Geometry> with <Classification Data> matching
    the <Reference Surface>'s classification field. In this case, all
    such <Surface Geometry> instances combine to form the resolution
    surface. (Note that the multiplicity_rule field deals with surface
    complexity).

 3. The <Geometry Hierarchy> is a Distance, Index, Map Scale, or
    Spatial Resolution <LOD Related Geometry> that
    aggregates (directly or indirectly) <Geometry Hierarchy> cases 1
    and/or 2 above under an LOD branch selected by the
    <Reference Surface> lod_rule field.

 4. The <Geometry Hierarchy> aggregates some combination of cases 1,
    2, or 3.

    In general, the set of all <Surface Geometry> and <Property Grid>
    instances the <Geometry Hierarchy> is culled by matching the
    <Reference Surface> classification field (and <Property Grid>
    qualifications) and matching LOD branches to the lod_rule field.
    The remaining geometry is the resolution surface used for ray
    intersections.

Primary Page in DRM Diagram:
     3

Secondary Pages in DRM Diagram:
     8
     9

Example:
 1. Consider an <Environment Root> ER, having both a
    <Union Of Geometry Hierarchy> component UGH and a
    <Union Of Features> component UF.
       The <Union Of Geometry Hierarchy> instance contains a
    <Union Of Primitive Geometry> instance UPG_1 with a
    <Classification Data> component specifying ECC_TERRAIN_ELEVATION, and
    contains <Polygon> instances, which inherit the <Classification Data>.
    That is, UPG_1 is a polygonal representation of terrain, forming part
    of the larger environmental representation ER.

    UF, the feature representation of ER, has a <Reference Surface>
    component, which associates to the <Union of Primitive Geometry>
    and has these field values:
        multiplicity_rule = SE_RS_ELEV_SEL_HIGHEST
        classification    = ECC_TERRAIN_ELEVATION
        lod_rule          = SE_RS_LOD_SEL_ALL

                              <Environment Root>
                                      <>
                                       |
               ----------------------------------------------------
               |                                                  |
       <Union Of Geometry Hierarchy>                    <Union Of Features>
              <>                                                 <>
               |                                                  |
       <Union Of Primitive Geometry>  <--------------   <Reference Surface>
              <>
               |
       ------------------------------
       |                            |   .....
    <Classification Data>      <Polygon>
    ECC_TERRAIN_ELEVATION

    Consequently, <Location 2D> instances found in the <Union Of Features>
    aggregation tree of UF use the terrain polygons of UPG_1
    to resolve elevation.

 2. Continuing example 1, the <Union Of Geometry Hierarchy> UGH
    under ER contains another <Union Of Primitive Geometry>
    instance UPG_2 containing <Polygon> instances classified as
    ECC_INLAND_WATER_ELEVATION. UF, in turn, aggregates a
    <Union Of Features> instance UF_2, which is
    classified as ECC_ENGINEERING_BRIDGE and contains <Linear Feature>
    instances using <Location 2D> instances. UF_2 also contains a
    <Reference Surface> instance with <Classification Data>
    tagged as ECC_INLAND_WATER_ELEVATION, and associated to UPG_2.

    Consequently, the <Location 2D> instances of the
    ECC_ENGINEERING_BRIDGE UF_2 will have elevation values derived
    for them by being evaluated against UPG_2.

 3. Consider a <Reference Surface> instance R for which the geometry is a
    <Spatial Index Related Geometry> instance S. Each branch of S is a
    polygonal representation, part of which represents terrain surface,
    part roads, and part forest canopy. R associates to S, and its
    classification field is set to ECC_TERRAIN_ELEVATION. The resolution
    process then ignores the road and canopy polygons, but sees all the
    terrain polygons regardless of which union they're in.

    Consider a <Linear Feature> L representing a road, which mostly
    stays on the road geometry but sometimes strays off. L
    is placed in a <Union Of Features> aggregating a different
    <Reference Surface> instance R2 with
    associates to the same <Spatial Index Related Geometry> but
    has classification = ECC_ROAD, but which like R associates to S.
    The resolution process for R2 sees the road <Polygon> instances
    and ignores the others. For <Feature Node> instances that stray
    off the road, the corresponding <Location 2D> instances' rays will
    fail to intersect any road polygon, so the resolution process (as
    per case 3) applies, and the resolution process falls back on the
    previous override, which was the terrain surface.

 4. Consider a terrain representation organized in 3 minute regions,
    which are grouped into 1 degree cells that are collected under one
    <Union Of Geometry Hierarchy> instance. In the same transmittal,
    <Feature Representation> and non-terrain <Geometry Representation>
    instances are organized under
    a corresponding spatial organization.  Each 3 minute hierarchy has
    a <Reference Surface> associated to the corresponding 3 minute
    terrain. Each 1 degree hierarchy has a <Reference Surface>
    associated to the corresponding 1 degree terrain. Each of the
    highest level feature and non-terrain geometry hierarchies has a
    <Reference Surface> associated to the terrain <Geometry Hierarchy>.
        In this scheme, a <Location 2D> in a 3 minute region finds
    its resolution surface in the corresponding 3 minute terrain.
    If a <Location 2D> "strays" outside its region (i.e.,
    strict_organizing_principle=SE_FALSE), then the containing
    1 degree terrain resolves the <Location 2D>. If the location
    ray fails to intersect the 1 degree surface, then the full
    terrain <Union Of Geometry Hierarchy> is used.  If ray/surface
    intersection still fails, the elevation is resolved by the
    vertical offset model.

FAQS:
 Q. *Why* does a hierarchy need a <Reference Surface>? What do you mean
    by "elevations" for <Location 2D> instances? They don't have elevation.
 A. In a 3D spatial reference frame, <Location 2D> instances are thought of
    as lying on a surface. Which surface is intended seems to be subjective
    at best. A cartographer may prefer the vertical offset model as the
    <Location 2D> surface, while others prefer the "terrain surface".
    "Terrain surface" is also a subjective term, and terrain surfaces have
    been mapped to the DRM in a variety of ways. Even if one notion of
    surface for <Location 2D> instances were mandated, it would not meet
    everyone's requirements.

    The solution is to mandate a clearly defined surface (the initial
    default) *and* provide a flexible mechanism to override the default
    for all or for selected parts of the transmittal.

 Q. How does a <Feature Hierarchy> or <Geometry Hierarchy> use a
    <Reference Surface> to resolve elevations for aggregated
    <Location 2D> instances?
 A. Consider a <Reference Surface> that is associated to a <Geometry
    Hierarchy> that contains a surface. A <Location 2D> corresponds to
    the (unique) ray which is:
    1. normal to the surface of the SRF ellipsoid (*),
    2. intersects the ellipsoid at the same horizontal coordinates as the
       <Location 2D>, and
    3. extends below the surface of the ellipsoid to a depth
       equal to the minor radius of the ellipsoid.

    (*) NOTE: For augmented Projected SRFs, this is the projection
              ellipsoid. For LSR, use the z=0 plane, where z is the
              coordinate axis specified by the SRM_LSR_3D_Parameters
              up_direction value.

    The intersection of this ray with the resolution surface defines the
    candidate set for the corresponding 3D location. One 3D location is
    selected from the ray/surface intersection set according to the
    following three cases:
    1) If the set contains 1 and only 1 element, the spatial position
       of that point resolves the <Location 2D> instance.

    2) If the set contains more than one element, the <Reference Surface>
       field multiplicity_rule value is used to select exactly one element.
       (For instance, if several overlapping <Property Grids> with
       <Grid Overlap> components are part of the <Reference Surface>, use
       <Grid Overlap>'s rules to define the <Reference Surface> in the
       overlap region of two or more of the surface grids. If the
       intersection set still has more than one point, use
       multiplicity_rule.)

    3) If the intersection is empty, then look for other <Reference Surface>
       instances higher up the aggregation tree and repeat this resolution
       process with that surface instead. If there are no other <Reference
       Surface> instances higher up the aggregation tree, then use the
       vertical offset model, which is guaranteed to be a case 1 surface.
       (See also example 5).

 Q. What if there is no single <Union Of Primitive Geometry> that defines
    the <Reference Surface>?
 A. There is no requirement that the aggregate be free of non-reference
    surface geometry (See example 3).  In this case, find the higher level
    <Geometry Hierarchy> that aggregates the desired <Union Of Primitive
    Geometry> sub-hierarchies, and use that for the <Reference Surface>
    association.

 Q. What happens to <LSR 2D Location> instances in an LSR <Model> when the
    <Model> is instanced by a model instance object in a non-LSR 3D
    spatial reference frame?
 A. That depends on whether or not the scoping SRF supports <Location 2D>
    instances.

    - If <Location 2D> instances are supported in the scoping SRF, (for
      example, if the scoping SRF is 3D geodetic, for which 2D geodetic
      exists), these <LSR 2D Location> instances are converted to
      <Location 2D> instances in the instancing 3D SRF using a 3 step
      process:

      Step 1) An <LSR 2D Location> is converted to <LSR 3D Location> by
              resolving to the LSR vertical offset model (z=0 plane, where
              z is the coordinate axis specified by the SRM_LSR_3D_Parameters
              up_direction).
      Step 2) The resulting <LSR 3D Location> is converted to a <Location 3D>
              in the scoping 3D SRF in the usual (model instance) way.
      Step 3) If the SRF supports <Location 2D> instances (e.g. geodetic),
              then the <Location 3D> is collapsed to a <Location 2D> with
              the same horizontal coordinates.

    - Otherwise, if the scoping SRF does not support <Location 2D> instances,
      then the <LSR 2D 2D Location> is converted to 3D by setting the
      tertiary axis value to zero.

     (Note 1): LSR models are not permitted to contain <Reference Surface>
               instances; see constraints.
     (Note 2): Conformal behaviour may also be modeled with
               <LSR 3D Location Control Link> instances.

 Q. Can a <Geometry Model Instance> be used for a <Reference Surface>
    association?
 A. Yes, if the <Model>'s spatial reference frame matches the
    currently scoped 'world' spatial reference frame.

 Q. How are <2D Location> instances converted consuming data in a different
    spatial reference frame?
 A. There are two cases.

    Case 1 - both SRFs have the same ORM.
    Case 2 - The two SRFs have different ORMs.

    In case 1 (Same ORM), the ray determined by the
              <2D Location> is invariant, so the horizontal coordinates are
              converted in the usual way.

    In case 2 (Different ORMs), the ray may change, so three
              steps are needed:

    Step 1) Resolve elevation in the originating SRF and convert the
            <Location 2D> to <Location 3D>.
    Step 2) Convert the <Location 3D> to the second SRF (conversion not
            currently supported).
    Step 3) Collapse the <Location 3D> to a <2D Location>.

 Q. If a transmittal is consumed in an SRF other than its native SRF,
    should elevations be resolved in the originating or the consuming SRF?
 A. It should not make a difference if the two SRFs are both "real world" or
    both Augmented Projected Coordinate Systems (APCS).  In the case in which
    one is "real" world and the other is APCS, there are two ways to deal
    with the "conversion distortion" that tends to bend flat surfaces.

    Consider a <Location 2D> whose ray intersects the resolution surface
    near the centre of exactly one triangular <Polygon> instance. The
    intersection point determines the elevation, and therefore a
    corresponding <Location 3D>.  If elevations are resolved in the
    first SRF, and the <Location 3D> is then converted, the location will
    match the transmittal point, but it may no longer lie on the triangle's
    surface. On the other hand, if the <Location 2D> is converted and then
    elevations are resolved in the second SRF, the corresponding
    <Location 3D> will lie on the triangle's surface, but may differ a
    little in elevation from the originating point.  Therefore if absolute
    location is more important than conformality, resolve in the originating
    SRF. If conformality is more important, resolve in the consuming SRF.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Model Spatial Reference Frame

Associated to (one-way)
	one Geometry Hierarchy instance 

Composed of (two-way)
	zero or more Property Value instances 

Component of (two-way)
	zero or more Feature Hierarchy instances
	zero or more Geometry Hierarchy instances

Field Elements:
    EDCS_Classification_Code classification;
   /*
    *  Within the resolution surface, use only geometry matching
    *  the (possibly elaborated) classification specified by the
    *  classification field.
    */

    SE_RS_Elevation_Select multiplicity_rule;
   /*
    *  The multiplicity_rule field specifies a rule to select a single
    *  point from multiple intersections of a ray with a resolution surface.
    */

    SE_RS_LOD_Select lod_rule;
   /*
    *  The lod_rule field specifies a rule to select one LOD branch.
    */


-------------------------------------------------------------------------------

Class Name: Reference Vector

Definition:
 An instance of this DRM class specifies a unit vector, the
 meaning of which is specified by its vector_type field.

Primary Page in DRM Diagram:
     7

Secondary Pages in DRM Diagram:
     4
     5
     9
     18
     21

Example:
 1. Consider a <Polygon> specified in a 3D LSR spatial reference frame,
    for which a data provider wishes to explicitly provide the
    surface normal vector so that consumers do not need to calculate
    the surface normal when consuming that particular <Polygon>.
    The data provider specifies this vector information as a
    <Reference Vector> component of the <Polygon> as follows:

        <Polygon>
        <>
        |
        -------------------------------
        |                             |
       (other components)      <Reference Vector>
                               unit_vector = ...
                               vector_type = SE_REF_VEC_TYP_FACE_NORMAL
                                     <>
                                     |
                               <LSR 3D Location>

    Note that since the <Reference Vector> is a component of a <Polygon>,
    it specifies an <LSR 3D Location> component in order to comply with
    <<Required Reference Vector Location>>.

 2. A <Reference Vector> contained by a <Polygon>, representing a normal
    vector that is used for rendering purposes, i.e. to calculate colour and
    shading when rendering the <Polygon>. This <Reference Vector> would have
    a vector_type of SE_REF_VEC_TYP_RENDERING_NORMAL.

 3. Consider a <Polygon> instance F that represents an ECC_FENCE,
    where F is a quadrilateral as shown below.

    ----------------------------------------
    |                                      |
    |                                      |
    |                                      |
    ----------------------------------------

    F is instanced on some terrain representation, such that the
    plane of F is perpendicular to the surrounding terrain.

    F has radar cross sections that are dependent on aspect angles
    (azimuth and elevation). These aspect angles are defined with
    respect to F's normal vector and F's azimuth vector.

    Consequently, F has two <Reference Vector> components.
                 <Polygon> "F"
                    <>
    -------------------------
    (other components)      |
                            | - <Reference Vector>
                            |   unit_vector = ...
                            |   vector_type = SE_REF_VEC_TYP_FACE_NORMAL
                            |
                            |
                            | - <Reference Vector>
                                unit_vector = ...
                                vector_type =  ? AZIMUTH

    The SE_REF_VEC_TYP_FACE_NORMAL <Reference Vector> is the unit vector
    that is perpendicular to the plane of F, and which points away from F
    on its outside face. The AZIMUTH <Reference Vector>
    is the unit vector that lies in the plane of F and points straight
    up (that is, like F is normal to the plane of the terrain).

 4. A segment of the road has a reflector (actually, a retro-reflector) on it
    and is modeled as a <Line>.  The <Line> has a normal vector that is
    perpendicular to it and an azimuth reference parallel to it.  This is
    sufficient to describe radar cross sections of the road as a function of
    aspect angles.  However, the normal vector for the infrared bands depends
    on the orientation of the retro-reflector, not the road.  This because
    radars "see" the road but infrared (or more obviously, car lights)
    "sees" the retro-reflector.  In this example, the <Line> instance has
    four <Reference Vector> components
    (radar-normal, radar-azimuth, infrared-normal, and infrared-azimuth).

 5. A normal vector used for reflectivity/emissivity calculations.
    This would have vector_type =
    SE_REF_VEC_TYP_REFLECTIVITY_EMISSIVITY_NORMAL.

 6. A vector specifying the direction an <Infinite Light> illuminates.
    This would have a vector_type of SE_REF_VEC_TYP_LIGHT_DIRECTION.

FAQS:
 Q. Why does SE_Reference_Vector_Type have so many entries
    that appear to be mathematically similar, such as the
    several different varieties of normal?
 A. In the general case, a location on an environmental
    object may have distinct vectors for each of these
    SE_Reference_Vector_Type entries, although in specific
    instances such vectors may coincide with one another.

    For example, consider a large flat window, represented
    by a <Polygon> instance. The geometric normal
    (SE_REF_VEC_TYP_FACE_NORMAL) in this example coincides
    with the radar SE_REF_VEC_TYP_EMISSIVITY_NORMAL and
    with the infrared SE_REF_VEC_TYP_EMISSIVITY_NORMAL.

    However, consider a more complex geometric representation -
    in this example, a representation of an aircraft. Here the
    SE_REF_VEC_TYP_FACE_NORMAL is not applicable, and the radar
    and infrared SE_REF_VEC_TYP_EMISSIVITY_NORMAL
    <Reference Vector> instances do not coincide.

 Q. Why can a <Vertex> have only one <Reference Vector> component,
    when a <Polygon>, <Point>, or <Line> can have more than one?
 A. A <Vertex>, unlike a <Primitive Geometry> such as a <Point>,
    does not represent an environmental object, but only part of
    an environmental object.

    --------------------------

    Examples:
    - A ship may be represented by a <Point>. The fact that the
      <Point> represents an environmental object is indicated
      by providing it with an appropriate <Classification Data>
      component.

    - An ECC_EXTERNAL_WALL within an ECC_BUILDING may be represented
      by a <Polygon> instance, but the individual <Vertex> instances
      specifying that <Polygon> are not, themselves, representations
      of environmental objects.

    - An ECC_BRIDGE may be represented by a <Line> instance, while
      the individual <Vertex> instances of which the <Line> is
      composed do not themselves represent environmental objects.

    --------------------------

    To fully describe aspect dependent characteristics as part
    of the representation of an environmental object, the
    representation requires at least 2 <Reference Vector>
    components: NORMAL and AZIMUTH. In addition, a representation
    of an environmental object may need to represent a combination
    of geometric and/or sensor-related vectors simultaneously.

    Since a <Vertex> does not itself constitute a representation
    of an environmental object, it does not require the capability
    of specifying multiple <Reference Vector> components. However,
    a <Vertex> may need a SE_REF_VEC_TYP_RENDERING_NORMAL
    <Reference Vector> for use in smooth shading, so a single
    <Reference Vector> component may be needed for a given
    <Vertex> instance.

 Q. Why does <Reference Vector> have an optional <Location> component,
    and if the <Location> component is needed to support functionality,
    why is it optional?
 A. The SEDRIS API provides the capability of converting
    <Reference Vector> instances between spatial reference frames.
    These spatial reference frames include non-vector space
    coordinates, such as geodetic. To support those cases, a
    <Reference Vector> requires a <Location> component.

    However, in most contexts where a <Reference Vector> can appear
    in a transmittal, the <Reference Vector> inherits the appropriate
    <Location> component from its context, and does not require a
    direct <Location> component. See
    <<Required Reference Vector Location>> for the cases where an
    appropriate <Location> instance cannot be inherited, so that
    the data provider is required to specify such a component
    directly for the <Reference Vector>.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Required Reference Vector Location

Composed of (two-way)
	zero or one Location instance
	zero or one Reference Vector Control Link instance

Component of (two-way)
	zero or more Camera Point instances
	zero or more Cylindrical Volume Extent instances
	zero or more Ellipse instances
	zero or more Infinite Light instances
	zero or more Line instances
	zero or more Lobe Data instances
	zero or more LSR Transformation Step instances
	zero or more Moving Light Behaviour instances
	zero or more Parallelepiped Volume Extent instances
	zero or more Point instances
	zero or more Polygon instances
	zero or more Union Of Geometry instances
	zero or more Vertex instances

Field Elements:
    SRM_Vector_3D unit_vector;
   /*
    *  The unit_vector field specifies the unit vector.
    */

    SE_Reference_Vector_Type vector_type;
   /*
    *  The vector_type field specifies the semantic meaning of the vector data
    *  being represented by the given instance of
    *  <Reference Vector>.
    */


-------------------------------------------------------------------------------

Class Name: Reference Vector Control Link

Definition:
 An instance of this DRM class is a specialized <Control Link> instance
 used to provide the connection between an ordered aggregation of
 <Expression> instances and the target field values of one or more
 <Reference Vector> instances.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     5
     7

Example:
 1. For the <Reference Vector> component of a <Polygon> the
    <Reference Vector> is its normal, so the <Expression>s would
    compute the 3 fields of the normal of a <Polygon>.

 2. A <Model> of a lighthouse has a <Geometry Model> with a <Union Of
    Geometry Hierarchy>, to which is attached an <Spot Light>
    representing the lighthouse's light. The <Spot Light> has a <Lobe Data>
    describing the shape of the light code, in which a <Reference Vector>
    specifies the light direction. The SE_REF_VEC_TYP_LIGHT_DIRECTION
    <Reference Vector> has a <Reference Vector Control Link> to change
    the direction vector of the light so that the lighthouse light
    sweeps over an area rather than holding stationary.

FAQS:
     None.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more Reference Vector instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Unsigned v0_expr_index;
   /*
    *  The value of the v0_expr_index field specifies which
    *  <Expression> component, if any,
    *  controls the unit_vector.vector[0] field value of the
    *  affected <Reference Vector> instances. If the value is
    *  zero, the unit_vector.vector[0] field of those instances
    *  is not controlled; otherwise, the value is a 1-based index
    *  into the ordered aggregation of <Expression> instances.
    */

    SE_Integer_Unsigned v1_expr_index;
   /*
    *  The value of the v1_expr_index field specifies which
    *  <Expression> component, if any,
    *  controls the unit_vector.vector[1] field value of the
    *  affected <Reference Vector> instances. If the value is
    *  zero, the unit_vector.vector[1] field of those instances
    *  is not controlled; otherwise, the value is a 1-based index
    *  into the ordered aggregation of <Expression> instances.
    */

    SE_Integer_Unsigned v2_expr_index;
   /*
    *  The value of the v2_expr_index field specifies which
    *  <Expression> component, if any,
    *  controls the unit_vector.vector[2] field value of the
    *  affected <Reference Vector> instances. If the value is
    *  zero, the unit_vector.vector[2] field of those instances
    *  is not controlled; otherwise, the value is a 1-based index
    *  into the ordered aggregation of <Expression> instances.
    */


-------------------------------------------------------------------------------

Class Name: Regular Axis

Definition:
 An instance of this DRM class is an <Axis> that uses a constant
 spacing between hash marks and numerical values.

Primary Page in DRM Diagram:
     6

Example:
 1. Digital Terrain Elevation Data (DTED) is sampled in a regular grid
    of latitude and longitude points. Accordingly, the latitude and longitude
    <Axis> resulting <Data Table> are <Regular Axis> instances.

 2. A table of wind-chill values has axes of air temperature and wind speed.
    Air temperature typically starts at 0 degree Celsius and is decremented
    in intervals of 1 degree. Wind speed starts at calm (0 mph) and is
    incremented at intervals of 5 mph. Consequently, the air temperature and
    wind-speed axes of this table are <Regular Axis> instances.

FAQS:
 Q. What is the purpose of the axis_alignment field?
 A. The axis_alignment field provides flexibility in specifying how cells
    are centred with respect to middle, edge, corner, and so on.

    Consider the following 4 (of 9 possible) cases for 2-D grids.

    The * indicates the location where the tick mark coordinates intersect
    in the cell relative to the cell edges. The grid of points determined
    by axis tick marks represent the location of, to name a few examples,
    the centre, lower left corner, upper right corner, or edge,
    respectively, of the corresponding cell. The axis_alignment field
    therefore indicates the axis alignment being used.

              FACE CNTR    LR LFT CORNER   UP RT CORNER      EDGE

 Axis 1       -------        -------          ------*      -------
 ^            |     |        |     |          |     |      |     |
 |            |  *  |        |     |          |     |      *     |
 |            |     |        |     |          |     |      |     |
  --> Axis 0  -------        *------          -------      -------

 Axis 0:  SE_AXIS_ALNMNT_MIDDLE  SE_AXIS_ALNMNT_LOWER
          SE_AXIS_ALNMNT_UPPER   SE_AXIS_ALNMNT_LOWER
 Axis 1:  SE_AXIS_ALNMNT_MIDDLE  SE_AXIS_ALNMNT_LOWER
          SE_AXIS_ALNMNT_UPPER   SE_AXIS_ALNMNT_MIDDLE

Superclass: Axis

Constraints:
     Publishable Object
     Axis Type Restrictions

Component of (two-way) (inherited)
	one or more Data Table instances

Inherited Field Elements:
    EDCS_Attribute_Code axis_type;
   /*
    *  The axis_type field specifies the property being described by the
    *  given <Axis> instance.
    */

    SE_Short_Integer_Positive axis_value_count;
   /*
    *  The axis_value_count field specifies the number of "hash marks"
    *  along the given <Axis> instance.
    */


Field Elements:
    EDCS_Unit_Code value_unit;
   /*
    *  The value_unit field specifies the unit of measurement of the given
    *  <Regular Axis> instance, which shall be compatible with the
    *  requirements imposed by axis_type.
    *
    *  If axis_type does not require a unit of measurement (for example,
    *  if axis_type requires a value type of STRING), then value_unit
    *  shall be set to EUC_UNITLESS.
    */

    EDCS_Scale_Code value_scale;
   /*
    *  The value_scale field specifies the scale applicable to value_unit.
    *
    *  If axis_type does not require a unit of measurement (for example,
    *  if axis_type requires a value type of STRING), then value_scale
    *  shall be set to ESC_UNI.
    */

    SE_Interpolation_Type interpolation_type;
   /*
    *  The interpolation_type field allows the data provider to indicate
    *  how best to interpolate the data to points that are between grid
    *  points on the axis. When a <Data Table> has more than one axis,
    *  the order of the interpolations is in the order of axis definitions.
    */

    SE_Single_Value first_value;
   /*
    *  The first_value field specifies the first numeric value on the axis.
    */

    SE_Single_Value spacing;
   /*
    *  The spacing field specifies the distance between tick marks.
    *
    *  For SE_SPACING_TYP_ARITHMETIC, spacing is the
    *  arithmetic difference between tick marks, such
    *  that Tick(N) = first_value + (N * spacing)
    *
    *  For SE_SPACING_TYP_GEOMETRIC, spacing is the
    *  difference between tick marks such
    *  that Tick(N) = first_value * (spacing^N)
    */

    SE_Spacing_Type spacing_type;
   /*
    *  The spacing_type field specifies how the spacing value is used to
    *  compute tick marks.
    */

    SE_Axis_Alignment axis_alignment;
   /*
    *  The axis_alignment field specifies the position of the axis
    *  with respect to the axis interval. Note that "lower" and "upper"
    *  refer to the axis INDEX; for example, "lower" means
    *  "aligned to the side with the lower index".
    */


-------------------------------------------------------------------------------

Class Name: Relative Time Interval

Definition:
 An instance of this DRM class specifies an interval of time, defined
 by a start time and a stop time that are relative to another time.

Primary Page in DRM Diagram:
     20

Example:
 1. The time period for which a SEDRIS transmittal should be
    considered to be valid. The stop time can be considered
    to be an "expiration date".

FAQS:
 Q. What is the purpose of this class?
 A. This class provides a means to specify a time interval in terms
    of times relative to another time.  The time interval is used to specify
    ISO 19115-compliant metadata that describes the
    time period within which a high-level SEDRIS object (e.g.
    <Transmittal Root>, <Model>, <Image>, etc.) and as a
    general-purpose mechanism for describing time intervals.
    <Relative Time Interval> allows potential users of a SEDRIS
    transmittal to evaluate the time period covered by the
    transmittal or object, without necessarily having to actually obtain or
    examine the transmittal or object directly.

 Q. How can a data provider specify a time interval relative to
    start of simulation?
 A. Do not include the component <Absolute Time>.  If there is no
    component <Absolute Time>, the deltas are relative to
    simulation start.

Superclass: Time Interval

Constraints:
     Publishable Object
     Legal Time Ranges
     Time Dependency
     Time Interval Calculation

Composed of (two-way)
	zero or one Absolute Time instance 

Component of (two-way) (inherited)
	zero or more Environment Root instances
	zero or more Time Constraints Data instances
	zero or one Transmittal Root instance
	zero or more Season instances
	zero or more Sound Instance instances
	zero or more Source instances

Inherited Field Elements:
    SE_Time_Significance time_significance;
   /*
    *  The time_significance field specifies the significance of
    *  the time information.
    */


Field Elements:
    SE_Integer delta_start_days;
   /*
    *  The delta_start_days field specifies the starting day of the
    *  interval, relative to the specified time.
    */

    SE_Integer delta_stop_days;
   /*
    *  The delta_stop_days field specifies the stop day of the
    *  interval, relative to the specified time.
    */

    SE_Byte_Unsigned delta_start_hours;
   /*
    *  The delta_start_hours field specifies the starting hour of the
    *  interval, relative to the specified time.
    */

    SE_Byte_Unsigned delta_stop_hours;
   /*
    *  The delta_stop_hours field specifies the stop hour of the interval,
    *  relative to the specified time.
    */

    SE_Byte_Unsigned delta_start_minutes;
   /*
    *  The delta_start_minutes field specifies the starting minute of
    *  the interval, relative to the specified time.
    */

    SE_Byte_Unsigned delta_stop_minutes;
   /*
    *  The delta_stop_minutes field specifies the stop minute of the
    *  interval, relative to the specified time.
    */

    SE_Long_Float delta_start_seconds;
   /*
    *  The delta_start_seconds field specifies the starting second of
    *  the interval, relative to the specified time.
    */

    SE_Long_Float delta_stop_seconds;
   /*
    *  The delta_stop_seconds field specifies the stop second of the
    *  interval, relative to the specified time.
    */


-------------------------------------------------------------------------------

Class Name: Relative Time

Definition:
 An instance of this DRM class specifies a date and time
 relative to either a specified GMT (<Absolute Time>); or if
 an <Absolute Time> instance is not specified, relative to the
 simulation start time.

Primary Page in DRM Diagram:
     20

Example:
 1. The date/time is a astronomical Julian day of 2449143.77083
    (June 5, 1993 0630Z). Astronomical Julian dates are referenced
    to - 1 January 4712 BCE at 12Z. Since the fractional days shall
    be converted to hours, minutes and seconds, the fields in the
    <Relative Time> instance are as follows.

      delta_days    = 2449143
      delta_hours   = 18
      delta_minutes = 30
      delta_seconds = 0.0

    The fields in the component <Absolute Time> are as follows.

      time_value.configuration       = SE_TIME_CFG_DATE_YMD_AND_TIME_H
      time_value.value.ymd_h.year    = -4712
      time_value.value.ymd_h.month   = SE_MONTH_JANUARY
      time_value.value.ymd_h.day     = 1
      time_value.value.ymd_h.hour    = 12

 2. The time is 6 hours 25 minutes and 30 seconds after the start
    of the simulation.  The fields of the <Relative Time> instance
    are set as follows.

      delta_days    = 0
      delta_hours   = 6
      delta_minutes = 25
      delta_seconds = 30.0

 3. An object becomes active 20 minutes after the simulation starts. That is,
    its activation time is expressed in simulation time (relative to the
    start of the simulation), so the activation time would be specified
    using <Relative Time>.  The time_significance field would be set
    to SE_TIME_SIGNIF_OCCURRENCE.

FAQS:
 Q. What is the purpose of this class?
 A. This class provides a means to specify a time relative
    to another time.  It can be used in the same manner as
    <Absolute Time>.

 Q. How can a data provider indicate the Julian day of the year?
 A. Specify a component <Absolute Time> to indicate the
    reference date/time as 0Z 1 January of the appropriate year.
    If year = -1, the date applies to any year.  See example 1.

 Q. Can a data provider specify times relative to date/times other
    than January 1?
 A. Yes. See example 2.

 Q. How can a data provider indicate a time relative to start of the
    simulation?
 A. If a <Relative Time> does not have an <Absolute Time>
    component, the time is relative to the start of the simulation.
    See example 3.

Superclass: Time Point

Constraints:
     Publishable Object
     Legal Time Ranges
     Time Dependency

Composed of (two-way)
	zero or one Absolute Time instance

Component of (two-way) (inherited)
	zero or more Environment Root instances
	zero or more Time Constraints Data instances
	zero or one Transmittal Root instance

Inherited Field Elements:
    SE_Time_Significance time_significance;
   /*
    *  The time_significance field specifies the significance of
    *  the time information.
    */


Field Elements:
    SE_Integer delta_days;
   /*
    *  The delta_days field specifies the number of days relative to
    *  the specified time.
    */

    SE_Byte_Unsigned delta_hours;
   /*
    *  The delta_hours field specifies the number of hours relative
    *  to the specified time, after delta_days has been taken into
    *  account.
    */

    SE_Byte_Unsigned delta_minutes;
   /*
    *  The delta_minutes field specifies the number of minutes relative
    *  to the specified time, after delta_days and delta_hours have been
    *  taken into account.
    */

    SE_Long_Float delta_seconds;
   /*
    *  Fractions of the delta_seconds field value provide higher accuracy
    *  if needed, such as milliseconds.
    */


-------------------------------------------------------------------------------

Class Name: Rendering Priority Level

Definition:
 An instance of this DRM class specifies the method used to describe
 the relative priority used to resolve occlusion between 2 or more
 overlapping (or potentially overlapping) objects.

 Priority is indicated by the group ID (rendering_group) and
 priority index (rendering_priority). The rendering_priority is relative to
 the rendering_group, and is intended to assign priority order (or
 layer) to coplanar <Polygon> instances or coplanar <Feature Representation>
 instances. A higher index indicates a higher rendering priority (rendered
 last).

 Objects that do not contain a <Rendering Priority Level> are
 assumed to have a rendering priority value of 0.

Primary Page in DRM Diagram:
     3

Secondary Pages in DRM Diagram:
     4
     5
     7
     8
     19

Example:
 1. A particular SEDRIS transmittal may represent a lake as a single
    <Polygon> located within a much larger <Polygon> that represents the
    surrounding terrain.  The larger terrain polygon and the smaller lake
    polygon that it contains may be coplanar, so the modeler assigns a
    group of 1, rendering_priority of 1 to the terrain <Polygon>, and a
    group of 1, priority of 2 to the lake <Polygon>, so that the lake
    polygon will be rendered on top of the terrain <Polygon>.

 2. The side of a <Model> can be represented by a brown <Polygon>, and a
    window in the side of a <Model> can be represented by a grey <Polygon>
    where the grey <Polygon> is coplanar with the brown <Polygon>.  The
    grey <Polygon> would be given a higher priority (but with the same
    group ID) than the brown <Polygon> so that the window would be drawn
    correctly on the side of the <Model> (where the <Model> could be either
    a building or a vehicle).

 3. A Plan View Display (PVD) can display <Point Feature>, <Areal Feature>,
    and <Linear Feature> instances. Since <Feature Representation>
    instances are usually considered to be 'flat', many
    <Feature Representation> instances are, by definition,
    coplanar.  A <Rendering Priority Level> can be used to indicate the
    relative drawing order (or layer) within a set of overlapping
    <Feature Representation> instances.  For example, it is common for a
    single <Areal Feature> to cover the entire <Environment Root> area as
    a 'default, background' <Feature Representation>.  This <Areal Feature>
    could be given a rendering priority of SE_RENDER_PRIORITY_BOTTOMMOST
    so that it would always be drawn first, and thus would always be in
    the background.

 4. The following instance diagram shows how Rendering Priority Level
    can be used to override the layering of a fixed list of objects.
    The objects would render in this order Polygon_C, Polygon_B,
    Polygon_A, Polygon_E, Polygon_F, Polygon_D.

              Union Of Geometry Hierarchy
            (fixed listed Unions)
                      <>
                       |
     --------------------------------------------------
     |                                                |
     Union Of Primitive Geometry        Union Of Primitive Geometry
     (fixed listed polygons)            (fixed listed polygons)
        <>                                           <>
         |                                            |
         -------------------------------------        -----------------
             |             |         |                |       |       |
          Polygon_A    Polygon_B  Polygon_C    Polygon_D Polygon_E Polygon_F
            <>               <>                      <>
             |                |                       |
             |                -------                 ---------
             |                      |                         |
          Rendering                Rendering               Rendering
          Priority Level           Priority Level          Priority Level
          (group 1, priority 2) (group 1, priority 1)  (group 2, priority 1)

FAQS:
  Q. Is this the only way to order data for rendering purposes?
  A. No.  There are other ways to achieve scope-limited, fixed-ordered
     rendering; see ordered <Union Of Geometry>.

  Q. When should a data provider use a <Rendering Priority Level>?
  A. A <Rendering Priority Level> should be used to globally resolve
     rendering priority after scope limited occlusion is resolved.
     After all <Geometry Representation> is rendered that has a
     rendering priority <= 0,
     then rendering successive levels of <Geometry Representation>
     should resolve occlusion.
     <Rendering Priority Level> can be viewed as a sorting bin assignment
     in some occlusion schemes.

  Q. Are there any 'special' sentinel values for a rendering priority?
  A. Yes.  A rendering priority of SE_RENDER_PRIORITY_TOPMOST means
     always render 'on top' (last), and a priority of
     SE_RENDER_PRIORITY_BOTTOMMOST means always render 'on bottom' (first)

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Component of (two-way)
	zero or more Aggregate Geometry instances
	zero or more Feature Representation instances
	zero or more Geometry Model Instance instances
	zero or more Primitive Geometry instances
	zero or more Property Set instances

Field Elements:
    SE_Short_Integer_Positive rendering_group;
   /*
    *  The rendering_group field establishes a group to which objects'
    *  priorities are relative.
    */

    SE_Short_Integer rendering_priority;
   /*
    *  The rendering_priority field indicates priority between coplanar
    *  objects within the same rendering_group, such that a higher value
    *  indicates a higher priority.
    *
    *  For example, a <Polygon> instance with a <Rendering Priority Level>
    *  component having rendering_group = 1, rendering_priority = 2 will be
    *  "on top" of a <Polygon> instance with a <Rendering Priority Level>
    *  component with rendering_group = 1, rendering_priority = 1.
    */


-------------------------------------------------------------------------------

Class Name: Rendering Properties

Definition:
 An instance of this DRM class specifies a selection of shading algorithms,
 display sides, and presentation styles suggested to use when rendering
 <Geometry Representation> instances, particularly <Polygon> instances.

Primary Page in DRM Diagram:
     4

Secondary Pages in DRM Diagram:
     5
     19
     21

Example:
 1. Render flat shaded, solid, front-sides of polygons.

 2. Render interpolation shaded, solid, front-sides of polygons.

 3. Render Gouraud shaded, wire-frame, both-sides of polygons.

 4. Render Phong shaded, solid, back-sides of polygons (possibly for
    a transmittal that describes an enclosed volume, and all of the
    polygons defining the enclosed volume face outwards, and the
    simulation would occur inside the enclosed volume, so only
    the back sides of the polygons shall be rendered).

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	zero or one Presentation Domain instance 

Component of (two-way)
	zero or more Aggregate Geometry instances
	zero or more Primitive Geometry instances
	zero or more Property Set instances

Field Elements:
    SE_Pixel_Fill_Method fill_method;
   /*
    *  The fill_method field specifies the colour blending method to be used.
    */

    SE_Shading_Method shading_method;
   /*
    *  The shading_method field specifies the shading algorithm to be used.
    */

    SE_Colour_Binding colour_binding;
   /*
    *  The colour_binding field specifies the colour inheritance /
    *  overload rule in effect.
    */

    SE_Display_Style style;
   /*
    *  The style field specifies the set of SE_Display_Style tokens
    *  specifying what combination of wire vs. solid style is to be used.
    */

    SE_Display_Side side;
   /*
    *  The side field specifies the set of SE_Display_Side tokens
    *  specifying which side(s) to display.
    *
    *  The front side of a <Polygon> is the side that has a counterclockwise
    *  orientation of the ordered <Vertex> components of the <Polygon>.
    *  Normally either both sides or just the front sides of <Polygon>
    *  instances are rendered; rendering just the front side of a <Polygon>
    *  culls out the back face of the <Polygon>.
    */


-------------------------------------------------------------------------------

Class Name: Responsible Party

Definition:
 An instance of this DRM class provides identification of, and
 means of communication with, person(s) and organization(s)
 associated with the data set being described.

 In the documentation for this class, the phrase "the data set" refers
 to "the data set being described by the given <Responsible Party>
 instance". This, in turn, refers to the object tree rooted at the
 aggregate of the <Responsible Party> instance.

 If a <Responsible Party> is shared by multiple aggregates, "the
 data set" refers to the collection of object trees rooted at its
 various aggregates.

Primary Page in DRM Diagram:
     20

Example:
 1. Consider a data provider creating a <Citation> instance
    for a MEL Thesaurus consulted in creating <Keywords>
    information. The <Responsible Party> for the <Citation>
    instance in this example contains the following data.

    <Responsible Party>
    individual_name     = (empty string)
    organization_name   = {SE_LOCALE_DEFAULT, 34,
                           "Master Environmental Library (MEL)" }
    position_name       = (empty string)
    contact_information.voice_phone =
    contact_information.fax_phone   = (empty string)
    contact_information.tdd_tty_phone = (empty string)
    contact_information.address
    contact_information.online_resource
    contact_information.hours_of_service
    contact_information.contact_instructions
    role = SE_RESP_PTY_RL_CODE_POINT_OF_CONTACT

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Mandatory Metadata

Component of (two-way)
	zero or more Citation instances
	zero or more Description instances
	zero or more Process Step instances

Field Elements:
    SE_String individual_name;
   /*
    *  If supplied, the individual_name field specifies the name of
    *  the responsible person, in the form surname, given name,
    *  title separated by delimiters.
    */

    SE_String organization_name;
   /*
    *  The organization_name field specifies the name of the
    *  supporting organization.
    */

    SE_String position_name;
   /*
    *  If supplied, the position_name field specifies the role or
    *  position of the responsible person.
    */

    SE_Contact_Information contact_information;
   /*
    *  The contact_information field specifies the address of
    *  the responsible party.
    */

    SE_Responsible_Party_Role_Code role;
   /*
    *  The role field specifies the function performed by the
    *  responsible party.
    */


-------------------------------------------------------------------------------

Class Name: RGB Colour

Definition:
 An instance of this DRM class specifies the actual Red, Green,
 and Blue data values for a colour defined within the
 Red Green Blue colour model. These values shall between 0.0
 and 1.0, inclusive.

 The RGB colour model is probably the best known colour model,
 and is often visualized as a cube, where the Red, Green,
 and Blue values define coordinates within the cube.

Primary Page in DRM Diagram:
     14

Example:
 1. A RGB colour for pure black (rgb_data.red = 0.0, rgb_data.green = 0.0,
    rgb_data.blue = 0.0).

 2. A RGB colour for bright red (rgb_data.red = 1.0, rgb_data.green = 0.0,
    rgb_data.blue = 0.0).

FAQS:
 Q. How can a data consumer who doesn't use the RGB colour model retrieve
    the colour values in the model he or she does use?
 A. Data consumers who use the CMY, CMYK, or HSV colour models, are in luck.
    If you tell it to, before you retrieve any colour objects, the SEDRIS
    Level 0 Read API will change all of the colour objects into <RGB Colour>,
    <CMY Colour>, or <HSV Colour> instances. And if you need CMYK, ask for
    CMY, then use the utility functions provided in the DRM API to convert
    from CMY to CMYK. To tell the SEDRIS Level 0 Read API which colour model
    you want, after opening the transmittal, before you retrieve any
    <Colour Data> instances, (or even before you open the transmittal), call
    the SE_SetColourModel() function, passing in the colour model you want
    to use.

    Also, if you ever have colour data you want to convert from one colour
    model to another (such as from CMY to RGB), standard utility functions
    are provided in the DRM API to carry out these data conversions.

Superclass: Colour Data

Constraints:
     Publishable Object

Composed of (two-way)
	zero or one RGB Colour Control Link instance

Component of (two-way) (inherited)
	zero or more Ambient Colour instances
	zero or more Diffuse Colour instances
	zero or more Emissive Colour instances
	zero or more Specular Colour instances

Field Elements:
    SE_RGB_Data rgb_data;
   /*
    *  The rgb_data field specifies the RGB colour coordinate.
    */


-------------------------------------------------------------------------------

Class Name: RGB Colour Control Link

Definition:
 An instance of this DRM class is a specialized <Control Link> instance
 used to provide the connection between an ordered aggregation of
 <Expression> instances and the target fields of one or more
 <RGB Colour> instances.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     14

Example:
 See the example for <CMY Colour Control Link>, which is analogous
 to how this class is used.

FAQS:
     None.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more RGB Colour instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Unsigned red_expr_index;
   /*
    *  The red_expr_index field is a 1-based index into the ordered
    *  aggregation of <Expression> instances, and is used to select
    *  the specific <Expression> instance (if any) that controls the
    *  target <RGB Colour> instances' rgb_data.red field values.
    *  If the value is zero, the rgb_data.red field of those instances
    *  is not controlled.
    */

    SE_Integer_Unsigned green_expr_index;
   /*
    *  The green_expr_index field is a 1-based index into the ordered
    *  aggregation of <Expression> instances, and is used to select
    *  the specific <Expression> instance (if any) that controls the
    *  target <RGB Colour> instances' rgb_data.green field values.
    *  If the value is zero, the rgb_data.green field of those instances
    *  is not controlled.
    */

    SE_Integer_Unsigned blue_expr_index;
   /*
    *  The blue_expr_index field is a 1-based index into the ordered
    *  aggregation of <Expression> instances, and is used to select
    *  the specific <Expression> instance (if any) that controls the
    *  target <RGB Colour> instances' rgb_data.blue field values.
    *  If the value is zero, the rgb_data.blue field of those instances
    *  is not controlled.
    */


-------------------------------------------------------------------------------

Class Name: Rotating Light Behaviour

Definition:
 An instance of this DRM class is a <Light Rendering Behaviour>
 indicating that the light rotates at the speed specified.

Primary Page in DRM Diagram:
     21

Example:
     None.

FAQS:
     None.

Superclass: Light Rendering Behaviour

Constraints:
     Publishable Object

Component of (two-way) (inherited)
	one or more Light Rendering Properties instances

Field Elements:
    SE_Long_Float period;
   /*
    *  The period field specifies the rotational period of the light,
    *  in seconds; that is, the amount of time in which the light will
    *  complete one revolution.
    */


-------------------------------------------------------------------------------

Class Name: Rotation

Definition:
 An instance of this DRM class specifies a rotation of the given angle
 about the specified axis, in the direction determined by the right-hand
 rule.

Primary Page in DRM Diagram:
     7

Example:
 1. Rotate 145.0 pi / 180.0 radians about the u axis

 2. Rotate -38.5 pi / 180.0 radians about the w axis

 3. Rotate  97.0 pi / 180.0 radians about the v axis

FAQS:
 Q. How can a data provider specify a rotation about a point other than
    the origin?
 A. To specify a rotation about a point other than the origin of the
    given LSR spatial reference frame for a given <LSR Transformation>
    instance, the data provider would precede the given <Rotation>
    instance by a <Translation> that translates to the desired rotation
    point.

Superclass: LSR Transformation Step

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	zero or one Reference Vector instance 

Composed of (two-way)
	zero or one Rotation Control Link instance

Component of (two-way) (inherited)
	zero or one LSR Transformation instance

Field Elements:
    SE_LSR_Transformation_Axis axis;
   /*
    *  The axis field specifies which axis to rotate around: X, Y, Z, or a
    *  <Reference Vector> instance. Note that SE_LSR_TRNSFRM_AXIS_ALL is
    *  not a valid value for a <Rotation> instance.
    */

    SE_Long_Float angle;
   /*
    *  The angle field specifies the angle of rotation, measured
    *  counterclockwise about the given axis, in radians.
    */


-------------------------------------------------------------------------------

Class Name: Rotation Control Link

Definition:
 An instance of this DRM class is a specialized <Control Link> instance
 used to provide the connection between an ordered aggregation of
 <Expression> instances and the target fields of one or more
 <Rotation> instances.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     7

Example:
 1. A <Model> of a weather vane has a <Geometry Model> with a
    <Union of Geometry Hierarchy> component, to which is attached an
    <LSR Transformation> with a <Rotation> instance, indicating that the
    weather vane can turn to match the direction that the wind is blowing.
    The <Rotation> instance has a <Rotation Control Link>, which changes the
    angle of rotation to match the wind direction.

 2. See <Property Table Reference Control Link>, example 1.

FAQS:
     None.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more Rotation instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Positive expr_index;
   /*
    *  The expr_index field specifies which <Expression> component specifies
    *  the angle field value of the affected <Rotation> instances, by
    *  specifying a 1-based index into the ordered aggregation of
    *  <Expression> instances.
    */

    SE_Integer_Unsigned lower_expr_index;
   /*
    *  The lower_expr_index field specifies which <Expression> component,
    *  if any, defines the lower limit of the angle field value of the
    *  affected <Rotation> instances. A value of zero (0) indicates that
    *  no lower limit is specified; otherwise, the value specifies a
    *  1-based index into the ordered aggregation of <Expression>
    *  instances.
    */

    SE_Integer_Unsigned upper_expr_index;
   /*
    *  The lower_expr_index field specifies which <Expression> component,
    *  if any, defines the upper limit of the angle field value of the
    *  affected <Rotation> instances. A value of zero (0) indicates that
    *  no upper limit is specified; otherwise, the value specifies a
    *  1-based index into the ordered aggregation of <Expression>
    *  instances.
    */


-------------------------------------------------------------------------------

Class Name: SEC 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Geocentric Solar Ecliptic (GSE) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. SEC provides a convenient spatial reference frame for representing
    a. Interplanetary magnetic field observations.
    b. Solar wind velocity data.
    c. Satellite trajectories.

FAQS:
 Q. Is GSE an inertial coordinate system?
 A. GSE is quasi-inertial in that it has a yearly rotation.

 Q. Where can users obtain further information on GSE?
 A. See the SRM for additional details.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Spherical_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: SMS 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Geocentric Solar Magnetic (SMS) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. SMS provides a convenient spatial reference frame for representing
    a. magnetopause and shock boundary positions
    b. magnetosheath and magnetotail fields
    c. magnetosheath solar wind velocities
       (since the orientation of the magnetic dipole axis
       alters the otherwise cylindrical symmetry of the
       solar wind flow).

FAQS:
 Q. What kind of data is ordinarily represented in SMS?
 A. SMS is quasi-inertial in that it rocks about the
    solar direction on both yearly (23.4 degrees +- 11.2
    degrees) and 24 hour (+- 11.2 degree) cycles.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Spherical_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: Scale

Definition:
 An instance of this DRM class specifies a scaling percentage along
 the given axis.

 If the absolute value of the scaling percentage is greater than 1.0, then
 the <Scale> operation will stretch any target object along the given axis.
 On the other hand, if the absolute value is less than 1.0, any target
 object will be shrunk along the given axis.

 If the scaling value is negative, then the <Scale> operation will reflect
 any target object across the origin along the given axis, as well as
 shrinking or stretching the object based on the magnitude of the scale
 amount.

Primary Page in DRM Diagram:
     7

Example:
 1. Scale by 2.0 along the Z axis.

 2. Scale by 0.5 along the Y axis.

 3. Scale by -0.75 along the X axis.

 4. Scale by 0.0 along the Z axis.

FAQS:
     None.

Superclass: LSR Transformation Step

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	zero or one Reference Vector instance 

Composed of (two-way)
	zero or one Scale Control Link instance

Component of (two-way) (inherited)
	zero or one LSR Transformation instance

Field Elements:
    SE_LSR_Transformation_Axis axis;
   /*
    *  The axis field specifies the axis to scale along.
    */

    SE_Long_Float scale_amount;
   /*
    *  The scale_amount field specifies the percentage to scale by.
    */


-------------------------------------------------------------------------------

Class Name: Scale Control Link

Definition:
 An instance of this DRM class is a specialized <Control Link> used to
 provide the connection between an ordered aggregation of <Expression>
 instances and the target fields of a <Scale>.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     7

Example:
 1. Externally Controlled Table-Based Animation

    Consider a <Scale Control Link> instance that is to be driven using
    values from a <Property Table>. The table value that is to be used
    is to be specified from outside the transmittal.

    For simplicity, in this example the controlling <Expression> is just
    the table value itself, rather than some more complex <Function>
    using the table value as an argument. Specifically, the
    <Scale Control Link> instance's controlling <Expression> is the
    <Predefined Function> SE_PREDEF_FUNC_TABLE_VALUE, the argument of
    which is a <Property Table Reference> referring to the <Property Table>
    containing the scale values, as shown in the instance diagram.

       <Scale Control Link>
               <>
                |
       <Predefined Function>
       (SE_PREDEF_FUNC_TABLE_VALUE)
               <>
                |
      <Property Table Reference> ----> <Property Table>
               <>                       <>
                |                        |
      <Property Table Reference          |____<Classification Data>
          Control Link>                  |      ECC_CONTROL_VALUE
               <>                        |
                |                        |----<Regular Axis>
            <Variable>                   |    $$$
      meaning = $$$                      |
                                         |----<Table Property Description>
                                           meaning =
                                          { SE_ELEM_CODE_TYP_VARIABLE,
                                           {SE_VAR_CODE_SCALE_AMOUNT}}

    The <Variable> instance drives the
    <Property Table Reference Control Link>,
    so that it determines which value is referenced from the
    <Property Table>. To provide the hook for this <Variable> to be
    set from outside the transmittal, the <Variable> is associated with
    an <Interface Template> (not shown).

FAQS:
     None.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more Scale instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Positive expr_index;
   /*
    *  The expr_index field specifies a component <Expression>, the value
    *  of which specifies the value of the scale_amount field of the
    *  affected <Scale> instances.
    */

    SE_Integer_Unsigned lower_expr_index;
   /*
    *  If non-zero, the lower_expr_index field specifies the index of
    *  the component <Expression> defining the lower limit of the
    *  scaling. A value of zero means no lower limit was defined.
    */

    SE_Integer_Unsigned upper_expr_index;
   /*
    *  If non-zero, the upper_expr_index field specifies the index of
    *  the component <Expression> defining the upper limit of the
    *  scaling. A value of zero means no upper limit was defined.
    */


-------------------------------------------------------------------------------

Class Name: Season

Definition:
 An instance of this DRM class specifies the season of the year for
 which the attributed object is applicable. (See examples).

 Since the definition of a season of the year is relative to the
 hemisphere being described, a <Time Interval> component is required
 to specify the data provider's definition of the specified season.

Primary Page in DRM Diagram:
     20

Example:
 1. Consider a <Time Related Geometry> representing a forest in the
    northern hemisphere in winter, spring, summer, and autumn. The
    branch for summer has a <Time Constraints Data> link object
    with a <Season> component resembling that in example 1.

FAQS:
     None.

Superclass: Base Time Data

Constraints:
     Publishable Object

Composed of (two-way)
	one Time Interval instance 

Component of (two-way) (inherited)
	zero or more Environment Root instances
	zero or more Time Constraints Data instances
	zero or one Transmittal Root instance

Inherited Field Elements:
    SE_Time_Significance time_significance;
   /*
    *  The time_significance field specifies the significance of
    *  the time information.
    */


Field Elements:
    SE_Season season;
   /*
    *  The season field specifies a season of the year.
    */


-------------------------------------------------------------------------------

Abstract Class Name: SEDRIS Abstract Base

Definition:
 An instance of a concrete class derived from this DRM class specifies
 a valid instance within a transmittal.

Primary Page in DRM Diagram:
     23

Secondary Pages in DRM Diagram:
     9

Example:
 See concrete classes for examples.

FAQS:
 Q. What functionality does this class provide?
 A. The SEDRIS API treats all SEDRIS objects as belonging to a common
    abstract class; this is that class. All other DRM classes descend
    from this class.

Subclasses:
     Access
     Ambient Colour
     Animation Behaviour
     Attachment Point
     Axis
     Base Association Data
     Base LOD Data
     Base Summary Item
     Base Time Data
     Browse Media
     Camera Point
     Citation
     Classification Data
     Colour
     Colour Data
     Colour Shininess
     Colour Table
     Colour Table Group
     Conformal Behaviour
     Contact Point
     Control Link
     Cross Reference
     Data Quality
     Data Table
     Description
     Diffuse Colour
     EDCS Use Summary Item
     Edge Direction
     Emissive Colour
     Environment Root
     Environmental Domain Summary
     Expression
     Face Direction
     Fade Range
     Feature Face Ring
     Feature Model
     Feature Representation
     Feature Topology
     Feature Topology Hierarchy
     Feature Volume Shell
     Geometric Centre
     Geometry Model
     Geometry Representation
     Geometry Topology
     Geometry Topology Hierarchy
     Grid Overlap
     Hierarchy Data
     Icon
     Image
     Image Anchor
     Image Lookup
     Image Mapping Function
     In Out
     Interface Template
     Keywords
     Label
     Library
     Light Rendering Behaviour
     Light Rendering Properties
     Light Source
     Lineage
     Lobe Data
     Local 4x4
     Location
     LSR Transformation Step
     Mesh Face Table
     Model
     Model Instance Template Index
     Octant Data
     Overload Priority Index
     Perimeter Data
     Presentation Domain
     Primitive Colour
     Process Step
     Property
     Property Characteristic
     Property Set
     Property Set Index
     Property Set Table
     Property Set Table Group
     Property Table Reference
     Quadrant Data
     Reference Origin
     Reference Surface
     Reference Vector
     Rendering Priority Level
     Rendering Properties
     Responsible Party
     Separating Plane
     Separating Plane Data
     Separating Plane Relations
     Sound
     Sound Instance
     Source
     Spatial Extent
     Spatial Index Data
     Specular Colour
     SRF Summary
     Stamp Behaviour
     State Data
     Table Property Description
     Tack Point
     Texture Coordinate
     Time Constraints Data
     Transformation
     Translucency
     Transmittal Root
     Transmittal Summary
     Vertex
     Volume
     Volume Extent
     World 3x3

Constraints:
     Publishable Object

-------------------------------------------------------------------------------

Class Name: Separating Plane

Definition:
 An instance of this DRM class specifies a plane used to divide a
 given volume into positive and negative half spaces.

Primary Page in DRM Diagram:
     4

Example:
 1. A diagonal plane separating a building's visible and occulted
    portions for a given viewing angle/direction.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Separating Plane Related Organizing Principle

Composed of (two-way)
	exactly 3 {ordered} Location 3D instances

Component of (two-way)
	one or more Separating Plane Relations instances

-------------------------------------------------------------------------------

Class Name: Separating Plane Data

Definition:
 An instance of this DRM class distinguishes sibling <Geometry Hierarchy>
 components within a <Separating Plane Related Geometry> aggregation,
 indicating whether the data associated with this object is in the
 positive or negative half-space specified by the associated
 <Separating Plane> instance.

Primary Page in DRM Diagram:
     4

Example:
 See <Separating Plane Related Geometry> for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Separating Plane Related Organizing Principle

Field Elements:
    SE_Boolean positive;
   /*
    *  If the value of the positive field is SE_TRUE, the data
    *  associated with the given instance of <Separating Plane Data>
    *  is in the positive half-space specified by the associated
    *  instance of <Separating Plane>; otherwise, the data is in the
    *  negative half-space.
    */


-------------------------------------------------------------------------------

Class Name: Separating Plane Related Geometry

Definition:
 An instance of this DRM class specifies an aggregation of
 <Geometry Representation> instances, where the components
 are organized based on their relationships with a set of
 <Separating Plane> instances. A component
 is either on the SE_TRUE or SE_FALSE side of any <Separating Plane>
 instance to which the component is related.

Primary Page in DRM Diagram:
     4

Example:
 1. Consider a <Geometry Model> instance representing a house, consisting
    of a <Geometry Model Instance> instance of a <Model> instance
    representing a chimney, and a <Union of Primitive Geometry> instance
    containing the <Polygon> instances representing the rest of the
    structure.

    The <Geometry Model> instance's geometry in this case is organized
    as a <Separating Plane Related Geometry> instance, containing one
    <Separating Plane Relations> instance, the <Separating Plane>
    component of which describes the plane of the portion of the
    roof on which the chimney is placed. The SE_TRUE branch of the
    <Separating Plane Relations> instance contains the chimney
    <Geometry Model Instance>, while the other branch contains
    the rest of the house <Model> instance's geometry.

                 <Geometry Model> (house)
                          <>
                          |
            <Separating Plane Related Geometry>
                          <>
                          |
              <Separating Plane Relations>
                          <>
            ----------------------------------------------------------
            |                          |                             |
            |-<Separating              |-<Separating            <Separating
            |  Plane Data>             |  Plane Data>            Plane>
            |  positive = SE_TRUE      |  positive = SE_FALSE
            |                          |
            |                          |
        <Geometry Model Instance>   <Union of Primitive Geometry>
         (chimney)

FAQS:
     None.

Superclass: Aggregate Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates
     Separating Plane Related Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance

Composed of (two-way)
	one or more Separating Plane Relations instances

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


-------------------------------------------------------------------------------

Class Name: Separating Plane Relations

Definition:
 An instance of this DRM class specifies a collection of
 <Geometry Hierarchy> instances that are on either the SE_TRUE or
 SE_FALSE side of the associated <Separating Plane> instance. Whether
 a component is on the SE_TRUE or SE_FALSE side is indicated by the
 data contained within the <Separating Plane Data> link object for
 that component).

Primary Page in DRM Diagram:
     4

Example:
 See <Separating Plane Related Geometry> for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Distinct Link Objects
     Separating Plane Related Organizing Principle

Composed of (two-way)
	a bounded set of 1..2 Geometry Hierarchy instances, each with a Separating Plane Data link object
	one Separating Plane instance

Component of (two-way)
	one Separating Plane Related Geometry instance

-------------------------------------------------------------------------------

Class Name: SEQ 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Solar Equatorial (SEQ) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
     None.

FAQS:
     None.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Spherical_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: SM 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Solar Magnetic (SM) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. SM provides a convenient spatial reference frame for ordering data
    controlled more strongly by the Earth's dipole field than by
    solar wind. It has been used for representing magnetopause
    cross-sections and magnetospheric magnetic fields.

FAQS:
 Q. Is SM inertial?
 A. SM is quasi-inertial in that it rotates with both
    a yearly and daily period.

 Q. Where can users obtain further information on SM?
 A. See the SRM for additional details.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Spherical_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: Sound

Definition:
 An instance of this DRM class specifies a digital representation
 of an acoustic phenomenon.

Primary Page in DRM Diagram:
     22

Secondary Pages in DRM Diagram:
     10

Example:
 1. A sound, such as a siren that can be used by different models
    such as ambulances, fire engines, or police vehicles.

FAQS:
 Q. How can a data provider reference a <Sound> in a transmittal?
 A. See <Sound Instance>.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Associated by (one-way)
	zero or more Sound Instance instances

Composed of (two-way)
	zero or one Classification Data instance 
	zero or one Lineage instance 

Composed of (two-way metadata)
	zero or one Access instance
	zero or one Citation instance
	zero or more Cross Reference instances
	zero or one Description instance 

Component of (two-way)
	one Sound Library instance

Field Elements:
    SE_String name;
   /*
    *  The name field specifies a meaningful short name.
    */

    SE_Sound_Format sound_format;
   /*
    *  The sound_format field specifies the sound format of the resource.
    */

    SE_URN sound_urn;
   /*
    *  The sound_urn field specifies a SEDRIS sound URN, in the form
    *  urn:x-sedris:<DNAS>:sound=<SN>
    *  where:
    *    <DNAS> is domain name authority name string, and
    *    <SN> is a scoped sound resource name string.
    */

    SE_Float duration;
   /*
    *  The duration field specifies the length of the sound clip in seconds.
    */

    SE_Float sampling_rate;
   /*
    *  The sampling_rate field specifies the number of samples per second.
    *  For example, a standard CD has a sampling of 44.1 kHz, which would
    *  be a sampling rate of 44100.
    */

    SE_Byte_Positive bits_per_sample;
   /*
    *  The bits_per_sample field is also called *sample size* or
    *  *quantization*; for example, a standard CD has 16 bits per sample.
    */

    SE_Byte_Positive channel_count;
   /*
    *  Note that a channel_count of 1 = mono, 2 = stereo
    *  (CDs can be recorded with 4 channels).
    */

    SE_String method;
   /*
    *  The method field specifies the encoding scheme (such as MULAW,
    *  ALAW, ACE, ADPCM, CELP, LPC) and compression scheme (CODEC)
    *  used, if any.
    */


-------------------------------------------------------------------------------

Class Name: Sound Instance

Definition:
 An instance of this DRM class is a single case of the existence of a
 <Sound> within a given transmittal, including variations or
 specialization unique to that case. A <Sound Instance> can represent
 environmental audio, region-based audio, or spatialized audio.

 1. Environmental audio is audio that is non-localized and non-attenuated.
    It is constant over the entire transmittal. Environmental audio can be
    thought of as "background" sound.   It has no <Location 3D>,
    <Perimeter Data>, or <Sound Volume>. An example would be the constant
    sound of rainfall over an entire transmittal.

 2. Region-based audio is similar to environment audio, except that it is
    constant over either an areal region (if it has a <Perimeter Data>) or
    a three dimensional volume (if it has a <Sound Volume>). Region-based
    audio is non-localized, but it may be attenuated to support fade out
    at the boundary of the region. (See examples for <Perimeter Data>,
    <Sound Volume>).

 3. Spatialized audio may be either two dimensional or three dimensional.
    The method of rendering spatialized audio is left to the consuming
    application.  In this case, a <Location 3D> is associated with the
    <Sound Instance> if spatialized audio is desired.

Primary Page in DRM Diagram:
     22

Secondary Pages in DRM Diagram:
     3
     8
     9

Example:
 1. Given a <Geometry Model Instance> of an M1, a
    <Sound Instance> for the <Geometry Model Instance>
    uses the <Location 3D> of the M1 for the location
    of the audio.

 2. Given a <Geometry Model Instance> of an F16, a
    <Sound Instance> for the <Geometry Model Instance>
    specifies a unique <Location 3D> for the audio
    in order to simulate propagation of sound delay
    (one would hear the audio in a slightly different location
    than one would see the F16).

 3. Create a 2-stage sound effect for an engine. The
    stages are "engine crank" and "engine running".
    a. The first <Sound> is instanced by a <Sound Instance>
       with a <Time Interval> from 0.0 to 1.5 seconds.
    b. The second <Sound> is a looped sound, and is
       instanced by a <Sound Instance> with a start delay
       (via the Time Interval) of 1.5 seconds, and no end time.
       The application would set the <Sound Instance Control Link>
       instances of both <Sound Instance> instances to "on" to
       start the sound, at which point the crank sound would play
       for 1.5 seconds followed by the (looped) engine running sound.
       The engine running sound would continue to play until
       the application set the <Sound Instance Control Link>
       for the engine running sound to "off".

FAQS:
 Q. Can multiple sound effects be chained together?
 A. Yes. The <Time Interval> component of <Sound Instance> can be used
    to daisy-chain multiple sound effects. In Example 3 (below) of an
    engine cranking, each of the sounds (i.e. engine crank and
    engine running) can be its own <Sound Instance>.

 Q. How are the components of a <Sound Instance> used to determine
    which type of audio it represents?

 A. The components take precedence in the following manner.

    1. If the <Sound Instance> has no <Location 3D>, <Perimeter Data>,
       or <Sound Volume>, then it represents environmental audio, and
       is non-localized and non-attenuated. Consequently, for this
       case, no <Fade Range> shall be present.

    2. If the <Sound Instance> has a <Location 3D>, then the
       <Location 3D> takes precedence over any <Perimeter Data> or
       <Sound Volume> components that may be present.

    3. If the <Sound Instance> has no <Location 3D>, but does have
       a <Sound Volume>, then the <Sound Volume> takes precedence
       over any <Perimeter Data> that may be present.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Associated to (one-way)
	one Sound instance 

Composed of (two-way)
	zero or one Fade Range instance 
	zero or one Location 3D instance 
	zero or one Perimeter Data instance 
	zero or one Sound Instance Control Link instance
	zero or one Sound Volume instance 
	zero or more Time Interval instances

Component of (two-way)
	zero or more Feature Hierarchy instances
	zero or more Geometry Hierarchy instances

Field Elements:
    SE_Boolean active_sound_value;
   /*
    *  The active_sound_value specifies the default / active state of
    *  the given <Sound> instance, where SE_TRUE indicates on and
    *  SE_FALSE indicates off.
    */


-------------------------------------------------------------------------------

Class Name: Sound Instance Control Link

Definition:
 An instance of this DRM class is a specialized <Control Link> used
 to provide the connection between an ordered aggregation of
 <Expression> instances and the target fields of a <Sound Instance>
 instance, controlling the active_sound_value stored in the target
 <Sound Instance> instance(s), so that each can be turned on or off.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     22

Example:
 1. A <Model> instance representing a lighthouse has a <Geometry Model>
    component with a <Union Of Geometry Hierarchy> component, to which
    is attached a <Sound Instance> instance representing the foghorn.
    The <Sound Instance> instance has a <Sound Instance Control Link>
    component that turns the foghorn on or off, depending on the weather.

FAQS:
 Q. Can a <Sound Instance Control Link> be used to change which <Sound>
    is accessed by a <Sound Instance>?
 A. No. The link to the <Sound> is an association within the transmittal,
    and associations cannot be changed dynamically.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more Sound Instance instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Positive active_sound_value_expr_index;
   /*
    *  The active_sound_value_expr_index field specifies the <Expression>
    *  component, the value of which controls the value of the
    *  active_sound_value field of the affected <Sound Instance> instance(s).
    *  If the controlling <Expression> instance is evaluated to SE_TRUE, the
    *  affected <Sound Instance> instances are on.
    */


-------------------------------------------------------------------------------

Class Name: Sound Library

Definition:
 An instance of this DRM class specifies the complete list of the
 unique sounds that can be referenced within a transmittal.

Primary Page in DRM Diagram:
     10

Secondary Pages in DRM Diagram:
     1
     22

Example:
 1. The <Sound Library> instance lists all of the unique sounds that can
    be used in a transmittal.

FAQS:
     None.

Superclass: Library

Constraints:
     Publishable Object

Composed of (two-way)
	one or more {ordered} Sound instances

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or one Citation instance
	zero or one Description instance

Component of (two-way)
	one Transmittal Root instance

-------------------------------------------------------------------------------

Class Name: Sound Volume

Definition:
 An instance of this DRM class specifies a volume within which a
 given <Sound> instance should be active.

Primary Page in DRM Diagram:
     9

Secondary Pages in DRM Diagram:
     22

Example:
 1. Define a cylindrical <Sound Volume> instance that encompasses
    a river and play the sound of running water when within
    that volume.

FAQS:
     None.

Superclass: Volume

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one Location 3D instance 
	one Volume Extent instance 

Component of (two-way)
	one or more Sound Instance instances

-------------------------------------------------------------------------------

Class Name: Source

Definition:
 An instance of this DRM class specifies a description of a source or
 intermediate dataset used during data generation.  The term
 "source" is used loosely, and covers intermediate forms and final
 products as well as the original data sources.

Primary Page in DRM Diagram:
     20

Example:
 1. Description of a VPF database used as a source of feature information.

FAQS:
 Q. What is the purpose of this class?
 A. This class provides a mechanism for documenting the sources used in
    environmental database generation.  It can also be used to
    document intermediate forms of the data, as well as final products.
    In conjunction with the <Process Step> class, this class can be used to
    construct a network-like description of the database generation process,
    consisting of processing steps linked by their input and output data.
    This class uses a <Citation> component to refer to the source data, so
    it has the flavor of a bibliographical reference, and can be used to
    refer to books, maps, presentations, or any other type of 'publication',
    as well as to digital data sets.  Each <Source> instance includes a field
    in which the nature of the contribution of each source to the result
    can be described.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Distinct Link Objects
     Mandatory Metadata

Associated by (one-way)
	zero or more Process Step instances, each with a In Outs link object

Composed of (two-way)
	one Time Interval instance 

Composed of (two-way metadata)
	one Citation instance 

Component of (two-way)
	zero or more Lineage instances

Field Elements:
    SE_String description;
   /*
    *  The description field specifies a description of the source
    *  data set, and is mandatory.
    */

    SE_Integer_Positive scale;
   /*
    *  The scale field specifies the scale of the source data set
    *  (for example, 24000 for a "1:24,000" scale).
    */

    SE_String contribution;
   /*
    *  If supplied, the contribution field states what the source
    *  data set contributes to the result.
    */


-------------------------------------------------------------------------------

Class Name: Spatial Association Data

Definition:
 An instance of this DRM class specifies the semantic meaning of
 the association relationship with which it is bound, which will
 represent a spatial relationship.

Primary Page in DRM Diagram:
     9

Example:
     None.

FAQS:
     None.

Superclass: Base Spatial Association Data

Constraints:
     Publishable Object

Inherited Field Elements:
    SE_Spatial_Association_Meaning_Type meaning;
   /*
    *  The meaning field specifies the semantic meaning of the association
    *  relationship with which the given instance of
    *  <Base Spatial Association Data> is bound.
    */


-------------------------------------------------------------------------------

Class Name: Spatial Extent

Definition:
 An instance of this DRM class specifies the spatial extent of
 the containing object.

Primary Page in DRM Diagram:
     20

Secondary Pages in DRM Diagram:
     1
     2
     4
     6
     8
     19
     22

Example:
 1. The spatial extent of an <Environment Root> instance within a
    transmittal, defined by the minimum and maximum latitude and
    longitude values (that is, the southwest and northeast corners).

 2. The bounding parallelepiped of a <Model> instance representing a
    building, in LSR coordinates.

FAQS:
 Q. What is the purpose of this class?
 A. This class provides ISO 19115-compliant metadata that describes
    the location and spatial extent of a high-level SEDRIS object
    (such as <Transmittal Root>, <Model>, <Image>)
    <Spatial Extent> allows potential users of a SEDRIS transmittal to
    evaluate the region contained by the transmittal without necessarily
    having to actually obtain or examine the transmittal itself.

 Q. How is the spatial extent of an object defined?
 A. The spatial extent of an object is a simple bounding rectangle or
    parallelepiped that includes all of the <Location> instances contained
    within that object. The bounding rectangle or parallelepiped is defined
    by two coordinate locations: the "minimum" corner, and the "maximum"
    corner, which represent the minimum and maximum values, respectively,
    along each of the axes of the spatial reference frame within which the
    object is defined.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	exactly 2 {ordered} Location instances 

Component of (two-way)
	zero or more Aggregate Feature instances
	zero or more Aggregate Geometry instances
	zero or one Environment Root instance
	zero or more Image instances
	zero or more Model instances
	zero or more Primitive Feature instances
	zero or more Property Grid Hook Point instances
	zero or more Property Set instances

-------------------------------------------------------------------------------

Class Name: Spatial Index Data

Definition:
 An instance of this DRM class specifies the (1-based) row and column
 indices of a cell within a regular spatial relationship of cells.
 <Spatial Index Data> instances are used within spatial-index-related
 organizations to distinguish sibling branches of the organizations.

 Given the origin of the spatial-index-related organization instance,
 and the row and column widths defined by that organization instance,
 the location of any cell is determined from its
 <Spatial Index Data> instance.

Primary Page in DRM Diagram:
     4

Secondary Pages in DRM Diagram:
     8
     11

Example:
 See <Spatial Index Related Organizing Principle>,
 <Spatial Index Related Features>, <Spatial Index Related Geometry>,
 <Spatial Index Related Feature Topology>, and
 <Spatial Index Related Geometry Topology> for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Field Elements:
    SE_Integer_Positive row_index;
   /*
    *  The row_index field specifies the row within the
    *  spatial-index-related organization to which the
    *  specified cell belongs.
    */

    SE_Integer_Positive column_index;
   /*
    *  The column_index field specifies the column within the
    *  spatial-index-related organization to which the specified
    *  cell belongs.
    */


-------------------------------------------------------------------------------

Class Name: Spatial Index Related Feature Topology

Definition:
 An instance of this DRM class specifies a spatially indexed (tiled)
 organization of primitive <Feature Topology> instances.

Primary Page in DRM Diagram:
     11

Example:
 1. An <Aggregate Feature> instance can have more than one spatial
    organization for its topology.  This allows various 'levels' or
    organizations. Perhaps at the 'top' <Aggregate Feature> instance
    under an <Environment Root> instance, one might find a single
    10 kilometre by 10 kilometre spatial organization of topology
    spanning the entire transmittal, as well as one
    500 metres by 500 metres spatial organization of topology also
    spanning the entire transmittal. That 'top' <Aggregate Feature>
    would have two <Spatial Index Related Feature Topology> components,
    one for the 10 kilometre squares and one for the 500 metre squares.

FAQS:
 Q. Why an aggregate object instead of a hierarchy or some other type
    of SEDRIS object?
 A. We need a 'branch', and each branch from an aggregation is a hierarchy
    object, because <Aggregate Feature> instances contain <Feature Hierarchy>
    instances. When an <Aggregate Feature> instance has a
    <Feature Topology Hierarchy>, that <Aggregate Feature> represents
    a distinct topological surface.  We shall organize a topological
    surface, a.k.a. an "independent topology", which eventually, in
    SEDRIS, is 'rooted at' a single <Aggregate Feature> instance.

    The <Feature Hierarchy> components of the <Aggregate Feature> are
    either <Aggregate Features> or <Feature Model Instances>. For
    <Feature Model Instances>, the topological organization of the
    <Model>, if it isn't a "null" <Model>, is contained within the
    <Model>, so we're left with a need to specify the topological
    organization of an <Aggregate Feature> instance.  The organizing
    principle shall be applied at the <Aggregate Feature> level - no
    lower, no higher.

    The same spatial indexing structure can be shared by multiple
    <Aggregate Feature> instances, because there can exist multiple
    organizations of the same set of <Feature> instances. When a single
    set of <Feature Representation> instances is organized by multiple
    classification approaches, it's still the same set of
    <Feature Representation> instances being dealt with, and still the
    same set of <Feature Node>, <Feature Edge>, and <Feature Face>
    instances. Changing the logical organization of the
    <Feature Representation> instances has no effect on the spatial
    organization of the underlying topological primitives.  Thus, one
    spatial organization for a set of topological primitives may be
    shared by many different organizations (aggregations) of
    <Feature Representation> instances, where the
    <Feature Representation> instances are composed of the same
    spatially organized topological primitives, regardless of the
    organization from which the <Feature Representation> instances
    are viewed.

Superclass: Feature Topology Hierarchy

Constraints:
     Publishable Object
     Distinct Link Objects

Composed of (two-way)
	one Location instance 
	one or more Union Of Feature Topology instances, each with a Spatial Index Data link object

Component of (two-way) (inherited)
	zero or more Aggregate Feature instances

Inherited Field Elements:
    SE_Feature_Topology_Level feature_topology_level;
   /*
    *  The feature_topology_level field specifies the level of
    *  feature topology that is present within the hierarchy
    *  represented by the given <Feature Topology Hierarchy>
    *  instance.
    */


Field Elements:
    SE_Boolean sparse;
   /*
    *  If the value of the sparse field is SE_FALSE, all column and row
    *  entries are present; otherwise one or more entries are not present.
    */

    SE_Integer_Positive column_count;
   /*
    *  The column_count field specifies the number of cells along the X axis.
    */

    SE_Integer_Positive row_count;
   /*
    *  The row_count field specifies the number of cells along the Y axis.
    */

    SE_Long_Float column_width;
   /*
    *  The column_width field specifies the length of a cell in the
    *  given unit along the X axis.
    */

    SE_Long_Float row_width;
   /*
    *  The row_width field specifies the length of a cell in the
    *  given unit along the Y axis.
    */

    SE_Spatial_Index_Spacing_Unit spacing_unit;
   /*
    *  The spacing_unit field specifies the unit of measurement used
    *  for the spacing of the spatial index.
    */


-------------------------------------------------------------------------------

Class Name: Spatial Index Related Features

Definition:
 An instance of this DRM class specifies an aggregation of
 <Feature Hierarchy> objects in which each component <Feature Hierarchy>
 represents a different tile within a spatially indexed (tiled)
 organization of <Primitive Feature> objects within a SEDRIS transmittal.
 The <Spatial Index Data> link object corresponding to each component
 <Feature Hierarchy> indicates which tile it represents.

 This DRM class exists to allow <Feature Representation> objects
 to be organized (tiled) according to some regular spatial index.

Primary Page in DRM Diagram:
     8

Example:
 1. See <Spatial Index Related Organizing Principle>, example #2.

FAQS:
 Q. A particular data provider's data consists of a collection of
    <Areal Feature> instances that are tiled along the lines of a grid,
    but some <Areal Feature> instances here and there cross over
    tile boundaries. Can these <Areal Feature> instances be organized
    with a <Spatial Index Related Features> instance?
 A. Yes, if its strict_organizing_principle is set to SE_FALSE to
    indicate that the indexing is not strictly followed
    (see <<Spatial Index Related Organizing Principle>>, example #2).
    Each tile of the spatial index would be represented by a
    <Feature Hierarchy> component of the
    <Spatial Index Related Features> instance.

Superclass: Aggregate Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Non Cyclic Aggregations
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects
     Spatial Index Related Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or more Colour instances
	zero or more Feature Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance 
	zero or more Property Description instances
	zero or one Spatial Extent instance

Composed of (two-way)
	one or more Feature Hierarchy instances, each with a Spatial Index Data link object
	one Location instance 

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances
	zero or more Alternate Hierarchy Related Features instances, each with a Hierarchy Data link object
	zero or more Classification Related Features instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Feature Model instance
	zero or more LOD Related Features instances, each with a Base LOD Data link object
	zero or more Octant Related Features instances, each with a Octant Data link object
	zero or more Perimeter Related Features instances, each with a Perimeter Data link object
	zero or more Quadrant Related Features instances, each with a Quadrant Data link object
	zero or more Spatial Index Related Features instances, each with a Spatial Index Data link object
	zero or more State Related Features instances, each with a State Data link object
	zero or more Time Related Features instances, each with a Time Constraints Data link object

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant, that is, each <Feature Representation> instance that
    *  exists in the component tree rooted at the given <Aggregate Feature>,
    *  shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Feature Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


Field Elements:
    SE_Boolean sparse;
   /*
    *  If the value of the sparse field is SE_FALSE, all column and row
    *  entries are present; otherwise one or more entries are not present.
    */

    SE_Integer_Positive column_count;
   /*
    *  The column_count field specifies the number of cells along the X axis.
    */

    SE_Integer_Positive row_count;
   /*
    *  The row_count field specifies the number of cells along the X axis.
    */

    SE_Long_Float column_width;
   /*
    *  The column_width field specifies the length of a cell in the
    *  given unit along the X axis.
    */

    SE_Long_Float row_width;
   /*
    *  The row_width field specifies the length of a cell in the
    *  given unit along the X axis.
    */

    SE_Spatial_Index_Spacing_Unit spacing_unit;
   /*
    *  The spacing_unit field specifies the unit of measurement used
    *  for the spacing of the spatial index.
    */


-------------------------------------------------------------------------------

Class Name: Spatial Index Related Geometry

Definition:
 An instance of this DRM class specifies an aggregation of
 <Geometry Hierarchy> objects in which each component
 <Geometry Hierarchy> represents a different tile within a spatially
 indexed (tiled) organization of <Primitive Geometry> objects within
 a SEDRIS transmittal. The <Spatial Index Data> link object
 attached to each component <Geometry Hierarchy> indicates the tile
 that it represents.

Primary Page in DRM Diagram:
     4

Example:
 1. See <<Spatial Index Organizing Principle>>, example #1.

 2. Consider an <Environment Root> describing a terrain surface that is
    a mix of grids and polygons, organized by spatial indexing into
    9 cells.
          -------------------
          |  A  |  B  |  C  |
          -------------------
          |  D  |  E  |  F  |
          -------------------
          |  G  |  H  |  I  |
          -------------------

    All cells except H are grids (represented in SEDRIS as <Property Grid>
    instances) captured at 1 level of detail. Cell H consists of <Polygon>
    instances.

    This would be represented as
                            <Environment Root>
                                    <>
                                    |
                                    |
                     <Spatial Index Related Geometry>
                                    <>
                                    |------- <CD 2D Location>
                                    |         (0, 0)
                                    |
     -----------------------------------------------------------------
     |       |       |       |       |       |       |       |       |
     |-SID   |-SID   |-SID   |-SID   |-SID   |-SID   |-SID   |-SID   |-SID
     | (1,1) | (1,2) | (1,3) | (2,1) | (2,2) | (2,3) | (3,1) | (3,2) | (3,3)
     |       |       |       |       |       |       |       |       |
     |       |       |       |       |       |       |       |       |
    PGHP   PGHP     PGHP    PGHP    PGHP    PGHP    PGHP    UoPG    PGHP
    (A)    (B)      (C)     (D)     (E)     (F)     (G)     (H)     (I)

    where the <Spatial Index Related Geometry> has row_count = 3 and
    column_count = 3, spacing_unit = arc seconds.

    Please note that the components of the <Spatial Index Related Geometry>
    are not ordered; the <Spatial Index Data> is used to identify the
    individual tiles.

FAQS:
 Q. What is the purpose of this class?
 A. This class allows <Geometry Representation> objects to be
    organized (tiled) according to some spatial index.

 Q. Consider a data provider whose data consists of terrain <Polygon>
    instances that are tiled along the lines of a grid, but in which
    some <Polygon> instances here and there cross over tile boundaries.
    Can these <Polygon> instances be organized with a
    <Spatial Index Related Geometry> instance?
 A. Yes, if its strict_organizing_principle is set to SE_FALSE to
    indicate that the indexing is not strictly followed
    (see <<Spatial Index Related Organizing Principle>>, example #1).
    Each tile of the spatial index would be represented by a
    <Geometry Hierarchy> component of the
    <Spatial Index Related Geometry> instance.

 Q. Where is the origin of the spatial index?
 A. The required <Location> component of a <Spatial Index Related Geometry>
    instance specifies the origin of the spatial index, which is its
    lower-left corner.

Superclass: Aggregate Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects
     Spatial Index Related Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance

Composed of (two-way)
	one or more Geometry Hierarchy instances, each with a Spatial Index Data link object
	one Location instance 

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


Field Elements:
    SE_Boolean sparse;
   /*
    *  If the value of the sparse field is SE_FALSE, all column and row
    *  entries are present; otherwise one or more entries are not present.
    */

    SE_Integer_Positive column_count;
   /*
    *  This is the number of cells along the X axis.
    */

    SE_Integer_Positive row_count;
   /*
    *  This is the number of cells along the Y axis.
    */

    SE_Long_Float column_width;
   /*
    *  This is the length of a cell in the given unit along the X axis.
    */

    SE_Long_Float row_width;
   /*
    *  This is the length of a cell in the given unit along the Y axis.
    */

    SE_Spatial_Index_Spacing_Unit spacing_unit;
   /*
    *  This is the unit of measurement used for the spacing of the
    *  spatial index.
    */


-------------------------------------------------------------------------------

Class Name: Spatial Index Related Geometry Topology

Definition:
 An instance of this DRM class specifies a spatially indexed (tiled)
 organization of primitive <Geometry Topology> instances.

Primary Page in DRM Diagram:
     11

Example:
 1. The set of all <Geometry Topology> instances contained within an
    independent topological surface, organized into a collection of
    regularly shaped tiles.

FAQS:
 Q. Why an aggregate object instead of a hierarchy or some other type
    of SEDRIS object?
 A. We need a 'branch', and each branch from an aggregation is a hierarchy
    object, because <Aggregate Geometry> instances contain
    <Geometry Hierarchy> instances. When an <Aggregate Geometry> instance
    has a <Geometry Topology Hierarchy>, that <Aggregate Geometry>
    represents a distinct topological surface.  We shall organize a
    topological surface, a.k.a. an "independent topology", which eventually,
    in SEDRIS, is 'rooted at' a single <Aggregate Geometry> instance.

    The <Geometry Hierarchy> components of the <Aggregate Geometry> are
    either <Aggregate Geometry>, <Property Grid Hook Point>, or
    <Geometry Model Instances>. For <Geometry Model Instances>, the
    topological organization of the <Model>, if it isn't a "null" <Model>,
    is contained within the <Model>, so we're left with a need to specify
    the topological organization of an <Aggregate Geometry> instance.  The
    organizing principle shall be applied at the <Aggregate Geometry>
    level - no lower, no higher.

    The same spatial indexing structure can be shared by multiple
    <Aggregate Geometry> because there could exist multiple classification
    organizations of the same set of <Geometry>. When a single set of
    <Geometry Representation> is organized by multiple classification approaches, it's
    still the same set of <Geometry Representation> being dealt with, and still the same
    set of nodes, edges, and faces. Changing the logical organization of
    the <Geometry Representation> has no effect on the spatial organization of the
    underlying topological primitives.  Thus, one spatial organization
    for a set of topological primitives may be shared by many different
    organizations (aggregations) of <Geometry Representation> where the
    <Geometry Representation> are composed of the same spatially
    organized topological primitives, regardless of the organization
    from which the <Geometry Representation>s are viewed.

Superclass: Geometry Topology Hierarchy

Constraints:
     Publishable Object
     Distinct Link Objects

Composed of (two-way)
	one Location instance 
	one or more Union Of Geometry Topology instances, each with a Spatial Index Data link object

Component of (two-way) (inherited)
	zero or more Aggregate Geometry instances

Inherited Field Elements:
    SE_Geometry_Topology_Level geometry_topology_level;
   /*
    *  The geometry_topology_level field specifies the level of
    *  geometry topology that is present within the hierarchy
    *  represented by the given <Geometry Topology Hierarchy>
    *  instance.
    */


Field Elements:
    SE_Boolean sparse;
   /*
    *  If the value of the sparse field is SE_FALSE, all column and row
    *  entries are present; otherwise one or more entries are not present.
    */

    SE_Integer_Positive column_count;
   /*
    *  The column_count field is the number of cells along the X axis.
    */

    SE_Integer_Positive row_count;
   /*
    *  The row_count field is the number of cells along the Y axis.
    */

    SE_Long_Float column_width;
   /*
    *  The column_width field is the length of a cell in the given unit
    *  along the X axis.
    */

    SE_Long_Float row_width;
   /*
    *  The row_width field is the length of a cell in the given unit
    *  along the Y axis.
    */

    SE_Spatial_Index_Spacing_Unit spacing_unit;
   /*
    *  The spacing_unit field is the unit of measurement used for
    *  the spacing of the spatial index.
    */


-------------------------------------------------------------------------------

Class Name: Spatial Resolution LOD Data

Definition:
 An instance of this DRM class specifies the spatial resolution
 of the associated data, which governs the switching of objects
 by a spatial-resolution-based <Level of Detail Related Geometry>
 or <Level of Detail Related Features> instance.

Primary Page in DRM Diagram:
     9

Example:
 1. NIMA Digital Terrain Elevation Data (DTED) is produced at a number
    of standard spatial resolutions: 30 arc seconds, 3 arc seconds,
    1 arc second, 0.3 arc second, and so on. Although the spatial
    resolution of the longitudinal axis varies with latitude, the
    spatial resolution of the latitudinal axis is fixed (and equals
    that of the longitudinal axis at the equator).

 2. Atmospheric data sets are often produced in an Augmented Projection-
    based SRF, such as ALCC (Augmented Lambert Conformal Conic), at a
    number of standard spatial resolutions, such as 81 kilometres, 27
    kilometres, and 9 kilometres.

FAQS:
 Q. Why not just use <Map Scale LOD Data>?
 A. The <Map Scale LOD Data> class can be used in some cases as
    a "rough" approximation. Unfortunately, many data sets require more
    precision.

    For example, while <Map Scale LOD Data> can be reasonably
    applied to lower-resolutions of DTED (e.g., levels 0, 1, and 2), it
    doesn't apply well to higher resolutions of DTED. (It doesn't apply
    at all to bathymetric and atmospheric data).

 Q. If the spatial resolution is different among 2 or more spatial axes,
    which is to be used?
 A. In this case, normally the highest resolution is to be used.

Superclass: Base LOD Data

Constraints:
     Publishable Object
     LOD Related Organizing Principle

Component of (two-way) (inherited)
	zero or more Aggregate Feature instances
	zero or more Aggregate Geometry instances
	zero or more Property Grid Hook Point instances

Field Elements:
    SE_Long_Float spatial_resolution;
   /*
    *  The spatial_resolution field specifies the spatial resolution
    *  of the associated data, and shall be a positive value.
    */

    SE_Spatial_Index_Spacing_Unit unit;
   /*
    *  The unit field specifies how the spatial resolution value is measured.
    */


-------------------------------------------------------------------------------

Class Name: Specular Colour

Definition:
 An instance of this DRM class specifies the specular reflectance component
 of a <Primitive Colour>, which causes a "highlight" effect on smooth
 surfaces when they're illuminated, due to light reflected from the
 illuminated surface. The colour of this component of the lighting equation
 depends largely on the colour of the light source.

 <Specular Colour> depends on both
 - the angle from the lit object to the light source
 - the angle from the lit object to the observer

Primary Page in DRM Diagram:
     14

Secondary Pages in DRM Diagram:
     21

Example:
 See <Primitive Colour>.

FAQS:
 Q. What is the <Colour Shininess> component used for?
 A. <Colour Shininess> acts as an exponent in the lighting equation to
    determine how shiny the colour appears depending on the angle between
    the lines to the observer and the light source.

 Q. Where can users find out more about specular reflection?
 A. See [FOLEY_VAN_DAM], Section 16.1.4 "Specular Reflection" and [OPENGL],
    Chapter 5 "Lighting".

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	one Colour Data instance
	zero or one Colour Shininess instance

Component of (two-way)
	zero or one Light Source instance
	zero or one Primitive Colour instance

-------------------------------------------------------------------------------

Class Name: Spherical Volume Extent

Definition:
 An instance of this DRM class specifies the radius of a spherical
 volume relative to the location of the volume centre (which is
 specified separately by the aggregate of the
 <Spherical Volume Extent>).

Primary Page in DRM Diagram:
     9

Example:
 1. A collision point is a degenerate sphere with a
    <Spherical Volume Extent> radius of 0.0 metres.

FAQS:
     None.

Superclass: Volume Extent

Constraints:
     Publishable Object

Component of (two-way) (inherited)
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SE_Long_Float radius;
   /*
    *  The radius field is in metres.
    */


-------------------------------------------------------------------------------

Class Name: Spot Light

Definition:
 An instance of this DRM class is a <Base Positional Light> instance that
 specifies an elliptic cone of influence, the tip of which is the
 specified <Location 3D> component. The cone is bounded where it intersects
 the sphere centred at the tip, the radius of which is given by
 the radius field value. This results in a a cone-shaped volume of
 influence, possibly smashed in one direction. Only objects located
 within this cone can be affected.

 The intensity dropoff is computed as follows:
 Given a point on a ray in the cone at fixed distance D from the cone apex,
 if I0 = intensity on the <Lobe Data> direction axis at distance D
    Ah = the horizontal angle of the ray in degrees from direction vector
    Av = the vertical angle of the ray in degrees from direction vector
 then the intensity I at the point is:

    case: 0.0 < horizontal_drop_off_rate
          0.0 < vertical_drop_off_rate

    I = I0 * (1.0 - |Ah| * horizontal_drop_off_rate)
           * (1.0 - |Av| * vertical_drop_off_rate)


    case: 0.0 = horizontal_drop_off_rate
          0.0 < vertical_drop_off_rate

    I = I0 * (1.0 - |Av| * vertical_drop_off_rate)


    case: 0.0 < horizontal_drop_off_rate
          0.0 = vertical_drop_off_rate

    I = I0 * (1.0 - |Ah| * horizontal_drop_off_rate)

Primary Page in DRM Diagram:
     21

Example:
 1. A <Model> of a lighthouse has a <Geometry Model> with a <Union of
    Geometry Hierarchy>, to which is attached an <Spot Light>
    representing the lighthouse's light. The <Spot Light> has
    a <Light Source Control Link> that turns the light on or off, depending
    on the time of day and the weather.

 2. A headlight that actually emits light could have a <Positional Light>
    source with a direction located at the light, directed out from the
    headlight.

FAQS:
 Q. How does <Spot Light> differ from the OpenGL concept of a spot light?
 A. <Spot Light> can losslessly represent an OpenGL spot light.

    <Spot Light>, however, has the additional capability of specifying
    that the light is to spread horizontally and vertically, while in
    an OpenGL <Spot Light>, the horizontal and vertical lobe angles
    shall be identical, as shall the fall off angles.

Superclass: Base Positional Light

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one Ambient Colour instance
	one Diffuse Colour instance
	zero or one Light Source Control Link instance 
	one Specular Colour instance
	one Location 3D instance 

Composed of (two-way)
	one Lobe Data instance 

Component of (two-way) (inherited)
	one or more Aggregate Geometry instances

Inherited Field Elements:
    SE_Boolean apply_to_children;
   /*
    *  For a <Light Source> instance (that is, an instance of one of the
    *  concrete classes descended from the class) that is a component of
    *  some <Aggregate Geometry>, apply_to_children provides a mechanism
    *  for limiting the scope of the <Light Source>. If apply_to_children
    *  is SE_TRUE, only <Primitive Geometry> in the component tree of those
    *  <Aggregate Geometry> instances are affected by the given
    *  <Light Source>. If apply_to_children is SE_FALSE, the <Light Source>
    *  is not limited to the scope of those <Aggregate Geometry> instances
    *  and thus applies globally.
    */

    SE_Boolean override_positional_lights;
   /*
    *  For a <Light Source> instance that is a component of some
    *  <Aggregate Geometry>, override_positional_lights provides a
    *  mechanism to indicate with a value of SE_TRUE that the effect of the
    *  given <Light Source> overrides that of any <Base Positional Light>
    *  instances that would have otherwise applied to that
    *  <Aggregate Geometry> - for example, if the given <Light Source> is
    *  so close to the affected <Geometry Representation> that the
    *  <Base Positional Light> effects would be negligible. If
    *  override_positional_lights = SE_FALSE, the effect of the
    *  given <Light Source> is combined with that
    *  of any <Base Positional Light> instances that are already in effect.
    */

    SE_Boolean override_infinite_lights;
   /*
    *  For a <Light Source> instance (that is, an instance of one of the
    *  concrete classes descended from the class) that is a component of
    *  some <Aggregate Geometry>, override_infinite_lights provides a
    *  mechanism to indicate with a value of SE_TRUE that the effect of the
    *  given <Light Source> overrides that of any <Infinite Light>
    *  instances that would have otherwise applied to that
    *  <Aggregate Geometry>. If override_infinite_lights = SE_FALSE,
    *  the effect of the given <Light Source> is combined with that
    *  of any <Infinite Light> instances that are already in effect.
    */

    SE_Boolean active_light_value;
   /*
    *  A value of SE_TRUE for the active_light_value field indicates
    *  that the light is on, while a value of
    *  SE_FALSE indicates that the light is off. For a <Light Source>
    *  with a <Light Source Control Link> instance as a component,
    *  this is the default state of the light.
    */

    SE_Float radius;
   /*
    *  The radius field, which is specified in metres, together with
    *  the <Location 3D> component specifies the zone of influence
    *  of the given <Base Positional Light> instance.
    */

    SE_Long_Float constant_attenuation_factor;
   /*
    *  The constant_attenuation_factor field is the constant "a"
    *  in the attenuation quadratic (a + bd + cd**2).
    */

    SE_Long_Float linear_attenuation_factor;
   /*
    *  The linear_attenuation_factor field is the constant "b"
    *  in the attenuation quadratic (a + bd + cd**2).
    */

    SE_Long_Float quadratic_attenuation_factor;
   /*
    *  The quadratic_attenuation_factor field is the constant "c"
    *  in the attenuation quadratic (a + bd + cd**2).
    */


Field Elements:
    SE_Long_Float horizontal_drop_off_rate;
   /*
    *  The horizontal_drop_off_rate field specifies, in radians, the
    *  horizontal angular intensity distribution of the light. The
    *  higher this value, the more focused the light.
    *
    *  A value of 0.0 specifies a light that equally illuminates all
    *  objects within the cone of influence, and instantly falls to an
    *  intensity of 0.0 at the edge of the cone of light.
    */

    SE_Long_Float vertical_drop_off_rate;
   /*
    *  The vertical_drop_off_rate field specifies, in radians, the vertical
    *  angular intensity distribution of the light. The higher this value,
    *  the more focused the light.
    *
    *  A value of 0.0 specifies a light that equally illuminates all
    *  objects within the cone of influence, and instantly falls to an
    *  intensity of 0.0 at the edge of the cone of light.
    */


-------------------------------------------------------------------------------

Class Name: SRF Summary

Definition:
 An instance of this DRM class summarizes a spatial reference frame
 that is used in a transmittal.

Primary Page in DRM Diagram:
     20

Example:
 1. Consider a transmittal containing terrain geometry, an oceanographic
    <Property Grid> and a number of <Model> instances. The terrain is in
    one spatial reference frame, the <Property Grid> in another, and some
    of the <Model> instances in a third (in this example, LSR).

    Transmittal<>---- Environment <>--- - - (terrain geometry and
    Root                  Root               ocean data table)
     <>    <>
      |     |
      |     +----- Model <>--- - - (models)
      |           Library
      |
    Transmittal
      Summary
      <>
       |
       +----- DRM Class <>-------- <SRF Summary>
       |     Summary Item           srf_info == those of
       |  (Environment Root)      Terrain spatial reference frame
       |
       +----- DRM Class <>-------- <SRF Summary>
       |     Summary Item           srf_info == those of
       |    (Property Grid)        Ocean spatial reference frame
       |
       +----- DRM Class
       |     Summary Item
       |    (Model Library)
       |
       +----- DRM Class <>-------- <SRF Summary>
             Summary Item           srf_info == those of
                (Model)             Model spatial reference frame

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Non Overlapping DRM Class Summary Items

Component of (two-way)
	zero or more DRM Class Summary Item instances

Field Elements:
    SE_SRF_Info srf_info;
   /*
    *  The srf_info field specifies the spatial reference frame which
    *  the given <SRF Summary> instance is summarizing.
    */


-------------------------------------------------------------------------------

Class Name: Stamp Behaviour

Definition:
 An instance of this DRM class specifies that the <Geometry Hierarchy>
 of which the <Stamp Behaviour> is a component rotates automatically
 with respect to the viewer's location, attempting to continually
 face the viewer.

 The <Geometry Hierarchy> rotates about the u, v and/or w axes, within the
 specified angular limits. The centre of rotation is specified by the
 component <Location 3D>. The axes are positioned at the centre of rotation,
 aligned with the equivalent spatial reference frame axes. Geometry with
 <Stamp Behaviour> is normally planar in nature and is considered to "face"
 along the normal of that plane.

 If an axis' clockwise limit is set to SE_POSITIVE_INFINITY and its
 counter-clockwise limit is set to SE_NEGATIVE_INFINITY, then the
 aggregating <Geometry Hierarchy> can rotate freely about that axis. If all
 axis limits are set in this way, then the <Geometry Hierarchy> will rotate
 freely in any direction about the centre of rotation.

Primary Page in DRM Diagram:
     3

Secondary Pages in DRM Diagram:
     4
     7

Example:
 1. Consider a <Union Of Primitive Geometry> instance containing a
    single textured <Polygon> instance, rotating freely about the w
    axis to represent a tree.

    The <Union Of Primitive Geometry> instance in this example has a
    <Stamp Behaviour> component, with u_axis_limits and v_axis_limits
    set to 0.0 for both the clockwise and counter-clockwise limits,
    and w_axis_limits set to SE_POSITIVE_INFINITY for clockwise and
    SE_NEGATIVE_INFINITY for counter-clockwise. The <Stamp Behaviour>
    instance has a component <Location 3D> instance located at the base
    of the tree so that the w axis runs up the centre of the tree.

FAQS:
 Q. Since <Stamp Behaviour> instances shall be specified in a 3D
    LSR spatial reference frame, why is the centre of rotation
    a <Location 3D> rather than an <LSR 3D Location>?
 A. Because if and when a <Stamp Behaviour>'s native LSR SRF
    is instanced into a non-LSR SRF, the <Location 3D> shall be
    specified so that it can be transformed into the target SRF.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	one Location 3D instance 

Component of (two-way)
	zero or more Aggregate Geometry instances
	zero or more Geometry Model Instance instances

Field Elements:
    SE_Rotation_Data u_axis_limits;
   /*
    *  The u_axis_limits field specifies the angular limits.
    */

    SE_Rotation_Data v_axis_limits;
   /*
    *  The v_axis_limits field specifies the angular limits.
    */

    SE_Rotation_Data w_axis_limits;
   /*
    *  The w_axis_limits field specifies the angular limits.
    */


-------------------------------------------------------------------------------

Class Name: State Control Link

Definition:
 An instance of this DRM class specifies an <Expression> instance
 that determines the active_state_value of all target state-related
 aggregation instances, and specifies how the targets are to behave
 if the resulting active_state_value does not match any branch's
 <State Data> instance within a given target.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     4
     8

Example:
 1. Consider a <State Related Features> instance describing the topology
    of a road, where the road crosses bridges that can be destroyed
    and has segments that can be washed out by flooding. The
    "active state" of the road (that is, how much damage it has actually
    suffered) is a variable, determined by some combination of
    environmental conditions (such as amount of precipitation, whether
    a nearby dam has collapsed, and so on).

    Consequently, the <State Related Features> instance has a
    <State Control Link> component, which specifies a <Variable> instance
    that controls the active_state_value of the <State Related Features>
    instance.

FAQS:
     None.

Superclass: Control Link

Constraints:
     Publishable Object
     State Related Organizing Principle

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	zero or more State Related Features instances
	zero or more State Related Geometry instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Positive expr_index;
   /*
    *  The expr_index field specifies which <Expression> component
    *  controls the active_state_value field of the target state-related
    *  aggregate(s).
    */

    SE_State_Mismatch_Behaviour mismatch_behaviour;
   /*
    *  The mismatch_behaviour field specifies the behaviour state
    *  control when the specified controlling <Expression> evaluates
    *  to a state value that does not correspond (match) any branch's
    *  <State Data> within the target state-related aggregate(s).
    */


-------------------------------------------------------------------------------

Class Name: State Data

Definition:
 An instance of this DRM class specifies the specific state value,
 or interval of possible state values, that will result in the
 associated branch of the state-related aggregation becoming the
 active state.

 The state_tag of the corresponding state-related aggregation
 provides the meaning of the field values of any given
 <State Data> instance.

Primary Page in DRM Diagram:
     4

Secondary Pages in DRM Diagram:
     8

Example:
 See <State Related Features>, <State Related Geometry> for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     State Related Organizing Principle

Field Elements:
    EDCS_Attribute_Value state_value;
   /*
    *  The state_value field shall specify either a numeric value or an EEC,
    *  depending on the state_tag specified by the aggregation.
    */


-------------------------------------------------------------------------------

Class Name: State Related Features

Definition:
 An instance of this DRM class specifies a mechanism for specifying
 discrete states from a possibly continuous state value. Each
 discrete state corresponds to a branch of the
 <State Related Features> and is identified by the <State Data> for
 that branch; the state value itself is given by the state_tag
 of <State Related Features>.

Primary Page in DRM Diagram:
     8

Example:
 1. Consider a <Feature Model> representing a road in various states
    of damage - in this example, after flooding. The road's topological
    connections are different in various states of damage, due to
    bridges being washed away and various road segments being blocked
    due to fallen trees and the like.

    Consequently, the <Feature Model> consists of a <State Related
    Features> instance, with state_tag = EAC_GENERAL_DAMAGE_FRACTION
    and active_state = 0.0 % (that is, initially the road is undamaged,
    before flooding takes place).

                  <State Related Features>
                            <>
                            |
              ---------------------------------
              |                               |
              |--<State Data>                 |--<State Data>
              |   [0 % - 20 %)                |  [20% - 50 %)
              |                               |
          <Union of Features>            <Union of Features>

     The <State Data> for each branch indicates the range
     of percent damage for which that branch describes the
     road's feature topology.

FAQS:
 Q. Is <State Related Features> the only way to represent multi-state
    objects in SEDRIS?

 A. No.  <Control Link> instances can be used to provide a fine
    level of control over state by changing fields instead of
    representing states as different <Feature Representation> instances.

Superclass: Aggregate Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Non Cyclic Aggregations
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects
     State Related Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or more Colour instances
	zero or more Feature Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance 
	zero or more Property Description instances
	zero or one Spatial Extent instance

Composed of (two-way)
	one or more Feature Hierarchy instances, each with a State Data link object
	zero or one State Control Link instance

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances
	zero or more Alternate Hierarchy Related Features instances, each with a Hierarchy Data link object
	zero or more Classification Related Features instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Feature Model instance
	zero or more LOD Related Features instances, each with a Base LOD Data link object
	zero or more Octant Related Features instances, each with a Octant Data link object
	zero or more Perimeter Related Features instances, each with a Perimeter Data link object
	zero or more Quadrant Related Features instances, each with a Quadrant Data link object
	zero or more Spatial Index Related Features instances, each with a Spatial Index Data link object
	zero or more State Related Features instances, each with a State Data link object
	zero or more Time Related Features instances, each with a Time Constraints Data link object

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant, that is, each <Feature Representation> instance that
    *  exists in the component tree rooted at the given <Aggregate Feature>,
    *  shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Feature Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


Field Elements:
    EDCS_Attribute_Code state_tag;
   /*
    *  The state_tag field specifies the state by which the component
    *  <Feature Hierarchy> instances are being differentiated, and
    *  shall specify an EAC which qualifies as "state applicable".
    */

    EDCS_Attribute_Value active_state_value;
   /*
    *  The active_state_value field specifies the default state. If the
    *  given <State Related Features> instance has a
    *  <State Control Link> component, the active_state_value field is
    *  the target of that <State Control Link> instance.
    */


-------------------------------------------------------------------------------

Class Name: State Related Geometry

Definition:
 An instance of this DRM class specifies a mechanism for specifying
 discrete states from a possibly continuous
 state value. Each discrete state corresponds to a branch of the
 <State Related Geometry> and is identified by the <State Data> for
 that branch; the state value itself is given by the state_tag
 of <State Related Geometry>.

Primary Page in DRM Diagram:
     4

Example:
 1. Consider a <Model> of a building which has four different geometric
    representations, representing different damage states. The <Model>
    therefore has a <Geometry Model>, the geometry of which is organized
    via a <State Related Geometry> instance with four branches, one for
    each damage state, as shown below.

    <Model>
    <>
    |
    |-- <Classification Data>
    |   ECC_BUILDING
    |
    |-- <Geometry Model>
            <>
            |
        <State Related Geometry>
            state_tag = EAC_GENERAL_DAMAGE_FRACTION
            active_state = 0.0
        <>
        |
        |
        |---------------|-----------------|-------------|
        [0.0 - 0.25)    [0.25 - 0.50)  [0.50 - 0.75)   [0.75 - 0.99)
        |               |                 |             |
        Geometry        Geometry          Geometry      Geometry
        "Healthy"       "Slight Damage"   "Moderate"    "Heavy"

    Each branch of the <State Related Geometry> has a <State Data>
    indicating the range of percent damage that the branch represents.
    The range values in the diagram therefore specify explicitly
    the "bins" in which the states fall.

 2. A slightly different design for example 1, modified to allow
    each <Geometry Model Instance> to specify a percent damage value
    via a <State Control Link>.

    - Add a <State Control Link> component to the <State Related Geometry>,
      with mismatch_behaviour = SE_STATE_MSM_BHVR_NONE and a <Variable> V
      as its controlling <Expression>, where V's meaning is
      EAC_GENERAL_DAMAGE_FRACTION.

    - Associate V to the <Interface Template> component of the <Model>.
      If the <Model> has no <Interface Template>, create one.

    The mismatch_behaviour of the <State Control Link> can be exploited
    to 'turn off' the <Geometry Model Instance> if a damage value is
    fed in which does not match one of the damage states. (This is
    why the <Model> doesn't require a 'totally destroyed' state for
    100% damage.)

    If the data provider instead wanted to keep a state transition
    from happening until the state value matches a <State Data>,
    SE_STATE_MSM_BHVR_LAST would be specified.

    The mismatch_behaviour would not be needed if the <Variable> only
    took on valid values (0.0, 0.5, 0.75, or 1.0), but this scheme
    does not force state values to be discrete.

 3. A wind sock model designed to support a landing site has state
    behaviour to allow it to respond to wind speed and wind direction.
    The wind sock is modeled with five states of EAC_WIND_RESPONSE
    where the response to wind direction is implemented by using a
    <Rotation Control Link> tied to an EAC_WIND_DIRECTION <Variable>.

    <State Related Geometry>
     <>  state_tag    = EAC_WIND_RESPONSE
     |   active_state = 0.0
     |
     |
    ----------------------------------------
    |                |                     |
   (branches)   <LSR Transformation>   <State Control Link>
                    <>                 <>  mismatch_behaviour =
                    |                  |   SE_STATE_MSM_BHVR_LAST
                    |                  |
                <Rotation>             <Variable>
                <> angle = 0.0         EAC_WIND_SPEED
                |
                |
                <Rotation Control Link>
                <>
                |
                |
                <Variable>
                EAC_WIND_DIRECTION

 4. Identifies one of alternative appearances for some "state-applicable"
    attribute.
    (a) For a <State Related Geometry> representing different states
        of an aircraft hatch for EAC_OPENING_COVER_POSITION,
        one <State Data> with EEC_OPNCOVPOS_CLOSED and another
        with EEC_OPNCOVPOS_OPEN.
    (b) For a <State Related Geometry> representing different
        damage states of a building for EAC_GENERAL_DAMAGE,
        <State Data> for [0, 25) % damage, [25, 50) % damage,
        [75, 100) % damage, and [100, 100) % damage.
    (c) For a <State Related Geometry> representing different
        states of a forest for healthy vs. burned,
        EAC_GENERAL_DAMAGE could be used.

FAQS:
 Q. Is <State Related Geometry> the only way to represent multi-state
    objects in SEDRIS?

 A. No.  <Control Link> instances can be used to provide a fine level
    of control over state by changing fields instead of representing
    states as different <Geometry Representation> instances.

Superclass: Aggregate Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects
     State Related Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance

Composed of (two-way)
	one or more Geometry Hierarchy instances, each with a State Data link object
	zero or one State Control Link instance

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


Field Elements:
    EDCS_Attribute_Code state_tag;
   /*
    *  The state_tag field specifies the state by which the component
    *  <Geometry Hierarchy> instances are being differentiated, and
    *  shall specify an EAC which qualifies as "state applicable".
    */

    EDCS_Attribute_Value active_state_value;
   /*
    *  The active_state_value field specifies the default state. If the
    *  given <State Related Geometry> instance has a
    *  <State Control Link> component, the active_state_value field is
    *  the target of that <State Control Link> instance.
    */


-------------------------------------------------------------------------------

Class Name: Strobing Light Behaviour

Definition:
 An instance of this DRM class specifies that the attributed object
 appears to be a strobing light.

Primary Page in DRM Diagram:
     21

Example:
 1. Consider a model of an airport, in which the data provider wishes
    to place a strobing light string along a runway. The light emitted
    is negligible at an ordinary viewing range, in terms of cast shadows
    and so on, so it is most efficient to represent it as follows.

    <Line>
    count        = number of lights along the string
    suppress_last = SE_FALSE
      <>
       |
       |
    <Light Rendering Properties>
    display_type   = SE_DISP_TYP_RASTER
    light_diameter = 0.0
    light_extinguishing_range = 0.0
    random_area_light         = SE_FALSE
    active_light_value        = SE_TRUE
    candela_value             = 0.0
      <>
       |
       |
    <Strobing Light Behaviour>
    period = 2
    delay  = 0.0

    Since the <Line>'s count is greater than zero, it does not appear
    to be solid; each of its <Vertex> components is shown independently.
    The light_diameter in pixels is not applicable, and the light
    is visible at any distance since no extingishing range is
    specified. The runway lights will always be on, unless a
    <Light Rendering Properties Control Link> is added. The
    lights strobe every two seconds.

FAQS:
     None.

Superclass: Light Rendering Behaviour

Constraints:
     Publishable Object

Component of (two-way) (inherited)
	one or more Light Rendering Properties instances

Field Elements:
    SE_Long_Float period;
   /*
    *  The period field specifies, in seconds, the total period of time
    *  (both on and off).
    */

    SE_Long_Float delay;
   /*
    *  The delay field specifies, in seconds, what might be characterized
    *  as a pre-start; it allows a series of lights to appear asynchronous.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Surface Geometry

Definition:
 An instance of a concrete class derived from this DRM class is a
 geometric surface representation.

Primary Page in DRM Diagram:
     5

Secondary Pages in DRM Diagram:
     23

Example:
 1. The terrain skin within a given area can be specified as a collection
    of <Polygon> instances.

FAQS:
     None.

Superclass: Primitive Geometry

Subclasses:
     Ellipse
     Polygon

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Continuous LOD Restrictions
     Image Mapping Functions and Texture Coordinates
     Nested Primitive Geometry

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or one Presentation Domain instance
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or more Tack Point instances
	zero or one Union Of Primitive Geometry instance 

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Primitive Geometry instances

-------------------------------------------------------------------------------

Abstract Class Name: Location Surface

Definition:
 An instance of a concrete class derived from this DRM class specifies
 linear or angular quantities that designate the position of a point in a
 surface SRF.

Primary Page in DRM Diagram:
     15

Secondary Pages in DRM Diagram:
     23

Example:
 See individual subclasses for examples.

FAQS:
     None.

Superclass: Location

Subclasses:
     CD Surface Location
     EC Surface Location
     LCC Surface Location
     LTSAS Surface Location
     LTSC Surface Location
     LTSE Surface Location
     M Surface Location
     OM Surface Location
     PS Surface Location
     TM Surface Location

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

-------------------------------------------------------------------------------

Class Name: Symbol

Definition:
 An instance of this DRM class specifies a pictograph with a
 location and is used to identify objects on 2D maps or displays.

Primary Page in DRM Diagram:
     10

Example:
 1. Standard symbology for a golf course and an appropriate place to draw
    that symbol on a map are represented by a <Symbol> instance.

 2. On a representation of an operational chart, the tactical overlays
    are comprised of <Symbol> instances representing the unit and
    control points.

FAQS:
     None.

Superclass: Icon

Constraints:
     Publishable Object

Composed of (two-way)
	zero or one Classification Data instance
	zero or one Lineage instance 

Composed of (two-way metadata)
	zero or one Access instance
	zero or one Citation instance
	zero or more Cross Reference instances
	zero or one Description instance 

Component of (two-way) (inherited)
	zero or more Label instances

Component of (two-way)
	one Symbol Library instance

Field Elements:
    SE_String name;
   /*
    *  The name field specifies a meaningful short name.
    */

    SE_Symbol_Format symbol_format;
   /*
    *  The symbol_format field specifies the symbol format of the resource.
    */

    SE_URN symbol_urn;
   /*
    *  The symbol_urn field specifies a SEDRIS symbol URN, in the form
    *  urn:x-sedris:<DNAS>:symbol=<SN>
    *  where:
    *    <DNAS> is domain name authority name string, and
    *    <SN> is a scoped symbol resource name string.
    */


-------------------------------------------------------------------------------

Class Name: Symbol Library

Definition:
 An instance of this DRM class specifies a complete list of the unique
 <Symbol> instances that can be referenced within the given transmittal.

Primary Page in DRM Diagram:
     10

Secondary Pages in DRM Diagram:
     1

Example:
     None.

FAQS:
     None.

Superclass: Library

Constraints:
     Publishable Object

Composed of (two-way)
	one or more {ordered} Symbol instances

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or one Citation instance
	zero or one Description instance

Component of (two-way)
	one Transmittal Root instance

-------------------------------------------------------------------------------

Class Name: Table Property Description

Definition:
 An instance of this DRM class specifies a cell data element within
 a <Data Table> by providing
 (1) an EAC, SE_Index_Code, or SE_Variable_Code,
     identifying the meaning of the cell data element,

 (2) a value_type that specifies its storage type,

 (3) an EUC and ESC that together
     specify the scaled unit of measurement.

 The complete structure of a cell within the given <Data Table>
 is described by the complete ordered set of
 <Table Property Description> components of that <Data Table>.

 Additional information about the cell property being described,
 where such information is to be applied throughout the scope of
 the <Data Table>, such as sentinel values and tolerances,
 is specified by attaching <Property Characteristic> components
 to the applicable <Table Property Description>(s).

Primary Page in DRM Diagram:
     6

Example:
 1. Consider a <Property Grid> instance containing sound speed data
    for a body of water. For each spatial location in the grid, the
    corresponding cell in the <Property Grid> instance specifies the
    properties of EAC_SALINITY, EAC_MEAN_WATER_BODY_TEMPERATURE, and
    EAC_WATER_BODY_SOUND_SPEED at that location.

                <Property Grid>
                     <>
                     |
                     |-- <Table Property Description>
                     |   meaning = { SE_ELEM_CODE_TYP_ATTRIBUTE,
                     |               { EAC_SALINITY }}
                     |
                     |-- <Table Property Description>
                     |   meaning = { SE_ELEM_CODE_TYP_ATTRIBUTE,
                     |               { EAC_MEAN_WATER_BODY_TEMPERATURE }}
                     |
                     |-- <Table Property Description>
                     |   meaning = { SE_ELEM_CODE_TYP_ATTRIBUTE,
                     |               { EAC_WATER_BODY_SOUND_SPEED }}
                     |
                     | (other components, such as <Axis> instances)

FAQS:
 Q. Why is the value_type field needed?

 A. The storage type of each cell data element shall be specified,
    and each cell data element shall be allowed to specify its own
    storage type. This means that the storage type information cannot
    be stored in the <Data Table>'s own fields, but shall be specified
    at the <Table Property Description> level.

    Unlike <Property Value>, which contains a complete
    EDCS_Attribute_Value, <Table Property Description> only needs
    to specify the storage type without a value being stored, since
    the values being described are the cells of the <Data Table>,
    rather than any part of the <Table Property Description> itself.

 Q. What is the purpose of the component_data_table_ecc field and
    the optional <Property Value> components?

 A. Consider a <Data Table> instance with more than one
    <Table Property Description> supplying the same SE_Index_Code
    as a meaning, where that meaning is that each such
    <Table Property Description> acts as a signature element to
    reference other <Data Table> instances.

    In these cases, the component_data_table_ecc, possibly elaborated by
    optional <Property Value> instances, is needed to distinguish index
    values in any given cell.

    See <Classification Data> and the <<Index Codes within Tables>>
    constraint for further information.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	zero or more Property Characteristic instances
	zero or more Property Value instances 

Component of (two-way)
	one or more Data Table instances

Field Elements:
    SE_Element_Type meaning;
   /*
    *  The meaning field specifies the meaning of the given
    *  <Table Property Description> instance.
    */

    EDCS_Unit_Code value_unit;
   /*
    *  The value_unit field specifies the unit of measurement of the given
    *  <Table Property Description> instance.
    */

    EDCS_Scale_Code value_scale;
   /*
    *  The value_scale field specifies the scale applicable to value_unit.
    */

    SE_Data_Table_Data_Value_Type value_type;
   /*
    *  The value_type field specifies the storage type of the given
    *  <Table Property Description> instance.
    */

    EDCS_Classification_Code component_data_table_ecc;
   /*
    *  The component_data_table_ecc field specifies the ECC used to identify
    *  the table type of a component or library <Data Table> instance.  It
    *  is used only if the given <Table Property Description> instance is
    *  describing an index that refers to a <Data Table> instance.
    *
    *  This, in turn, is only the case if
    *     meaning = { SE_ELEM_CODE_TYP_INDEX,
    *                 {SE_INDEX_CODE_DATA_TABLE_COMPONENT }}
    *  or
    *     meaning = { SE_ELEM_CODE_TYP_INDEX,
    *                 {SE_INDEX_CODE_DATA_TABLE_LIBRARY }}
    */


-------------------------------------------------------------------------------

Class Name: Tack Point

Definition:
 An instance of this DRM class specifies a point corresponding to a
 fixed position on an image.  A <Tack Point> "tacks" the image
 specified coordinate to a given location on a
 <Primitive Geometry> instance.

Primary Page in DRM Diagram:
     5

Example:
 1. Centre of a <Polygon> instance that is used as a corner of
    an <Image> instance.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	one Location instance
	one or more {ordered} Texture Coordinate instances

Component of (two-way)
	one Primitive Geometry instance

-------------------------------------------------------------------------------

Class Name: Text

Definition:
 An instance of this DRM class specifies a character string with a
 location, which is used to identify places on 2D maps or to label
 objects.

Primary Page in DRM Diagram:
     10

Example:
 1. The name of a county, and an appropriate place to draw that name on a
    map are represented by a <Text> instance.

FAQS:
     None.

Superclass: Icon

Constraints:
     Publishable Object

Component of (two-way) (inherited)
	zero or more Label instances

Field Elements:
    SE_String text_string;
   /*
    *  The text_string field specifies the characters making up the
    *  text string; it assumes a termination character.
    */

    SE_Text_Font font;
   /*
    *  The font field specifies the font to be used to render the text string.
    */


-------------------------------------------------------------------------------

Class Name: Texture Coordinate

Definition:
 An instance of this DRM class specifies a {s, t} tuple in image space
 (also known as texture space) used to specify how a texel from
 the image space is to be mapped to a location in "object" space.

 Each MIP level of a 2D <Image> defines an image that has a
 width and height specified in texels. Regardless of the
 actual size of the image, the image space is defined by
 treating the two-dimensional image as a square, defined by
 the lower-left coordinate of (0.0, 0.0) and the upper-right
 coordinate of (1.0, 1.0). A <Texture Coordinate> instance is a
 coordinate within this image space.

 A <Texture Coordinate> instance specifies an exact location
 within a given image space, and this location is mapped to
 the "object space" location associated with the <Vertex>,
 <Point>, or <Tack Point> instance of which the
 <Texture Coordinate> instance is a component. A
 textured geometric object generally has
 a <Texture Coordinate> for each vertex of the object, and
 the surface of the geometric object is 'painted' or
 'covered' with the given Image, interpolating what part of
 the <Image> should be displayed where based on the
 <Texture Coordinate> components of the object's vertices.

 Whether a specified <Texture Coordinate> corresponds to
 exactly one texel in the texture definition, or to a
 blending of many texel values from the definition, is a
 decision made by the texture interpolation algorithm
 used to display the texture. The methods for calculating
 the interpolated texture values and for blending the
 texture onto the object are determined by an
 <Image Mapping Function>. (Note that according to
 <<Image Mapping Functions and Texture Coordinates>>,
 <Texture Coordinate> instances will only appear within
 the scope of some <Image Mapping Function>.)

Primary Page in DRM Diagram:
     18

Secondary Pages in DRM Diagram:
     5

Example:
 1. The s, t coordinates to map to the lower left corner of a
    <Polygon> instance.

FAQS:
 Q. Given a <Texture Coordinate>, the s value of which is greater
    than 1.0, how should it be interpreted?

 A. The interpretation of the <Texture Coordinate>'s s value
    depends on the value of the image_wrap_s field of the
    relevant <Image Mapping Function>.

    - If image_wrap_s specifies that the <Image> is to be
      clamped, then any s values less than 0.0 are to be
      clamped to 0.0, and any s values greater than 1.0 are to be
      clamped to 1.0. That is, s values less than 0.0 are to
      be treated as though they had been 0.0, and those greater
      than 1.0 are treated as though they had been 1.0

    - If image_wrap_s specifies that the <Image> is to be
      repeated, then any s less than 0.0 or greater than
      1.0 are to be treated as though the <Image> tiles
      the image space out to infinity.

      In practical terms, during repeating, the integer portion
      of the <Texture Coordinate> is ignored, and copies of the
      texture map tile the surface.

 Q. Given a <Texture Coordinate>, the t value of which is greater
    than 1.0, how should it be interpreted?

 A. The interpretation of the <Texture Coordinate>'s t value
    depends on the value of the image_wrap_t field of the
    relevant <Image Mapping Function>.

    - If image_wrap_t specifies that the <Image> is to be
      clamped, then any t values less than 0.0 are to be
      clamped to 0.0, and any t values greater than 1.0 are to be
      clamped to 1.0. That is, t values less than 0.0 are to
      be treated as though they had been 0.0, and those greater
      than 1.0 are treated as though they had been 1.0

    - If image_wrap_t specifies that the <Image> is to be
      repeated, then any t less than 0.0 or greater than
      1.0 are to be treated as though the <Image> tiles
      the image space out to infinity.

      In practical terms, during repeating, the integer portion
      of the <Texture Coordinate> is ignored, and copies of the
      texture map tile the surface.

 Reference: OpenGL Programming Guide, 3rd edition for more
            information on clamping and repeating textures.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Image Mapping Functions and Texture Coordinates

Composed of (two-way)
	zero or one Texture Coordinate Control Link instance

Component of (two-way)
	zero or more Point instances
	zero or more Tack Point instances
	zero or more Vertex instances

Field Elements:
    SE_Long_Float s;
   /*
    *  The s field specifies the s value of the (s,t) coordinate.
    */

    SE_Long_Float t;
   /*
    *  The t field specifies the t value of the (s,t) coordinate.
    */


-------------------------------------------------------------------------------

Class Name: Texture Coordinate Control Link

Definition:
 An instance of this DRM class is a specialized <Control Link> instance
 used to provide the connection between an ordered aggregation of
 <Expression> instances and the target fields of one or more
 <Texture Coordinate> instances.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     18

Example:
 1. Consider a <Polygon> representing an exterior wall of a building.
    If an explosion is simulated near this building representation,
    the data provider may choose to model the state change by
    changing the <Texture Coordinate> s, t values of the
    <Polygon>'s <Vertex> components so that the texture applied to
    the <Polygon> changes from one portion of the referenced
    <Image>, representing an undamaged wall, to another portion
    of the same <Image>, showing damage resulting from smoke.

FAQS:
     None.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more Texture Coordinate instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Unsigned s_expr_index;
   /*
    *  The s_expr_index field specifies which <Expression> component
    *  controls the s field value of the affected <Texture Coordinate>
    *  instance(s). If this value is zero, the s field values of those
    *  instances are not controlled; otherwise, the value is a 1-based
    *  index into the ordered aggregation of <Expression> instances.
    */

    SE_Integer_Unsigned t_expr_index;
   /*
    *  The t_expr_index field specifies which <Expression> component
    *  controls the t field value of the affected <Texture Coordinate>
    *  instance(s). If this value is zero, the t field values of those
    *  instances are not controlled; otherwise, the value is a 1-based
    *  index into the ordered aggregation of <Expression> instances.
    */


-------------------------------------------------------------------------------

Class Name: Time Constraints Data

Definition:
 An instance of this DRM class specifies when a portion of a
 transmittal is "valid" or "active", and when used as a link
 object in a time-related aggregation, serves to
 distinguish sibling branches within the aggregation.

Primary Page in DRM Diagram:
     20

Secondary Pages in DRM Diagram:
     2
     3
     4
     6
     8
     19
     22

Example:
 See <Time Related Features>, <Time Related Geometry> for examples.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	one or more Base Time Data instances

Component of (two-way)
	zero or more Data Table instances
	zero or more Feature Representation instances
	zero or more Geometry Representation instances
	zero or more Image instances
	zero or more Model instances
	zero or more Property Set instances

-------------------------------------------------------------------------------

Abstract Class Name: Time Interval

Definition:
 An instance of a concrete class derived from this DRM class specifies
 an interval of time, defined by a start time and a stop time.

Primary Page in DRM Diagram:
     20

Secondary Pages in DRM Diagram:
     22
     23

Example:
 See specific subclasses for examples.

FAQS:
 Q. What is the purpose of this class?
 A. This class provides 1) ISO 19115-compliant metadata that describes the
    time period within which a high-level SEDRIS object (e.g.
    <Transmittal Root>, <Model>, <Image>, etc.) is valid, and
    2) a general-purpose mechanism for describing time intervals.
    The <Time Interval> allows potential users of a SEDRIS
    transmittal to evaluate the time period covered by the
    transmittal, without necessarily having to actually obtain or
    examine the transmittal itself.

Superclass: Base Time Data

Subclasses:
     Absolute Time Interval
     Relative Time Interval

Constraints:
     Publishable Object

Component of (two-way) (inherited)
	zero or more Environment Root instances
	zero or more Time Constraints Data instances
	zero or one Transmittal Root instance

Component of (two-way)
	zero or more Season instances
	zero or more Sound Instance instances
	zero or more Source instances

Inherited Field Elements:
    SE_Time_Significance time_significance;
   /*
    *  The time_significance field specifies the significance of
    *  the time information.
    */


-------------------------------------------------------------------------------

Class Name: Time Of Day

Definition:
 An instance of this DRM class specifies a portion of a day.

Primary Page in DRM Diagram:
     20

Example:
 1. A representation of atmospheric data for a region at
    different times of day.

FAQS:
     None.

Superclass: Base Time Data

Constraints:
     Publishable Object

Component of (two-way) (inherited)
	zero or more Environment Root instances
	zero or more Time Constraints Data instances
	zero or one Transmittal Root instance

Inherited Field Elements:
    SE_Time_Significance time_significance;
   /*
    *  The time_significance field specifies the significance of
    *  the time information.
    */


Field Elements:
    SE_Time_Of_Day time_of_day;
   /*
    *  This indicates the portion of the day represented by
    *  the given <Time Of Day> instance.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Time Point

Definition:
 An instance of a concrete class derived from this DRM class specifies
 a point in time.

Primary Page in DRM Diagram:
     20

Secondary Pages in DRM Diagram:
     23

Example:
 See specific subclasses for examples.

FAQS:
 Q. What is the purpose of this class?
 A. This class provides
    1) ISO 19115-compliant metadata that describes the point in time when a
       high-level SEDRIS object (e.g. <Transmittal Root>, <Model>,
       <Image>, etc.) was created, and
    2) a general-purpose mechanism for describing points in time. It
       allows potential users of a SEDRIS transmittal to evaluate the
       age of a transmittal, without necessarily having to obtain or
       examine the transmittal itself.

 Q. When is <Relative Time> required vs. <Absolute Time>?
 A. <Absolute Time> always represents a GMT time.
    <Relative Time> can be used to represent alternate time
    references, such as simulation time or Julian dates.

Superclass: Base Time Data

Subclasses:
     Absolute Time
     Relative Time

Constraints:
     Publishable Object

Component of (two-way) (inherited)
	zero or more Environment Root instances
	zero or more Time Constraints Data instances
	zero or one Transmittal Root instance

Inherited Field Elements:
    SE_Time_Significance time_significance;
   /*
    *  The time_significance field specifies the significance of
    *  the time information.
    */


-------------------------------------------------------------------------------

Class Name: Time Related Features

Definition:
 An instance of this DRM class is an aggregation of <Feature Hierarchy>
 instances, in which each branch is a representation of the same
 environmental entity at a different point in time, as indicated by the
 corresponding <Time Constraints Data> instance.

Primary Page in DRM Diagram:
     8

Example:
 1. A lake that varies in size significantly with the seasons could be
    represented as a <Time Related Features> instance, with two (or more)
    component <Union Of Features> instances, each containing a single
    <Areal Feature> instance representing the lake.

FAQS:
     None.

Superclass: Aggregate Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Non Cyclic Aggregations
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or more Colour instances
	zero or more Feature Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance 
	zero or more Property Description instances
	zero or one Spatial Extent instance

Composed of (two-way)
	one or more Feature Hierarchy instances, each with a Time Constraints Data link object

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances
	zero or more Alternate Hierarchy Related Features instances, each with a Hierarchy Data link object
	zero or more Classification Related Features instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Feature Model instance
	zero or more LOD Related Features instances, each with a Base LOD Data link object
	zero or more Octant Related Features instances, each with a Octant Data link object
	zero or more Perimeter Related Features instances, each with a Perimeter Data link object
	zero or more Quadrant Related Features instances, each with a Quadrant Data link object
	zero or more Spatial Index Related Features instances, each with a Spatial Index Data link object
	zero or more State Related Features instances, each with a State Data link object
	zero or more Time Related Features instances, each with a Time Constraints Data link object

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant, that is, each <Feature Representation> instance that
    *  exists in the component tree rooted at the given <Aggregate Feature>,
    *  shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Feature Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


Field Elements:
    SE_Time_Data_Type time_data_type;
   /*
    *  This specifies the subclass of <Base Time Data> of which
    *  each <Time Constraints Data> link object in the given
    *  organization is to be composed.
    */


-------------------------------------------------------------------------------

Class Name: Time Related Geometry

Definition:
 An instance of this DRM class is an aggregation of <Geometry Hierarchy>
 instances, in which each branch is a representation of the same
 environmental entity at a different point in time, as indicated by the
 corresponding <Time Constraints Data> instance.

Primary Page in DRM Diagram:
     4

Example:
 1. Consider atmospheric forecast data organized using nested
    <Time Related Geometry> instances.

         <Time Related Geometry>
                  < >
                   |
                   --------------------------------
                   |                               |
                   |                            <Classification Data>
                   |-- <Time Constraints Data>   ECC_TIME_FORECAST_BASE_SET
                   |      < >
                   |       |
                   |   <Absolute Time>
                   |
                   |
                   |
          <Time Related Geometry>
                  < >
                   |
 ------------------------------------------------------------
 |                            |                             |
 |                            |                   <Classification Data>
 |                            |                   ECC_TIME_FORECAST_TAU_SET
 |                            |
 |-- <Time Constraints Data>  |-- <Time Constraints Data>
 |           < >              |      < >
 |            |               |       |
 |     <Relative Time>  |   <Relative Time>
 |           < >              |        < >
 |            |               |         |
 |      <Absolute Time> |   <Absolute Time>
 |                            |
 <Property Grid Hook Point>  <Property Grid Hook Point>


    The <Classification Data> specify what each <Time Related Geometry>
    instance corresponds to. The outer <Time Related Geometry> corresponds
    to base forecast times, while the inner <Time Related Geometry>
    corresponds to forecast taus.

    In the forecast world, models are run starting at some base starting time,
    for example, at 0Z and 12Z.  The model then produces forecasts at several
    deltas after the base starting time, for example, at 6, 12, 18, and
    24 hours. These are known as forecast taus.

    Consequently, if forecast models are run at 0Z and 12Z, and each produces
    a 24 hour forecast, the following overlap is obtained.

    16 Nov                 17 Nov                     18 Nov
    0Z   +6    +12   +18   +24
               12Z   +6   +12    +18    +24
                           0Z    +6     +12    +18    +24
                                  etc.

    So to uniquely identify a forecast, the base forecast time and the
    delta (tau) are required. This is why nested <Time Related Geometry>
    has been used in this example; one <Time Related Geometry> defines the
    base forecast time, while its component <Time Related Geometry> defines
    the forecast tau.

    Note that this approach is needed only if multiple forecasts with
    overlapping forecasts are included in the transmittal. If instead
    the analysis (0Z) and +6 forecasts from each forecast are used,
    the following would be obtained.

    16 Nov             17 Nov
    0Z   +6  12Z  +6   0Z   +6   12Z   +6  etc

 2. Consider a <Model> of a deciduous tree. The colour of the tree's leaves
    depends on the time of year, or season. Consequently, a data provider
    might organize a tree <Model> using a <Time Related Geometry> along
    the following lines. (Only the autumn representation of the <Model>
    is shown, but other branches are present for the other seasons).

                   <Model>
                     <>
                      |
               <Geometry Model>
                     <>
                      |
            <Time Related Geometry>
                      |
                      |---<Time Constraints Data>
                      |         <>
                      |         |
                      |      <Season>
                      |      time_significance =
                      |        SE_TIME_SIGNIF_CONTEXT_DETERMINED
                      |      season = SE_SEASON_AUTUMN
                      |         <>
                      |         |
                      |      <Relative Time Interval>
                      |
                      |
            <Union Of Primitive Geometry>

FAQS:
     None.

Superclass: Aggregate Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates
     Distinct Link Objects

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance

Composed of (two-way)
	one or more Geometry Hierarchy instances, each with a Time Constraints Data link object

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


Field Elements:
    SE_Time_Data_Type time_data_type;
   /*
    *  This specifies the subclass of <Base Time Data> of which
    *  each <Time Constraints Data> link object in the given
    *  organization is to be composed.
    */


-------------------------------------------------------------------------------

Class Name: TM Augmented 3D Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Augmented Transverse Mercator (ATM) 3D SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. The British National Grid (BNG) uses Transverse Mercator. Note that
    the Transverse Mercator SRF is often used to describe areas that
    have greater north-south than east-west extent, and that distortion
    of scale, distance, direction and area increase away from the
    central meridian.

FAQS:
 Q. Where can users obtain further information on ATM?
 A. See the SRM for additional details.

Superclass: Location 3D

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances
	zero or one Attachment Point instance
	zero or more Base Positional Light instances
	zero or one Contact Point instance
	zero or more Geometric Centre instances
	zero or more Separating Plane instances
	zero or more Sound Instance instances
	zero or more Stamp Behaviour instances
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

Field Elements:
    SRM_Map_Projection_3D_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Class Name: TM Surface Location

Definition:
 An instance of this DRM class specifies a coordinate within the
 Transverse Mercator (TM) Surface SRF.

 See [I18026] for a complete definition.

Primary Page in DRM Diagram:
     15

Example:
 1. The British National Grid (BNG) uses Transverse Mercator. Note that
    the Transverse Mercator SRF is often used to describe areas that
    have greater north-south than east-west extent, and that distortion
    of scale, distance, direction and area increase away from the
    central meridian.

FAQS:
 Q. Where can users obtain further information on TM?
 A. See the SRM for additional details.

Superclass: Location Surface

Constraints:
     Publishable Object
     Environment Root Spatial Reference Frame
     Image Anchor Spatial Reference Frame
     Model Spatial Reference Frame

Component of (two-way) (inherited)
	zero or more Arc instances
	zero or more Camera Point instances
	zero or more Directional Light Behaviour instances
	zero or one Distance LOD Data instance
	zero or more Ellipse instances
	zero or more Feature Edge instances
	zero or more Feature Face instances
	zero or one Feature Node instance
	zero or more Image Anchor instances
	zero or more Label instances
	zero or more Perimeter Data instances
	zero or more Point instances
	zero or more Property Grid Hook Point instances
	zero or one Reference Origin instance
	zero or more Reference Vector instances
	zero or more Spatial Extent instances
	zero or more Spatial Index Related Feature Topology instances
	zero or more Spatial Index Related Features instances
	zero or more Spatial Index Related Geometry instances
	zero or more Spatial Index Related Geometry Topology instances
	zero or more Tack Point instances
	zero or more Vertex instances
	zero or more World 3x3 instances
	zero or more World Transformation instances

Field Elements:
    SRM_Map_Projection_Surface_Coordinate coordinate;
   /*
    *  The coordinate field specifies the coordinate values.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Transformation

Definition:
 An instance of a concrete class derived from this DRM class is applied
 to the object aggregating the instance. <Location 3D> and <Reference Vector>
 instances are always affected by <Transformation> instances.

Primary Page in DRM Diagram:
     7

Secondary Pages in DRM Diagram:
     3
     23

Example:
 1. The location and orientation of a building instanced onto a
    terrain representation.

 2. The <Transformation> that enables the use of a sidewinder
    missile with horizontal orientation when it was modeled standing
    vertically on its fins.

 3. The <Transformation> into place of a logical <Model> sub-graph,
    such as a representation of the superstructure of a ship.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     LSR Transformation
     World Transformation

Constraints:
     Publishable Object

Component of (two-way)
	zero or more Feature Model Instance instances
	zero or more Geometry Model Instance instances

-------------------------------------------------------------------------------

Class Name: Translation

Definition:
 An instance of this DRM class is an <LSR Transformation Step>
 that specifies a translation amount along the specified axis.

Primary Page in DRM Diagram:
     7

Example:
 1. Translate 2376.85 metres along the X axis.

 2. Translate -4756.5 metres along the Y axis.

 3. Translate 12.0 metres along the Z axis.

FAQS:
     None.

Superclass: LSR Transformation Step

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	zero or one Reference Vector instance 

Composed of (two-way)
	zero or one Translation Control Link instance

Component of (two-way) (inherited)
	zero or one LSR Transformation instance

Field Elements:
    SE_LSR_Transformation_Axis axis;
   /*
    *  This specifies which axis to translate along.
    */

    SE_Long_Float translation_amount;
   /*
    *  This specifies the translation amount in metres,
    *  and is permitted to be negative.
    */


-------------------------------------------------------------------------------

Class Name: Translation Control Link

Definition:
 An instance of this DRM class is a specialized <Control Link> used to
 provide the connection between an ordered aggregation of <Expression>
 instances and the target fields of a <Translation>.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     7

Example:
 1. Consider a <Geometry Model> of a building, containing a <Geometry
    Model Instance> of an elevator car, where both <Models> are specified
    in a 3D LSR SRF, and the elevator car is intended
    to be a moving part of the building model. The <LSR Transformation>
    used to instance the elevator model into the building shall specify
    a <Translation> component with a <Translation Control Link>.

    <Model>
    <>
    |
    ----------------------------------------------------------
    |                          |                             |
    <Geometry Model Instance>  <Classification Data>   <Interface Template>
       (elevator instance)     tag = ECC_BUILDING                       |
    <>                                                                  |
    |                                                                   |
    <LSR Transformation>                                                |
    <>                                                                  |
    |                                                                   |
    <Translation>                                                       |
    axis               = SE_LSR_TRNSFRM_AXIS_Z                          |
    translation_amount = 0.0                                            |
    <>                                                                  |
    |                                                                   |
    |                                                                   |
    <Translation Control Link>                                          |
    expr_index  = 1                                                     |
    lower_expr_index = 2                                                |
    upper_expr_index = 3                                                |
    <>                                                                  |
    |                                                                   |
    -------------------------------------------------------------       |
    |                             |                             |       |
    <Literal>                     <Literal>                    <Variable>
    value = { SE_SVT_FLOAT,       value = { SE_SVT_FLOAT,
              { 0.0 }}                      { 500.0 }}

    This <Translation Control Link> specifies:
    - A <Literal>, defining the lower limit (the bottom of the
      elevator shaft) of the translation, in this case, 0.0 metres.

    - A <Literal>, defining the upper limit (the top of the
      elevator shaft) of the translation, in this case, 500.0 metres.

    - A <Variable>, the actual translation of the elevator along
      the elevator shaft's z axis at any given moment.

      The <Variable>'s meaning = { SE_ELEM_CODE_TYP_VARIABLE,
                                   { SE_VAR_CODE_TRANSLATION_AMOUNT }}

      The <Variable>'s value_unit = EUC_METRE and its
      value_scale = ESC_UNI, because <Translation>, by definition,
      defines its fields in metres.

 2. See <Property Table Reference Control Link>, example 2.

FAQS:
     None.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more Translation instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Positive expr_index;
   /*
    *  For a given <Translation Control Link> instance C, expr_index
    *  serves as a 1-based index into the ordered <Expression>
    *  components of C such that the specific <Expression> selected
    *  specifies the value of the translation_amount field of each
    *  <Translation> controlled by C.
    */

    SE_Integer_Unsigned lower_expr_index;
   /*
    *  For a given <Translation Control Link> instance C, if
    *  lower_expr_index > 0, it serves as a 1-based index into the
    *  ordered <Expression> components of C such that the specific
    *  <Expression> selected specifies the lower limit for the
    *  translation_amount of each <Translation> controlled by C.
    *  If lower_expr_index = 0, it indicates that no such lower limit
    *  is being specified.
    */

    SE_Integer_Unsigned upper_expr_index;
   /*
    *  For a given <Translation Control Link> instance C, if
    *  upper_expr_index > 0, it serves as a 1-based index into the
    *  ordered <Expression> components of C such that the specific
    *  <Expression> selected specifies the upper limit for the
    *  translation_amount of each <Translation> controlled by C.
    *  If upper_expr_index = 0, it indicates that no such upper limit
    *  is being specified.
    */


-------------------------------------------------------------------------------

Class Name: Translucency

Definition:
 An instance of this DRM class specifies the percentage of light that
 can pass through the given <Colour> instance, where
    translucency_value = 0.0 indicates that no light passes through, and
    translucency_value = 1.0 indicates a fully transparent object.

 In essence, this specifies the transparency of the colour.

 NOTE: An object's "opacity" is equal to 1.0 - transparency.

Primary Page in DRM Diagram:
     14

Example:
 1. The alpha value for an Ambient, OTW colour can be encoded in SEDRIS
    as an <Inline Colour> with an <Ambient Colour> and a <Translucency>
    component.

FAQS:
 Q. If an object has a <Colour> with a <Translucency>, together with an
    <Image Mapping Function> specifying an <Image> that also has an alpha,
    how are the two alpha values resolved?
 A. That depends on the <Image Mapping Function>'s image_mapping_method.
    See SE_Image_Mapping_Method for a detailed description of how
    <Image> and <Colour> alpha values are resolved for various mapping
    methods.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	zero or one Translucency Control Link instance

Component of (two-way)
	one or more Colour instances

Field Elements:
    SE_Long_Float translucency_value;
   /*
    *  This is the percentage of light that can pass through the given
    *  <Colour> instance, expressed as a number between 0.0 and 1.0.
    */


-------------------------------------------------------------------------------

Class Name: Translucency Control Link

Definition:
 An instance of this DRM class is a specialized <Control Link> used to
 provide the connection between an ordered list of <Expression> instances
 and the target translucency_value field of a <Translucency> instance.

 The expr_index field is a 1-based index into the ordered aggregation of
 <Expressions>, and is used to select the specific <Expression> that defines
 <Translucency>'s translucency_value field.

Primary Page in DRM Diagram:
     17

Secondary Pages in DRM Diagram:
     14

Example:
 1. Puddles can be faded in based on the precipitation rate.

FAQS:
     None.

Superclass: Control Link

Constraints:
     Publishable Object

Composed of (two-way) (inherited)
	one or more {ordered} Expression instances

Component of (two-way)
	one or more Translucency instances

Inherited Field Elements:
    SE_String description;
   /*
    *  The description field specifies a text description of the given
    *  <Control Link> instance's purpose.
    */


Field Elements:
    SE_Integer_Positive expr_index;
   /*
    *  This value specifies which <Expression> component controls the
    *  translucency_value of the affected <Translucency> instance(s).
    */


-------------------------------------------------------------------------------

Class Name: Transmittal Root

Definition:
 The hierarchical root of all objects in a single SEDRIS transmittal.  As
 such, it is the basic unit of interchange. The content of a transmittal
 can be as simple as a single <Model> instance, or as complex as a
 complete representation of a large geographic region with all of the
 <Model> instances, terrain, atmospheric, and oceanographic data necessary
 to simulate an environment.

Primary Page in DRM Diagram:
     1

Secondary Pages in DRM Diagram:
     10

Example:
 1. SIMNET databases such as Grafenfels and Ft. Knox.

FAQS:
 Q. How can a user determine which version of the DRM is being used?
 A. The Level 0 API has a function that provides this information:
    SE_GetTransmittalVersionInformation()

 Q. How can a user determine which version of the EDCS is being used?
 A. The Level 0 API has a function that provides this information:
    SE_GetTransmittalVersionInformation()

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	one or more Base Time Data instances 
	zero or one Colour Table Library instance
	zero or one Data Table Library instance
	zero or more Environment Root instances
	zero or one Image Library instance
	zero or one Model Library instance
	zero or one Property Set Table Library instance
	zero or one Reference Origin instance
	zero or one Sound Library instance
	zero or one Symbol Library instance
	one Transmittal Summary instance

Composed of (two-way metadata)
	one Access instance
	one Citation instance
	zero or more Cross Reference instances
	one Data Quality instance
	one Description instance

Field Elements:
    SE_String name;
   /*
    *  This is a meaningful short name.
    */

    SE_Short_Integer_Positive major_DRM_version;
   /*
    *  This specifies the major version number of the release of the
    *  DRM used to create the transmittal to which the given instance
    *  of <Transmittal Root> belongs.
    */

    SE_Byte_Unsigned minor_DRM_version;
   /*
    *  This specifies the minor version number of the release of the
    *  DRM used to create the transmittal to which the given instance
    *  of <Transmittal Root> belongs.
    */

    SE_Character interim_DRM_version;
   /*
    *  This shall be '\0' for none; between 'a' and 'z' inclusive,
    *  for an UNOFFICIAL, INTERIM model.
    */

    SE_Short_Integer_Positive major_EDCS_version;
   /*
    *  This specifies the major version number of the release of the
    *  EDCS used to create the transmittal to which the given instance
    *  of <Transmittal Root> belongs.
    */

    SE_Byte_Unsigned minor_EDCS_version;
   /*
    *  This specifies the minor version number of the release of the
    *  EDCS used to create the transmittal to which the given instance
    *  of <Transmittal Root> belongs.
    */

    SE_Character interim_EDCS_version;
   /*
    *  This shall be '\0' for none; between 'a' and 'z' inclusive,
    *  for an UNOFFICIAL, INTERIM model.
    */


-------------------------------------------------------------------------------

Class Name: Transmittal Summary

Definition:
 An instance of this DRM class summarizes the content of the
 transmittal for which its aggregate <Transmittal Root> instance
 serves as root object, in terms of:

 - Environmental domains represented (such as terrain, ocean)
 - Types of data used (such as geometry, features, data tables)
 - DRM classes used
 - EDCS Classifications used
 - SRFs used

Primary Page in DRM Diagram:
     20

Secondary Pages in DRM Diagram:
     1

Example:
 1. A <Transmittal Summary> for a transmittal containing a <Model Library>
    and an <Environment Root>.

 <Transmittal Root>
      <>
       |
   ----------------------------------------------------
   |     |                                            |
   |     |                                            |
   |     +-- <Model Library> <>-- - - (models)     <Environment Root>
   |                                              (terrain geometry and
   |                                               ocean <Data Table>)
   |
 <Transmittal Summary>
   <>
    |
    |
    +----- <Environmental Domain Summary> (Terrain)
    |
    |
    |
    +----- <Environmental Domain Summary> (Oceanography)
    |
    |
    |
    +----- <DRM Class Summary Item> <>--- <SRF Summary>
    |      (<Environment Root>)            (Terrain SRF)
    |
    +----- <DRM Class Summary Item> <>--- <SRF Summary>
    |      (<Property Grid>)               (Ocean SRF)
    |                                      (i.e. on ocean <Property Grid>)
    |
    +----- <DRM Class Summary Item>
    |      (<Model Library>)
    |
    +----- <DRM Class Summary Item> <>--- <SRF Summary>
    |        (Model)                       (Model SRF)
    .         <>
    .         |
    .         +-- <EDCS Use Summary Item> <> -- <Classification Data>
    .         |   ("Funny shaped               | (ECC_TREES)
              |    area of trees")             |
              |                                +---<Property Description>
              |                                | EAC_PREDOMINANT_HEIGHT
              |                                |
              |                                +---<Property Description>
              |                                    EAC_TREE_TYPE_CATEGORY
              |
              +-- <EDCS Use Summary Item> <> -- <Classification Data>
                  ("Derwent Reservoir")        | ECC_RESERVOIR
                                               |
                                               +---<Property Description>
                                            EAC_DEPTH_BELOW_SURFACE_LEVEL

FAQS:
 Q. How are the environmental domains summarized?
 A. The <Transmittal Summary> can aggregate a list of <Environmental
    Domain Summary> instances. Each <Environmental Domain Summary>
    represents one of the domains for which data is provided.

 Q. How are the SEDRIS classes used summarized?
 A. The <Transmittal Summary> can aggregate a list of <DRM Class Summary
    Items>. Each <DRM Class Summary Item> represents one of the classes
    used.

 Q. How are the classifications summarized?
 A. Each classification (i.e. the ECC and the sets of EACs used with
    it) that is used in the transmittal is summarized using a
    <EDCS Use Summary Item>. Each <EDCS Use Summary Item> is a component
    of the <DRM Class Summary Item> that represents the class
    that uses the classification within the transmittal.

 Q. How are the SRFs summarized?
 A. Each SRF that is used in the transmittal is
    summarized using a <SRF Summary>. Each <SRF Summary> is a component
    of the <DRM Class Summary Item> that represents the class that uses
    the SRF within the transmittal.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Non Overlapping DRM Class Summary Items

Composed of (two-way)
	zero or more DRM Class Summary Item instances

Composed of (two-way metadata)
	zero or more EDCS Use Summary Item instances
	zero or more Environmental Domain Summary instances

Component of (two-way)
	one Transmittal Root instance

Field Elements:
    SE_Present_In features_present;
   /*
    *  This indicates whether <Feature Representation> instances of some
    *  kind are present in the transmittal being summarized, and if so,
    *  in what context. Note that if <Feature Representation> instances
    *  are present in a given context, <Feature Topology> instances will
    *  be present also.
    */

    SE_Present_In geometry_present;
   /*
    *  This indicates whether <Geometry Representation> instances of some
    *  kind are present in the transmittal being summarized, and if so,
    *  in what context.
    */

    SE_Present_In geometry_topology_present;
   /*
    *  This indicates whether <Geometry Topology> instances of some
    *  kind are present in the transmittal being summarized, and if so,
    *  in what context. Note that if <Geometry Topology> instances are
    *  present in a given context, <Geometry Representation> instances
    *  will be present also.
    */

    SE_Present_In data_tables_present;
   /*
    *  This indicates whether <Data Table> instances of some kind are
    *  present in the transmittal being summarized, and if so, in what
    *  context.
    */

    SE_Present_In priority_values_present;
   /*
    *  This indicates whether <Rendering Priority Level> instances are
    *  present somewhere in the transmittal being summarized, and if so,
    *  in what context.
    */

    SE_Present_In mobility_values_present;
   /*
    *  This indicates whether <Property> instances are present somewhere
    *  in the transmittal being summarized, the EAC codes of which
    *  specify mobility, also known as trafficability, information,
    *  such as EAC_SURFACE_TRAFFICABILITY_GROUP_SIMNET.
    */

    SE_Present_In thermal_values_present;
   /*
    *  This indicates whether <Property> instances are present somewhere
    *  in the transmittal being summarized, the EAC codes of which
    *  specify thermal information.
    */

    SE_Present_In terrain_lods_present;
   /*
    *  This indicates whether <LOD Related Geometry> and/or
    *  <LOD Related Features> instances representing terrain information
    *  are present in the transmittal being summarized, and if so, in
    *  what context.
    */

    SE_Present_In two_D_features_flag;
   /*
    *  This indicates whether any <Feature Representation> instance
    *  containing at least one <Location 2D> or <Location Surface>
    *  instance is present in the transmittal being summarized, and
    *  if so, in what context.
    */

    SE_Boolean models_present;
   /*
    *  The images_present field specifies whether <Model> instances
    *  exist in the transmittal being summarized.
    */

    SE_Boolean images_present;
   /*
    *  The images_present field specifies whether <Image> instances
    *  exist in the transmittal being summarized.
    */

    SE_Boolean sounds_present;
   /*
    *  The sounds_present field specifies whether <Sound> instances
    *  exist in the transmittal being summarized.
    */

    SE_Boolean symbols_present;
   /*
    *  The symbols_present field specifies whether <Symbol> instances
    *  exist in the transmittal being summarized.
    */

    SE_Boolean colours_present;
   /*
    *  The colours_present field specifies whether <Colour> instances
    *  are present in the transmittal being summarized. If no <Colour>
    *  instances are present, the value of the colour_model field is
    *  not applicable.
    */

    SE_Colour_Model colour_model;
   /*
    *  The colour_model field is interpreted by the API only if
    *  colours_present is set to SE_TRUE. The colour_model field
    *  specifies the colour model used by the data provider for all
    *  <Colour> instances in the transmittal for which the content
    *  is being summarized by the given <Transmittal Summary> instance.
    *  For example, if this field's value is SE_CLR_MDL_RGB, then any
    *  <Colour Data> instance in the transmittal shall be an
    *  <RGB Colour> instance.
    */

    SE_Boolean EDCS_usage_list_is_comprehensive;
   /*
    *  The EDCS_usage_list_is_comprehensive field specifies whether
    *  the <EDCS Use Summary Item> components of the given
    *  <Transmittal Summary> instance constitute a comprehensive
    *  summary of EDCS usage by the transmittal being summarized.
    */


-------------------------------------------------------------------------------

Class Name: Twinkling Light Behaviour

Definition:
 An instance of this DRM class specifies a light for which the
 duration and period are random.

Primary Page in DRM Diagram:
     21

Example:
 1. City lights seen to twinkle due to atmospheric effects,
    such as heat haze, or due to intermittent obstructions,
    such as waving tree branches.

 2. Stars, as seen from the surface of a planetary body through
    an atmosphere.

FAQS:
     None.

Superclass: Light Rendering Behaviour

Constraints:
     Publishable Object

Component of (two-way) (inherited)
	one or more Light Rendering Properties instances

-------------------------------------------------------------------------------

Class Name: Union Of Feature Topology

Definition:
 An instance of this DRM class is a collection of all of the
 <Feature Topology> instances that form a complete topological surface.

Primary Page in DRM Diagram:
     11

Example:
 1. A thematic layer representing a transportation network might be broken up
    into four rectangular tiles.  While the <Linear Feature> instances
    representing roads are allowed to extend across the tile boundaries,
    the <Feature Topology> instances that are located within each tile are
    organized into separate <Union Of Feature Topology> instances to support
    access by spatial location.

FAQS:
 Q. What is the purpose of this class?

 A. This class allows <Feature Topology> instances to be grouped in an
    arbitrary manner.  It is used to ensure that all <Feature Topology>
    instances, particularly those that are not directly associated with any
    <Feature Representation>, have at least one aggregate.

Superclass: Feature Topology Hierarchy

Constraints:
     Publishable Object
     Perimeter Related Organizing Principle
     Union Organizing Principle

Composed of (two-way)
	one or more Feature Topology instances

Component of (two-way) (inherited)
	zero or more Aggregate Feature instances

Component of (two-way)
	zero or one Perimeter Related Feature Topology instance, each with a Perimeter Data link object
	zero or one Spatial Index Related Feature Topology instance, each with a Spatial Index Data link object

Inherited Field Elements:
    SE_Feature_Topology_Level feature_topology_level;
   /*
    *  The feature_topology_level field specifies the level of
    *  feature topology that is present within the hierarchy
    *  represented by the given <Feature Topology Hierarchy>
    *  instance.
    */


-------------------------------------------------------------------------------

Class Name: Union Of Features

Definition:
 An instance of this DRM class is an <Aggregate Feature> containing
 an arbitrary collection of <Feature Representations>.

Primary Page in DRM Diagram:
     8

Example:
 1. An airport could be represented as a <Union Of Features> that includes
    <Linear Feature> instances for the runways; a <Point Feature> for the
    control tower; and <Areal Feature> instances for the terminal and
    parking lots.

 2. A collection of <Areal Feature> instances that represent all forested
    areas within the spatial extent of the given <Environment Root>.

FAQS:
 Q. What is the purpose of this class?

 A. A <Union Of Features> provides a general-purpose mechanism for grouping
    together a collection of <Feature Representations>, which may include <Primitive
    Features>, <Feature Model Instances>, and other <Aggregate Features>.
    Note that a <Union Of Features> is the only type of <Aggregate Feature>
    that can include <Primitive Features> as direct components.  They
    therefore tend to be used at the lowest levels of a <Feature Hierarchy>.

Superclass: Aggregate Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Non Cyclic Aggregations
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates
     Classification Data Constraint
     Union Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or more Colour instances
	zero or more Feature Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance 
	zero or more Property Description instances
	zero or one Spatial Extent instance

Composed of (two-way)
	one or more {ordered} Feature Representation instances

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances
	zero or more Alternate Hierarchy Related Features instances, each with a Hierarchy Data link object
	zero or more Classification Related Features instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Feature Model instance
	zero or more LOD Related Features instances, each with a Base LOD Data link object
	zero or more Octant Related Features instances, each with a Octant Data link object
	zero or more Perimeter Related Features instances, each with a Perimeter Data link object
	zero or more Quadrant Related Features instances, each with a Quadrant Data link object
	zero or more Spatial Index Related Features instances, each with a Spatial Index Data link object
	zero or more State Related Features instances, each with a State Data link object
	zero or more Time Related Features instances, each with a Time Constraints Data link object

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant, that is, each <Feature Representation> instance that
    *  exists in the component tree rooted at the given <Aggregate Feature>,
    *  shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Feature Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


Field Elements:
    SE_Union_Reason union_reason;
   /*
    *  The union_reason field specifies the reason why the given instance of
    *  <Union Of Features> was created to organize its components.
    */

    SE_Ordering_Reason ordering_reason;
   /*
    *  The ordering_reason field specifies whether the ordering of the
    *  component <Feature Representation>
    *  instances of the given <Union Of Features> instance is semantically
    *  significant, and if so, what that significance is.
    */


-------------------------------------------------------------------------------

Abstract Class Name: Union Of Geometry

Definition:
 An instance of one of the concrete subclasses of this abstract DRM
 class is an aggregation of <Geometry Representation> specifying a
 standardized mechanism by which to organize the members that compose
 the union.

Primary Page in DRM Diagram:
     4

Secondary Pages in DRM Diagram:
     23

Example:
 1. An antenna assembly is contained in a weather protection
    enclosure.  Visually, only the opaque enclosure can be seen.
    But at microwave frequencies, the enclosure is invisible and
    only the antenna can be "seen".  The entire structure is
    contained in a <Union Of Geometry>.  What the Radar "sees"
    is modeled with a Radar Cross-section (RCS) <Property Table>.
    The algorithm (or field measurements) that computed the RCS
    table used axes that do not match the SRF
    (world or model as the case may be).  Therefore, RCS axes of
    azimuth and elevation angle are misused unless some
    REFERENCE DIRECTIONS can be attached to the entire
    <Union Of Geometry>.

FAQS:
 Q. What if a <Model> of the outside of a house, developed for a
    non-Zbuffered system, has the polygons grouped to render properly in
    a fixed order? Say the house has four walls and four windows. Assuming
    the polygons are all grouped together, how would this example be
    represented in the SEDRIS DRM at the attribute level?
 A. The fixed order of the polygons would be reflected in a
    <Union Of Primitive Geometry> with the ordering_reason set to
    SE_ORDRNG_REASON_FIXED_LISTED. The lowest priority <Polygon>
    instances (the walls) would be specified first and the higher
    priority polygons (the windows) would be specified last.

 Q. What if the house in the previous example were developed for a Zbuffered
    system?
 A. The polygons would typically be grouped in layers. There are two
    approaches that could be employed by the modeler depending on how
    the polygons are grouped.

    1) If all the polygons are one-sided front-facing polygons, then the
       house could be represented with an <Union Of Geometry Hierarchy> with
       ordering_reason = SE_LAYERED with two children. The first child
       would be the base layer (all the walls) and the second child (the
       first decal layer) would contain all the windows.  In this case, the
       polygons under an SE_LAYERED <Union Of Geometry> are not coplanar,
       but the rendering priority can still be resolved.

    2) If the modeler grouped the layers into coplanar unions of <Polygon>
       instances, the SEDRIS structure might be represented as
       <Union Of Geometry> with four layered <Union Of Geometry>
       (wall and window) would list the wall first and the window next.

 Q. When would a <Reference Vector> be a component of a <Union Of Geometry>?
 A. A <Reference Vector> would be used when a <Union Of Geometry>
    represented a "thing" in the environment. An example of this is a
    building represented by a <Union Of Geometry>, and which has a
    <Property Table> of radar cross-sections. The table would need a
    <Reference Vector> to establish the zero azimuth direction.
    (See Example 1).

Superclass: Aggregate Geometry

Subclasses:
     Union Of Geometry Hierarchy
     Union Of Primitive Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates
     Classification Data Constraint
     Union Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance

Composed of (two-way)
	zero or more Reference Vector instances

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */


Field Elements:
    SE_Union_Reason union_reason;
   /*
    *  The union_reason field specifies the reason why the given instance of
    *  <Union Of Geometry> was created to organize its components.
    */

    SE_Ordering_Reason ordering_reason;
   /*
    *  The ordering_reason field specifies whether the ordering of the
    *  component <Geometry Representation>
    *  instances of the given <Union Of Geometry> instance is semantically
    *  significant, and if so, what that significance is.
    */


-------------------------------------------------------------------------------

Class Name: Union Of Geometry Hierarchy

Definition:
 An instance of this DRM class serves to organize <Geometry Hierarchy>
 instances for which no other organizing principle is suitable.

Primary Page in DRM Diagram:
     4

Example:
 See <Union Of Geometry>.

FAQS:
 See <Union Of Geometry>.

Superclass: Union Of Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates
     Classification Data Constraint
     Union Organizing Principle

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance
	zero or more Reference Vector instances

Composed of (two-way)
	one or more {ordered} Geometry Hierarchy instances

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */

    SE_Union_Reason union_reason;
   /*
    *  The union_reason field specifies the reason why the given instance of
    *  <Union Of Geometry> was created to organize its components.
    */

    SE_Ordering_Reason ordering_reason;
   /*
    *  The ordering_reason field specifies whether the ordering of the
    *  component <Geometry Representation>
    *  instances of the given <Union Of Geometry> instance is semantically
    *  significant, and if so, what that significance is.
    */


-------------------------------------------------------------------------------

Class Name: Union Of Geometry Topology

Definition:
 An instance of this DRM class is a collection of all of the
 <Geometry Topology> instances that form a complete
 topological surface.

Primary Page in DRM Diagram:
     11

Example:
     None.

FAQS:
 Q. What is the purpose of this class?

 A. This class allows <Geometry Topology> instances to be grouped in an
    arbitrary manner.  It is used to ensure that all <Geometry Topology>
    instances, particularly those that are not directly associated with any
    <Geometry Representation>, have at least one containing object.

Superclass: Geometry Topology Hierarchy

Constraints:
     Publishable Object
     Perimeter Related Organizing Principle
     Union Organizing Principle

Composed of (two-way)
	one or more Geometry Topology instances

Component of (two-way) (inherited)
	zero or more Aggregate Geometry instances

Component of (two-way)
	zero or one Perimeter Related Geometry Topology instance, each with a Perimeter Data link object
	zero or one Spatial Index Related Geometry Topology instance, each with a Spatial Index Data link object

Inherited Field Elements:
    SE_Geometry_Topology_Level geometry_topology_level;
   /*
    *  The geometry_topology_level field specifies the level of
    *  geometry topology that is present within the hierarchy
    *  represented by the given <Geometry Topology Hierarchy>
    *  instance.
    */


-------------------------------------------------------------------------------

Class Name: Union Of Primitive Geometry

Definition:
 An instance of this DRM class is a <Union Of Geometry> that is
 composed solely of <Primitive Geometry>.

Primary Page in DRM Diagram:
     4

Secondary Pages in DRM Diagram:
     5

Example:
 1. Consider a typical geometric representation of an airport runway,
    in which the runway surface is represented by a layer of polygons,
    overlaid by stripes (decal polygons).

    To ensure that the necessary rendering order is followed, the
    data provider creates a <Union Of Primitive Geometry> UPG, and
    attaches each <Polygon> as a component of UPG, in order of
    increasing relative rendering priority (the <Polygon> with the
    lowest relative rendering priority is attached first).

    After all the <Polygon> instances in the underlying layer have
    been attached, the decal <Polygon> instances are processed in the
    order in which they will be rendered.

    If a specific method is used for the ordering, the data provider
    specifies it in UPG's ordering_reason field. In this case, the
    data was created for a Z-buffered rendering system that supports
    layers, so ordering_reason is set to
    SE_ORDRNG_REASON_LYR_HIGH_QUALITY_RENDERING.

 2. A collection of <Polygon> instances making up the graphical
    representation of a forest canopy.

 3. A 10 kilometre by 20 kilometre triangulated irregular network of
    <Polygon> instances.

FAQS:
     None.

Superclass: Union Of Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Non Crossing Associations
     Colour Mapping Restrictions
     Distinct Geometric Centre
     Image Mapping Functions and Texture Coordinates
     Classification Data Constraint
     Union Organizing Principle
     Continuous LOD Restrictions
     Nested Primitive Geometry

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or one Hierarchy Summary Item instance 
	zero or more Reference Surface instances 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Reference Surface instance
	zero or more Sound Instance instances
	zero or more Base LOD Data instances
	zero or one Bounding Volume instance
	zero or more Camera Point instances
	zero or more Collision Volume instances 
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	a bounded set of 0..3 Geometric Centre instances
	zero or more Geometry Topology Hierarchy instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or more Light Source instances
	zero or one LSR Transformation instance
	zero or one Overload Priority Index instance
	zero or one Perimeter Data instance
	zero or one Presentation Domain instance
	zero or more Property Description instances
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or one Spatial Extent instance
	zero or one Stamp Behaviour instance
	zero or more Reference Vector instances

Composed of (two-way)
	one or more {ordered} Primitive Geometry instances

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance

Component of (two-way) (inherited)
	zero or more Alternate Hierarchy Related Geometry instances, each with a Hierarchy Data link object
	zero or more Animation Related Geometry instances
	zero or more Classification Related Geometry instances, each with a Classification Data link object
	zero or one Environment Root instance
	zero or one Geometry Model instance
	zero or more LOD Related Geometry instances, each with a Base LOD Data link object
	zero or more Octant Related Geometry instances, each with a Octant Data link object
	zero or more Perimeter Related Geometry instances, each with a Perimeter Data link object
	zero or more Quadrant Related Geometry instances, each with a Quadrant Data link object
	zero or more Separating Plane Relations instances, each with a Separating Plane Data link object
	zero or more Spatial Index Related Geometry instances, each with a Spatial Index Data link object
	zero or more State Related Geometry instances, each with a State Data link object
	zero or more Time Related Geometry instances, each with a Time Constraints Data link object
	zero or more Union Of Geometry Hierarchy instances

Component of (two-way)
	zero or one Continuous LOD Related Geometry instance
	zero or one Primitive Geometry instance

Inherited Field Elements:
    SE_Boolean unique_descendants;
   /*
    *  If the value of the unique_descendants field is SE_TRUE, each
    *  descendant of this aggregation,
    *  that is, each <Geometry Representation> instance that exists
    *  in the component tree
    *  rooted at the given <Aggregate Geometry>, shall be unique, in the
    *  sense that it shall appear in only one branch of this aggregation.
    *  If unique_descendants is SE_FALSE, at least one
    *  <Geometry Representation> instance
    *  appears in more than one branch of the aggregation.
    */

    SE_Boolean strict_organizing_principle;
   /*
    *  If the value of the strict_organizing_principle field is SE_TRUE,
    *  each branch of this aggregation
    *  strictly complies with the organizing principle for its
    *  particular subclass. If this value is SE_FALSE, at least
    *  one branch does not strictly comply with the given
    *  organizing principle. See the organizing principle constraint
    *  for each specific subclass for details.
    */

    SE_Union_Reason union_reason;
   /*
    *  The union_reason field specifies the reason why the given instance of
    *  <Union Of Geometry> was created to organize its components.
    */

    SE_Ordering_Reason ordering_reason;
   /*
    *  The ordering_reason field specifies whether the ordering of the
    *  component <Geometry Representation>
    *  instances of the given <Union Of Geometry> instance is semantically
    *  significant, and if so, what that significance is.
    */


-------------------------------------------------------------------------------

Class Name: Variable

Definition:
 An instance of this DRM class is used to connect an <Interface Template>
 instance to a location within an <Expression> tree where outside
 control may be exerted.

 For a <Variable> instance contained within a <Model>, evaluation is
 valid only for a specific instance of that <Model>.  The value is
 determined by an <Expression> that is aggregated by the specific
 <Geometry Model Instance> or <Feature Model Instance>.  This
 <Expression> shall be associated to the same <Interface Template>
 instance that is associated with the <Variable>.

 For a <Variable> instance contained within an <Environment_Root>,
 the evaluation can only be performed within the context of values
 that shall be supplied by the consuming system.

Primary Page in DRM Diagram:
     16

Example:
 1. Consider a source database containing a <Model> with some polygons that
    reference "table driven texture". Such a polygon is defined as a
    <Polygon> that has one reference to an <Image> with multiple references
    to s and t values, which are stored in a <Data Table>. The index into
    this table is decided at run-time. Each <Polygon> containing a
    "table-driven texture" has an identifier that is used, along with the
    index, at run-time.

    In SEDRIS, the <Polygon> uses a <Property Table Reference> to index
    into the <Data Table> containing the different s and t values. Attached
    to the <Property Table Reference> is a <Property Table Reference
    Control Link>. The <Variable> attached to this <Property Table Reference
    Control Link is ultimately be associated to the <Interface Template>
    on the <Model>. The original identifier on the <Polygon> shall reside on
    the <Variable> rather than the Polygon, since the <Variable> controls
    the s,t values.

 2. The following is another example of how a runtime_label on a <Variable>
    would be used.
       On moving models there might be polygons that have IR values attached
    to them. Consider a tank <Model> in such a database.

    In SEDRIS, the IR values are stored in <Property Table> instances. The
    <Polygon>s of the tank reference these elements through a
    <Property Table Reference>. A <Property Table Reference Control Link>
    is used for those <Polygon> instances that have "heat producing"
    capability (for instance, the gun barrel), so that the index into the
    IR table can be changed to other values as the gun is used
    and heats up. More than one <Polygon> will contain the same ID. The
    consumer shall be able to identify the <Polygon> instances (through the
    <Control Link> and <Interface Template> instances) by this ID so that he
    can switch these <Polygon> instances to be "heat producing".

FAQS:
 Q. Why is identification of <Variable> instances (provided by runtime_label)
    desirable?
 A. So that consumers can control what value is being plugged in, depending
    on how it is identified. See examples 1, 2 for how this is used and why
    it is needed.

Superclass: Expression

Constraints:
     Publishable Object
     Non Cyclic Aggregations
     Non Crossing Associations
     Variable Meaning Restrictions

Associated with (two-way)
	one Interface Template instance

Component of (two-way) (inherited)
	zero or more Control Link instances
	zero or more Feature Model Instance instances, each with a Model Instance Template Indices link object
	zero or more Function instances
	zero or more Geometry Model Instance instances, each with a Model Instance Template Indices link object

Field Elements:
    SE_Property_Code meaning;
   /*
    *  The meaning field specifies the quantity represented by the
    *  given <Variable> instance.
    */

    EDCS_Unit_Code value_unit;
   /*
    *  The value_unit field specifies the unit of measurement of the
    *  quantity represented by the given <Variable> instance.
    */

    EDCS_Scale_Code value_scale;
   /*
    *  The value_scale field specifies the scale applicable to value_unit.
    */

    EDCS_Attribute_Value_Type value_type;
   /*
    *  The value_type field specifies the value type of the given
    *  <Variable> instance.
    */

    SE_String description;
   /*
    *  The description field specifies a meaningful explanation of
    *  the purpose of the given <Variable> instance.
    */

    SE_String runtime_label;
   /*
    *  The runtime_label field is used for <Variable> instances that
    *  consumers need to identify which represent run-time flags,
    *  provided so that appropriate
    *  values can be "plugged in", which then affect any <Control Link>
    *  instances driven by such a <Variable> instance. If a <Variable>
    *  instance does not need a runtime_label, the field is set to the
    *  empty string.
    */


-------------------------------------------------------------------------------

Class Name: Vertex

Definition:
 An instance of this DRM class specifies a point where two
 sides of a <Polygon> intersect, or any end of a line segment,
 such as those implicitly specified by a <Finite Element Mesh>.

Primary Page in DRM Diagram:
     5

Secondary Pages in DRM Diagram:
     13
     18

Example:
 1. Any of the three corners of a triangle.
 2. Any of the four corners of a quadrilateral.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object
     Image Mapping Functions and Texture Coordinates

Associated with (two-way)
	zero or one Geometry Node instance 

Composed of (two-way)
	zero or more Colour instances
	zero or one Conformal Behaviour instance
	one Location instance
	zero or more Property Table Reference instances
	zero or one Reference Vector instance
	zero or more {ordered} Texture Coordinate instances 

Component of (two-way)
	zero or more Arc instances
	zero or more Finite Element Mesh instances
	zero or more Line instances
	zero or more Polygon instances

-------------------------------------------------------------------------------

Abstract Class Name: Volume

Definition:
 An instance of a concrete class derived from this DRM class is a geometric 
 primitive shape that identifies an enclosed 3D solid. Possible shapes 
 include spheres (and implied points, where a point is a degenerate sphere),
 parallelepiped, cylinders (and implied lines, where a line is a
 degenerate cylinder).  The shape is given by the <Volume Extent>
 component, the location of the shape centre is given by
 the <Location 3D> component.

Primary Page in DRM Diagram:
     9

Secondary Pages in DRM Diagram:
     23

Example:
 1. A terrain region has a <Bounding Volume> defined by a sphere with
    centre specified by the <Location 3D> component and radius given by
    the <Spherical Volume Extent> component radius field.

 2. A parallelepiped <Volume>, describing the <Collision Volume> of a
    house, is represented by a component <Location 3D> for the centre
    of the house and a component <Parallelepiped Volume Extent>.

FAQS:
     None.

Superclass: SEDRIS Abstract Base

Subclasses:
     Bounding Volume
     Collision Volume
     Sound Volume

Constraints:
     Publishable Object

Composed of (two-way)
	one Location 3D instance 
	one Volume Extent instance 

-------------------------------------------------------------------------------

Abstract Class Name: Volume Extent

Definition:
 An instance of one of the concrete subclasses of this DRM class
 specifies the spatial volume extent of an instance or instances
 of various volume classes.

Primary Page in DRM Diagram:
     5

Secondary Pages in DRM Diagram:
     9
     21
     23

Example:
 See specific subclasses for examples.

FAQS:
 Q. Why don't <Volume Extent>'s sub-classes specify location data?
 A. <Location> information is provided by the aggregating object.  This
    allows a single <Volume Extent> to be used in several locations.

Superclass: SEDRIS Abstract Base

Subclasses:
     Cylindrical Volume Extent
     Parallelepiped Volume Extent
     Spherical Volume Extent

Constraints:
     Publishable Object

Component of (two-way)
	zero or more Volume instances
	zero or more Volume Light Behaviour instances
	zero or more Volume LOD Data instances
	zero or more Volume Object instances

-------------------------------------------------------------------------------

Abstract Class Name: Volume Geometry

Definition:
 An instance of a concrete class derived from this DRM class specifies
 a volumetric representation of some environmental entity.

Primary Page in DRM Diagram:
     5

Secondary Pages in DRM Diagram:
     23

Example:
 See specific subclasses for examples.

FAQS:
     None.

Superclass: Primitive Geometry

Subclasses:
     Polyhedron
     Volume Object

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Continuous LOD Restrictions
     Image Mapping Functions and Texture Coordinates
     Nested Primitive Geometry

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or one Presentation Domain instance
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or more Tack Point instances
	zero or one Union Of Primitive Geometry instance 

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Primitive Geometry instances

-------------------------------------------------------------------------------

Class Name: Volume LOD Data

Definition:
 An instance of this DRM class specifies a volume that governs the
 switching of objects by the associated branch of a Volume-based
 <LOD Related Geometry> or <LOD Related Features> instance.

Primary Page in DRM Diagram:
     9

Example:
 1. Consider a geometric representation of a runway for an application
    for which increased detail is required as a viewer gets within
    1000 metres of it, but for which a less detailed representation
    can be used outside that volume. This geometric representation can
    be organized as a <LOD Related Geometry> instance,
    wherein the branch corresponding to the less detailed representation
    has a <Volume LOD Data> link object with outside set
    to SE_TRUE, specifying a parallelepiped volume that is aligned
    with the runway and extends 1000 metres from each edge. The more
    detailed representation's <Volume LOD Data> link
    object would use the same <Parallelepiped Volume Extent> and
    the same volume centre, but would have outside set to SE_FALSE.

 2. Consider another application, for which a geometric representation
    of a runway is required to provide increased detail as a viewer
    gets within 1000 metres of either end, but which if overflown
    from the side does not require detail to be switched on until
    the viewer is 500 metres away. In this case, the representation
    would have the same structure as that used in the previous
    example, but the parallelepiped would extend only 500 metres
    from either side of the runway, while extending 1000 metres
    from each end.

 3. Consider a representation of a windowless building having
    opaque walls, such that nothing inside the building can
    be seen by an observer outside the building representation.
    Consequently, everything inside that building's representation
    can be switched on and off depending on whether an observer
    is inside or outside the building. This can be represented
    by organizing the building interior's representation with
    a volume level of detail organization.

    Suppose that the building interior's feature representation
    is being considered, so that it is being represented as
    one branch of a <LOD Related Features> instance
    in a geodetic SRF, and that the interior
    volume of the building can be represented as a parallelepiped.

      <LOD Related Features>
        <>
        |
        | - - - <Volume LOD Data>
        |       outside = SE_FALSE
        |                 <>
        |                  |
        |       -----------------------------------
        |       |                                 |
        |   <Parallelelpiped Volume Extent>   <CD 3D Location>
        |
        |
      (building interior's feature representation)

    The <Volume LOD Data> specifies a parallelepiped
    volume of the same dimensions as the building interior, and
    specifies the centre of that volume. The value of its
    outside field indicates that the building interior's feature
    representation (the data represented by this branch) is active
    only when the viewer is inside (that is, not outside) the
    parallelepiped volume.

FAQS:
 Q. Why does Level Of Detail need to be controlled by a volume?
 A. A spherical boundary, defined by a distance from a centre point,
    may not be appropriate for some objects. For example, long, thin
    objects such as runways. In such cases, Levels Of Detail shall be
    switched at different distances from the centre of the object, depending
    on the direction the object is approached from. A volume allows such a
    non-spherical boundary to be specified.

Superclass: Base LOD Data

Constraints:
     Publishable Object
     LOD Related Organizing Principle

Composed of (two-way)
	one Location 3D instance 
	one Volume Extent instance 

Component of (two-way) (inherited)
	zero or more Aggregate Feature instances
	zero or more Aggregate Geometry instances
	zero or more Property Grid Hook Point instances

Field Elements:
    SE_Boolean outside;
   /*
    *  For a <Volume LOD Data> instance associated with
    *  a given branch of a volume-based level of detail aggregation,
    *  outside = SE_TRUE if that branch is switched on when the
    *  observer is outside the volume, and off when the observer
    *  is inside the volume. If outside = SE_FALSE, this behaviour
    *  is reversed.
    */


-------------------------------------------------------------------------------

Class Name: Volume Light Behaviour

Definition:
 An instance of this DRM class is a <Light Rendering Behaviour>, the
 colour of which varies depending on the observer's position relative
 to the light's location and to the volume's geometry. The volume
 surrounds the light. Within the volume, the light has the primary colour;
 outside the volume, it takes the secondary colour.

Primary Page in DRM Diagram:
     21

Example:
 1. The <Volume Light Behaviour> has a primary colour that is a
    <Colour Index> that has an intensity attribute of 0.95.
    The <Volume Light Behaviour> also has a secondary colour. The
    minimum_colour_intensity is 0.0. The use_full_intensity flag
    is SE_FALSE. The light is in the centre of the volume and the
    volume is a <Parallelepiped Volume Extent> representing
    a cube measuring 2000 metres per side.

    if:
    eye_distance_from_light = the distance of the viewing
                              position from the light
    volume_distance_from_light = the distance between the light
                                 and the volume boundary along
                                 the same vector
    then:
    final_intensity = minimum_colour_intensity +
                      (((volume_distance_from_light -
                         eye_distance_from_light) /
                         volume_distance_from_light) *
                         (full_intensity - minimum_colour_intensity))

    If the observer's position from the light is a distance of 500 metres
    along a vector from the light to a corner of the volume then
    the final_intensity is 0.614.
    0.0 + (((1414.2 - 500.0) / 1414.2) * (0.95 - 0.0))

    If the observer's position from the light is 3000 metres then the
    final_intensity is 1.0 (using the secondary colour) because
    the observer is outside the volume and there is a
    secondary colour on the <Volume Light Behaviour> instance.

 2. The <Volume Light Behaviour> instance has a primary colour that is an
    <Inline Colour> instance (which makes the full intensity 1.0). The
    minimum_colour_intensity is 0.5. The use_full_intensity flag is
    SE_TRUE. The light is in the centre of the volume and the
    <Volume Extent> instance is a <Spherical Volume Extent> instance with
    a radius of 1000 metres.

    If the observer's distance from the light is a distance of 100 metres,
    the final_intensity is 1.0, since the observer's position is inside the
    volume and the use_full_intensity flag is set to SE_TRUE.

    If the observer's distance from the light is a distance of 0 units then
    the final_intensity is 1.0 since the observer's position is inside the
    volume and the use_full_intensity flag is set to SE_TRUE.

FAQS:
     None.

Superclass: Light Rendering Behaviour

Constraints:
     Publishable Object

Composed of (two-way)
	one Location 3D instance 
	one Volume Extent instance 

Component of (two-way) (inherited)
	one or more Light Rendering Properties instances

Field Elements:
    SE_Boolean use_full_intensity;
   /*
    *  If SE_TRUE, the use_full_intensity field specifies that the
    *  full intensity of
    *  the light is shown within the volume. Otherwise, the intensity
    *  of the light decreases towards the minimum_colour_intensity
    *  value) as the observer moves away from the light. The
    *  intensity of the light reaches the minimum_colour_intensity
    *  value when the observer reaches the boundary of the volume.
    */

    SE_Long_Float minimum_colour_intensity;
   /*
    *  The value of the minimum_colour_intensity field, which shall
    *  be between 0.0 and 1.0, is used in conjunction with the
    *  intensity value of the primary colour.
    *  If the primary colour is a <Colour Index> instance, the
    *  full intensity is the intensity attribute of that instance.
    *  If the primary colour is an <Inline Colour>, the full
    *  intensity is 1.0.
    *
    *  If the observer's location is the same as that of the light,
    *  it receives the full (intensity) value. As the observer moves
    *  away from the light (but is still within the volume), the
    *  intensity decreases toward the minimum_colour_intensity value,
    *  unless use_full_intensity = SE_TRUE). Once the observer is
    *  outside the volume, the intensity is that of the
    *  minimum_colour_intensity value. If the
    *  minimum_colour_intensity value is 0.0 and the observer is
    *  outside the volume, the secondary colour will be seen. If
    *  no secondary colour is used, nothing will be seen.
    */


-------------------------------------------------------------------------------

Class Name: Volume Object

Definition:
 An instance of this DRM class specifies a volume as a
 geometric representation.

Primary Page in DRM Diagram:
     5

Secondary Pages in DRM Diagram:
     13

Example:
     None.

FAQS:
     None.

Superclass: Volume Geometry

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Cyclic Aggregations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Continuous LOD Restrictions
     Image Mapping Functions and Texture Coordinates
     Nested Primitive Geometry
     Cylindrical Structure

Associated with (two-way)
	zero or one Geometry Node instance 

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances
	zero or one Light Rendering Properties instance
	zero or one Presentation Domain instance
	zero or one Rendering Priority Level instance
	zero or one Rendering Properties instance
	zero or more Tack Point instances
	zero or one Union Of Primitive Geometry instance 

Composed of (two-way)
	one Location 3D instance 
	one Volume Extent instance 

Composed of (two-way metadata) (inherited)
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Primitive Geometry instances

-------------------------------------------------------------------------------

Class Name: Volumetric Feature

Definition:
 An instance of this DRM class is a <Primitive Feature> that encloses
 a bounded region of three-dimensional space, such as a building or a
 room within a building.

Primary Page in DRM Diagram:
     8

Secondary Pages in DRM Diagram:
     12

Example:
 1. Consider a <Volumetric Feature> instance representing a building. It
    has an associated <Feature Volume> instance, which defines its extent,
    shape, and topological relationships; a <Classification Data> component
    that classifies it as an ECC_BUILDING; <Property Value> components that
    describe its characteristics, such as material composition, and a
    <Label> instance that identifies it as "The Empire State Building".

            <Volumetric Feature>-------------<Feature Volume>
                   <>
           ----------------------------------------
           |                      |               |
   <Classification Data>   <Property Value>    <Label>
     { ECC_BUILDING }                            <>
                                                 |
                                               <Text>
                                      { "Empire State Building" }


FAQS:
 Q. Is Level 5 feature topology required in order for
    <Volumetric Feature> instances to exist?
 A. No. In order for <Volumetric Feature> instances to exist, the
    SRF must be three-dimensional, and at least
    one <Feature Volume> object must exist.

 Q. Can a <Volumetric Feature>'s topology consist of multiple
    <Feature Volume> instances? If so, are these <Feature Volume>
    instances required to be adjacent or connected to one another?
 A. A <Volumetric Feature> can consist of multiple <Feature Volume>
    instances. There is no requirement that these <Feature Volume>
    instances be adjacent or connected to one another. For example,
    a house with a detached garage could be represented as a single
    <Volumetric Feature> with two associated <Feature Volume>
    instances (one for the house itself, and one for the garage).

Superclass: Primitive Feature

Constraints:
     Publishable Object
     No Attribute Conflicts
     Non Crossing Aggregations
     Non Crossing Associations
     Precedence of Property Set Index
     Colour Mapping Restrictions
     Image Mapping Functions and Texture Coordinates

Associated to (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated by (one-way) (inherited)
	zero or more Feature Representation instances, each with a Base Association Data link object 
	zero or more Geometry Hierarchy instances, each with a Base Association Data link object 
	zero or more Property Grid instances, each with a Base Association Data link object 

Associated with (two-way)
	one or more Feature Volume instances

Composed of (two-way) (inherited)
	zero or one Classification Data instance
	zero or more Label instances
	zero or more {ordered} Property Set Index instances
	zero or more Property Table instances
	zero or more Property Table Reference instances
	zero or more Property Value instances
	zero or one Rendering Priority Level instance
	zero or more Colour instances
	zero or more {ordered} Image Mapping Function instances 
	zero or one Presentation Domain instance 
	zero or one Spatial Extent instance

Composed of (two-way metadata) (inherited)
	zero or one Access instance
	zero or more Cross Reference instances
	zero or one Data Quality instance
	zero or one Description instance
	zero or one Time Constraints Data instance

Component of (two-way) (inherited)
	zero or more Union Of Features instances

-------------------------------------------------------------------------------

Class Name: World 3x3

Definition:
 An instance of this DRM class specifies a nine element matrix
 containing scaling and rotation data as part of a <World Transformation>
 instance. The direction of rotation is determined by the right-hand rule.

 Translation data is not provided by a <World 3x3> instance, because
 a <World 3x3> instance only exists as part of a <World Transformation>
 instance. The translation, or offset, component of a
 <World Transformation> instance is provided by the mandatory
 <Location> component of the <World Transformation> instance. In essence,
 a <World 3x3> matrix can be considered to be a full transformation matrix
 in which the rightmost column and bottom row have been omitted, because
 each is implicitly (0, 0, 0, 1).

 <World Transformation> instances usually exist in the scope of an
 <Environment Root> instance defining a non-LSR SRF. Consequently,
 <World 3x3> instances usually exist within a 'world' SRF, hence
 the name.

 The matrix multiplication order is defined by w = M * v,
 where M is the <World 3x3> matrix, v is the original
 location vector, and w is the resulting location vector.

Primary Page in DRM Diagram:
     7

Example:
 1. Scale and rotation applied to a <Model> when placing an instance.

 2. The house near Dixie Rd. is facing east.  The large house across the
    street is facing west.

 3. See <Local 4x4> for more examples and explanations of matrix structure.

FAQS:
 Q. How is the transformation matrix stored?
 A. SEDRIS stores matrices in *row* major order; that is,
    the first three elements correspond to the first row
    of the matrix, the following three elements correspond
    to the second row of the matrix, and so on (just as a
    float[3][3] in C is organized). Hence, if mat[][] is
    the matrix being used, then mat[i][j] is the element
    in row i and column j of the matrix.

 Q. What is the multiplication order for <World 3x3>
    matrices?
 A. If M is a <World 3x3> transformation matrix and v
    is a column location vector, then the SEDRIS Level 0 API
    transforms v to a column location vector w by setting
    w = Mv.

    (See HTML for detailed matrix equation.)

 Q. After applying a <World Transformation> instance to a
    <Geometry Model Instance> (GMI), a data consumer found the GMI
    oriented in a different direction than expected. Why?
 A. There are at least two possibilities.
    1) Check that the rotation angles had the correct sign,
       given that the right hand rule is in effect.

    2) The <World 3x3> component of the <World Transformation> instance
       may have been constructed using invalid assumptions about the
       order of multiplication defined in SEDRIS. In this case,
       transposing the <World 3x3> instance's matrix would solve the
       problem, provided that the rotation angles were correct (see 1).

 Q. Why is a <World 3x3> instance allowed to have a <Location>
    component, considering that <World Transformation> itself
    is required to have a <Location> component?
 A. Consider a transmittal containing an <Environment Root>
    defined in a geodetic SRF. This
    transmittal also contains an LSR <Model> within its
    <Model Library>, which is instanced in the geodetic
    <Environment Root> such that the <Model> SRF's y-axis
    is oriented to geodetic north.

    Now consider a consumer who wishes to consume this transmittal
    in Augmented UTM rather than geodetic. If the <World 3x3> is
    left as-is during the transformation performed by the API, it will
    now orient the <Model> SRF's y-axis to Augmented UTM north
    rather than the geodetic north.  This will change the object's
    orientation from the originally intended direction.

    Since geodetic space does not have a vector structure, a canonical
    LTP space shall be embedded within geodetic space to convert the
    values of the <World 3x3> matrix during the coordinate conversion/
    transformation operation. Since a <Location> is required to define
    a canonical LTP space, conversion of the <World 3x3> instance shall
    be performed with respect to a <Location>. Allowing the <World 3x3>
    to have a <Location> as a direct component allows the <World 3x3> to
    inherit the <Location> component of its parent <World Transformation>,
    and thus define the necessary location for a coordinate conversion/
    transformation operation.

 Q. Is a matrix in SEDRIS the same as a matrix in OpenGL?
 A. No. A matrix in SEDRIS is stored in row major order,
    while in OpenGL, matrices are specified in column major
    order (as in the glMultMatrix function). Consequently,
    to correctly apply SEDRIS transformations in OpenGL
    programs, each matrix shall be reordered, and in the
    case of <World 3x3>, the implicit (0, 0, 0, 1) rightmost
    column and bottommost row shall be supplied explicitly.

Superclass: SEDRIS Abstract Base

Constraints:
     Publishable Object

Composed of (two-way)
	zero or one Location instance

Component of (two-way)
	zero or more World Transformation instances

Field Elements:
    SRM_Matrix_3x3 world_3x3;
   /*
    *  The world_3x3 field specifies an orientation matrix.
    */


-------------------------------------------------------------------------------

Class Name: World Transformation

Definition:
 An instance of this DRM class is a <Transformation>, specified by a
 <Location> and a <World 3x3>, used to transform an object defined in
 an LSR SRF into another SRF (usually, but not always, a non-LSR SRF).

 A <World Transformation> instance is either
 - defined in a non-LSR SRF, then used to instance an LSR <Model>
   into the non-LSR SRF, or

 - defined within an LSR SRF (SRF_1), and then used to instance a
   <Model> embedded within another LSR SRF (SRF_2) into SRF_1, in
   a way that maintains the conformality of any <Location>
   instances in the <Model>.

Primary Page in DRM Diagram:
     7

Example:
 1. Used when instancing a house onto geodetic terrain (defined by latitude
    and longitude). This allows the <Location> instance to position the
    house and the <World 3x3> instance to rotate and scale the house.

 2. The location and orientation of a building instanced onto a
    terrain representation.

 3. See <Transformation> for examples.

FAQS:
     None.

Superclass: Transformation

Constraints:
     Publishable Object

Composed of (two-way)
	one Location instance
	zero or one World 3x3 instance

Component of (two-way) (inherited)
	zero or more Feature Model Instance instances
	zero or more Geometry Model Instance instances