import Entity from "./Entity"; import Mesh from "./Mesh"; import Scene from "./Scene"; import LineMaterial from "./LineMaterial"; import { Vector3 } from "./GeoMath"; import GeoRegion from "./GeoRegion"; import AltitudeMode from "./AltitudeMode"; import { Area } from "./AreaUtil"; import QAreaManager from "./QAreaManager"; import RenderStage from "./RenderStage"; /** * 線エンティティ * * {@link mapray.MarkerLineEntity} と {@link mapray.PathEntity} の共通機能を提供するクラスである。 */ declare abstract class AbstractLineEntity extends Entity { protected _producer: AbstractLineEntity.FlakePrimitiveProducer | AbstractLineEntity.PrimitiveProducer; private _is_flake_mode; protected _width: number; protected _color: Vector3; protected _opacity: number; protected _point_array: Float64Array; readonly is_path: boolean; protected _num_points: number; /** * @param scene 所属可能シーン * @param is_path Pathかどうか * @param opts オプション集合 */ constructor(scene: Scene, is_path: boolean, opts?: AbstractLineEntity.Option); /** */ getPrimitiveProducer(): AbstractLineEntity.PrimitiveProducer | undefined; /** */ getFlakePrimitiveProducer(): AbstractLineEntity.FlakePrimitiveProducer | undefined; /** */ onChangeAltitudeMode(_prev_mode: AltitudeMode): void; /** * 線の太さを設定 * * @param width 線の太さ (画素単位) */ setLineWidth(width: number): void; /** * 基本色を設定 * * @param color 基本色 */ setColor(color: Vector3): void; /** * 不透明度を設定 * * @param opacity 不透明度 */ setOpacity(opacity: number): void; /** * 頂点数 * @experimental */ get num_points(): number; /** * すべての頂点のバウンディングを算出 * * @return バウンディング情報を持ったGeoRegion */ getBounds(): GeoRegion; /** * 専用マテリアルを取得 */ protected abstract getLineMaterial(render_target: RenderStage.RenderTarget): LineMaterial; } declare namespace AbstractLineEntity { interface Option extends Entity.Option { } interface Json extends Entity.Json { color: Vector3; opacity: number; line_width: number; } /** * @summary MarkerLineEntity の FlakePrimitiveProducer * * @private */ class FlakePrimitiveProducer extends Entity.FlakePrimitiveProducer { private _material_map; private _area_manager; private _properties?; /** * @param entity */ constructor(entity: AbstractLineEntity); getEntity(): AbstractLineEntity; getAreaStatus(area: Area): Entity.AreaStatus; /** * @override */ createMesh(area: Area, dpows: number[], dem: any): Mesh | null; /** */ getMaterialAndProperties(stage: RenderStage): { material: object | undefined; properties: {}; }; /** * @summary 頂点が変更されたことを通知 */ onChangePoints(): void; /** * @summary プロパティが変更されたことを通知 */ onChangeProperty(): void; /** * すべての線分を垂直グリッドで分割 * * @param area 地表断片の領域 * @param msize area 寸法 ÷ π (厳密値) * @param dpow area の x 分割指数 */ private _divideXOnly; /** * すべての線分をグリッドで分割 * * @param area 地表断片の領域 * @param dpows area の xy 分割指数 */ private _divideXY; /** * 頂点配列の生成 * * @param area 地表断片の領域 * @param dem DEM バイナリ * * @return Mesh 用の頂点配列 */ private _createVertices; /** * 頂点インデックスの生成 * * @param num_segments 線分の数 * * @return Mesh 用の頂点インデックス */ private _createIndices; } /** * @summary 線分の領域管理 * * @private */ class LineAreaManager extends QAreaManager { private _entity; /** * @param entity 管理対象のエンティティ */ constructor(entity: AbstractLineEntity); /** * @override */ getInitialContent(): LineSegment[]; /** */ createAreaContent(min_x: number, min_y: number, msize: number, parent_content: LineSegment[]): Entity.AreaStatus.EMPTY | LineSegment[]; /** * 矩形と線分の交差判定 * * 矩形領域と線分が交差するかどうかを返す。 * 矩形領域には x 座標が x_area_max の点と、y 座標が y_area_max の点は含まれないものとする。 * * 事前条件: * - x_area_min < x_area_max * - y_area_min < y_area_max * * @param x_area_min 矩形領域の最小 x 座標 * @param x_area_max 矩形領域の最大 x 座標 * @param y_area_min 矩形領域の最小 y 座標 * @param y_area_max 矩形領域の最大 y 座標 * @param xP 線分端点 P の x 座標 * @param yP 線分端点 P の y 座標 * @param xQ 線分端点 Q の x 座標 * @param yQ 線分端点 Q の y 座標 * * @return {boolean} 交差するとき true, それ以外のとき false */ private _intersect; /** * 矩形と非水平線分の交差判定 * * 矩形領域と線分が交差するかどうかを返す。 * 矩形領域には x 座標が x_area_max の点と、y 座標が y_area_max の点は含まれないものとする。 * * 事前条件: * - x_area_min < x_area_max * - y_area_min < y_area_max * - yP != yQ * * * 注意: |yP - yQ| が小さいと精度が悪くなる。 * * @param x_area_min 矩形領域の最小 x 座標 * @param x_area_max 矩形領域の最大 x 座標 * @param y_area_min 矩形領域の最小 y 座標 * @param y_area_max 矩形領域の最大 y 座標 * @param xP 線分端点 P の x 座標 * @param yP 線分端点 P の y 座標 * @param xQ 線分端点 Q の x 座標 * @param yQ 線分端点 Q の y 座標 * * @return 交差するとき true, それ以外のとき false */ private _nhorz_intersect; } } type LineSegment = [ x0: number, y0: number, l0: number, x1: number, y1: number, l1: number ]; export default AbstractLineEntity; //# sourceMappingURL=AbstractLineEntity.d.ts.map