HistoryUtil.js 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062
  1. import { mathUtil } from "../Util/MathUtil";
  2. import { dataService } from "../Service/DataService";
  3. import { textService } from "../Service/TextService";
  4. import Constant from "../Constant";
  5. import Settings from "../Settings";
  6. export default class HistoryUtil {
  7. constructor() {}
  8. isDifferentForPoints(point1, point2) {
  9. if (
  10. point1.x == point2.x &&
  11. point1.y == point2.y &&
  12. mathUtil.equalJSON(point1.parent, point1.parent) &&
  13. point1.category == point2.category &&
  14. point1.locationMode == point2.locationMode &&
  15. point1.linkedBasePointId == point2.linkedBasePointId &&
  16. point1.linkedTextId == point2.linkedTextId
  17. ) {
  18. return false;
  19. } else {
  20. return true;
  21. }
  22. }
  23. isDifferentForLines(line1, line2) {
  24. if (
  25. line1.startId == line2.startId &&
  26. line1.endId == line2.endId &&
  27. line1.category == line2.category &&
  28. line1.locationMode == line2.locationMode &&
  29. line1.linkedFixPointId == line2.linkedFixPointId &&
  30. line1.linkedBasePointId == line2.linkedBasePointId &&
  31. line1.style == line2.style &&
  32. line1.weight == line2.weight
  33. ) {
  34. return false;
  35. } else {
  36. return true;
  37. }
  38. }
  39. isDifferentForCurvePoints(curvePoint1, curvePoint2) {
  40. if (
  41. curvePoint1.x == curvePoint2.x &&
  42. curvePoint1.y == curvePoint2.y &&
  43. curvePoint1.parent == curvePoint2.parent &&
  44. curvePoint1.index == curvePoint2.index
  45. ) {
  46. return false;
  47. } else {
  48. return true;
  49. }
  50. }
  51. isDifferentForCurveLines(curveLine1, curveLine2) {
  52. if (
  53. curveLine1.startId == curveLine2.startId &&
  54. curveLine1.endId == curveLine2.endId &&
  55. mathUtil.equalJSON(curveLine1.points, curveLine2.points)
  56. ) {
  57. return false;
  58. } else {
  59. return true;
  60. }
  61. }
  62. isDifferentForCircles(circle1, circle2) {
  63. if (
  64. mathUtil.equalPoint(circle1.center, circle2.center) &&
  65. circle1.radiusX == circle2.radiusX &&
  66. circle1.radiusY == circle2.radiusY &&
  67. circle1.color == circle2.color
  68. ) {
  69. return false;
  70. } else {
  71. return true;
  72. }
  73. }
  74. isDifferentForTexts(text1, text2) {
  75. if (
  76. mathUtil.equalPoint(text1.center, text2.center) &&
  77. text1.value == text2.value &&
  78. text1.angle == text2.angle &&
  79. text1.fontSize == text2.fontSize &&
  80. text1.color == text2.color &&
  81. text1.linkedPointId == text2.linkedPointId
  82. ) {
  83. return false;
  84. } else {
  85. return true;
  86. }
  87. }
  88. isDifferentForMagnifiers(magnifier1, magnifier2) {
  89. if (
  90. mathUtil.equalPoint(magnifier1.position, magnifier2.position) &&
  91. magnifier1.photoUrl == magnifier2.photoUrl &&
  92. mathUtil.equalPoint(magnifier1.popPosition, magnifier2.popPosition)
  93. ) {
  94. return false;
  95. } else {
  96. return true;
  97. }
  98. }
  99. isDifferentForSVGs(svg1, svg2) {
  100. if (
  101. mathUtil.equalPoint(svg1.center, svg2.center) &&
  102. svg1.type == svg2.type &&
  103. svg1.angle == svg2.angle &&
  104. svg1.scale == svg2.scale
  105. ) {
  106. return false;
  107. } else {
  108. return true;
  109. }
  110. }
  111. isDifferentForRoadPoints(roadPoint1, roadPoint2) {
  112. if (
  113. mathUtil.equalPoint(roadPoint1, roadPoint2) &&
  114. mathUtil.equalJSON(roadPoint1.parent, roadPoint2.parent)
  115. ) {
  116. return false;
  117. } else {
  118. return true;
  119. }
  120. }
  121. isDifferentForRoadEdges(roadEdge1, roadEdge2) {
  122. if (
  123. mathUtil.equalPoint(roadEdge1.start, roadEdge2.start) &&
  124. mathUtil.equalPoint(roadEdge1.end, roadEdge2.end) &&
  125. roadEdge1.parent == roadEdge2.parent &&
  126. roadEdge1.style == roadEdge2.style
  127. ) {
  128. return false;
  129. } else {
  130. return true;
  131. }
  132. }
  133. isDifferentForRoads(road1, road2) {
  134. if (
  135. road1.startId == road2.startId &&
  136. road1.endId == road2.endId &&
  137. road1.leftEdgeId == road2.leftEdgeId &&
  138. road1.rightEdgeId == road2.rightEdgeId &&
  139. road1.way == road2.way
  140. ) {
  141. if (road1.way == Constant.oneWay) {
  142. if (
  143. road1.singleRoadWidth == road2.singleRoadWidth &&
  144. road1.singleRoadDrivewayCount == road2.singleRoadDrivewayCount &&
  145. road1.singleLanes.length == road2.singleLanes.length
  146. ) {
  147. for (let i = 0; i < road1.singleLanes.length; ++i) {
  148. if (
  149. !mathUtil.equalPoint(
  150. road1.singleLanes[i].start,
  151. road2.singleLanes[i].start
  152. ) ||
  153. !mathUtil.equalPoint(
  154. road1.singleLanes[i].end,
  155. road2.singleLanes[i].end
  156. )
  157. ) {
  158. return true;
  159. }
  160. }
  161. return false;
  162. } else {
  163. return true;
  164. }
  165. } else if (road1.way == Constant.twoWay) {
  166. if (
  167. road1.leftWidth == road2.leftWidth &&
  168. road1.rightWidth == road2.rightWidth &&
  169. road1.leftDrivewayCount == road2.leftDrivewayCount &&
  170. road1.rightDrivewayCount == road2.rightDrivewayCount &&
  171. road1.midDivide.midDivideWidth == road2.midDivide.midDivideWidth &&
  172. mathUtil.equalPoint(
  173. road1.midDivide.leftMidDivide.start,
  174. road2.midDivide.leftMidDivide.start
  175. ) &&
  176. mathUtil.equalPoint(
  177. road1.midDivide.leftMidDivide.end,
  178. road2.midDivide.leftMidDivide.end
  179. ) &&
  180. mathUtil.equalPoint(
  181. road1.midDivide.rightMidDivide.start,
  182. road2.midDivide.rightMidDivide.start
  183. ) &&
  184. mathUtil.equalPoint(
  185. road1.midDivide.rightMidDivide.end,
  186. road2.midDivide.rightMidDivide.end
  187. ) &&
  188. road1.leftLanes.length == road2.leftLanes.length &&
  189. road1.rightLanes.length == road2.rightLanes.length
  190. ) {
  191. for (let i = 0; i < road1.leftLanes.length; ++i) {
  192. if (
  193. !mathUtil.equalPoint(
  194. road1.leftLanes[i].start,
  195. road2.leftLanes[i].start
  196. ) ||
  197. !mathUtil.equalPoint(
  198. road1.leftLanes[i].end,
  199. road2.leftLanes[i].end
  200. )
  201. ) {
  202. return true;
  203. }
  204. }
  205. for (let i = 0; i < road1.rightLanes.length; ++i) {
  206. if (
  207. !mathUtil.equalPoint(
  208. road1.rightLanes[i].start,
  209. road2.rightLanes[i].start
  210. ) ||
  211. !mathUtil.equalPoint(
  212. road1.rightLanes[i].end,
  213. road2.rightLanes[i].end
  214. )
  215. ) {
  216. return true;
  217. }
  218. }
  219. return false;
  220. } else {
  221. return true;
  222. }
  223. } else {
  224. return true;
  225. }
  226. } else {
  227. return true;
  228. }
  229. }
  230. isDifferentForCurveRoadPoints(curveRoadPoint1, curveRoadPoint2) {
  231. if (
  232. mathUtil.equalPoint(curveRoadPoint1, curveRoadPoint2) &&
  233. mathUtil.equalJSON(curveRoadPoint1.parent, curveRoadPoint2.parent) &&
  234. curveRoadPoint1.index == curveRoadPoint2.index
  235. ) {
  236. return false;
  237. } else {
  238. return true;
  239. }
  240. }
  241. isDifferentForCurveRoadEdges(curveRoadEdge1, curveRoadEdge2) {
  242. if (
  243. mathUtil.equalPoint(curveRoadEdge1.start, curveRoadEdge2.start) &&
  244. mathUtil.equalPoint(curveRoadEdge1.end, curveRoadEdge2.end) &&
  245. mathUtil.equalPoints(curveRoadEdge1.points, curveRoadEdge2.points) &&
  246. curveRoadEdge1.parent == curveRoadEdge2.parent &&
  247. curveRoadEdge1.style == curveRoadEdge2.style &&
  248. curveRoadEdge1.weight == curveRoadEdge2.weight
  249. ) {
  250. return false;
  251. } else {
  252. return true;
  253. }
  254. }
  255. isDifferentForCurveRoads(curveRoad1, curveRoad2) {
  256. if (
  257. curveRoad1.startId == curveRoad2.startId &&
  258. curveRoad1.endId == curveRoad2.endId &&
  259. mathUtil.equalPoints(curveRoad1.points, curveRoad2.points) &&
  260. curveRoad1.leftEdgeId == curveRoad2.leftEdgeId &&
  261. curveRoad1.rightEdgeId == curveRoad2.rightEdgeId &&
  262. curveRoad1.way == curveRoad2.way
  263. ) {
  264. if (curveRoad1.way == Constant.oneWay) {
  265. if (
  266. curveRoad1.singleRoadWidth == curveRoad2.singleRoadWidth &&
  267. curveRoad1.singleRoadDrivewayCount ==
  268. curveRoad2.singleRoadDrivewayCount
  269. ) {
  270. return false;
  271. } else {
  272. return true;
  273. }
  274. } else if (curveRoad1.way == Constant.twoWay) {
  275. if (
  276. curveRoad1.leftWidth == curveRoad2.leftWidth &&
  277. curveRoad1.rightWidth == curveRoad2.rightWidth &&
  278. curveRoad1.leftDrivewayCount == curveRoad2.leftDrivewayCount &&
  279. curveRoad1.rightDrivewayCount == curveRoad2.rightDrivewayCount &&
  280. curveRoad1.midDivide.midDivideWidth ==
  281. curveRoad2.midDivide.midDivideWidth
  282. ) {
  283. return false;
  284. } else {
  285. return true;
  286. }
  287. } else {
  288. return true;
  289. }
  290. } else {
  291. return true;
  292. }
  293. }
  294. isDifferentForCrossPoints(crossPoint1, crossPoint2) {
  295. if (
  296. mathUtil.equalPoint(crossPoint1, crossPoint2) &&
  297. mathUtil.equalPoint(crossPoint1.extremePoint, crossPoint2.extremePoint) &&
  298. crossPoint1.edgeInfo1.id == crossPoint2.edgeInfo1.id &&
  299. crossPoint1.edgeInfo1.dir == crossPoint2.edgeInfo1.dir &&
  300. crossPoint1.edgeInfo2.id == crossPoint2.edgeInfo2.id &&
  301. crossPoint1.edgeInfo2.dir == crossPoint2.edgeInfo2.dir &&
  302. crossPoint1.style == crossPoint2.style &&
  303. crossPoint1.weight == crossPoint2.weight
  304. ) {
  305. return false;
  306. } else {
  307. return true;
  308. }
  309. }
  310. isDifferentForSettings(settings1, settings2) {
  311. if (
  312. settings1.selectLineCategory == settings2.selectLineCategory &&
  313. settings1.selectPointCategory == settings2.selectPointCategory &&
  314. settings1.selectLocationMode == settings2.selectLocationMode &&
  315. settings1.baseLineId == settings2.baseLineId &&
  316. settings1.selectBasePointId == settings2.selectBasePointId
  317. ) {
  318. return false;
  319. } else {
  320. return true;
  321. }
  322. }
  323. assignPointFromPoint(point1, point2) {
  324. const pointInfo = {};
  325. pointInfo.vectorId = point1.vectorId;
  326. pointInfo.position = { x: point2.x, y: point2.y };
  327. pointInfo.parent = JSON.parse(JSON.stringify(point2.parent));
  328. pointInfo.locationMode = point2.locationMode;
  329. pointInfo.linkedBasePointId = point2.linkedBasePointId;
  330. pointInfo.linkedTextId = point2.linkedTextId;
  331. pointInfo.category = point2.category;
  332. this.setPointInfo(pointInfo);
  333. }
  334. assignLineFromLine(line1, line2) {
  335. const lineInfo = {};
  336. lineInfo.vectorId = line1.vectorId;
  337. lineInfo.start = line2.start;
  338. lineInfo.end = line2.end;
  339. lineInfo.category = line2.category;
  340. lineInfo.locationMode = line2.locationMode;
  341. lineInfo.linkedFixPointId = line2.linkedFixPointId;
  342. lineInfo.linkedBasePointId = line2.linkedBasePointId;
  343. lineInfo.value = line2.value;
  344. lineInfo.style = line2.style;
  345. lineInfo.weight = line2.weight;
  346. this.setLineInfo(lineInfo);
  347. }
  348. assignCurvePointFromCurvePoint(curvePoint1, curvePoint2) {
  349. const curvePointInfo = {};
  350. curvePointInfo.vectorId = curvePoint1.vectorId;
  351. curvePointInfo.position = { x: curvePoint2.x, y: curvePoint2.y };
  352. curvePointInfo.parent = curvePoint2.parent;
  353. curvePointInfo.index = curvePoint2.index;
  354. this.setCurvePointInfo(curvePointInfo);
  355. }
  356. assignCurveLineFromCurveLine(curveLine1, curveLine2) {
  357. const curveLineInfo = {};
  358. curveLineInfo.vectorId = curveLine1.vectorId;
  359. curveLineInfo.startId = curveLine2.startId;
  360. curveLineInfo.endId = curveLine2.endId;
  361. curveLineInfo.points = JSON.parse(JSON.stringify(curveLine2.points));
  362. curveLineInfo.curves = JSON.parse(JSON.stringify(curveLine2.curves));
  363. this.setCurveLineInfo(curveLineInfo);
  364. }
  365. assignCircleFromCircle(circle1, circle2) {
  366. const circleInfo = {};
  367. circleInfo.vectorId = circle1.vectorId;
  368. circleInfo.center = circle2.center;
  369. circleInfo.radiusX = circle2.radiusX;
  370. circleInfo.radiusY = circle2.radiusY;
  371. circleInfo.points = JSON.parse(JSON.stringify(circle2.points));
  372. circleInfo.color = circle2.color;
  373. this.setCircleInfo(circleInfo);
  374. }
  375. assignTextFromText(text1, text2) {
  376. const textInfo = {};
  377. textInfo.vectorId = text1.vectorId;
  378. textInfo.value = text2.value;
  379. textInfo.center = JSON.parse(JSON.stringify(text2.center));
  380. textInfo.angle = text2.angle;
  381. textInfo.color = text2.color;
  382. textInfo.fontSize = text2.fontSize;
  383. textInfo.linkedPointId = text2.linkedPointId;
  384. this.setTextInfo(textInfo);
  385. }
  386. assignMagnifierFromMagnifier(magnifier1, magnifier2) {
  387. const magnifierInfo = {};
  388. magnifierInfo.vectorId = magnifier1.vectorId;
  389. magnifierInfo.photoUrl = magnifier2.photoUrl;
  390. magnifierInfo.position = JSON.parse(JSON.stringify(magnifier2.position));
  391. magnifierInfo.popPosition = JSON.parse(
  392. JSON.stringify(magnifier2.popPosition)
  393. );
  394. this.setMagnifierInfo(magnifierInfo);
  395. }
  396. assignSVGFromSVG(svg1, svg2) {
  397. const svgInfo = {};
  398. svgInfo.vectorId = svg1.vectorId;
  399. svgInfo.type = svg2.type;
  400. svgInfo.center = JSON.parse(JSON.stringify(svg2.center));
  401. svgInfo.points = JSON.parse(JSON.stringify(svg2.points));
  402. svgInfo.angle = svg2.angle;
  403. svgInfo.scale = svg2.scale;
  404. this.setSVGInfo(svgInfo);
  405. }
  406. assignRoadPointFromRoadPoint(roadPoint1, roadPoint2) {
  407. const roadPointInfo = {};
  408. roadPointInfo.vectorId = roadPoint1.vectorId;
  409. roadPointInfo.position = {
  410. x: roadPoint2.position.x,
  411. y: roadPoint2.position.y,
  412. };
  413. roadPointInfo.parent = JSON.parse(JSON.stringify(roadPoint2.parent));
  414. this.setRoadPointInfo(roadPointInfo);
  415. }
  416. assignRoadEdgeFromRoadEdge(roadEdge1, roadEdge2) {
  417. const roadEdgeInfo = {};
  418. roadEdgeInfo.vectorId = roadEdge1.vectorId;
  419. roadEdgeInfo.style = roadEdge2.style;
  420. roadEdgeInfo.start = { x: roadEdge2.start.x, y: roadEdge2.start.y };
  421. roadEdgeInfo.end = { x: roadEdge2.end.x, y: roadEdge2.end.y };
  422. roadEdgeInfo.parent = roadEdge2.parent;
  423. this.setRoadEdgeInfo(roadEdgeInfo);
  424. }
  425. assignRoadFromRoad(road1, road2) {
  426. const roadInfo = {};
  427. roadInfo.vectorId = road1.vectorId;
  428. roadInfo.startId = road2.startId;
  429. roadInfo.endId = road2.endId;
  430. roadInfo.leftEdgeId = road2.leftEdgeId;
  431. roadInfo.rightEdgeId = road2.rightEdgeId;
  432. roadInfo.way = road2.way;
  433. if (road2.way == Constant.oneWay) {
  434. roadInfo.singleRoadWidth = road2.singleRoadWidth;
  435. roadInfo.singleRoadDrivewayCount = road2.singleRoadDrivewayCount;
  436. roadInfo.singleLanes = JSON.parse(JSON.stringify(road2.singleLanes));
  437. } else if (road2.way == Constant.twoWay) {
  438. roadInfo.leftWidth = road2.leftWidth;
  439. roadInfo.rightWidth = road2.rightWidth;
  440. roadInfo.leftDrivewayCount = road2.leftDrivewayCount;
  441. roadInfo.rightDrivewayCount = road2.rightDrivewayCount;
  442. roadInfo.midDivide = JSON.parse(JSON.stringify(road2.midDivide));
  443. roadInfo.leftLanes = JSON.parse(JSON.stringify(road2.leftLanes));
  444. roadInfo.rightLanes = JSON.parse(JSON.stringify(road2.rightLanes));
  445. }
  446. this.setRoadInfo(roadInfo);
  447. }
  448. assignCurveRoadPointFromCurveRoadPoint(curveRoadPoint1, curveRoadPoint2) {
  449. const curveRoadPointInfo = {};
  450. curveRoadPointInfo.vectorId = curveRoadPoint1.vectorId;
  451. curveRoadPointInfo.position = {
  452. x: curveRoadPoint2.position.x,
  453. y: curveRoadPoint2.position.y,
  454. };
  455. curveRoadPointInfo.parent = JSON.parse(
  456. JSON.stringify(curveRoadPoint2.parent)
  457. );
  458. curveRoadPointInfo.index = curveRoadPoint2.index;
  459. this.setCurveRoadPointInfo(curveRoadPointInfo);
  460. }
  461. assignCurveRoadEdgeFromCurveRoadEdge(curveRoadEdge1, curveRoadEdge2) {
  462. const curveRoadEdgeInfo = {};
  463. curveRoadEdgeInfo.vectorId = curveRoadEdge1.vectorId;
  464. curveRoadEdgeInfo.start = {
  465. x: curveRoadEdge2.start.x,
  466. y: curveRoadEdge2.start.y,
  467. };
  468. curveRoadEdgeInfo.end = {
  469. x: curveRoadEdge2.end.x,
  470. y: curveRoadEdge2.end.y,
  471. };
  472. curveRoadEdgeInfo.points = JSON.parse(
  473. JSON.stringify(curveRoadEdge2.points)
  474. );
  475. curveRoadEdgeInfo.curves = JSON.parse(
  476. JSON.stringify(curveRoadEdge2.curves)
  477. );
  478. curveRoadEdgeInfo.parent = curveRoadEdge2.parent;
  479. curveRoadEdgeInfo.style = curveRoadEdge2.style;
  480. curveRoadEdgeInfo.weight = curveRoadEdge2.weight;
  481. this.setCurveRoadEdgeInfo(curveRoadEdgeInfo);
  482. }
  483. assignCurveRoadFromCurveRoad(curveRoad1, curveRoad2) {
  484. const curveRoadInfo = {};
  485. curveRoadInfo.vectorId = curveRoad1.vectorId;
  486. curveRoadInfo.startId = curveRoad2.startId;
  487. curveRoadInfo.endId = curveRoad2.endId;
  488. curveRoadInfo.leftEdgeId = curveRoad2.leftEdgeId;
  489. curveRoadInfo.rightEdgeId = curveRoad2.rightEdgeId;
  490. curveRoadInfo.points = JSON.parse(JSON.stringify(curveRoad2.points));
  491. curveRoadInfo.curves = JSON.parse(JSON.stringify(curveRoad2.curves));
  492. curveRoadInfo.way = curveRoad2.way;
  493. if (curveRoad2.way == Constant.oneWay) {
  494. curveRoadInfo.singleCurveRoadWidth = curveRoad2.singleCurveRoadWidth;
  495. curveRoadInfo.singleCurveRoadDrivewayCount =
  496. curveRoad2.singleCurveRoadDrivewayCount;
  497. curveRoadInfo.singleLanes = JSON.parse(
  498. JSON.stringify(curveRoad2.singleLanes)
  499. );
  500. curveRoadInfo.singleLanesCurves = JSON.parse(
  501. JSON.stringify(curveRoad2.singleLanesCurves)
  502. );
  503. } else if (curveRoad2.way == Constant.twoWay) {
  504. curveRoadInfo.leftWidth = curveRoad2.leftWidth;
  505. curveRoadInfo.rightWidth = curveRoad2.rightWidth;
  506. curveRoadInfo.leftDrivewayCount = curveRoad2.leftDrivewayCount;
  507. curveRoadInfo.rightDrivewayCount = curveRoad2.rightDrivewayCount;
  508. curveRoadInfo.midDivide = JSON.parse(
  509. JSON.stringify(curveRoad2.midDivide)
  510. );
  511. curveRoadInfo.leftLanesCurves = JSON.parse(
  512. JSON.stringify(curveRoad2.leftLanesCurves)
  513. );
  514. curveRoadInfo.rightLanesCurves = JSON.parse(
  515. JSON.stringify(curveRoad2.rightLanesCurves)
  516. );
  517. curveRoadInfo.leftLanes = JSON.parse(
  518. JSON.stringify(curveRoad2.leftLanes)
  519. );
  520. curveRoadInfo.rightLanes = JSON.parse(
  521. JSON.stringify(curveRoad2.rightLanes)
  522. );
  523. }
  524. curveRoadInfo.points = [];
  525. for (let i = 0; i < curveRoad2.points.length; ++i) {
  526. curveRoadInfo.points[i] = {};
  527. // curveRoadInfo.points[i].vectorId = curveRoad2.points[i].vectorId;
  528. curveRoadInfo.points[i] = curveRoad2.points[i];
  529. }
  530. this.setCurveRoadInfo(curveRoadInfo);
  531. }
  532. assignCrossPointFromCrossPoint(crossPoint1, crossPoint2) {
  533. const crossPointInfo = {};
  534. crossPointInfo.vectorId = crossPoint1.vectorId;
  535. crossPointInfo.position = {
  536. x: crossPoint2.position.x,
  537. y: crossPoint2.position.y,
  538. };
  539. crossPointInfo.edgeInfo1 = JSON.parse(
  540. JSON.stringify(crossPoint2.edgeInfo1)
  541. );
  542. crossPointInfo.edgeInfo2 = JSON.parse(
  543. JSON.stringify(crossPoint2.edgeInfo2)
  544. );
  545. crossPoint1.edgeInfo1 = JSON.parse(JSON.stringify(crossPoint2.edgeInfo1));
  546. crossPoint1.edgeInfo2 = JSON.parse(JSON.stringify(crossPoint2.edgeInfo2));
  547. dataService.addCrossPoint(crossPoint1);
  548. crossPointInfo.extremePoint = {
  549. x: crossPoint2.extremePoint.x,
  550. y: crossPoint2.extremePoint.y,
  551. };
  552. crossPointInfo.style = crossPoint2.style;
  553. crossPointInfo.weight = crossPoint2.weight;
  554. crossPointInfo.curves = JSON.parse(JSON.stringify(crossPoint2.curves));
  555. this.setCrossPointInfo(crossPointInfo);
  556. }
  557. assignSettingsFromSettings(settings1, settings2) {
  558. settings1.selectLineCategory = settings2.selectLineCategory;
  559. settings1.selectPointCategory = settings2.selectPointCategory;
  560. settings1.selectLocationMode = settings2.selectLocationMode;
  561. settings1.baseLineId = settings2.baseLineId;
  562. settings1.selectBasePointId = settings2.selectBasePointId;
  563. }
  564. getDataForPoint(point) {
  565. const data = {};
  566. data.id = point.vectorId;
  567. mathUtil.clonePoint(data, point);
  568. data.parent = JSON.parse(JSON.stringify(point.parent));
  569. data.category = point.category;
  570. data.locationMode = point.locationMode;
  571. data.linkedBasePointId = point.linkedBasePointId;
  572. data.linkedTextId = point.linkedTextId;
  573. data.type = point.geoType;
  574. return data;
  575. }
  576. getDataForLine(line) {
  577. const data = {};
  578. data.id = line.vectorId;
  579. data.start = line.startId;
  580. data.end = line.endId;
  581. data.category = line.category;
  582. data.locationMode = line.locationMode;
  583. data.linkedFixPointId = line.linkedFixPointId;
  584. data.linkedBasePointId = line.linkedBasePointId;
  585. data.type = line.geoType;
  586. data.style = line.style;
  587. data.weight = line.weight;
  588. return data;
  589. }
  590. getDataForCurvePoint(curvePoint) {
  591. const data = {};
  592. data.id = curvePoint.vectorId;
  593. mathUtil.clonePoint(data, curvePoint);
  594. data.parent = curvePoint.parent;
  595. data.index = curvePoint.index;
  596. data.type = curvePoint.geoType;
  597. return data;
  598. }
  599. getDataForCurveLine(curveLine) {
  600. const data = {};
  601. data.id = curveLine.vectorId;
  602. data.startId = curveLine.startId;
  603. data.endId = curveLine.endId;
  604. data.points = JSON.parse(JSON.stringify(curveLine.points));
  605. data.curves = JSON.parse(JSON.stringify(curveLine.curves));
  606. data.type = curveLine.geoType;
  607. return data;
  608. }
  609. getDataForCircle(circle) {
  610. const data = {};
  611. data.id = circle.vectorId;
  612. data.center = {};
  613. mathUtil.clonePoint(data.center, circle.center);
  614. data.radiusX = circle.radiusX;
  615. data.radiusY = circle.radiusY;
  616. data.points = circle.points;
  617. data.color = circle.color;
  618. data.type = circle.geoType;
  619. return data;
  620. }
  621. getDataForText(text) {
  622. const data = {};
  623. data.id = text.vectorId;
  624. data.type = text.geoType;
  625. data.angle = text.angle;
  626. data.center = {};
  627. mathUtil.clonePoint(data.center, text.center);
  628. data.value = text.value;
  629. data.linkedPointId = text.linkedPointId;
  630. data.fontSize = text.fontSize;
  631. data.color = text.color;
  632. return data;
  633. }
  634. getDataForMagnifier(magnifier) {
  635. const data = {};
  636. data.id = magnifier.vectorId;
  637. data.type = magnifier.geoType;
  638. data.position = {};
  639. data.popPosition = {};
  640. mathUtil.clonePoint(data.position, magnifier.position);
  641. mathUtil.clonePoint(data.popPosition, magnifier.popPosition);
  642. data.photoUrl = magnifier.photoUrl;
  643. return data;
  644. }
  645. getDataForSVG(svg) {
  646. const data = {};
  647. data.id = svg.vectorId;
  648. data.type = svg.geoType;
  649. data.center = {};
  650. mathUtil.clonePoint(data.center, svg.center);
  651. data.points = [];
  652. data.points[0] = {};
  653. mathUtil.clonePoint(data.points[0], svg.points[0]);
  654. data.points[1] = {};
  655. mathUtil.clonePoint(data.points[1], svg.points[1]);
  656. data.points[2] = {};
  657. mathUtil.clonePoint(data.points[2], svg.points[2]);
  658. data.points[3] = {};
  659. mathUtil.clonePoint(data.points[3], svg.points[3]);
  660. data.type = svg.type;
  661. data.angle = svg.angle;
  662. data.scale = svg.scale;
  663. return data;
  664. }
  665. getDataForRoadPoint(roadPoint) {
  666. const data = {};
  667. data.id = roadPoint.vectorId;
  668. data.type = roadPoint.geoType;
  669. data.position = {};
  670. mathUtil.clonePoint(data.position, roadPoint);
  671. data.parent = JSON.parse(JSON.stringify(roadPoint.parent));
  672. return data;
  673. }
  674. getDataForRoadEdge(roadEdge) {
  675. const data = {};
  676. data.id = roadEdge.vectorId;
  677. data.type = roadEdge.geoType;
  678. data.parent = roadEdge.parent;
  679. data.start = {};
  680. data.start = JSON.parse(JSON.stringify(roadEdge.start));
  681. data.end = {};
  682. data.end = JSON.parse(JSON.stringify(roadEdge.end));
  683. data.style = roadEdge.style;
  684. return data;
  685. }
  686. getDataForRoad(road) {
  687. const data = {};
  688. data.id = road.vectorId;
  689. data.type = road.geoType;
  690. data.startId = road.startId;
  691. data.endId = road.endId;
  692. data.leftEdgeId = road.leftEdgeId;
  693. data.rightEdgeId = road.rightEdgeId;
  694. data.way = road.way;
  695. if (road.way == Constant.oneWay) {
  696. data.singleRoadWidth = road.singleRoadWidth;
  697. data.singleRoadDrivewayCount = road.singleRoadDrivewayCount;
  698. data.singleLanes = JSON.parse(JSON.stringify(road.singleLanes));
  699. } else if (road.way == Constant.twoWay) {
  700. data.leftWidth = road.leftWidth;
  701. data.rightWidth = road.rightWidth;
  702. data.leftDrivewayCount = road.leftDrivewayCount;
  703. data.rightDrivewayCount = road.rightDrivewayCount;
  704. data.midDivide = JSON.parse(JSON.stringify(road.midDivide));
  705. data.leftLanes = JSON.parse(JSON.stringify(road.leftLanes));
  706. data.rightLanes = JSON.parse(JSON.stringify(road.rightLanes));
  707. }
  708. return data;
  709. }
  710. getDataForCurveRoadPoint(curveRoadPoint) {
  711. const data = {};
  712. data.id = curveRoadPoint.vectorId;
  713. data.type = curveRoadPoint.geoType;
  714. data.position = {};
  715. mathUtil.clonePoint(data.position, curveRoadPoint);
  716. data.parent = curveRoadPoint.parent;
  717. data.index = curveRoadPoint.index;
  718. return data;
  719. }
  720. getDataForCurveRoadEdge(curveRoadEdge) {
  721. const data = {};
  722. data.id = curveRoadEdge.vectorId;
  723. data.type = curveRoadEdge.geoType;
  724. data.parent = curveRoadEdge.parent;
  725. data.start = JSON.parse(JSON.stringify(curveRoadEdge.start));
  726. data.end = JSON.parse(JSON.stringify(curveRoadEdge.end));
  727. data.points = JSON.parse(JSON.stringify(curveRoadEdge.points));
  728. data.curves = JSON.parse(JSON.stringify(curveRoadEdge.curves));
  729. data.style = curveRoadEdge.style;
  730. data.weight = curveRoadEdge.weight;
  731. return data;
  732. }
  733. getDataForCurveRoad(curveRoad) {
  734. const data = {};
  735. data.id = curveRoad.vectorId;
  736. data.type = curveRoad.geoType;
  737. data.startId = curveRoad.startId;
  738. data.endId = curveRoad.endId;
  739. data.leftEdgeId = curveRoad.leftEdgeId;
  740. data.rightEdgeId = curveRoad.rightEdgeId;
  741. data.points = JSON.parse(JSON.stringify(curveRoad.points));
  742. data.curves = JSON.parse(JSON.stringify(curveRoad.curves));
  743. data.way = curveRoad.way;
  744. if (curveRoad.way == Constant.oneWay) {
  745. data.singleCurveRoadWidth = curveRoad.singleRoadWidth;
  746. data.singleCurveRoadDrivewayCount = curveRoad.singleRoadDrivewayCount;
  747. data.singleLanesCurves = JSON.parse(
  748. JSON.stringify(curveRoad.singleLanesCurves)
  749. );
  750. data.singleLanes = JSON.parse(JSON.stringify(curveRoad.singleLanes));
  751. } else if (curveRoad.way == Constant.twoWay) {
  752. data.leftWidth = curveRoad.leftWidth;
  753. data.rightWidth = curveRoad.rightWidth;
  754. data.leftDrivewayCount = curveRoad.leftDrivewayCount;
  755. data.rightDrivewayCount = curveRoad.rightDrivewayCount;
  756. data.midDivide = JSON.parse(JSON.stringify(curveRoad.midDivide));
  757. data.leftLanesCurves = JSON.parse(
  758. JSON.stringify(curveRoad.leftLanesCurves)
  759. );
  760. data.rightLanesCurves = JSON.parse(
  761. JSON.stringify(curveRoad.rightLanesCurves)
  762. );
  763. data.leftLanes = JSON.parse(JSON.stringify(curveRoad.leftLanes));
  764. data.rightLanes = JSON.parse(JSON.stringify(curveRoad.rightLanes));
  765. }
  766. return data;
  767. }
  768. getDataForCrossPoint(crossPoint) {
  769. const data = {};
  770. data.id = crossPoint.vectorId;
  771. data.type = crossPoint.geoType;
  772. data.position = {};
  773. mathUtil.clonePoint(data.position, crossPoint);
  774. data.extremePoint = {};
  775. mathUtil.clonePoint(data.extremePoint, crossPoint.extremePoint);
  776. data.edgeInfo1 = JSON.parse(JSON.stringify(crossPoint.edgeInfo1));
  777. data.edgeInfo2 = JSON.parse(JSON.stringify(crossPoint.edgeInfo2));
  778. data.curves = JSON.parse(JSON.stringify(crossPoint.curves));
  779. data.style = crossPoint.style;
  780. data.weight = crossPoint.weight;
  781. return data;
  782. }
  783. getDataForSettings(settings) {
  784. const data = {};
  785. data.selectLineCategory = settings.selectLineCategory;
  786. data.selectPointCategory = settings.selectPointCategory;
  787. data.selectLocationMode = settings.selectLocationMode;
  788. data.baseLineId = settings.baseLineId;
  789. data.selectBasePointId = settings.selectBasePointId;
  790. return data;
  791. }
  792. setPointInfo(pointInfo) {
  793. let point = dataService.getPoint(pointInfo.vectorId);
  794. mathUtil.clonePoint(point, pointInfo.position);
  795. point.parent = JSON.parse(JSON.stringify(pointInfo.parent));
  796. point.category = pointInfo.category;
  797. point.locationMode = pointInfo.locationMode;
  798. point.linkedBasePointId = pointInfo.linkedBasePointId;
  799. point.linkedTextId = pointInfo.linkedTextId;
  800. return point;
  801. }
  802. setLineInfo(lineInfo) {
  803. let line = dataService.getLine(lineInfo.vectorId);
  804. line.startId = lineInfo.start;
  805. line.endId = lineInfo.end;
  806. line.category = lineInfo.category;
  807. line.locationMode = lineInfo.locationMode;
  808. line.linkedFixPointId = lineInfo.linkedFixPointId;
  809. line.linkedBasePointId = lineInfo.linkedBasePointId;
  810. line.value = lineInfo.value;
  811. line.style = lineInfo.style;
  812. line.weight = lineInfo.weight;
  813. return line;
  814. }
  815. setCurvePointInfo(curvePointInfo) {
  816. let curvePoint = dataService.getCurvePoint(curvePointInfo.vectorId);
  817. mathUtil.clonePoint(curvePoint, curvePointInfo.position);
  818. curvePoint.parent = curvePointInfo.parent;
  819. curvePoint.index = curvePointInfo.index;
  820. return curvePoint;
  821. }
  822. setCurveLineInfo(curveLineInfo) {
  823. let curveLine = dataService.getCurveLine(curveLineInfo.vectorId);
  824. curveLine.startId = curveLineInfo.startId;
  825. curveLine.endId = curveLineInfo.endId;
  826. curveLine.points = [];
  827. for (let i = 0; i < curveLineInfo.points.length; ++i) {
  828. curveLine.points[i] = dataService.getCurvePoint(
  829. curveLineInfo.points[i].vectorId
  830. );
  831. }
  832. curveLine.curves = JSON.parse(JSON.stringify(curveLineInfo.curves));
  833. return curveLine;
  834. }
  835. setCircleInfo(circleInfo) {
  836. let circle = dataService.getCircle(circleInfo.vectorId);
  837. circle.center = circleInfo.center;
  838. circle.radius = circleInfo.radius;
  839. circle.color = circleInfo.color;
  840. circle.radiusX = circleInfo.radiusX;
  841. circle.radiusY = circleInfo.radiusY;
  842. circle.points = circleInfo.points;
  843. return circle;
  844. }
  845. setTextInfo(textInfo) {
  846. let text = dataService.getText(textInfo.vectorId);
  847. text.vectorId = textInfo.vectorId;
  848. text.center = JSON.parse(JSON.stringify(textInfo.center));
  849. text.value = textInfo.value;
  850. text.angle = textInfo.angle;
  851. text.fontSize = textInfo.fontSize;
  852. text.color = textInfo.color;
  853. text.linkedPointId = textInfo.linkedPointId;
  854. }
  855. setMagnifierInfo(magnifierInfo) {
  856. let magnifier = dataService.getMagnifier(magnifierInfo.vectorId);
  857. magnifier.vectorId = magnifierInfo.vectorId;
  858. magnifier.position = JSON.parse(JSON.stringify(magnifierInfo.position));
  859. magnifier.popPosition = JSON.parse(
  860. JSON.stringify(magnifierInfo.popPosition)
  861. );
  862. magnifier.photoUrl = magnifierInfo.photoUrl;
  863. }
  864. setSVGInfo(svgInfo) {
  865. let svg = dataService.getSVG(svgInfo.vectorId);
  866. svg.vectorId = svgInfo.vectorId;
  867. svg.center = JSON.parse(JSON.stringify(svgInfo.center));
  868. svg.points = JSON.parse(JSON.stringify(svgInfo.points));
  869. svg.type = svgInfo.type;
  870. svg.angle = svgInfo.angle;
  871. svg.scale = svgInfo.scale;
  872. }
  873. setRoadPointInfo(roadPointInfo) {
  874. let roadPoint = dataService.getRoadPoint(roadPointInfo.vectorId);
  875. roadPoint.vectorId = roadPointInfo.vectorId;
  876. mathUtil.clonePoint(roadPoint, roadPointInfo.position);
  877. roadPoint.parent = JSON.parse(JSON.stringify(roadPointInfo.parent));
  878. }
  879. setRoadEdgeInfo(roadEdgeInfo) {
  880. let roadEdge = dataService.getRoadEdge(roadEdgeInfo.vectorId);
  881. roadEdge.vectorId = roadEdgeInfo.vectorId;
  882. mathUtil.clonePoint(roadEdge.start, roadEdgeInfo.start);
  883. mathUtil.clonePoint(roadEdge.end, roadEdgeInfo.end);
  884. roadEdge.type = roadEdgeInfo.type;
  885. roadEdge.style = roadEdgeInfo.style;
  886. }
  887. setRoadInfo(roadInfo) {
  888. let road = dataService.getRoad(roadInfo.vectorId);
  889. road.vectorId = roadInfo.vectorId;
  890. road.startId = roadInfo.startId;
  891. road.endId = roadInfo.endId;
  892. road.leftEdgeId = roadInfo.leftEdgeId;
  893. road.rightEdgeId = roadInfo.rightEdgeId;
  894. road.way = roadInfo.way;
  895. if (road.way == Constant.oneWay) {
  896. road.singleRoadWidth = roadInfo.singleRoadWidth;
  897. road.singleRoadDrivewayCount = roadInfo.singleRoadDrivewayCount;
  898. road.singleLanes = JSON.parse(JSON.stringify(roadInfo.singleLanes));
  899. } else if (road.way == Constant.twoWay) {
  900. road.leftWidth = roadInfo.leftWidth;
  901. road.rightWidth = roadInfo.rightWidth;
  902. road.leftDrivewayCount = roadInfo.leftDrivewayCount;
  903. road.rightDrivewayCount = roadInfo.rightDrivewayCount;
  904. road.midDivide = JSON.parse(JSON.stringify(roadInfo.midDivide));
  905. road.leftLanes = JSON.parse(JSON.stringify(roadInfo.leftLanes));
  906. road.rightLanes = JSON.parse(JSON.stringify(roadInfo.rightLanes));
  907. }
  908. }
  909. setCurveRoadPointInfo(curveRoadPointInfo) {
  910. let curveRoadPoint = dataService.getCurveRoadPoint(
  911. curveRoadPointInfo.vectorId
  912. );
  913. curveRoadPoint.vectorId = curveRoadPointInfo.vectorId;
  914. mathUtil.clonePoint(curveRoadPoint, curveRoadPointInfo.position);
  915. curveRoadPoint.parent = JSON.parse(
  916. JSON.stringify(curveRoadPointInfo.parent)
  917. );
  918. curveRoadPoint.index = curveRoadPointInfo.index;
  919. }
  920. setCurveRoadEdgeInfo(curveRoadEdgeInfo) {
  921. let curveRoadEdge = dataService.getCurveRoadEdge(
  922. curveRoadEdgeInfo.vectorId
  923. );
  924. curveRoadEdge.vectorId = curveRoadEdgeInfo.vectorId;
  925. mathUtil.clonePoint(curveRoadEdge.start, curveRoadEdgeInfo.start);
  926. mathUtil.clonePoint(curveRoadEdge.end, curveRoadEdgeInfo.end);
  927. for (let i = 0; i < curveRoadEdgeInfo.points.length; ++i) {
  928. curveRoadEdge.points[i] = {};
  929. mathUtil.clonePoint(curveRoadEdge.points[i], curveRoadEdgeInfo.points[i]);
  930. }
  931. curveRoadEdge.curves = JSON.parse(JSON.stringify(curveRoadEdgeInfo.curves));
  932. curveRoadEdge.type = curveRoadEdgeInfo.type;
  933. curveRoadEdge.style = curveRoadEdgeInfo.style;
  934. curveRoadEdge.weight = curveRoadEdgeInfo.weight;
  935. }
  936. setCurveRoadInfo(curveRoadInfo) {
  937. let curveRoad = dataService.getCurveRoad(curveRoadInfo.vectorId);
  938. curveRoad.vectorId = curveRoadInfo.vectorId;
  939. curveRoad.startId = curveRoadInfo.startId;
  940. curveRoad.endId = curveRoadInfo.endId;
  941. curveRoad.leftEdgeId = curveRoadInfo.leftEdgeId;
  942. curveRoad.rightEdgeId = curveRoadInfo.rightEdgeId;
  943. for (let i = 0; i < curveRoadInfo.points.length; ++i) {
  944. curveRoad.points[i] = dataService.getCurveRoadPoint(
  945. curveRoadInfo.points[i].vectorId
  946. );
  947. }
  948. //curveRoad.points = JSON.parse(JSON.stringify(curveRoadInfo.points));
  949. curveRoad.curves = JSON.parse(JSON.stringify(curveRoadInfo.curves));
  950. if (curveRoad.way == Constant.oneWay) {
  951. curveRoad.singleCurveRoadWidth = curveRoadInfo.singleCurveRoadWidth;
  952. curveRoad.singleCurveRoadDrivewayCount =
  953. curveRoadInfo.singleCurveRoadDrivewayCount;
  954. curveRoad.singleLanesCurves = JSON.parse(
  955. JSON.stringify(curveRoadInfo.singleLanesCurves)
  956. );
  957. curveRoad.singleLanes = JSON.parse(
  958. JSON.stringify(curveRoadInfo.singleLanes)
  959. );
  960. } else if (curveRoad.way == Constant.twoWay) {
  961. curveRoad.leftWidth = curveRoadInfo.leftWidth;
  962. curveRoad.rightWidth = curveRoadInfo.rightWidth;
  963. curveRoad.leftDrivewayCount = curveRoadInfo.leftDrivewayCount;
  964. curveRoad.rightDrivewayCount = curveRoadInfo.rightDrivewayCount;
  965. curveRoad.midDivide = JSON.parse(JSON.stringify(curveRoadInfo.midDivide));
  966. curveRoad.leftLanesCurves = JSON.parse(
  967. JSON.stringify(curveRoadInfo.leftLanesCurves)
  968. );
  969. curveRoad.rightLanesCurves = JSON.parse(
  970. JSON.stringify(curveRoadInfo.rightLanesCurves)
  971. );
  972. curveRoad.leftLanes = JSON.parse(JSON.stringify(curveRoadInfo.leftLanes));
  973. curveRoad.rightLanes = JSON.parse(
  974. JSON.stringify(curveRoadInfo.rightLanes)
  975. );
  976. }
  977. }
  978. setCrossPointInfo(crossPointInfo) {
  979. let crossPoint = dataService.getCrossPoint3(crossPointInfo.vectorId);
  980. crossPoint.vectorId = crossPointInfo.vectorId;
  981. mathUtil.clonePoint(crossPoint, crossPointInfo.position);
  982. crossPoint.extremePoint = {};
  983. mathUtil.clonePoint(crossPoint.extremePoint, crossPointInfo.extremePoint);
  984. crossPoint.edgeInfo1 = JSON.parse(JSON.stringify(crossPointInfo.edgeInfo1));
  985. crossPoint.edgeInfo2 = JSON.parse(JSON.stringify(crossPointInfo.edgeInfo2));
  986. crossPoint.curves = JSON.parse(JSON.stringify(crossPointInfo.curves));
  987. crossPoint.style = crossPointInfo.style;
  988. crossPoint.weight = crossPointInfo.weight;
  989. }
  990. }
  991. const historyUtil = new HistoryUtil();
  992. export { historyUtil };