function EllipsoidOutlineGeometry(options) {
  options = options ?? Frozen.EMPTY_OBJECT;

  const radii = options.radii ?? defaultRadii;
  const innerRadii = options.innerRadii ?? radii;
  const minimumClock = options.minimumClock ?? 0.0;
  const maximumClock = options.maximumClock ?? CesiumMath.TWO_PI;
  const minimumCone = options.minimumCone ?? 0.0;
  const maximumCone = options.maximumCone ?? CesiumMath.PI;
  const stackPartitions = Math.round(options.stackPartitions ?? 10);
  const slicePartitions = Math.round(options.slicePartitions ?? 8);
  const subdivisions = Math.round(options.subdivisions ?? 128);

  //>>includeStart('debug', pragmas.debug);
  if (stackPartitions < 1) {
    throw new DeveloperError("options.stackPartitions cannot be less than 1");
  }
  if (slicePartitions < 0) {
    throw new DeveloperError("options.slicePartitions cannot be less than 0");
  }
  if (subdivisions < 0) {
    throw new DeveloperError(
      "options.subdivisions must be greater than or equal to zero.",
    );
  }
  if (
    defined(options.offsetAttribute) &&
    options.offsetAttribute === GeometryOffsetAttribute.TOP
  ) {
    throw new DeveloperError(
      "GeometryOffsetAttribute.TOP is not a supported options.offsetAttribute for this geometry.",
    );
  }
  //>>includeEnd('debug');

  this._radii = Cartesian3.clone(radii);
  this._innerRadii = Cartesian3.clone(innerRadii);
  this._minimumClock = minimumClock;
  this._maximumClock = maximumClock;
  this._minimumCone = minimumCone;
  this._maximumCone = maximumCone;
  this._stackPartitions = stackPartitions;
  this._slicePartitions = slicePartitions;
  this._subdivisions = subdivisions;
  this._offsetAttribute = options.offsetAttribute;
  this._workerName = "createEllipsoidOutlineGeometry";
}
A description of the outline of an ellipsoid centered at the origin.

@alias EllipsoidOutlineGeometry
@constructor

@param {object} [options] Object with the following properties:
@param {Cartesian3} [options.radii=Cartesian3(1.0, 1.0, 1.0)] The radii of the ellipsoid in the x, y, and z directions.
@param {Cartesian3} [options.innerRadii=options.radii] The inner radii of the ellipsoid in the x, y, and z directions.
@param {number} [options.minimumClock=0.0] The minimum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.
@param {number} [options.maximumClock=2*PI] The maximum angle lying in the xy-plane measured from the positive x-axis and toward the positive y-axis.
@param {number} [options.minimumCone=0.0] The minimum angle measured from the positive z-axis and toward the negative z-axis.
@param {number} [options.maximumCone=PI] The maximum angle measured from the positive z-axis and toward the negative z-axis.
@param {number} [options.stackPartitions=10] The count of stacks for the ellipsoid (1 greater than the number of parallel lines).
@param {number} [options.slicePartitions=8] The count of slices for the ellipsoid (Equal to the number of radial lines).
@param {number} [options.subdivisions=128] The number of points per line, determining the granularity of the curvature.

@exception {DeveloperError} options.stackPartitions must be greater than or equal to one.
@exception {DeveloperError} options.slicePartitions must be greater than or equal to zero.
@exception {DeveloperError} options.subdivisions must be greater than or equal to zero.

@example
const ellipsoid = new Cesium.EllipsoidOutlineGeometry({
  radii : new Cesium.Cartesian3(1000000.0, 500000.0, 500000.0),
  stackPartitions: 6,
  slicePartitions: 5
});
const geometry = Cesium.EllipsoidOutlineGeometry.createGeometry(ellipsoid);