CommonDraw.h 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304
  1. #pragma once
  2. #include <QPen>
  3. #include <QMenu>
  4. #include <QPainter>
  5. #include <QMessageBox>
  6. #include <QFontMetrics>
  7. #include <QTextCursor>
  8. #include <QGraphicsScene>
  9. #include <QGraphicsItem>
  10. #include <QGraphicsView>
  11. #include <QGraphicsTextItem>
  12. #include <QGraphicsLineItem>
  13. #include <QGraphicsItemGroup>
  14. #include <QGraphicsProxyWidget>
  15. #include <QStyleOptionGraphicsItem>
  16. #include <QGraphicsSceneMouseEvent>
  17. #include <QGraphicsSceneHoverEvent>
  18. // 功能块图相关参数
  19. // 线条宽度
  20. #define PEN_LINE_WIDTH 1
  21. // 选中时的线条宽度
  22. #define PEN_LINE_WIDTH_SEL 2
  23. // 标准类型功能块的基础宽高(会随着Tool名字的长度增加)
  24. // TBD, Standard Tool Block Diagram
  25. #define TBD_BASIC_WIDTH 160
  26. #define TBD_BASIC_HEIGHT 50
  27. // 功能块图可以容纳的最大字符宽度(暂未加入限制)
  28. // PORT类型功能块的基础宽高(宽度会随着用户输入的内容增加)
  29. // PBD, Port Block Diagram
  30. #define PBD_BASIC_WIDTH 120
  31. #define PBD_BASIC_HEIGHT 20
  32. // 文字和边框之间的最小间隙距离
  33. #define PBD_TEXT_GAP_WIDTH 10
  34. // 功能块的背景及边框颜色(这么多颜色是为了实现底色的重影效果)
  35. #define COLOR_TBD_BG QColor(0,108,234)
  36. #define COLOR_TBD_FRAME1 QColor(28,64,114)
  37. // 边框阴影的数量及颜色
  38. #define TBD_SHADOW_COUNT 3
  39. #define COLOR_TBD_SHADOW1 QColor(85,108,146)
  40. #define COLOR_TBD_SHADOW2 QColor(140,156,181)
  41. #define COLOR_TBD_SHADOW3 QColor(198,205,219)
  42. // 阴影的交汇点
  43. #define COLOR_TBD_SHADOW_CORNER1 QColor(39,75,122)
  44. #define COLOR_TBD_SHADOW_CORNER2 QColor(85,108,146)
  45. #define COLOR_TBD_SHADOW_CORNER3 QColor(154,168,190)
  46. // 接口线的首行偏移
  47. #define TBD_INF_OFFSET TBD_BASIC_HEIGHT / 2
  48. // PORT类型接口的首行偏移
  49. #define PBD_INF_OFFSET PBD_BASIC_HEIGHT / 2
  50. // 每个接口线之间的间距
  51. #define TBD_INF_SPACING 15
  52. // 接口线的长度
  53. #define TBD_INF_LINE 15
  54. // 接口的颜色
  55. #define COLOR_INF_LINE QColor(231,114,55)
  56. #define COLOR_INF_DISCARDLINE QColor(0,0,0)
  57. // 工具的序号矩形 宽和高
  58. #define TBD_INDEX_WIDTH 18
  59. #define TBD_INDEX_HEIGHT 20
  60. // 序号的颜色
  61. #define COLOR_TBD_INDEX_BG QColor(229,241,223)
  62. #define COLOR_TBD_INDEX_BG_ERROR QColor(220,20,60)
  63. #define COLOR_TBD_INDEX_FRAME QColor(18,96,51)
  64. #define COLOR_TBD_INDEX_TEXT QColor(18,96,51)
  65. // 接口的字体颜色
  66. #define COLOR_TEXT QColor(240,240,240)
  67. // 接口文字的字体
  68. #define FONT_INF QFont("Courier New",7)
  69. // 功能块工具名字的字体
  70. // #define FONT_TOOLNAME QFont("Arial Black",9, QFont::Bold)
  71. // #define FONT_TOOLNAME QFont("Arial",9)
  72. #define FONT_TOOLNAME QFont("Courier New",8, QFont::Bold)
  73. // 功能块实例名字的字体
  74. // #define FONT_INSTANCENAME QFont("Courier New",9, QFont::Bold)
  75. #define FONT_INSTANCENAME QFont("Arial Black",8)
  76. // 功能块序号使用的字体
  77. #define FONT_INDEX QFont("Arial",7)
  78. // Port类型功能块输入文字使用的字体
  79. #define FONT_PBD QFont("Arial", 7)
  80. // 各种绘图元素的Type定义
  81. #define ITEM_TYPE_STANDARD QGraphicsItem::UserType + 10
  82. #define ITEM_TYPE_PORT QGraphicsItem::UserType + 11
  83. #define ITEM_TYPE_INF QGraphicsItem::UserType + 12
  84. #define ITEM_TYPE_LINK QGraphicsItem::UserType + 13
  85. #define ITEM_TYPE_LINK_LINE QGraphicsItem::UserType + 14
  86. #define ITEM_TYPE_COMMENT QGraphicsItem::UserType + 15
  87. #define ITEM_TYPE_GOTO QGraphicsItem::UserType + 16
  88. #define ITEM_TYPE_PARALLEL QGraphicsItem::UserType + 17
  89. #define ITEM_TYPE_REF_LINE QGraphicsItem::UserType + 18
  90. #define ITEM_TYPE_FORLOOP QGraphicsItem::UserType + 19
  91. #define ITEM_TYPE_WAIT QGraphicsItem::UserType + 20
  92. #define ITEM_TYPE_ISO_LINE QGraphicsItem::UserType + 21
  93. // 自动连接时,Port块与Inf之间的理论距离
  94. #define AUTOPORT_SPACING 15
  95. //=============================================================
  96. // 注释控件相关宏定义
  97. // 注释控件的边框主颜色
  98. #define COLOR_FRAME_COMM QColor(71,159,18)
  99. // 注释控件的文字颜色
  100. #define COLOR_COMM_TEXT QColor(71,159,18)
  101. // 默认尺寸(可随意拉伸大小)
  102. #define COMM_BASIC_WIDTH 160
  103. #define COMM_BASIC_HEIGHT 50
  104. // 边框线条宽度
  105. #define PEN_WIDTH_FRAME 1
  106. #define PEN_WIDTH_FRAME_BOLD 2
  107. // 文字线条宽度
  108. #define PEN_WIDTH_TEXT 2
  109. // 注释文字的与边框的间隙距离
  110. #define COMM_SIDE_X_SPACING 5
  111. #define COMM_SIDE_Y_SPACING 5
  112. // 默认的注释文字
  113. #define COMM_DEFAULT_TEXT "注释\n双击进行编辑,可以输入多行"
  114. // 注释文字采用的字体
  115. #define FONT_COMM QFont("Arial",8)
  116. //=============================================================
  117. // Goto控件相关宏定义
  118. // Goto类型功能块的基础宽高(宽度会随着接口文字的长度自动增加)
  119. #define GBD_BASIC_WIDTH 120
  120. #define GBD_BASIC_HEIGHT 20
  121. // 三角箭头指示器的颜色
  122. // 正常颜色
  123. #define COLOR_ARROW_OUTPUT QColor(231,114,55)
  124. // 尚未执行Goto的颜色
  125. #define COLOR_GOTO_OUTPUT_READY QColor(231,114,55)
  126. // 执行Goto后的颜色
  127. #define COLOR_GOTO_OUTPUT_DONE QColor(71,159,18)
  128. // 三角形边长
  129. #define GOTO_OUTPUT_TRIA_SIDE 18
  130. //=============================================================
  131. // 标准工具的ToolStart接口相关宏定义
  132. // ToolStart接口的起始高度位置
  133. #define TBD_TOPINF_SPACING 10
  134. // ToolStart接口线的长度
  135. #define TBD_TOPINF_LINE TBD_INF_LINE / 2
  136. //=============================================================
  137. // Link 相关宏定义
  138. // 箭头线条的长度
  139. #define LINE_ARROW_SIZE 8
  140. // 连线的颜色
  141. #define LINK_LINE_COLOR QColor(231,114,55)
  142. // 临时连线的颜色
  143. #define LINK_TMPLINE_COLOR QColor(230,230,250)
  144. // 连线的宽度
  145. #define LINK_LINE_WIDTH 1
  146. // 接口Link连线起始线条的固定长度
  147. #define LINK_START_LINE_SIZE 15
  148. //=============================================================
  149. // Parallel 工具相关宏定义
  150. // 并行工具的尺寸
  151. #define PARA_BASIC_WIDTH 120
  152. #define PARA_BASIC_HEIGHT 20
  153. // Parallel边框的颜色
  154. #define COLOR_FRAME_PARALLEL QColor(231,114,55)
  155. // 并行母线的高度
  156. #define PARARREL_LINE_HEIGHT 5
  157. // 并行母线的基础长度(会随着功能块的移动而动态缩减)
  158. #define PARARREL_LINE_BASE_LEN 200
  159. // 并行母线的左右延长长度
  160. #define PARARREL_LINE_EX_LEN 30
  161. // 并行母线和功能块的下边距
  162. #define PARARREL_LINE_SPACE 4
  163. //=============================================================
  164. // Pou中各个元素的Z轴坐标(用于分层)
  165. // Block置于最顶层
  166. #define Z_ORDER_BLOCK 0
  167. // Link连线置于最底层
  168. #define Z_ORDER_LINK - 100.0
  169. //=============================================================
  170. // UI界面相关参数
  171. // UI背景线条所用的画笔颜色
  172. #define UI_POINT_BK_PEN QColor(100, 100, 120)
  173. #define UI_LINE_BK_PEN QColor(70, 70, 90)
  174. // UI背景栅格的默认尺寸
  175. #define UI_DEFAULT_GRID_SIZE 10
  176. // UI控件移动参考线的颜色
  177. // #define COLOR_REFLINE QColor(34, 163, 168)
  178. #define COLOR_REFLINE QColor(90, 200, 90)
  179. // 参考线延长线的长度(超出控件顶点的部分)
  180. #define REFLINE_EXTENSION_LEN 10
  181. // 等宽线的标尺长度
  182. #define ISOLINE_MARK_LEN 15
  183. // 等宽线和边的间隙
  184. #define ISOLINE_SPACE 7
  185. // 等宽线和边错开的差值,等宽线比原有的宽度要多一个像素
  186. #define ISOLINE_FIX 1
  187. // 等宽线箭头大小
  188. #define ISOLINE_ARROW_SIZE 5
  189. /// <summary>
  190. /// UI控件的边序号(为了方便标识参考线的对齐参数)
  191. /// </summary>
  192. enum class SIDE_DIRECTION : short
  193. {
  194. SIDE_LEFT, // 左边
  195. SIDE_TOP, // 上边
  196. SIDE_RIGHT, // 右边
  197. SIDE_BOTTOM, // 下边
  198. SIDE_COUNT, // 边的总数
  199. SIDE_NONE // 无效数据
  200. };
  201. /// <summary>
  202. /// UI控件被拉伸的方向(用于计算等宽线)
  203. /// </summary>
  204. enum class STRETCH_DIRECTION : short
  205. {
  206. DIR_LEFT, // 拉伸左边
  207. DIR_RIGHT, // 拉伸右边
  208. DIR_TOP, // 拉伸上边
  209. DIR_BOTTOM, // 拉伸下边
  210. DIR_LEFTTOP, // 拉伸左上
  211. DIR_RIGHTTOP, // 拉伸右上
  212. DIR_LEFTBOTTOM, // 拉伸左下
  213. DIR_RIGHTBOTTOM, // 拉伸右下
  214. DIR_NONE // 未处于拉伸状态
  215. };
  216. //=============================================================
  217. // ForLoop 工具相关宏定义
  218. // ForLoop工具的尺寸
  219. #define FORLOOP_BASIC_WIDTH 120
  220. #define FORLOOP_BASIC_HEIGHT 40
  221. //=============================================================
  222. // Wait 工具相关宏定义
  223. // Wait工具的尺寸(带2个输出接口)
  224. #define WAIT_BASIC_WIDTH 120
  225. #define WAIT_BASIC_HEIGHT 60
  226. /// <summary>
  227. /// Scene的运行模式
  228. /// </summary>
  229. enum class SCENE_MODE : short
  230. {
  231. NORMAL_MODE, // 正常模式
  232. LINK_MODE, // 连线模式
  233. BATCHMOVE_MODE // 批量移动模式
  234. };