qvtkrenderer.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570
  1. #include "qvtkrenderer.h"
  2. /*
  3. * @brief: the constructor
  4. * @param: void
  5. * @ret: void
  6. * @birth: created by czm in 20230321
  7. */
  8. QVTKRenderer::QVTKRenderer()
  9. {
  10. qvtkWidget = NULL;
  11. renderWin = NULL;
  12. renderer = NULL;
  13. camera_ = NULL;
  14. curRenderMode_ = 1;
  15. surfaceVisible_ = false;
  16. axes = NULL;
  17. omWidget = NULL;
  18. }
  19. /*
  20. * @brief: the destructor
  21. * @param: void
  22. * @ret: void
  23. * @birth: created by czm in 20230321
  24. */
  25. QVTKRenderer::~QVTKRenderer()
  26. {
  27. if(this->renderer){
  28. this->renderer->Delete();
  29. this->renderer = NULL;
  30. }
  31. if(this->renderWin){
  32. this->renderWin->Delete();
  33. this->renderWin = NULL;
  34. }
  35. if(this->camera_){
  36. this->camera_->Delete();
  37. this->camera_ = NULL;
  38. }
  39. if(this->qvtkWidget){
  40. delete this->qvtkWidget;
  41. this->qvtkWidget = NULL;
  42. }
  43. if(axes){
  44. axes->Delete();
  45. axes = NULL;
  46. }
  47. if(omWidget){
  48. omWidget->Delete();
  49. omWidget = NULL;
  50. }
  51. }
  52. /*
  53. * @brief: init(初始化)
  54. * @param: void
  55. * @ret: void
  56. * @birth: created by czm in 20230406
  57. */
  58. void QVTKRenderer::init()
  59. {
  60. qvtkWidget = new QVTKOpenGLNativeWidget();
  61. this->renderWin = vtkGenericOpenGLRenderWindow::New();
  62. renderer = vtkRenderer::New();
  63. renderer->SetBackground(1.0,1.0,1.0);
  64. this->renderWin->AddRenderer(this->renderer);
  65. qvtkWidget->SetRenderWindow(this->renderWin);
  66. camera_ = vtkVISCameraManager::New();
  67. camera_->SetRenderTo(this->renderer);
  68. surfaceVisible_ = true;
  69. curRenderMode_ = 1;
  70. curSelMode_ = EntitySelection;
  71. axes = vtkAxesActor::New();//左下角坐标轴
  72. axes->SetPosition(0, 0, 0);
  73. axes->SetTotalLength(2, 2, 2);
  74. axes->SetShaftType(0);
  75. axes->SetCylinderRadius(0.02);
  76. omWidget = vtkOrientationMarkerWidget::New();
  77. omWidget->SetOrientationMarker(axes);
  78. omWidget->SetInteractor(renderWin->GetInteractor());
  79. omWidget->SetEnabled(1);
  80. omWidget->InteractiveOn();
  81. //widgetFlag = WidgetModel::NoModel;
  82. }
  83. /*
  84. * @brief: Capture widget Images(截取窗口图片)
  85. * @param: void
  86. * @ret: void
  87. * @birth: created by czm in 20230406
  88. */
  89. void QVTKRenderer::CaptureWindowImages()
  90. {
  91. if(qvtkWidget == NULL) return;
  92. QPixmap pix = qvtkWidget->grab();
  93. QByteArray bytes;
  94. QBuffer buffer(&bytes);
  95. buffer.open(QIODevice::WriteOnly);
  96. pix.save(&buffer,"PNG");
  97. img = QString(bytes.toBase64());//转base64
  98. //emit sendImgFile(img); //发送图片(信号)
  99. }
  100. /*
  101. * @brief: get the widget
  102. * @param: void
  103. * @ret: widget
  104. * @birth: created by czm in 20230321
  105. */
  106. QWidget *QVTKRenderer::GetWidget()
  107. {
  108. return this->qvtkWidget;
  109. }
  110. /*
  111. * @brief: get the renderer
  112. * @param: void
  113. * @ret: renderer
  114. * @birth: created by czm in 20230321
  115. */
  116. vtkRenderer *QVTKRenderer::GetRenderer()
  117. {
  118. return this->renderer;
  119. }
  120. /*
  121. * @brief: show render widget maximum.
  122. * @param: void
  123. * @ret: void
  124. * @birth: created by czm in 20230321
  125. */
  126. void QVTKRenderer::Show()
  127. {
  128. qvtkWidget->showMaximized();
  129. }
  130. /*
  131. * @brief: update this view
  132. * @param: void
  133. * @ret: void
  134. * @birth: created by czm in 20230321
  135. */
  136. void QVTKRenderer::Update()
  137. {
  138. this->renderWin->Render();
  139. }
  140. /*
  141. * @brief: set smooth transite.
  142. * @param: void
  143. * @ret: void
  144. * @birth: created by czm in 20230321
  145. */
  146. void QVTKRenderer::EnableSmoothTransition(bool onOff)
  147. {
  148. Q_UNUSED(onOff);
  149. }
  150. /*
  151. * @brief: set renderer axis visible or not.
  152. * @param: void
  153. * @ret: void
  154. * @birth: created by czm in 20230321
  155. */
  156. void QVTKRenderer::SetAxisVisible(bool onOff)
  157. {
  158. Q_UNUSED(onOff);
  159. }
  160. /*
  161. * @brief: zoom to extents
  162. * @param: void
  163. * @ret: void
  164. * @birth: created by czm in 20230322
  165. */
  166. void QVTKRenderer::ZoomToExtents()
  167. {
  168. camera_->GetCamera();
  169. this->camera_->Relocate();
  170. Update();
  171. }
  172. /*
  173. * @brief:
  174. * @brief set mouse action to default.
  175. * With no key press, orbits.
  176. * With the Shift key down, pans.
  177. * With the Ctrl key down, zooms.
  178. * @param: void
  179. * @ret: void
  180. * @birth: created by czm in 20230322
  181. */
  182. void QVTKRenderer::Op_Default()
  183. {
  184. }
  185. /*
  186. * @brief: set mouse action zoom to window
  187. * @param: void
  188. * @ret: void
  189. * @birth: created by czm in 20230322
  190. */
  191. void QVTKRenderer::Op_ZoomToWindow()
  192. {
  193. }
  194. /*
  195. * @brief: set mouse action orbit.
  196. * @param: void
  197. * @ret: void
  198. * @birth: created by czm in 20230322
  199. */
  200. void QVTKRenderer::Op_Orbit()
  201. {
  202. }
  203. /*
  204. * @brief: set mouse action pan.
  205. * @param: void
  206. * @ret: void
  207. * @birth: created by czm in 20230322
  208. */
  209. void QVTKRenderer::Op_Pan()
  210. {
  211. }
  212. /*
  213. * @brief: set mouse action zoom.
  214. * @param: void
  215. * @ret: void
  216. * @birth: created by czm in 20230322
  217. */
  218. void QVTKRenderer::Op_Zoom()
  219. {
  220. }
  221. /*
  222. * @brief: set mouse action to single selection.
  223. * @param: void
  224. * @ret: void
  225. * @birth: created by czm in 20230322
  226. */
  227. void QVTKRenderer::Op_SingleClickSelect()
  228. {
  229. }
  230. /*
  231. * @brief: set mouse action to window selection.
  232. * @param: void
  233. * @ret: void
  234. * @birth: created by czm in 20230322
  235. */
  236. void QVTKRenderer::Op_WindowSelect()
  237. {
  238. }
  239. /*
  240. * @brief: set view direction to front
  241. * @param: void
  242. * @ret: void
  243. * @birth: created by czm in 20230322
  244. */
  245. void QVTKRenderer::FrontView()
  246. {
  247. }
  248. /*
  249. * @brief: set view direction to back
  250. * @param: void
  251. * @ret: void
  252. * @birth: created by czm in 20230322
  253. */
  254. void QVTKRenderer::BackView()
  255. {
  256. }
  257. /*
  258. * @brief: set view direction to top
  259. * @param: void
  260. * @ret: void
  261. * @birth: created by czm in 20230322
  262. */
  263. void QVTKRenderer::TopView()
  264. {
  265. }
  266. /*
  267. * @brief: set view direction to bottom
  268. * @param: void
  269. * @ret: void
  270. * @birth: created by czm in 20230322
  271. */
  272. void QVTKRenderer::BottomView()
  273. {
  274. }
  275. /*
  276. * @brief: set view direction to left
  277. * @param: void
  278. * @ret: void
  279. * @birth: created by czm in 20230322
  280. */
  281. void QVTKRenderer::LeftView()
  282. {
  283. }
  284. /*
  285. * @brief: set view direction to right
  286. * @param: void
  287. * @ret: void
  288. * @birth: created by czm in 20230322
  289. */
  290. void QVTKRenderer::RightView()
  291. {
  292. }
  293. /*
  294. * @brief: set view direction to isometric
  295. * @param: void
  296. * @ret: void
  297. * @birth: created by czm in 20230322
  298. */
  299. void QVTKRenderer::IsoMetricView()
  300. {
  301. }
  302. /*
  303. * @brief: set render mode
  304. * 0: wireframe
  305. * 1: shaded
  306. * 2: shaded with edges
  307. * others: hide faces
  308. * @param: void
  309. * @ret: void
  310. * @birth: created by czm in 20230322
  311. */
  312. void QVTKRenderer::SetRenderMode(int mode)
  313. {
  314. if(mode>=0&&mode<=2)this->curRenderMode_ = mode;
  315. vtkActorCollection* collection=this->renderer->GetActors();
  316. int num = collection->GetNumberOfItems();
  317. collection->InitTraversal();
  318. for(int i=0;i<num;i++){
  319. if(this->curRenderMode_ == 0){
  320. vtkActor* actor = collection->GetNextActor();
  321. actor->GetProperty()->SetRepresentationToWireframe();
  322. actor->GetProperty()->EdgeVisibilityOff();
  323. Update();
  324. }else if(this->curRenderMode_ == 1){
  325. vtkActor* actor = collection->GetNextActor();
  326. actor->GetProperty()->SetRepresentationToSurface();
  327. actor->GetProperty()->EdgeVisibilityOff();
  328. Update();
  329. }else if(this->curRenderMode_ == 2){
  330. vtkActor * actor = collection->GetNextActor();
  331. actor->GetProperty()->SetRepresentationToSurface();
  332. actor->GetProperty()->EdgeVisibilityOn();
  333. Update();
  334. }
  335. }
  336. }
  337. /*
  338. * @brief: set geometry-point visible or not.
  339. * @param: bool
  340. * @ret: void
  341. * @birth: created by czm in 20230322
  342. */
  343. void QVTKRenderer::SetPointVisible(bool onOff)
  344. {
  345. Q_UNUSED(onOff);
  346. }
  347. /*
  348. * @brief: set geometry-curve visible or not.
  349. * @param: bool
  350. * @ret: void
  351. * @birth: created by czm in 20230322
  352. */
  353. void QVTKRenderer::SetCurveVisible(bool onOff)
  354. {
  355. Q_UNUSED(onOff);
  356. }
  357. /*
  358. * @brief: set geometry-surface visible or not.
  359. * @param: bool
  360. * @ret: void
  361. * @birth: created by czm in 20230322
  362. */
  363. void QVTKRenderer::SetSurfaceVisible(bool onOff)
  364. {
  365. surfaceVisible_ = true;
  366. if (onOff) SetRenderMode(curRenderMode_);
  367. else SetRenderMode(-1);
  368. surfaceVisible_ = onOff;
  369. }
  370. /*
  371. * @brief: set the point selection mode
  372. * @param: void
  373. * @ret: void
  374. * @birth: created by czm in 20230322
  375. */
  376. void QVTKRenderer::SetSelectionLevelToPoint()
  377. {
  378. if (curSelMode_ == PointSelection) return;
  379. else
  380. {
  381. SetPointVisible(true);
  382. setSelectionLevelToEntity();
  383. curSelMode_ = PointSelection;
  384. }
  385. }
  386. /*
  387. * @brief: set the surface selection mode
  388. * @param: void
  389. * @ret: void
  390. * @birth: created by czm in 20230322
  391. */
  392. void QVTKRenderer::SetSelectionLevelToSurface()
  393. {
  394. if (curSelMode_ == SurfaceSelection) return;
  395. else
  396. {
  397. SetSurfaceVisible(true);
  398. this->setSelectionLevelToEntity();
  399. curSelMode_ = SurfaceSelection;
  400. }
  401. }
  402. /*
  403. * @brief: set the entity selection mode
  404. * @param: void
  405. * @ret: void
  406. * @birth: created by czm in 20230322
  407. */
  408. void QVTKRenderer::SetSelectionLevelToEntity()
  409. {
  410. if (curSelMode_ == EntitySelection) return;
  411. else
  412. {
  413. this->setSelectionLevelToEntity();
  414. curSelMode_ = EntitySelection;
  415. }
  416. }
  417. /*
  418. * @brief: set the entity selection level
  419. * @param: void
  420. * @ret: void
  421. * @birth: created by czm in 20230322
  422. */
  423. void QVTKRenderer::setSelectionLevelToEntity()
  424. {
  425. }
  426. /*
  427. * @brief: set the subentity selection level.
  428. * @param: void
  429. * @ret: void
  430. * @birth: created by czm in 20230322
  431. */
  432. void QVTKRenderer::setSelectionLevelToSubentity()
  433. {
  434. }
  435. /*
  436. * @brief: set point size in render window.
  437. * @param: size
  438. * @ret: void
  439. * @birth: created by czm in 20230322
  440. */
  441. void QVTKRenderer::SetPointSize(float size)
  442. {
  443. Q_UNUSED(size);
  444. }
  445. /*
  446. * @brief: set line width in render window.
  447. * @param: width
  448. * @ret: void
  449. * @birth: created by czm in 20230322
  450. */
  451. void QVTKRenderer::SetLineWidth(float width)
  452. {
  453. Q_UNUSED(width);
  454. }
  455. /*
  456. * @brief: hide all actors
  457. * @param: void
  458. * @ret: void
  459. * @birth: created by czm in 20230322
  460. */
  461. void QVTKRenderer::HideAllActors()
  462. {
  463. vtkPropCollection* pc = renderer->GetViewProps();
  464. pc->InitTraversal();
  465. for(int i = 0; i < pc->GetNumberOfItems(); i ++)
  466. {
  467. pc->GetNextProp()->VisibilityOff();
  468. }
  469. //0425 append
  470. renderer->ResetCamera();
  471. renderWin->Render();
  472. }
  473. /*
  474. * @brief: remove all actors
  475. * @param: void
  476. * @ret: void
  477. * @birth: created by czm in 20230322
  478. */
  479. void QVTKRenderer::RemoveAllActors()
  480. {
  481. //this->renderer->RemoveAllViewProps();
  482. vtkActorCollection * allActor = renderer->GetActors();
  483. vtkCollectionSimpleIterator pit;
  484. vtkActor *currActor = nullptr;
  485. for (allActor->InitTraversal(pit);(currActor = allActor->GetNextActor(pit)); )
  486. {
  487. renderer->RemoveActor(currActor);
  488. }
  489. }