123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773 |
- import { Message } from 'element-ui'
- /*
- * ********************
- * 通用疏散布局方法封装
- * ********************
- */
- /*
- ******************* mapList-数据格式 *******************
- { name:"实验室房间",
- y: 101,
- x: 1,
- w: 100,
- h: 100,
- type: '1',//1房间2楼道3疏散通道
- direction: '1',//1上2右3下4左
- doorList:[{
- h:40,
- toward:"right",
- type:"door",
- w:10,
- x:90,
- y:22,
- }],
- },
- {
- name:"疏散通道",
- y: 101,
- x: 801,
- w: 100,
- h: 100,
- type: '3',//1房间2楼道3疏散通道
- direction: '1',//1上2右3下4左
- doorList:[
- {
- h:40,
- toward:"left",
- type:"door",
- w:10,
- x:0,
- y:34,
- }
- ],
- },
- {
- name:"l01",
- y: 101,
- x: 101,
- w: 100,
- h: 500,
- type: '2',//1房间2楼道3疏散通道
- direction: '1',//1上2右3下4左
- lightList:[
- { type:'lab',w:4,h:4,x:100,y:100},//实验室门点
- { type:'escape',w:4,h:4,x:100,y:100,},//疏散通道门点
- { type:'light',state:'',w:100,h:100,x:100,y:100,},//灯点
- { type:'traffic',w:4,h:4,x:lx,y:ly,},//交通点
- { type:'connect',w:4,h:4,x:0,y:100}//连接点
- ],
- },
- */
- /************************************全局变量/刷新方法************************************/
- //边界位置
- let borderLeft = null
- let borderTop = null
- //画布/楼层尺寸
- let layerWidth = null
- let layerHeight = null
- //房间尺寸限制
- let minHeight = null
- let maxHeight = null
- let minWidth = null
- let maxWidth = null
- //门尺寸数据
- let doorHeight = null
- let doorWidth = null
- //灯尺寸数据
- let minLightNum = null
- let maxLightNum = null
- //交通点检测时触手范围
- let tentaclesLength = null
- //缩放形状判断
- let zoomType = null
- export function setJsData(data) {
- borderLeft = data.borderLeft
- borderTop = data.borderTop
- layerWidth = data.layerWidth
- layerHeight = data.layerHeight
- minHeight = data.minHeight
- maxHeight = data.maxHeight
- minWidth = data.minWidth
- maxWidth = data.maxWidth
- doorWidth = data.doorWidth
- doorHeight = data.doorHeight
- minLightNum = data.minLightNum
- maxLightNum = data.maxLightNum
- tentaclesLength = data.tentaclesLength
- }
- /************************************生成点/点连接 相关************************************/
- /*
- * 计算目标交通点位置
- * 传入:newMapList-布局数据
- * 返回:处理好的数据
- * 示例:
- * let obj = addDoorPoint(newMapList)
- */
- export function addDoorPoint(newMapList) {
- let labNum = 0;
- let escapeNum = 0;
- let corridorNum = 0;
- let lightNum = 0;
- let evacuationList = JSON.parse(JSON.stringify(newMapList));
- for (let i = 0; i < newMapList.length; i++) {
- if (newMapList[i].type == 1 || newMapList[i].type == 3) {
- if(newMapList[i].type == 1){
- newMapList[i].key = 'lab'+labNum;
- evacuationList[i].key = 'lab'+labNum;
- labNum++
- }else if(newMapList[i].type == 3){
- newMapList[i].key = 'escape'+escapeNum;
- evacuationList[i].key = 'escape'+escapeNum;
- escapeNum++
- }
- //生成门点
- let x = 0
- let y = 0
- if (newMapList[i].doorList[0].toward == 'top') {
- x = newMapList[i].x + newMapList[i].doorList[0].x + (doorWidth / 2)
- y = newMapList[i].y - tentaclesLength
- } else if (newMapList[i].doorList[0].toward == 'bottom') {
- x = newMapList[i].x + newMapList[i].doorList[0].x + (doorWidth / 2)
- y = newMapList[i].y + newMapList[i].h + tentaclesLength
- } else if (newMapList[i].doorList[0].toward == 'left') {
- x = newMapList[i].x - tentaclesLength
- y = newMapList[i].y + newMapList[i].doorList[0].y + (doorHeight / 2)
- } else if (newMapList[i].doorList[0].toward == 'right') {
- x = newMapList[i].x + newMapList[i].w + tentaclesLength
- y = newMapList[i].y + newMapList[i].doorList[0].y + (doorHeight / 2)
- }
- for (let j = 0; j < newMapList.length; j++) {
- if (newMapList[j].type == 2) {
- if (x > newMapList[j].x && x < (newMapList[j].x + newMapList[j].w) &&
- y > newMapList[j].y && y < (newMapList[j].y + newMapList[j].h)) {
- let lx = null
- let ly = null
- if (newMapList[i].doorList[0].toward == 'top') {
- let obj = calculateDoorPoint(newMapList[j], newMapList[i], 'top')
- lx = obj.x
- ly = obj.y
- } else if (newMapList[i].doorList[0].toward == 'bottom') {
- let obj = calculateDoorPoint(newMapList[j], newMapList[i], 'bottom')
- lx = obj.x
- ly = obj.y
- } else if (newMapList[i].doorList[0].toward == 'left') {
- let obj = calculateDoorPoint(newMapList[j], newMapList[i], 'left')
- lx = obj.x
- ly = obj.y
- } else if (newMapList[i].doorList[0].toward == 'right') {
- let obj = calculateDoorPoint(newMapList[j], newMapList[i], 'right')
- lx = obj.x
- ly = obj.y
- }
- newMapList[j].lightList.push({
- // key:newMapList[i].type == 1 ? 'lab'+labNum : 'escape'+escapeNum,
- key:newMapList[i].key,
- type: newMapList[i].type == 1 ? 'lab' : 'escape',
- w: 4,
- h: 4,
- x: lx,
- y: ly
- })
- }
- }
- }
- } else if (newMapList[i].type == 2) {
- evacuationList[i].key = 'corridor'+corridorNum;
- corridorNum++
- //生成交通点
- let x1 = null
- let y1 = null
- let x2 = null
- let y2 = null
- if (newMapList[i].w > newMapList[i].h) {
- x1 = newMapList[i].x - tentaclesLength
- y1 = newMapList[i].y + newMapList[i].h / 2
- x2 = newMapList[i].x + newMapList[i].w + tentaclesLength
- y2 = newMapList[i].y + newMapList[i].h / 2
- } else {
- x1 = newMapList[i].x + newMapList[i].w / 2
- y1 = newMapList[i].y - tentaclesLength
- x2 = newMapList[i].x + newMapList[i].w / 2
- y2 = newMapList[i].y + newMapList[i].h + tentaclesLength
- }
- for (let j = 0; j < newMapList.length; j++) {
- if (newMapList[j].type == 2) {
- let lx = null
- let ly = null
- if (x1 > newMapList[j].x && x1 < (newMapList[j].x + newMapList[j].w) &&
- y1 > newMapList[j].y && y1 < (newMapList[j].y + newMapList[j].h)) {
- let obj = calculateTrafficPoint(x1, y1, newMapList[j])
- lx = obj.x
- ly = obj.y
- let num = 0
- for (let o = 0; o < newMapList[j].lightList.length; o++) {
- if (newMapList[j].lightList[o].x == lx && newMapList[j].lightList[o].y == ly) {
- num++
- }
- }
- if (num == 0) {
- newMapList[j].lightList.push({
- type: 'traffic',
- w: 4,
- h: 4,
- x: lx,
- y: ly
- })
- }
- if (newMapList[i].w > newMapList[i].h) {
- newMapList[i].lightList.push({
- type: 'connect',
- w: 4,
- h: 4,
- x: 0,
- y: newMapList[i].h / 2
- })
- } else {
- newMapList[i].lightList.push({
- type: 'connect',
- w: 4,
- h: 4,
- x: newMapList[i].w / 2,
- y: 0
- })
- }
- } else if (x2 > newMapList[j].x && x2 < (newMapList[j].x + newMapList[j].w) &&
- y2 > newMapList[j].y && y2 < (newMapList[j].y + newMapList[j].h)) {
- let obj = calculateTrafficPoint(x2, y2, newMapList[j])
- lx = obj.x
- ly = obj.y
- let num = 0
- for (let o = 0; o < newMapList[j].lightList.length; o++) {
- if (newMapList[j].lightList[o].x == lx && newMapList[j].lightList[o].y == ly) {
- num++
- }
- }
- if (num == 0) {
- newMapList[j].lightList.push({
- type: 'traffic',
- w: 4,
- h: 4,
- x: lx,
- y: ly
- })
- }
- if (newMapList[i].w > newMapList[i].h) {
- newMapList[i].lightList.push({
- type: 'connect',
- w: 4,
- h: 4,
- x: newMapList[i].w - 4,
- y: newMapList[i].h / 2
- })
- } else {
- newMapList[i].lightList.push({
- type: 'connect',
- w: 4,
- h: 4,
- x: newMapList[i].w / 2,
- y: newMapList[i].h - 4
- })
- }
- }
- }
- }
- for (let s = 0; s < newMapList[i].lightList.length; s++){
- if( newMapList[i].lightList[s].type == "light"){
- newMapList[i].lightList[s].key = 'light'+lightNum;
- evacuationList[i].lightList[s].key = 'light'+lightNum;
- lightNum++
- }
- }
- }
- }
- return { mapList: newMapList, newList: connectionPoint(newMapList),evacuationList:evacuationList }
- }
- /*
- * 计算目标交通点位置
- * 传入:x-落点X,y-落点Y,obj-目标数据,
- * 返回:一个对象,里面包含x与y
- * 示例: (本方法没有再外部引用,只在本JS内由 addDoorPoint 方法引用)
- * let obj = calculateTrafficPoint(x1,y1,newMapList[j]);
- */
- export function calculateTrafficPoint(x, y, obj) {
- let newObj = { x: null, y: null }
- if (obj.w > obj.h) {
- newObj.x = x - obj.x
- newObj.y = obj.h / 2
- } else {
- newObj.x = obj.w / 2
- newObj.y = y - obj.y
- }
- return newObj
- }
- /*
- * 计算门点位置
- * 传入:bigObj-父级对象,minObj-子级对象,type-朝向,
- * 返回:一个对象,里面包含x与y
- * 示例: (本方法没有再外部引用,只在本JS内由 addDoorPoint 方法引用)
- * let obj = calculateDoorPoint(newMapList[j],newMapList[i],'right')
- */
- export function calculateDoorPoint(bigObj, minObj, type) {
- //bigObj 范围大的一方 minObj范围小的一方
- let obj = { x: null, y: null }
- if (bigObj.w > bigObj.h) {
- if (type == 'top' || type == 'bottom') {
- obj.x = minObj.x - bigObj.x + minObj.doorList[0].x + doorWidth / 2
- obj.y = bigObj.h / 2
- } else if (type == 'left') {
- obj.x = bigObj.w - 6
- obj.y = bigObj.h / 2
- } else if (type == 'right') {
- obj.x = 2
- obj.y = bigObj.h / 2
- }
- } else {
- if (type == 'top') {
- obj.x = bigObj.w / 2
- obj.y = bigObj.h - 6
- } else if (type == 'bottom') {
- obj.x = bigObj.w / 2
- obj.y = 2
- } else if (type == 'left' || type == 'right') {
- obj.x = bigObj.w / 2
- obj.y = minObj.y - bigObj.y + minObj.doorList[0].y + doorHeight / 2
- }
- }
- return obj
- }
- /*
- * 连接点路径
- * 传入:newMapList-布局数据
- * 返回:返回连接好路径的数组
- * 示例: (本方法没有再外部引用,只在本JS内由 addDoorPoint 方法引用)
- * connectionPoint(newMapList);
- */
- export function connectionPoint(newMapList) {
- let list = []
- let doorNum = 0
- let escapeNum = 0
- let lightNum = 0
- let trafficNum = 0
- let trafficNumOne = 0
- // 绑定名称
- for (let i = 0; i < newMapList.length; i++) {
- if (newMapList[i].type == 2) {
- for (let j = 0; j < newMapList[i].lightList.length; j++) {
- if (newMapList[i].lightList[j].type == 'lab') {
- // newMapList[i].lightList[j].name = 'lab' + doorNum
- newMapList[i].lightList[j].name = newMapList[i].lightList[j].key
- newMapList[i].lightList[j].type = 'lab'
- doorNum++
- }
- if (newMapList[i].lightList[j].type == 'escape') {
- // newMapList[i].lightList[j].name = 'escape' + escapeNum
- newMapList[i].lightList[j].name = newMapList[i].lightList[j].key
- newMapList[i].lightList[j].type = 'escape'
- escapeNum++
- } else if (newMapList[i].lightList[j].type == 'light') {
- // newMapList[i].lightList[j].name = 'light' + lightNum
- newMapList[i].lightList[j].name = newMapList[i].lightList[j].key
- newMapList[i].lightList[j].type = 'light'
- lightNum++
- } else if (newMapList[i].lightList[j].type == 'traffic') {
- newMapList[i].lightList[j].name = 'traffic' + trafficNum
- newMapList[i].lightList[j].type = 'traffic'
- trafficNum++
- } else if (newMapList[i].lightList[j].type == 'connect') {
- newMapList[i].lightList[j].name = 'connect' + trafficNumOne
- newMapList[i].lightList[j].type = 'connect'
- trafficNumOne++
- }
- }
- }
- }
- for (let i = 0; i < newMapList.length; i++) {
- if (newMapList[i].type == 2) {
- for (let j = 0; j < newMapList[i].lightList.length; j++) {
- list.push(calculateAssociatedLength(newMapList, newMapList[i], newMapList[i].lightList[j]))
- }
- }
- }
- return list
- }
- /*
- * 计算关联/长度
- * 传入:newMapList-布局数据,bigObj-父级对象,minObj-子级对象
- * 返回:处理好关系的对象
- * 示例: (本方法没有再外部引用,只在本JS内由 connectionPoint 方法引用)
- * calculateAssociatedLength(newMapList,newMapList[i],newMapList[i].lightList[j])
- */
- export function calculateAssociatedLength(newMapList, bigObj, minObj) {
- let obj = {
- pointName: minObj.name,
- pointDistance: -1,
- pointAttribute: minObj.type == 'escape' ? 1 : (minObj.type == 'light' ? 2 : minObj.type == 'lab' ? 4 : 3),
- pointVOList: []
- }
- if(minObj.type == 'escape' || minObj.type == 'lab'){
- obj.key = minObj.key;
- }else if(minObj.type == 'light'){
- obj.key = minObj.key;
- }
- //按顺序写入假数据
- for (let i = 0; i < newMapList.length; i++) {
- if (newMapList[i].type == 2) {
- for (let j = 0; j < newMapList[i].lightList.length; j++) {
- obj.pointVOList.push({
- pointName: newMapList[i].lightList[j].name,
- pointDistance: newMapList[i].lightList[j].name === minObj.name ? 0 : 65535,
- pointAttribute: newMapList[i].lightList[j].type == 'escape' ? 1 : (newMapList[i].lightList[j].type == 'light' ? 2 : newMapList[i].lightList[j].type == 'lab' ? 4 : 3)
- })
- }
- }
- }
- const x = minObj.x
- const y = minObj.y
- //行径方向判定
- if (bigObj.w > bigObj.h) {
- //横向查找最近点
- let min = null
- let max = null
- for (let i = 0; i < bigObj.lightList.length; i++) {
- if (bigObj.lightList[i].x > x) {
- //右最近
- if (max) {
- if (max.x > bigObj.lightList[i].x) {
- if (bigObj.lightList[i].name !== minObj.name) {
- if (bigObj.lightList[i].type == 'light') {
- if (bigObj.lightList[i].state != '3') {
- max = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- } else {
- max = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- }
- }
- } else {
- if (bigObj.lightList[i].name !== minObj.name) {
- if (bigObj.lightList[i].type == 'light') {
- if (bigObj.lightList[i].state != '3') {
- max = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- } else {
- max = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- }
- }
- } else {
- //左最近
- if (min) {
- if (min.x < bigObj.lightList[i].x) {
- if (bigObj.lightList[i].name !== minObj.name) {
- if (bigObj.lightList[i].type == 'light') {
- if (bigObj.lightList[i].state != '4') {
- min = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- } else {
- min = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- }
- }
- } else {
- if (bigObj.lightList[i].name !== minObj.name) {
- if (bigObj.lightList[i].type == 'light') {
- if (bigObj.lightList[i].state != '4') {
- min = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- } else {
- min = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- }
- }
- }
- }
- if (min != null) {
- obj.pointVOList[lookingTargetReturnSubscript(min.name, obj.pointVOList)].pointDistance = minObj.x - min.x
- }
- if (max != null) {
- obj.pointVOList[lookingTargetReturnSubscript(max.name, obj.pointVOList)].pointDistance = max.x - minObj.x
- }
- //如果是交通端点-进行跨域连接
- if (minObj.type == 'connect') {
- for (let j = 0; j < newMapList.length; j++) {
- if (newMapList[j].type == 2) {
- for (let k = 0; k < newMapList[j].lightList.length; k++) {
- if (newMapList[j].lightList[k].type == 'traffic') {
- let lx = newMapList[j].x + newMapList[j].lightList[k].x
- let ly = newMapList[j].y + newMapList[j].lightList[k].y
- if (minObj.x > (bigObj.w / 2)) {
- //向右延展
- if (lx > (bigObj.x + bigObj.w) && lx < (bigObj.x + bigObj.w + minWidth) && ly > (bigObj.y + minObj.y - 1) && ly < (bigObj.y + minObj.y + 1)) {
- obj.pointVOList[lookingTargetReturnSubscript(newMapList[j].lightList[k].name, obj.pointVOList)].pointDistance = lx - bigObj.x - minObj.x
- }
- } else {
- //向左延展
- if (lx > (bigObj.x - minWidth) && lx < bigObj.x && ly > (bigObj.y + minObj.y - 1) && ly < (bigObj.y + minObj.y + 1)) {
- obj.pointVOList[lookingTargetReturnSubscript(newMapList[j].lightList[k].name, obj.pointVOList)].pointDistance = (bigObj.x + minObj.x) - lx
- }
- }
- }
- }
- }
- }
- } else if (minObj.type == 'traffic') {
- for (let j = 0; j < newMapList.length; j++) {
- if (newMapList[j].type == 2) {
- for (let k = 0; k < newMapList[j].lightList.length; k++) {
- if (newMapList[j].lightList[k].type == 'connect') {
- let lx = newMapList[j].x + newMapList[j].lightList[k].x
- let ly = newMapList[j].y + newMapList[j].lightList[k].y
- //向下延展
- if (lx >= (bigObj.x + minObj.x - 1) && lx <= (bigObj.x + minObj.x + 1) && ly >= (bigObj.y + bigObj.h) && ly <= (bigObj.y + bigObj.h + tentaclesLength)) {
- obj.pointVOList[lookingTargetReturnSubscript(newMapList[j].lightList[k].name, obj.pointVOList)].pointDistance = ly - bigObj.y - minObj.y
- }
- //向上延展
- if (lx >= (bigObj.x + minObj.x - 1) && lx <= (bigObj.x + minObj.x + 1) && ly >= bigObj.y - tentaclesLength && ly <= bigObj.y) {
- obj.pointVOList[lookingTargetReturnSubscript(newMapList[j].lightList[k].name, obj.pointVOList)].pointDistance = bigObj.y - ly
- }
- }
- }
- }
- }
- }
- } else {
- //竖向查找最近点
- let min = null
- let max = null
- for (let i = 0; i < bigObj.lightList.length; i++) {
- if (bigObj.lightList[i].y > y) {
- //下最近
- if (max) {
- if (max.y > bigObj.lightList[i].y) {
- if (bigObj.lightList[i].name !== minObj.name) {
- if (bigObj.lightList[i].type == 'light') {
- if (bigObj.lightList[i].state != '1') {
- max = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- } else {
- max = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- }
- }
- } else {
- if (bigObj.lightList[i].name !== minObj.name) {
- if (bigObj.lightList[i].type == 'light') {
- if (bigObj.lightList[i].state != '1') {
- max = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- } else {
- max = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- }
- }
- } else {
- //上最近
- if (min) {
- if (min.y < bigObj.lightList[i].y) {
- if (bigObj.lightList[i].name !== minObj.name) {
- if (bigObj.lightList[i].type == 'light') {
- if (bigObj.lightList[i].state != '2') {
- min = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- } else {
- min = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- }
- }
- } else {
- if (bigObj.lightList[i].name !== minObj.name) {
- if (bigObj.lightList[i].type == 'light') {
- if (bigObj.lightList[i].state != '2') {
- min = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- } else {
- min = JSON.parse(JSON.stringify(bigObj.lightList[i]))
- }
- }
- }
- }
- }
- if (min != null) {
- obj.pointVOList[lookingTargetReturnSubscript(min.name, obj.pointVOList)].pointDistance = minObj.y - min.y
- }
- if (max != null) {
- obj.pointVOList[lookingTargetReturnSubscript(max.name, obj.pointVOList)].pointDistance = max.y - minObj.y
- }
- //如果是交通端点-进行跨域连接
- if (minObj.type == 'connect') {
- for (let j = 0; j < newMapList.length; j++) {
- if (newMapList[j].type == 2) {
- for (let k = 0; k < newMapList[j].lightList.length; k++) {
- if (newMapList[j].lightList[k].type == 'traffic') {
- let lx = newMapList[j].x + newMapList[j].lightList[k].x
- let ly = newMapList[j].y + newMapList[j].lightList[k].y
- if (minObj.y > (bigObj.h / 2)) {
- //向下延展
- if (lx >= (bigObj.x + minObj.x - 1) && lx <= (bigObj.x + minObj.x + 1) && ly >= (bigObj.y + bigObj.h) && ly <= (bigObj.y + bigObj.h + minHeight)) {
- obj.pointVOList[lookingTargetReturnSubscript(newMapList[j].lightList[k].name, obj.pointVOList)].pointDistance = ly - bigObj.y - minObj.y
- }
- } else {
- //向上延展
- if (lx >= (bigObj.x + minObj.x - 1) && lx <= (bigObj.x + minObj.x + 1) && ly >= bigObj.y - minHeight && ly <= bigObj.y) {
- obj.pointVOList[lookingTargetReturnSubscript(newMapList[j].lightList[k].name, obj.pointVOList)].pointDistance = bigObj.y - ly
- }
- }
- }
- }
- }
- }
- } else if (minObj.type == 'traffic') {
- for (let j = 0; j < newMapList.length; j++) {
- if (newMapList[j].type == 2) {
- for (let k = 0; k < newMapList[j].lightList.length; k++) {
- if (newMapList[j].lightList[k].type == 'connect') {
- let lx = newMapList[j].x + newMapList[j].lightList[k].x
- let ly = newMapList[j].y + newMapList[j].lightList[k].y
- //向右延展
- if (lx >= (bigObj.x + bigObj.w) && lx <= (bigObj.x + bigObj.w + tentaclesLength) && ly >= (bigObj.y + minObj.y - 1) && ly <= (bigObj.y + minObj.y + 1)) {
- obj.pointVOList[lookingTargetReturnSubscript(newMapList[j].lightList[k].name, obj.pointVOList)].pointDistance = lx - bigObj.x - minObj.x
- }
- //向左延展
- if (lx >= (bigObj.x - tentaclesLength) && lx <= bigObj.x && ly >= (bigObj.y + minObj.y - 1) && ly <= (bigObj.y + minObj.y + 1)) {
- obj.pointVOList[lookingTargetReturnSubscript(newMapList[j].lightList[k].name, obj.pointVOList)].pointDistance = (bigObj.x + minObj.x) - lx
- }
- }
- }
- }
- }
- }
- }
- return obj
- }
- /*
- * 寻找目标位置
- * 传入:name-匹配名称,list-目标数组
- * 返回:返回下标
- * 示例: (本方法没有再外部引用,只在本JS内由 calculateAssociatedLength 方法引用)
- * lookingTargetReturnSubscript(min.name,obj.pointVOList)
- */
- export function lookingTargetReturnSubscript(name, list) {
- for (let i = 0; i < list.length; i++) {
- if (list[i].pointName == name) {
- return i
- }
- }
- }
- /*
- * 房间内-门的拖拽判定与移动结果
- * 传入:mapList-布局数据,boxIndex-当前选中index,minIndex-子类下标,event-鼠标坐标数据,scrollLeft-画布ref.scrollLeft坐标,scrollTop-画布ref.scrollTop坐标
- * 返回:一个对象 包含 朝向-toward,坐标X-x,坐标Y-y
- * 示例:
- * let obj = doorMoveJudge(this.mapList,this.boxIndex,this.minIndex,event,scrollLeft,scrollTop);
- */
- export function doorMoveJudge(mapList, boxIndex,minIndex, event, scrollLeft, scrollTop) {
- let x = event.clientX + scrollLeft - borderLeft
- let y = event.clientY + scrollTop - borderTop
- let yt = y - mapList[boxIndex].y
- let yb = mapList[boxIndex].y + mapList[boxIndex].h - y
- let xl = x - mapList[boxIndex].x
- let xr = mapList[boxIndex].x + mapList[boxIndex].w - x
- let num = Math.min(yt, yb, xl, xr)
- let obj = JSON.parse(JSON.stringify(mapList[boxIndex]))
- //计算靠近方向
- if (num === yt) {
- obj.h = doorHeight;
- obj.w = doorWidth;
- obj.doorList[minIndex].toward = 'top';
- obj.doorList[minIndex].x = (x - mapList[boxIndex].x - (doorWidth / 2)) < 0 ? 0 : (
- (x - mapList[boxIndex].x + (doorWidth / 2)) > mapList[boxIndex].w ? mapList[boxIndex].w - doorWidth :
- x - mapList[boxIndex].x - (doorWidth / 2))
- obj.doorList[minIndex].y = 2
- if(childrenOverlapCheck(obj)){
- return obj.doorList[minIndex]
- }else{
- return false
- }
- } else if (num === yb) {
- obj.h = doorHeight;
- obj.w = doorWidth;
- obj.doorList[minIndex].toward = 'bottom';
- obj.doorList[minIndex].x = (x - mapList[boxIndex].x - (doorWidth / 2)) < 0 ? 0 : (
- (x - mapList[boxIndex].x + (doorWidth / 2)) > mapList[boxIndex].w ? mapList[boxIndex].w - doorWidth :
- x - mapList[boxIndex].x - (doorWidth / 2))
- obj.doorList[minIndex].y = mapList[boxIndex].h - doorHeight - 2
- if(childrenOverlapCheck(obj)){
- return obj.doorList[minIndex]
- }else{
- return false
- }
- } else if (num === xl) {
- obj.h = doorHeight;
- obj.w = doorWidth;
- obj.doorList[minIndex].toward = 'left';
- obj.doorList[minIndex].x = 2
- obj.doorList[minIndex].y = (y - mapList[boxIndex].y - (doorHeight / 2)) < 0 ? 0 : (
- (y - mapList[boxIndex].y + (doorHeight / 2)) > mapList[boxIndex].h ? mapList[boxIndex].h - doorHeight :
- y - mapList[boxIndex].y - (doorHeight / 2))
- if(childrenOverlapCheck(obj)){
- return obj.doorList[minIndex]
- }else{
- return false
- }
- } else if (num === xr) {
- obj.h = maxWidth;
- obj.w = minWidth;
- obj.doorList[minIndex].toward = 'right';
- obj.doorList[minIndex].x = mapList[boxIndex].w - doorWidth - 2
- obj.doorList[minIndex].y = (y - mapList[boxIndex].y - (doorHeight / 2)) < 0 ? 0 : (
- (y - mapList[boxIndex].y + (doorHeight / 2)) > mapList[boxIndex].h ? mapList[boxIndex].h - doorHeight :
- y - mapList[boxIndex].y - (doorHeight / 2))
- if(childrenOverlapCheck(obj)){
- return obj.doorList[minIndex]
- }else{
- return false
- }
- }
- }
- /*
- * 房间内-灯的拖拽判定与移动结果
- * 传入:mapList-布局数据,boxIndex-当前选中index,minIndex-子类下标,event-鼠标坐标数据,scrollLeft-画布ref.scrollLeft坐标,scrollTop-画布ref.scrollTop坐标
- * 返回:一个对象 包含 坐标X-x,坐标Y-y
- * 示例:
- * let obj = lightMoveJudge(this.mapList,this.boxIndex,this.minIndex,event,scrollLeft,scrollTop);
- */
- export function lightMoveJudge(mapList, boxIndex, minIndex, event, scrollLeft, scrollTop) {
- let x = event.clientX + scrollLeft - borderLeft
- let y = event.clientY + scrollTop - borderTop
- let obj = JSON.parse(JSON.stringify(mapList[boxIndex]))
- if (mapList[boxIndex].w > mapList[boxIndex].h) {
- obj.lightList[minIndex].x = x - mapList[boxIndex].x - (maxLightNum / 2) < 10 ? 10 : (
- x - mapList[boxIndex].x - (maxLightNum / 2) + maxLightNum > mapList[boxIndex].w - 10 ? mapList[boxIndex].w - maxLightNum - 10 :
- x - mapList[boxIndex].x - (maxLightNum / 2))
- obj.lightList[minIndex].y = (mapList[boxIndex].h / 2) - (maxLightNum / 2)
- if(childrenOverlapCheck(obj)){
- return obj.lightList[minIndex]
- }else{
- return false
- }
- } else if (mapList[boxIndex].h > mapList[boxIndex].w) {
- obj.lightList[minIndex].x = (mapList[boxIndex].w / 2) - (maxLightNum / 2)
- obj.lightList[minIndex].y = y - mapList[boxIndex].y - (maxLightNum / 2) < 10 ? 10 : (
- y - mapList[boxIndex].y - (maxLightNum / 2) + maxLightNum > mapList[boxIndex].h - 10 ? mapList[boxIndex].h - maxLightNum - 10 :
- y - mapList[boxIndex].y - (maxLightNum / 2))
- if(childrenOverlapCheck(obj)){
- return obj.lightList[minIndex]
- }else{
- return false
- }
- }
- }
- /*
- * 房间移动
- * 传入:mapList-布局数据,boxIndex-当前选中index,clientX-当前X坐标,clientY-当前Y坐标,event-鼠标数据
- * 返回:一个对象 包含 坐标X-x,坐标Y-y
- * 示例:
- * let obj = roomMove(this.mapList,this.boxIndex,this.clientX,this.clientY,event)
- * if(obj.x){
- * this.$set(this.mapList[this.boxIndex], 'x', obj.x)
- * }
- * if (obj.y){
- * this.$set(this.mapList[this.boxIndex], 'y', obj.y)
- * }
- */
- export function roomMove(mapList, boxIndex, clientX, clientY, event) {
- let obj = {
- x: null,
- y: null
- }
- if (clientX > event.clientX) {
- if (moveBoundaryCheck(mapList[boxIndex].x - (clientX - event.clientX), 'left') &&
- moveOverlapCheck(mapList[boxIndex].x - (clientX - event.clientX), 'left', mapList, boxIndex)) {
- obj.x = mapList[boxIndex].x - (clientX - event.clientX)
- }
- } else if (event.clientX > clientX) {
- if (moveBoundaryCheck(mapList[boxIndex].x + (event.clientX - clientX) + mapList[boxIndex].w, 'right') &&
- moveOverlapCheck(mapList[boxIndex].x + (event.clientX - clientX), 'right', mapList, boxIndex)) {
- obj.x = mapList[boxIndex].x + (event.clientX - clientX)
- }
- }
- if (clientY > event.clientY) {
- if (moveBoundaryCheck(mapList[boxIndex].y - (clientY - event.clientY), 'top') &&
- moveOverlapCheck(mapList[boxIndex].y - (clientY - event.clientY), 'top', mapList, boxIndex)) {
- obj.y = mapList[boxIndex].y - (clientY - event.clientY)
- }
- } else if (event.clientY > clientY) {
- if (moveBoundaryCheck(mapList[boxIndex].y + (event.clientY - clientY) + mapList[boxIndex].h, 'bottom') &&
- moveOverlapCheck(mapList[boxIndex].y + (event.clientY - clientY), 'bottom', mapList, boxIndex)) {
- obj.y = mapList[boxIndex].y + (event.clientY - clientY)
- }
- }
- return obj
- }
- /*
- * 添加房间
- * 传入:e-鼠标数据,mapList-布局数据,borderLeft-左侧边界,borderLeft-上方边界-最小宽度,grab-抓取类型,scrollLeft-画布ref.scrollLeft坐标,scrollTop-画布ref.scrollTop坐标
- * 返回:完整的房间对象数据
- * 示例:
- * let obj = roomAdd(e,this.mapList,this.grab,this.$refs.maxBigBox.scrollLeft,this.$refs.maxBigBox.scrollTop,);
- if(obj){
- this.mapList.push(obj);
- }
- */
- export function roomAdd(e, mapList, grab, scrollLeft, scrollTop) {
- let x = e.clientX + scrollLeft
- let y = e.clientY + scrollTop
- if (x > borderLeft && x < (borderLeft + layerWidth) &&
- y > borderTop && y < (borderTop + layerHeight)) {
- let newX = x - borderLeft - (minWidth / 2)
- let newY = y - borderTop - (minHeight / 2)
- if (moveBoundaryCheck(newX, 'left') && moveBoundaryCheck(newX + minWidth, 'right') && moveBoundaryCheck(newY, 'top') && moveBoundaryCheck(newY + minHeight, 'bottom') &&
- placementOverlapCheck(newX, newY, 'left', mapList) && placementOverlapCheck(newX, newY, 'right', mapList) && placementOverlapCheck(newX, newY, 'top', mapList) && placementOverlapCheck(newX, newY, 'bottom', mapList)) {
- let obj = {
- x: newX,
- y: newY,
- w: minWidth,
- h: minHeight,
- type: grab//1房间2楼道3疏散通道
- }
- if (grab == 1 || grab == 3) {
- obj.doorList = []
- } else if (grab == 2) {
- obj.lightList = []
- }
- return obj
- } else {
- return false
- }
- } else {
- return false
- }
- }
- /*
- * 添加灯
- * 传入:event-鼠标坐标数据,scrollLeft-画布ref.scrollLeft坐标,scrollTop-画布ref.scrollTop坐标,mapList-画布数据,grab-抓取类型
- * 返回:完整的房间对象数据
- * 示例:
- * let obj = lightAdd(event,this.$refs.maxBigBox.scrollLeft,this.$refs.maxBigBox.scrollTop,this.mapList,this.grab);
- if (obj){
- this.mapList[obj.index].lightList.push({
- type:obj.type,
- state:obj.state,
- w:obj.w,
- h:obj.h,
- x:obj.x,
- y:obj.y,
- });
- }
- */
- export function lightAdd(event, scrollLeft, scrollTop, mapList, grab) {
- let x = event.clientX + scrollLeft - borderLeft
- let y = event.clientY + scrollTop - borderTop
- for (let i = 0; i < mapList.length; i++) {
- if (x > mapList[i].x && x < (mapList[i].x + mapList[i].w) &&
- y > mapList[i].y && y < (mapList[i].y + mapList[i].h)) {
- if (mapList[i].type == '1') {
- //房间
- if (grab != '4' && grab != '5') {
- Message({
- message: '房间只可添加门',
- type: 'error',
- offset: 100
- })
- return
- }
- } else if (mapList[i].type == '2') {
- //走廊
- if (grab != '6') {
- Message({
- message: '走廊只可添加疏散灯',
- type: 'error',
- offset: 100
- })
- return
- }
- } else if (mapList[i].type == '3') {
- //疏散通道
- if (grab != '4' && grab != '5') {
- Message({
- message: '楼道只可添加门',
- type: 'error',
- offset: 100
- })
- return
- }
- return
- }
- if (mapList[i].w > mapList[i].h) {
- // 横向
- let obj = { index: i, type: 'light', state: '', w: maxLightNum, h: maxLightNum, x: x - mapList[i].x - (maxLightNum / 2), y: (mapList[i].h / 2) - (maxLightNum / 2) }
- let newObj = {w: maxLightNum, h: maxLightNum, x: x - mapList[i].x - (maxLightNum / 2), y: (mapList[i].h / 2) - (maxLightNum / 2)};
- if(mapList[i].lightList[0]){
- let newList = JSON.parse(JSON.stringify(mapList[i]))
- newList.lightList.push(newObj);
- if(childrenOverlapCheck(newList)){
- return obj;
- }else{
- return false
- }
- }else{
- return obj;
- }
- } else {
- let obj ={ index: i, type: 'light', state: '', w: maxLightNum, h: maxLightNum, x: (mapList[i].w / 2) - (maxLightNum / 2), y: y - mapList[i].y - (maxLightNum / 2) }
- let newObj = {w: maxLightNum, h: maxLightNum, x: (mapList[i].w / 2) - (maxLightNum / 2), y: y - mapList[i].y - (maxLightNum / 2)}
- if(mapList[i].lightList[0]){
- let newList = JSON.parse(JSON.stringify(mapList[i]))
- newList.lightList.push(newObj);
- if(childrenOverlapCheck(newList)){
- return obj;
- }else{
- return false
- }
- }else{
- return obj;
- }
- }
- }
- }
- }
- /*
- * 添加门
- * 传入:e-鼠标数据,mapList-布局数据,scrollLeft-画布ref.scrollLeft坐标,scrollTop-画布ref.scrollTop坐标,grab-抓取类型,
- * 返回:完整的房间对象数据
- * 示例:
- * let obj = addDoor(e,this.mapList,this.$refs.maxBigBox.scrollLeft,this.$refs.maxBigBox.scrollTop,this.grab);
- if(obj){
- this.mapList.push(obj);
- }
- */
- export function addDoor(event, mapList, scrollLeft, scrollTop, grab) {
- let x = event.clientX + scrollLeft - borderLeft
- let y = event.clientY + scrollTop - borderTop
- for (let i = 0; i < mapList.length; i++) {
- if (x > mapList[i].x && x < (mapList[i].x + mapList[i].w) &&
- y > mapList[i].y && y < (mapList[i].y + mapList[i].h)) {
- if (mapList[i].type == '1' || mapList[i].type == '3') {
- //房间
- if (grab != '4' && grab != '5') {
- this.msgError('房间与楼道只可添加门窗')
- return
- }
- } else if (mapList[i].type == '2') {
- //走廊
- if (grab != '6') {
- this.msgError('走廊只可添加疏散灯')
- return
- }
- }
- let yt = y - mapList[i].y
- let yb = mapList[i].y + mapList[i].h - y
- let xl = x - mapList[i].x
- let xr = mapList[i].x + mapList[i].w - x
- let num = Math.min(yt, yb, xl, xr)
- //计算靠近方向
- if (num === yt) {
- return {
- index: i,
- type: 'door',
- toward: 'top',
- w: doorWidth,
- h: doorHeight,
- x: x - mapList[i].x - (doorWidth / 2),
- y: 2
- }
- } else if (num === yb) {
- return {
- index: i,
- type: 'door',
- toward: 'bottom',
- w: doorWidth,
- h: doorHeight,
- x: x - mapList[i].x - (doorWidth / 2),
- y: mapList[i].h - doorHeight - 2
- }
- } else if (num === xl) {
- return {
- index: i,
- type: 'door',
- toward: 'left',
- w: doorWidth,
- h: doorHeight,
- x: 2,
- y: y - mapList[i].y - (doorHeight / 2)
- }
- } else if (num === xr) {
- return {
- index: i,
- type: 'door',
- toward: 'right',
- w: doorWidth,
- h: doorHeight,
- x: mapList[i].w - doorWidth - 2,
- y: y - mapList[i].y - (doorHeight / 2)
- }
- }
- }
- }
- }
- /*
- * 四角缩放
- * 传入:mapList-布局数据,boxIndex-当前选中index,event-鼠标数据,clientX-当前X坐标,clientY-当前Y坐标,type-拖拽方向状态
- * 返回:true 或者 false
- * 示例:let obj = fourCornersZoom(this.mapList,this.boxIndex,event,this.clientX,this.clientY,this.moveType);
- if(obj){
- this.$set(this.mapList[this.boxIndex],'x',obj.x?obj.x:this.mapList[this.boxIndex].x);
- }
- */
- export function fourCornersZoom(mapList, boxIndex, event, clientX, clientY, type) {
- let obj = {}
- if (type == '4') {
- if (clientX > event.clientX) {
- if (moveBoundaryCheck(mapList[boxIndex].x - (clientX - event.clientX), 'left') &&
- moveOverlapCheck(mapList[boxIndex].x - (clientX - event.clientX), 'left', mapList, boxIndex) &&
- sizeCheck(mapList[boxIndex].w + (clientX - event.clientX), 'w', '+')) {
- obj.x = mapList[boxIndex].x - (clientX - event.clientX)
- obj.w = mapList[boxIndex].w + (clientX - event.clientX)
- }
- } else if (event.clientX > clientX) {
- if (sizeCheck(mapList[boxIndex].w - (event.clientX - clientX), 'w', '-')) {
- obj.x = mapList[boxIndex].x + (event.clientX - clientX)
- obj.w = mapList[boxIndex].w - (event.clientX - clientX)
- }
- }
- if (clientY > event.clientY) {
- if (moveBoundaryCheck(mapList[boxIndex].y - (clientY - event.clientY), 'top') &&
- moveOverlapCheck(mapList[boxIndex].y - (clientY - event.clientY), 'top', mapList, boxIndex) &&
- sizeCheck(mapList[boxIndex].h + (clientY - event.clientY), 'h', '+')) {
- obj.y = mapList[boxIndex].y - (clientY - event.clientY)
- obj.h = mapList[boxIndex].h + (clientY - event.clientY)
- }
- } else if (event.clientY > clientY) {
- if (sizeCheck(mapList[boxIndex].h - (event.clientY - clientY), 'h', '-')) {
- obj.y = mapList[boxIndex].y + (event.clientY - clientY)
- obj.h = mapList[boxIndex].h - (event.clientY - clientY)
- }
- }
- } else if (type == '3') {
- if (clientX > event.clientX) {
- if (moveBoundaryCheck(mapList[boxIndex].x - (clientX - event.clientX), 'left') &&
- moveOverlapCheck(mapList[boxIndex].x - (clientX - event.clientX), 'left', mapList, boxIndex) &&
- sizeCheck(mapList[boxIndex].w + (clientX - event.clientX), 'w', '+')) {
- obj.x = mapList[boxIndex].x - (clientX - event.clientX)
- obj.w = mapList[boxIndex].w + (clientX - event.clientX)
- }
- } else if (event.clientX > clientX) {
- if (sizeCheck(mapList[boxIndex].w - (event.clientX - clientX), 'w', '-')) {
- obj.x = mapList[boxIndex].x + (event.clientX - clientX)
- obj.w = mapList[boxIndex].w - (event.clientX - clientX)
- }
- }
- if (clientY > event.clientY) {
- if (sizeCheck(mapList[boxIndex].h - (clientY - event.clientY), 'h', '-')) {
- obj.h = mapList[boxIndex].h - (clientY - event.clientY)
- }
- } else if (event.clientY > clientY) {
- if (moveBoundaryCheck(mapList[boxIndex].y + (event.clientY - clientY) + mapList[boxIndex].h, 'bottom') &&
- moveOverlapCheck(mapList[boxIndex].y + (event.clientY - clientY), 'bottom', mapList, boxIndex) &&
- sizeCheck(mapList[boxIndex].h + (event.clientY - clientY), 'h', '+')) {
- obj.h = mapList[boxIndex].h + (event.clientY - clientY)
- }
- }
- } else if (type == '2') {
- if (clientX > event.clientX) {
- if (sizeCheck(mapList[boxIndex].w - (clientX - event.clientX), 'w', '-')) {
- obj.w = mapList[boxIndex].w - (clientX - event.clientX)
- }
- } else if (event.clientX > clientX) {
- if (moveBoundaryCheck(mapList[boxIndex].x + (event.clientX - clientX) + mapList[boxIndex].w, 'right') &&
- moveOverlapCheck(mapList[boxIndex].x + (event.clientX - clientX), 'right', mapList, boxIndex) &&
- sizeCheck(mapList[boxIndex].w + (event.clientX - clientX), 'w', '+')) {
- obj.w = mapList[boxIndex].w + (event.clientX - clientX)
- }
- }
- if (clientY > event.clientY) {
- if (sizeCheck(mapList[boxIndex].h - (clientY - event.clientY), 'h', '-')) {
- obj.h = mapList[boxIndex].h - (clientY - event.clientY)
- }
- } else if (event.clientY > clientY) {
- if (moveBoundaryCheck(mapList[boxIndex].y + (event.clientY - clientY) + mapList[boxIndex].h, 'bottom') &&
- moveOverlapCheck(mapList[boxIndex].y + (event.clientY - clientY), 'bottom', mapList, boxIndex) &&
- sizeCheck(mapList[boxIndex].h + (event.clientY - clientY), 'h', '+')) {
- obj.h = mapList[boxIndex].h + (event.clientY - clientY)
- }
- }
- } else if (type == '1') {
- if (clientX > event.clientX) {
- if (sizeCheck(mapList[boxIndex].w - (clientX - event.clientX), 'w', '-')) {
- obj.w = mapList[boxIndex].w - (clientX - event.clientX)
- }
- } else if (event.clientX > clientX) {
- if (moveBoundaryCheck(mapList[boxIndex].x + (event.clientX - clientX) + mapList[boxIndex].w, 'right') &&
- moveOverlapCheck(mapList[boxIndex].x + (event.clientX - clientX), 'right', mapList, boxIndex) &&
- sizeCheck(mapList[boxIndex].w + (event.clientX - clientX), 'w', '+')) {
- obj.w = mapList[boxIndex].w + (event.clientX - clientX)
- }
- }
- if (clientY > event.clientY) {
- if (moveBoundaryCheck(mapList[boxIndex].y - (clientY - event.clientY), 'top') &&
- moveOverlapCheck(mapList[boxIndex].y - (clientY - event.clientY), 'top', mapList, boxIndex) &&
- sizeCheck(mapList[boxIndex].h + (clientY - event.clientY), 'h', '+')) {
- obj.y = mapList[boxIndex].y - (clientY - event.clientY)
- obj.h = mapList[boxIndex].h + (clientY - event.clientY)
- }
- } else if (event.clientY > clientY) {
- if (sizeCheck(mapList[boxIndex].h - (event.clientY - clientY), 'h', '-')) {
- obj.y = mapList[boxIndex].y + (event.clientY - clientY)
- obj.h = mapList[boxIndex].h - (event.clientY - clientY)
- }
- }
- }
- if (mapList[boxIndex].type == '1' || mapList[boxIndex].type == '3') {
- let newList = JSON.parse(JSON.stringify(mapList[boxIndex]))
- newList.w = obj.w ? obj.w : newList.w
- newList.h = obj.h ? obj.h : newList.h
- obj.doorList = doorDragJudge(newList)
- if (!obj.doorList) {
- return false
- }
- }
- if (mapList[boxIndex].type == '2') {
- let newList = JSON.parse(JSON.stringify(mapList[boxIndex]))
- newList.w = obj.w ? obj.w : newList.w
- newList.h = obj.h ? obj.h : newList.h
- obj.lightList = lightDragJudge(newList)
- if (!obj.lightList) {
- return false
- }
- }
- return obj
- }
- /*
- * 四边缩放
- * 传入:mapList-布局数据,boxIndex-当前选中index,event-鼠标数据,clientX-当前X坐标,clientY-当前Y坐标,type-拖拽方向状态
- * 返回:true 或者 false
- * 示例:let obj = fourCornersZoom(this.mapList,this.boxIndex,event,this.clientX,this.clientY,this.moveType);
- if(obj){
- this.$set(this.mapList[this.boxIndex],'x',obj.x?obj.x:this.mapList[this.boxIndex].x);
- }
- */
- export function fourEdgeZoom(mapList, boxIndex, event, clientX, clientY, type) {
- let obj = {}
- if (type == '4') {
- if (clientX > event.clientX) {
- if (moveBoundaryCheck(mapList[boxIndex].x - (clientX - event.clientX), 'left') &&
- moveOverlapCheck(mapList[boxIndex].x - (clientX - event.clientX), 'left', mapList, boxIndex) &&
- sizeCheck(mapList[boxIndex].w + (clientX - event.clientX), 'w', '+')) {
- obj.x = mapList[boxIndex].x - (clientX - event.clientX)
- obj.w = mapList[boxIndex].w + (clientX - event.clientX)
- }
- } else if (event.clientX > clientX) {
- if (sizeCheck(mapList[boxIndex].w - (event.clientX - clientX), 'w', '-')) {
- obj.x = mapList[boxIndex].x + (event.clientX - clientX)
- obj.w = mapList[boxIndex].w - (event.clientX - clientX)
- }
- }
- } else if (type == '3') {
- if (clientY > event.clientY) {
- if (sizeCheck(mapList[boxIndex].h - (clientY - event.clientY), 'h', '-')) {
- obj.h = mapList[boxIndex].h - (clientY - event.clientY)
- }
- } else if (event.clientY > clientY) {
- if (moveBoundaryCheck(mapList[boxIndex].y + (event.clientY - clientY) + mapList[boxIndex].h, 'bottom') &&
- moveOverlapCheck(mapList[boxIndex].y + (event.clientY - clientY), 'bottom', mapList, boxIndex) &&
- sizeCheck(mapList[boxIndex].h + (event.clientY - clientY), 'h', '+')) {
- obj.h = mapList[boxIndex].h + (event.clientY - clientY)
- }
- }
- } else if (type == '2') {
- if (clientX > event.clientX) {
- if (sizeCheck(mapList[boxIndex].w - (clientX - event.clientX), 'w', '-')) {
- obj.w = mapList[boxIndex].w - (clientX - event.clientX)
- }
- } else if (event.clientX > clientX) {
- if (moveBoundaryCheck(mapList[boxIndex].x + (event.clientX - clientX) + mapList[boxIndex].w, 'right') &&
- moveOverlapCheck(mapList[boxIndex].x + (event.clientX - clientX), 'right', mapList, boxIndex) &&
- sizeCheck(mapList[boxIndex].w + (event.clientX - clientX), 'w', '+')) {
- obj.w = mapList[boxIndex].w + (event.clientX - clientX)
- }
- }
- } else if (type == '1') {
- if (clientY > event.clientY) {
- if (moveBoundaryCheck(mapList[boxIndex].y - (clientY - event.clientY), 'top') &&
- moveOverlapCheck(mapList[boxIndex].y - (clientY - event.clientY), 'top', mapList, boxIndex) &&
- sizeCheck(mapList[boxIndex].h + (clientY - event.clientY), 'h', '+')) {
- obj.y = mapList[boxIndex].y - (clientY - event.clientY)
- obj.h = mapList[boxIndex].h + (clientY - event.clientY)
- }
- } else if (event.clientY > clientY) {
- if (sizeCheck(mapList[boxIndex].h - (event.clientY - clientY), 'h', '-')) {
- obj.y = mapList[boxIndex].y + (event.clientY - clientY)
- obj.h = mapList[boxIndex].h - (event.clientY - clientY)
- }
- }
- }
- if (mapList[boxIndex].type == '1' || mapList[boxIndex].type == '3') {
- let newList = JSON.parse(JSON.stringify(mapList[boxIndex]))
- newList.w = obj.w ? obj.w : newList.w
- newList.h = obj.h ? obj.h : newList.h
- obj.doorList = doorDragJudge(newList)
- if (!obj.doorList) {
- return false
- }
- }
- if (mapList[boxIndex].type == '2') {
- let newList = JSON.parse(JSON.stringify(mapList[boxIndex]))
- newList.w = obj.w ? obj.w : newList.w
- newList.h = obj.h ? obj.h : newList.h
- obj.lightList = lightDragJudge(newList)
- if (!obj.lightList) {
- return false
- }
- }
- return obj
- }
- /*
- * 门列表坐标修正
- * 传入:obj-当前拖拽对象
- * 返回:修正后的门列表数组
- * 示例:obj.doorList = doorDragJudge(newList);
- */
- export function doorDragJudge(obj) {
- for (let i = 0; i < obj.doorList.length; i++) {
- if (obj.doorList[i].toward == 'left') {
- obj.doorList[i].x = 0
- obj.doorList[i].y = (obj.doorList[i].y + doorHeight) >= obj.h ? obj.h - doorHeight : obj.doorList[i].y
- } else if (obj.doorList[i].toward == 'right') {
- obj.doorList[i].x = obj.w - doorWidth
- obj.doorList[i].y = (obj.doorList[i].y + doorHeight) >= obj.h ? obj.h - doorHeight : obj.doorList[i].y
- } else if (obj.doorList[i].toward == 'top') {
- obj.doorList[i].x = (obj.doorList[i].x + doorWidth) >= obj.w ? obj.w - doorWidth : obj.doorList[i].x
- obj.doorList[i].y = 0
- } else if (obj.doorList[i].toward == 'bottom') {
- obj.doorList[i].x = (obj.doorList[i].x + doorWidth) >= obj.w ? parseInt(obj.w - doorWidth) : parseInt(obj.doorList[i].x)
- obj.doorList[i].y = obj.h - doorHeight
- }
- }
- if (childrenOverlapCheck(obj)) {
- return obj.doorList[0] ? obj.doorList : []
- } else {
- return false
- }
- }
- /*
- * 灯列表坐标修正
- * 传入:obj-当前拖拽对象
- * 返回:修正后的灯列表数组
- * 示例:obj.lightList = lightDragJudge(newList);
- */
- export function lightDragJudge(obj) {
- if (obj.w > obj.h) {
- zoomType = 1
- if (obj.lightList[1]) {
- if (obj.lightList[0].x == obj.lightList[1].x) {
- for (let o = 0; o < obj.lightList.length; o++) {
- obj.lightList[o].x = JSON.parse(JSON.stringify(obj.lightList[o].y))
- obj.lightList[o].y = obj.h / 2 - maxLightNum / 2
- }
- } else {
- for (let i = 0; i < obj.lightList.length; i++) {
- obj.lightList[i].y = (obj.h / 2) - (maxLightNum / 2)
- obj.lightList[i].x =
- obj.lightList[i].x <= 10 ? 10 : (
- (obj.lightList[i].x + maxLightNum) >= (obj.w - 10) ? (obj.w - maxLightNum - 10) :
- obj.lightList[i].x)
- }
- }
- } else {
- for (let i = 0; i < obj.lightList.length; i++) {
- obj.lightList[i].y = (obj.h / 2) - (maxLightNum / 2)
- obj.lightList[i].x =
- obj.lightList[i].x <= 10 ? 10 : (
- (obj.lightList[i].x + maxLightNum) >= (obj.w - 10) ? (obj.w - maxLightNum - 10) :
- obj.lightList[i].x)
- }
- }
- } else if (obj.h > obj.w) {
- zoomType = 2
- if (obj.lightList[1]) {
- if (obj.lightList[0].y == obj.lightList[1].y) {
- for (let o = 0; o < obj.lightList.length; o++) {
- obj.lightList[o].y = JSON.parse(JSON.stringify(obj.lightList[o].x))
- obj.lightList[o].x = obj.w / 2 - maxLightNum / 2
- }
- } else {
- for (let i = 0; i < obj.lightList.length; i++) {
- obj.lightList[i].x = (obj.w / 2) - (maxLightNum / 2)
- obj.lightList[i].y =
- obj.lightList[i].y <= 10 ? 10 : (
- (obj.lightList[i].y + maxLightNum) >= (obj.h - 10) ? (obj.h - maxLightNum - 10) :
- obj.lightList[i].y)
- }
- }
- } else {
- for (let i = 0; i < obj.lightList.length; i++) {
- obj.lightList[i].x = (obj.w / 2) - (maxLightNum / 2)
- obj.lightList[i].y =
- obj.lightList[i].y <= 10 ? 10 : (
- (obj.lightList[i].y + maxLightNum) >= (obj.h - 10) ? (obj.h - maxLightNum - 10) :
- obj.lightList[i].y)
- }
- }
- } else {
- if (zoomType == 1) {
- obj.w = obj.w - 1
- obj.h = obj.h + 1
- } else if (zoomType == 2) {
- obj.w = obj.w + 1
- obj.h = obj.h - 1
- }
- }
- let num1 = 0
- let num2 = 0
- for (let o = 0; o < obj.lightList.length; o++) {
- num1 = num1 < obj.lightList[o].x ? obj.lightList[o].x : num1
- num2 = num2 < obj.lightList[o].y ? obj.lightList[o].y : num2
- }
- if (zoomType == 1 && ((num2 + maxLightNum) > obj.h - 10)) {
- return false
- } else if (zoomType == 2 && ((num1 + maxLightNum) > obj.w - 10)) {
- return false
- }
- if (childrenOverlapCheck(obj)) {
- return obj.lightList[0] ? obj.lightList : []
- } else {
- return false
- }
- }
- /************************************ 检查相关 ************************************/
- /*
- * 检查门朝向附近是否有楼道
- * 传入:mapList-布局数据
- * 返回:true 或者 false并提示错误
- * 示例:
- * if(checkDoorTo(this.mapList)){}
- */
- export function checkDoorTo(mapList) {
- for (let i = 0; i < mapList.length; i++) {
- if (mapList[i].type == 1 || mapList[i].type == 3) {
- let x = 0
- let y = 0
- if (mapList[i].doorList[0].toward == 'top') {
- x = mapList[i].x + mapList[i].doorList[0].x + (doorWidth / 2)
- y = mapList[i].y - (minHeight / 2)
- } else if (mapList[i].doorList[0].toward == 'bottom') {
- x = mapList[i].x + mapList[i].doorList[0].x + (doorWidth / 2)
- y = mapList[i].y + mapList[i].h + (minHeight / 2)
- } else if (mapList[i].doorList[0].toward == 'left') {
- x = mapList[i].x - (minHeight / 2)
- y = mapList[i].y + mapList[i].doorList[0].y + (doorHeight / 2)
- } else if (mapList[i].doorList[0].toward == 'right') {
- x = mapList[i].x + mapList[i].w + (minHeight / 2)
- y = mapList[i].y + mapList[i].doorList[0].y + (doorHeight / 2)
- }
- let num = 0
- for (let j = 0; j < mapList.length; j++) {
- if (mapList[j].type == 2) {
- if (x > mapList[j].x && x < (mapList[j].x + mapList[j].w) &&
- y > mapList[j].y && y < (mapList[j].y + mapList[j].h)) {
- num++
- }
- }
- }
- if (num == 0) {
- Message({
- message: '有门的位置朝向不正确',
- type: 'error',
- offset: 100
- })
- return false
- }
- }
- }
- return true
- }
- /*
- * 检查通道内灯是否都已绑定朝向
- * 传入:mapList-布局数据
- * 返回:true 或者 false并提示错误
- * 示例:
- * if(checkLightDirection(this.mapList){}
- */
- export function checkLightDirection(mapList) {
- for (let i = 0; i < mapList.length; i++) {
- if (mapList[i].type == 2) {
- for (let j = 0; j < mapList[i].lightList.length; j++) {
- if (!mapList[i].lightList[j].state) {
- Message({
- message: '请检查所有的灯是否都已选择朝向',
- type: 'error',
- offset: 100
- })
- return false
- }
- }
- }
- }
- return true
- }
- /*
- * 检查楼层是否有房间/逃生通道/楼道
- * mapList-布局数据
- * 返回:true 或者 false并提示错误
- * 示例:
- * if(checkRoom(this.mapList){}
- */
- export function checkRoom(mapList) {
- //实验室数量
- let num1 = 0
- //逃生点数量
- let num2 = 0
- //楼道数量
- let num3 = 0
- //实验室门数量
- let num4 = 0
- for (let i = 0; i < mapList.length; i++) {
- if (mapList[i].type == 1 || mapList[i].type == 3) {
- if (mapList[i].type == 1) {
- num1++
- } else if (mapList[i].type == 3) {
- num2++
- }
- if (mapList[i].doorList[0]) {
- num4++
- }
- } else if (mapList[i].type == 2) {
- num3++
- }
- }
- if (num1 === 0) {
- Message({
- message: '请添加房间',
- type: 'error',
- offset: 100
- })
- return false
- }
- if (num2 === 0) {
- Message({
- message: '请添加应急出口',
- type: 'error',
- offset: 100
- })
- return false
- }
- if (num3 == 0) {
- Message({
- message: '请添加楼道',
- type: 'error',
- offset: 100
- })
- return false
- }
- if (num4 < (num1 + num2)) {
- Message({
- message: '请在每个房间与应急出口内添加门',
- type: 'error',
- offset: 100
- })
- return false
- }
- return true
- }
- /*
- * 移动边界检查
- * 传入:px-目标坐标,type-方向
- * 返回:true 或者 false
- * 示例:(本JS内部调用)
- * if(moveBoundaryCheck(mapList[boxIndex].y + (event.clientY - clientY)+mapList[boxIndex].h,'bottom'){}
- */
- export function moveBoundaryCheck(px, type) {
- if (type == 'left') {
- return px > 0
- } else if (type == 'right') {
- return px < layerWidth
- } else if (type == 'top') {
- return px > 0
- } else if (type == 'bottom') {
- return px < layerHeight
- }
- }
- /*
- * 移动重叠检查
- * 传入:px-目标坐标,type-方向,mapList-布局数据,boxIndex-当前选中index
- * 返回:true 或者 false
- * 示例:(本JS内部调用)
- * if(moveOverlapCheck(mapList[boxIndex].x - (clientX - event.clientX),'left',mapList,boxIndex)){}
- */
- export function moveOverlapCheck(px, type, mapList, boxIndex) {
- let num = 0
- let x1 = null
- let y1 = null
- let x2 = null
- let y2 = null
- if (type == 'left') {
- x1 = px
- y1 = mapList[boxIndex].y
- x2 = px
- y2 = mapList[boxIndex].y + mapList[boxIndex].h
- } else if (type == 'right') {
- x1 = px + mapList[boxIndex].w
- y1 = mapList[boxIndex].y
- x2 = px + mapList[boxIndex].w
- y2 = mapList[boxIndex].y + mapList[boxIndex].h
- } else if (type == 'top') {
- x1 = mapList[boxIndex].x
- y1 = px
- x2 = mapList[boxIndex].x + mapList[boxIndex].w
- y2 = px
- } else if (type == 'bottom') {
- x1 = mapList[boxIndex].x
- y1 = px + mapList[boxIndex].h
- x2 = mapList[boxIndex].x + mapList[boxIndex].w
- y2 = px + mapList[boxIndex].h
- }
- for (let i = 0; i < mapList.length; i++) {
- if (boxIndex != i) {
- if (
- (x1 > mapList[i].x && x1 < (mapList[i].x + mapList[i].w) && y1 > mapList[i].y && y1 < (mapList[i].y + mapList[i].h)) ||
- (x2 > mapList[i].x && x2 < (mapList[i].x + mapList[i].w) && y2 > mapList[i].y && y2 < (mapList[i].y + mapList[i].h))
- ) {
- num++
- }
- if (type == 'top' && x1 <= mapList[i].x && x2 >= (mapList[i].x + mapList[i].w) && y1 < (mapList[i].y + mapList[i].h) && y1 > mapList[i].y) {
- num++
- }
- if (type == 'bottom' && x1 <= mapList[i].x && x2 >= (mapList[i].x + mapList[i].w) && y1 > mapList[i].y && y1 < (mapList[i].y + mapList[i].h)) {
- num++
- }
- if (type == 'left' && y1 <= mapList[i].y && y2 >= (mapList[i].y + mapList[i].h) && x1 < (mapList[i].x + mapList[i].w) && x1 > mapList[i].x) {
- num++
- }
- if (type == 'right' && y1 <= mapList[i].y && y2 >= (mapList[i].y + mapList[i].h) && x1 > mapList[i].x && x1 < (mapList[i].x + mapList[i].w)) {
- num++
- }
- }
- }
- return num == 0
- }
- /*
- * 尺寸检查
- * 传入:px-目标尺寸,type-宽高类型,state-加减类型
- * 返回:true 或者 false
- * 示例:(本JS内部调用)
- * if(sizeCheck(px,type,state)){}
- */
- export function sizeCheck(px, type, state) {
- let num = 0
- if (type == 'w' && state == '+') {
- if (px > maxWidth) {
- num++
- }
- } else if (type == 'w' && state == '-') {
- if (px < minWidth) {
- num++
- }
- } else if (type == 'h' && state == '+') {
- if (px > maxHeight) {
- num++
- }
- } else if (type == 'h' && state == '-') {
- if (px < minHeight) {
- num++
- }
- }
- return num == 0
- }
- /*
- * 放置重叠检查
- * 传入:x-目标X坐标,y-目标Y坐标,type-方向,mapList-画布数据
- * 返回:true 或者 false
- * 示例:(本JS内部调用)
- * if(placementOverlapCheck(x,y,type,mapList)){}
- */
- export function placementOverlapCheck(x, y, type, mapList) {
- let num = 0
- let x1 = null
- let y1 = null
- let x2 = null
- let y2 = null
- let xOne = x
- let xTwo = x + minWidth
- let yOne = y
- let yTwo = y + minHeight
- if (type == 'left') {
- x1 = x
- y1 = y
- x2 = x
- y2 = y + minHeight
- } else if (type == 'right') {
- x1 = x + minWidth
- y1 = y
- x2 = x + minWidth
- y2 = y + minHeight
- } else if (type == 'top') {
- x1 = x
- y1 = y
- x2 = x + minWidth
- y2 = y
- } else if (type == 'bottom') {
- x1 = x
- y1 = y + minHeight
- x2 = x + minWidth
- y2 = y + minHeight
- }
- for (let i = 0; i < mapList.length; i++) {
- // if(this.boxIndex != i){
- if (
- (xOne > mapList[i].x && xOne < (mapList[i].x + mapList[i].w) && yOne > mapList[i].y && yOne < (mapList[i].y + mapList[i].h)) ||
- (xOne > mapList[i].x && xOne < (mapList[i].x + mapList[i].w) && yTwo > mapList[i].y && yTwo < (mapList[i].y + mapList[i].h)) ||
- (xTwo > mapList[i].x && xTwo < (mapList[i].x + mapList[i].w) && yOne > mapList[i].y && yOne < (mapList[i].y + mapList[i].h)) ||
- (xTwo > mapList[i].x && xTwo < (mapList[i].x + mapList[i].w) && yTwo > mapList[i].y && yTwo < (mapList[i].y + mapList[i].h))
- ) {
- num++
- }
- if (type == 'top' && x1 <= mapList[i].x && x2 >= (mapList[i].x + mapList[i].w) && y1 < (mapList[i].y + mapList[i].h) && y1 > mapList[i].y) {
- num++
- }
- if (type == 'bottom' && x1 <= mapList[i].x && x2 >= (mapList[i].x + mapList[i].w) && y1 > mapList[i].y && y1 < (mapList[i].y + mapList[i].h)) {
- num++
- }
- if (type == 'left' && y1 <= mapList[i].y && y2 >= (mapList[i].y + mapList[i].h) && x1 < (mapList[i].x + mapList[i].w) && x1 > mapList[i].x) {
- num++
- }
- if (type == 'right' && y1 <= mapList[i].y && y2 >= (mapList[i].y + mapList[i].h) && x1 > mapList[i].x && x1 < (mapList[i].x + mapList[i].w)) {
- num++
- }
- // }
- }
- return num == 0
- }
- /*
- * 门/灯 重叠检查
- * 传入:bigObj-父数据,minObj-子数据,index-当前下标
- * 返回:true 或者 false
- * 示例:(本JS内部调用)
- * if(placementOverlapCheck(x,y,type,mapList)){}
- */
- export function childrenOverlapCheck(bigObj) {
- if (bigObj.type == 1 || bigObj.type == 3) {
- let num = 0
- for (let i = 0; i < bigObj.doorList.length; i++) {
- let x1 = bigObj.doorList[i].x
- let y1 = bigObj.doorList[i].y
- let x2 = bigObj.doorList[i].x + bigObj.doorList[i].w
- let y2 = bigObj.doorList[i].y + bigObj.doorList[i].h
- for (let o = 0; o < bigObj.doorList.length; o++) {
- if (i != o) {
- if (x1 >= bigObj.doorList[o].x && x1 <= (bigObj.doorList[o].x + bigObj.doorList[o].w) &&
- y1 >= bigObj.doorList[o].y && y1 <= (bigObj.doorList[o].y + bigObj.doorList[o].h)) {
- num++
- }
- if (x1 >= bigObj.doorList[o].x && x1 <= (bigObj.doorList[o].x + bigObj.doorList[o].w) &&
- y2 >= bigObj.doorList[o].y && y2 <= (bigObj.doorList[o].y + bigObj.doorList[o].h)) {
- num++
- }
- if (x2 >= bigObj.doorList[o].x && x2 <= (bigObj.doorList[o].x + bigObj.doorList[o].w) &&
- y1 >= bigObj.doorList[o].y && y1 <= (bigObj.doorList[o].y + bigObj.doorList[o].h)) {
- num++
- }
- if (x2 >= bigObj.doorList[o].x && x2 <= (bigObj.doorList[o].x + bigObj.doorList[o].w) &&
- y2 >= bigObj.doorList[o].y && y2 <= (bigObj.doorList[o].y + bigObj.doorList[o].h)) {
- num++
- }
- }
- }
- }
- return num == 0
- } else if (bigObj.type == 2) {
- let num = 0
- for (let i = 0; i < bigObj.lightList.length; i++) {
- let x1 = bigObj.lightList[i].x
- let y1 = bigObj.lightList[i].y
- let x2 = bigObj.lightList[i].x + bigObj.lightList[i].w
- let y2 = bigObj.lightList[i].y + bigObj.lightList[i].h
- for (let o = 0; o < bigObj.lightList.length; o++) {
- if (i != o) {
- if (x1 >= bigObj.lightList[o].x && x1 <= (bigObj.lightList[o].x + bigObj.lightList[o].w) &&
- y1 >= bigObj.lightList[o].y && y1 <= (bigObj.lightList[o].y + bigObj.lightList[o].h)) {
- num++
- }
- if (x1 >= bigObj.lightList[o].x && x1 <= (bigObj.lightList[o].x + bigObj.lightList[o].w) &&
- y2 >= bigObj.lightList[o].y && y2 <= (bigObj.lightList[o].y + bigObj.lightList[o].h)) {
- num++
- }
- if (x2 >= bigObj.lightList[o].x && x2 <= (bigObj.lightList[o].x + bigObj.lightList[o].w) &&
- y1 >= bigObj.lightList[o].y && y1 <= (bigObj.lightList[o].y + bigObj.lightList[o].h)) {
- num++
- }
- if (x2 >= bigObj.lightList[o].x && x2 <= (bigObj.lightList[o].x + bigObj.lightList[o].w) &&
- y2 >= bigObj.lightList[o].y && y2 <= (bigObj.lightList[o].y + bigObj.lightList[o].h)) {
- num++
- }
- }
- }
- }
- return num == 0
- }
- }
- /*
- * 检查实验室/灯设置
- * 传入:mapList-布局数据
- * 返回:true 或者 false
- * 示例:(本JS内部调用)
- * if(checkInstall(this.mapList){}
- */
- export function checkInstall(mapList){
- for(let i=0;i<mapList.length;i++){
- if(mapList[i].type == 1){
- if(!mapList[i].roomType){
- Message({
- message: '请给每一个房间设定参数',
- type: 'error',
- offset: 100
- })
- return false
- }
- }else if(mapList[i].type == 2){
- for(let o=0;o<mapList[i].lightList.length;o++){
- if(!mapList[i].lightList[o].state){
- Message({
- message: '请给每一个灯设定参数',
- type: 'error',
- offset: 100
- })
- return false
- }
- }
- }
- }
- return true
- }
|