FormVtk.cs 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using Kitware.VTK;
  12. using chutian_parking_terminal.front_terminal_manager;
  13. using Sunny.UI;
  14. using tool;
  15. namespace chutian_parking_terminal
  16. {
  17. public partial class FormVtk : UIForm
  18. {
  19. public class Car_info
  20. {
  21. public bool correct = false;
  22. public double cx;
  23. public double cy;
  24. public double theta;
  25. public double wheel_base;
  26. public double width;
  27. public double front_theta;
  28. public Car_info() { }
  29. }
  30. class Wheel_info
  31. {
  32. double m_radius = 0.35;
  33. double m_width = 0.2;
  34. public double[] p1 = new double[3];
  35. public double[] p2 = new double[3];
  36. public Wheel_info(double radius, double width)
  37. {
  38. m_radius = radius;
  39. m_width = width;
  40. p1[0] = -width / 2.0;
  41. p1[1] = 0;
  42. p1[2] = radius;
  43. p2[0] = width / 2.0;
  44. p2[1] = 0;
  45. p2[2] = radius;
  46. }
  47. public void rotate(double theta)
  48. {
  49. double x = Math.Cos(theta) * p1[0] - Math.Sin(theta) * p1[1];
  50. double y = Math.Sin(theta) * p1[0] + Math.Cos(theta) * p1[1];
  51. p1[0] = x;
  52. p1[1] = y;
  53. x = Math.Cos(theta) * p2[0] - Math.Sin(theta) * p2[1];
  54. y = Math.Sin(theta) * p2[0] + Math.Cos(theta) * p2[1];
  55. p2[0] = x;
  56. p2[1] = y;
  57. }
  58. public void translate(PointF pt)
  59. {
  60. p1[0] += pt.X;
  61. p1[1] += pt.Y;
  62. p2[0] += pt.X;
  63. p2[1] += pt.Y;
  64. }
  65. }
  66. class ViewData_Source
  67. {
  68. public vtkPolyData m_cloud_polydata = vtkPolyData.New();
  69. public vtkVertexGlyphFilter m_cloud_glyphFilter = vtkVertexGlyphFilter.New();
  70. public vtkPolyDataMapper m_cloud_mapper = vtkPolyDataMapper.New();
  71. public vtkActor m_cloud_act = vtkActor.New();
  72. vtkLineSource m_ls_lt = vtkLineSource.New();
  73. vtkTubeFilter m_tf_lt = vtkTubeFilter.New();
  74. vtkPolyDataMapper m_dm_lt = vtkPolyDataMapper.New();
  75. public vtkActor m_left_front_wheel_act = vtkActor.New();
  76. vtkLineSource m_ls_rt = vtkLineSource.New();
  77. vtkTubeFilter m_tf_rt = vtkTubeFilter.New();
  78. vtkPolyDataMapper m_dm_rt = vtkPolyDataMapper.New();
  79. public vtkActor m_right_front_wheel_act = vtkActor.New();
  80. vtkLineSource m_ls_lb = vtkLineSource.New();
  81. vtkTubeFilter m_tf_lb = vtkTubeFilter.New();
  82. vtkPolyDataMapper m_dm_lb = vtkPolyDataMapper.New();
  83. public vtkActor m_left_rear_wheel_act = vtkActor.New();
  84. vtkLineSource m_ls_rb = vtkLineSource.New();
  85. vtkTubeFilter m_tf_rb = vtkTubeFilter.New();
  86. vtkPolyDataMapper m_dm_rb = vtkPolyDataMapper.New();
  87. public vtkActor m_right_rear_wheel_act = vtkActor.New();
  88. vtkProperty m_whell_pp = vtkProperty.New();
  89. PointF rotate_point(PointF pt, double theta)
  90. {
  91. double x = Math.Cos(theta) * pt.X - Math.Sin(theta) * pt.Y;
  92. double y = Math.Sin(theta) * pt.X + Math.Cos(theta) * pt.Y;
  93. return new PointF((float)x, (float)y);
  94. }
  95. public void update_car_info(Car_info car_info)
  96. {
  97. if (car_info.correct == false)
  98. {
  99. //隐藏车轮
  100. m_left_front_wheel_act.VisibilityOff();
  101. m_right_front_wheel_act.VisibilityOff();
  102. m_left_rear_wheel_act.VisibilityOff();
  103. m_right_rear_wheel_act.VisibilityOff();
  104. return;
  105. }
  106. double wheel_width = 0.2;
  107. double radius = 0.35;
  108. Wheel_info lt = new Wheel_info(radius, wheel_width);
  109. Wheel_info rt = new Wheel_info(radius, wheel_width);
  110. Wheel_info lb = new Wheel_info(radius, wheel_width);
  111. Wheel_info rb = new Wheel_info(radius, wheel_width);
  112. lt.rotate(car_info.theta + car_info.front_theta);
  113. rt.rotate(car_info.theta + car_info.front_theta);
  114. lb.rotate(car_info.theta);
  115. rb.rotate(car_info.theta);
  116. float view_width =(float)(car_info.width - wheel_width);
  117. PointF lt_pt = rotate_point(new PointF((float)(-view_width / 2.0),
  118. (float)(car_info.wheel_base / 2.0)), car_info.theta);
  119. PointF rt_pt = rotate_point(new PointF((float)(view_width / 2.0),
  120. (float)(car_info.wheel_base / 2.0)), car_info.theta);
  121. PointF lb_pt = rotate_point(new PointF((float)(-view_width / 2.0),
  122. (float)(-car_info.wheel_base / 2.0)), car_info.theta);
  123. PointF rb_pt = rotate_point(new PointF((float)(view_width / 2.0),
  124. (float)(-car_info.wheel_base / 2.0)), car_info.theta);
  125. lt.translate(lt_pt);
  126. rt.translate(rt_pt);
  127. lb.translate(lb_pt);
  128. rb.translate(rb_pt);
  129. lt.translate(new PointF((float)car_info.cx, (float)car_info.cy));
  130. rt.translate(new PointF((float)car_info.cx, (float)car_info.cy));
  131. lb.translate(new PointF((float)car_info.cx, (float)car_info.cy));
  132. rb.translate(new PointF((float)car_info.cx, (float)car_info.cy));
  133. int line_count = 30;
  134. //左前轮
  135. m_ls_lt.SetPoint1(lt.p1[0], lt.p1[1], lt.p1[2]);
  136. m_ls_lt.SetPoint2(lt.p2[0], lt.p2[1], lt.p2[2]);
  137. m_tf_lt.SetInputConnection(m_ls_lt.GetOutputPort());
  138. m_tf_lt.SetRadius(0.3);
  139. m_tf_lt.SetNumberOfSides(line_count);
  140. m_tf_lt.CappingOn();
  141. m_dm_lt.SetInputConnection(m_tf_lt.GetOutputPort());
  142. m_left_front_wheel_act.SetMapper(m_dm_lt);
  143. //右前轮
  144. m_ls_rt.SetPoint1(rt.p1[0], rt.p1[1], rt.p1[2]);
  145. m_ls_rt.SetPoint2(rt.p2[0], rt.p2[1], rt.p2[2]);
  146. m_tf_rt.SetInputConnection(m_ls_rt.GetOutputPort());
  147. m_tf_rt.SetRadius(0.3);
  148. m_tf_rt.SetNumberOfSides(line_count);
  149. m_tf_rt.CappingOn();
  150. m_dm_rt.SetInputConnection(m_tf_rt.GetOutputPort());
  151. m_right_front_wheel_act.SetMapper(m_dm_rt);
  152. //左后轮
  153. m_ls_lb.SetPoint1(lb.p1[0], lb.p1[1], lb.p1[2]);
  154. m_ls_lb.SetPoint2(lb.p2[0], lb.p2[1], lb.p2[2]);
  155. m_tf_lb.SetInputConnection(m_ls_lb.GetOutputPort());
  156. m_tf_lb.SetRadius(0.3);
  157. m_tf_lb.SetNumberOfSides(line_count);
  158. m_tf_lb.CappingOn();
  159. m_dm_lb.SetInputConnection(m_tf_lb.GetOutputPort());
  160. m_left_rear_wheel_act.SetMapper(m_dm_lb);
  161. //右后轮
  162. m_ls_rb.SetPoint1(rb.p1[0], rb.p1[1], rb.p1[2]);
  163. m_ls_rb.SetPoint2(rb.p2[0], rb.p2[1], rb.p2[2]);
  164. m_tf_rb.SetInputConnection(m_ls_rb.GetOutputPort());
  165. m_tf_rb.SetRadius(0.3);
  166. m_tf_rb.SetNumberOfSides(line_count);
  167. m_tf_rb.CappingOn();
  168. m_dm_rb.SetInputConnection(m_tf_rb.GetOutputPort());
  169. m_right_rear_wheel_act.SetMapper(m_dm_rb);
  170. m_whell_pp.SetOpacity(0.5);
  171. m_whell_pp.SetColor(0, 0, 0);
  172. m_whell_pp.SetLineWidth(2);
  173. m_whell_pp.SetLighting(true);
  174. m_whell_pp.SetEdgeColor(0, 0, 0);
  175. m_whell_pp.SetEdgeVisibility(1);
  176. m_left_front_wheel_act.SetProperty(m_whell_pp);
  177. m_right_front_wheel_act.SetProperty(m_whell_pp);
  178. m_left_rear_wheel_act.SetProperty(m_whell_pp);
  179. m_right_rear_wheel_act.SetProperty(m_whell_pp);
  180. //显示车轮
  181. m_left_front_wheel_act.VisibilityOn();
  182. m_right_front_wheel_act.VisibilityOn();
  183. m_left_rear_wheel_act.VisibilityOn();
  184. m_right_rear_wheel_act.VisibilityOn();
  185. }
  186. public void update_cloud(vtkPoints points)
  187. {
  188. m_cloud_polydata.SetPoints(points);
  189. //Color
  190. m_cloud_glyphFilter.RemoveAllInputs();
  191. m_cloud_glyphFilter.SetInput(m_cloud_polydata);
  192. m_cloud_glyphFilter.Update();
  193. // Visualize
  194. m_cloud_mapper.RemoveAllInputs();
  195. m_cloud_mapper.SetInputConnection(m_cloud_glyphFilter.GetOutputPort());
  196. m_cloud_act.SetMapper(m_cloud_mapper);
  197. m_cloud_act.GetProperty().SetPointSize(2);
  198. }
  199. public void SetCloudColor(Color color)
  200. {
  201. m_cloud_act.GetProperty().SetColor(color.R, color.G, color.B);
  202. }
  203. }
  204. object m_lock = new object();
  205. vtkPoints m_points = new vtkPoints();
  206. Car_info m_car_info = new Car_info();
  207. vtkActor m_bound_act = vtkActor.New();
  208. vtkTextActor m_text_act = vtkTextActor.New();
  209. ViewData_Source m_view_data_source1 = new ViewData_Source();
  210. ViewData_Source m_view_data_source2 = new ViewData_Source();
  211. System.Media.SoundPlayer m_sound_player = new System.Media.SoundPlayer();
  212. System.Windows.Forms.Timer m_timerGetTime = new System.Windows.Forms.Timer();
  213. //自适应窗口大小
  214. AutoResizeForm m_auto_resize_form = new AutoResizeForm();
  215. bool m_is_correct = false;
  216. bool isClosed = false;
  217. Thread m_viewer_ledDisplay_thread;
  218. bool ArrowsVisible = false;
  219. Arrows arrows = Arrows.eArrows_unknow;
  220. public enum Arrows
  221. {
  222. /// <summary>
  223. /// 默认
  224. /// </summary>
  225. eArrows_unknow =-1,
  226. /// <summary>
  227. /// 箭头向左
  228. /// </summary>
  229. eArrows_left =0,
  230. /// <summary>
  231. /// 箭头向右
  232. /// </summary>
  233. eArrows_right = 1,
  234. /// <summary>
  235. /// 箭头向上
  236. /// </summary>
  237. eArrows_top = 2,
  238. /// <summary>
  239. /// 箭头向下
  240. /// </summary>
  241. eArrows_down = 3,
  242. /// <summary>
  243. /// 箭头向左上
  244. /// </summary>
  245. eArrows_upperleft = 4,
  246. /// <summary>
  247. /// 箭头向右上
  248. /// </summary>
  249. eArrows_upperright = 5,
  250. /// <summary>
  251. /// 箭头向左下
  252. /// </summary>
  253. eArrows_lowerleft = 6,
  254. /// <summary>
  255. /// 箭头向右下
  256. /// </summary>
  257. eArrows_lowerright = 7,
  258. };
  259. public void isCorrect(bool t_is_correct)
  260. {
  261. m_is_correct = t_is_correct;
  262. }
  263. /// <summary>
  264. /// 设置箭头
  265. /// </summary>
  266. /// <param name="t_arrows"></param>
  267. public void SetArrows(Arrows t_arrows)
  268. {
  269. arrows = t_arrows;
  270. }
  271. public void isArrowsVisible(bool visible)
  272. {
  273. ArrowsVisible = visible;
  274. }
  275. public void set_tip_car_label(string str)
  276. {
  277. this.Invoke(new Action(() =>
  278. {
  279. this.tip_car_label.Text = str;
  280. }));
  281. }
  282. public void set_car_data_label(string str)
  283. {
  284. this.Invoke(new Action(() =>
  285. {
  286. this.Tip_Label.Text = str;
  287. }));
  288. }
  289. public void set_tip_label(string str)
  290. {
  291. this.Invoke(new Action(() =>
  292. {
  293. this.Statu_Label.Text = str;
  294. }));
  295. }
  296. public void SetCloud(vtkPoints points)
  297. {
  298. lock (m_lock)
  299. {
  300. m_points.DeepCopy(points);
  301. }
  302. }
  303. public void SetCloudColor(Color color)
  304. {
  305. lock (m_lock)
  306. {
  307. m_view_data_source1.SetCloudColor(color);
  308. m_view_data_source2.SetCloudColor(color);
  309. }
  310. }
  311. public void SetCarInfo(Car_info car_info)
  312. {
  313. lock (m_lock)
  314. {
  315. m_car_info = car_info;
  316. }
  317. }
  318. public Color GetColor(float percentage)
  319. {
  320. var red = (percentage > 50 ? 1 - 2 * (percentage - 50) / 100.0 : 1.0) * 255;
  321. var green = (percentage > 50 ? 1.0 : 2 * percentage / 100.0) * 255;
  322. var blue = 0.0;
  323. Color result = Color.FromArgb((int)red, (int)green, (int)blue);
  324. return result;
  325. }
  326. public FormVtk()
  327. {
  328. InitializeComponent();
  329. m_viewer_ledDisplay_thread = new Thread(viewer_ledDisplay);
  330. }
  331. public void viewer_ledDisplay()
  332. {
  333. while (!isClosed)
  334. {
  335. try
  336. {
  337. this.Invoke(new Action(() =>
  338. {
  339. if (m_is_correct)
  340. {
  341. Statu_Label.Text = "车已停好!";
  342. Statu_Label.ForeColor = GetColor(100);
  343. show_correct_tip_image();
  344. SetCloudColor(GetColor(100));
  345. }
  346. else
  347. {
  348. Statu_Label.ForeColor = GetColor(0);
  349. show_error_tip_image();
  350. SetCloudColor(GetColor(0));
  351. }
  352. if (ArrowsVisible)
  353. {
  354. switch (arrows)
  355. {
  356. case Arrows.eArrows_top:
  357. {
  358. this.top_pictureBox.Image = Image.FromFile(System.AppDomain.CurrentDomain.BaseDirectory + "/Resource/arrows/" + "jiantou_xiangshang.png");
  359. top_pictureBox.Visible = true;
  360. down_pictureBox.Visible = false;
  361. left_pictureBox.Visible = false;
  362. right_pictureBox.Visible = false;
  363. upperleft_pictureBox.Visible = false;
  364. upperright_pictureBox.Visible = false;
  365. lowerleft_pictureBox.Visible = false;
  366. lowerright_pictureBox.Visible = false;
  367. }
  368. break;
  369. case Arrows.eArrows_down:
  370. {
  371. this.down_pictureBox.Image = Image.FromFile(System.AppDomain.CurrentDomain.BaseDirectory + "/Resource/arrows/" + "jiantou_xiangxia.png");
  372. top_pictureBox.Visible = false;
  373. down_pictureBox.Visible = true;
  374. left_pictureBox.Visible = false;
  375. right_pictureBox.Visible = false;
  376. upperleft_pictureBox.Visible = false;
  377. upperright_pictureBox.Visible = false;
  378. lowerleft_pictureBox.Visible = false;
  379. lowerright_pictureBox.Visible = false;
  380. }
  381. break;
  382. case Arrows.eArrows_left:
  383. {
  384. this.left_pictureBox.Image = Image.FromFile(System.AppDomain.CurrentDomain.BaseDirectory + "/Resource/arrows/" + "jiantou_xiangzuo.png");
  385. top_pictureBox.Visible = false;
  386. down_pictureBox.Visible = false;
  387. left_pictureBox.Visible = true;
  388. right_pictureBox.Visible = false;
  389. upperleft_pictureBox.Visible = false;
  390. upperright_pictureBox.Visible = false;
  391. lowerleft_pictureBox.Visible = false;
  392. lowerright_pictureBox.Visible = false;
  393. }
  394. break;
  395. case Arrows.eArrows_right:
  396. {
  397. this.right_pictureBox.Image = Image.FromFile(System.AppDomain.CurrentDomain.BaseDirectory + "/Resource/arrows/" + "jiantou_xiangyou.png");
  398. top_pictureBox.Visible = false;
  399. down_pictureBox.Visible = false;
  400. left_pictureBox.Visible = false;
  401. right_pictureBox.Visible = true;
  402. upperleft_pictureBox.Visible = false;
  403. upperright_pictureBox.Visible = false;
  404. lowerleft_pictureBox.Visible = false;
  405. lowerright_pictureBox.Visible = false;
  406. }
  407. break;
  408. case Arrows.eArrows_upperleft:
  409. {
  410. this.upperleft_pictureBox.Image = Image.FromFile(System.AppDomain.CurrentDomain.BaseDirectory + "/Resource/arrows/" + "jiantou_zuoshang.png");
  411. top_pictureBox.Visible = false;
  412. down_pictureBox.Visible = false;
  413. left_pictureBox.Visible = false;
  414. right_pictureBox.Visible = false;
  415. upperleft_pictureBox.Visible = true;
  416. upperright_pictureBox.Visible = false;
  417. lowerleft_pictureBox.Visible = false;
  418. lowerright_pictureBox.Visible = false;
  419. }
  420. break;
  421. case Arrows.eArrows_upperright:
  422. {
  423. this.upperright_pictureBox.Image = Image.FromFile(System.AppDomain.CurrentDomain.BaseDirectory + "/Resource/arrows/" + "jiantou_youshang.png");
  424. top_pictureBox.Visible = false;
  425. down_pictureBox.Visible = false;
  426. left_pictureBox.Visible = false;
  427. right_pictureBox.Visible = false;
  428. upperleft_pictureBox.Visible = false;
  429. upperright_pictureBox.Visible = true;
  430. lowerleft_pictureBox.Visible = false;
  431. lowerright_pictureBox.Visible = false;
  432. }
  433. break;
  434. case Arrows.eArrows_lowerleft:
  435. {
  436. this.lowerleft_pictureBox.Image = Image.FromFile(System.AppDomain.CurrentDomain.BaseDirectory + "/Resource/arrows/" + "jiantou_zuoxia.png");
  437. top_pictureBox.Visible = false;
  438. down_pictureBox.Visible = false;
  439. left_pictureBox.Visible = false;
  440. right_pictureBox.Visible = false;
  441. upperleft_pictureBox.Visible = false;
  442. upperright_pictureBox.Visible = false;
  443. lowerleft_pictureBox.Visible = true;
  444. lowerright_pictureBox.Visible = false;
  445. }
  446. break;
  447. case Arrows.eArrows_lowerright:
  448. {
  449. this.lowerright_pictureBox.Image = Image.FromFile(System.AppDomain.CurrentDomain.BaseDirectory + "/Resource/arrows/" + "jiantou_youxia.png");
  450. top_pictureBox.Visible = false;
  451. down_pictureBox.Visible = false;
  452. left_pictureBox.Visible = false;
  453. right_pictureBox.Visible = false;
  454. upperleft_pictureBox.Visible = false;
  455. upperright_pictureBox.Visible = false;
  456. lowerleft_pictureBox.Visible = false;
  457. lowerright_pictureBox.Visible = true;
  458. }
  459. break;
  460. }
  461. }
  462. else
  463. {
  464. top_pictureBox.Visible = false;
  465. down_pictureBox.Visible = false;
  466. left_pictureBox.Visible = false;
  467. right_pictureBox.Visible = false;
  468. upperleft_pictureBox.Visible = false;
  469. upperright_pictureBox.Visible = false;
  470. lowerleft_pictureBox.Visible = false;
  471. lowerright_pictureBox.Visible = false;
  472. }
  473. }));
  474. }
  475. catch { }
  476. Thread.Sleep(100);
  477. }
  478. }
  479. void viewer_car(Car_info car_info)
  480. {
  481. try
  482. {
  483. vtkRenderer renderer = renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer();
  484. renderer.RemoveActor(m_view_data_source1.m_left_front_wheel_act);
  485. renderer.RemoveActor(m_view_data_source1.m_right_front_wheel_act);
  486. renderer.RemoveActor(m_view_data_source1.m_left_rear_wheel_act);
  487. renderer.RemoveActor(m_view_data_source1.m_right_rear_wheel_act);
  488. m_view_data_source1.update_car_info(car_info);
  489. m_view_data_source2.update_car_info(car_info);
  490. renderer.AddActor(m_view_data_source1.m_left_front_wheel_act);
  491. renderer.AddActor(m_view_data_source1.m_right_front_wheel_act);
  492. renderer.AddActor(m_view_data_source1.m_left_rear_wheel_act);
  493. renderer.AddActor(m_view_data_source1.m_right_rear_wheel_act);
  494. renderWindowControl1.RenderWindow.Render();
  495. }
  496. catch (Exception e)
  497. {
  498. }
  499. }
  500. public void SetBound(double minx, double maxx, double miny,
  501. double maxy, double minz, double maxz)
  502. {
  503. vtkCubeSource cube = vtkCubeSource.New();
  504. cube.SetBounds(minx, maxx, miny, maxy, minz, maxz);
  505. vtkPolyDataMapper mapper = vtkPolyDataMapper.New();
  506. mapper.SetInputConnection(cube.GetOutputPort());
  507. m_bound_act.SetMapper(mapper);
  508. vtkProperty pp = vtkProperty.New();
  509. pp.SetEdgeColor(1, 0, 0);
  510. pp.SetEdgeVisibility(1);
  511. pp.SetColor(1, 1, 1);
  512. pp.SetLineWidth(2);
  513. pp.SetOpacity(0.2);
  514. m_bound_act.SetProperty(pp);
  515. renderWindowControl1.Refresh();
  516. }
  517. private void viewer_cloud(vtkPoints points)
  518. {
  519. if (points.GetReferenceCount() == 0)
  520. return;
  521. try
  522. {
  523. vtkRenderer renderer = renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer();
  524. renderer.RemoveActor(m_view_data_source1.m_cloud_act);
  525. m_view_data_source1.update_cloud(points);
  526. m_view_data_source2.update_cloud(points);
  527. renderer.AddActor(m_view_data_source1.m_cloud_act);
  528. renderWindowControl1.RenderWindow.Render();
  529. }
  530. catch (Exception e)
  531. {
  532. }
  533. }
  534. private void renderWindowControl1_Load(object sender, EventArgs e)
  535. {
  536. vtkRenderer renderer = renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer();
  537. vtkInteractorStyleTrackballCamera style = vtkInteractorStyleTrackballCamera.New(); //移动摄像头
  538. vtkAxesActor axesActor = vtkAxesActor.New(); // 创建“坐标”角色
  539. axesActor.SetScale(1.0, 1.0, 1.0);
  540. axesActor.AxisLabelsOff();
  541. renderer.AddActor(axesActor); // 渲染坐标角色
  542. renderer.AddActor(m_view_data_source1.m_cloud_act);
  543. renderer.AddActor(m_view_data_source1.m_left_front_wheel_act);
  544. renderer.AddActor(m_view_data_source1.m_right_front_wheel_act);
  545. renderer.AddActor(m_view_data_source1.m_left_rear_wheel_act);
  546. renderer.AddActor(m_view_data_source1.m_right_rear_wheel_act);
  547. renderer.AddActor(m_text_act);
  548. renderer.AddActor(m_bound_act);
  549. renderer.SetBackground(1, 1, 1);
  550. renderer.ResetCamera();
  551. renderer.GetActiveCamera().Zoom(1.3);
  552. vtkRenderWindowInteractor renderWindowInteractor = renderWindowControl1.RenderWindow.MakeRenderWindowInteractor();
  553. renderWindowInteractor.SetInteractorStyle(style); //交互模式 重要!
  554. renderWindowInteractor.Initialize();
  555. //renderWindowControl1.Enabled = false;
  556. return;
  557. // Create a simple sphere. A pipeline is created.
  558. /*vtkSphereSource sphere = vtkSphereSource.New();
  559. sphere.SetThetaResolution(8);
  560. sphere.SetPhiResolution(16);
  561. vtkShrinkPolyData shrink = vtkShrinkPolyData.New();
  562. shrink.SetInputConnection(sphere.GetOutputPort());
  563. shrink.SetShrinkFactor(0.9);
  564. vtkPolyDataMapper mapper = vtkPolyDataMapper.New();
  565. mapper.SetInputConnection(shrink.GetOutputPort());
  566. // The actor links the data pipeline to the rendering subsystem
  567. vtkActor actor = vtkActor.New();
  568. actor.SetMapper(mapper);
  569. actor.GetProperty().SetColor(1, 0, 0);
  570. // Create components of the rendering subsystem
  571. //
  572. vtkRenderer ren1 = renderWindowControl1.RenderWindow.GetRenderers().GetFirstRenderer();
  573. vtkRenderWindow renWin = renderWindowControl1.RenderWindow;
  574. // Add the actors to the renderer, set the window size
  575. //
  576. ren1.AddViewProp(actor);
  577. renWin.SetSize(250, 250);
  578. renWin.Render();
  579. vtkCamera camera = ren1.GetActiveCamera();
  580. camera.Zoom(1.5);*/
  581. }
  582. private void renderWindowControl1_Paint(object sender, PaintEventArgs e)
  583. {
  584. //viewer_cloud();
  585. }
  586. //private void set_camera_Click(object sender, EventArgs e)
  587. //{
  588. // double x = double.Parse(xbox.Text);
  589. // double y = double.Parse(ybox.Text);
  590. // double z = double.Parse(zbox.Text);
  591. // double dx = double.Parse(dxbox.Text);
  592. // double dy = double.Parse(dybox.Text);
  593. // double dz = double.Parse(dzbox.Text);
  594. // vtkCamera camera = new vtkCamera(); //-4.1, 0.5,2.0, 0.35,0 0.9
  595. // camera.SetPosition(x, y, z);
  596. // camera.SetViewUp(dx, dy, dz);
  597. // vtkRenderer renderer = renderWindowControl2.RenderWindow.GetRenderers().GetFirstRenderer();
  598. // renderer.SetActiveCamera(camera);
  599. // renderWindowControl2.Refresh();
  600. //}
  601. //private void getdirection_Click(object sender, EventArgs e)
  602. //{
  603. // vtkRenderer renderer = renderWindowControl2.RenderWindow.GetRenderers().GetFirstRenderer();
  604. // double[] d = renderer.GetActiveCamera().GetViewUp();
  605. // double[] p = renderer.GetActiveCamera().GetPosition();
  606. // xbox.Text = p[0].ToString();
  607. // ybox.Text = p[1].ToString();
  608. // zbox.Text = p[2].ToString();
  609. // dxbox.Text = d[0].ToString();
  610. // dybox.Text = d[1].ToString();
  611. // dzbox.Text = d[2].ToString();
  612. //}
  613. //private void btn_car_Click(object sender, EventArgs e)
  614. //{
  615. // Car_info car_info = new Car_info();
  616. // car_info.correct = true;
  617. // car_info.cx = double.Parse(cx_box.Text);
  618. // car_info.cy = double.Parse(cy_box.Text);
  619. // car_info.theta = double.Parse(theta_box.Text) / 180.0 * Math.PI;
  620. // car_info.wheel_base = double.Parse(wheel_base_box.Text);
  621. // car_info.width = double.Parse(width_box.Text);
  622. // car_info.front_theta = double.Parse(front_theta_box.Text) / 180.0 * Math.PI;
  623. // viewer_car(car_info);
  624. //}
  625. private void button_play_sound_Click(object sender, EventArgs e)
  626. {
  627. //UILocalize.InfoTitle = "提示";
  628. //UILocalize.SuccessTitle = "正确";
  629. //UILocalize.WarningTitle = "警告";
  630. //UILocalize.ErrorTitle = "错误";
  631. //UILocalize.AskTitle = "提示";
  632. //UILocalize.InputTitle = "输入";
  633. //UILocalize.CloseAll = "全部关闭";
  634. //UILocalize.OK = "确定";
  635. //UILocalize.Cancel = "取消";
  636. //UILocalize.GridNoData = "[ 无数据 ]";
  637. //UILocalize.GridDataLoading = "数据加载中 ......";
  638. //UILocalize.GridDataSourceException = "数据源必须为DataTable或者List";
  639. m_sound_player.SoundLocation = "C:\\Users\\Administrator\\Desktop\\文件\\kldykxq.wav";
  640. m_sound_player.Load();
  641. m_sound_player.PlayLooping();
  642. }
  643. private void button_stop_sound_Click(object sender, EventArgs e)
  644. {
  645. m_sound_player.Stop();
  646. }
  647. public void HandleTime(Object myObject, EventArgs myEventArgs)
  648. {
  649. lock (m_lock)
  650. {
  651. viewer_cloud(m_points);
  652. viewer_car(m_car_info);
  653. }
  654. }
  655. private void FormVtk_Load(object sender, EventArgs e)
  656. {
  657. //设置定时器属性
  658. m_timerGetTime.Tick += new EventHandler(HandleTime);
  659. m_timerGetTime.Interval = 50;
  660. m_timerGetTime.Enabled = true;
  661. //开启定时器
  662. m_timerGetTime.Start();
  663. m_viewer_ledDisplay_thread.Start();
  664. //设置最大化
  665. //this.WindowState = FormWindowState.Maximized;
  666. var screens = Screen.AllScreens;
  667. m_auto_resize_form.controllInitializeSize(this);
  668. /*//若当前只有一块显示器
  669. if (Screen.AllScreens.Length < 2)
  670. return;
  671. //0主显示器(系统默认,可设置哪块显示器为主显示器)1扩展显示器
  672. this.Location = new Point(screens[1].Bounds.Left, screens[1].Bounds.Top);
  673. this.FormBorderStyle = FormBorderStyle.None; //设置窗体为无边框样式
  674. this.WindowState = FormWindowState.Maximized; //最大化窗体*/
  675. }
  676. private void FormVtk_FormClosing(object sender, FormClosingEventArgs e)
  677. {
  678. m_timerGetTime.Stop();
  679. isClosed = true;
  680. }
  681. public void FormVtkUninit()
  682. {
  683. isClosed = true;
  684. m_viewer_ledDisplay_thread.Abort();
  685. m_timerGetTime.Stop();
  686. }
  687. private void FormVtk_SizeChanged(object sender, EventArgs e)
  688. {
  689. m_auto_resize_form.controlAutoSize(this);
  690. }
  691. public void show_correct_tip_image()
  692. {
  693. this.results_pictureBox.Image = Image.FromFile(System.AppDomain.CurrentDomain.BaseDirectory + "/Resource/tipimage/" + "0.ico");
  694. }
  695. public void show_error_tip_image()
  696. {
  697. this.results_pictureBox.Image = Image.FromFile(System.AppDomain.CurrentDomain.BaseDirectory + "/Resource/tipimage/" + "1.ico");
  698. }
  699. }
  700. }