SSpaceItem.ts 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. /*
  2. * *********************************************************************************************************************
  3. *
  4. * !!
  5. * .F88X
  6. * X8888Y
  7. * .}888888N;
  8. * i888888N; .:! .I$WI:
  9. * R888888I .'N88~ i8}+8Y&8"l8i$8>8W~'>W8}8]KW+8IIN"8&
  10. * .R888888I .;N8888~ .X8' "8I.!,/8" !%NY8`"8I8~~8>,88I
  11. * +888888N; .8888888Y "&&8Y.}8,
  12. * ./888888N; .R888888Y .'}~ .>}'.`+> i}! "i' +/' .'i~ !11,.:">, .~]! .i}i
  13. * ~888888%: .I888888l .]88~`1/iY88Ii+1'.R$8$8]"888888888> Y8$ W8E X8E W8888'188Il}Y88$*
  14. * 18888888 E8888881 .]W%8$`R8X'&8%++N8i,8N%N8+l8%` .}8N:.R$RE%N88N%N$K$R 188,FE$8%~Y88I
  15. * .E888888I .i8888888' .:$8I;88+`E8R:/8N,.>881.`$8E/1/]N8X.Y8N`"KF&&FK!'88*."88K./$88%RN888+~
  16. * 8888888I .,N888888~ ~88i"8W,!N8*.I88.}888%F,i$88"F88" 888:E8X.>88!i88>`888*.}Fl1]*}1YKi'
  17. * i888888N' I888Y ]88;/EX*IFKFK88X K8R .l8W 88Y ~88}'88E&%8W.X8N``]88!.$8K .:W8I
  18. * .i888888N; I8Y .&8$ .X88! i881.:%888>I88 ;88] +88+.';;;;:.Y88X 18N.,88l .+88/
  19. * .:R888888I
  20. * .&888888I Copyright (c) 2009-2020. 博锐尚格科技股份有限公司
  21. * ~8888'
  22. * .!88~ All rights reserved.
  23. *
  24. * *********************************************************************************************************************
  25. */
  26. import { SColor, SPainter, STextAlign } from "@persagy-web/draw";
  27. import { Space } from "../../types/floor/Space";
  28. import { ItemOrder, ItemColor } from "../..";
  29. import { SGraphItem, SGraphAreaGroupItem } from "@persagy-web/graph";
  30. import { SMouseEvent } from "@persagy-web/base";
  31. /**
  32. * 模型空间 item
  33. *
  34. * @author 郝建龙 <haojianlong@sagacloud.cn>
  35. */
  36. export class SSpaceItem extends SGraphAreaGroupItem {
  37. /** 空间所有数据 */
  38. data: Space;
  39. /** 高亮状态 */
  40. private _highLightFlag: boolean = false;
  41. get highLightFlag(): boolean {
  42. return this._highLightFlag;
  43. }
  44. set highLightFlag(value: boolean) {
  45. this._highLightFlag = value;
  46. this.update();
  47. }
  48. /** 是否显示名字 */
  49. private _showBaseName: boolean = false;
  50. get showBaseName(): boolean {
  51. return this._showBaseName;
  52. }
  53. set showBaseName(value: boolean) {
  54. this._showBaseName = value;
  55. this.update();
  56. }
  57. /** 是否名字大小 */
  58. private _nameSize: number = 10;
  59. get nameSize(): number {
  60. return this._nameSize;
  61. }
  62. set nameSize(value: number) {
  63. this._nameSize = value;
  64. this.update();
  65. }
  66. /** 名字是否缩放 */
  67. private _nameTransform: boolean = false;
  68. get nameTransform(): boolean {
  69. return this._nameTransform;
  70. }
  71. set nameTransform(value: boolean) {
  72. this._nameTransform = value;
  73. this.update();
  74. }
  75. /** 名字颜色 */
  76. private _nameColor: string = "#000000";
  77. get nameColor(): string {
  78. return this._nameColor;
  79. }
  80. set nameColor(value: string) {
  81. this._nameColor = value;
  82. this.update();
  83. }
  84. /**
  85. * 构造函数
  86. *
  87. * @param parent 指向父对象
  88. * @param data 空间数据
  89. */
  90. constructor(parent: SGraphItem | null, data: Space) {
  91. super(parent, {
  92. outline: [
  93. data.OutLine.map((t): any =>
  94. t.map((it): any => ({ x: it.X, y: -it.Y }))
  95. )
  96. ],
  97. style: {
  98. default: {
  99. stroke: "#2b2b2b",
  100. fill: "#f1fffd80",
  101. lineWidth: 1,
  102. effect: {}
  103. },
  104. selected: {
  105. stroke: "#2b2b2b",
  106. fill: "#1abc9c",
  107. lineWidth: 1,
  108. effect: {}
  109. },
  110. disabled: {
  111. stroke: "#2b2b2b",
  112. fill: "#afafaf",
  113. lineWidth: 1,
  114. effect: {}
  115. },
  116. highlight: {
  117. stroke: "#2b2b2b",
  118. fill: "#fbb029",
  119. lineWidth: 1,
  120. effect: {}
  121. }
  122. }
  123. });
  124. this.data = data;
  125. this.zOrder = ItemOrder.spaceOrder;
  126. this.name = data.Name || "";
  127. }
  128. /**
  129. * 绘制前设置绘制样式
  130. *
  131. * @return 当前状态
  132. */
  133. setStyle(): string {
  134. let status = "default";
  135. // 如果存在样式
  136. if (this.style) {
  137. // 如果处于高亮状态
  138. if (this.highLightFlag) {
  139. status = "highlight";
  140. } else if (this.enabled) {
  141. // 是否可用,true 可用
  142. if (this.selected) {
  143. // 是否选中
  144. status = "selected";
  145. }
  146. } else {
  147. status = "disabled";
  148. }
  149. }
  150. return status;
  151. }
  152. /**
  153. * 鼠标按下事件
  154. *
  155. * @param event 保存事件参数
  156. * @return 是否处理事件
  157. */
  158. onMouseDown(event: SMouseEvent): boolean {
  159. super.onMouseDown(event);
  160. this.$emit("onMouseDown", event);
  161. return true;
  162. }
  163. /**
  164. * 鼠标抬起事件
  165. *
  166. * @param event 保存事件参数
  167. * @return 是否处理事件
  168. */
  169. onMouseUp(event: SMouseEvent): boolean {
  170. super.onMouseUp(event);
  171. this.$emit("onMouseUp", event);
  172. return true;
  173. }
  174. /**
  175. * 鼠标移入事件
  176. *
  177. * @param event 保存事件参数
  178. * @return 是否处理事件
  179. */
  180. onMouseEnter(event: SMouseEvent): boolean {
  181. super.onMouseEnter(event);
  182. this.$emit("onMouseEnter", event);
  183. return false;
  184. }
  185. /**
  186. * 鼠标移出事件
  187. *
  188. * @param event 保存事件参数
  189. * @return 是否处理事件
  190. */
  191. onMouseLeave(event: SMouseEvent): boolean {
  192. super.onMouseLeave(event);
  193. this.$emit("onMouseLeave", event);
  194. return false;
  195. }
  196. /**
  197. * Item 绘制操作
  198. *
  199. * @param painter 绘制对象
  200. */
  201. onDraw(painter: SPainter): void {
  202. super.onDraw(painter);
  203. // 如果显示名字
  204. if (this.showBaseName) {
  205. if (this.name && this.name != "null") {
  206. painter.brush.color = new SColor(this.nameColor);
  207. if (this.nameTransform) {
  208. painter.font.size = this.nameSize;
  209. } else {
  210. painter.font.size = painter.toPx(this.nameSize);
  211. }
  212. painter.font.textAlign = STextAlign.Center;
  213. painter.drawText(
  214. this.name,
  215. this.data.Location.Points[0].X,
  216. -this.data.Location.Points[0].Y
  217. );
  218. }
  219. }
  220. }
  221. }