/*
 * @Description:
 * @Date: 2022-11-30 14:33:51
 * @Author: GISerZ
 * @LastEditor: GISerZ
 * @LastEditTime: 2023-08-15 11:41:19
 */
declare namespace Cesium {
  interface Cesium3DTileset {
    overlayId: any;
    layerId: any;
  }
  interface Entity {
    rectangularSensor: any
  }

  interface Viewer {
    getLayers: () => any;
    viewerEvent: any;
  }
  interface PositionProperty {
    setValue(position: Cartesian3, referenceFrame?: ReferenceFrame): void;
  }

  export class Matrix3 {
    static multiplyByPoint: any;
    static inverseTransformation: any;
    static fromRotationTranslation: any;
  }

  export class EllipseGeometryLibrary {
    static computeEllipsePositions(
      arg0: {
        center: Cartesian3;
        semiMajorAxis: any;
        semiMinorAxis: any;
        rotation: number;
        granularity: number;
      },
      arg1: boolean,
      arg2: boolean
    ): any;
  }
  interface Model {
    // 增加压平扩展方法
    isFlattenEnabled(): boolean;
    _elevationMatrix():any;
  }
  export class Model3DTileContent {
    oldUpdate(tileset: any, frameState: any): void;
    update(tileset: any, frameState: any): void;
  }
  export class ModelSceneGraph {
    oldConfigurePipeline(frameState: any): void;
    configurePipeline(frameState: any): void;
  }
  export enum ContextLimits {
    maximumTextureSize,
  }
  export class Texture {
    constructor(options: any);
  }
  export class Sampler {
    static NEAREST: Readonly<Sampler>;
  }
  export namespace Math {
    function area(position: any): number;
    function bounds(positions: any): any;
    function center(positions: any): any;
    function distance(positions: any): any;
    function heading(start: any, end: any): number;
    function isBetween(value: any, min: any, max: any): boolean;
    function midCartesian(start: any, end: any): Cartesian3;
    function mid(start: any, end: any): any;
    function midPosition(start: any, end: any): any;
    function parabola(
      startPosition: any,
      endPosition: any,
      height?: number,
      count?: number
    ): any[];
    function curve(points: any, options: any): any[];
  }
  export namespace Material {
    let CircleBlurType: string;
    let CircleDiffuseType: string;
    let CircleFadeType: string;
    let CircleScanType: string;
    let CirclePulseType: string;
    let CircleSpiralType: string;
    let CircleVaryType: string;
    let CircleWaveType: string;
    let CircleRingType: string;
    let CylinderFadeType: string;
    let CylinderParticlesType: string;
    let CircleRotateType: string;
    let CircleRotateType: string;
    let CircleRotateType: string;
    let CircleRotateType: string;
    let EllipsoidElectricType: string;
    let EllipsoidTrailType: string;
    let PolylineEmissionType: string;
    let PolylineFlickerType: string;
    let PolylineFlowType: string;
    let PolylineImageTrailType: string;
    let PolylineLightingType: string;
    let PolylineLightingTrailType: string;
    let PolylineTrailType: string;
    let RadarLineType: string;
    let RadarSweepType: string;
    let RadarWaveType: string;
    let WallImageTrailType: string;
    let WallLineTrailType: string;
    let AsphaltType: string;
    let BlobType: string;
    let BrickType: string;
    let CementType: string;
    let ErosionType: string;
    let FacetType: string;
    let FresnelType: string;
    let ReflectionType: string;
    let RefractionType: string;
    let GrassType: string;
    let TyeDyeType: string;
    let WoodType: string;
    let WallDiffuseType: string;
    let WallTrailType: string;
    const _materialCache = {
      addMaterial(type:string, options:any)
    }
  }
  export namespace Property {
    const getValueOrDefault = (property, time, valueDefault?, result?) => any;
    const getValueOrUndefined = (property, time, result?) => any;
    const equals = (_speed: any, _speed: any) => boolean;
  }
  export const createPropertyDescriptor = (property: string) => PropertyDescriptor
  export const createMaterialPropertyDescriptor = (property: string) => PropertyDescriptor
  export const ShaderSource = {
    _czmBuiltinsAndUniforms = {
      czm_cellular,
      czm_snoise
    }
  }
  export class Framebuffer {
    constructor(options: any)
  }
  export class PassState {
    constructor(context:any)
  }
  export namespace VertexArray {
    const fromGeometry = (options:any)=> VertexArray
  }
  export namespace ShaderProgram {
    const fromCache = (options:any)=> ShaderProgram
  }
  export class RenderState{
    depthTest:any;
    cull:any
  }
  export class DrawCommand {
    constructor(options:any)
  }
  export class ClearCommand {
    constructor(options:any)
    execute(context, passState)
  }
  export const Pass = {
    ENVIRONMENT: 0,
    COMPUTE: 1,
    GLOBE: 2,
    TERRAIN_CLASSIFICATION: 3,
    CESIUM_3D_TILE: 4,
    CESIUM_3D_TILE_CLASSIFICATION: 5,
    CESIUM_3D_TILE_CLASSIFICATION_IGNORE_SHOW: 6,
    OPAQUE: 7,
    TRANSLUCENT: 8,
    OVERLAY: 9,
    NUMBER_OF_PASSES: 10,
  }

  export class Scene {
    updateAndExecuteCommands(
      passState,
      backgroundColor
    )
  }
}
