| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 | var mapUtil = mapUtil || {};const nullPoint = 65535;(function(_, joint) {    'use strict';    mapUtil.findElement = function (type, sn) {        let eles = graph.getElements();        for (let i in eles) {            let ele = eles[i];            let eleType = ele.get("type");            let eleSn = ele.attr("sn/id");            if (_.startsWith(eleType, type)) {                // console.log("ele", ele, eleType, eleSn, typeof(eleSn));                if (eleSn + "" === sn + "") {                    return ele;                }            }        }        return null;    };    mapUtil.findElements = function(type){        let eles = graph.getElements();        let rets = [];        for (let i in eles) {            let ele = eles[i];            let eleType = ele.get("type");            if (_.startsWith(eleType, type)) {                rets.push(ele)            }        }        return rets;    };    mapUtil.getAgv = function (sn) {        return mapUtil.findElement("agv", sn);    };    mapUtil.getStation = function (sn) {        return mapUtil.findElement("st", sn);    };    mapUtil.getPt = function (sn) {        return mapUtil.findElement("pt", sn)    };    mapUtil.isNotStation = function(element) {        let tp = element.get("type")        //console.log("tp", tp)        if (_.startsWith(tp, "st.")){            // console.log("is station")            return false        }        return true    };    mapUtil.getLink = function(linkId){        let links = graph.getLinks();        for (let i in links){            // let link = links[i];            let linkSn = links[i].attr("sn/id");            if(linkId + "" === linkSn){                return links[i];            }        }        return null;    };    mapUtil.getLinkView = function(paper, linkId){        let links = graph.getLinks();        for (let i in links){            // let link = links[i];            let linkSn = links[i].attr("sn/id");            if(linkId + "" === linkSn){                return links[i].findView(paper);            }        }        return null;    };    mapUtil.findLink = function(links, srcId, dstId) {        let l;        for (let i in links) {            l = links[i];            if ((l.source().id === srcId) && (l.target().id === dstId)) {                return l;            }        }        return null;    };    mapUtil.showAgvAtDefault = function (agv, agvId) {        agv.rotate(0, true);        agv.position(agvId * 100 + 500, 30);    };    mapUtil.showAgvPosition = function (status) {        let agvId = status.AgvId;        let stationId = status.Station;        let linkId = status.Point;        let CrossType = status.CrossType;        // 界面上找到AGV        let agv = mapUtil.getAgv(agvId);        agv.set("z", 9999);        agv.toFront();        // 如果AGV在站点上,则直接放置在站点上        if(stationId !== nullPoint){            let st = mapUtil.getStation(stationId);            if (st === null){                mapUtil.showAgvAtDefault(agv, agvId)                return;            }            let pos = st.position()            agv.rotate(0, true);            agv.position(pos.x, pos.y);            return;        }        // 查找对应的路线        let link = mapUtil.getLink(linkId);        if (link === null){            mapUtil.showAgvAtDefault(agv, agvId);            return;        }        let pose = link.attr("agv/pose");        let linkV = link.findView(paper);        let preAction = status.DRAction >> 4;        //let tangle = mapUtil.getTangentAngle(linkV.getTangentAtRatio(0.5));        //let angle = tangle - 180 + 90 * pose;        let isOutCross = false;        if (((CrossType === 2) && (pose === 1 || pose === 2))||((CrossType === 1) && (pose === 3 || pose === 4))){            isOutCross = true;        }        if(CrossType === 3 || isOutCross === true){            // 已经走到link后面的十字路口            let cross;            console.log("linkId", linkId, preAction, pose);            if(pose === preAction){                cross = link.getTargetElement();                console.log("t")            }else{                cross = link.getSourceElement();                console.log("s")            }            if (cross === null){                mapUtil.showAgvAtDefault(agv, agvId);                return;            }            let pos = cross.position();            agv.rotate(0, true);            agv.position(pos.x, pos.y);        }else{            // 放在link的中心线上            let pos = linkV.getPointAtRatio(0.5);            pos.x = pos.x - 15;            pos.y = pos.y - 15;            agv.rotate(0, true);            agv.position(pos.x, pos.y);        }    };    mapUtil.getTangentAngle = function (tangent) {        // 直角的边长        let x = tangent.end.x - tangent.start.x;        let y = tangent.end.y - tangent.start.y;        let ax = Math.abs(x);        let ay = Math.abs(y);        let an = Math.atan(Math.tan(ay/ax));        console.log("an", an);        // 斜边长        let z = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));        // 余弦        let cos = y / z;        // 弧度        let radina = Math.acos(cos);        console.log("radina", radina);        // 角度        let angle =  180 / (Math.PI / radina);        return angle;    }})(_, joint);
 |