import { EntityEidType, BasicInfoAtomType, TransformAtomType, VisibleAtomType, ICoordinates2D, EntityFlagAtomType, IRotation, ITranslation, IScale3D, deepPartial, EntityOutlinerAtomType } from '../data-type';
/**
 * @interface IOuterUVTransform
 * @param {IRotation} rotation
 * @param {ITranslation} translation
 * @param {IScale3D} scale3d
 */
export interface IOuterUVTransform {
    rotation: IRotation;
    translation: ITranslation;
    scale3d: IScale3D;
}
/**
 * @interface IInnerUVTransform
 * @param {IRotation} rotation
 * @param {ITranslation} translation
 * @param {IScale3D} scale3d
 */
export interface IInnerUVTransform {
    rotation: IRotation;
    translation: ITranslation;
    scale3d: IScale3D;
}
/**
 * @interface IAttributes
 * @param {number} cornerRadius
 * @param {number} cornerSplitNum
 */
export interface IAttributes {
    cornerRadius: number;
    cornerSplitNum: number;
}
/**
 * @interface ModelerFloorPolygonAtomType
 * @param {Array<IAttributes>} attributes
 * @param {ICoordinates2D} coordinates
 */
export interface ModelerFloorPolygonAtomType {
    attributes: Array<IAttributes>;
    coordinates: ICoordinates2D;
}
/**
 * @interface ModelerFloorAtomType
 * @param {string} innerMatName
 * @param {string} outerMatName
 * @param {number} innerHeight
 * @param {number} outerHeight
 * @param {number} outerWidth
 * @param {number} cornerRadius
 * @param {number} cornerSplitNum
 * @param {IOuterUVTransform} outerUVTransform
 * @param {IInnerUVTransform} innerUVTransform
 * @param {boolean} bUseVertexCorner
 * @param {boolean} bAlignZ
 * @param {boolean} bInverseNormal
 * @param {number} innerRoughness
 * @param {number} outerRoughness
 * @param {number} innerNormal
 * @param {number} outerNormal
 * @param {number} innerBrightness
 * @param {number} outerBrightness
 */
export interface ModelerFloorAtomType {
    innerMatName: string;
    outerMatName: string;
    innerHeight: number;
    outerHeight: number;
    outerWidth: number;
    cornerRadius: number;
    cornerSplitNum: number;
    outerUVTransform: IOuterUVTransform;
    innerUVTransform: IInnerUVTransform;
    bUseVertexCorner: boolean;
    bAlignZ: boolean;
    bInverseNormal: boolean;
    innerRoughness: number;
    outerRoughness: number;
    innerNormal: number;
    outerNormal: number;
    innerBrightness: number;
    outerBrightness: number;
}
/**
 * @interface ModelerFloorType
 * @extends EntityEidType,Partial<BasicInfoAtomType>,Partial<TransformAtomType>,Partial<VisibleAtomType>,Partial<ModelerFloorPolygonAtomType>,Partial<EntityFlagAtomType>
 * @param {deepPartial<ModelerFloorAtomType>} modelerFloorStyle (optional)
 */
export interface ModelerFloorType extends EntityEidType, Partial<BasicInfoAtomType>, Partial<TransformAtomType>, Partial<VisibleAtomType>, Partial<ModelerFloorPolygonAtomType>, Partial<EntityFlagAtomType>, Partial<EntityOutlinerAtomType> {
    modelerFloorStyle?: deepPartial<ModelerFloorAtomType>;
}
/**
 * @interface IGenerate
 * @param {Partial<ModelerFloorAtomType>} ModelerFloorAtom (optional)
 * @param {Partial<ModelerFloorPolygonAtomType>} ModelerFloorPolygonAtom (optional)
 * @param {Partial<BasicInfoAtomType>} BasicInfoAtom (optional)
 * @param {Partial<TransformAtomType>} TransformAtom (optional)
 * @param {Partial<VisibleAtomType>} VisibleAtom (optional)
 * @param {Partial<EntityFlagAtomType>} EntityFlagAtom (optional)
 */
export interface IGenerate {
    ModelerFloorAtom?: deepPartial<ModelerFloorAtomType>;
    ModelerFloorPolygonAtom?: Partial<ModelerFloorPolygonAtomType>;
    BasicInfoAtom?: Partial<BasicInfoAtomType>;
    TransformAtom?: Partial<TransformAtomType>;
    VisibleAtom?: Partial<VisibleAtomType>;
    EntityFlagAtom?: Partial<EntityFlagAtomType>;
    EntityOutlinerAtom?: Partial<EntityOutlinerAtomType>;
}
