类名 common/base/symbol/symbol3DLayer/PathSymbol3DLayer.js
import Zondy from '../../Zondy'
import { defaultValue } from '../../../util'
import { AnchorType, ProfileType, Symbol3DLayerType } from '../../enum'
import LineCapType from '../../enum/LineCapType'
import LineJoinType from '../../enum/LineJoinType'
import Symbol3DLayer from './Symbol3DLayer'
import { ColorMaterial } from '../support'

/**
 * 三维管道符号图层,定义如何在三维场景视图中绘制一个管道线<br/>
 * 示例如下:<br/>
 * <a href='#PathSymbol3DLayer'>[1、创建三维管道符号图层]</a><br/>
 *
 * @class PathSymbol3DLayer
 * @moduleEX SymbolModule
 * @extends Symbol3DLayer
 * @param {Object} options 构造参数
 * @param {ColorMaterial} [options.material = new ColorMaterial()] 管道的材质,目前支持的材质有:<br/>
 * ColorMaterial: 纯色材质,通过设置纯色材质来改变管道的颜色
 * @param {ProfileType} [options.profile = ProfileType.circle] 管道横截面类型,圆形或者矩形
 * @param {Number} [options.width = null] 管道的宽度,如果没有设置,那么管道宽度就和管道高度一致,如果高度和宽度都没有设置,则不显示管道
 * @param {Number} [options.height = null] 管道的高度,如果没有设置,那么管道高度就和管道宽度一致,如果高度和宽度都没有设置,则不显示管道
 * @param {LineJoinType} [options.join = LineJoinType.miter] 管道拐角样式
 * @param {LineCapType} [options.cap = LineCapType.butt] 管道首尾端点样式
 * @param {Boolean} [options.castShadows = true] 是否显示阴影
 * @param {AnchorType} [options.anchor = AnchorType.center] 管道几何体相对于点坐标的位置
 *
 * @summary <h5>支持如下方法:</h5>
 * <a href='#fromJSON'>[1、通过json数据构造一个PathSymbol3DLayer对象]</a><br/>
 * <a href='#toJSON'>[2、导出为json数据]</a><br/>
 * <a href='#clone'>[3、克隆并返回一个新的PathSymbol3DLayer对象]</a><br/>
 *
 * @example <caption><h7 id='PathSymbol3DLayer'>创建三维管道符号图层</h7></caption>
 * // ES5引入方式
 * const { AnchorType, LineCapType, ProfileType } = Zondy.Enum
 * const { PathSymbol3DLayer, ColorMaterial } = Zondy.Symbol
 * // ES6引入方式
 * import { AnchorType, LineCapType, ProfileType, PathSymbol3DLayer, ColorMaterial } from "@mapgis/webclient-common"
 *
 * // 创建三维管道符号图层
 * const pathSymbol3DLayer = new PathSymbol3DLayer({
 *   // 设置管道几何体相对于点坐标的位置
 *   anchor: AnchorType.center,
 *   // 管道首尾端点样式
 *   cap: LineCapType.butt,
 *   // 是否显示阴影
 *   castShadows: true,
 *   // 管道的宽度
 *   width: 40,
 *   // 管道的高度
 *   height: 40,
 *   // 管道的材质
 *   material: new ColorMaterial(),
 *   // 管道横截面类型
 *   profile: ProfileType.circle
 * })
 * */
class PathSymbol3DLayer extends Symbol3DLayer {
  constructor(options) {
    super(options)
    options = defaultValue(options, {})
    /**
     * 三维符号图层类型
     * @member {Symbol3DLayerType} PathSymbol3DLayer.prototype.type
     */
    this.type = Symbol3DLayerType.path
    /**
     * 管道几何体相对于点坐标的位置
     * @member {AnchorType} PathSymbol3DLayer.prototype.anchor
     */
    this.anchor = defaultValue(options.anchor, AnchorType.center)
    /**
     * 管道首尾端点样式
     * @member {LineCapType} PathSymbol3DLayer.prototype.cap
     */
    this.cap = defaultValue(options.cap, LineCapType.butt)
    /**
     * 是否显示阴影
     * @member {Boolean} PathSymbol3DLayer.prototype.castShadows
     */
    this.castShadows = defaultValue(options.castShadows, true)
    /**
     * 管道的高度,如果没有设置,那么管道高度就和管道宽度一致,如果高度和宽度都没有设置,则不显示管道
     * @member {Number} PathSymbol3DLayer.prototype.height
     */
    this.height = defaultValue(options.height, undefined)
    /**
     * 管道的宽度,如果没有设置,那么管道宽度就和管道高度一致,如果高度和宽度都没有设置,则不显示管道
     * @member {Boolean} PathSymbol3DLayer.prototype.height
     */
    this.width = defaultValue(options.width, undefined)
    /**
     * 管道拐角样式
     * @member {LineJoinType} PathSymbol3DLayer.prototype.join
     */
    this.join = defaultValue(options.join, LineJoinType.miter)
    /**
     * 材质
     * @member {ColorMaterial} PathSymbol3DLayer.prototype.material
     */
    this.material = options.material
      ? ColorMaterial.fromJSON(options.material)
      : new ColorMaterial()
    /**
     * 管道横截面类型
     * @member {ProfileType} PathSymbol3DLayer.prototype.profile
     */
    this.profile = defaultValue(options.profile, ProfileType.circle)
  }

  /**
   * <a id='fromJSON'/>
   * 通过json数据构造一个PathSymbol3DLayer对象
   * @param {Object} json json数据
   * @return {LineCallout3D} 新的PathSymbol3DLayer对象
   * */
  static fromJSON(json) {
    return new PathSymbol3DLayer(json)
  }

  /**
   * <a id='toJSON'/>
   * 导出为json数据
   * @return {Object} 导出的json数据
   * */
  toJSON() {
    return {
      type: this.type,
      anchor: this.anchor,
      cap: this.cap,
      castShadows: this.castShadows,
      height: this.height,
      width: this.width,
      join: this.join,
      material: this.material,
      profile: this.profile
    }
  }

  /**
   * <a id='clone'/>
   * 克隆并返回一个新的PathSymbol3DLayer对象
   * @return {PathSymbol3DLayer} 新的PathSymbol3DLayer对象
   * */
  clone() {
    return new PathSymbol3DLayer(this.toJSON())
  }
}

Zondy.Symbol.PathSymbol3DLayer = PathSymbol3DLayer
export default PathSymbol3DLayer
构造函数
成员变量
方法
事件