329 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			329 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								var xp = {
							 | 
						||
| 
								 | 
							
								    version: "1.0.0",
							 | 
						||
| 
								 | 
							
								    createTime: "2018.6.19",
							 | 
						||
| 
								 | 
							
								    author: "xupinhui"
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								var doubleArrowDefualParam = {
							 | 
						||
| 
								 | 
							
								    type: "doublearrow",
							 | 
						||
| 
								 | 
							
								    headHeightFactor: .25,
							 | 
						||
| 
								 | 
							
								    headWidthFactor: .3,
							 | 
						||
| 
								 | 
							
								    neckHeightFactor: .85,
							 | 
						||
| 
								 | 
							
								    fixPointCount: 4,
							 | 
						||
| 
								 | 
							
								    neckWidthFactor: .15
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								var tailedAttackArrowDefualParam = {
							 | 
						||
| 
								 | 
							
								    headHeightFactor: .18,
							 | 
						||
| 
								 | 
							
								    headWidthFactor: .3,
							 | 
						||
| 
								 | 
							
								    neckHeightFactor: .85,
							 | 
						||
| 
								 | 
							
								    neckWidthFactor: .15,
							 | 
						||
| 
								 | 
							
								    tailWidthFactor: .1,
							 | 
						||
| 
								 | 
							
								    headTailFactor: .8,
							 | 
						||
| 
								 | 
							
								    swallowTailFactor: 1
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								var fineArrowDefualParam = {
							 | 
						||
| 
								 | 
							
								    tailWidthFactor: 0.05,
							 | 
						||
| 
								 | 
							
								    neckWidthFactor: 0.20,
							 | 
						||
| 
								 | 
							
								    headWidthFactor: 0.25,
							 | 
						||
| 
								 | 
							
								    headAngle: Math.PI / 4.5,
							 | 
						||
| 
								 | 
							
								    neckAngle: Math.PI / 13
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								xp.algorithm = {},
							 | 
						||
| 
								 | 
							
								    xp.algorithm.doubleArrow = function (inputPoint) {
							 | 
						||
| 
								 | 
							
								        this.connPoint = null;
							 | 
						||
| 
								 | 
							
								        this.tempPoint4 = null;
							 | 
						||
| 
								 | 
							
								        this.points = inputPoint;
							 | 
						||
| 
								 | 
							
								        var result = {
							 | 
						||
| 
								 | 
							
								            controlPoint: null,
							 | 
						||
| 
								 | 
							
								            polygonalPoint: null
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								        //获取已经点击的坐标数
							 | 
						||
| 
								 | 
							
								        var t = inputPoint.length;
							 | 
						||
| 
								 | 
							
								        if (!(2 > t)) {
							 | 
						||
| 
								 | 
							
								            if (2 == t) return inputPoint;
							 | 
						||
| 
								 | 
							
								            var o = this.points[0],    //第一个点
							 | 
						||
| 
								 | 
							
								                e = this.points[1],        //第二个点
							 | 
						||
| 
								 | 
							
								                r = this.points[2],        //第三个点
							 | 
						||
| 
								 | 
							
								                t = inputPoint.length; //获取已经点击的坐标数
							 | 
						||
| 
								 | 
							
								            //下面的是移动点位后的坐标
							 | 
						||
| 
								 | 
							
								            3 == t ? this.tempPoint4 = xp.algorithm.getTempPoint4(o, e, r) : this.tempPoint4 = this.points[3],
							 | 
						||
| 
								 | 
							
								                3 == t || 4 == t ? this.connPoint = P.PlotUtils.mid(o, e) : this.connPoint = this.points[4];
							 | 
						||
| 
								 | 
							
								            var n, g;
							 | 
						||
| 
								 | 
							
								            P.PlotUtils.isClockWise(o, e, r) ? (n = xp.algorithm.getArrowPoints(o, this.connPoint, this.tempPoint4, !1), g = xp.algorithm.getArrowPoints(this.connPoint, e, r, !0)) : (n = xp.algorithm.getArrowPoints(e, this.connPoint, r, !1), g = xp.algorithm.getArrowPoints(this.connPoint, o, this.tempPoint4, !0));
							 | 
						||
| 
								 | 
							
								            var i = n.length,
							 | 
						||
| 
								 | 
							
								                s = (i - 5) / 2,
							 | 
						||
| 
								 | 
							
								                a = n.slice(0, s),
							 | 
						||
| 
								 | 
							
								                l = n.slice(s, s + 5),
							 | 
						||
| 
								 | 
							
								                u = n.slice(s + 5, i),
							 | 
						||
| 
								 | 
							
								                c = g.slice(0, s),
							 | 
						||
| 
								 | 
							
								                p = g.slice(s, s + 5),
							 | 
						||
| 
								 | 
							
								                h = g.slice(s + 5, i);
							 | 
						||
| 
								 | 
							
								            c = P.PlotUtils.getBezierPoints(c);
							 | 
						||
| 
								 | 
							
								            var d = P.PlotUtils.getBezierPoints(h.concat(a.slice(1)));
							 | 
						||
| 
								 | 
							
								            u = P.PlotUtils.getBezierPoints(u);
							 | 
						||
| 
								 | 
							
								            var f = c.concat(p, d, l, u);
							 | 
						||
| 
								 | 
							
								            var newArray = xp.algorithm.array2Dto1D(f);
							 | 
						||
| 
								 | 
							
								            result.controlPoint = [o, e, r, this.tempPoint4, this.connPoint];
							 | 
						||
| 
								 | 
							
								            result.polygonalPoint = Cesium.Cartesian3.fromDegreesArray(newArray);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return result;
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    xp.algorithm.threeArrow = function (inputPoint) {
							 | 
						||
| 
								 | 
							
								        this.connPoint = null;
							 | 
						||
| 
								 | 
							
								        this.tempPoint4 = null;
							 | 
						||
| 
								 | 
							
								        this.tempPoint5 = null;
							 | 
						||
| 
								 | 
							
								        this.points = inputPoint;
							 | 
						||
| 
								 | 
							
								        var result = {
							 | 
						||
| 
								 | 
							
								            controlPoint: null,
							 | 
						||
| 
								 | 
							
								            polygonalPoint: null
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								        //获取已经点击的坐标数
							 | 
						||
| 
								 | 
							
								        var t = inputPoint.length;
							 | 
						||
| 
								 | 
							
								        if (t >= 2) {
							 | 
						||
| 
								 | 
							
								            if (t == 2) {
							 | 
						||
| 
								 | 
							
								                return inputPoint;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            var o = this.points[0],    //第一个点
							 | 
						||
| 
								 | 
							
								                e = this.points[1],        //第二个点
							 | 
						||
| 
								 | 
							
								                r = this.points[2],        //第三个点
							 | 
						||
| 
								 | 
							
								                t = inputPoint.length; //获取已经点击的坐标数
							 | 
						||
| 
								 | 
							
								            //下面的是移动点位后的坐标
							 | 
						||
| 
								 | 
							
								            if (t == 3) {
							 | 
						||
| 
								 | 
							
								                this.tempPoint4 = xp.algorithm.getTempPoint4(o, e, r);
							 | 
						||
| 
								 | 
							
								                this.tempPoint5 = P.PlotUtils.mid(r, this.tempPoint4);
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                this.tempPoint4 = this.points[3];
							 | 
						||
| 
								 | 
							
								                this.tempPoint5 = this.points[4];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            if (t < 6) {
							 | 
						||
| 
								 | 
							
								                this.connPoint = P.PlotUtils.mid(o, e);
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                this.connPoint = this.points[5];
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            var n, g;
							 | 
						||
| 
								 | 
							
								            if (P.PlotUtils.isClockWise(o, e, r)) {
							 | 
						||
| 
								 | 
							
								                n = xp.algorithm.getArrowPoints(o, this.connPoint, this.tempPoint4, !1);
							 | 
						||
| 
								 | 
							
								                g = xp.algorithm.getArrowPoints(this.connPoint, e, r, !0);
							 | 
						||
| 
								 | 
							
								            } else {
							 | 
						||
| 
								 | 
							
								                n = xp.algorithm.getArrowPoints(e, this.connPoint, r, !1);
							 | 
						||
| 
								 | 
							
								                g = xp.algorithm.getArrowPoints(this.connPoint, o, this.tempPoint4, !0);
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            var i = n.length,
							 | 
						||
| 
								 | 
							
								                s = (i - 5) / 2,
							 | 
						||
| 
								 | 
							
								                a = n.slice(0, s),
							 | 
						||
| 
								 | 
							
								                l = n.slice(s, s + 5),
							 | 
						||
| 
								 | 
							
								                u = n.slice(s + 5, i),
							 | 
						||
| 
								 | 
							
								                c = g.slice(0, s),
							 | 
						||
| 
								 | 
							
								                p = g.slice(s, s + 5),
							 | 
						||
| 
								 | 
							
								                h = g.slice(s + 5, i);
							 | 
						||
| 
								 | 
							
								            c = P.PlotUtils.getBezierPoints(c);
							 | 
						||
| 
								 | 
							
								            var d = P.PlotUtils.getBezierPoints(h.concat(a.slice(1)));
							 | 
						||
| 
								 | 
							
								            u = P.PlotUtils.getBezierPoints(u);
							 | 
						||
| 
								 | 
							
								            var f = c.concat(p, d, l, u);
							 | 
						||
| 
								 | 
							
								            var newArray = xp.algorithm.array2Dto1D(f);
							 | 
						||
| 
								 | 
							
								            result.controlPoint = [o, e, r, this.tempPoint4, this.tempPoint5, this.connPoint];
							 | 
						||
| 
								 | 
							
								            result.polygonalPoint = Cesium.Cartesian3.fromDegreesArray(newArray);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return result;
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    xp.algorithm.array2Dto1D = function (array) {
							 | 
						||
| 
								 | 
							
								        var newArray = [];
							 | 
						||
| 
								 | 
							
								        array.forEach(function (elt) {
							 | 
						||
| 
								 | 
							
								            newArray.push(elt[0]);
							 | 
						||
| 
								 | 
							
								            newArray.push(elt[1]);
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								        return newArray;
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    xp.algorithm.getArrowPoints = function (t, o, e, r) {
							 | 
						||
| 
								 | 
							
								        this.type = doubleArrowDefualParam.type,
							 | 
						||
| 
								 | 
							
								            this.headHeightFactor = doubleArrowDefualParam.headHeightFactor,
							 | 
						||
| 
								 | 
							
								            this.headWidthFactor = doubleArrowDefualParam.headWidthFactor,
							 | 
						||
| 
								 | 
							
								            this.neckHeightFactor = doubleArrowDefualParam.neckHeightFactor,
							 | 
						||
| 
								 | 
							
								            this.neckWidthFactor = doubleArrowDefualParam.neckWidthFactor;
							 | 
						||
| 
								 | 
							
								        var n = P.PlotUtils.mid(t, o),
							 | 
						||
| 
								 | 
							
								            g = P.PlotUtils.distance(n, e),
							 | 
						||
| 
								 | 
							
								            i = P.PlotUtils.getThirdPoint(e, n, 0, .3 * g, !0),
							 | 
						||
| 
								 | 
							
								            s = P.PlotUtils.getThirdPoint(e, n, 0, .5 * g, !0);
							 | 
						||
| 
								 | 
							
								        i = P.PlotUtils.getThirdPoint(n, i, P.Constants.HALF_PI, g / 5, r),
							 | 
						||
| 
								 | 
							
								            s = P.PlotUtils.getThirdPoint(n, s, P.Constants.HALF_PI, g / 4, r);
							 | 
						||
| 
								 | 
							
								        var a = [n, i, s, e],
							 | 
						||
| 
								 | 
							
								            l = xp.algorithm.getArrowHeadPoints(a, this.headHeightFactor, this.headWidthFactor, this.neckHeightFactor, this.neckWidthFactor),
							 | 
						||
| 
								 | 
							
								            u = l[0],
							 | 
						||
| 
								 | 
							
								            c = l[4],
							 | 
						||
| 
								 | 
							
								            p = P.PlotUtils.distance(t, o) / P.PlotUtils.getBaseLength(a) / 2,
							 | 
						||
| 
								 | 
							
								            h = xp.algorithm.getArrowBodyPoints(a, u, c, p),
							 | 
						||
| 
								 | 
							
								            d = h.length,
							 | 
						||
| 
								 | 
							
								            f = h.slice(0, d / 2),
							 | 
						||
| 
								 | 
							
								            E = h.slice(d / 2, d);
							 | 
						||
| 
								 | 
							
								        return f.push(u),
							 | 
						||
| 
								 | 
							
								            E.push(c),
							 | 
						||
| 
								 | 
							
								            f = f.reverse(),
							 | 
						||
| 
								 | 
							
								            f.push(o),
							 | 
						||
| 
								 | 
							
								            E = E.reverse(),
							 | 
						||
| 
								 | 
							
								            E.push(t),
							 | 
						||
| 
								 | 
							
								            f.reverse().concat(l, E)
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    xp.algorithm.getArrowHeadPoints = function (t, o, e) {
							 | 
						||
| 
								 | 
							
								        this.type = doubleArrowDefualParam.type,
							 | 
						||
| 
								 | 
							
								            this.headHeightFactor = doubleArrowDefualParam.headHeightFactor,
							 | 
						||
| 
								 | 
							
								            this.headWidthFactor = doubleArrowDefualParam.headWidthFactor,
							 | 
						||
| 
								 | 
							
								            this.neckHeightFactor = doubleArrowDefualParam.neckHeightFactor,
							 | 
						||
| 
								 | 
							
								            this.neckWidthFactor = doubleArrowDefualParam.neckWidthFactor;
							 | 
						||
| 
								 | 
							
								        var r = P.PlotUtils.getBaseLength(t),
							 | 
						||
| 
								 | 
							
								            n = r * this.headHeightFactor,
							 | 
						||
| 
								 | 
							
								            g = t[t.length - 1],
							 | 
						||
| 
								 | 
							
								            i = (P.PlotUtils.distance(o, e), n * this.headWidthFactor),
							 | 
						||
| 
								 | 
							
								            s = n * this.neckWidthFactor,
							 | 
						||
| 
								 | 
							
								            a = n * this.neckHeightFactor,
							 | 
						||
| 
								 | 
							
								            l = P.PlotUtils.getThirdPoint(t[t.length - 2], g, 0, n, !0),
							 | 
						||
| 
								 | 
							
								            u = P.PlotUtils.getThirdPoint(t[t.length - 2], g, 0, a, !0),
							 | 
						||
| 
								 | 
							
								            c = P.PlotUtils.getThirdPoint(g, l, P.Constants.HALF_PI, i, !1),
							 | 
						||
| 
								 | 
							
								            p = P.PlotUtils.getThirdPoint(g, l, P.Constants.HALF_PI, i, !0),
							 | 
						||
| 
								 | 
							
								            h = P.PlotUtils.getThirdPoint(g, u, P.Constants.HALF_PI, s, !1),
							 | 
						||
| 
								 | 
							
								            d = P.PlotUtils.getThirdPoint(g, u, P.Constants.HALF_PI, s, !0);
							 | 
						||
| 
								 | 
							
								        return [h, c, g, p, d];
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    xp.algorithm.getArrowBodyPoints = function (t, o, e, r) {
							 | 
						||
| 
								 | 
							
								        for (var n = P.PlotUtils.wholeDistance(t), g = P.PlotUtils.getBaseLength(t), i = g * r, s = P.PlotUtils.distance(o, e), a = (i - s) / 2, l = 0, u = [], c = [], p = 1; p < t.length - 1; p++) {
							 | 
						||
| 
								 | 
							
								            var h = P.PlotUtils.getAngleOfThreePoints(t[p - 1], t[p], t[p + 1]) / 2;
							 | 
						||
| 
								 | 
							
								            l += P.PlotUtils.distance(t[p - 1], t[p]);
							 | 
						||
| 
								 | 
							
								            var d = (i / 2 - l / n * a) / Math.sin(h),
							 | 
						||
| 
								 | 
							
								                f = P.PlotUtils.getThirdPoint(t[p - 1], t[p], Math.PI - h, d, !0),
							 | 
						||
| 
								 | 
							
								                E = P.PlotUtils.getThirdPoint(t[p - 1], t[p], h, d, !1);
							 | 
						||
| 
								 | 
							
								            u.push(f),
							 | 
						||
| 
								 | 
							
								                c.push(E)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return u.concat(c)
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    xp.algorithm.getTempPoint4 = function (t, o, e) {
							 | 
						||
| 
								 | 
							
								        var r, n, g, i, s = P.PlotUtils.mid(t, o),
							 | 
						||
| 
								 | 
							
								            a = P.PlotUtils.distance(s, e),
							 | 
						||
| 
								 | 
							
								            l = P.PlotUtils.getAngleOfThreePoints(t, s, e);
							 | 
						||
| 
								 | 
							
								        return l < P.Constants.HALF_PI ? (n = a * Math.sin(l), g = a * Math.cos(l), i = P.PlotUtils.getThirdPoint(t, s, P.Constants.HALF_PI, n, !1), r = P.PlotUtils.getThirdPoint(s, i, P.Constants.HALF_PI, g, !0)) : l >= P.Constants.HALF_PI && l < Math.PI ? (n = a * Math.sin(Math.PI - l), g = a * Math.cos(Math.PI - l), i = P.PlotUtils.getThirdPoint(t, s, P.Constants.HALF_PI, n, !1), r = P.PlotUtils.getThirdPoint(s, i, P.Constants.HALF_PI, g, !1)) : l >= Math.PI && l < 1.5 * Math.PI ? (n = a * Math.sin(l - Math.PI), g = a * Math.cos(l - Math.PI), i = P.PlotUtils.getThirdPoint(t, s, P.Constants.HALF_PI, n, !0), r = P.PlotUtils.getThirdPoint(s, i, P.Constants.HALF_PI, g, !0)) : (n = a * Math.sin(2 * Math.PI - l), g = a * Math.cos(2 * Math.PI - l), i = P.PlotUtils.getThirdPoint(t, s, P.Constants.HALF_PI, n, !0), r = P.PlotUtils.getThirdPoint(s, i, P.Constants.HALF_PI, g, !1)),
							 | 
						||
| 
								 | 
							
								            r
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    xp.algorithm.tailedAttackArrow = function (inputPoint) {
							 | 
						||
| 
								 | 
							
								        inputPoint = xp.algorithm.dereplication(inputPoint);
							 | 
						||
| 
								 | 
							
								        this.tailWidthFactor = tailedAttackArrowDefualParam.tailWidthFactor;
							 | 
						||
| 
								 | 
							
								        this.swallowTailFactor = tailedAttackArrowDefualParam.swallowTailFactor;
							 | 
						||
| 
								 | 
							
								        this.swallowTailPnt = tailedAttackArrowDefualParam.swallowTailPnt;
							 | 
						||
| 
								 | 
							
								        //控制点
							 | 
						||
| 
								 | 
							
								        var result = {
							 | 
						||
| 
								 | 
							
								            controlPoint: null,
							 | 
						||
| 
								 | 
							
								            polygonalPoint: null
							 | 
						||
| 
								 | 
							
								        };
							 | 
						||
| 
								 | 
							
								        result.controlPoint = inputPoint;
							 | 
						||
| 
								 | 
							
								        var t = inputPoint.length;
							 | 
						||
| 
								 | 
							
								        if (!(2 > t)) {
							 | 
						||
| 
								 | 
							
								            if (2 == inputPoint.length) {
							 | 
						||
| 
								 | 
							
								                result.polygonalPoint = inputPoint;
							 | 
						||
| 
								 | 
							
								                return result;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            var o = inputPoint,
							 | 
						||
| 
								 | 
							
								                e = o[0],
							 | 
						||
| 
								 | 
							
								                r = o[1];
							 | 
						||
| 
								 | 
							
								            P.PlotUtils.isClockWise(o[0], o[1], o[2]) && (e = o[1], r = o[0]);
							 | 
						||
| 
								 | 
							
								            var n = P.PlotUtils.mid(e, r),
							 | 
						||
| 
								 | 
							
								                g = [n].concat(o.slice(2)),
							 | 
						||
| 
								 | 
							
								                i = xp.algorithm.getAttackArrowHeadPoints(g, e, r, tailedAttackArrowDefualParam),
							 | 
						||
| 
								 | 
							
								                s = i[0],
							 | 
						||
| 
								 | 
							
								                a = i[4],
							 | 
						||
| 
								 | 
							
								                l = P.PlotUtils.distance(e, r),
							 | 
						||
| 
								 | 
							
								                u = P.PlotUtils.getBaseLength(g),
							 | 
						||
| 
								 | 
							
								                c = u * this.tailWidthFactor * this.swallowTailFactor;
							 | 
						||
| 
								 | 
							
								            this.swallowTailPnt = P.PlotUtils.getThirdPoint(g[1], g[0], 0, c, !0);
							 | 
						||
| 
								 | 
							
								            var p = l / u,
							 | 
						||
| 
								 | 
							
								                h = xp.algorithm.getAttackArrowBodyPoints(g, s, a, p),
							 | 
						||
| 
								 | 
							
								                t = h.length,
							 | 
						||
| 
								 | 
							
								                d = [e].concat(h.slice(0, t / 2));
							 | 
						||
| 
								 | 
							
								            d.push(s);
							 | 
						||
| 
								 | 
							
								            var f = [r].concat(h.slice(t / 2, t));
							 | 
						||
| 
								 | 
							
								            var newArray = [];
							 | 
						||
| 
								 | 
							
								            f.push(a),
							 | 
						||
| 
								 | 
							
								                d = P.PlotUtils.getQBSplinePoints(d),
							 | 
						||
| 
								 | 
							
								                f = P.PlotUtils.getQBSplinePoints(f),
							 | 
						||
| 
								 | 
							
								                newArray = xp.algorithm.array2Dto1D(d.concat(i, f.reverse(), [this.swallowTailPnt, d[0]]));
							 | 
						||
| 
								 | 
							
								            result.polygonalPoint = Cesium.Cartesian3.fromDegreesArray(newArray);
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return result;
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    xp.algorithm.getAttackArrowHeadPoints = function (t, o, e, defaultParam) {
							 | 
						||
| 
								 | 
							
								        this.headHeightFactor = defaultParam.headHeightFactor;
							 | 
						||
| 
								 | 
							
								        this.headTailFactor = defaultParam.headTailFactor;
							 | 
						||
| 
								 | 
							
								        this.headWidthFactor = defaultParam.headWidthFactor;
							 | 
						||
| 
								 | 
							
								        this.neckWidthFactor = defaultParam.neckWidthFactor;
							 | 
						||
| 
								 | 
							
								        this.neckHeightFactor = defaultParam.neckHeightFactor;
							 | 
						||
| 
								 | 
							
								        var r = P.PlotUtils.getBaseLength(t),
							 | 
						||
| 
								 | 
							
								            n = r * this.headHeightFactor,
							 | 
						||
| 
								 | 
							
								            g = t[t.length - 1];
							 | 
						||
| 
								 | 
							
								        r = P.PlotUtils.distance(g, t[t.length - 2]);
							 | 
						||
| 
								 | 
							
								        var i = P.PlotUtils.distance(o, e);
							 | 
						||
| 
								 | 
							
								        n > i * this.headTailFactor && (n = i * this.headTailFactor);
							 | 
						||
| 
								 | 
							
								        var s = n * this.headWidthFactor,
							 | 
						||
| 
								 | 
							
								            a = n * this.neckWidthFactor;
							 | 
						||
| 
								 | 
							
								        n = n > r ? r : n;
							 | 
						||
| 
								 | 
							
								        var l = n * this.neckHeightFactor,
							 | 
						||
| 
								 | 
							
								            u = P.PlotUtils.getThirdPoint(t[t.length - 2], g, 0, n, !0),
							 | 
						||
| 
								 | 
							
								            c = P.PlotUtils.getThirdPoint(t[t.length - 2], g, 0, l, !0),
							 | 
						||
| 
								 | 
							
								            p = P.PlotUtils.getThirdPoint(g, u, P.Constants.HALF_PI, s, !1),
							 | 
						||
| 
								 | 
							
								            h = P.PlotUtils.getThirdPoint(g, u, P.Constants.HALF_PI, s, !0),
							 | 
						||
| 
								 | 
							
								            d = P.PlotUtils.getThirdPoint(g, c, P.Constants.HALF_PI, a, !1),
							 | 
						||
| 
								 | 
							
								            f = P.PlotUtils.getThirdPoint(g, c, P.Constants.HALF_PI, a, !0);
							 | 
						||
| 
								 | 
							
								        return [d, p, g, h, f]
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    xp.algorithm.getAttackArrowBodyPoints = function (t, o, e, r) {
							 | 
						||
| 
								 | 
							
								        for (var n = P.PlotUtils.wholeDistance(t), g = P.PlotUtils.getBaseLength(t), i = g * r, s = P.PlotUtils.distance(o, e), a = (i - s) / 2, l = 0, u = [], c = [], p = 1; p < t.length - 1; p++) {
							 | 
						||
| 
								 | 
							
								            var h = P.PlotUtils.getAngleOfThreePoints(t[p - 1], t[p], t[p + 1]) / 2;
							 | 
						||
| 
								 | 
							
								            l += P.PlotUtils.distance(t[p - 1], t[p]);
							 | 
						||
| 
								 | 
							
								            var d = (i / 2 - l / n * a) / Math.sin(h),
							 | 
						||
| 
								 | 
							
								                f = P.PlotUtils.getThirdPoint(t[p - 1], t[p], Math.PI - h, d, !0),
							 | 
						||
| 
								 | 
							
								                E = P.PlotUtils.getThirdPoint(t[p - 1], t[p], h, d, !1);
							 | 
						||
| 
								 | 
							
								            u.push(f),
							 | 
						||
| 
								 | 
							
								                c.push(E)
							 | 
						||
| 
								 | 
							
								        }
							 | 
						||
| 
								 | 
							
								        return u.concat(c)
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    xp.algorithm.dereplication = function (array) {
							 | 
						||
| 
								 | 
							
								        var last = array[array.length - 1];
							 | 
						||
| 
								 | 
							
								        var change = false;
							 | 
						||
| 
								 | 
							
								        var newArray = [];
							 | 
						||
| 
								 | 
							
								        newArray = array.filter(function (i) {
							 | 
						||
| 
								 | 
							
								            if (i[0] != last[0] && i[1] != last[1]) {
							 | 
						||
| 
								 | 
							
								                return i;
							 | 
						||
| 
								 | 
							
								            }
							 | 
						||
| 
								 | 
							
								            change = true;
							 | 
						||
| 
								 | 
							
								        });
							 | 
						||
| 
								 | 
							
								        if (change) newArray.push(last);
							 | 
						||
| 
								 | 
							
								        return newArray;
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    xp.algorithm.fineArrow = function (tailPoint, headerPoint) {
							 | 
						||
| 
								 | 
							
								        if ((tailPoint.length < 2) || (headerPoint.length < 2)) return;
							 | 
						||
| 
								 | 
							
								        //画箭头的函数
							 | 
						||
| 
								 | 
							
								        let tailWidthFactor = fineArrowDefualParam.tailWidthFactor;
							 | 
						||
| 
								 | 
							
								        let neckWidthFactor = fineArrowDefualParam.neckWidthFactor;
							 | 
						||
| 
								 | 
							
								        let headWidthFactor = fineArrowDefualParam.headWidthFactor;
							 | 
						||
| 
								 | 
							
								        let headAngle = fineArrowDefualParam.headAngle;
							 | 
						||
| 
								 | 
							
								        let neckAngle = fineArrowDefualParam.neckAngle;
							 | 
						||
| 
								 | 
							
								        var o = [];
							 | 
						||
| 
								 | 
							
								        o[0] = tailPoint;
							 | 
						||
| 
								 | 
							
								        o[1] = headerPoint;
							 | 
						||
| 
								 | 
							
								        e = o[0],
							 | 
						||
| 
								 | 
							
								            r = o[1],
							 | 
						||
| 
								 | 
							
								            n = P.PlotUtils.getBaseLength(o),
							 | 
						||
| 
								 | 
							
								            g = n * tailWidthFactor,
							 | 
						||
| 
								 | 
							
								            //尾部宽度因子
							 | 
						||
| 
								 | 
							
								            i = n * neckWidthFactor,
							 | 
						||
| 
								 | 
							
								            //脖子宽度银子
							 | 
						||
| 
								 | 
							
								            s = n * headWidthFactor,
							 | 
						||
| 
								 | 
							
								            //头部宽度因子
							 | 
						||
| 
								 | 
							
								            a = P.PlotUtils.getThirdPoint(r, e, P.Constants.HALF_PI, g, !0),
							 | 
						||
| 
								 | 
							
								            l = P.PlotUtils.getThirdPoint(r, e, P.Constants.HALF_PI, g, !1),
							 | 
						||
| 
								 | 
							
								            u = P.PlotUtils.getThirdPoint(e, r, headAngle, s, !1),
							 | 
						||
| 
								 | 
							
								            c = P.PlotUtils.getThirdPoint(e, r, headAngle, s, !0),
							 | 
						||
| 
								 | 
							
								            p = P.PlotUtils.getThirdPoint(e, r, neckAngle, i, !1),
							 | 
						||
| 
								 | 
							
								            h = P.PlotUtils.getThirdPoint(e, r, neckAngle, i, !0),
							 | 
						||
| 
								 | 
							
								            d = [];
							 | 
						||
| 
								 | 
							
								        d.push(a[0], a[1], p[0], p[1], u[0], u[1], r[0], r[1], c[0], c[1], h[0], h[1], l[0], l[1], e[0], e[1]);
							 | 
						||
| 
								 | 
							
								        return Cesium.Cartesian3.fromDegreesArray(d);
							 | 
						||
| 
								 | 
							
								    }
							 |