import Evented from '../Evented'
import Zondy from '../Zondy'
import { Color } from '../index'
import { defaultValue } from '../../util'
import { SymbolType } from '../enum'
import { createSymbol } from './index'
/**
* 符号基类
* @class Symbol
* @moduleEX SymbolModule
* @param {Object} options 构造参数
* @param {Color|String|Array|Object} [options.color = new Color(255, 255, 255, 0.25)] 颜色
* @see [<h4>目前支持的几种符号类型</h4>]{@tutorial 符号}
* @example 设置颜色的几种方式
* 1.结构化形式
* symbol.color = new Color(255, 255, 255, 0.25)
* symbol.color ={
* red:255,
* green:0,
* blue:0,
* alpha:1
* }
* 2.数组
* symbol.color = [255,0,0]
* symbol.color = [255,0,0,1]
* 3.字符串
* symbol.color = '#ff0000'
* symbol.color = 'rgba(255,0,0,1)'
*/
class Symbol extends Evented {
constructor(options) {
super()
options = defaultValue(options, {})
/**
* 颜色
* @member {Color} Symbol.prototype.color
*/
this.color = Color.fromColor(
defaultValue(options.color, new Color(255, 255, 255, 0.25))
)
/**
* 符号类型
* @member {String} Symbol.prototype.type
*/
this.type = SymbolType.default
}
/**
* @function Symbol.fromJSON
* @description 通过json文件构建symbol
* @param {Object} json 符号的实例化JSON
* @example
* // ES5引入方式
* const { Symbol, Color } = Zondy
* // ES6引入方式
* import { Symbol, Color } from "@mapgis/webclient-common"
* const simpleLineSymbol = Symbol.fromJSON({
* type:'simple-line',
* color:new Color(255,255,255,1),
* width:2
* })
*/
static fromJSON(json) {
return createSymbol(json)
}
/**
* 导出为JSON对象
* @return {Object} JSON对像
*/
toJSON() {
return {
color: Color.fromColor(this.color).toJSON(),
type: this.type
}
}
/**
* 克隆并返回新的符号对象
* @return {Symbol} 克隆后的新符号对象
*/
clone() {
return new Symbol(this.toJSON())
}
}
Zondy.Symbol.Symbol = Symbol
export default Symbol