类名 common/base/symbol/Symbol.js
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
构造函数
成员变量
方法
事件