reversing_auxiliary_line.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600
  1. //#include <windows.h>
  2. #include <vg/openvg.h>
  3. #include <vg/vgu.h>
  4. #include <EGL/egl.h>
  5. #include <stdio.h>
  6. #include <assert.h>
  7. #include <string.h>
  8. #include <time.h>
  9. #include <math.h>
  10. #include "reversing_auxiliary_line.h"
  11. // 红黄绿辅助线及轨迹线的原始SVG数据.
  12. // 直接运行.\image\run.bat, 将原始的SVG格式设计数据转换为OpenVG格式的C数据文件.
  13. // 注意: SVG格式的坐标系是自顶向下, 使用时应将其转换到OpenVG坐标系.
  14. //
  15. // 参考如下 do_paint_auxiliary_line 代码中的坐标映射
  16. // VGfloat m[9];
  17. // // 设置自顶向下(SVG坐标系)到自底向上(OpenVG)的坐标映射, 将SVG坐标转换为OpenVG坐标
  18. // // 以下红黄绿辅助线及轨迹线均使用SVG元素绘制.
  19. // vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE);
  20. // vgGetMatrix(m);
  21. // m[4] = -1;
  22. // m[7] = VG_H;
  23. // vgLoadMatrix(m);
  24. //
  25. #include ".\image\bg.c"
  26. #include ".\image\BackLine001.c"
  27. #include ".\image\BackLine002.c"
  28. #include ".\image\BackLine003.c"
  29. #include ".\image\BackLine004.c"
  30. #include ".\image\BackLine005.c"
  31. #include ".\image\BackLine006.c"
  32. #include ".\image\BackLine007.c"
  33. #include ".\image\BackLine008.c"
  34. #include ".\image\BackLine009.c"
  35. #include ".\image\BackLine010.c"
  36. #include ".\image\BackLine011.c"
  37. #include ".\image\BackLine012.c"
  38. #include ".\image\BackLine013.c"
  39. #include ".\image\BackLine014.c"
  40. #include ".\image\BackLine015.c"
  41. #include ".\image\BackLine016.c"
  42. #include ".\image\BackLine017.c"
  43. #include ".\image\BackLine018.c"
  44. #include ".\image\BackLine019.c"
  45. #include ".\image\BackLine020.c"
  46. #include ".\image\BackLine021.c"
  47. #include ".\image\BackLine022.c"
  48. #include ".\image\BackLine023.c"
  49. #include ".\image\BackLine024.c"
  50. #include ".\image\BackLine025.c"
  51. #include ".\image\BackLine026.c"
  52. #include ".\image\BackLine027.c"
  53. #include ".\image\BackLine028.c"
  54. #include ".\image\BackLine029.c"
  55. #include ".\image\BackLine030.c"
  56. #include ".\image\BackLine031.c"
  57. #include ".\image\BackLine032.c"
  58. #include ".\image\BackLine033.c"
  59. #include ".\image\BackLine034.c"
  60. #include ".\image\BackLine035.c"
  61. #include ".\image\BackLine036.c"
  62. #include ".\image\BackLine037.c"
  63. #include ".\image\BackLine038.c"
  64. #include ".\image\BackLine039.c"
  65. #include ".\image\BackLine040.c"
  66. #include ".\image\BackLine041.c"
  67. #include ".\image\BackLine042.c"
  68. #include ".\image\BackLine043.c"
  69. #include ".\image\BackLine044.c"
  70. #include ".\image\BackLine045.c"
  71. #include ".\image\BackLine046.c"
  72. #include ".\image\BackLine047.c"
  73. #include ".\image\BackLine048.c"
  74. #include ".\image\BackLine049.c"
  75. #include ".\image\BackLine050.c"
  76. #include ".\image\BackLine051.c"
  77. #include ".\image\BackLine052.c"
  78. #include ".\image\BackLine053.c"
  79. #include ".\image\BackLine054.c"
  80. #include ".\image\BackLine055.c"
  81. #include ".\image\BackLine056.c"
  82. #include ".\image\BackLine057.c"
  83. #include ".\image\BackLine058.c"
  84. #include ".\image\BackLine059.c"
  85. #include ".\image\BackLine060.c"
  86. #include ".\image\BackLine061.c"
  87. #include ".\image\BackLine062.c"
  88. #include ".\image\BackLine063.c"
  89. #include ".\image\BackLine064.c"
  90. #include ".\image\BackLine065.c"
  91. #include ".\image\BackLine066.c"
  92. #include ".\image\BackLine067.c"
  93. #include ".\image\BackLine068.c"
  94. #include ".\image\BackLine069.c"
  95. #include ".\image\BackLine070.c"
  96. #include ".\image\BackLine071.c"
  97. #include ".\image\BackLine072.c"
  98. #include ".\image\BackLine073.c"
  99. #include ".\image\BackLine074.c"
  100. #include ".\image\BackLine075.c"
  101. #include ".\image\BackLine076.c"
  102. #include ".\image\BackLine077.c"
  103. #include ".\image\BackLine078.c"
  104. #include ".\image\BackLine079.c"
  105. #include ".\image\BackLine080.c"
  106. #include ".\image\BackLine081.c"
  107. #include ".\image\BackLine082.c"
  108. #include ".\image\BackLine083.c"
  109. #include ".\image\BackLine084.c"
  110. #include ".\image\BackLine085.c"
  111. #include ".\image\BackLine086.c"
  112. #include ".\image\BackLine087.c"
  113. #include ".\image\BackLine088.c"
  114. #include ".\image\BackLine089.c"
  115. #include ".\image\BackLine090.c"
  116. #include ".\image\BackLine091.c"
  117. #include ".\image\BackLine092.c"
  118. #include ".\image\BackLine093.c"
  119. #include ".\image\BackLine094.c"
  120. #include ".\image\BackLine095.c"
  121. #include ".\image\BackLine096.c"
  122. #include ".\image\BackLine097.c"
  123. #include ".\image\BackLine098.c"
  124. #include ".\image\BackLine099.c"
  125. #include ".\image\BackLine100.c"
  126. #include ".\image\BackLine101.c"
  127. #include ".\image\BackLine102.c"
  128. #include ".\image\BackLine103.c"
  129. #include ".\image\BackLine104.c"
  130. #include ".\image\BackLine105.c"
  131. #include ".\image\BackLine106.c"
  132. #include ".\image\BackLine107.c"
  133. #include ".\image\BackLine108.c"
  134. #include ".\image\BackLine109.c"
  135. #include ".\image\BackLine110.c"
  136. #include ".\image\BackLine111.c"
  137. #include ".\image\BackLine112.c"
  138. #include ".\image\BackLine113.c"
  139. // 轨迹线描述结构
  140. typedef struct {
  141. const VGubyte *command;
  142. int cb_command;
  143. const VGfloat *coordinate;
  144. } BACK_LINE;
  145. #define L_DEF(num) { BackLine##num##_path_0_commands , sizeof(BackLine##num##_path_0_commands )/sizeof(BackLine##num##_path_0_commands [0]), BackLine##num##_path_0_coordinates }
  146. #define R_DEF(num) { BackLine##num##_path_1_commands , sizeof(BackLine##num##_path_1_commands )/sizeof(BackLine##num##_path_1_commands [0]), BackLine##num##_path_1_coordinates }
  147. // 左轨迹数据
  148. static const BACK_LINE back_lines_left[] = {
  149. L_DEF(001),
  150. L_DEF(002),
  151. L_DEF(003),
  152. L_DEF(004),
  153. L_DEF(005),
  154. L_DEF(006),
  155. L_DEF(007),
  156. L_DEF(008),
  157. L_DEF(009),
  158. L_DEF(010),
  159. L_DEF(011),
  160. L_DEF(012),
  161. L_DEF(013),
  162. L_DEF(014),
  163. L_DEF(015),
  164. L_DEF(016),
  165. L_DEF(017),
  166. L_DEF(018),
  167. L_DEF(019),
  168. L_DEF(020),
  169. L_DEF(021),
  170. L_DEF(022),
  171. L_DEF(023),
  172. L_DEF(024),
  173. L_DEF(025),
  174. L_DEF(026),
  175. L_DEF(027),
  176. L_DEF(028),
  177. L_DEF(029),
  178. L_DEF(030),
  179. L_DEF(031),
  180. L_DEF(032),
  181. L_DEF(033),
  182. L_DEF(034),
  183. L_DEF(035),
  184. L_DEF(036),
  185. L_DEF(037),
  186. L_DEF(038),
  187. L_DEF(039),
  188. L_DEF(040),
  189. L_DEF(041),
  190. L_DEF(042),
  191. L_DEF(043),
  192. L_DEF(044),
  193. L_DEF(045),
  194. L_DEF(046),
  195. L_DEF(047),
  196. L_DEF(048),
  197. L_DEF(049),
  198. L_DEF(050),
  199. L_DEF(051),
  200. L_DEF(052),
  201. L_DEF(053),
  202. L_DEF(054),
  203. L_DEF(055),
  204. L_DEF(056),
  205. L_DEF(057),
  206. L_DEF(058),
  207. L_DEF(059),
  208. L_DEF(060),
  209. L_DEF(061),
  210. L_DEF(062),
  211. L_DEF(063),
  212. L_DEF(064),
  213. L_DEF(065),
  214. L_DEF(066),
  215. L_DEF(067),
  216. L_DEF(068),
  217. L_DEF(069),
  218. L_DEF(070),
  219. L_DEF(071),
  220. L_DEF(072),
  221. L_DEF(073),
  222. L_DEF(074),
  223. L_DEF(075),
  224. L_DEF(076),
  225. L_DEF(077),
  226. L_DEF(078),
  227. L_DEF(079),
  228. L_DEF(080),
  229. L_DEF(081),
  230. L_DEF(082),
  231. L_DEF(083),
  232. L_DEF(084),
  233. L_DEF(085),
  234. L_DEF(086),
  235. L_DEF(087),
  236. L_DEF(088),
  237. L_DEF(089),
  238. L_DEF(090),
  239. L_DEF(091),
  240. L_DEF(092),
  241. L_DEF(093),
  242. L_DEF(094),
  243. L_DEF(095),
  244. L_DEF(096),
  245. L_DEF(097),
  246. L_DEF(098),
  247. L_DEF(099),
  248. L_DEF(100),
  249. L_DEF(101),
  250. L_DEF(102),
  251. L_DEF(103),
  252. L_DEF(104),
  253. L_DEF(105),
  254. L_DEF(106),
  255. L_DEF(107),
  256. L_DEF(108),
  257. L_DEF(109),
  258. L_DEF(110),
  259. L_DEF(111),
  260. L_DEF(112),
  261. L_DEF(113),
  262. };
  263. // 右轨迹数据
  264. static const BACK_LINE back_lines_right[] = {
  265. R_DEF(001),
  266. R_DEF(002),
  267. R_DEF(003),
  268. R_DEF(004),
  269. R_DEF(005),
  270. R_DEF(006),
  271. R_DEF(007),
  272. R_DEF(008),
  273. R_DEF(009),
  274. R_DEF(010),
  275. R_DEF(011),
  276. R_DEF(012),
  277. R_DEF(013),
  278. R_DEF(014),
  279. R_DEF(015),
  280. R_DEF(016),
  281. R_DEF(017),
  282. R_DEF(018),
  283. R_DEF(019),
  284. R_DEF(020),
  285. R_DEF(021),
  286. R_DEF(022),
  287. R_DEF(023),
  288. R_DEF(024),
  289. R_DEF(025),
  290. R_DEF(026),
  291. R_DEF(027),
  292. R_DEF(028),
  293. R_DEF(029),
  294. R_DEF(030),
  295. R_DEF(031),
  296. R_DEF(032),
  297. R_DEF(033),
  298. R_DEF(034),
  299. R_DEF(035),
  300. R_DEF(036),
  301. R_DEF(037),
  302. R_DEF(038),
  303. R_DEF(039),
  304. R_DEF(040),
  305. R_DEF(041),
  306. R_DEF(042),
  307. R_DEF(043),
  308. R_DEF(044),
  309. R_DEF(045),
  310. R_DEF(046),
  311. R_DEF(047),
  312. R_DEF(048),
  313. R_DEF(049),
  314. R_DEF(050),
  315. R_DEF(051),
  316. R_DEF(052),
  317. R_DEF(053),
  318. R_DEF(054),
  319. R_DEF(055),
  320. R_DEF(056),
  321. R_DEF(057),
  322. R_DEF(058),
  323. R_DEF(059),
  324. R_DEF(060),
  325. R_DEF(061),
  326. R_DEF(062),
  327. R_DEF(063),
  328. R_DEF(064),
  329. R_DEF(065),
  330. R_DEF(066),
  331. R_DEF(067),
  332. R_DEF(068),
  333. R_DEF(069),
  334. R_DEF(070),
  335. R_DEF(071),
  336. R_DEF(072),
  337. R_DEF(073),
  338. R_DEF(074),
  339. R_DEF(075),
  340. R_DEF(076),
  341. R_DEF(077),
  342. R_DEF(078),
  343. R_DEF(079),
  344. R_DEF(080),
  345. R_DEF(081),
  346. R_DEF(082),
  347. R_DEF(083),
  348. R_DEF(084),
  349. R_DEF(085),
  350. R_DEF(086),
  351. R_DEF(087),
  352. R_DEF(088),
  353. R_DEF(089),
  354. R_DEF(090),
  355. R_DEF(091),
  356. R_DEF(092),
  357. R_DEF(093),
  358. R_DEF(094),
  359. R_DEF(095),
  360. R_DEF(096),
  361. R_DEF(097),
  362. R_DEF(098),
  363. R_DEF(099),
  364. R_DEF(100),
  365. R_DEF(101),
  366. R_DEF(102),
  367. R_DEF(103),
  368. R_DEF(104),
  369. R_DEF(105),
  370. R_DEF(106),
  371. R_DEF(107),
  372. R_DEF(108),
  373. R_DEF(109),
  374. R_DEF(110),
  375. R_DEF(111),
  376. R_DEF(112),
  377. R_DEF(113),
  378. };
  379. #define LEFT_PATH_ORG_X (0.0f)
  380. #define LEFT_PATH_ORG_Y (0.0f)
  381. #define RIGHT_PATH_ORG_X (0.0f)
  382. #define RIGHT_PATH_ORG_Y (0.0f)
  383. #define BACK_LINE_WIDTH 7.0f // 红黄绿辅助线线宽
  384. static VGPath back_line_path_0; // 绿色标线
  385. static VGPath back_line_path_1; // 黄色标线
  386. static VGPath back_line_path_2; // 红色标线
  387. static int vg_w, vg_h;
  388. // 绘制红黄绿辅助线及轨迹线
  389. // path_line_index 轨迹线图片索引
  390. static void do_paint_auxiliary_line (int path_line_index)
  391. {
  392. VGfloat line_color[4];
  393. VGPaint colorPaint;
  394. if (path_line_index < 0 || path_line_index >= sizeof(back_lines_left) / sizeof(back_lines_left[0])
  395. || path_line_index >= sizeof(back_lines_right) / sizeof(back_lines_right[0]))
  396. return;
  397. // 设置单位矩阵
  398. vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE);
  399. vgLoadIdentity();
  400. // 创建一个纯色画笔对象
  401. colorPaint = vgCreatePaint();
  402. vgSetParameteri(colorPaint, VG_PAINT_TYPE, VG_PAINT_TYPE_COLOR);
  403. VGfloat m[9];
  404. // 设置自顶向下(SVG坐标系)到自底向上(OpenVG)的坐标映射, 将SVG坐标转换为OpenVG坐标
  405. // 以下红黄绿辅助线及轨迹线均使用SVG元素绘制.
  406. vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE);
  407. vgGetMatrix(m);
  408. m[4] = -1;
  409. m[7] = vg_h;
  410. vgLoadMatrix(m);
  411. // 绘制红黄绿辅助线 (以下路径使用的坐标为SVG坐标, 通过上面的转换矩阵m进行坐标系转换)
  412. // 绘制绿色标线
  413. // SVG代码
  414. // <path d="M568.5 199L499 148H223L152.5 199" stroke="#00FF00" stroke-width="7" stroke-linecap="round"/>
  415. // 创建绿色画笔
  416. line_color[0] = 0.00f; // 绿色
  417. line_color[1] = 1.00f;
  418. line_color[2] = 0.00f;
  419. line_color[3] = 1.00f;
  420. vgSetParameterfv (colorPaint, VG_PAINT_COLOR, 4, line_color);
  421. // 标记画笔对象colorPaint用于下面的路径描边操作
  422. vgSetPaint (colorPaint, VG_STROKE_PATH);
  423. // 设置笔宽度
  424. vgSetf (VG_STROKE_LINE_WIDTH, BACK_LINE_WIDTH);
  425. // 设置笔帽类型
  426. vgSetf (VG_STROKE_CAP_STYLE, VG_CAP_ROUND);
  427. // 绘制绿色标线
  428. vgDrawPath (back_line_path_0, VG_STROKE_PATH);
  429. // 绘制黄色标线
  430. // SVG代码
  431. // <path d="M653.5 266.5L568.5 199H152.51L66.5 266.5" stroke="#FFFF00" stroke-width="7" stroke-linecap="round"/>
  432. // 创建黄色画笔
  433. line_color[0] = 1.00f; // 黄色
  434. line_color[1] = 1.00f;
  435. line_color[2] = 0.00f;
  436. line_color[3] = 1.00f;
  437. vgSetParameterfv (colorPaint, VG_PAINT_COLOR, 4, line_color);
  438. // 标记画笔对象colorPaint用于下面的路径描边操作
  439. vgSetPaint (colorPaint, VG_STROKE_PATH);
  440. // 设置笔宽度
  441. vgSetf (VG_STROKE_LINE_WIDTH, BACK_LINE_WIDTH);
  442. // 设置笔帽类型
  443. vgSetf (VG_STROKE_CAP_STYLE, VG_CAP_ROUND);
  444. // 绘制黄色标线
  445. vgDrawPath (back_line_path_1, VG_STROKE_PATH);
  446. // 绘制红色标线
  447. // SVG代码
  448. // <path d="M713.5 316.5L653 266H67L3.5 319.5" stroke="#FF0000" stroke-width="7" stroke-linecap="round"/>
  449. // 创建红色画笔
  450. line_color[0] = 1.00f; // 红色
  451. line_color[1] = 0.00f;
  452. line_color[2] = 0.00f;
  453. line_color[3] = 1.00f;
  454. vgSetParameterfv (colorPaint, VG_PAINT_COLOR, 4, line_color);
  455. // 标记画笔对象colorPaint用于下面的路径描边操作
  456. vgSetPaint (colorPaint, VG_STROKE_PATH);
  457. // 设置笔宽度
  458. vgSetf (VG_STROKE_LINE_WIDTH, BACK_LINE_WIDTH);
  459. // 设置笔帽类型
  460. vgSetf (VG_STROKE_CAP_STYLE, VG_CAP_ROUND);
  461. // 绘制红色标线
  462. vgDrawPath (back_line_path_2, VG_STROKE_PATH);
  463. // 绘制倒车轨迹
  464. // leftBackLine001.svg
  465. // <path d="M6.5 4C15 3.99996 41.6468 9.29998 43 30.4997C44.5 54 18 84 3 98.4997" stroke="#FFFF00" stroke-width="7"/>
  466. line_color[0] = 1.00f; // 黄色
  467. line_color[1] = 1.00f;
  468. line_color[2] = 0.00f;
  469. line_color[3] = 1.00f;
  470. vgSetParameterfv (colorPaint, VG_PAINT_COLOR, 4, line_color);
  471. // 标记画笔对象colorPaint用于下面的路径填充操作
  472. vgSetPaint (colorPaint, VG_STROKE_PATH);
  473. // 设置笔宽度
  474. vgSetf (VG_STROKE_LINE_WIDTH, BACK_LINE_WIDTH);
  475. // 设置笔帽类型
  476. vgSetf (VG_STROKE_CAP_STYLE, VG_CAP_BUTT); // VG_CAP_BUTT为缺省类型
  477. // 绘制左边的轨迹线
  478. // 移至坐标原点至左轨迹SVG相对于VG背景的偏移位置
  479. vgTranslate(LEFT_PATH_ORG_X, LEFT_PATH_ORG_Y);
  480. const BACK_LINE *back_line_left = back_lines_left + path_line_index;
  481. // 创建左轨迹路径
  482. VGPath path_line_path_left = vgCreatePath (VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, 0, 0, VG_PATH_CAPABILITY_ALL);
  483. if (path_line_path_left != VG_INVALID_HANDLE)
  484. {
  485. // 以下VG命令个数 - 1 "back_line_left->cb_command - 1"的作用是去除最后的 VG_CLOSE_PATH 命令. SVG2OPENVG.exe工具转换时自动在所有路径命令上补全 VG_CLOSE_PATH
  486. vgAppendPathData (path_line_path_left, back_line_left->cb_command - 1, back_line_left->command, back_line_left->coordinate);
  487. // 绘制左轨迹
  488. vgDrawPath (path_line_path_left, VG_STROKE_PATH);
  489. }
  490. // 释放左轨迹路径资源
  491. vgDestroyPath (path_line_path_left);
  492. vgTranslate (-LEFT_PATH_ORG_X, -LEFT_PATH_ORG_Y);
  493. // 绘制右边的轨迹线
  494. // 移至坐标原点至右轨迹SVG相对于VG背景的偏移位置
  495. vgTranslate (RIGHT_PATH_ORG_X, RIGHT_PATH_ORG_Y);
  496. const BACK_LINE *back_line_right = back_lines_right + path_line_index;
  497. // 创建右轨迹路径
  498. VGPath path_line_path_right = vgCreatePath (VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, 0, 0, VG_PATH_CAPABILITY_ALL);
  499. if (path_line_path_right != VG_INVALID_HANDLE)
  500. {
  501. // 以下VG命令个数 - 1 "back_line_right->cb_command - 1"的作用是去除最后的 VG_CLOSE_PATH 命令. SVG2OPENVG.exe工具转换时自动在所有路径命令上补全 VG_CLOSE_PATH
  502. vgAppendPathData (path_line_path_right, back_line_right->cb_command - 1, back_line_right->command, back_line_right->coordinate);
  503. vgDrawPath (path_line_path_right, VG_STROKE_PATH);
  504. }
  505. // 释放右轨迹路径资源
  506. vgDestroyPath (path_line_path_right);
  507. vgTranslate (-RIGHT_PATH_ORG_X, -RIGHT_PATH_ORG_Y);
  508. // 设置无效句柄用于路径描边, 将colorPaint的引用次数减1
  509. vgSetPaint (VG_INVALID_HANDLE, VG_STROKE_PATH);
  510. // 释放colorPaint资源
  511. vgDestroyPaint (colorPaint);
  512. vgFinish();
  513. }
  514. int reversing_auxiliary_line_draw (int index)
  515. {
  516. vgSeti(VG_IMAGE_QUALITY, VG_IMAGE_QUALITY_BETTER);
  517. vgSeti(VG_RENDERING_QUALITY, VG_RENDERING_QUALITY_BETTER);
  518. do_paint_auxiliary_line(index);
  519. return 0;
  520. }
  521. int reversing_auxiliary_line_init (int width, int height)
  522. {
  523. vg_w = width;
  524. vg_h = height;
  525. (void)vg_w;
  526. (void)vg_h;
  527. // 创建红黄绿辅助线路径对象
  528. // 以下VG命令个数 - 1 "sizeof(bg_path_0_commands) / sizeof(VGubyte) - 1"的作用是去除最后的 VG_CLOSE_PATH 命令. SVG2OPENVG.exe工具转换时自动在所有路径命令上补全 VG_CLOSE_PATH
  529. back_line_path_0 = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, 0, 0, VG_PATH_CAPABILITY_ALL);
  530. if(back_line_path_0 != VG_INVALID_HANDLE)
  531. vgAppendPathData(back_line_path_0, sizeof(bg_path_0_commands) / sizeof(VGubyte) - 1, bg_path_0_commands, bg_path_0_coordinates);
  532. back_line_path_1 = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, 0, 0, VG_PATH_CAPABILITY_ALL);
  533. if (back_line_path_1 != VG_INVALID_HANDLE)
  534. vgAppendPathData(back_line_path_1, sizeof(bg_path_1_commands) / sizeof(VGubyte) - 1, bg_path_1_commands, bg_path_1_coordinates);
  535. back_line_path_2 = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, 0, 0, VG_PATH_CAPABILITY_ALL);
  536. if (back_line_path_2 != VG_INVALID_HANDLE)
  537. vgAppendPathData(back_line_path_2, sizeof(bg_path_2_commands) / sizeof(VGubyte) - 1, bg_path_2_commands, bg_path_2_coordinates);
  538. return 0;
  539. }
  540. int reversing_auxiliary_line_exit (void)
  541. {
  542. // 释放背景轨迹路径对象
  543. if (back_line_path_0 != VG_INVALID_HANDLE)
  544. {
  545. vgDestroyPath(back_line_path_0);
  546. back_line_path_0 = VG_INVALID_HANDLE;
  547. }
  548. if (back_line_path_1 != VG_INVALID_HANDLE)
  549. {
  550. vgDestroyPath(back_line_path_1);
  551. back_line_path_1 = VG_INVALID_HANDLE;
  552. }
  553. if (back_line_path_2 != VG_INVALID_HANDLE)
  554. {
  555. vgDestroyPath(back_line_path_2);
  556. back_line_path_2 = VG_INVALID_HANDLE;
  557. }
  558. return 0;
  559. }