import { List } from "../dataType/List";
import { Geometry } from "../models/Geometry";
import { ActiveList } from "./ActiveList";
import { GeometryLayer } from "./GeometryLayer";
import { ActiveDictionary } from "./data";
/**
* @class Map.DrawingTools
* @since ui.Map
*/
export class DrawingTools extends ActiveDictionary {
geometryLayers: GeometryLayer[] = [];
drawModes: string[] = ['point', 'line', 'polygon', 'rectangle'];
layersShown: boolean;
linked: boolean = false;
selected: GeometryLayer = null;
shape: string = null;
shown: boolean = true;
curDrawMode: string;//当前绘制模式
drawControl: any;
/**
* @hideconstructor
* 绘图工具
* @param {List<GeometryLayer>} layers 用于初始化绘图工具的GeometryLayer数组
* @param {string} shape 要画的图形形状。可使用的值有:point、line、polygon、rectangle
* @param {GeometryLayer} selected 当前选择的图层
* @param {boolean} shown 是否显示绘图工具,默认为true
* @param {boolean} linked 绘图工具是否链接到编辑器导入栏。当为false时,工具不显示导入的几何图形。默认为false
* @returns
*/
constructor(layers?: GeometryLayer[], shape?: string, selected?: GeometryLayer, shown?: boolean, linked?: boolean) {
super();
if (!(this instanceof DrawingTools)) {
return new DrawingTools(layers, shape, selected, shown, linked);
}
this.shape = shape;
this.selected = selected;
this.shown = shown;
this.linked = linked;
if (layers) {
this.geometryLayers = layers;
}
}
/**
* 添加图层
* @param {List<Geometry>} geometries 图形列表
* @param {string} name 图层名称
* @param {string} color 图层颜色
* @param {boolean} shown 图层是否显示
* @param {boolean} locked 图层是否锁定
* @returns ui.Map.GeometryLayer
*/
addLayer(geometries: List<Geometry>, name?: string, color?: string, shown?: boolean, locked?: boolean) {
let gl = new GeometryLayer(geometries, name, color, shown, locked);
this.geometryLayers.push(gl);
return gl;
}
/**
* 清除图层
* @returns ui.Map.DrawingTools
*/
clear() {
return this;
}
/**
* 开启绘制模式
* @returns ui.Map.DrawingTools
*/
draw() {
//开启绘制模式
return this;
}
/**
* 开启编辑模式
* @returns ui.Map.DrawingTools
*/
edit() {
//开启绘制模式
return this;
}
/**
* 获取绘图工具上可用的绘图模式。可用的绘制模式形状有:点、线、多边形和矩形。返回已启用的绘制模式列表
* @returns List<string>
*/
getDrawModes() {
//获取可绘制的图形
return this.drawModes;
}
/**
* 返回绘图工具是否链接到编辑器中的导入栏
* @returns boolean
*/
getLinked() {
return this.linked;
}
getMap() {
return "";
}
/**
* 返回选择的图层
* @returns ui.Map.GeometryLayer
*/
getSelected() {
//获取选中的geometryLayer
return this.selected;
}
/**
* 返回在绘图模式下绘制的形状
* @returns string
*/
getShape() {
return this.shape;
}
/**
* 返回绘图工具是否显示
* @returns boolean
*/
getShown() {
return this.shown;
}
/**
* 返回绘图工具的图层列表
* @returns List<GeometryLayer>
*/
layers() {
return this.geometryLayers;
}
/**
* 设置绘图模式。可使用的值有:point、line、polygon、rectangle
* @param {List<string>} drawModes 要设置的绘制模式列表。默认为所有支持的
* @returns ui.Map.DrawingTools
*/
setDrawModes(drawModes: string[]) {
this.drawModes = drawModes;
return this;
}
/**
* 设置绘图工具是否链接到编辑器中的导入栏
* @param {boolean} linked 是否连接
* @returns ui.Map.DrawingTools
*/
setLinked(linked: boolean) {
this.linked = linked;
return this;
}
/**
* 设置选择图层
* @param {GeometryLayer} layer 选择的图层
* @returns ui.Map.DrawingTools
*/
setSelected(layer: GeometryLayer) {
this.selected = layer;
return this;
}
/**
* 设置默认绘制的图形
* @param {string} shape 图形
* @returns ui.Map.DrawingTools
*/
setShape(shape: string) {
this.shape = shape;
return this;
}
/**
* 设置绘图工具是否显示
* @param {boolean} shown 是否显示
* @returns ui.Map.DrawingTools
*/
setShown(shown: boolean) {
this.shown = shown;
return this;
}
onDraw(callback: Function) {
if (callback) {
callback(this);
}
}
onEdit(callback: Function) {
if (callback) {
callback(this);
}
}
onSelect(callback: Function) {
if (callback) {
callback(this);
}
}
onErase(callback: Function) {
if (callback) {
callback(this);
}
}
}