VImageControl.h 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309
  1. #pragma once
  2. #include "../ShowUnit/HWndUnit.h"
  3. #include "Common.h"
  4. #include "VControlObject.h"
  5. // 扩展属性相关数量
  6. #define IMAGE_PROPERTY_EX_MAINLINK_COUNT 1
  7. //#define IMAGE_PROPERTY_EX_SUBGROUPLINK_COUNT 2
  8. //#define IMAGE_PROPERTY_EX_SUBGROUPLINK2_COUNT 2
  9. //#define IMAGE_PROPERTY_EX_GROUP_COUNT 2
  10. // 扩展属性的组名
  11. #define IMAGE_PROPERTY_EX_NAME "图像"
  12. #define IMAGE_PROPERTY_EX_MAINLINK_NAME "图像链接"
  13. #define IMAGE_PROPERTY_EX_REFRESHLINK_NAME "显示刷新链接"
  14. // 组1
  15. #define IMAGE_PROPERTY_EX_GROUP_NAME "图层"
  16. #define IMAGE_PROPERTY_EX_SUBGROUP_NAME "图层数据"
  17. #define IMAGE_PROPERTY_EX_LINK1_NAME "图层链接"
  18. #define IMAGE_PROPERTY_EX_LINK2_NAME "图层状态链接"
  19. // 杂项
  20. #define IMAGE_PROPERTY_EX_HOBJECT_COLOR_NAME "图层颜色"
  21. // #define IMAGE_PROPERTY_EX_HOBJECT_TRANSP_NAME "图层透明度"
  22. #define IMAGE_PROPERTY_EX_LINEWIDTH_NAME "图层线宽"
  23. // 组2
  24. #define IMAGE_PROPERTY_EX_GROUP2_NAME "文本"
  25. #define IMAGE_PROPERTY_EX_SUBGROUP2_NAME "文本数据"
  26. #define IMAGE_PROPERTY_EX_LINK3_NAME "文本链接"
  27. #define IMAGE_PROPERTY_EX_LINK4_NAME "文本状态链接"
  28. // 杂项
  29. #define IMAGE_PROPERTY_EX_HTUPLE_COLOR_NAME "文本颜色"
  30. #define IMAGE_PROPERTY_EX_HTUPLE_PT_NAME "文本坐标"
  31. #define IMAGE_PROPERTY_EX_HTUPLE_SIZE_NAME "文本尺寸"
  32. // 组3 (无状态)
  33. #define IMAGE_PROPERTY_EX_GROUP3_NAME "显示"
  34. #define IMAGE_PROPERTY_EX_SUBGROUP3_NAME "显示数据"
  35. #define IMAGE_PROPERTY_EX_LINK5_NAME "显示链接"
  36. // 杂项
  37. #define IMAGE_PROPERTY_EX_DISPLAY_COLOR_NAME "显示颜色"
  38. // 组4 (无状态)
  39. #define IMAGE_PROPERTY_EX_GROUP4_NAME "字符"
  40. #define IMAGE_PROPERTY_EX_SUBGROUP4_NAME "字符数据"
  41. #define IMAGE_PROPERTY_EX_LINK6_NAME "字符链接"
  42. // 杂项
  43. #define IMAGE_PROPERTY_EX_STRING_COLOR_NAME "字符颜色"
  44. #define IMAGE_PROPERTY_EX_STRING_PT_NAME "字符坐标"
  45. #define IMAGE_PROPERTY_EX_STRING_SIZE_NAME "字符尺寸"
  46. // 组5 (无状态,无杂项)
  47. #define IMAGE_PROPERTY_EX_GROUP5_NAME "存储"
  48. #define IMAGE_PROPERTY_EX_SUBGROUP5_NAME "存储相关"
  49. #define IMAGE_PROPERTY_EX_LINK7_NAME "名称链接"
  50. #define IMAGE_PROPERTY_EX_LINK8_NAME "路径链接"
  51. #define IMAGE_PROPERTY_EX_LINK9_NAME "状态链接"
  52. // 杂项
  53. #define IMAGE_PROPERTY_EX_SACVE_IMG_NAME "启用保存原图"
  54. #define IMAGE_PROPERTY_EX_SAVE_DUMP_NAME "启用保存截图"
  55. #define IMAGE_PROPERTY_EX_EXE_STATE_NAME "启用状态判断"
  56. #define IMAGE_PROPERTY_EX_SAVE_MODE_NAME "存储模式"
  57. #define IMAGE_PROPERTY_EX_BUFFER_SIZE_NAME "缓存大小"
  58. #define IMAGE_PROPERTY_EX_FREE_TIME_NAME "空闲时间"
  59. // Obj数量的属性名称
  60. #define IMAGE_OBJ_COUNT_NAME "objCount"
  61. // Tuple数量的属性名称
  62. #define IMAGE_MSG_COUNT_NAME "tupleCount"
  63. // Disp数量的属性名称
  64. #define IMAGE_DISPLAY_COUNT_NAME "displayCount"
  65. // String数量的属性名称
  66. #define IMAGE_STRING_COUNT_NAME "stringCount"
  67. // HObject属性子分组编号
  68. #define GROUP_INDEX_HOBJECT 0
  69. // HTuple属性子分组的编号
  70. #define GROUP_INDEX_HTUPLE 1
  71. // Display属性子分组的编号
  72. #define GROUP_INDEX_DISPLAY 2
  73. // String属性子分组的编号
  74. #define GROUP_INDEX_STRING 3
  75. // Save属性子分组的编号
  76. #define GROUP_INDEX_SAVE 4
  77. // 默认数值
  78. //j #define DEFAULT_TRANSPARENCY 0.0
  79. #define IMAGE_DEFAULT_LINEWIDTH 1
  80. #define IMAGE_DEFAULT_X 10
  81. #define IMAGE_DEFAULT_Y 10
  82. #define IMAGE_DEFAULT_SIZE 5
  83. class VImageControl : public HWndUnit, public VControlObject
  84. {
  85. Q_OBJECT;
  86. //// 设置控件属性表
  87. //Q_PROPERTY(bool enable READ getEnable WRITE setEnable);
  88. Q_PROPERTY(QString title READ getText WRITE setText)
  89. Q_PROPERTY(QRect geometry READ geometry WRITE setGeometry)
  90. // 图层属性
  91. Q_PROPERTY(int objCount READ getHObjectCount WRITE setHObjectCount);
  92. // 文本属性
  93. Q_PROPERTY(int tupleCount READ getHTupleCount WRITE setHTupleCount);
  94. // 显示属性
  95. Q_PROPERTY(int displayCount READ getDisplayCount WRITE setDisplayCount);
  96. // String属性
  97. Q_PROPERTY(int stringCount READ getStringCount WRITE setStringCount);
  98. public:
  99. VImageControl(
  100. QWidget* parent,
  101. const QPoint& pos,
  102. const QSize& size,
  103. CONTROL_PROPERTY* pProperty = nullptr,
  104. CONTROL_PROPERTY_EX* pPropertyEx = nullptr,
  105. bool bStartSaveThread = false
  106. );
  107. ~VImageControl();
  108. // 属性的实现函数
  109. //void setEnable(const bool enable);
  110. void setText(const QString& title);
  111. // 设置HObject数量
  112. void setHObjectCount(const int& count);
  113. // 获取HObject数量
  114. int getHObjectCount();
  115. // 设置HTuple数量
  116. void setHTupleCount(const int& count);
  117. // 获取HTuple数量
  118. int getHTupleCount();
  119. // 设置Display数量
  120. void setDisplayCount(const int& count);
  121. // 获取Display数量
  122. int getDisplayCount();
  123. // 设置String数量
  124. void setStringCount(const int& count);
  125. // 获取Display数量
  126. int getStringCount();
  127. // 重绘图像(图像+图层+文本)
  128. void redraw();
  129. // 调整块属性数量(虚函数)
  130. virtual void updateExPropertyCount(const int fixCount, const QString& strPropName);
  131. // 修改扩展属性(虚函数)
  132. virtual void changeExProperties(QString strValueTitle, const QVariant& newValue);
  133. // 更新图像数据
  134. void updateImageFromVariables(const RUNTIME_SYNC_VARS& vars);
  135. // 更新图层线宽
  136. void updateLineWidth(const int lineWidth, const int index);
  137. // 更新图层颜色
  138. void updateHObjectColor(const QColor newColor, const int index);
  139. // 更新文本颜色
  140. void updateHTupleColor(const QColor newColor, const int index);
  141. // 更新图层颜色
  142. void updateDisplayColor(const QColor newColor, const int index);
  143. // 更新字符颜色
  144. void updateStringColor(const QColor newColor, const int index);
  145. // 更新文本坐标
  146. void updateHTuplePt(const QPoint newPt, const int index);
  147. // 更新文本尺寸
  148. void updateHTupleSize(const int newSize, const int index);
  149. // 更新字符坐标
  150. void updateStringPt(const QPoint newPt, const int index);
  151. // 更新字符尺寸
  152. void updateStringSize(const int newSize, const int index);
  153. // 更新是否存图
  154. void updateSaveImage(const bool bEnable);
  155. // 更新是否转储窗口
  156. void updateDumpWindow(const bool bEnable);
  157. // 更新是否使用状态判断
  158. void updateExeState(const bool bEnable);
  159. // 更新存储模式
  160. void updateSaveMode(const int nMode);
  161. // 更新缓冲区大小
  162. void updateBufferSize(const int nMode);
  163. // 更新空闲时间
  164. void updateFreeTime(const int nMode);
  165. // 启动 存储线程
  166. void startSaveThread();
  167. protected:
  168. void paintEvent(QPaintEvent*);
  169. private:
  170. // 初始化扩展属性
  171. void initPropertyEx();
  172. // 初始化子属性组
  173. void initSubGroup(PROPERTY_EX_SUBGROUP& subGroup, int nIndex, int nSubGroupID);
  174. // 初始化一个扩展属性组
  175. void initSubGroupHObject(PROPERTY_EX_SUBGROUP& subGroup, int nIndex);
  176. // 初始化一个扩展属性组2
  177. void initSubGroupHTuple(PROPERTY_EX_SUBGROUP& subGroup, int nIndex);
  178. // 初始化一个扩展属性组3
  179. void initSubGroupDisplay(PROPERTY_EX_SUBGROUP& subGroup, int nIndex);
  180. // 初始化一个扩展属性组4
  181. void initSubGroupString(PROPERTY_EX_SUBGROUP& subGroup, int nIndex);
  182. // 初始化一个扩展属性组5
  183. void initSubGroupSave(PROPERTY_EX_SUBGROUP& subGroup, int nIndex);
  184. // 设置图像(单个)
  185. void ShowImage(HImage image);
  186. // 设置HObject(可多个)
  187. void ShowObj(
  188. HObject obj,
  189. QColor color = qRgb(255, 0, 0),
  190. int nLineWidth = IMAGE_DEFAULT_LINEWIDTH
  191. );
  192. // 设置文本(可多个)
  193. void ShowMsg(
  194. HTuple msg,
  195. QColor color = qRgb(0, 255, 0),
  196. QPoint pt = QPoint(IMAGE_DEFAULT_X, IMAGE_DEFAULT_Y),
  197. int nSize = IMAGE_DEFAULT_SIZE
  198. );
  199. // 刷新图像
  200. void Refresh();
  201. // 生成一个随机的HObject供预览使用
  202. HObject genRandomHObject();
  203. // 生成一个随机的Tuple供预览使用
  204. HTuple genRandomHTuple();
  205. private:
  206. // 用于绘制的图形单元
  207. HImage m_Image;
  208. // HObject
  209. QVector<HObject> m_HObjects;
  210. // int
  211. QVector<int> m_HObjectsStatus;
  212. // HTuple
  213. QVector<HTuple> m_HTuples;
  214. // int
  215. QVector<int> m_HTuplesStatus;
  216. // 默认颜色集合
  217. QVector<QColor> m_defaultColors;
  218. // Display
  219. QVector<HObject> m_Dsiplays;
  220. // String
  221. QVector<QString> m_String;
  222. // //用来在显示控件内部存图的路径
  223. QString m_strFileName;
  224. QString m_strFilePath;
  225. //根据此执行状态,确定写入的图片存到 ok 还是 ng文件夹
  226. int m_nExecuteState;
  227. private:
  228. QThreadPool m_SaveThreadPool;
  229. public:
  230. QVector<SAVE_IMG> m_SaveImages;
  231. int m_nThreadState;
  232. };
  233. // Save的执行线程体
  234. class _SaveThread : public QObject, public QRunnable
  235. {
  236. Q_OBJECT
  237. public:
  238. _SaveThread(VImageControl* pImageControl)
  239. {
  240. this->m_pImageControl = pImageControl;
  241. };
  242. ~_SaveThread() {};
  243. protected:
  244. // 线程函数
  245. virtual void run();
  246. private:
  247. VImageControl* m_pImageControl;
  248. };