import Entity from "./Entity"; import Primitive from "./Primitive"; import Scene from "./Scene"; import { Vector3, Vector4, Matrix } from "./GeoMath"; import GeoPoint from "./GeoPoint"; import RenderStage from "./RenderStage"; import AltitudeMode from "./AltitudeMode"; import EntityRegion from "./EntityRegion"; import BindingBlock from "./animation/BindingBlock"; import AbstractPointEntity from "./AbstractPointEntity"; /** * テキストエンティティ */ declare class TextEntity extends AbstractPointEntity { private _text_parent_props; private _primitive_producer?; /** * @param scene 所属可能シーン * @param opts オプション集合 */ constructor(scene: Scene, opts?: TextEntity.Option); getPrimitiveProducer(): TextEntity.PrimitiveProducer | undefined; onChangeAltitudeMode(prev_mode: AltitudeMode): void; /** * EasyBindingBlock.DescendantUnbinder 処理 */ private _unbindDescendantAnimations; /** * アニメーションの BindingBlock を初期化 */ private _setupAnimationBindingBlock; /** * フォントスタイルを設定 * @param style フォントスタイル */ setFontStyle(style: TextEntity.FontStyle): void; /** * @summary フォントの太さを設定 * @param weight フォントの太さ */ setFontWeight(weight: TextEntity.FontWeight): void; /** * フォントの大きさを設定 * @param size フォントの大きさ (Pixels) */ setFontSize(size: number): void; /** * フォントファミリーを設定 * @param family フォントファミリー * @see https://developer.mozilla.org/ja/docs/Web/CSS/font-family */ setFontFamily(family: string): void; /** * テキストの色を設定 * @param color テキストの色 */ setColor(color: Vector3 | Vector4): void; /** * テキスト縁の色を設定 * @param color 縁の色 */ setStrokeColor(color: Vector3 | Vector4): void; /** * テキスト縁の太さを設定 * @param width 縁の線幅 */ setStrokeLineWidth(width: number): void; /** * テキスト縁を有効にするかどうか * @param enable trueなら有効 */ setEnableStroke(enable: boolean): void; /** * テキスト背景の色を設定 * @param color テキストの色 */ setBackgroundColor(color: Vector3 | Vector4): void; /** * テキスト背景を有効にするかどうか * @param enable trueなら有効 */ setEnableBackground(enable: boolean): void; /** * テキストを追加 * @param text テキスト * @param position 位置 * @param props プロパティ * @return 追加したEntry */ addText(text: string, position: GeoPoint, props: TextEntity.EntryOption): TextEntity.TextEntry; /** * 専用マテリアルを取得 */ private _getTextMaterial; /** * テキストだけを描画する専用マテリアルを取得 */ private _getSimpleTextMaterial; private _setValueProperty; private _setColorProperty; private _setupByJson; private _enableStroke; /** * IDでEntryを取得 * @param id ID * @return IDが一致するEntry(無ければundefined) */ getEntry(id: string): TextEntity.TextEntry | undefined; } declare namespace TextEntity { interface Option extends Entity.Option { /** * 生成情報 */ json?: TextEntity.Json; } interface Json extends Entity.Json { entries: EntryJson[]; font_style?: FontStyle; font_weight?: FontWeight; font_size?: number; font_family?: string; stroke_color?: Vector3 | Vector4; stroke_width?: number; color?: Vector3 | Vector4; bg_color?: Vector3 | Vector4; enable_bg?: boolean; enable_stroke?: boolean; } interface EntryJson { position: [x: number, y: number, z: number]; text: string; } interface ParentProps { font_style: FontStyle; font_weight: FontWeight; font_size: number; font_family: string; color: Vector4; stroke_color: Vector4; stroke_width: number; bg_color: Vector4; enable_stroke: boolean; enable_bg: boolean; [name: string]: any; } type FontStyle = "normal" | "italic" | "oblique"; type FontWeight = "normal" | "bold"; const DEFAULT_FONT_SIZE = 16; const DEFAULT_FONT_FAMILY = "sans-serif"; const DEFAULT_COLOR: Vector4; const DEFAULT_STROKE_COLOR: Vector4; const DEFAULT_STROKE_WIDTH = 0.48; const DEFAULT_BG_COLOR: Vector4; const DEFAULT_TEXT_UPPER = 1.1; const DEFAULT_TEXT_LOWER = 0.38; const SAFETY_PIXEL_MARGIN = 1; const MAX_IMAGE_WIDTH = 4096; /** * @summary TextEntity の PrimitiveProducer * * TODO: relative で標高の変化のたびにテクスチャを生成する必要はないので * Layout でのテクスチャの生成とメッシュの生成を分離する * * @private */ class PrimitiveProducer extends Entity.PrimitiveProducer { private _glenv; private _dirty; private _transform; private _properties; private _primitive; private _pickPrimitive; private _primitives; private _pickPrimitives; /** * @param {mapray.TextEntity} entity */ constructor(entity: TextEntity); getEntity(): TextEntity; createRegions(): EntityRegion[]; onChangeElevation(regions: EntityRegion[]): void; getPrimitives(stage: RenderStage): Primitive[]; /** * 親プロパティが変更されたことを通知 */ onChangeParentProperty(): void; /** * 子プロパティが変更されたことを通知 */ onChangeChildProperty(): void; /** * 高度モードが変更されたことを通知 */ onChangeAltitudeMode(): void; /** * テキストが追加されたことを通知 */ onAddTextEntry(): void; get transform(): Matrix; /** * プリミティブの更新 * * @desc * 入力: * this.entity._entries * this._dirty * 出力: * this._transform * this._properties.image * this._primitive.mesh * this._primitives * this._dirty * * @return this._primitives */ private _updatePrimitive; /** * @summary プロパティを更新 * * @desc *
         * 入力:
         *   this.entity
         * 出力:
         *   this._properties
         * 
* * @private */ _updateProperties(): void; /** * プリミティブの更新 * * 条件: * this.entity._entries.length > 0 * 入力: * this.entity._entries.length * 出力: * this._transform * * @param gocs_array GOCS 平坦化配列 */ private _updateTransform; /** * GOCS 平坦化配列を取得 * * 入力: this.entity._entries * * @return GOCS 平坦化配列 */ private _createFlatGocsArray; /** * @summary GeoPoint 平坦化配列を取得 (絶対高度) * * 入力: this.entity._entries * * @return {number[]} GeoPoint 平坦化配列 * @private */ _getFlatGeoPoints_with_Absolute(): Float64Array; /** * @summary シンプルテキストモードかどうかを確認 * * @return {boolean} シンプルテキストモードならtrue. * @private */ _isSimpleText(): boolean; } /** * テキスト要素 */ class TextEntry extends AbstractPointEntity.Entry { private _owner; private _text; private _position; private _props; private _animation; /** * @param owner 所有者 * @param text テキスト * @param position 位置 * @param props プロパティ */ constructor(owner: TextEntity, text: string, position: GeoPoint, props: EntryOption); get animation(): BindingBlock; /** * @summary テキスト * @type {string} * @readonly * @package */ get text(): string; /** * ID */ get id(): string; /** * @summary 縁を描画するか * @type {boolean} * @readonly * @package */ get enable_stroke(): boolean; /** * @summary 背景色 * @type {mapray.Color} * @readonly * @package */ get bg_color(): Vector4; /** * アニメーションの BindingBlock を初期化 */ private _setupAnimationBindingBlock; /** * テキスト原点位置を設定 * * @param position テキスト原点の位置 */ setPosition(position: GeoPoint): void; /** * フォントスタイルを設定 * @param style フォントスタイル */ setFontStyle(style: FontStyle): void; /** * フォントの太さを設定 * @param weight フォントの太さ */ setFontWeight(weight: FontWeight): void; /** * フォントの大きさを設定 * @param size フォントの大きさ (Pixels) */ setFontSize(size: number): void; /** * テキストの色を設定 * @param color テキストの色 */ setColor(color: Vector3 | Vector4): void; /** * テキスト縁の色を設定 * @param color 縁の色 */ setStrokeColor(color: Vector3 | Vector4): void; /** * テキスト縁の太さを設定 * @param width 縁の線幅 */ setStrokeLineWidth(width: number): void; /** * テキスト縁を有効にするかどうか * @param enable trueなら有効 */ setEnableStroke(enable: boolean): void; /** * テキストを設定 * @param text テキスト */ setText(text: string): void; private _copyColorProperty; private _setValueProperty; private _setColorProperty; } interface EntryOption { /** フォントスタイル */ font_style?: FontStyle; /** フォントの太さ */ font_weight?: FontWeight; /** フォントの大きさ (Pixels) */ font_size?: number; /** フォントファミリー */ font_family?: string; /** テキストの色 */ color?: Vector3 | Vector4; /** テキスト縁の色 */ stroke_color?: Vector3 | Vector4; /** 背景色 */ bg_color?: Vector3 | Vector4; /** テキスト縁の幅 */ stroke_width?: number; /** テキストの縁取りを有効にするか */ enable_stroke?: boolean; /** Entryを識別するID */ id?: string; [name: string]: any; } interface EntryProps { /** フォントスタイル */ font_style?: FontStyle; /** フォントの太さ */ font_weight?: FontWeight; /** フォントの大きさ (Pixels) */ font_size?: number; /** フォントファミリー */ font_family?: string; /** テキストの色 */ color?: Vector4; /** テキスト縁の色 */ stroke_color?: Vector4; /** 背景色 */ bg_color?: Vector4; /** テキスト縁の幅 */ stroke_width?: number; /** テキストの縁取りを有効にするか */ enable_stroke?: boolean; /** Entryを識別するID */ id?: string; [name: string]: any; } } export default TextEntity; //# sourceMappingURL=TextEntity.d.ts.map