import type { Color4 } from "../../Maths/math.color"; import { Path2 } from "../../Maths/math.path"; import type { Vector4 } from "../../Maths/math.vector"; import type { Scene } from "../../scene"; import type { Nullable } from "../../types"; import { Mesh } from "../mesh"; /** * Parser inspired by https://github.com/mrdoob/three.js/blob/master/examples/jsm/loaders/FontLoader.js */ /** * Represents glyph data generated by http://gero3.github.io/facetype.js/ */ export interface IGlyphData { /** Commands used to draw (line, move, curve, etc..) */ o: string; /** Width */ ha: number; } /** * Represents font data generated by http://gero3.github.io/facetype.js/ */ export interface IFontData { /** * Font resolution */ resolution: number; /** Underline tickness */ underlineThickness: number; /** Bounding box */ boundingBox: { yMax: number; yMin: number; }; /** List of supported glyphs */ glyphs: { [key: string]: IGlyphData; }; } declare class ShapePath { private _paths; private _tempPaths; private _holes; private _currentPath; private _resolution; /** Create the ShapePath used to support glyphs * @param resolution defines the resolution used to determine the number of points per curve (default is 4) */ constructor(resolution: number); /** Move the virtual cursor to a coordinate * @param x defines the x coordinate * @param y defines the y coordinate */ moveTo(x: number, y: number): void; /** Draw a line from the virtual cursor to a given coordinate * @param x defines the x coordinate * @param y defines the y coordinate */ lineTo(x: number, y: number): void; /** Create a quadratic curve from the virtual cursor to a given coordinate * @param cpx defines the x coordinate of the control point * @param cpy defines the y coordinate of the control point * @param x defines the x coordinate of the end point * @param y defines the y coordinate of the end point */ quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void; /** * Create a bezier curve from the virtual cursor to a given coordinate * @param cpx1 defines the x coordinate of the first control point * @param cpy1 defines the y coordinate of the first control point * @param cpx2 defines the x coordinate of the second control point * @param cpy2 defines the y coordinate of the second control point * @param x defines the x coordinate of the end point * @param y defines the y coordinate of the end point */ bezierCurveTo(cpx1: number, cpy1: number, cpx2: number, cpy2: number, x: number, y: number): void; /** Extract holes based on CW / CCW */ extractHoles(): void; /** Gets the list of paths */ get paths(): Path2[]; /** Gets the list of holes */ get holes(): Path2[]; } /** * Creates shape paths from a text and font * @param text the text * @param size size of the font * @param resolution resolution of the font * @param fontData defines the font data (can be generated with http://gero3.github.io/facetype.js/) * @returns array of ShapePath objects */ export declare function CreateTextShapePaths(text: string, size: number, resolution: number, fontData: IFontData): ShapePath[]; /** * Create a text mesh * @param name defines the name of the mesh * @param text defines the text to use to build the mesh * @param fontData defines the font data (can be generated with http://gero3.github.io/facetype.js/) * @param options defines options used to create the mesh * @param scene defines the hosting scene * @param earcutInjection can be used to inject your own earcut reference * @returns a new Mesh * @see https://doc.babylonjs.com/features/featuresDeepDive/mesh/creation/set/text */ export declare function CreateText(name: string, text: string, fontData: IFontData, options?: { size?: number; resolution?: number; depth?: number; sideOrientation?: number; faceUV?: Vector4[]; faceColors?: Color4[]; perLetterFaceUV?: (letterIndex: number) => Vector4[]; perLetterFaceColors?: (letterIndex: number) => Color4[]; }, scene?: Nullable, earcutInjection?: any): Nullable; export {};