Render.js 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. import VectorType from '../enum/VectorType.js'
  2. import { floorplanService } from '../Service/FloorplanService.js'
  3. import { elementService } from '../Service/ElementService.js'
  4. import { coordinate } from '../Coordinate.js'
  5. import { draw } from './Draw.js'
  6. import { floorplanData } from '../FloorplanData.js'
  7. import { signService } from '../Service/SignService.js'
  8. export default class Render {
  9. constructor(layer) {
  10. this.layer = layer
  11. this.displayPanos = false
  12. }
  13. //绘制户型
  14. drawGeometry(vector, styleType, flag) {
  15. if (draw.context == null || vector == null || !vector.geoType) {
  16. return
  17. }
  18. switch (vector.geoType) {
  19. case VectorType.Wall:
  20. draw.drawWall(vector, styleType)
  21. //draw.drawMeasures(vector);
  22. return
  23. case VectorType.Point:
  24. draw.drawPoint(vector)
  25. return
  26. case VectorType.Tag:
  27. draw.drawTag(vector, styleType, flag)
  28. return
  29. case VectorType.Rectangle:
  30. draw.drawRectangle(vector)
  31. return
  32. case VectorType.Circle:
  33. draw.drawCircleGeo(vector) //drawCircle已经用了
  34. return
  35. case VectorType.Icon:
  36. draw.drawIcon(vector)
  37. return
  38. case VectorType.Arrow:
  39. draw.drawArrow(vector)
  40. return
  41. case VectorType.Table:
  42. draw.drawTable(vector)
  43. return
  44. case VectorType.Title:
  45. draw.drawTitle(vector)
  46. return
  47. case VectorType.BgImage:
  48. draw.drawBgImage(vector)
  49. return
  50. case VectorType.Compass:
  51. draw.drawCompass(vector)
  52. return
  53. case VectorType.CustomImage:
  54. draw.drawCustomImage(vector)
  55. return
  56. }
  57. if (signService.isSign(vector.geoType)) {
  58. draw.drawSign(vector)
  59. return
  60. }
  61. }
  62. //绘制交互的元素
  63. drawElement(vector) {
  64. if (draw.context == null) {
  65. return
  66. }
  67. switch (vector.geoType) {
  68. case VectorType.Point:
  69. draw.drawCircle(vector)
  70. break
  71. case VectorType.Line:
  72. draw.drawLine(vector)
  73. break
  74. }
  75. }
  76. redrawElements() {
  77. if (elementService.vCheckLines.X && elementService.vCheckLines.X.display) {
  78. this.drawElement(elementService.vCheckLines.X)
  79. }
  80. if (elementService.vCheckLines.Y && elementService.vCheckLines.Y.display) {
  81. this.drawElement(elementService.vCheckLines.Y)
  82. }
  83. if (elementService.startAddWall && elementService.startAddWall.display) {
  84. this.drawElement(elementService.startAddWall)
  85. }
  86. if (elementService.newWall && elementService.newWall.display) {
  87. this.drawElement(elementService.newWall)
  88. }
  89. if (elementService.checkLines.X && elementService.checkLines.X.display) {
  90. this.drawElement(elementService.checkLines.X)
  91. }
  92. if (elementService.checkLines.Y && elementService.checkLines.Y.display) {
  93. this.drawElement(elementService.checkLines.Y)
  94. }
  95. }
  96. redrawRooms(floor) {
  97. let rooms = roomService.getRooms(floor)
  98. for (let i = 0; i < rooms.length; ++i) {
  99. let img = null
  100. for (let j = 0; j < this.layer.app.CadManager.labels.length; ++j) {
  101. if (rooms[i].tagName != null && rooms[i].tagName.trim() == this.layer.app.CadManager.labels[j].text) {
  102. if (this.layer.app.CadManager.labels[j].type == 'hall') {
  103. img = roomService.getHallImg()
  104. draw.drawRoomBackGround(rooms[i], img)
  105. } else if (this.layer.app.CadManager.labels[j].type == 'room') {
  106. img = roomService.getDefaultImg()
  107. draw.drawRoomBackGround(rooms[i], img)
  108. } else if (this.layer.app.CadManager.labels[j].type == 'other') {
  109. img = roomService.getOtherImg()
  110. draw.drawRoomBackGround(rooms[i], img)
  111. }
  112. break
  113. }
  114. }
  115. if (img == null) {
  116. img = roomService.getOtherImg()
  117. draw.drawRoomBackGround(rooms[i], img)
  118. }
  119. }
  120. }
  121. autoRedraw() {
  122. draw.clear()
  123. let data = floorplanService.getFloorData()
  124. if (!data) {
  125. return
  126. }
  127. let title = data.title
  128. this.drawGeometry(title)
  129. let bgImage = data.image
  130. this.drawGeometry(bgImage)
  131. let compass = data.compass
  132. this.drawGeometry(compass)
  133. let walls = data.walls
  134. for (let key in walls) {
  135. this.drawGeometry(walls[key])
  136. }
  137. let points = data.points
  138. for (let key in points) {
  139. this.drawGeometry(points[key])
  140. }
  141. //draw.drawSpecialPoint()
  142. let signs = data.signs
  143. for (let key in signs) {
  144. this.drawGeometry(signs[key])
  145. }
  146. let tags = data.tags
  147. for (let key in tags) {
  148. this.drawGeometry(tags[key])
  149. }
  150. let tables = data.tables
  151. for (let key in tables) {
  152. this.drawGeometry(tables[key])
  153. }
  154. let rectangles = data.rectangles
  155. for (let key in rectangles) {
  156. this.drawGeometry(rectangles[key])
  157. }
  158. let circles = data.circles
  159. for (let key in circles) {
  160. this.drawGeometry(circles[key])
  161. }
  162. let arrows = data.arrows
  163. for (let key in arrows) {
  164. this.drawGeometry(arrows[key])
  165. }
  166. let icons = data.icons
  167. for (let key in icons) {
  168. this.drawGeometry(icons[key])
  169. }
  170. let customImages = data.customImages
  171. for (let key in customImages) {
  172. this.drawGeometry(customImages[key])
  173. }
  174. this.redrawElements()
  175. }
  176. autoRedrawForImg() {
  177. draw.clear()
  178. // if (this.displayPanos) {
  179. // this.drawPanos(this.layer.panos[floorplanService.currentFloor])
  180. // }
  181. let data = floorplanService.getFloorData()
  182. if (!data) {
  183. return
  184. }
  185. let walls = data.walls
  186. for (let key in walls) {
  187. this.drawGeometry(walls[key])
  188. }
  189. // let points = data.points
  190. // for (let key in points) {
  191. // this.drawGeometry(points[key])
  192. // }
  193. let signs = data.signs
  194. for (let key in signs) {
  195. this.drawGeometry(signs[key])
  196. }
  197. let tags = data.tags
  198. for (let key in tags) {
  199. this.drawGeometry(tags[key], null, true)
  200. }
  201. //this.redrawElements()
  202. }
  203. //下载图片
  204. //style表示风格
  205. autoRedrawForDownLoadImg(styleType) {
  206. draw.clear()
  207. if (styleType == 'style-1') {
  208. draw.drawBackGround('#FFFFFF')
  209. this.redrawRooms(floorplanService.getCurrentFloor())
  210. } else if (styleType == 'style-2') {
  211. draw.drawBackGround('#000000')
  212. this.redrawRooms(floorplanService.getCurrentFloor())
  213. } else if (styleType == 'style-3') {
  214. draw.drawBackGround('#FFFFFF')
  215. } else if (styleType == 'style-4') {
  216. draw.drawBackGround('#000000')
  217. }
  218. let data = floorplanService.getFloorData()
  219. if (!data) {
  220. return
  221. }
  222. let walls = data.walls
  223. for (let key in walls) {
  224. this.drawGeometry(walls[key], styleType)
  225. }
  226. let signs = data.signs
  227. for (let key in signs) {
  228. this.drawGeometry(signs[key])
  229. }
  230. let tags = data.tags
  231. for (let key in tags) {
  232. this.drawGeometry(tags[key], styleType)
  233. }
  234. draw.drawCompass(styleType)
  235. }
  236. redrawCore() {
  237. console.log('重绘!')
  238. draw.clear()
  239. let data = floorplanService.getFloorData()
  240. if (!data) {
  241. return
  242. }
  243. let walls = data.walls
  244. for (let key in walls) {
  245. this.drawGeometry(walls[key])
  246. }
  247. let points = data.points
  248. for (let key in points) {
  249. this.drawGeometry(points[key])
  250. }
  251. let signs = data.signs
  252. for (let key in signs) {
  253. this.drawGeometry(signs[key])
  254. }
  255. }
  256. clear() {
  257. draw.clear()
  258. }
  259. getContext() {
  260. return draw.context
  261. }
  262. }
  263. // const render = new Render()
  264. // export { render }