123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659 |
- import {
- createTooltip
- } from "../../../common/common.js";
- import {
- isRuntimeApp,
- isRuntimeWeb,
- createOperationMainDom,
- showTooltipMessage
- } from "../../../common/RuntimeEnvironment.js";
- /*
- 九、绘制钳击箭头
- */
- class DrawPincerArrow {
- constructor(arg) {
- this.viewer = arg.viewer;
- this.Cesium = arg.Cesium;
- // this.callback=arg.callback;
- this.floatingPoint = null; //标识点
- this._PincerArrow = null; //活动箭头
- this._PincerArrowLast = null; //最后一个箭头
- this._positions = []; //活动点
- this._entities_point = []; //脏数据
- this._entities_PincerArrow = []; //脏数据
- this._PincerArrowData = null; //用于构造箭头数据
- this.DrawStartEvent = new Cesium.Event(); //开始绘制事件
- this.DrawEndEvent = new Cesium.Event(); //结束绘制事件
- this._tooltip = createTooltip(this.viewer.container);
- /* 通用参数集合 */
- this._param = {
- id: "DrawStraightArrow",
- polygonColor: 'rgba(0,255,0,0.5)', //面填充颜色
- outlineColor: 'rgba(255, 255, 255, 1)', //边框颜色
- outlineWidth: 1, //边框宽度
- }
- /* 创建面材质 */
- this.polygonMaterial = Cesium.Color.fromCssColorString(this._param.polygonColor);
- /* 创建线材质 */
- // this.outlineMaterial = new Cesium.PolylineDashMaterialProperty({//曲线
- // dashLength: 16,
- // color: Cesium.Color.fromCssColorString(this._param.outlineColor)
- // });
- this.outlineMaterial = Cesium.Color.fromCssColorString(this._param.outlineColor);
- }
- //返回箭头
- get PincerArrow() {
- return this._PincerArrowLast;
- }
- //返回箭头数据用于加载箭头
- getData() {
- return this._PincerArrowData;
- }
- //加载箭头
- addload(data) {
- var $this = this;
- if (data.length < 3) {
- return;
- }
- //计算面
- var res = $this.doubleArrow(data);
- var returnData = res.polygonalPoint;
- var arrowEntity = $this.viewer.entities.add({
- Type: 'DrawPincerArrow',
- Position: data,
- id: data.id || $this.objId,
- polygon: {
- hierarchy: new $this.Cesium.PolygonHierarchy(returnData),
- show: true,
- fill: true,
- clampToGround: true,
- material: $this.polygonMaterial
- }
- })
- return arrowEntity
- }
- // 修改编辑调用计算
- computePosition(data) {
- let $this = this
- var lnglatArr = [];
- for (var i = 0; i < data.length; i++) {
- var lnglat = $this.cartesianToLatlng(data[i]);
- lnglatArr.push(lnglat)
- }
- $this._PincerArrowData = lnglatArr;
- var res = $this.doubleArrow(lnglatArr);
- var returnData = res.polygonalPoint;
- return new $this.Cesium.PolygonHierarchy(returnData)
- }
- //开始创建
- startCreate(drawType) {
- if (isRuntimeApp()) {
- showTooltipMessage("点击开始绘制");
- }
- var $this = this;
- this.drawType = drawType;
- this.handler = new this.Cesium.ScreenSpaceEventHandler(this.viewer.scene.canvas);
- //单击开始绘制
- this.handler.setInputAction(function(evt) {
- if (isRuntimeApp()) {
- //屏幕坐标转地形上坐标
- var cartesian = $this.getCatesian3FromPX(evt.position);
- if (!cartesian) {
- return;
- }
- $this.createPoint(cartesian); // 绘制点
- $this._positions.push(cartesian);
- if ($this._positions.length < 3 || $this._positions.length === 4) {
- showTooltipMessage("点击添加点");
- }
- if ($this._positions.length === 2) {
- if (!$this.Cesium.defined($this._PincerArrow)) {
- $this._PincerArrow = $this.createPincerArrow();
- }
- }
- if ($this._positions.length === 3) {
- $this._positions.pop();
- $this._positions.push(cartesian);
- showTooltipMessage("点击添加点,点击完成按钮,结束绘制");
- //创建按钮
- createOperationMainDom();
- //隐藏回退按钮
- document.getElementById("btnDrawBackout").style.display = 'none';
- //完成绘制
- document.getElementById("btnDrawComplete").onclick = () => {
- $this._PincerArrowData = $this._positions.concat();
- $this.viewer.entities.remove($this._PincerArrow); //移除
- $this._PincerArrow = null;
- $this._positions = [];
- var lnglatArr = [];
- for (var i = 0; i < $this._PincerArrowData.length; i++) {
- var lnglat = $this.cartesianToLatlng($this._PincerArrowData[i]);
- lnglatArr.push(lnglat)
- }
- $this._PincerArrowData = lnglatArr;
- var pincerArrow = $this.addload(lnglatArr); //加载
- $this._entities_PincerArrow.push(pincerArrow);
- $this._PincerArrowLast = pincerArrow;
- $this.clearPoint();
- $this.destroy();
- let buttonDiv = document.getElementById("drawButtonDiv");
- if (buttonDiv) {
- //从页面移除
- document.body.removeChild(buttonDiv);
- }
- }
- }
- if ($this._positions.length === 5) {
- showTooltipMessage("点击完成按钮,结束绘制");
- $this.destroy();
- }
- } else {
- console.log('监听鼠标事件', '单击')
- /* 锁定点击事件 以免和双击事件冲突 */
- clearTimeout($this._timer);
- $this._timer = setTimeout(function() {
- var cartesian = $this.getCatesian3FromPX(evt.position);
- if (!cartesian) {
- return;
- }
- if ($this._positions.length == 0) {
- $this.floatingPoint = $this.createPoint(cartesian);
- }
- if ($this._positions.length < 5) {
- $this._positions.push(cartesian);
- $this.createPoint(cartesian); // 绘制点
- }
- if ($this._positions.length == 5) {
- $this._positions[4] = cartesian;
- $this.floatingPoint.position.setValue(cartesian);
- }
- }, 200);
- }
- }, $this.Cesium.ScreenSpaceEventType.LEFT_CLICK);
- //移动时绘制面
- this.handler.setInputAction(function(evt) {
- /* 如果运行环境是App 则禁止使用鼠标移动事件 */
- if (isRuntimeApp()) return;
- if ($this._positions.length == 0) {
- $this._tooltip.showAt(evt.endPosition, "点击开始绘制");
- } else {
- $this._tooltip.showAt(evt.endPosition, "点击添加点");
- }
- var cartesian = $this.getCatesian3FromPX(evt.endPosition);
- if (!cartesian) return;
- if ($this._positions.length < 2) return;
- if (!$this.Cesium.defined($this._PincerArrow)) {
- if ($this._positions.length == 2) {
- $this._positions.push(cartesian);
- }
- $this._PincerArrow = $this.createPincerArrow();
- }
- $this.floatingPoint.position.setValue(cartesian);
- if ($this._positions.length == 3) {
- $this._positions[2] = cartesian;
- // $this._tooltip.showAt(evt.endPosition, "点击添加点,右键删除点,双击结束绘制");
- $this._tooltip.showAt(evt.endPosition, "点击添加点,双击结束绘制");
- }
- if ($this._positions.length > 3) {
- $this._positions.pop();
- $this._positions.push(cartesian);
- if ($this._positions === 4) {
- $this._tooltip.showAt(evt.endPosition, "点击添加点");
- }
- if ($this._positions.length == 5) {
- $this._tooltip.showAt(evt.endPosition, "双击结束绘制");
- }
- }
- console.log($this._positions.length);
- }, $this.Cesium.ScreenSpaceEventType.MOUSE_MOVE);
- //右键结束改为双击结束
- this.handler.setInputAction(function(evt) {
- // if (!$this._PincerArrow) {
- // return
- // } else {
- // // if(typeof $this.callback=="function"){
- // // $this.callback();
- // // }
- // };
- // var cartesian = $this.getCatesian3FromPX(evt.position);
- // if (!cartesian) return;
- // $this._positions.pop();
- // $this._positions.push(cartesian);
- // $this._PincerArrowData = $this._positions.concat();
- // $this.viewer.entities.remove($this._PincerArrow); //移除
- // $this._PincerArrow = null;
- // $this._positions = [];
- // $this.floatingPoint.position.setValue(cartesian);
- // var lnglatArr = [];
- // for (var i = 0; i < $this._PincerArrowData.length; i++) {
- // var lnglat = $this.cartesianToLatlng($this._PincerArrowData[i]);
- // lnglatArr.push(lnglat)
- // }
- // $this._PincerArrowData = lnglatArr;
- // var pincerArrow = $this.addload(lnglatArr); //加载
- // $this._entities_PincerArrow.push(pincerArrow);
- // $this._PincerArrowLast = pincerArrow;
- // $this.clearPoint();
- // $this.destroy();
- }, $this.Cesium.ScreenSpaceEventType.RIGHT_CLICK);
- //双击结束
- this.handler.setInputAction(function(evt) {
- /* 如果运行环境是App 则禁止使用鼠标双击事件 */
- if (isRuntimeApp()) return;
- console.log('监听鼠标事件', '双击')
- /* 解除锁定 */
- clearTimeout($this._timer);
- if (!$this._PincerArrow) {
- return
- } else {
- // if(typeof $this.callback=="function"){
- // $this.callback();
- // }
- };
- var cartesian = $this.getCatesian3FromPX(evt.position);
- if (!cartesian) return;
- $this._positions.pop();
- // $this._positions.push(cartesian);
- $this._PincerArrowData = $this._positions.concat();
- $this.viewer.entities.remove($this._PincerArrow); //移除
- $this._PincerArrow = null;
- $this._positions = [];
- $this.floatingPoint.position.setValue(cartesian);
- var lnglatArr = [];
- for (var i = 0; i < $this._PincerArrowData.length; i++) {
- var lnglat = $this.cartesianToLatlng($this._PincerArrowData[i]);
- lnglatArr.push(lnglat)
- }
- $this._PincerArrowData = lnglatArr;
- var pincerArrow = $this.addload(lnglatArr); //加载
- $this._entities_PincerArrow.push(pincerArrow);
- $this._PincerArrowLast = pincerArrow;
- $this.clearPoint();
- $this.destroy();
- $this._tooltip.setVisible(false);
- }, $this.Cesium.ScreenSpaceEventType.LEFT_DOUBLE_CLICK);
- }
- //创建钳击箭头
- createPincerArrow() {
- var $this = this;
- $this._computeTempPositions();
- var arrowEntity = $this.viewer.entities.add({
- polygon: {
- hierarchy: new $this.Cesium.CallbackProperty(
- function() {
- //计算面
- var lnglatArr = [];
- for (var i = 0; i < $this._positions.length; i++) {
- var lnglat = $this.cartesianToLatlng($this._positions[i]);
- lnglatArr.push(lnglat)
- }
- var res = $this.doubleArrow(lnglatArr);
- var returnData = res.polygonalPoint;
- return new $this.Cesium.PolygonHierarchy(returnData);
- }, false),
- show: true,
- fill: true,
- clampToGround: true,
- material: $this.polygonMaterial
- }
- })
- $this._entities_PincerArrow.push(arrowEntity);
- return arrowEntity
- }
- //创建点
- createPoint(cartesian) {
- var $this = this;
- var point = this.viewer.entities.add({
- position: cartesian,
- point: {
- pixelSize: 10,
- color: $this.Cesium.Color.RED,
- heightReference: Cesium.HeightReference.CLAMP_TO_GROUND,
- }
- });
- $this._entities_point.push(point);
- return point;
- }
- cartesianToLatlng(cartesian) {
- let cartographic = this.viewer.scene.globe.ellipsoid.cartesianToCartographic(cartesian);
- let lat = this.Cesium.Math.toDegrees(cartographic.latitude);
- let lng = this.Cesium.Math.toDegrees(cartographic.longitude);
- let alt = cartographic.height;
- return [lng, lat, alt];
- }
- //销毁
- destroy() {
- if (this.handler) {
- this.handler.destroy();
- this.handler = null;
- }
- }
- clearPoint() {
- this.DrawEndEvent.raiseEvent(this._PincerArrowLast, this._PincerArrowData, this.drawType);
- for (var i = 0; i < this._entities_point.length; i++) {
- this.viewer.entities.remove(this._entities_point[i]);
- }
- this._entities_point = []; //脏数据
- }
- //清空实体对象
- clear() {
- for (var i = 0; i < this._entities_point.length; i++) {
- this.viewer.entities.remove(this._entities_point[i]);
- }
- for (var i = 0; i < this._entities_PincerArrow.length; i++) {
- this.viewer.entities.remove(this._entities_PincerArrow[i]);
- }
- this.floatingPoint = null; //标识点
- this._PincerArrow = null; //活动箭头
- this._PincerArrowLast = null; //最后一个箭头
- this._positions = []; //活动点
- this._entities_point = []; //脏数据
- this._entities_PincerArrow = []; //脏数据
- this._PincerArrowData = null; //用于构造箭头数据
- }
- getCatesian3FromPX(px) {
- var cartesian;
- var ray = this.viewer.camera.getPickRay(px);
- if (!ray) return null;
- cartesian = this.viewer.scene.globe.pick(ray, this.viewer.scene);
- return cartesian;
- }
- _computeTempPositions() {
- var _this = this;
- var pnts = [].concat(_this._positions);
- var num = pnts.length;
- var first = pnts[0];
- var last = pnts[num - 1];
- if (_this._isSimpleXYZ(first, last) == false) {
- pnts.push(first);
- num += 1;
- }
- _this.tempPositions = [];
- for (var i = 1; i < num; i++) {
- var p1 = pnts[i - 1];
- var p2 = pnts[i];
- var cp = _this._computeCenterPotition(p1, p2);
- _this.tempPositions.push(p1);
- _this.tempPositions.push(cp);
- }
- }
- _isSimpleXYZ(p1, p2) {
- if (p1.x == p2.x && p1.y == p2.y && p1.z == p2.z) {
- return true;
- }
- return false;
- }
- _computeCenterPotition(p1, p2) {
- var _this = this;
- var c1 = _this.viewer.scene.globe.ellipsoid.cartesianToCartographic(p1);
- var c2 = _this.viewer.scene.globe.ellipsoid.cartesianToCartographic(p2);
- var cm = new _this.Cesium.EllipsoidGeodesic(c1, c2).interpolateUsingFraction(0.5);
- var cp = _this.viewer.scene.globe.ellipsoid.cartographicToCartesian(cm);
- return cp;
- }
- ////////////////////////////////////////求取箭头坐标函数/////////////////////////////////////////////////////
- //箭头配置函数
- doubleArrow(inputPoint) {
- var $this = this;
- 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 = $this.getTempPoint4(o, e, r) : this.tempPoint4 = this.points[3],
- 3 == t || 4 == t ? this.connPoint = $this.mid(o, e) : this.connPoint = this.points[4];
- var n, g;
- $this.isClockWise(o, e, r) ? (n = $this.getArrowPoints(o, this.connPoint, this.tempPoint4, !1), g = $this.getArrowPoints(this.connPoint, e, r, !0)) : (n = $this.getArrowPoints(e, this.connPoint, r, !1), g = $this.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 = $this.getBezierPoints(c);
- var d = $this.getBezierPoints(h.concat(a.slice(1)));
- u = $this.getBezierPoints(u);
- var f = c.concat(p, d, l, u);
- var newArray = $this.array2Dto1D(f);
- result.controlPoint = [o, e, r, this.tempPoint4, this.connPoint];
- result.polygonalPoint = $this.Cesium.Cartesian3.fromDegreesArray(newArray);
- }
- return result;
- }
- getTempPoint4(t, o, e) {
- var $this = this;
- var r, n, g, i, s = $this.mid(t, o),
- a = $this.distance(s, e),
- l = $this.getAngleOfThreePoints(t, s, e);
- return l < Math.PI / 2 ? (n = a * Math.sin(l), g = a * Math.cos(l), i = $this.getThirdPoint(t, s, Math.PI / 2, n, !1), r = $this.getThirdPoint(s, i, Math.PI / 2, g, !0)) : l >= Math.PI / 2 && l < Math.PI ? (n = a * Math.sin(Math.PI - l), g = a * Math.cos(Math.PI - l), i = $this.getThirdPoint(t, s, Math.PI / 2, n, !1), r = $this.getThirdPoint(s, i, Math.PI / 2, 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 = $this.getThirdPoint(t, s, Math.PI / 2, n, !0), r = $this.getThirdPoint(s, i, Math.PI / 2, g, !0)) : (n = a * Math.sin(2 * Math.PI - l), g = a * Math.cos(2 * Math.PI - l), i = $this.getThirdPoint(t, s, Math.PI / 2, n, !0), r = $this.getThirdPoint(s, i, Math.PI / 2, g, !1)),
- r
- }
- mid(t, o) {
- return [(t[0] + o[0]) / 2, (t[1] + o[1]) / 2]
- }
- isClockWise(t, o, e) {
- return (e[1] - t[1]) * (o[0] - t[0]) > (o[1] - t[1]) * (e[0] - t[0])
- }
- getArrowPoints(t, o, e, r) {
- var $this = this;
- var doubleArrowDefualParam = {
- type: "doublearrow",
- headHeightFactor: .25,
- headWidthFactor: .3,
- neckHeightFactor: .85,
- fixPointCount: 4,
- neckWidthFactor: .15
- }
- this.type = doubleArrowDefualParam.type,
- this.headHeightFactor = doubleArrowDefualParam.headHeightFactor,
- this.headWidthFactor = doubleArrowDefualParam.headWidthFactor,
- this.neckHeightFactor = doubleArrowDefualParam.neckHeightFactor,
- this.neckWidthFactor = doubleArrowDefualParam.neckWidthFactor;
- var n = $this.mid(t, o),
- g = $this.distance(n, e),
- i = $this.getThirdPoint(e, n, 0, .3 * g, !0),
- s = $this.getThirdPoint(e, n, 0, .5 * g, !0);
- i = $this.getThirdPoint(n, i, Math.PI / 2, g / 5, r),
- s = $this.getThirdPoint(n, s, Math.PI / 2, g / 4, r);
- var a = [n, i, s, e],
- l = $this.getArrowHeadPoints(a, this.headHeightFactor, this.headWidthFactor, this.neckHeightFactor, this.neckWidthFactor),
- u = l[0],
- c = l[4],
- p = $this.distance(t, o) / $this.getBaseLength(a) / 2,
- h = $this.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)
- }
- getArrowHeadPoints(t, o, e) {
- var $this = this;
- var doubleArrowDefualParam = {
- type: "doublearrow",
- headHeightFactor: .25,
- headWidthFactor: .3,
- neckHeightFactor: .85,
- fixPointCount: 4,
- neckWidthFactor: .15
- }
- this.type = doubleArrowDefualParam.type,
- this.headHeightFactor = doubleArrowDefualParam.headHeightFactor,
- this.headWidthFactor = doubleArrowDefualParam.headWidthFactor,
- this.neckHeightFactor = doubleArrowDefualParam.neckHeightFactor,
- this.neckWidthFactor = doubleArrowDefualParam.neckWidthFactor;
- var r = $this.getBaseLength(t),
- n = r * this.headHeightFactor,
- g = t[t.length - 1],
- i = ($this.distance(o, e), n * this.headWidthFactor),
- s = n * this.neckWidthFactor,
- a = n * this.neckHeightFactor,
- l = $this.getThirdPoint(t[t.length - 2], g, 0, n, !0),
- u = $this.getThirdPoint(t[t.length - 2], g, 0, a, !0),
- c = $this.getThirdPoint(g, l, Math.PI / 2, i, !1),
- p = $this.getThirdPoint(g, l, Math.PI / 2, i, !0),
- h = $this.getThirdPoint(g, u, Math.PI / 2, s, !1),
- d = $this.getThirdPoint(g, u, Math.PI / 2, s, !0);
- return [h, c, g, p, d];
- }
- getArrowBodyPoints(t, o, e, r) {
- var $this = this;
- for (var n = $this.wholeDistance(t), g = $this.getBaseLength(t), i = g * r, s = $this.distance(o, e), a = (i - s) / 2, l = 0, u = [], c = [], p = 1; p < t.length - 1; p++) {
- var h = $this.getAngleOfThreePoints(t[p - 1], t[p], t[p + 1]) / 2;
- l += $this.distance(t[p - 1], t[p]);
- var d = (i / 2 - l / n * a) / Math.sin(h),
- f = $this.getThirdPoint(t[p - 1], t[p], Math.PI - h, d, !0),
- E = $this.getThirdPoint(t[p - 1], t[p], h, d, !1);
- u.push(f), c.push(E)
- }
- return u.concat(c)
- }
- getBezierPoints(t) {
- if (t.length <= 2) return t;
- for (var o = [], e = t.length - 1, r = 0; 1 >= r; r += .01) {
- for (var n = 0, y = 0, g = 0; e >= g; g++) {
- var i = this.getBinomialFactor(e, g),
- s = Math.pow(r, g),
- a = Math.pow(1 - r, e - g);
- n += i * s * a * t[g][0], y += i * s * a * t[g][1]
- }
- o.push([n, y])
- }
- return o.push(t[e]), o
- }
- getBaseLength(t) {
- return Math.pow(this.wholeDistance(t), .99)
- }
- wholeDistance(t) {
- for (var o = 0, e = 0; e < t.length - 1; e++) o += this.distance(t[e], t[e + 1]);
- return o
- }
- getBinomialFactor(t, o) {
- return this.getFactorial(t) / (this.getFactorial(o) * this.getFactorial(t - o))
- }
- getFactorial(t) {
- if (1 >= t) return 1;
- if (2 == t) return 2;
- if (3 == t) return 6;
- if (4 == t) return 24;
- if (5 == t) return 120;
- for (var o = 1, e = 1; t >= e; e++) o *= e;
- return o
- }
- array2Dto1D(array) {
- var newArray = [];
- array.forEach(function(elt) {
- newArray.push(elt[0]);
- newArray.push(elt[1]);
- });
- return newArray;
- }
- distance(t, o) {
- return Math.sqrt(Math.pow(t[0] - o[0], 2) + Math.pow(t[1] - o[1], 2))
- }
- getAngleOfThreePoints(t, o, e) {
- var r = this.getAzimuth(o, t) - this.getAzimuth(o, e);
- return 0 > r ? r + 2 * Math.PI : r
- }
- getAzimuth(t, o) {
- var e, r = Math.asin(Math.abs(o[1] - t[1]) / this.distance(t, o));
- return o[1] >= t[1] && o[0] >= t[0] ? e = r + Math.PI : o[1] >= t[1] && o[0] < t[0] ? e = 2 * Math.PI - r : o[1] < t[1] && o[0] < t[0] ? e = r : o[1] < t[1] && o[0] >= t[0] && (e = Math.PI - r), e
- }
- getThirdPoint(t, o, e, r, n) {
- var g = this.getAzimuth(t, o),
- i = n ? g + e : g - e,
- s = r * Math.cos(i),
- a = r * Math.sin(i);
- return [o[0] + s, o[1] + a]
- }
- }
- export default DrawPincerArrow
|