类名 common/sketchEditor/base/SketchStage.js
import { defaultValue } from '../../util'
/**
 * 草图图形集合
 * @class SketchStage
 * @moduleEX SketchEditorModule
 * @param {Object} options 构造参数
 * @param {MapView|SceneView}  [options.view]  地图视图对象
 * @param {GraphicsLayer}  [options.layer]  草图图层管对象
 * @param {SketchStyle}  [options.sketchStyle]  草图符号
 * @param {Function}  [options._hitTestEvent]  草图拾取事件
 */
class SketchStage {
  constructor(options) {
    /**
     *草图实体图形
     */
    options = defaultValue(options, {
      entityGraphic: null,
      vertexGraphics: [],
      midVertexGraphics: [],
      currentVertexIndex: -1,
      movingLineGraphics: [],
      selectBoxGraphics: [],
      selectBoxVertexGraphics: []
    })
    this.entityGraphic = defaultValue(options.entityGraphic, null)
    /**
     *草图顶点图形
     */
    this.vertexGraphics = defaultValue(options.vertexGraphics, [])
    /**
     *草图中点实图形
     */
    this.midVertexGraphics = defaultValue(options.midVertexGraphics, [])
    /**
     *当前顶点序号
     */
    this.currentVertexIndex = defaultValue(options.currentVertexIndex, -1)
    /**
     *草图正移动线图形
     */
    this.movingLineGraphics = defaultValue(options.movingLineGraphics, [])
    /**
     *选中草图时外包盒
     */
    this.selectBoxGraphics = defaultValue(options.selectBoxGraphics, [])
    /**
     *选中草图时外包盒顶点
     */
    this.selectBoxVertexGraphics = defaultValue(
      options.selectBoxVertexGraphics,
      []
    )
    /**
     *捕获时的图形
     */
    this.snapGraphics = defaultValue(options.snapGraphics, [])
    this.editMode = defaultValue(options.editMode, 0)
  }

  getFeatureById(id) {
    const features = this.getAllFeatures()
    let feature = null // features.filter(feature=>feature.id===id)
    for (let i = 0; i < features.length; i++) {
      if (features[i].id === id) {
        feature = features[i]
        break
      }
    }
    return feature
  }

  getAllFeatures() {
    let features = []
    if (this.entityGraphic) {
      features.push(this.entityGraphic)
      features = features
        .concat(this.vertexGraphics)
        .concat(this.midVertexGraphics)
        .concat(this.selectBoxGraphics)
        .concat(this.selectBoxVertexGraphics)
    }
    return features
  }

  updateGraphic(feature) {
    if (this.entityGraphic.id === feature.id) {
      this.entityGraphic = feature
    }
    this.vertexGraphics.forEach((item, i) => {
      if (feature.id === item.id) {
        this.vertexGraphics[i] = feature
      }
    })
    this.midVertexGraphics.forEach((item, i) => {
      if (feature.id === item.id) {
        this.midVertexGraphics[i] = feature
      }
    })
    this.selectBoxGraphics.forEach((item, i) => {
      if (feature.id === item.id) {
        this.selectBoxGraphics[i] = feature
      }
    })
    this.selectBoxVertexGraphics.forEach((item, i) => {
      if (feature.id === item.id) {
        this.selectBoxVertexGraphics[i] = feature
      }
    })
  }

  /**
   * 克隆并返回新要素<a id='clone'></a>
   * @return {Feature} 克隆后的新要素
   */
  clone() {
    return new SketchStage(this.toJSON())
  }

  /**
   * 导出一个JSON对像<a id='toJSON'></a>
   * @return {Object} JSON对像
   */
  toJSON() {
    const json = {}
    json.entityGraphic = this.entityGraphic
      ? this.entityGraphic.clone()
      : undefined // this.entityGraphic[0].toJSON()
    json.vertexGraphics = this.vertexGraphics.map((feature) => {
      return feature.clone()
    })
    json.midVertexGraphics = this.midVertexGraphics.map((feature) => {
      return feature.clone()
    })
    json.selectBoxGraphics = this.selectBoxGraphics.map((feature) => {
      return feature.clone()
    })
    json.selectBoxVertexGraphics = this.selectBoxVertexGraphics.map(
      (feature) => {
        return feature.clone()
      }
    )
    json.snapGraphics = this.snapGraphics.map((feature) => {
      return feature.clone()
    })
    json.currentVertexIndex = this.currentVertexIndex
    json.editMode = this.editMode
    return json
  }
}
export default SketchStage
构造函数
成员变量
方法
事件