/* file: sketch_basis_select.swift 	 generated: Mon Jan  3 16:32:52 2022 */

/* This file was generated by the EXPRESS to Swift translator "exp2swift", 
  derived from STEPcode (formerly NIST's SCL).
 exp2swift version: v.1.0.1, derived from stepcode v0.8 as of 2019/11/23 
 WARNING: You probably don't want to edit it since your modifications 
  will be lost if exp2swift is used to regenerate it.
 */

 
import SwiftSDAIcore

extension AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF {
//MARK: -TYPE DEFINITION in EXPRESS
/*
  TYPE sketch_basis_select = SELECT
    ( curve_bounded_surface (*ENTITY*),
     face_surface (*ENTITY*),
     planar_curve_select (*SELECT*) );
  END_TYPE; -- sketch_basis_select (line:5464 file:ap242ed2_mim_lf_v1.101.TY.exp)

*/


//MARK: - ALL DEFINED ATTRIBUTES FOR SELECT
/*
  curve_bounded_surface (*ENTITY*):
  ATTR:  boundaries: SET [1 : ?] OF boundary_curve
  ATTR:  basis_surface: surface
  ATTR:  implicit_outer: BOOLEAN
  ATTR:  name: label
  ATTR:  dim: dimension_count

  face_surface (*ENTITY*):
  ATTR:  bounds: SET [1 : ?] OF face_bound
  ATTR:  permanent_aggregate_id: identifier
  ATTR:  face_geometry: surface
  ATTR:  same_sense: BOOLEAN
  ATTR:  permanent_id: identifier
  ATTR:  name: label
  ATTR:  dim: dimension_count

  planar_curve_select (*SELECT*):
  ATTR:  reference_to_curve: definitional_representation
  ATTR:  basis_curve: curve
  ATTR:  trim_1: SET [1 : 2] OF trimming_select
  ATTR:  trim_2: SET [1 : 2] OF trimming_select
  ATTR:  pnt: cartesian_point
  ATTR:  sense_agreement: BOOLEAN
  ATTR:  radius: positive_length_measure
  ATTR:  semi_imag_axis: positive_length_measure
  ATTR:  position: axis2_placement
  ATTR:  associated_geometry: LIST [1 : 2] OF pcurve_or_surface
  ATTR:  master_representation: (AMBIGUOUS (CASE LEVEL))
  ATTR:  curve_3d: curve
  ATTR:  semi_axis_1: positive_length_measure
  ATTR:  basis_surface: (AMBIGUOUS (CASE LEVEL))
  ATTR:  semi_axis_2: positive_length_measure
  ATTR:  semi_axis: positive_length_measure
  ATTR:  dir: vector
  ATTR:  focal_dist: length_measure
  ATTR:  name: label
  ATTR:  dim: dimension_count

*/

/** SELECT type
- EXPRESS:
```express
  TYPE sketch_basis_select = SELECT
    ( curve_bounded_surface (*ENTITY*),
     face_surface (*ENTITY*),
     planar_curve_select (*SELECT*) );
  END_TYPE; -- sketch_basis_select (line:5464 file:ap242ed2_mim_lf_v1.101.TY.exp)

```
*/
  public enum sSKETCH_BASIS_SELECT : SDAIValue, AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF__sSKETCH_BASIS_SELECT__type {

    /// SELECT case ``eCURVE_BOUNDED_SURFACE`` (ENTITY) in ``sSKETCH_BASIS_SELECT``
    case _CURVE_BOUNDED_SURFACE(eCURVE_BOUNDED_SURFACE)	// (ENTITY)

    /// SELECT case ``eFACE_SURFACE`` (ENTITY) in ``sSKETCH_BASIS_SELECT``
    case _FACE_SURFACE(eFACE_SURFACE)	// (ENTITY)

    /// SELECT case ``sPLANAR_CURVE_SELECT`` (SELECT) in ``sSKETCH_BASIS_SELECT``
    case _PLANAR_CURVE_SELECT(sPLANAR_CURVE_SELECT)	// (SELECT)

    //MARK: - CONSTRUCTORS
    public init(fundamental: FundamentalType) { self = fundamental }

    public init?<T: SDAIUnderlyingType>(possiblyFrom underlyingType: T?){
      guard let underlyingType = underlyingType else { return nil }

      if let base = underlyingType as? sPLANAR_CURVE_SELECT {
        self = ._PLANAR_CURVE_SELECT(base)
      }
      else if let base = sPLANAR_CURVE_SELECT(possiblyFrom: underlyingType) {
        self = ._PLANAR_CURVE_SELECT(base)
      }
      else { return nil }
    }

    public init?(possiblyFrom complex: SDAI.ComplexEntity?) {
      guard let complex = complex else { return nil }

      if let base = complex.entityReference(eCURVE_BOUNDED_SURFACE.self) {self = ._CURVE_BOUNDED_SURFACE(base) }
      else if let base = complex.entityReference(eFACE_SURFACE.self) {self = ._FACE_SURFACE(base) }
      else if let base = sPLANAR_CURVE_SELECT(possiblyFrom: complex) {
        self = ._PLANAR_CURVE_SELECT(base)
      }
      else { return nil }
    }

    public init?<G: SDAIGenericType>(fromGeneric generic: G?) {
      guard let select = generic else { return nil }

      if let fundamental = select as? Self {
        self.init(fundamental: fundamental)
      }
      else if let base = eCURVE_BOUNDED_SURFACE.convert(fromGeneric: select) {
        self = ._CURVE_BOUNDED_SURFACE(base)
      }
      else if let base = eFACE_SURFACE.convert(fromGeneric: select) {
        self = ._FACE_SURFACE(base)
      }
      else if let base = sPLANAR_CURVE_SELECT.convert(fromGeneric: select) {
        self = ._PLANAR_CURVE_SELECT(base)
      }
      else { return nil }
    }

    // InitializableByP21Parameter
    public static var bareTypeName: String = "SKETCH_BASIS_SELECT"

    public init?(p21typedParam: P21Decode.ExchangeStructure.TypedParameter, from exchangeStructure: P21Decode.ExchangeStructure) {
      guard let keyword = p21typedParam.keyword.asStandardKeyword else { exchangeStructure.error = "unexpected p21parameter(\(p21typedParam)) while resolving \(Self.bareTypeName) select value"; return nil }

      switch(keyword) {
      case sPLANAR_CURVE_SELECT.bareTypeName:
        guard let base = sPLANAR_CURVE_SELECT(p21typedParam: p21typedParam, from: exchangeStructure) else { exchangeStructure.add(errorContext: "while resolving \(Self.bareTypeName) select value"); return nil }
        self = ._PLANAR_CURVE_SELECT(base)

      default:
        exchangeStructure.error = "unexpected p21parameter(\(p21typedParam)) while resolving \(Self.bareTypeName) select value"
        return nil
      }
    }

    public init?(p21untypedParam: P21Decode.ExchangeStructure.UntypedParameter, from exchangeStructure: P21Decode.ExchangeStructure) {
      switch p21untypedParam {
      case .rhsOccurenceName(let rhsname):
        switch rhsname {
        case .constantEntityName(let name):
          guard let entity = exchangeStructure.resolve(constantEntityName: name) else {exchangeStructure.add(errorContext: "while resolving \(Self.bareTypeName) instance"); return nil }
          self.init(possiblyFrom: entity.complexEntity)

        case .entityInstanceName(let name):
          guard let complex = exchangeStructure.resolve(entityInstanceName: name) else {exchangeStructure.add(errorContext: "while resolving \(Self.bareTypeName) instance"); return nil }
          self.init(possiblyFrom: complex)

        default:
          exchangeStructure.error = "unexpected p21parameter(\(p21untypedParam)) while resolving \(Self.bareTypeName) select instance"
          return nil
        }

      default:
        exchangeStructure.error = "unexpected p21parameter(\(p21untypedParam)) while resolving \(Self.bareTypeName) select instance"
        return nil
      }
    }

    public init?(p21omittedParamfrom exchangeStructure: P21Decode.ExchangeStructure) {
      return nil
    }


    //MARK: - NON-ENTITY UNDERLYING TYPE REFERENCES
    public var super_sPLANAR_CURVE_SELECT: sPLANAR_CURVE_SELECT? {
      switch self {
      case ._PLANAR_CURVE_SELECT(let selectValue): return selectValue
      default: return nil
      }
    }

    //MARK: - ENTITY UNDERLYING TYPE REFERENCES
    public var super_eFACE_SURFACE: eFACE_SURFACE? {
      switch self {
      case ._FACE_SURFACE(let entity): return entity
      default: return nil
      }
    }

    public var super_eTOPOLOGICAL_REPRESENTATION_ITEM: eTOPOLOGICAL_REPRESENTATION_ITEM? {
      switch self {
      case ._FACE_SURFACE(let entity): return entity.super_eTOPOLOGICAL_REPRESENTATION_ITEM
      default: return nil
      }
    }

    public var super_eBOUNDED_SURFACE: eBOUNDED_SURFACE? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let entity): return entity.super_eBOUNDED_SURFACE
      default: return nil
      }
    }

    public var super_eTRIMMED_CURVE: eTRIMMED_CURVE? {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.super_eTRIMMED_CURVE
      default: return nil
      }
    }

    public var super_eCONIC: eCONIC? {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.super_eCONIC
      default: return nil
      }
    }

    public var super_eSURFACE_CURVE: eSURFACE_CURVE? {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.super_eSURFACE_CURVE
      default: return nil
      }
    }

    public var super_eFACE: eFACE? {
      switch self {
      case ._FACE_SURFACE(let entity): return entity.super_eFACE
      default: return nil
      }
    }

    public var super_eREPRESENTATION_ITEM: eREPRESENTATION_ITEM? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let entity): return entity.super_eREPRESENTATION_ITEM
      case ._FACE_SURFACE(let entity): return entity.super_eREPRESENTATION_ITEM
      case ._PLANAR_CURVE_SELECT(let select): return select.super_eREPRESENTATION_ITEM
      }
    }

    public var super_eLINE: eLINE? {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.super_eLINE
      default: return nil
      }
    }

    public var super_ePCURVE: ePCURVE? {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.super_ePCURVE
      default: return nil
      }
    }

    public var super_eCURVE: eCURVE? {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.super_eCURVE
      default: return nil
      }
    }

    public var super_eCURVE_BOUNDED_SURFACE: eCURVE_BOUNDED_SURFACE? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let entity): return entity
      default: return nil
      }
    }

    public var super_eSURFACE: eSURFACE? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let entity): return entity.super_eSURFACE
      default: return nil
      }
    }

    public var super_eBOUNDED_CURVE: eBOUNDED_CURVE? {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.super_eBOUNDED_CURVE
      default: return nil
      }
    }

    public var super_eGEOMETRIC_REPRESENTATION_ITEM: eGEOMETRIC_REPRESENTATION_ITEM? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let entity): return entity.super_eGEOMETRIC_REPRESENTATION_ITEM
      case ._FACE_SURFACE(let entity): return entity.super_eGEOMETRIC_REPRESENTATION_ITEM
      case ._PLANAR_CURVE_SELECT(let select): return select.super_eGEOMETRIC_REPRESENTATION_ITEM
      }
    }


    //MARK: - ENTITY ATTRIBUTE REFERENCES
    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var REFERENCE_TO_CURVE: eDEFINITIONAL_REPRESENTATION?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.REFERENCE_TO_CURVE
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: ENTITY( ``eFACE_SURFACE`` )
    public var BOUNDS: (SDAI.SET<eFACE_BOUND>/*[1:nil]*/ )?  {
      switch self {
      case ._FACE_SURFACE(let entity): return entity.BOUNDS
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var BASIS_CURVE: eCURVE?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.BASIS_CURVE
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var TRIM_1: (SDAI.SET<sTRIMMING_SELECT>/*[1:2]*/ )?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.TRIM_1
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var TRIM_2: (SDAI.SET<sTRIMMING_SELECT>/*[1:2]*/ )?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.TRIM_2
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: ENTITY( ``eCURVE_BOUNDED_SURFACE`` )
    public var BOUNDARIES: (SDAI.SET<eBOUNDARY_CURVE>/*[1:nil]*/ )?  {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let entity): return entity.BOUNDARIES
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var PNT: eCARTESIAN_POINT?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.PNT
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var SENSE_AGREEMENT: SDAI.BOOLEAN?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.SENSE_AGREEMENT
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: ENTITY( ``eFACE_SURFACE`` )
    public var PERMANENT_AGGREGATE_ID: tIDENTIFIER?  {
      switch self {
      case ._FACE_SURFACE(let entity): return entity.PERMANENT_AGGREGATE_ID
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var RADIUS: tPOSITIVE_LENGTH_MEASURE?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.RADIUS
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var SEMI_IMAG_AXIS: tPOSITIVE_LENGTH_MEASURE?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.SEMI_IMAG_AXIS
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var POSITION: sAXIS2_PLACEMENT?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.POSITION
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var ASSOCIATED_GEOMETRY: (SDAI.LIST<sPCURVE_OR_SURFACE>/*[1:2]*/ )?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.ASSOCIATED_GEOMETRY
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var CURVE_3D: eCURVE?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.CURVE_3D
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: ENTITY( ``eFACE_SURFACE`` )
    public var FACE_GEOMETRY: eSURFACE?  {
      switch self {
      case ._FACE_SURFACE(let entity): return entity.FACE_GEOMETRY
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var SEMI_AXIS_1: tPOSITIVE_LENGTH_MEASURE?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.SEMI_AXIS_1
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: ENTITY( ``eCURVE_BOUNDED_SURFACE`` )
    public var BASIS_SURFACE: eSURFACE?  {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let entity): return entity.BASIS_SURFACE
      case ._PLANAR_CURVE_SELECT/*(let select)*/: return nil // AMBIGUOUS ATTRIBUTE for sPLANAR_CURVE_SELECT
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var SEMI_AXIS_2: tPOSITIVE_LENGTH_MEASURE?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.SEMI_AXIS_2
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var SEMI_AXIS: tPOSITIVE_LENGTH_MEASURE?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.SEMI_AXIS
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: ENTITY( ``eFACE_SURFACE`` )
    public var SAME_SENSE: SDAI.BOOLEAN?  {
      switch self {
      case ._FACE_SURFACE(let entity): return entity.SAME_SENSE
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: ENTITY( ``eCURVE_BOUNDED_SURFACE`` )
    public var IMPLICIT_OUTER: SDAI.BOOLEAN?  {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let entity): return entity.IMPLICIT_OUTER
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: ENTITY( ``eFACE_SURFACE`` )
    public var PERMANENT_ID: tIDENTIFIER?  {
      switch self {
      case ._FACE_SURFACE(let entity): return entity.PERMANENT_ID
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var DIR: eVECTOR?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.DIR
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var FOCAL_DIST: tLENGTH_MEASURE?  {
      switch self {
      case ._PLANAR_CURVE_SELECT(let select): return select.FOCAL_DIST
      default: return nil
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: ENTITY( ``eCURVE_BOUNDED_SURFACE`` )
    /// - origin: ENTITY( ``eFACE_SURFACE`` )
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var NAME: tLABEL?  {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let entity): return entity.NAME
      case ._FACE_SURFACE(let entity): return entity.NAME
      case ._PLANAR_CURVE_SELECT(let select): return select.NAME
      }
    }

    /// attribute of SELECT type ``sSKETCH_BASIS_SELECT``
    /// - origin: ENTITY( ``eCURVE_BOUNDED_SURFACE`` )
    /// - origin: ENTITY( ``eFACE_SURFACE`` )
    /// - origin: SELECT( ``sPLANAR_CURVE_SELECT`` )
    public var DIM: tDIMENSION_COUNT?  {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let entity): return entity.DIM
      case ._FACE_SURFACE(let entity): return entity.DIM
      case ._PLANAR_CURVE_SELECT(let select): return select.DIM
      }
    }


    //MARK: - SDAIValue
    public func isValueEqual<T: SDAIValue>(to rhs: T) -> Bool {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.value.isValueEqual(to: rhs)
      case ._FACE_SURFACE(let selection): return selection.value.isValueEqual(to: rhs)
      case ._PLANAR_CURVE_SELECT(let selection): return selection.value.isValueEqual(to: rhs)
      }
    }

    public func isValueEqualOptionally<T: SDAIValue>(to rhs: T?) -> Bool? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.value.isValueEqualOptionally(to: rhs)
      case ._FACE_SURFACE(let selection): return selection.value.isValueEqualOptionally(to: rhs)
      case ._PLANAR_CURVE_SELECT(let selection): return selection.value.isValueEqualOptionally(to: rhs)
      }
    }

    public func hashAsValue(into hasher: inout Hasher, visited complexEntities: inout Set<SDAI.ComplexEntity>) {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): selection.value.hashAsValue(into: &hasher, visited: &complexEntities)
      case ._FACE_SURFACE(let selection): selection.value.hashAsValue(into: &hasher, visited: &complexEntities)
      case ._PLANAR_CURVE_SELECT(let selection): selection.value.hashAsValue(into: &hasher, visited: &complexEntities)
      }
    }

    public func isValueEqual<T: SDAIValue>(to rhs: T, visited comppairs: inout Set<SDAI.ComplexPair>) -> Bool {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.value.isValueEqual(to: rhs, visited: &comppairs)
      case ._FACE_SURFACE(let selection): return selection.value.isValueEqual(to: rhs, visited: &comppairs)
      case ._PLANAR_CURVE_SELECT(let selection): return selection.value.isValueEqual(to: rhs, visited: &comppairs)
      }
    }

    public func isValueEqualOptionally<T: SDAIValue>(to rhs: T?, visited comppairs: inout Set<SDAI.ComplexPair>) -> Bool? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.value.isValueEqualOptionally(to: rhs, visited: &comppairs)
      case ._FACE_SURFACE(let selection): return selection.value.isValueEqualOptionally(to: rhs, visited: &comppairs)
      case ._PLANAR_CURVE_SELECT(let selection): return selection.value.isValueEqualOptionally(to: rhs, visited: &comppairs)
      }
    }


    //MARK: SDAIGenericTypeBase
    public func copy() -> Self {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return ._CURVE_BOUNDED_SURFACE(selection.copy())
      case ._FACE_SURFACE(let selection): return ._FACE_SURFACE(selection.copy())
      case ._PLANAR_CURVE_SELECT(let selection): return ._PLANAR_CURVE_SELECT(selection.copy())
      }
    }

    //MARK: SDAIGenericType
    public var typeMembers: Set<SDAI.STRING> {
      var members: Set<SDAI.STRING> = [SDAI.STRING(Self.typeName)]
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): members.formUnion(selection.typeMembers)
      case ._FACE_SURFACE(let selection): members.formUnion(selection.typeMembers)
      case ._PLANAR_CURVE_SELECT(let selection): members.formUnion(selection.typeMembers)
      }
      return members
    }

    public var entityReference: SDAI.EntityReference? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.entityReference
      case ._FACE_SURFACE(let selection): return selection.entityReference
      case ._PLANAR_CURVE_SELECT(let selection): return selection.entityReference
      }
    }
    public var stringValue: SDAI.STRING? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.stringValue
      case ._FACE_SURFACE(let selection): return selection.stringValue
      case ._PLANAR_CURVE_SELECT(let selection): return selection.stringValue
      }
    }
    public var binaryValue: SDAI.BINARY? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.binaryValue
      case ._FACE_SURFACE(let selection): return selection.binaryValue
      case ._PLANAR_CURVE_SELECT(let selection): return selection.binaryValue
      }
    }
    public var logicalValue: SDAI.LOGICAL? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.logicalValue
      case ._FACE_SURFACE(let selection): return selection.logicalValue
      case ._PLANAR_CURVE_SELECT(let selection): return selection.logicalValue
      }
    }
    public var booleanValue: SDAI.BOOLEAN? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.booleanValue
      case ._FACE_SURFACE(let selection): return selection.booleanValue
      case ._PLANAR_CURVE_SELECT(let selection): return selection.booleanValue
      }
    }
    public var numberValue: SDAI.NUMBER? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.numberValue
      case ._FACE_SURFACE(let selection): return selection.numberValue
      case ._PLANAR_CURVE_SELECT(let selection): return selection.numberValue
      }
    }
    public var realValue: SDAI.REAL? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.realValue
      case ._FACE_SURFACE(let selection): return selection.realValue
      case ._PLANAR_CURVE_SELECT(let selection): return selection.realValue
      }
    }
    public var integerValue: SDAI.INTEGER? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.integerValue
      case ._FACE_SURFACE(let selection): return selection.integerValue
      case ._PLANAR_CURVE_SELECT(let selection): return selection.integerValue
      }
    }
    public var genericEnumValue: SDAI.GenericEnumValue? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.genericEnumValue
      case ._FACE_SURFACE(let selection): return selection.genericEnumValue
      case ._PLANAR_CURVE_SELECT(let selection): return selection.genericEnumValue
      }
    }
    public func arrayOptionalValue<ELEM:SDAIGenericType>(elementType:ELEM.Type) -> SDAI.ARRAY_OPTIONAL<ELEM>? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.arrayOptionalValue(elementType:elementType)
      case ._FACE_SURFACE(let selection): return selection.arrayOptionalValue(elementType:elementType)
      case ._PLANAR_CURVE_SELECT(let selection): return selection.arrayOptionalValue(elementType:elementType)
      }
    }
    public func arrayValue<ELEM:SDAIGenericType>(elementType:ELEM.Type) -> SDAI.ARRAY<ELEM>? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.arrayValue(elementType:elementType)
      case ._FACE_SURFACE(let selection): return selection.arrayValue(elementType:elementType)
      case ._PLANAR_CURVE_SELECT(let selection): return selection.arrayValue(elementType:elementType)
      }
    }
    public func listValue<ELEM:SDAIGenericType>(elementType:ELEM.Type) -> SDAI.LIST<ELEM>? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.listValue(elementType:elementType)
      case ._FACE_SURFACE(let selection): return selection.listValue(elementType:elementType)
      case ._PLANAR_CURVE_SELECT(let selection): return selection.listValue(elementType:elementType)
      }
    }
    public func bagValue<ELEM:SDAIGenericType>(elementType:ELEM.Type) -> SDAI.BAG<ELEM>? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.bagValue(elementType:elementType)
      case ._FACE_SURFACE(let selection): return selection.bagValue(elementType:elementType)
      case ._PLANAR_CURVE_SELECT(let selection): return selection.bagValue(elementType:elementType)
      }
    }
    public func setValue<ELEM:SDAIGenericType>(elementType:ELEM.Type) -> SDAI.SET<ELEM>? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.setValue(elementType:elementType)
      case ._FACE_SURFACE(let selection): return selection.setValue(elementType:elementType)
      case ._PLANAR_CURVE_SELECT(let selection): return selection.setValue(elementType:elementType)
      }
    }
    public func enumValue<ENUM:SDAIEnumerationType>(enumType:ENUM.Type) -> ENUM? {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let selection): return selection.enumValue(enumType:enumType)
      case ._FACE_SURFACE(let selection): return selection.enumValue(enumType:enumType)
      case ._PLANAR_CURVE_SELECT(let selection): return selection.enumValue(enumType:enumType)
      }
    }

    //MARK: SDAIUnderlyingType
    public typealias FundamentalType = Self
    public static var typeName: String = 
      "AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.SKETCH_BASIS_SELECT"
    public var asFundamentalType: FundamentalType { return self }

    //MARK: SDAIObservableAggregateElement
    public var entityReferences: AnySequence<SDAI.EntityReference> {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let entity): return entity.entityReferences
      case ._FACE_SURFACE(let entity): return entity.entityReferences
      case ._PLANAR_CURVE_SELECT(let select): return select.entityReferences
      }
    }

    public mutating func configure(with observer: SDAI.EntityReferenceObserver) {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let entity): 
        entity.configure(with: observer)
        self = ._CURVE_BOUNDED_SURFACE(entity)
      case ._FACE_SURFACE(let entity): 
        entity.configure(with: observer)
        self = ._FACE_SURFACE(entity)
      case ._PLANAR_CURVE_SELECT(var select): 
        select.configure(with: observer)
        self = ._PLANAR_CURVE_SELECT(select)
      }
    }

    public mutating func teardownObserver() {
      switch self {
      case ._CURVE_BOUNDED_SURFACE(let entity): 
        entity.teardownObserver()
        self = ._CURVE_BOUNDED_SURFACE(entity)
      case ._FACE_SURFACE(let entity): 
        entity.teardownObserver()
        self = ._FACE_SURFACE(entity)
      case ._PLANAR_CURVE_SELECT(var select): 
        select.teardownObserver()
        self = ._PLANAR_CURVE_SELECT(select)
      }
    }

    //MARK: SDAIAggregationBehavior
    public var aggregationHiBound: Int? {
      switch self {
      case ._PLANAR_CURVE_SELECT(let selection): return selection.aggregationHiBound
      default: return nil
      }
    }
    public var aggregationHiIndex: Int? {
      switch self {
      case ._PLANAR_CURVE_SELECT(let selection): return selection.aggregationHiIndex
      default: return nil
      }
    }
    public var aggregationLoBound: Int? {
      switch self {
      case ._PLANAR_CURVE_SELECT(let selection): return selection.aggregationLoBound
      default: return nil
      }
    }
    public var aggregationLoIndex: Int? {
      switch self {
      case ._PLANAR_CURVE_SELECT(let selection): return selection.aggregationLoIndex
      default: return nil
      }
    }
    public var aggregationSize: Int? {
      switch self {
      case ._PLANAR_CURVE_SELECT(let selection): return selection.aggregationSize
      default: return nil
      }
    }

    //MARK: WHERE RULE VALIDATION (SELECT TYPE)
    public static func validateWhereRules(instance:Self?, prefix:SDAI.WhereLabel) -> [SDAI.WhereLabel:SDAI.LOGICAL] {
      var result: [SDAI.WhereLabel:SDAI.LOGICAL] = [:]
      switch instance {
      case ._CURVE_BOUNDED_SURFACE(let selectValue): 
        result = eCURVE_BOUNDED_SURFACE.validateWhereRules(instance:selectValue, 
        prefix:prefix + "\\CURVE_BOUNDED_SURFACE")
      case ._FACE_SURFACE(let selectValue): result = eFACE_SURFACE.validateWhereRules(instance:selectValue, 
        prefix:prefix + "\\FACE_SURFACE")
      case ._PLANAR_CURVE_SELECT(let selectValue): 
        result = sPLANAR_CURVE_SELECT.validateWhereRules(instance:selectValue, 
        prefix:prefix + "\\PLANAR_CURVE_SELECT")
      case nil: break
      }

      return result
    }

  }

}


//MARK: - SELECT TYPE HIERARCHY
public protocol AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF__sSKETCH_BASIS_SELECT__type: SDAISelectType {

  //MARK: GROUP REFERENCES
  var super_sPLANAR_CURVE_SELECT: 
    AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.sPLANAR_CURVE_SELECT? { get }
  var super_eFACE_SURFACE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eFACE_SURFACE? { get }
  var super_eTOPOLOGICAL_REPRESENTATION_ITEM: 
    AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eTOPOLOGICAL_REPRESENTATION_ITEM? { get }
  var super_eBOUNDED_SURFACE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eBOUNDED_SURFACE? { get }
  var super_eTRIMMED_CURVE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eTRIMMED_CURVE? { get }
  var super_eCONIC: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eCONIC? { get }
  var super_eSURFACE_CURVE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eSURFACE_CURVE? { get }
  var super_eFACE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eFACE? { get }
  var super_eREPRESENTATION_ITEM: 
    AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eREPRESENTATION_ITEM? { get }
  var super_eLINE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eLINE? { get }
  var super_ePCURVE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ePCURVE? { get }
  var super_eCURVE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eCURVE? { get }
  var super_eCURVE_BOUNDED_SURFACE: 
    AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eCURVE_BOUNDED_SURFACE? { get }
  var super_eSURFACE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eSURFACE? { get }
  var super_eBOUNDED_CURVE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eBOUNDED_CURVE? { get }
  var super_eGEOMETRIC_REPRESENTATION_ITEM: 
    AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eGEOMETRIC_REPRESENTATION_ITEM? { get }

  //MARK: ENTITY ATTRIBUTE REFERENCES
  var REFERENCE_TO_CURVE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eDEFINITIONAL_REPRESENTATION?  { get }
  var BOUNDS: (SDAI.SET<AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eFACE_BOUND>/*[1:nil]*/ )?  { get }
  var BASIS_CURVE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eCURVE?  { get }
  var TRIM_1: (SDAI.SET<AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.sTRIMMING_SELECT>/*[1:2]*/ )?  { get }
  var TRIM_2: (SDAI.SET<AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.sTRIMMING_SELECT>/*[1:2]*/ )?  { get }
  var BOUNDARIES: (SDAI.SET<AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eBOUNDARY_CURVE>/*[1:nil]*/ )?  { get }
  var PNT: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eCARTESIAN_POINT?  { get }
  var SENSE_AGREEMENT: SDAI.BOOLEAN?  { get }
  var PERMANENT_AGGREGATE_ID: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tIDENTIFIER?  { get }
  var RADIUS: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tPOSITIVE_LENGTH_MEASURE?  { get }
  var SEMI_IMAG_AXIS: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tPOSITIVE_LENGTH_MEASURE?  { get }
  var POSITION: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.sAXIS2_PLACEMENT?  { get }
  var ASSOCIATED_GEOMETRY: (SDAI.LIST<AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.sPCURVE_OR_SURFACE>/*[1:
    2]*/ )?  { get }
  var CURVE_3D: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eCURVE?  { get }
  var FACE_GEOMETRY: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eSURFACE?  { get }
  var SEMI_AXIS_1: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tPOSITIVE_LENGTH_MEASURE?  { get }
  var BASIS_SURFACE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eSURFACE?  { get }
  var SEMI_AXIS_2: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tPOSITIVE_LENGTH_MEASURE?  { get }
  var SEMI_AXIS: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tPOSITIVE_LENGTH_MEASURE?  { get }
  var SAME_SENSE: SDAI.BOOLEAN?  { get }
  var IMPLICIT_OUTER: SDAI.BOOLEAN?  { get }
  var PERMANENT_ID: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tIDENTIFIER?  { get }
  var DIR: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eVECTOR?  { get }
  var FOCAL_DIST: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tLENGTH_MEASURE?  { get }
  var NAME: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tLABEL?  { get }
  var DIM: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tDIMENSION_COUNT?  { get }
}

public protocol AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF__sSKETCH_BASIS_SELECT__subtype: 
  AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF__sSKETCH_BASIS_SELECT__type, SDAIDefinedType
where Supertype: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF__sSKETCH_BASIS_SELECT__type
{}

public extension AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF__sSKETCH_BASIS_SELECT__subtype {
  //MARK: CONSTRUCTORS
  init?(possiblyFrom complex: SDAI.ComplexEntity?) {
    self.init(fundamental: FundamentalType(possiblyFrom: complex))
  }

  init?<T: SDAIUnderlyingType>(possiblyFrom underlyingType: T?) {
    self.init(fundamental: FundamentalType(possiblyFrom: underlyingType))
  }

  init?<G: SDAIGenericType>(fromGeneric generic: G?) {
    self.init(fundamental: FundamentalType.convert(fromGeneric: generic))
  }

  //MARK: GROUP REFERENCES
  var super_sPLANAR_CURVE_SELECT: 
    AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.sPLANAR_CURVE_SELECT? { rep.super_sPLANAR_CURVE_SELECT }
  var super_eFACE_SURFACE: 
    AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eFACE_SURFACE? { rep.super_eFACE_SURFACE }
  var super_eTOPOLOGICAL_REPRESENTATION_ITEM: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eTOPOLOGICAL_REPRESENTATION_ITEM? { rep.super_eTOPOLOGICAL_REPRESENTATION_ITEM }
  var super_eBOUNDED_SURFACE: 
    AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eBOUNDED_SURFACE? { rep.super_eBOUNDED_SURFACE }
  var super_eTRIMMED_CURVE: 
    AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eTRIMMED_CURVE? { rep.super_eTRIMMED_CURVE }
  var super_eCONIC: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eCONIC? { rep.super_eCONIC }
  var super_eSURFACE_CURVE: 
    AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eSURFACE_CURVE? { rep.super_eSURFACE_CURVE }
  var super_eFACE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eFACE? { rep.super_eFACE }
  var super_eREPRESENTATION_ITEM: 
    AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eREPRESENTATION_ITEM? { rep.super_eREPRESENTATION_ITEM }
  var super_eLINE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eLINE? { rep.super_eLINE }
  var super_ePCURVE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.ePCURVE? { rep.super_ePCURVE }
  var super_eCURVE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eCURVE? { rep.super_eCURVE }
  var super_eCURVE_BOUNDED_SURFACE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eCURVE_BOUNDED_SURFACE? { rep.super_eCURVE_BOUNDED_SURFACE }
  var super_eSURFACE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eSURFACE? { rep.super_eSURFACE }
  var super_eBOUNDED_CURVE: 
    AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eBOUNDED_CURVE? { rep.super_eBOUNDED_CURVE }
  var super_eGEOMETRIC_REPRESENTATION_ITEM: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eGEOMETRIC_REPRESENTATION_ITEM? { rep.super_eGEOMETRIC_REPRESENTATION_ITEM }

  //MARK: ENTITY ATTRIBUTE REFERENCES
  var REFERENCE_TO_CURVE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eDEFINITIONAL_REPRESENTATION?  { rep.REFERENCE_TO_CURVE }
  var BOUNDS: (SDAI.SET<AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eFACE_BOUND>/*[1:nil]*/ )?  { rep.BOUNDS }
  var BASIS_CURVE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eCURVE?  { rep.BASIS_CURVE }
  var TRIM_1: (SDAI.SET<AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.sTRIMMING_SELECT>/*[1:2]*/ )?  { rep.TRIM_1 }
  var TRIM_2: (SDAI.SET<AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.sTRIMMING_SELECT>/*[1:2]*/ )?  { rep.TRIM_2 }
  var BOUNDARIES: (SDAI.SET<AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eBOUNDARY_CURVE>/*[1:nil]*/ )?  { rep.BOUNDARIES }
  var PNT: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eCARTESIAN_POINT?  { rep.PNT }
  var SENSE_AGREEMENT: SDAI.BOOLEAN?  { rep.SENSE_AGREEMENT }
  var PERMANENT_AGGREGATE_ID: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tIDENTIFIER?  { rep.PERMANENT_AGGREGATE_ID }
  var RADIUS: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tPOSITIVE_LENGTH_MEASURE?  { rep.RADIUS }
  var SEMI_IMAG_AXIS: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tPOSITIVE_LENGTH_MEASURE?  { rep.SEMI_IMAG_AXIS }
  var POSITION: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.sAXIS2_PLACEMENT?  { rep.POSITION }
  var ASSOCIATED_GEOMETRY: (SDAI.LIST<AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.sPCURVE_OR_SURFACE>/*[1:
    2]*/ )?  { rep.ASSOCIATED_GEOMETRY }
  var CURVE_3D: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eCURVE?  { rep.CURVE_3D }
  var FACE_GEOMETRY: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eSURFACE?  { rep.FACE_GEOMETRY }
  var SEMI_AXIS_1: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tPOSITIVE_LENGTH_MEASURE?  { rep.SEMI_AXIS_1 }
  var BASIS_SURFACE: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eSURFACE?  { rep.BASIS_SURFACE }
  var SEMI_AXIS_2: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tPOSITIVE_LENGTH_MEASURE?  { rep.SEMI_AXIS_2 }
  var SEMI_AXIS: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tPOSITIVE_LENGTH_MEASURE?  { rep.SEMI_AXIS }
  var SAME_SENSE: SDAI.BOOLEAN?  { rep.SAME_SENSE }
  var IMPLICIT_OUTER: SDAI.BOOLEAN?  { rep.IMPLICIT_OUTER }
  var PERMANENT_ID: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tIDENTIFIER?  { rep.PERMANENT_ID }
  var DIR: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.eVECTOR?  { rep.DIR }
  var FOCAL_DIST: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tLENGTH_MEASURE?  { rep.FOCAL_DIST }
  var NAME: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tLABEL?  { rep.NAME }
  var DIM: AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF.tDIMENSION_COUNT?  { rep.DIM }
}

