import { EntityEidType, BasicInfoAtomType, TransformAtomType, VisibleAtomType, ICoordinates2D, EntityFlagAtomType, EntityOutlinerAtomType } from '../data-type';
/**
 * @interface RelativePolygon2DAtomType
 * @param {ICoordinates2D} coordinates
 */
export interface RelativePolygon2DAtomType {
    coordinates: ICoordinates2D;
}
/**
 * @interface IcullRegions
 * @param {string} name
 * @param {boolean} bEnable
 * @param {Array<Array<number>>} loopPoints
 */
export interface IcullRegions {
    name: string;
    bEnable: boolean;
    loopPoints: Array<Array<number>>;
}
/**
 * @interface VegetationAtomType
 * @param {number} randomSeed
 * @param {string} snapMode
 * @param {number} zOffset
 * @param {string} samplerType
 * @param {number} lineSpace
 * @param {number} randomness
 * @param {string} gridType
 * @param {number} rowNum
 * @param {number} columnNum
 * @param {number} rowSpace
 * @param {number} columnSpace
 * @param {number} density
 * @param {number} clusterRatio
 * @param {Array<number>} pointZs
 * @param {Array<IcullRegions>} cullRegions
 */
export interface VegetationAtomType {
    randomSeed: number;
    snapMode: string;
    zOffset: number;
    samplerType: string;
    lineSpace: number;
    randomness: number;
    gridType: string;
    rowNum: number;
    columnNum: number;
    rowSpace: number;
    columnSpace: number;
    density: number;
    clusterRatio: number;
    pointZs: Array<number>;
    cullRegions: Array<IcullRegions>;
}
/**
 * @interface IVegetationAssets
 * @param {string} SeedId
 * @param {number} Ratio
 * @param {number} OverlapRatio
 * @param {Array<number>} RandomScaleRange
 * @param {Array<number>} RandomRotateRange
 * @param {boolean} bUseIndividualZOffset
 * @param {number} IndividualZOffset
 */
export interface IVegetationAssets {
    SeedId: string;
    Ratio: number;
    OverlapRatio: number;
    RandomScaleRange: Array<number>;
    RandomRotateRange: Array<number>;
    bUseIndividualZOffset: boolean;
    IndividualZOffset: number;
}
/**
 * @interface VegetationAssetsAtomType
 * @param {Array<IVegetationAssets>} assets
 */
export interface VegetationAssetsAtomType {
    assets: Array<IVegetationAssets>;
}
/**
 * @interface VegetationType
 * @extends EntityEidType,Partial<BasicInfoAtomType>,Partial<TransformAtomType>,Partial<VisibleAtomType>,Partial<RelativePolygon2DAtomType>,Partial<VegetationAssetsAtomType>,Partial<EntityFlagAtomType>
 * @param {Partial<VegetationAtomType>} vegetationStyle (optional)
 */
export interface VegetationType extends EntityEidType, Partial<BasicInfoAtomType>, Partial<TransformAtomType>, Partial<VisibleAtomType>, Partial<RelativePolygon2DAtomType>, Partial<VegetationAssetsAtomType>, Partial<EntityFlagAtomType>, Partial<EntityOutlinerAtomType> {
    vegetationStyle?: Partial<VegetationAtomType>;
}
/**
 * @interface IGenerate
 * @param {Partial<VegetationAtomType>} VegetationAtom (optional)
 * @param {Partial<RelativePolygon2DAtomType>} RelativePolygon2DAtom (optional)
 * @param {Partial<VegetationAssetsAtomType>} VegetationAssetsAtom (optional)
 * @param {Partial<BasicInfoAtomType>} BasicInfoAtom (optional)
 * @param {Partial<TransformAtomType>} TransformAtom (optional)
 * @param {Partial<VisibleAtomType>} VisibleAtom (optional)
 * @param {Partial<EntityFlagAtomType>} EntityFlagAtom (optional)
 */
export interface IGenerate {
    VegetationAtom?: Partial<VegetationAtomType>;
    RelativePolygon2DAtom?: Partial<RelativePolygon2DAtomType>;
    VegetationAssetsAtom?: Partial<VegetationAssetsAtomType>;
    BasicInfoAtom?: Partial<BasicInfoAtomType>;
    TransformAtom?: Partial<TransformAtomType>;
    VisibleAtom?: Partial<VisibleAtomType>;
    EntityFlagAtom?: Partial<EntityFlagAtomType>;
    EntityOutlinerAtom?: Partial<EntityOutlinerAtomType>;
}
