import VisualVariableType from '../../../base/enum/VisualVariableType'
import { defaultValue } from '../../../util'
import { Zondy } from '../../../base'
import { createVisualVariable } from './index'
/**
* 视觉变量基类
* @class VisualVariable
* @moduleEX RendererModule
* @param {Object} options 初始化参数
* @param {String} [options.field] 视觉变量字段
* @param {String} [options.valueExpression] 字段表达式
* @param {String} [options.valueExpressionTitle] 字段表达式标题
* @example <caption>支持的视觉变量</caption>
* [1、color视觉变量]{@link ColorVariable}
* [2、opactiy视觉变量]{@link OpacityVariable}
* [3、size视觉变量]{@link SizeVariable}
* @example <caption>多个视觉变量叠加</caption>
* // 从图层上获取renderer
* const renderer = layer.renderer
* // 设置多个视觉变量。
* // 需要注意相同视觉变量作用效果一致,按照加入顺序会覆盖前面的效果。
* // 颜色视觉变量和透明度视觉变量同时作用时,需要将颜色视觉变量放于透明度视觉变量之前。
* renderer.visualVariables = [
* {
type: "color",
valueExpression: "$feature.FID",
stops: [
{
color: "#FFFCD4",
value: 0,
},
{
color: "#350242",
value: 200,
},
],
},
{
type: "size",
valueExpression: "$feature.FID",
stops:[
{
size:5,
value:0
},
{
size:20,
value:300
}
]
},
{
type: "opacity",
valueExpression: "$feature.FID",
stops: [
{
opacity: 0.2,
value: 0,
},
{
opacity: 1.0,
value:300,
}
],
}
* ]
*/
class VisualVariable {
constructor(options) {
options = defaultValue(options, {})
/**
* 视觉变量默认类型
* @member {String} VisualVariable.prototype.type
*/
this.type = VisualVariableType.default
/**
* 视觉变量字段
* @member {String} VisualVariable.prototype.field
*/
this.field = defaultValue(options.field, '')
/**
* 视觉变量字段表达式
* @member {String} VisualVariable.prototype.valueExpression
*/
this.valueExpression = defaultValue(options.valueExpression, '')
/**
* 字段表达式标题
* @member {String} VisualVariable.prototype.valueExpressionTitle
*/
this.valueExpressionTitle = defaultValue(options.valueExpressionTitle, '')
}
/**
* 通过json构造VisualVariable对象
* @return {VisualVariable} json对象
* */
static fromJSON(json) {
json = defaultValue(json, {})
return createVisualVariable(json)
}
/**
* 导出为json对象
* @return {Object} json对象
* */
toJSON() {
const json = {}
json.field = this.field
json.valueExpression = this.valueExpression
json.valueExpressionTitle = this.valueExpressionTitle
return json
}
/**
* 克隆对象
* @return {VisualVariable} 克隆后的VisualVariable对象
*/
clone() {
return new VisualVariable(this.toJSON())
}
}
Zondy.Renderer.VisualVariable.VisualVariable = VisualVariable
export default VisualVariable