HistoryUtil.js 35 KB

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