Render.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  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 { furnitureService } from '../Service/FurnitureService.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) {
  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.SingleDoor:
  27. draw.drawSingleDoor(vector, styleType, flag)
  28. return
  29. case VectorType.DoubleDoor:
  30. draw.drawDoubleDoor(vector, styleType, flag)
  31. return
  32. case VectorType.SlideDoor:
  33. draw.drawSlideDoor(vector, styleType, flag)
  34. return
  35. case VectorType.SingleWindow:
  36. draw.drawSingleWindow(vector, styleType)
  37. return
  38. case VectorType.FrenchWindow:
  39. draw.drawFrenchWindow(vector, styleType)
  40. return
  41. case VectorType.BayWindow:
  42. draw.drawBayWindow(vector, styleType)
  43. return
  44. case VectorType.Pass:
  45. draw.drawPass(vector)
  46. return
  47. case VectorType.Beam:
  48. draw.drawBeam(vector)
  49. return
  50. case VectorType.Flue:
  51. draw.drawFlue(vector)
  52. return
  53. case VectorType.Corridor:
  54. draw.drawCorridor(vector)
  55. return
  56. case VectorType.Tag:
  57. draw.drawTag(vector, styleType, flag)
  58. return
  59. }
  60. if (furnitureService.isFurniture(vector.geoType)) {
  61. draw.drawFurniture(vector)
  62. }
  63. }
  64. //绘制交互的元素
  65. drawElement(vector) {
  66. if (draw.context == null) {
  67. return
  68. }
  69. switch (vector.geoType) {
  70. case VectorType.Point:
  71. draw.drawCircle(vector)
  72. break
  73. case VectorType.Line:
  74. draw.drawLine(vector)
  75. break
  76. }
  77. }
  78. drawPanos(panos) {
  79. // const angle = floorplanService.getAngle()
  80. // for (let i = 0; i < panos.length; ++i) {
  81. // let pano = JSON.parse(JSON.stringify(panos[i]))
  82. // //可能要旋转角度
  83. // pano = coordinate.getVectorForRotate(pano, angle)
  84. // draw.drawCircle(pano)
  85. // //draw.drawText(pano, pano.vectorId)
  86. // }
  87. for (let i = 0; i < panos.length; ++i) {
  88. draw.drawCircle(panos[i])
  89. }
  90. }
  91. redrawElements() {
  92. if (elementService.vCheckLines.X && elementService.vCheckLines.X.display) {
  93. this.drawElement(elementService.vCheckLines.X)
  94. }
  95. if (elementService.vCheckLines.Y && elementService.vCheckLines.Y.display) {
  96. this.drawElement(elementService.vCheckLines.Y)
  97. }
  98. if (elementService.startAddWall && elementService.startAddWall.display) {
  99. this.drawElement(elementService.startAddWall)
  100. }
  101. if (elementService.newWall && elementService.newWall.display) {
  102. this.drawElement(elementService.newWall)
  103. }
  104. if (elementService.symbolPoints.Start && elementService.symbolPoints.Start.display) {
  105. this.drawElement(elementService.symbolPoints.Start)
  106. }
  107. if (elementService.symbolPoints.End && elementService.symbolPoints.End.display) {
  108. this.drawElement(elementService.symbolPoints.End)
  109. }
  110. if (elementService.checkLines.X && elementService.checkLines.X.display) {
  111. this.drawElement(elementService.checkLines.X)
  112. }
  113. if (elementService.checkLines.Y && elementService.checkLines.Y.display) {
  114. this.drawElement(elementService.checkLines.Y)
  115. }
  116. }
  117. redrawRooms(floor) {
  118. let rooms = roomService.getRooms(floor)
  119. for (let i = 0; i < rooms.length; ++i) {
  120. let img = null
  121. for (let j = 0; j < this.layer.app.CadManager.labels.length; ++j) {
  122. if (rooms[i].tagName != null && rooms[i].tagName.trim() == this.layer.app.CadManager.labels[j].text) {
  123. if (this.layer.app.CadManager.labels[j].type == 'hall') {
  124. img = roomService.getHallImg()
  125. draw.drawRoomBackGround(rooms[i], img)
  126. } else if (this.layer.app.CadManager.labels[j].type == 'room') {
  127. img = roomService.getDefaultImg()
  128. draw.drawRoomBackGround(rooms[i], img)
  129. } else if (this.layer.app.CadManager.labels[j].type == 'other') {
  130. img = roomService.getOtherImg()
  131. draw.drawRoomBackGround(rooms[i], img)
  132. }
  133. break
  134. }
  135. }
  136. if (img == null) {
  137. img = roomService.getOtherImg()
  138. draw.drawRoomBackGround(rooms[i], img)
  139. }
  140. }
  141. }
  142. autoRedraw() {
  143. draw.clear()
  144. if (this.displayPanos) {
  145. this.drawPanos(floorplanData.panos)
  146. }
  147. let data = floorplanService.getFloorData()
  148. if (!data) {
  149. return
  150. }
  151. let walls = data.walls
  152. for (let key in walls) {
  153. this.drawGeometry(walls[key])
  154. }
  155. let points = data.points
  156. for (let key in points) {
  157. this.drawGeometry(points[key])
  158. }
  159. draw.drawSpecialPoint()
  160. let symbols = data.symbols
  161. for (let key in symbols) {
  162. this.drawGeometry(symbols[key])
  163. draw.drawSymbolPoint(symbols[key])
  164. }
  165. draw.drawSelectSymbolPoint()
  166. let components = data.components
  167. for (let key in components) {
  168. this.drawGeometry(components[key])
  169. }
  170. let furnitures = data.furnitures
  171. for (let key in furnitures) {
  172. this.drawGeometry(furnitures[key])
  173. }
  174. let tags = data.tags
  175. for (let key in tags) {
  176. this.drawGeometry(tags[key])
  177. }
  178. this.redrawElements()
  179. }
  180. autoRedrawForImg() {
  181. draw.clear()
  182. // if (this.displayPanos) {
  183. // this.drawPanos(this.layer.panos[floorplanService.currentFloor])
  184. // }
  185. let data = floorplanService.getFloorData()
  186. if (!data) {
  187. return
  188. }
  189. let walls = data.walls
  190. for (let key in walls) {
  191. this.drawGeometry(walls[key])
  192. }
  193. // let points = data.points
  194. // for (let key in points) {
  195. // this.drawGeometry(points[key])
  196. // }
  197. let symbols = data.symbols
  198. let noEnter = true
  199. for (let key in symbols) {
  200. this.drawGeometry(symbols[key], null, noEnter)
  201. }
  202. let components = data.components
  203. for (let key in components) {
  204. this.drawGeometry(components[key])
  205. }
  206. let furnitures = data.furnitures
  207. for (let key in furnitures) {
  208. this.drawGeometry(furnitures[key])
  209. }
  210. let tags = data.tags
  211. for (let key in tags) {
  212. this.drawGeometry(tags[key], null, true)
  213. }
  214. //this.redrawElements()
  215. }
  216. //下载图片
  217. //style表示风格
  218. autoRedrawForDownLoadImg(styleType) {
  219. draw.clear()
  220. if (styleType == 'style-1') {
  221. draw.drawBackGround('#FFFFFF')
  222. this.redrawRooms(floorplanService.getCurrentFloor())
  223. } else if (styleType == 'style-2') {
  224. draw.drawBackGround('#000000')
  225. this.redrawRooms(floorplanService.getCurrentFloor())
  226. } else if (styleType == 'style-3') {
  227. draw.drawBackGround('#FFFFFF')
  228. } else if (styleType == 'style-4') {
  229. draw.drawBackGround('#000000')
  230. }
  231. let data = floorplanService.getFloorData()
  232. if (!data) {
  233. return
  234. }
  235. let walls = data.walls
  236. for (let key in walls) {
  237. this.drawGeometry(walls[key], styleType)
  238. }
  239. let symbols = data.symbols
  240. let noEnter = false
  241. for (let key in symbols) {
  242. this.drawGeometry(symbols[key], styleType, noEnter)
  243. }
  244. let components = data.components
  245. for (let key in components) {
  246. this.drawGeometry(components[key])
  247. }
  248. let furnitures = data.furnitures
  249. for (let key in furnitures) {
  250. this.drawGeometry(furnitures[key])
  251. }
  252. let tags = data.tags
  253. for (let key in tags) {
  254. this.drawGeometry(tags[key], styleType)
  255. }
  256. draw.drawCompass(styleType)
  257. }
  258. redrawCore() {
  259. console.log('重绘!')
  260. draw.clear()
  261. let data = floorplanService.getFloorData()
  262. if (!data) {
  263. return
  264. }
  265. let walls = data.walls
  266. for (let key in walls) {
  267. this.drawGeometry(walls[key])
  268. }
  269. let points = data.points
  270. for (let key in points) {
  271. this.drawGeometry(points[key])
  272. }
  273. let symbols = data.symbols
  274. for (let key in symbols) {
  275. this.drawGeometry(symbols[key])
  276. }
  277. let components = data.components
  278. for (let key in components) {
  279. this.drawGeometry(components[key])
  280. }
  281. let furnitures = data.furnitures
  282. for (let key in furnitures) {
  283. this.drawGeometry(furnitures[key])
  284. }
  285. }
  286. clear() {
  287. draw.clear()
  288. }
  289. getContext() {
  290. return draw.context
  291. }
  292. }
  293. // const render = new Render()
  294. // export { render }